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.
Type | Intent | Optional | 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 |
Initiate the MODG kernel for cubic elements on all levels.
Type | Intent | Optional | 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. |
Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.
Type | Intent | Optional | 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 |
Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.
Type | Intent | Optional | 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 |
Lift the value on the face to a positive value if necessary.
Type | Intent | Optional | 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. |
||
integer, | intent(in) | :: | nScalars |
Number of variables |
||
logical, | intent(in) | :: | ensure_positivity(:) |
Indication for each variable, whether positivity is to be ensured or not. |
Projects modal representation of each cell to its faces, i.e. this subroutine creates a modal representation on the faces.
Type | Intent | Optional | 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. |
Applies the inverse of the mass matrix for a 3D scheme.
Type | Intent | Optional | 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 |
Subroutine to project modal representations of physical flux, numerical flux and source terms onto test functions.
Type | Intent | Optional | 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 |
Projection of the source terms (in modal representation) to the test functions.
Type | Intent | Optional | 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 |
Projection of the penalization terms (in modal representation) to the test functions.
Type | Intent | Optional | 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 |
Projection of the numerical flux in x direction onto the testfunctions.
Type | Intent | Optional | 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. |
Projection of the numerical flux in x direction onto the differentiated
Type | Intent | Optional | 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. |
Projection of the physical flux in x direction onto the testfunctions.
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
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.
Type | Intent | Optional | 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 |
Applies the inverse of the mass matrix for a 3D scheme.
Type | Intent | Optional | 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 |