Collections of operations and datatypes related to multilevel simulations for the MODG scheme.
To workaround a buggy workshare implementation in Intel 15, we replaced array syntax constructs and workshares in the code below by collapsed do loops with OpenMP Do directives.
Interpolate modal face representation from coarse to next finer faces (level
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | The minumum level of the mesh. |
||
integer, | intent(in) | :: | maxLevel | The maximum level of the mesh. |
||
integer, | intent(in) | :: | currentLevel | The current level (i.e. the coarse level). |
||
type(atl_cube_elem_type), | intent(in) | :: | mesh(minLevel:maxLevel) | The mesh representation. |
||
type(atl_facedata_type), | intent(inout) | :: | facedata(minLevel:maxLevel) | The face representations (finer faces are interpolated from coarser ones). |
||
type(atl_scheme_type), | intent(in) | :: | scheme(minLevel:maxLevel) | The schemes on the different levels. |
||
integer, | intent(in) | :: | nScalars | The number of scalar variables in your equation system. |
Project coarse parent element to its 8 finer child elements by a simple L2 projection.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | The minumum level of the mesh. |
||
integer, | intent(in) | :: | maxLevel | The maximum level of the mesh. |
||
integer, | intent(in) | :: | currentLevel | The current level (i.e. the coarse level). |
||
integer, | intent(in) | :: | iDir | The direction to project |
||
type(atl_cube_elem_type), | intent(in) | :: | mesh(minLevel:maxLevel) | The mesh representation. |
||
type(atl_statedata_type), | intent(inout) | :: | state_stab(minLevel:maxLevel,1:3) | The face representations (finer faces are interpolated from coarser ones). |
||
type(atl_scheme_type), | intent(in) | :: | scheme(minLevel:maxLevel) | The schemes on the different levels. |
||
integer, | intent(in) | :: | nScalars | The number of scalar variables in your equation system. |
Project data from 8 smaller elements to its parent element in terms of L2 projections.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | The minumum level of the mesh. |
||
integer, | intent(in) | :: | maxLevel | The maximum level of the mesh. |
||
integer, | intent(in) | :: | currentLevel | The current level (i.e. the coarse level). |
||
integer, | intent(in) | :: | iDir | The direction to interpolate. |
||
type(atl_cube_elem_type), | intent(in) | :: | mesh(minLevel:maxLevel) | The mesh representation. |
||
type(atl_statedata_type), | intent(inout) | :: | state_stab(minLevel:maxLevel,1:3) | The face representations (finer faces are interpolated from coarser ones). |
||
type(atl_scheme_type), | intent(in) | :: | scheme(minLevel:maxLevel) | The schemes on the different levels. |
||
integer, | intent(in) | :: | nScalars | The number of scalar variables in your equation system. |
Interpolate modal face representation from next finer faces to coarse level (level
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | minLevel | The minumum level of the mesh. |
||
integer, | intent(in) | :: | maxLevel | The maximum level of the mesh. |
||
integer, | intent(in) | :: | currentLevel | The current level (i.e. the coarse level). |
||
type(atl_cube_elem_type), | intent(in) | :: | mesh(minLevel:maxLevel) | The mesh representation. |
||
type(atl_facedata_type), | intent(inout) | :: | facedata(minLevel:maxLevel) | The face representations (finer faces are interpolated from coarser ones). |
||
type(atl_scheme_type), | intent(in) | :: | scheme(minLevel:maxLevel) | The schemes on the different levels. |
||
integer, | intent(in) | :: | nScalars | The number of scalar variables in your equation system. |
Subroutine to semi-refine an element with modal polynomial representation into its semi-children.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | modalRepFace(:,:) | Modal representation of a function on the non-refined face. Dimensions are: (modg%maxPolyDegree+1)^2 for the first dimension and nScalars for the second dimension. |
||
type(ply_modg_basis_type) | :: | modg_basis | Informations about the polynomial basis of a MODG scheme. |
|||
type(atl_modg_scheme_type), | intent(in) | :: | schemeCoarse | The parameters of your MODG scheme on the coarse level. |
||
type(atl_modg_scheme_type), | intent(in) | :: | schemeFine | The parameters of your MODG scheme on the fine level. |
||
integer, | intent(in) | :: | refineDir | The direction of the semi-refinement. Either 1 or 2. Have a look at the function description. |
||
integer, | intent(in) | :: | fineElemShift | The semi-refined element you want to obtain. |
||
real(kind=rk), | intent(inout) | :: | modalRefined(:,:) | The modal representation of modalRepFace restricted to the semi-refined element. |
Project modal representation on a face to a semi-refined face (i.e. on a face
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | modalRepFace(:,:) | Modal representation of a function on the non-refined face. Dimensions are: (modg%maxPolyDegree+1)^2 for the first dimension and nScalars for the second dimension. |
||
type(ply_modg_basis_type) | :: | modg_basis | Informations about the polynomial basis of a MODG scheme. |
|||
type(atl_modg_scheme_type), | intent(in) | :: | schemeCoarse | The parameters of your MODG scheme on the coarse level. |
||
type(atl_modg_scheme_type), | intent(in) | :: | schemeFine | The parameters of your MODG scheme on the fine level. |
||
integer, | intent(in) | :: | refineDir | The direction of the semi-refinement. Either 1 or 2. Have a look at the function description. |
||
integer, | intent(in) | :: | fineFaceShift | The semi-refined element you want to obtain. |
||
real(kind=rk), | intent(inout) | :: | modalRefined(:,:) | The modal representation of modalRepFace restricted to the semi-refined element. |
Subroutine to semi-coarsen an element with modal polynomial representation to its semi-parent.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | modalRepFace(:,:) | Modal representation of a function on one of refined element. Which fine element is determined by fineFaceShift Dimensions are: (modg%maxPolyDegree+1)^3 for the first dimension and nScalars for the second dimension. |
||
type(ply_modg_basis_type) | :: | modg_basis | Informations about the polynomial basis of a MODG scheme. |
|||
type(atl_modg_scheme_type), | intent(in) | :: | schemeCoarse | The parameters of your MODG scheme on the coarse level. |
||
type(atl_modg_scheme_type), | intent(in) | :: | schemeFine | The parameters of your MODG scheme on the fint level. |
||
integer, | intent(in) | :: | coarseDir | The direction of the semi-coarsening. Either 1 or 2 or 3. Have a look at the function description. |
||
integer, | intent(in) | :: | fineElemShift | The semi-refined element you want to obtain. |
||
real(kind=rk), | intent(inout) | :: | modalCoarsed(:,:) | The modal representation of modalRepFace on the coarser element, restricted to the given fine element. |
Project modal representation of a semi-refined face (i.e. on a face
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | modalRepFace(:,:) | Modal representation of a function on one of refined face. Which fine face is determined by fineFaceShift Dimensions are: (modg%maxPolyDegree+1)^2 for the first dimension and nScalars for the second dimension. |
||
type(ply_modg_basis_type) | :: | modg_basis | Informations about the polynomial basis of a MODG scheme. |
|||
type(atl_modg_scheme_type), | intent(in) | :: | schemeCoarse | The parameters of your MODG scheme on the coarse level. |
||
type(atl_modg_scheme_type), | intent(in) | :: | schemeFine | The parameters of your MODG scheme on the fint level. |
||
integer, | intent(in) | :: | coarseDir | The direction of the semi-coarsening. Either 1 or 2. Have a look at the function description. |
||
integer, | intent(in) | :: | fineFaceShift | The semi-refined element you want to obtain. |
||
real(kind=rk), | intent(inout) | :: | modalCoarsed(:,:) | The modal representation of modalRepFace on the coarser element, restricted to the given fine element. |