SELF_MappedVector_3D Module


Uses

  • module~~self_mappedvector_3d~2~~UsesGraph module~self_mappedvector_3d~2 SELF_MappedVector_3D module~self_gpuinterfaces SELF_GPUInterfaces module~self_mappedvector_3d~2->module~self_gpuinterfaces module~self_gpu SELF_GPU module~self_mappedvector_3d~2->module~self_gpu iso_c_binding iso_c_binding module~self_mappedvector_3d~2->iso_c_binding module~self_mappedvector_3d_t SELF_MappedVector_3D_t module~self_mappedvector_3d~2->module~self_mappedvector_3d_t module~self_gpuinterfaces->module~self_gpu module~self_gpuinterfaces->iso_c_binding module~self_gpu->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu->module~self_gpu_enums~2 module~self_mappedvector_3d_t->iso_c_binding module~self_lagrange~2 SELF_Lagrange module~self_mappedvector_3d_t->module~self_lagrange~2 module~self_constants SELF_Constants module~self_mappedvector_3d_t->module~self_constants module~self_geometry_3d SELF_Geometry_3D module~self_mappedvector_3d_t->module~self_geometry_3d module~self_mesh_3d~2 SELF_Mesh_3D module~self_mappedvector_3d_t->module~self_mesh_3d~2 FEQParse FEQParse module~self_mappedvector_3d_t->FEQParse module~self_domaindecomposition SELF_DomainDecomposition module~self_mappedvector_3d_t->module~self_domaindecomposition module~self_gpu_enums~2->iso_c_binding module~self_lagrange~2->iso_c_binding module~self_lagrange~2->module~self_constants module~self_lagrange_t SELF_Lagrange_t module~self_lagrange~2->module~self_lagrange_t iso_fortran_env iso_fortran_env module~self_lagrange~2->iso_fortran_env module~self_constants->iso_c_binding module~self_constants->iso_fortran_env module~self_geometry_3d->module~self_lagrange~2 module~self_geometry_3d->module~self_constants module~self_geometry_3d->module~self_mesh_3d~2 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_vector_3d~2 SELF_Vector_3D module~self_geometry_3d->module~self_vector_3d~2 module~self_mesh_3d_t SELF_Mesh_3D_t module~self_mesh_3d~2->module~self_mesh_3d_t module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t module~self_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_constants module~self_lagrange_t->module~self_supportroutines module~self_lagrange_t->iso_fortran_env module~self_quadrature SELF_Quadrature module~self_lagrange_t->module~self_quadrature module~self_hdf5 SELF_HDF5 module~self_lagrange_t->module~self_hdf5 HDF5 HDF5 module~self_lagrange_t->HDF5 module~self_scalar_3d~2->iso_c_binding module~self_scalar_3d~2->module~self_constants 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 module~self_supportroutines->iso_fortran_env module~self_data->iso_c_binding module~self_data->module~self_lagrange~2 module~self_data->module~self_constants module~self_data->FEQParse module~self_metadata SELF_Metadata module~self_data->module~self_metadata module~self_data->module~self_hdf5 module~self_data->HDF5 module~self_tensor_3d_t SELF_Tensor_3D_t module~self_tensor_3d->module~self_tensor_3d_t module~self_vector_3d_t SELF_Vector_3D_t module~self_vector_3d~2->module~self_vector_3d_t module~self_mesh_3d_t->iso_c_binding module~self_mesh_3d_t->module~self_lagrange~2 module~self_mesh_3d_t->module~self_constants module~self_mesh_3d_t->module~self_domaindecomposition module~self_mesh_3d_t->module~self_supportroutines module~self_mesh_3d_t->module~self_quadrature module~self_mesh_3d_t->module~self_hdf5 module~self_mesh_3d_t->HDF5 module~self_mesh SELF_Mesh module~self_mesh_3d_t->module~self_mesh module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->module~self_lagrange~2 module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_supportroutines mpi mpi module~self_domaindecomposition_t->mpi module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_metadata->module~self_hdf5 module~self_metadata->HDF5 module~self_scalar_3d_t->iso_c_binding module~self_scalar_3d_t->module~self_lagrange~2 module~self_scalar_3d_t->module~self_constants module~self_scalar_3d_t->FEQParse module~self_scalar_3d_t->module~self_data module~self_scalar_3d_t->module~self_metadata module~self_scalar_3d_t->module~self_hdf5 module~self_scalar_3d_t->HDF5 module~self_datapool SELF_DataPool module~self_scalar_3d_t->module~self_datapool module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 module~self_hdf5->mpi module~self_tensor_3d_t->iso_c_binding module~self_tensor_3d_t->module~self_lagrange~2 module~self_tensor_3d_t->module~self_constants module~self_tensor_3d_t->FEQParse module~self_tensor_3d_t->module~self_data module~self_tensor_3d_t->module~self_metadata module~self_tensor_3d_t->module~self_hdf5 module~self_tensor_3d_t->HDF5 module~self_tensor_3d_t->module~self_datapool module~self_vector_3d_t->iso_c_binding module~self_vector_3d_t->module~self_lagrange~2 module~self_vector_3d_t->module~self_constants module~self_vector_3d_t->FEQParse module~self_vector_3d_t->module~self_data module~self_vector_3d_t->module~self_metadata module~self_vector_3d_t->module~self_hdf5 module~self_vector_3d_t->HDF5 module~self_vector_3d_t->module~self_datapool module~self_mesh->iso_c_binding module~self_mesh->module~self_constants module~self_mesh->module~self_domaindecomposition module~self_datapool->module~self_constants

Contents


Derived Types

type, public, extends(MappedVector3D_t) :: MappedVector3D

Components

TypeVisibilityAttributesNameInitial
integer, public :: M
integer, public :: N
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:,:):: avgBoundary
character(len=3), public :: backend ="cpu"
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:,:):: boundary
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: boundaryNormal

High-water-mark backing store for the arrays above (AMR Stage 6b; see SELF_DataPool). The public members are pointers remapped onto the leading part of these pools at the exact logical shape, so every extent, stride and shape() is unchanged while Resize can reuse the storage across an adaptation epoch. Nothing should index the pools directly.

type(EquationParser), public, allocatable:: eqn(:)
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:,:):: extBoundary
type(SEMHex), public, pointer:: geometry=> null()
logical, public :: geometry_associated =.false.
type(c_ptr), public :: halo_recvbuf_gpu =c_null_ptr
type(c_ptr), public :: halo_sendbuf_gpu =c_null_ptr
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:,:):: interior
type(Lagrange), public, pointer:: interp
type(Metadata), public, allocatable:: meta(:)
real(kind=prec), public, allocatable, dimension(:,:,:,:,:,:):: mortarBuff
type(c_ptr), public :: mortarBuff_gpu =c_null_ptr
integer, public :: nElem
integer, public :: nVar
real(kind=prec), public, pointer, contiguous:: pool_avgBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_boundaryNormal(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_extBoundary(:)=> null()
real(kind=prec), public, pointer, contiguous:: pool_interior(:)=> null()

Type-Bound Procedures

procedure, public :: AssociateGeometry => AssociateGeometry_MappedVector3D_t
procedure, public :: AverageSides => AverageSides_Vector3D_t
procedure, public :: BoundaryInterp => BoundaryInterp_Vector3D_t
generic, public :: Curl => Curl_Vector3D_t
procedure, public :: DissociateGeometry => DissociateGeometry_MappedVector3D_t
generic, public :: Divergence => Divergence_Vector3D_t
procedure, public :: Free => Free_MappedVector3D
generic, public :: Gradient => Gradient_Vector3D_t
generic, public :: GridInterp => GridInterp_Vector3D_t
procedure, public :: Init => Init_Vector3D_t
procedure, public :: MPIExchangeAsync => MPIExchangeAsync_MappedVector3D
procedure, private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedVector3D
procedure, private :: MPIMortarFluxAsync => MPIMortarFluxAsync_MappedVector3D
procedure, public :: MapArrays => MapArrays_Vector3D_t
generic, public :: MappedDGDivergence => MappedDGDivergence_MappedVector3D_t, MappedDGDivergence_MappedVector3D
procedure, private :: MappedDGDivergence_MappedVector3D
generic, public :: MappedDivergence => MappedDivergence_MappedVector3D_t, MappedDivergence_MappedVector3D
procedure, private :: MappedDivergence_MappedVector3D
procedure, public :: MortarExchange => MortarExchange_MappedVector3D
procedure, public :: MortarFluxCollect => MortarFluxCollect_MappedVector3D
procedure, public :: Resize => Resize_MappedVector3D
procedure, public :: SetDescription => SetDescription_DataObj
generic, public :: SetEquation => SetEquation_DataObj, SetEquation_Vector3D_t
procedure, public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedVector3D
procedure, public :: SetName => SetName_DataObj
procedure, public :: SetUnits => SetUnits_DataObj
procedure, public :: SideExchange => SideExchange_MappedVector3D
procedure, public :: UpdateDevice => UpdateDevice_Vector3D_t
procedure, public :: UpdateHost => UpdateHost_Vector3D_t
generic, public :: WriteHDF5 => WriteHDF5_MPI_Vector3D_t, WriteHDF5_Vector3D_t

Subroutines

public subroutine Free_MappedVector3D(this)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this

public subroutine MPIExchangeAsync_MappedVector3D(this, mesh)

Post the aggregated halo exchange: one MPI_Irecv/MPI_Isend pair per neighboring rank, carrying every (side,variable,component) boundary trace shared with that rank in a single packed device buffer. The boundary array is laid out with the component index outermost, so the pack/unpack kernels treat the vector as 3*nvar scalar variables. Packed buffers are allocated on first use; the shared side tables are built by SideExchange before this is called.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MPIMortarExchangeAsync_MappedVector3D(this, mesh)

GPU-resident analogue of the base-class vector mortar message posting; messages are posted on device memory (GPU-aware MPI).

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MPIMortarFluxAsync_MappedVector3D(this, mesh)

Posts the one-directional messages for MortarFluxCollect on device memory : each remote small face sends its boundaryNormal trace to the big face's rank.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MappedDGDivergence_MappedVector3D(this, df)

Computes the divergence of a 3-D vector using the weak form On input, the attribute of the vector is assigned and the attribute is set to the physical directions of the vector. This method will project the vector onto the contravariant basis vectors.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(in) :: this
type(c_ptr), intent(inout) :: df

public subroutine MappedDivergence_MappedVector3D(this, df)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(in) :: this
type(c_ptr), intent(inout) :: df

public subroutine MortarExchange_MappedVector3D(this, mesh)

GPU implementation of the vector mortar exchange; the kernels treat the (variable, direction) pairs as 3*nvar independent trace lines.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine MortarFluxCollect_MappedVector3D(this, mesh)

GPU implementation of MortarFluxCollect (see the base class for the algorithm and conservation statement). Stages the small faces' boundaryNormal traces in the mortar buffer, then overwrites the big face's integrand on device.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh

public subroutine Resize_MappedVector3D(this, interp, nVar, nElem)

Rebind to a new element count, reusing host pools and device buffers where they fit (AMR Stage 6b). Inherits the Vector3D resize (host pools plus the five device buffers) and adds this class's mortar buffers, which are sized by mesh%nMortars rather than nElem: nMortars changes with the mesh independently of the element count, so a stale buffer would silently under-size the next mortar exchange. They are invalidated here and lazily re-created at the correct size on next use.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Lagrange), intent(in), target:: interp
integer, intent(in) :: nVar
integer, intent(in) :: nElem

public subroutine SetInteriorFromEquation_MappedVector3D(this, geometry, time)

Sets the this % interior attribute using the eqn attribute, geometry (for physical positions), and provided simulation time.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(SEMHex), intent(in) :: geometry
real(kind=prec), intent(in) :: time

public subroutine SideExchange_MappedVector3D(this, mesh)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector3D), intent(inout) :: this
type(Mesh3D), intent(inout) :: mesh