SELF_Geometry_2D Module


Uses

  • module~~self_geometry_2d~~UsesGraph module~self_geometry_2d SELF_Geometry_2D module~self_constants SELF_Constants module~self_geometry_2d->module~self_constants module~self_data SELF_Data module~self_geometry_2d->module~self_data module~self_scalar_2d SELF_Scalar_2D module~self_geometry_2d->module~self_scalar_2d module~self_vector_2d SELF_Vector_2D module~self_geometry_2d->module~self_vector_2d module~self_mesh_2d SELF_Mesh_2D module~self_geometry_2d->module~self_mesh_2d module~self_tensor_2d SELF_Tensor_2D module~self_geometry_2d->module~self_tensor_2d module~self_lagrange~3 SELF_Lagrange module~self_geometry_2d->module~self_lagrange~3 module~self_supportroutines SELF_SupportRoutines module~self_geometry_2d->module~self_supportroutines iso_fortran_env iso_fortran_env module~self_constants->iso_fortran_env iso_c_binding iso_c_binding module~self_constants->iso_c_binding module~self_data->module~self_constants module~self_data->module~self_lagrange~3 module~self_data->iso_c_binding FEQParse FEQParse module~self_data->FEQParse HDF5 HDF5 module~self_data->HDF5 module~self_metadata SELF_Metadata module~self_data->module~self_metadata module~self_hdf5 SELF_HDF5 module~self_data->module~self_hdf5 module~self_scalar_2d->module~self_constants module~self_scalar_2d->iso_c_binding module~self_scalar_2d_t SELF_Scalar_2D_t module~self_scalar_2d->module~self_scalar_2d_t module~self_vector_2d_t SELF_Vector_2D_t module~self_vector_2d->module~self_vector_2d_t module~self_mesh_2d_t SELF_Mesh_2D_t module~self_mesh_2d->module~self_mesh_2d_t module~self_tensor_2d_t SELF_Tensor_2D_t module~self_tensor_2d->module~self_tensor_2d_t module~self_lagrange~3->module~self_constants module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~3->module~self_lagrange_t module~self_lagrange~3->iso_fortran_env module~self_lagrange~3->iso_c_binding module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_lagrange_t->module~self_constants module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->iso_c_binding module~self_lagrange_t->HDF5 module~self_lagrange_t->module~self_hdf5 module~self_quadrature SELF_Quadrature module~self_lagrange_t->module~self_quadrature module~self_metadata->HDF5 module~self_metadata->module~self_hdf5 module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 mpi mpi module~self_hdf5->mpi module~self_scalar_2d_t->module~self_constants module~self_scalar_2d_t->module~self_data module~self_scalar_2d_t->module~self_lagrange~3 module~self_scalar_2d_t->iso_c_binding module~self_scalar_2d_t->FEQParse module~self_scalar_2d_t->HDF5 module~self_scalar_2d_t->module~self_metadata module~self_scalar_2d_t->module~self_hdf5 module~self_datapool SELF_DataPool module~self_scalar_2d_t->module~self_datapool module~self_vector_2d_t->module~self_constants module~self_vector_2d_t->module~self_data module~self_vector_2d_t->module~self_lagrange~3 module~self_vector_2d_t->iso_c_binding module~self_vector_2d_t->FEQParse module~self_vector_2d_t->HDF5 module~self_vector_2d_t->module~self_metadata module~self_vector_2d_t->module~self_hdf5 module~self_vector_2d_t->module~self_datapool module~self_mesh_2d_t->module~self_constants module~self_mesh_2d_t->module~self_lagrange~3 module~self_mesh_2d_t->module~self_supportroutines module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->HDF5 module~self_mesh_2d_t->module~self_hdf5 module~self_mesh_2d_t->module~self_quadrature module~self_domaindecomposition~2 SELF_DomainDecomposition module~self_mesh_2d_t->module~self_domaindecomposition~2 module~self_mesh SELF_Mesh module~self_mesh_2d_t->module~self_mesh module~self_tensor_2d_t->module~self_constants module~self_tensor_2d_t->module~self_data module~self_tensor_2d_t->module~self_lagrange~3 module~self_tensor_2d_t->iso_c_binding module~self_tensor_2d_t->FEQParse module~self_tensor_2d_t->HDF5 module~self_tensor_2d_t->module~self_metadata module~self_tensor_2d_t->module~self_hdf5 module~self_tensor_2d_t->module~self_datapool module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition~2->module~self_domaindecomposition_t module~self_mesh->module~self_constants module~self_mesh->iso_c_binding module~self_mesh->module~self_domaindecomposition~2 module~self_datapool->module~self_constants module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_lagrange~3 module~self_domaindecomposition_t->module~self_supportroutines module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->mpi

Used by

  • module~~self_geometry_2d~~UsedByGraph module~self_geometry_2d SELF_Geometry_2D module~self_dgmodel2d_t SELF_DGModel2D_t module~self_dgmodel2d_t->module~self_geometry_2d module~self_mappedvector_2d~2 SELF_MappedVector_2D module~self_dgmodel2d_t->module~self_mappedvector_2d~2 module~self_mappedscalar_2d SELF_MappedScalar_2D module~self_dgmodel2d_t->module~self_mappedscalar_2d module~self_amrcontroller_2d SELF_AMRController_2D module~self_amrcontroller_2d->module~self_geometry_2d module~self_amrcontroller_2d->module~self_dgmodel2d_t module~self_mappedscalar_2d_t SELF_MappedScalar_2D_t module~self_mappedscalar_2d_t->module~self_geometry_2d module~self_mappedvector_2d_t SELF_MappedVector_2D_t module~self_mappedvector_2d_t->module~self_geometry_2d module~self_mappedtwopointvector_2d_t SELF_MappedTwoPointVector_2D_t module~self_mappedtwopointvector_2d_t->module~self_geometry_2d module~self_points_t SELF_Points_t module~self_points_t->module~self_geometry_2d module~self_points_t->module~self_mappedscalar_2d module~self_points SELF_Points module~self_points->module~self_geometry_2d module~self_points->module~self_points_t module~self_points->module~self_mappedscalar_2d module~self_ecadvection2d SELF_ECAdvection2D module~self_ecadvection2d->module~self_geometry_2d module~self_ecdgmodel2d_t SELF_ECDGModel2D_t module~self_ecadvection2d->module~self_ecdgmodel2d_t module~self_ecadvection2d_t SELF_ECAdvection2D_t module~self_ecadvection2d->module~self_ecadvection2d_t module~self_esatmo2d SELF_ESAtmo2D module~self_esatmo2d->module~self_geometry_2d module~self_esatmo2d->module~self_ecdgmodel2d_t module~self_esatmo2d_t SELF_ESAtmo2D_t module~self_esatmo2d->module~self_esatmo2d_t module~self_dgmodel2d SELF_DGModel2D module~self_dgmodel2d->module~self_geometry_2d module~self_dgmodel2d->module~self_dgmodel2d_t module~self_dgmodel2d~2 SELF_DGModel2D module~self_dgmodel2d~2->module~self_dgmodel2d_t module~self_mappedvector_2d SELF_MappedVector_2D module~self_mappedvector_2d->module~self_mappedvector_2d_t module~self_mappedscalar_2d~2 SELF_MappedScalar_2D module~self_mappedscalar_2d~2->module~self_mappedscalar_2d_t module~self_mappedvector_2d~2->module~self_mappedvector_2d_t module~self_mappedscalar_2d->module~self_mappedscalar_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_points~2 SELF_Points module~self_points~2->module~self_points_t module~self_ecdgmodel2d_t->module~self_dgmodel2d~2 module~self_ecdgmodel2d_t->module~self_mappedtwopointvector_2d~2 module~self_linearshallowwater2d_t self_LinearShallowWater2D_t module~self_linearshallowwater2d_t->module~self_dgmodel2d~2 module~self_nulldgmodel2d_t self_NullDGModel2D_t module~self_nulldgmodel2d_t->module~self_dgmodel2d~2 module~self_advection_diffusion_2d_t self_advection_diffusion_2d_t module~self_advection_diffusion_2d_t->module~self_dgmodel2d~2 module~self_lineareuler2d_t self_LinearEuler2D_t module~self_lineareuler2d_t->module~self_dgmodel2d~2 module~self_lineareuler2d_pml_t self_LinearEuler2D_PML_t module~self_lineareuler2d_pml_t->module~self_dgmodel2d~2 module~self_lineareuler2d_pml_t->module~self_mappedscalar_2d module~self_lineareuler2d_pml_t->module~self_lineareuler2d_t module~self_esatmo2d_t->module~self_mappedscalar_2d module~self_ecdgmodel2d SELF_ECDGModel2D module~self_esatmo2d_t->module~self_ecdgmodel2d module~self_lineareuler2d_pml self_LinearEuler2D_PML module~self_lineareuler2d_pml->module~self_lineareuler2d_pml_t module~self_lineareuler2d_pml~2 self_LinearEuler2D_PML module~self_lineareuler2d_pml~2->module~self_lineareuler2d_pml_t module~self_esatmo2d~2 SELF_ESAtmo2D module~self_esatmo2d~2->module~self_esatmo2d_t module~self_ecdgmodel2d->module~self_ecdgmodel2d_t module~self_ecdgmodel2d~2 SELF_ECDGModel2D module~self_ecdgmodel2d~2->module~self_ecdgmodel2d_t module~self_nulldgmodel2d self_NullDGModel2D module~self_nulldgmodel2d->module~self_nulldgmodel2d_t module~self_linearshallowwater2d~2 self_LinearShallowWater2D module~self_linearshallowwater2d~2->module~self_linearshallowwater2d_t module~self_linearshallowwater2d self_LinearShallowWater2D module~self_linearshallowwater2d->module~self_linearshallowwater2d_t module~self_nulldgmodel2d~2 self_NullDGModel2D module~self_nulldgmodel2d~2->module~self_nulldgmodel2d_t module~self_advection_diffusion_2d self_advection_diffusion_2d module~self_advection_diffusion_2d->module~self_advection_diffusion_2d_t module~self_advection_diffusion_2d~2 self_advection_diffusion_2d module~self_advection_diffusion_2d~2->module~self_advection_diffusion_2d_t module~self_lineareuler2d~2 self_LinearEuler2D module~self_lineareuler2d~2->module~self_lineareuler2d_t module~self_lineareuler2d self_LinearEuler2D module~self_lineareuler2d->module~self_lineareuler2d_t module~self_ecadvection2d_t->module~self_ecdgmodel2d module~self_ecadvection2d~2 SELF_ECAdvection2D module~self_ecadvection2d~2->module~self_ecadvection2d_t

Contents


Derived Types

type, public :: SEMQuad

Components

TypeVisibilityAttributesNameInitial
type(Scalar2D), public :: J

Default-initialized so a freshly allocated object can be distinguished from an initialized one (the controller uses nElem == 0 to decide Init versus Resize).

type(Tensor2D), public :: dsdx
type(Tensor2D), public :: dxds
type(Lagrange), public, pointer:: meshToModel=> null()
integer, public :: nElem =0

Cached scratch for GenerateFromMesh (AMR Stage 6c). Both were previously constructed and destroyed on every call, which the adaptive loop makes once per epoch:

Read more…
type(Vector2D), public :: nHat
type(Scalar2D), public :: nScale
integer, public :: scratchNGeo =-1
logical, public :: scratchReady =.false.
type(Vector2D), public :: x
type(Vector2D), public :: xMesh

Type-Bound Procedures

procedure, private :: CalculateContravariantBasis => CalculateContravariantBasis_SEMQuad
procedure, public :: CalculateMetricTerms => CalculateMetricTerms_SEMQuad
procedure, public :: CopyElements => CopyElements_SEMQuad
procedure, private :: EnsureScratch => EnsureScratch_SEMQuad
procedure, public :: Free => Free_SEMQuad
procedure, public :: GenerateFromMesh => GenerateFromMesh_SEMQuad
procedure, public :: GenerateFromNodeCoords => GenerateFromNodeCoords_SEMQuad
procedure, public :: Init => Init_SEMQuad
procedure, public :: Resize => Resize_SEMQuad
procedure, public :: UploadGeometry => UploadGeometry_SEMQuad
procedure, public :: WriteTecplot => WriteTecplot_SEMQuad

Subroutines

public subroutine CalculateContravariantBasis_SEMQuad(myGeom)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom

public subroutine CalculateMetricTerms_SEMQuad(myGeom)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom

public subroutine CopyElements_SEMQuad(myGeom, src, srcIdx, dstIdx, n)

Copy whole-element geometry blocks from src into myGeom: element srcIdx(k) of src becomes element dstIdx(k) of myGeom, for k = 1..n (AMR Stage 6c).

Read more…

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom
type(SEMQuad), intent(in) :: src
integer, intent(in) :: srcIdx(:)
integer, intent(in) :: dstIdx(:)
integer, intent(in) :: n

public subroutine EnsureScratch_SEMQuad(myGeom, nGeo, quadrature, nElem)

Prepare the cached GenerateFromMesh scratch for a mesh with nGeo/quadrature and nElem elements (AMR Stage 6c). The nGeo -> N interpolant is built once and reused; the node coordinate staging is resized, so an adapting run stops rebuilding either one per epoch.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom
integer, intent(in) :: nGeo
integer, intent(in) :: quadrature
integer, intent(in) :: nElem

public subroutine Free_SEMQuad(myGeom)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom

public subroutine GenerateFromMesh_SEMQuad(myGeom, mesh)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom
type(Mesh2D), intent(in) :: mesh

public subroutine GenerateFromNodeCoords_SEMQuad(myGeom, nodeCoords, nGeo, quadrature, nElem)

Generate geometry for nElem elements directly from their mesh node coordinates (AMR Stage 6c). GenerateFromMesh is a thin wrapper over this.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom
real(kind=prec), intent(in) :: nodeCoords(1:2,1:nGeo+1,1:nGeo+1,1:nElem)
integer, intent(in) :: nGeo
integer, intent(in) :: quadrature
integer, intent(in) :: nElem

public subroutine Init_SEMQuad(myGeom, interp, nElem)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(out) :: myGeom
type(Lagrange), intent(in), pointer:: interp
integer, intent(in) :: nElem

public subroutine Resize_SEMQuad(myGeom, interp, nElem)

Rebind a live geometry to a new element count, reusing storage where it fits (AMR Stage 6c). This replaces the Free + Init cycle the adaptive loop performed on a freshly allocated SEMQuad every epoch, which threw away exactly the amortization Stage 6b introduced: each member Free released its pools and device buffers, and each Init reallocated, zeroed, rebuilt metadata and equation parsers, and uploaded the zeros.

Read more…

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom
type(Lagrange), intent(in), pointer:: interp
integer, intent(in) :: nElem

public subroutine UploadGeometry_SEMQuad(myGeom)

Push the geometry the solver kernels read to the device. Mirrors the uploads that GenerateFromMesh's own path performs, for use when geometry was assembled by element copy rather than generated (AMR Stage 6c).

Read more…

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: myGeom

public subroutine WriteTecplot_SEMQuad(this, filename)

Arguments

TypeIntentOptionalAttributesName
class(SEMQuad), intent(inout) :: this
character, intent(in) :: filename