sBase_applyBCtoDOF_LGM Subroutine

private subroutine sBase_applyBCtoDOF_LGM(sf, DOFs, BC_Type, BC_Val)

Uses

  • proc~~sbase_applybctodof_lgm~~UsesGraph proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM module~modgvec_linalg MODgvec_LinAlg proc~sbase_applybctodof_lgm->module~modgvec_linalg module~modgvec_globals MODgvec_Globals module~modgvec_linalg->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env

apply boundary conditions at axis and edge, via solving the Lagrange multiplier problem: x_new=x_old & A*x_new = d

| 0 A | |lambda| | d | | | | | = | | | A^T I | | xnew | | xold |

Type Bound

t_sBase

Arguments

Type IntentOptional Attributes Name
class(t_sBase), intent(in) :: sf

self

real(kind=wp), intent(inout) :: DOFs(1:sf%nBase)

DOFs with boundary conditions applied

integer, intent(in) :: BC_Type(2)

bc type on axis (1) and edge (2)

real(kind=wp), intent(in) :: BC_Val(2)

for dirichlet BC : value


Calls

proc~~sbase_applybctodof_lgm~~CallsGraph proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~solve SOLVE proc~sbase_applybctodof_lgm->proc~solve dgetrf dgetrf proc~solve->dgetrf dgetrs dgetrs proc~solve->dgetrs

Called by

proc~~sbase_applybctodof_lgm~~CalledByGraph proc~sbase_applybctodof_lgm t_sBase%sBase_applyBCtoDOF_LGM proc~addboundaryperturbation AddBoundaryPerturbation proc~addboundaryperturbation->proc~sbase_applybctodof_lgm proc~applybc_fstrong ApplyBC_Fstrong proc~applybc_fstrong->proc~sbase_applybctodof_lgm proc~get_field Get_Field proc~get_field->proc~sbase_applybctodof_lgm proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->proc~sbase_applybctodof_lgm proc~initsolution InitSolution proc~initsolution->proc~sbase_applybctodof_lgm proc~sbase_test sBase_test proc~sbase_test->proc~sbase_applybctodof_lgm proc~sbase_new sBase_new proc~sbase_test->proc~sbase_new proc~to_spline_with_bc to_spline_with_BC proc~to_spline_with_bc->proc~sbase_applybctodof_lgm proc~buildtransform_sfl t_transform_sfl%BuildTransform_SFL proc~buildtransform_sfl->proc~to_spline_with_bc proc~transform_angles_3d Transform_Angles_3d proc~buildtransform_sfl->proc~transform_angles_3d proc~transform_angles_sinterp Transform_Angles_sinterp proc~buildtransform_sfl->proc~transform_angles_sinterp proc~evalforce EvalForce proc~evalforce->proc~applybc_fstrong proc~gvec_to_jorek_prepare gvec_to_jorek_prepare proc~gvec_to_jorek_prepare->proc~get_field proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->proc~addboundaryperturbation proc~initsolutionmhd3d->proc~init_la_from_solution proc~initsolutionmhd3d->proc~initsolution proc~initsolutionmhd3d->proc~evalforce proc~sbase_init t_sBase%sBase_init proc~sbase_init->proc~sbase_test proc~transform_angles_3d->proc~to_spline_with_bc proc~transform_angles_sinterp->proc~to_spline_with_bc proc~minimizemhd3d_descent MinimizeMHD3D_descent proc~minimizemhd3d_descent->proc~evalforce proc~sbase_copy t_sBase%sBase_copy proc~sbase_copy->proc~sbase_init proc~sbase_new->proc~sbase_init program~gvec_post GVEC_POST program~gvec_post->proc~evalforce proc~base_copy t_base%base_copy proc~base_copy->proc~sbase_copy proc~base_new Base_new proc~base_new->proc~sbase_new proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~minimizemhd3d->proc~minimizemhd3d_descent proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~sbase_new proc~readstatefilefromascii->proc~base_new interface~readstate ReadState interface~readstate->proc~readstatefilefromascii proc~init_base Init_Base proc~init_base->proc~base_new proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~base_new proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new proc~init_gvec_to_jorek init_gvec_to_jorek proc~init_gvec_to_jorek->interface~readstate proc~init_gvec_to_jorek->proc~init_base proc~restartfromstate RestartFromState proc~restartfromstate->interface~readstate proc~transform_sfl_new transform_sfl_new proc~transform_sfl_new->proc~transform_sfl_init

Source Code

SUBROUTINE sBase_applyBCtoDOF_LGM(sf ,DOFs,BC_Type,BC_val)
! MODULES
USE MODgvec_linalg, ONLY: SOLVE
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
  CLASS(t_sbase), INTENT(IN   ) :: sf    !! self
  INTEGER       , INTENT(IN   ) :: BC_Type(2)           !! bc type on axis (1) and edge (2)
  REAL(wp)      , INTENT(IN   ) :: BC_Val(2)           !! for dirichlet BC : value
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
  REAL(wp)      , INTENT(INOUT) :: DOFs(1:sf%nBase)  !! DOFs with boundary conditions applied
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL(wp):: r(0:sf%deg)
!===================================================================================================================================
  ASSOCIATE( tBCaxis => BC_TYPE(BC_AXIS)             &
            ,tBCedge => BC_TYPE(BC_EDGE)             &
            ,nDaxis  => sf%nDOF_BC(BC_Type(BC_AXIS)) & !number of dofs involved in BC axis
            ,nDedge  => sf%nDOF_BC(BC_Type(BC_EDGE)) & !number of dofs involved in BC edge
            ,nB      => sf%nBase                     &
            ,deg     => sf%deg                       )
  SELECT CASE(tBCaxis)
  CASE(BC_TYPE_OPEN)
    !do noting
  CASE(BC_TYPE_DIRICHLET)
    DOFs(1)=BC_Val(BC_AXIS)
  CASE DEFAULT !BC_TYPE_SYMM,BC_TYPE_SYMMZERO,BC_TYPE_ANTISYMM,m-dependent
    r(:) = DOFs(1:deg+1)
    r(:) = MATMUL(sf%R_axis(:,:,tBCaxis),r(:))
    DOFs(1:deg+1)= SOLVE(sf%AR_axis(:,:,tBCaxis),r(:))
  END SELECT !tBCaxis

  SELECT CASE(tBCedge)
  CASE(BC_TYPE_OPEN)
    !do noting
  CASE(BC_TYPE_DIRICHLET)
    DOFs(nB)=BC_Val(BC_EDGE)
  CASE DEFAULT !BC_TYPE_SYMM,BC_TYPE_SYMMZERO,BC_TYPE_ANTISYMM
    r(:) = DOFs(nB-deg:nB)
    r(:) = MATMUL(sf%R_edge(:,:,tBCedge),r(:))
    DOFs(nB-deg:nB)= SOLVE(sf%AR_edge(:,:,tBCedge),r(:))
  END SELECT !tBCedge
  END ASSOCIATE

END SUBROUTINE sbase_applyBCtoDOF_LGM