MappedVector2D Derived Type

type, public, extends(MappedVector2D_t) :: MappedVector2D


Inherits

type~~mappedvector2d~2~~InheritsGraph type~mappedvector2d~2 MappedVector2D c_ptr c_ptr type~mappedvector2d~2->c_ptr mortarBuff_gpu, halo_sendbuf_gpu, halo_recvbuf_gpu type~mappedvector2d_t MappedVector2D_t type~mappedvector2d~2->type~mappedvector2d_t type~semquad SEMQuad type~mappedvector2d_t->type~semquad geometry type~vector2d~2 Vector2D type~mappedvector2d_t->type~vector2d~2 type~semquad->type~vector2d~2 x, nHat, xMesh type~tensor2d~2 Tensor2D type~semquad->type~tensor2d~2 dxds, dsdx type~lagrange Lagrange type~semquad->type~lagrange meshToModel type~scalar2d~2 Scalar2D type~semquad->type~scalar2d~2 nScale, J type~vector2d_t Vector2D_t type~vector2d~2->type~vector2d_t type~tensor2d_t Tensor2D_t type~tensor2d~2->type~tensor2d_t type~lagrange_t Lagrange_t type~lagrange->type~lagrange_t type~scalar2d_t Scalar2D_t type~scalar2d~2->type~scalar2d_t type~self_dataobj SELF_DataObj type~vector2d_t->type~self_dataobj type~tensor2d_t->type~self_dataobj type~scalar2d_t->type~self_dataobj type~self_dataobj->type~lagrange interp type~metadata Metadata type~self_dataobj->type~metadata meta EquationParser EquationParser type~self_dataobj->EquationParser eqn

Contents

Source Code


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(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
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_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

  • public subroutine Divergence_Vector2D_t(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec) :: df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar)

procedure, public :: Free => Free_MappedVector2D

generic, public :: Gradient => Gradient_Vector2D_t

  • public subroutine Gradient_Vector2D_t(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec), intent(out) :: df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:2,1:2)

generic, public :: GridInterp => GridInterp_Vector2D_t

  • public subroutine GridInterp_Vector2D_t(this, f)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    real(kind=prec), intent(out) :: f(1:this%M+1,1:this%M+1,1:this%nelem,1:this%nvar,1:2)

procedure, public :: Init => Init_Vector2D_t

  • public subroutine Init_Vector2D_t(this, interp, nVar, nElem)

    Arguments

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

procedure, private :: MPIExchangeAsync => MPIExchangeAsync_MappedVector2D

  • 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

procedure, private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedVector2D

  • 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

procedure, private :: MPIMortarFluxAsync => MPIMortarFluxAsync_MappedVector2D

  • 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

procedure, public :: MapArrays => MapArrays_Vector2D_t

  • public subroutine MapArrays_Vector2D_t(this, Np, nVar, nElem)

    Size the backing pools for (Np,nVar,nElem) and remap the public arrays onto them at the exact logical shape. See SELF_DataPool for why this is done with pointer remapping rather than by over-allocating the element dimension.

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(inout) :: this
    integer, intent(in) :: Np
    integer, intent(in) :: nVar
    integer, intent(in) :: nElem
  • public subroutine MappedDGDivergence_MappedVector2D_t(this, df)

    Computes the divergence of a 2-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(MappedVector2D_t), intent(in) :: this
    real(kind=prec) :: df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar)
  • public subroutine MappedDGDivergence_MappedVector2D(this, df)

    Arguments

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

procedure, private :: MappedDGDivergence_MappedVector2D

procedure, private :: MappedDivergence_MappedVector2D

procedure, public :: MortarExchange => MortarExchange_MappedVector2D

  • 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

procedure, public :: MortarFluxCollect => MortarFluxCollect_MappedVector2D

  • 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

procedure, public :: Resize => Resize_MappedVector2D

  • public subroutine Resize_MappedVector2D(this, interp, nVar, nElem)

    Rebind to a new element count, reusing host pools and device buffers where they fit (AMR Stage 6b). Inherits the Vector2D 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(MappedVector2D), intent(inout) :: this
    type(Lagrange), intent(in), target:: interp
    integer, intent(in) :: nVar
    integer, intent(in) :: nElem

procedure, public :: SetDescription => SetDescription_DataObj

  • public subroutine SetDescription_DataObj(this, ivar, description)

    Set the description of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: description

generic, public :: SetEquation => SetEquation_DataObj, SetEquation_Vector2D_t

  • public subroutine SetEquation_DataObj(this, ivar, eqnChar)

    Sets the equation parser for the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: eqnChar
  • public subroutine SetEquation_Vector2D_t(this, idir, ivar, eqnChar)

    Sets the equation parser for the idir direction and ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(inout) :: this
    integer, intent(in) :: idir
    integer, intent(in) :: ivar
    character, intent(in) :: eqnChar

procedure, public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedVector2D

  • 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

procedure, public :: SetName => SetName_DataObj

  • public subroutine SetName_DataObj(this, ivar, name)

    Set the name of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: name

procedure, public :: SetUnits => SetUnits_DataObj

  • public subroutine SetUnits_DataObj(this, ivar, units)

    Set the units of the ivar-th variable

    Arguments

    TypeIntentOptionalAttributesName
    class(SELF_DataObj), intent(inout) :: this
    integer, intent(in) :: ivar
    character, intent(in) :: units

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

  • public subroutine WriteHDF5_MPI_Vector2D_t(this, fileId, group, elemoffset, nglobalelem)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    integer(kind=HID_T), intent(in) :: fileId
    character, intent(in) :: group
    integer, intent(in) :: elemoffset
    integer, intent(in) :: nglobalelem
  • public subroutine WriteHDF5_Vector2D_t(this, fileId, group)

    Arguments

    TypeIntentOptionalAttributesName
    class(Vector2D_t), intent(in) :: this
    integer(kind=HID_T), intent(in) :: fileId
    character, intent(in) :: group

Source Code

  type,extends(MappedVector2D_t),public :: MappedVector2D

    type(c_ptr) :: mortarBuff_gpu = c_null_ptr ! mortar trace staging (lazy allocation)

    ! Packed device buffers for the aggregated MPI halo exchange. The side
    ! tables are shared across fields and live on mesh%decomp; the buffers
    ! are per-field (sized for 2*nvar variables, since both vector components
    ! are exchanged) and allocated lazily on the first exchange.
    type(c_ptr) :: halo_sendbuf_gpu = c_null_ptr ! packed device send buffer
    type(c_ptr) :: halo_recvbuf_gpu = c_null_ptr ! packed device receive buffer

  contains
    procedure,public :: Resize => Resize_MappedVector2D
    procedure,public :: Free => Free_MappedVector2D
    procedure,public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedVector2D

    procedure,public :: SideExchange => SideExchange_MappedVector2D
    procedure,private :: MPIExchangeAsync => MPIExchangeAsync_MappedVector2D

    procedure,public :: MortarExchange => MortarExchange_MappedVector2D
    procedure,public :: MortarFluxCollect => MortarFluxCollect_MappedVector2D
    procedure,private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedVector2D
    procedure,private :: MPIMortarFluxAsync => MPIMortarFluxAsync_MappedVector2D

    generic,public :: MappedDivergence => MappedDivergence_MappedVector2D
    procedure,private :: MappedDivergence_MappedVector2D

    generic,public :: MappedDGDivergence => MappedDGDivergence_MappedVector2D
    procedure,private :: MappedDGDivergence_MappedVector2D

  endtype MappedVector2D