atl_modg_1d_kernel_module Module

Module for routines and datatypes of MOdal Discontinuous Galerkin (MODG) scheme. This scheme is a spectral scheme for linear, purley hyperbolic partial differential equation systems.

Todo

HK: Split this module into three: a common one, a Q part and a P part.


Uses

Used by

  • module~~atl_modg_1d_kernel_module~~UsedByGraph module~atl_modg_1d_kernel_module atl_modg_1d_kernel_module module~atl_container_module atl_container_module module~atl_container_module->module~atl_modg_1d_kernel_module proc~compute_rhs_cubes_modg_1d compute_rhs_cubes_modg_1d proc~compute_rhs_cubes_modg_1d->module~atl_modg_1d_kernel_module proc~modg_1d_compute_project_physflux modg_1d_compute_project_physFlux proc~modg_1d_compute_project_physflux->module~atl_modg_1d_kernel_module proc~postprocess_rhs_cubes postprocess_rhs_cubes proc~postprocess_rhs_cubes->module~atl_modg_1d_kernel_module proc~preprocess_rhs_cubes preprocess_rhs_cubes proc~preprocess_rhs_cubes->module~atl_modg_1d_kernel_module module~atl_initialize_module atl_initialize_module module~atl_initialize_module->module~atl_container_module module~atl_program_module atl_program_module module~atl_program_module->module~atl_container_module module~atl_program_module->module~atl_initialize_module program~ateles ateles program~ateles->module~atl_container_module program~ateles->module~atl_program_module program~atl_harvesting atl_harvesting program~atl_harvesting->module~atl_container_module program~atl_harvesting->module~atl_initialize_module program~atl_harvesting->module~atl_program_module

Subroutines

public subroutine atl_preprocess_modg_1d_kernel(currentLevel, minLevel, maxLevel, equation, statedata, mesh_list, boundary_list, scheme_list, poly_proj_material, material_list, commPattern, proc)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: currentLevel
integer, intent(in) :: minLevel
integer, intent(in) :: maxLevel
type(atl_Equations_type), intent(inout) :: equation
type(atl_statedata_type), intent(inout) :: statedata
type(atl_cube_elem_type), intent(inout) :: mesh_list(minlevel:maxlevel)
type(atl_level_boundary_type), intent(in) :: boundary_list(minlevel:maxLevel)
type(atl_scheme_type), intent(inout) :: scheme_list(minlevel:maxlevel)
type(ply_poly_project_type), intent(inout) :: poly_proj_material
type(atl_material_type), intent(inout) :: material_list(minlevel:maxlevel)
type(tem_commPattern_type), intent(inout) :: commPattern

mpi communication pattern type

type(tem_comm_env_type), intent(inout) :: proc

mpi communication environment with mpi communicator

public subroutine atl_init_modg_1d_kernel(kerneldata_list, statedata_list, statedata_stab_list, mesh_list, scheme_list, boundary_list, boundary_stab_list, equation, tree, time, commPattern, need_deviation)

Initiate the MODG kernel for cubic elements on all levels.

Arguments

Type IntentOptional Attributes Name
type(atl_kerneldata_type), allocatable :: kerneldata_list(:)

Array of kerneldata_types, one for each level. They will be initialized.

type(atl_statedata_type), allocatable :: statedata_list(:)

Array of statedata_types, one for each level.

type(atl_statedata_type), allocatable :: statedata_stab_list(:,:)
type(atl_cube_elem_type), allocatable :: mesh_list(:)

List of cubic meshes. One entry per level.

type(atl_scheme_type), allocatable :: scheme_list(:)

List of schemes on the levels.

type(atl_level_boundary_type), allocatable :: boundary_list(:)

The boundary description for the faces on the current level.

type(atl_level_boundary_type), allocatable :: boundary_stab_list(:)

The boundary description for the faces on the current level.

type(atl_Equations_type) :: equation

The equation type.

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

The tree of the simulation domain

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

current time

type(tem_commPattern_type), intent(in) :: commPattern

mpi communication pattern type

logical, intent(in) :: need_deviation

Flag to indicate whether maximal polynomial deviations should be computed for the state.

public subroutine atl_modg_1d_project_testFunc(mesh, equation, kerneldata, facedata, sourcedata, penalizationdata, usePenalization, level, scheme)

Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type), intent(in) :: mesh

Descritption of the cubical elements in the mesh

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

The equation description.

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. Holds the physical fluxes.

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

The representation on the face + representation of the flux.

type(atl_source_type), intent(inout) :: sourcedata

Modal representation of the sources.

type(atl_penalizationData_type), intent(in) :: penalizationdata

Volumetric data for the penalization

logical, intent(in) :: usePenalization

Flag to indicate whether the penalization data has to be considered, or if it is taken care of somewhere else (imex)

integer, intent(in) :: level

The level you compute for

type(atl_modg_1d_scheme_type), intent(in) :: scheme

The parameters of the MODG scheme

public subroutine atl_modg_1d_project_PhysFlux_testFunc(equation, kerneldata, scheme, iElem, nDofs, state_data)

Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_Equations_type), intent(in) :: equation

The equation description.

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. Holds the physical fluxes.

type(atl_modg_1d_scheme_type), intent(in) :: scheme

The parameters of the MODG scheme

integer, intent(in) :: iElem

The element index

integer, intent(in) :: nDofs

The total degrees of freedom

real(kind=rk), intent(in) :: state_data(nDofs,equation%varSys%nScalars)

The physical fluxes that needs to be projected

public subroutine atl_modg_1d_ensure_pos_face(nElems_fluid, volState, faceRep, nScalars, ensure_positivity)

Lift the value on the face to a positive value if necessary.

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nElems_fluid

Number of fluid elements

real(kind=rk), intent(in) :: volState(:,:,:)

Volumetric modal states for each element

type(atl_faceRep_type), intent(inout) :: faceRep(:)

Modal representation on the face that might need limiting.

Read more…
integer, intent(in) :: nScalars

Number of variables

logical, intent(in) :: ensure_positivity(:)

Indication for each variable, whether positivity is to be ensured or not.

Read more…

public subroutine atl_modg_1d_modalVolToModalFace(mesh, statedata, facedata, nScalars, modg_1d, equation)

Projects modal representation of each cell to its faces, i.e. this subroutine creates a modal representation on the faces.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type), intent(in) :: mesh

The elements we apply the projection for.

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

Volumetric, modal states for each element.

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

Modal representation on the face (will be updated by this routine for all fluid elements in mesh).

integer, intent(in) :: nScalars

The number of scalars varaibales in your equation system.

type(atl_modg_1d_scheme_type), intent(in) :: modg_1d

The parameters of your modg scheme.

type(atl_Equations_type) :: equation

The equation you solve.

public subroutine atl_modg_1d_invMassMatrix(mesh, kerneldata, statedata, elementalTimestep, timestep, scheme)

Applies the inverse of the mass matrix for a 3D scheme.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type) :: mesh

The mesh you are working with.

type(atl_kerneldata_type) :: kerneldata

The data of the kernel.

type(atl_statedata_type) :: statedata

THe state if the equation

procedure(atl_elemental_timestep_vec), intent(in), pointer :: elementalTimestep

The elemental timestepping routine, because of performance, this is constant.

type(atl_timestep_type) :: timestep

The timestepping data.

type(atl_modg_1d_scheme_type), intent(in) :: scheme

Parameters of the modal dg scheme

private subroutine modg_1d_project_testFunc_Q(mesh, equation, kerneldata, facedata, penalizationdata, usePenalization, sourcedata, Currentlevel, scheme)

Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type), intent(in) :: mesh

Descritption of the cubical elements in the mesh

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

The equation description.

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. Holds the physical fluxes.

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

The representation on the face + representation of the flux.

type(atl_penalizationData_type), intent(in) :: penalizationdata

Volumetric data for the penalization

logical, intent(in) :: usePenalization

Flag to indicate whether the penalization data has to be considered, or if it is taken care of somewhere else (imex)

type(atl_source_type), intent(inout) :: sourcedata

Modal representation of the sources.

integer, intent(in) :: Currentlevel

The level you compute for

type(atl_modg_1d_scheme_type), intent(in) :: scheme

The parameters of the MODG scheme

private subroutine modg_1d_project_source_Q(sourcedata, nScalars, mesh, maxPolyDegree, kerneldata, currentLevel)

Projection of the source terms (in modal representation) to the test functions.

Arguments

Type IntentOptional Attributes Name
type(atl_source_type), intent(in) :: sourcedata

The modal representation of the source

integer, intent(in) :: nScalars

The number scalar variables in the equation system.

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

The cubical elements.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree of the modg scheme

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. This one is updated by the projection.

integer, intent(in) :: currentLevel

The current level

private subroutine modg_1d_project_penalization(nScalars, mesh, maxPolyDegree, kerneldata, penalizationdata)

Projection of the penalization terms (in modal representation) to the test functions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number scalar variables in the equation system.

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

The cubical elements.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree of the modg scheme

type(atl_kerneldata_type), intent(inout) :: kerneldata

The data of the kernel. This one is updated by the projection.

type(atl_penalizationData_type), intent(in) :: penalizationdata

Volumetric data for the penalization

private subroutine modg_1d_project_numFluxX_Q(numFluxLeftFace, numFluxRightFace, nScalars, maxPolyDegree, nElems_fluid, projection)

Projection of the numerical flux in x direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(inout) :: numFluxLeftFace(:,:,:,:)

The numerical flux on the left face in modal representations. Dimension is (maxPolyDegree+1)^2 , nScalars

real(kind=rk), intent(inout) :: numFluxRightFace(:,:,:,:)

The numerical flux on the right face in modal representations. Dimension is (maxPolyDegree+1)^2 , nScalars

integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

integer, intent(in) :: nElems_fluid

The element index

real(kind=rk), intent(inout) :: projection(:,:,:)

The numerical flux projected onto the test functions.

private subroutine modg_1d_project_numFlux_diffTestX_Q(numFluxLeftFace, numFluxRightFace, nScalars, maxPolyDegree, nElems_fluid, projection)

Projection of the numerical flux in x direction onto the differentiated

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(inout) :: numFluxLeftFace(:,:,:,:)

The numerical flux on the left face in modal representations. Dimension is (maxPolyDegree+1)^2 , nScalars

real(kind=rk), intent(inout) :: numFluxRightFace(:,:,:,:)

The numerical flux on the right face in modal representations. Dimension is (maxPolyDegree+1)^2 , nScalars

integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

integer, intent(in) :: nElems_fluid

The element index

real(kind=rk), intent(inout) :: projection(:,:,:)

The numerical flux projected onto the test functions.

private subroutine modg_1d_project_physFluxX_Q(nScalars, maxPolyDegree, state, iElem, state_der)

Projection of the physical flux in x direction onto the testfunctions.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree in each spatial direction.

real(kind=rk), intent(inout) :: state(:,:,:)

The state to alter.

integer, intent(in) :: iElem

The element index

real(kind=rk), intent(in) :: state_der((maxPolyDegree+1),nScalars)

The state data for the element

private subroutine modg_1d_VolToFace_grad_Q(volState, maxPolyDegree, faceDir, nScalars, nElems, elemLength, faceState)

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: volState(:,:,:)

The modal representation in the volume. First dimension is the number of voluemtrix numbers of degrees of freedom and second dimension is the number of scalar variables in the equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree per spatial direction.

integer, intent(in) :: faceDir

The face to project the modal representation to. Use one of the first six directions of \link tem_param_module \endlink, e.g. \link tem_param_module::q__e \endlink

integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: nElems

The number of elements

real(kind=rk), intent(in) :: elemLength

Length of elements

real(kind=rk), intent(inout) :: faceState(:,:,:,:)

The modal representation on the face

private subroutine modg_1d_volToFace_Q(volState, maxPolyDegree, faceDir, nScalars, nElems, faceState)

Projects derivative of modal representation of each cell to its faces, i.e. this subroutine creates a modal representation on the faces. Project modal representation of an element to one of its faces for Q space.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=rk), intent(in) :: volState(:,:,:)

The modal representation in the volume. First dimension is the number of voluemtrix numbers of degrees of freedom and second dimension is the number of scalar variables in the equation system.

integer, intent(in) :: maxPolyDegree

The maximal polynomial degree per spatial direction.

integer, intent(in) :: faceDir

The face to project the modal representation to. Use one of the first six directions of \link tem_param_module \endlink, e.g. \link tem_param_module::q__e \endlink

integer, intent(in) :: nScalars

The number of scalar variables in your equation system.

integer, intent(in) :: nElems

The number of elements

real(kind=rk), intent(inout) :: faceState(:,:,:,:)

The modal representation on the face

private subroutine modg_1d_invMassMatrix_Q(mesh, kerneldata, scheme, nElems)

Applies the inverse of the mass matrix for a 3D scheme.

Arguments

Type IntentOptional Attributes Name
type(atl_cube_elem_type) :: mesh

The mesh you are working with.

type(atl_kerneldata_type) :: kerneldata

The data of the kernel.

type(atl_modg_1d_scheme_type), intent(in) :: scheme

Parameters of the modal dg scheme

integer, intent(in) :: nElems