SELF_MappedVector_2D Module


Uses

  • module~~self_mappedvector_2d~2~~UsesGraph module~self_mappedvector_2d~2 SELF_MappedVector_2D module~self_mappedvector_2d_t SELF_MappedVector_2D_t module~self_mappedvector_2d~2->module~self_mappedvector_2d_t module~self_gpuinterfaces SELF_GPUInterfaces module~self_mappedvector_2d~2->module~self_gpuinterfaces iso_c_binding iso_c_binding module~self_mappedvector_2d~2->iso_c_binding module~self_gpu~2 SELF_GPU module~self_mappedvector_2d~2->module~self_gpu~2 module~self_mappedvector_2d_t->iso_c_binding module~self_constants SELF_Constants module~self_mappedvector_2d_t->module~self_constants module~self_domaindecomposition SELF_DomainDecomposition module~self_mappedvector_2d_t->module~self_domaindecomposition FEQParse FEQParse module~self_mappedvector_2d_t->FEQParse module~self_geometry_2d SELF_Geometry_2D module~self_mappedvector_2d_t->module~self_geometry_2d module~self_lagrange~3 SELF_Lagrange module~self_mappedvector_2d_t->module~self_lagrange~3 module~self_tensor_2d SELF_Tensor_2D module~self_mappedvector_2d_t->module~self_tensor_2d module~self_mesh_2d~2 SELF_Mesh_2D module~self_mappedvector_2d_t->module~self_mesh_2d~2 module~self_vector_2d~2 SELF_Vector_2D module~self_mappedvector_2d_t->module~self_vector_2d~2 module~self_gpuinterfaces->iso_c_binding module~self_gpuinterfaces->module~self_gpu~2 module~self_gpu~2->iso_c_binding module~self_gpu_enums~2 SELF_GPU_enums module~self_gpu~2->module~self_gpu_enums~2 module~self_constants->iso_c_binding iso_fortran_env iso_fortran_env module~self_constants->iso_fortran_env module~self_domaindecomposition_t SELF_DomainDecomposition_t module~self_domaindecomposition->module~self_domaindecomposition_t module~self_geometry_2d->module~self_constants module~self_geometry_2d->module~self_lagrange~3 module~self_geometry_2d->module~self_tensor_2d module~self_geometry_2d->module~self_mesh_2d~2 module~self_geometry_2d->module~self_vector_2d~2 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_gpu_enums~2->iso_c_binding module~self_lagrange~3->iso_c_binding 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_tensor_2d_t SELF_Tensor_2D_t module~self_tensor_2d->module~self_tensor_2d_t 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_lagrange_t->iso_c_binding module~self_lagrange_t->module~self_constants module~self_lagrange_t->iso_fortran_env module~self_lagrange_t->module~self_supportroutines 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_tensor_2d_t->iso_c_binding module~self_tensor_2d_t->module~self_constants module~self_tensor_2d_t->FEQParse module~self_tensor_2d_t->module~self_lagrange~3 module~self_tensor_2d_t->module~self_data module~self_metadata SELF_Metadata module~self_tensor_2d_t->module~self_metadata module~self_tensor_2d_t->module~self_hdf5 module~self_tensor_2d_t->HDF5 module~self_mesh_2d_t->iso_c_binding module~self_mesh_2d_t->module~self_constants module~self_mesh_2d_t->module~self_domaindecomposition module~self_mesh_2d_t->module~self_lagrange~3 module~self_mesh_2d_t->module~self_supportroutines module~self_mesh_2d_t->module~self_quadrature 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_vector_2d_t->iso_c_binding module~self_vector_2d_t->module~self_constants module~self_vector_2d_t->FEQParse module~self_vector_2d_t->module~self_lagrange~3 module~self_vector_2d_t->module~self_data module~self_vector_2d_t->module~self_metadata module~self_vector_2d_t->module~self_hdf5 module~self_vector_2d_t->HDF5 module~self_supportroutines->module~self_constants module~self_supportroutines->iso_fortran_env module~self_domaindecomposition_t->iso_c_binding module~self_domaindecomposition_t->module~self_constants module~self_domaindecomposition_t->module~self_lagrange~3 module~self_domaindecomposition_t->module~self_supportroutines mpi mpi module~self_domaindecomposition_t->mpi module~self_data->iso_c_binding module~self_data->module~self_constants module~self_data->FEQParse module~self_data->module~self_lagrange~3 module~self_data->module~self_metadata module~self_data->module~self_hdf5 module~self_data->HDF5 module~self_scalar_2d~2->iso_c_binding module~self_scalar_2d~2->module~self_constants module~self_scalar_2d_t SELF_Scalar_2D_t module~self_scalar_2d~2->module~self_scalar_2d_t module~self_quadrature->module~self_constants module~self_quadrature->iso_fortran_env module~self_metadata->module~self_hdf5 module~self_metadata->HDF5 module~self_hdf5->module~self_constants module~self_hdf5->iso_fortran_env module~self_hdf5->HDF5 module~self_hdf5->mpi module~self_scalar_2d_t->iso_c_binding module~self_scalar_2d_t->module~self_constants module~self_scalar_2d_t->FEQParse module~self_scalar_2d_t->module~self_lagrange~3 module~self_scalar_2d_t->module~self_data module~self_scalar_2d_t->module~self_metadata module~self_scalar_2d_t->module~self_hdf5 module~self_scalar_2d_t->HDF5 module~self_mesh->iso_c_binding module~self_mesh->module~self_constants module~self_mesh->module~self_domaindecomposition

Contents


Interfaces

interface

  • public subroutine ContravariantProjection_2D_gpu(f, dsdx, N, nvar, nel) bind(c,name="0")

    Arguments

    TypeIntentOptionalAttributesName
    type(c_ptr), value:: f
    type(c_ptr), value:: dsdx
    integer(kind=c_int), value:: N
    integer(kind=c_int), value:: nvar
    integer(kind=c_int), value:: nel

Derived Types

type, public, extends(MappedVector2D_t) :: MappedVector2D

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
type(EquationParser), public, allocatable:: eqn(:)
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: extBoundary
type(SEMQuad), 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

Type-Bound Procedures

procedure, public :: AssociateGeometry => AssociateGeometry_MappedVector2D_t
procedure, public :: AverageSides => AverageSides_Vector2D_t
procedure, public :: BoundaryInterp => BoundaryInterp_Vector2D_t
procedure, public :: DissociateGeometry => DissociateGeometry_MappedVector2D_t
generic, public :: Divergence => Divergence_Vector2D_t
procedure, public :: Free => Free_MappedVector2D
generic, public :: Gradient => Gradient_Vector2D_t
generic, public :: GridInterp => GridInterp_Vector2D_t
procedure, public :: Init => Init_Vector2D_t
procedure, private :: MPIExchangeAsync => MPIExchangeAsync_MappedVector2D
procedure, private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedVector2D
procedure, private :: MPIMortarFluxAsync => MPIMortarFluxAsync_MappedVector2D
generic, public :: MappedDGDivergence => MappedDGDivergence_MappedVector2D_t, MappedDGDivergence_MappedVector2D
procedure, private :: MappedDGDivergence_MappedVector2D
generic, public :: MappedDivergence => MappedDivergence_MappedVector2D_t, MappedDivergence_MappedVector2D
procedure, private :: MappedDivergence_MappedVector2D
procedure, public :: MortarExchange => MortarExchange_MappedVector2D
procedure, public :: MortarFluxCollect => MortarFluxCollect_MappedVector2D
procedure, public :: SetDescription => SetDescription_DataObj
generic, public :: SetEquation => SetEquation_DataObj, SetEquation_Vector2D_t
procedure, public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedVector2D
procedure, public :: SetName => SetName_DataObj
procedure, public :: SetUnits => SetUnits_DataObj
procedure, public :: SideExchange => SideExchange_MappedVector2D
procedure, public :: UpdateDevice => UpdateDevice_Vector2D_t
procedure, public :: UpdateHost => UpdateHost_Vector2D_t
generic, public :: WriteHDF5 => WriteHDF5_MPI_Vector2D_t, WriteHDF5_Vector2D_t

Subroutines

public subroutine Free_MappedVector2D(this)

Arguments

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

public subroutine MPIExchangeAsync_MappedVector2D(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 2*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(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh

public subroutine MPIMortarExchangeAsync_MappedVector2D(this, mesh)

GPU-resident mortar message posting for vector data; messages are posted on device memory (GPU-aware MPI), one per variable and physical direction.

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh

public subroutine MPIMortarFluxAsync_MappedVector2D(this, mesh)

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

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh

public subroutine MappedDGDivergence_MappedVector2D(this, df)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(c_ptr), intent(out) :: df

public subroutine MappedDivergence_MappedVector2D(this, df)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(c_ptr), intent(out) :: df

public subroutine MortarExchange_MappedVector2D(this, mesh)

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

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh

public subroutine MortarFluxCollect_MappedVector2D(this, mesh)

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

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh

public subroutine SetInteriorFromEquation_MappedVector2D(this, geometry, time)

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

Arguments

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

public subroutine SideExchange_MappedVector2D(this, mesh)

Arguments

TypeIntentOptionalAttributesName
class(MappedVector2D), intent(inout) :: this
type(Mesh2D), intent(inout) :: mesh