atl_modg_1d_set_bnd Subroutine

public subroutine atl_modg_1d_set_bnd(bc, boundary, facedata, statedata, poly_proj, material, equation, tree, time, mesh)

Subroutine to set face values to impose boundary conditions.

We set the "outer" state according to the configure boundary condition.

For all variables, where a Dirichlet condition is imposed, this value is fixed and simply set. It might be that a variable transformation is necessary, or we need to perform a transformation to nodal space, all of this is taken care of in atl_modg_1d_bnd, which is called in this routine.

For Neumann boundaries, the default approach is to just use the value at the boundary also for the "outer" face value, such that in the flux left and right state of the variable is always the same. However, this is sensitive to oscillations and may easily cause stability issues. Alternatively we can also compute a new value by modifying the polynomial in the element to have a zero gradient on the boundary enforced and then use this value for the extrapolated "outer" state instead. For details see the [Neumann boundary conditions](page/neumann_boundaries.md].

The subroutine is operating levelwise.

Arguments

TypeIntentOptionalAttributesName
type(atl_boundary_type), intent(in) :: bc(:)

The global description of the boundaries.

type(atl_level_boundary_type), intent(in) :: boundary

The levelwise collection of boundary elements and boundary faces.

type(atl_facedata_type), intent(inout) :: facedata

The face data on the current level

type(atl_statedata_type), intent(inout) :: statedata

The state data on the current level

type(ply_poly_project_type), intent(inout) :: poly_proj

Data for the projection methods

type(atl_faceMaterialData_type), intent(in), optional :: material

Material description of the faces contained in boundary. One entry for each spatial direction, i.e. x,y.

type(atl_Equations_type), intent(in) :: equation

The underlying equation system

type(treelmesh_type), intent(in) :: tree

treelm mesh

type(tem_time_type), intent(in) :: time

The absolute time point.

type(atl_cube_elem_type), intent(in) :: mesh

The description of the mesh on the current level.


Calls

proc~~atl_modg_1d_set_bnd~~CallsGraph proc~atl_modg_1d_set_bnd atl_modg_1d_set_bnd proc~atl_modg_1d_bnd atl_modg_1d_bnd proc~atl_modg_1d_set_bnd->proc~atl_modg_1d_bnd proc~modg_1d_modal_bnd modg_1d_modal_bnd proc~atl_modg_1d_bnd->proc~modg_1d_modal_bnd proc~modg_1d_nodal_bnd modg_1d_nodal_bnd proc~atl_modg_1d_bnd->proc~modg_1d_nodal_bnd proc~tem_abort tem_abort proc~modg_1d_modal_bnd->proc~tem_abort proc~modg_1d_bnd_mirrormodalconst modg_1d_bnd_mirrorModalConst proc~modg_1d_modal_bnd->proc~modg_1d_bnd_mirrormodalconst proc~modg_1d_bnd_extrapolate modg_1d_bnd_extrapolate proc~modg_1d_modal_bnd->proc~modg_1d_bnd_extrapolate proc~modg_1d_bnd_mirrorpoint modg_1d_bnd_mirrorPoint proc~modg_1d_modal_bnd->proc~modg_1d_bnd_mirrorpoint proc~modg_1d_nodal_bnd->proc~tem_abort proc~modg_1d_nodal_bnd->proc~modg_1d_bnd_extrapolate proc~modg_1d_nodal_bnd->proc~modg_1d_bnd_mirrorpoint proc~ply_get_quadpoints_faces_1d ply_get_quadpoints_faces_1d proc~modg_1d_bnd_mirrorpoint->proc~ply_get_quadpoints_faces_1d proc~atl_reftophyscoord atl_refToPhysCoord proc~modg_1d_bnd_mirrorpoint->proc~atl_reftophyscoord

Called by

proc~~atl_modg_1d_set_bnd~~CalledByGraph proc~atl_modg_1d_set_bnd atl_modg_1d_set_bnd proc~preprocess_rhs_cubes preprocess_rhs_cubes proc~preprocess_rhs_cubes->proc~atl_modg_1d_set_bnd interface~atl_preprocess_rhs atl_preprocess_rhs interface~atl_preprocess_rhs->proc~preprocess_rhs_cubes proc~rktaylor_substep rktaylor_substep proc~rktaylor_substep->interface~atl_preprocess_rhs proc~rktaylor_substep->proc~rktaylor_substep proc~rk2_substep rk2_substep proc~rk2_substep->interface~atl_preprocess_rhs proc~rk2_substep->proc~rk2_substep proc~rk4_substep rk4_substep proc~rk4_substep->interface~atl_preprocess_rhs proc~rk4_substep->proc~rk4_substep proc~imexrk_substep imexrk_substep proc~imexrk_substep->interface~atl_preprocess_rhs proc~imexrk_substep->proc~imexrk_substep proc~mesh_timestep_euler mesh_timestep_euler proc~mesh_timestep_euler->interface~atl_preprocess_rhs proc~mesh_timestep_euler->proc~mesh_timestep_euler proc~global_corrector_substep global_corrector_substep proc~global_corrector_substep->interface~atl_preprocess_rhs proc~mesh_timestep_rktaylor mesh_timestep_rktaylor proc~mesh_timestep_rktaylor->proc~rktaylor_substep proc~mesh_timestep_predcor_cerk4 mesh_timestep_predcor_cerk4 proc~mesh_timestep_predcor_cerk4->proc~global_corrector_substep none~substep substep none~substep->proc~rk4_substep proc~mesh_timestep_imexrk mesh_timestep_imexrk proc~mesh_timestep_imexrk->proc~imexrk_substep proc~mesh_timestep_ssprk2 mesh_timestep_ssprk2 proc~mesh_timestep_ssprk2->proc~rk2_substep

Contents


Variables

TypeVisibilityAttributesNameInitial
integer, private :: nBCs
integer, private :: facePos
integer, private :: neighPos
integer, private :: neighAlign
integer, private :: nScalars
integer, private :: nModes
integer, private :: iMode
integer, private :: iBC
integer, private :: iDir
integer, private :: iFace
integer, private :: iAlign
real(kind=rk), private, allocatable:: faceOp(:,:)
real(kind=rk), private :: dx
real(kind=rk), private :: sigmod(size(statedata%state,3))
real(kind=rk), private :: bndBaryCoord(1:3)
real(kind=rk), private :: corrector(size(statedata%state,3))
real(kind=rk), private, allocatable:: faceMaterial(:,:)
integer, private :: sidefact
integer, private :: signfact