SELF_Geometry_3D Module


Uses

  • module~~self_geometry_3d~~UsesGraph module~self_geometry_3d SELF_Geometry_3D module~self_scalar_3d~2 SELF_Scalar_3D module~self_geometry_3d->module~self_scalar_3d~2 module~self_supportroutines SELF_SupportRoutines module~self_geometry_3d->module~self_supportroutines module~self_data SELF_Data module~self_geometry_3d->module~self_data module~self_tensor_3d SELF_Tensor_3D module~self_geometry_3d->module~self_tensor_3d module~self_mesh_3d~2 SELF_Mesh_3D module~self_geometry_3d->module~self_mesh_3d~2 module~self_lagrange~2 SELF_Lagrange module~self_geometry_3d->module~self_lagrange~2 module~self_vector_3d~2 SELF_Vector_3D module~self_geometry_3d->module~self_vector_3d~2 module~self_constants SELF_Constants module~self_geometry_3d->module~self_constants module~self_scalar_3d~2->module~self_constants iso_c_binding iso_c_binding module~self_scalar_3d~2->iso_c_binding module~self_scalar_3d_t SELF_Scalar_3D_t module~self_scalar_3d~2->module~self_scalar_3d_t module~self_supportroutines->module~self_constants iso_fortran_env iso_fortran_env module~self_supportroutines->iso_fortran_env module~self_data->module~self_lagrange~2 module~self_data->module~self_constants 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_tensor_3d_t SELF_Tensor_3D_t module~self_tensor_3d->module~self_tensor_3d_t module~self_mesh_3d_t SELF_Mesh_3D_t module~self_mesh_3d~2->module~self_mesh_3d_t module~self_lagrange~2->module~self_constants module~self_lagrange~2->iso_c_binding module~self_lagrange~2->iso_fortran_env module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~2->module~self_lagrange_t module~self_vector_3d_t SELF_Vector_3D_t module~self_vector_3d~2->module~self_vector_3d_t module~self_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_vector_3d_t->module~self_data module~self_vector_3d_t->module~self_lagrange~2 module~self_vector_3d_t->module~self_constants module~self_vector_3d_t->iso_c_binding module~self_vector_3d_t->module~self_hdf5 module~self_vector_3d_t->module~self_metadata module~self_vector_3d_t->HDF5 module~self_vector_3d_t->FEQParse module~self_datapool SELF_DataPool module~self_vector_3d_t->module~self_datapool 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_3d_t->module~self_data module~self_scalar_3d_t->module~self_lagrange~2 module~self_scalar_3d_t->module~self_constants module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->module~self_hdf5 module~self_scalar_3d_t->module~self_metadata module~self_scalar_3d_t->HDF5 module~self_scalar_3d_t->FEQParse module~self_scalar_3d_t->module~self_datapool module~self_metadata->module~self_hdf5 module~self_metadata->HDF5 module~self_tensor_3d_t->module~self_data module~self_tensor_3d_t->module~self_lagrange~2 module~self_tensor_3d_t->module~self_constants module~self_tensor_3d_t->iso_c_binding module~self_tensor_3d_t->module~self_hdf5 module~self_tensor_3d_t->module~self_metadata module~self_tensor_3d_t->HDF5 module~self_tensor_3d_t->FEQParse module~self_tensor_3d_t->module~self_datapool module~self_mesh_3d_t->module~self_supportroutines module~self_mesh_3d_t->module~self_lagrange~2 module~self_mesh_3d_t->module~self_constants module~self_mesh_3d_t->iso_c_binding module~self_mesh_3d_t->module~self_hdf5 module~self_mesh_3d_t->HDF5 module~self_domaindecomposition SELF_DomainDecomposition module~self_mesh_3d_t->module~self_domaindecomposition module~self_quadrature SELF_Quadrature module~self_mesh_3d_t->module~self_quadrature module~self_mesh SELF_Mesh module~self_mesh_3d_t->module~self_mesh module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->module~self_constants module~self_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_hdf5 module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->HDF5 module~self_lagrange_t->module~self_quadrature module~self_datapool->module~self_constants module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t 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 module~self_domaindecomposition_t->module~self_supportroutines module~self_domaindecomposition_t->module~self_lagrange~2 module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->mpi

Used by

  • module~~self_geometry_3d~~UsedByGraph module~self_geometry_3d SELF_Geometry_3D module~self_mappedscalar_3d_t SELF_MappedScalar_3D_t module~self_mappedscalar_3d_t->module~self_geometry_3d module~self_amrcontroller_3d SELF_AMRController_3D module~self_amrcontroller_3d->module~self_geometry_3d module~self_dgmodel3d_t SELF_DGModel3D_t module~self_amrcontroller_3d->module~self_dgmodel3d_t module~self_mappedvector_3d_t SELF_MappedVector_3D_t module~self_mappedvector_3d_t->module~self_geometry_3d module~self_dgmodel3d_t->module~self_geometry_3d module~self_mappedscalar_3d SELF_MappedScalar_3D module~self_dgmodel3d_t->module~self_mappedscalar_3d module~self_mappedvector_3d SELF_MappedVector_3D module~self_dgmodel3d_t->module~self_mappedvector_3d module~self_mappedtwopointvector_3d_t SELF_MappedTwoPointVector_3D_t module~self_mappedtwopointvector_3d_t->module~self_geometry_3d module~self_points_t SELF_Points_t module~self_points_t->module~self_geometry_3d module~self_points_t->module~self_mappedscalar_3d module~self_ecadvection3d SELF_ECAdvection3D module~self_ecadvection3d->module~self_geometry_3d module~self_ecdgmodel3d_t SELF_ECDGModel3D_t module~self_ecadvection3d->module~self_ecdgmodel3d_t module~self_ecadvection3d_t SELF_ECAdvection3D_t module~self_ecadvection3d->module~self_ecadvection3d_t module~self_dgmodel3d~2 SELF_DGModel3D module~self_dgmodel3d~2->module~self_geometry_3d module~self_dgmodel3d~2->module~self_dgmodel3d_t module~self_esatmo3d~2 SELF_ESAtmo3D module~self_esatmo3d~2->module~self_geometry_3d module~self_esatmo3d_t SELF_ESAtmo3D_t module~self_esatmo3d~2->module~self_esatmo3d_t module~self_esatmo3d~2->module~self_ecdgmodel3d_t module~self_points SELF_Points module~self_points->module~self_geometry_3d module~self_points->module~self_points_t module~self_points->module~self_mappedscalar_3d module~self_mappedscalar_3d->module~self_mappedscalar_3d_t module~self_dgmodel3d SELF_DGModel3D module~self_dgmodel3d->module~self_dgmodel3d_t module~self_mappedscalar_3d~2 SELF_MappedScalar_3D module~self_mappedscalar_3d~2->module~self_mappedscalar_3d_t module~self_mappedvector_3d->module~self_mappedvector_3d_t module~self_mappedvector_3d~2 SELF_MappedVector_3D module~self_mappedvector_3d~2->module~self_mappedvector_3d_t module~self_mappedtwopointvector_3d~2 SELF_MappedTwoPointVector_3D module~self_mappedtwopointvector_3d~2->module~self_mappedtwopointvector_3d_t module~self_mappedtwopointvector_3d SELF_MappedTwoPointVector_3D module~self_mappedtwopointvector_3d->module~self_mappedtwopointvector_3d_t module~self_points~2 SELF_Points module~self_points~2->module~self_points_t module~self_esatmo3d_t->module~self_mappedscalar_3d module~self_ecdgmodel3d~2 SELF_ECDGModel3D module~self_esatmo3d_t->module~self_ecdgmodel3d~2 module~self_lineareuler3d_t self_LinearEuler3D_t module~self_lineareuler3d_t->module~self_dgmodel3d module~self_advection_diffusion_3d_t self_advection_diffusion_3d_t module~self_advection_diffusion_3d_t->module~self_dgmodel3d module~self_ecdgmodel3d_t->module~self_dgmodel3d module~self_ecdgmodel3d_t->module~self_mappedtwopointvector_3d~2 module~self_nulldgmodel3d_t self_NullDGModel3D_t module~self_nulldgmodel3d_t->module~self_dgmodel3d module~self_esatmo3d SELF_ESAtmo3D module~self_esatmo3d->module~self_esatmo3d_t module~self_lineareuler3d~2 self_LinearEuler3D module~self_lineareuler3d~2->module~self_lineareuler3d_t module~self_advection_diffusion_3d~2 self_advection_diffusion_3d module~self_advection_diffusion_3d~2->module~self_advection_diffusion_3d_t module~self_advection_diffusion_3d self_advection_diffusion_3d module~self_advection_diffusion_3d->module~self_advection_diffusion_3d_t module~self_lineareuler3d self_LinearEuler3D module~self_lineareuler3d->module~self_lineareuler3d_t module~self_ecdgmodel3d~2->module~self_ecdgmodel3d_t module~self_ecdgmodel3d SELF_ECDGModel3D module~self_ecdgmodel3d->module~self_ecdgmodel3d_t module~self_nulldgmodel3d~2 self_NullDGModel3D module~self_nulldgmodel3d~2->module~self_nulldgmodel3d_t module~self_nulldgmodel3d self_NullDGModel3D module~self_nulldgmodel3d->module~self_nulldgmodel3d_t module~self_ecadvection3d_t->module~self_ecdgmodel3d~2 module~self_ecadvection3d~2 SELF_ECAdvection3D module~self_ecadvection3d~2->module~self_ecadvection3d_t

Contents


Derived Types

type, public :: SEMHex

Components

TypeVisibilityAttributesNameInitial
type(Scalar3D), 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(Tensor3D), public :: dsdx
type(Tensor3D), 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(Vector3D), public :: nHat
type(Scalar3D), public :: nScale
integer, public :: scratchNGeo =-1
logical, public :: scratchReady =.false.
type(Vector3D), public :: x
type(Vector3D), public :: xMesh

Type-Bound Procedures

procedure, private :: CalculateContravariantBasis => CalculateContravariantBasis_SEMHex
procedure, public :: CalculateMetricTerms => CalculateMetricTerms_SEMHex
procedure, public :: CopyElements => CopyElements_SEMHex
procedure, private :: EnsureScratch => EnsureScratch_SEMHex
procedure, public :: Free => Free_SEMHex
procedure, public :: GenerateFromMesh => GenerateFromMesh_SEMHex
procedure, public :: GenerateFromNodeCoords => GenerateFromNodeCoords_SEMHex
procedure, public :: Init => Init_SEMHex
procedure, public :: Resize => Resize_SEMHex
procedure, public :: UploadGeometry => UploadGeometry_SEMHex
procedure, public :: WriteTecplot => WriteTecplot_SEMHex

Subroutines

public subroutine CalculateContravariantBasis_SEMHex(myGeom)

Arguments

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

public subroutine CalculateMetricTerms_SEMHex(myGeom)

Arguments

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

public subroutine CopyElements_SEMHex(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(SEMHex), intent(inout) :: myGeom
type(SEMHex), intent(in) :: src
integer, intent(in) :: srcIdx(:)
integer, intent(in) :: dstIdx(:)
integer, intent(in) :: n

public subroutine EnsureScratch_SEMHex(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(SEMHex), intent(inout) :: myGeom
integer, intent(in) :: nGeo
integer, intent(in) :: quadrature
integer, intent(in) :: nElem

public subroutine Free_SEMHex(myGeom)

Arguments

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

public subroutine GenerateFromMesh_SEMHex(myGeom, mesh)

Arguments

TypeIntentOptionalAttributesName
class(SEMHex), intent(inout) :: myGeom
type(Mesh3D), intent(in) :: mesh

public subroutine GenerateFromNodeCoords_SEMHex(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(SEMHex), intent(inout) :: myGeom
real(kind=prec), intent(in) :: nodeCoords(1:3,1:nGeo+1,1:nGeo+1,1:nGeo+1,1:nElem)
integer, intent(in) :: nGeo
integer, intent(in) :: quadrature
integer, intent(in) :: nElem

public subroutine Init_SEMHex(myGeom, interp, nElem)

Arguments

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

public subroutine Resize_SEMHex(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 SEMHex 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(SEMHex), intent(inout) :: myGeom
type(Lagrange), intent(in), pointer:: interp
integer, intent(in) :: nElem

public subroutine UploadGeometry_SEMHex(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(SEMHex), intent(inout) :: myGeom

public subroutine WriteTecplot_SEMHex(this, filename)

Arguments

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