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.
Todo
add other variables to private if necessary
!!OMP PARALLEL &
!!OMP PRIVATE(iBC, iDir, iAlign, iFace) &
!!OMP DEFAULT(shared)
Todo
replace by subroutine call for OpenMP
@todo replace by subroutine call for OpenMP
!!OMP END PARALLEL
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.