Geometry-aware two-point vector and split-form divergence for 2-D.
The MappedDivergence routine follows the construction described in
Winters, Kopriva, Gassner, Hindenlang,
"Construction of Modern Robust Nodal Discontinuous Galerkin Spectral
Element Methods for the Compressible Navier-Stokes Equations",
Lecture Notes in Computational Science and Engineering, 2021.
The key ingredient is that the contravariant two-point flux in the r-th
computational direction is formed by projecting the physical two-point
flux onto averaged contravariant basis vectors:
F~^r_{(i,n),j} = sum_d (Ja^r_d(i,j) + Ja^r_d(n,j))/2 * f^d_{(i,n),j}
where dsdx%interior(i,j,iEl,1,d,r) = J*a^r_d stores the scaled
contravariant basis vectors (metric terms times Jacobian).
The physical-space divergence at (i,j) is then
(1/J_{i,j}) * 2 * sum_n [ D_{n,i} F~^1_{(i,n),j} + D_{n,j} F~^2_{i,(j,n)} ]
The interior array stores the physical-space two-point flux
interior(n,i,j,iEl,iVar,d) = f^d_{(i or j, n)} where d is the physical
direction. Metric averaging is performed inside MappedDivergence.
Uses
module~~self_mappedtwopointvector_2d_t~~UsesGraph
module~self_mappedtwopointvector_2d_t
SELF_MappedTwoPointVector_2D_t
module~self_twopointvector_2d~2
SELF_TwoPointVector_2D
module~self_mappedtwopointvector_2d_t->module~self_twopointvector_2d~2
module~self_constants
SELF_Constants
module~self_mappedtwopointvector_2d_t->module~self_constants
module~self_geometry_2d
SELF_Geometry_2D
module~self_mappedtwopointvector_2d_t->module~self_geometry_2d
module~self_lagrange~3
SELF_Lagrange
module~self_mappedtwopointvector_2d_t->module~self_lagrange~3
iso_c_binding
iso_c_binding
module~self_mappedtwopointvector_2d_t->iso_c_binding
module~self_twopointvector_2d_t
SELF_TwoPointVector_2D_t
module~self_twopointvector_2d~2->module~self_twopointvector_2d_t
module~self_constants->iso_c_binding
iso_fortran_env
iso_fortran_env
module~self_constants->iso_fortran_env
module~self_geometry_2d->module~self_constants
module~self_geometry_2d->module~self_lagrange~3
module~self_supportroutines
SELF_SupportRoutines
module~self_geometry_2d->module~self_supportroutines
module~self_data
SELF_Data
module~self_geometry_2d->module~self_data
module~self_scalar_2d~2
SELF_Scalar_2D
module~self_geometry_2d->module~self_scalar_2d~2
module~self_mesh_2d~2
SELF_Mesh_2D
module~self_geometry_2d->module~self_mesh_2d~2
module~self_vector_2d~2
SELF_Vector_2D
module~self_geometry_2d->module~self_vector_2d~2
module~self_tensor_2d~2
SELF_Tensor_2D
module~self_geometry_2d->module~self_tensor_2d~2
module~self_lagrange~3->module~self_constants
module~self_lagrange~3->iso_c_binding
module~self_lagrange_t
SELF_Lagrange_t
module~self_lagrange~3->module~self_lagrange_t
module~self_lagrange~3->iso_fortran_env
module~self_supportroutines->module~self_constants
module~self_supportroutines->iso_fortran_env
module~self_data->module~self_constants
module~self_data->module~self_lagrange~3
module~self_data->iso_c_binding
module~self_hdf5
SELF_HDF5
module~self_data->module~self_hdf5
module~self_metadata
SELF_Metadata
module~self_data->module~self_metadata
HDF5
HDF5
module~self_data->HDF5
FEQParse
FEQParse
module~self_data->FEQParse
module~self_scalar_2d~2->module~self_constants
module~self_scalar_2d~2->iso_c_binding
module~self_scalar_2d_t
SELF_Scalar_2D_t
module~self_scalar_2d~2->module~self_scalar_2d_t
module~self_lagrange_t->module~self_constants
module~self_lagrange_t->iso_c_binding
module~self_lagrange_t->module~self_supportroutines
module~self_lagrange_t->iso_fortran_env
module~self_lagrange_t->module~self_hdf5
module~self_lagrange_t->HDF5
module~self_quadrature
SELF_Quadrature
module~self_lagrange_t->module~self_quadrature
module~self_twopointvector_2d_t->module~self_constants
module~self_twopointvector_2d_t->module~self_lagrange~3
module~self_twopointvector_2d_t->iso_c_binding
module~self_twopointvector_2d_t->module~self_data
module~self_twopointvector_2d_t->module~self_metadata
module~self_twopointvector_2d_t->FEQParse
module~self_mesh_2d_t
SELF_Mesh_2D_t
module~self_mesh_2d~2->module~self_mesh_2d_t
module~self_vector_2d_t
SELF_Vector_2D_t
module~self_vector_2d~2->module~self_vector_2d_t
module~self_tensor_2d_t
SELF_Tensor_2D_t
module~self_tensor_2d~2->module~self_tensor_2d_t
module~self_hdf5->module~self_constants
module~self_hdf5->iso_fortran_env
module~self_hdf5->HDF5
mpi
mpi
module~self_hdf5->mpi
module~self_metadata->module~self_hdf5
module~self_metadata->HDF5
module~self_mesh_2d_t->module~self_constants
module~self_mesh_2d_t->module~self_lagrange~3
module~self_mesh_2d_t->iso_c_binding
module~self_mesh_2d_t->module~self_supportroutines
module~self_mesh_2d_t->module~self_hdf5
module~self_mesh_2d_t->HDF5
module~self_mesh
SELF_Mesh
module~self_mesh_2d_t->module~self_mesh
module~self_domaindecomposition~2
SELF_DomainDecomposition
module~self_mesh_2d_t->module~self_domaindecomposition~2
module~self_vector_2d_t->module~self_constants
module~self_vector_2d_t->module~self_lagrange~3
module~self_vector_2d_t->iso_c_binding
module~self_vector_2d_t->module~self_data
module~self_vector_2d_t->module~self_hdf5
module~self_vector_2d_t->module~self_metadata
module~self_vector_2d_t->HDF5
module~self_vector_2d_t->FEQParse
module~self_tensor_2d_t->module~self_constants
module~self_tensor_2d_t->module~self_lagrange~3
module~self_tensor_2d_t->iso_c_binding
module~self_tensor_2d_t->module~self_data
module~self_tensor_2d_t->module~self_hdf5
module~self_tensor_2d_t->module~self_metadata
module~self_tensor_2d_t->HDF5
module~self_tensor_2d_t->FEQParse
module~self_scalar_2d_t->module~self_constants
module~self_scalar_2d_t->module~self_lagrange~3
module~self_scalar_2d_t->iso_c_binding
module~self_scalar_2d_t->module~self_data
module~self_scalar_2d_t->module~self_hdf5
module~self_scalar_2d_t->module~self_metadata
module~self_scalar_2d_t->HDF5
module~self_scalar_2d_t->FEQParse
module~self_quadrature->module~self_constants
module~self_quadrature->iso_fortran_env
module~self_mesh->module~self_constants
module~self_mesh->iso_c_binding
module~self_mesh->module~self_domaindecomposition~2
module~self_domaindecomposition_t
SELF_DomainDecomposition_t
module~self_domaindecomposition~2->module~self_domaindecomposition_t
module~self_domaindecomposition_t->module~self_constants
module~self_domaindecomposition_t->module~self_lagrange~3
module~self_domaindecomposition_t->iso_c_binding
module~self_domaindecomposition_t->module~self_supportroutines
module~self_domaindecomposition_t->mpi
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Used by
module~~self_mappedtwopointvector_2d_t~~UsedByGraph
module~self_mappedtwopointvector_2d_t
SELF_MappedTwoPointVector_2D_t
module~self_mappedtwopointvector_2d~2
SELF_MappedTwoPointVector_2D
module~self_mappedtwopointvector_2d~2->module~self_mappedtwopointvector_2d_t
module~self_mappedtwopointvector_2d
SELF_MappedTwoPointVector_2D
module~self_mappedtwopointvector_2d->module~self_mappedtwopointvector_2d_t
module~self_ecdgmodel2d_t
SELF_ECDGModel2D_t
module~self_ecdgmodel2d_t->module~self_mappedtwopointvector_2d~2
module~self_ecadvection2d_t
SELF_ECAdvection2D_t
module~self_ecadvection2d_t->module~self_ecdgmodel2d_t
module~self_ecdgmodel2d
SELF_ECDGModel2D
module~self_ecdgmodel2d->module~self_ecdgmodel2d_t
module~self_ecadvection2d~2
SELF_ECAdvection2D
module~self_ecadvection2d~2->module~self_ecdgmodel2d_t
module~self_ecadvection2d~2->module~self_ecadvection2d_t
module~self_ecdgmodel2d~2
SELF_ECDGModel2D
module~self_ecdgmodel2d~2->module~self_ecdgmodel2d_t
module~self_ecadvection2d
SELF_ECAdvection2D
module~self_ecadvection2d->module~self_ecadvection2d_t
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Derived Types
Components
Type Visibility Attributes Name Initial
integer,
public ::
M
integer,
public ::
N
character(len=3),
public ::
backend = "cpu"
type(EquationParser),
public, allocatable ::
eqn (:)
type(SEMQuad ),
public, pointer ::
geometry => null()
logical,
public ::
geometry_associated = .false.
real(kind=prec),
public, pointer, contiguous, dimension(:,:,:,:,:,:) ::
interior
type(Lagrange ),
public, pointer ::
interp
type(Metadata ),
public, allocatable ::
meta (:)
integer,
public ::
nElem
integer,
public ::
nVar
Type-Bound Procedures
procedure, public :: AssociateGeometry => AssociateGeometry_MappedTwoPointVector2D_t
procedure, public :: DissociateGeometry => DissociateGeometry_MappedTwoPointVector2D_t
generic, public :: Divergence => Divergence_TwoPointVector2D_t
procedure, public :: Free => Free_TwoPointVector2D_t
procedure, public :: Init => Init_TwoPointVector2D_t
generic, public :: MappedDivergence => MappedDivergence_MappedTwoPointVector2D_t
procedure, private :: MappedDivergence_MappedTwoPointVector2D_t
procedure, public :: SetDescription => SetDescription_DataObj
generic, public :: SetEquation => SetEquation_DataObj
procedure, public :: SetName => SetName_DataObj
procedure, public :: SetUnits => SetUnits_DataObj
procedure, public :: UpdateDevice => UpdateDevice_TwoPointVector2D_t
procedure, public :: UpdateHost => UpdateHost_TwoPointVector2D_t
Subroutines
Computes the physical-space divergence of a 2-D split-form vector field
on a curvilinear mesh.
Read more…
Arguments
Type Intent Optional Attributes Name
class(MappedTwoPointVector2D_t ),
intent(in)
::
this
real(kind=prec),
intent(out)
::
df (1:this%N+1,1:this%N+1,1:this%nElem,1:this%nVar)