MappedScalar3D Derived Type

type, public, extends(MappedScalar3D_t) :: MappedScalar3D


Inherits

type~~mappedscalar3d~~InheritsGraph type~mappedscalar3d MappedScalar3D c_ptr c_ptr type~mappedscalar3d->c_ptr jas_gpu, mortarBuff_gpu, anisoMortarBuff_gpu, halo_sendbuf_gpu, halo_recvbuf_gpu type~mappedscalar3d_t MappedScalar3D_t type~mappedscalar3d->type~mappedscalar3d_t type~semhex SEMHex type~mappedscalar3d_t->type~semhex geometry type~scalar3d Scalar3D type~mappedscalar3d_t->type~scalar3d type~semhex->type~scalar3d nScale, J type~vector3d Vector3D type~semhex->type~vector3d x, nHat, xMesh type~lagrange Lagrange type~semhex->type~lagrange meshToModel type~tensor3d Tensor3D type~semhex->type~tensor3d dxds, dsdx type~scalar3d->c_ptr interior_gpu, boundary_gpu, boundarynormal_gpu, extBoundary_gpu, avgBoundary_gpu type~scalar3d_t Scalar3D_t type~scalar3d->type~scalar3d_t type~vector3d->c_ptr interior_gpu, boundary_gpu, extBoundary_gpu, avgBoundary_gpu, boundaryNormal_gpu type~vector3d_t Vector3D_t type~vector3d->type~vector3d_t type~lagrange->c_ptr qWeights_gpu, iMatrix_gpu, dMatrix_gpu, dgMatrix_gpu, dSplitMatrix_gpu, bMatrix_gpu, mortarR_gpu, mortarP_gpu type~lagrange_t Lagrange_t type~lagrange->type~lagrange_t type~tensor3d->c_ptr interior_gpu, boundary_gpu, extBoundary_gpu type~tensor3d_t Tensor3D_t type~tensor3d->type~tensor3d_t type~self_dataobj SELF_DataObj type~scalar3d_t->type~self_dataobj type~vector3d_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 type~tensor3d_t->type~self_dataobj

Inherited by

type~~mappedscalar3d~~InheritedByGraph type~mappedscalar3d MappedScalar3D type~dgmodel3d_t DGModel3D_t type~dgmodel3d_t->type~mappedscalar3d solution, source, fluxDivergence, dSdt, workSol type~esatmo3d_t ESAtmo3D_t type~esatmo3d_t->type~mappedscalar3d diffDiv type~ecdgmodel3d ECDGModel3D type~esatmo3d_t->type~ecdgmodel3d type~ecdgmodel3d_t ECDGModel3D_t type~ecdgmodel3d_t->type~mappedscalar3d mortarNormal type~dgmodel3d DGModel3D type~ecdgmodel3d_t->type~dgmodel3d type~dgmodel3d->type~dgmodel3d_t type~esatmo3d~2 ESAtmo3D type~esatmo3d~2->type~esatmo3d_t type~ecdgmodel3d->type~ecdgmodel3d_t type~dgmodel3d~2 DGModel3D type~dgmodel3d~2->type~dgmodel3d_t type~esatmo3d ESAtmo3D type~esatmo3d->type~esatmo3d_t type~ecdgmodel3d~2 ECDGModel3D type~ecdgmodel3d~2->type~ecdgmodel3d_t type~elementset3d ElementSet3D type~elementset3d->type~dgmodel3d model type~nulldgmodel3d_t NullDGModel3D_t type~nulldgmodel3d_t->type~dgmodel3d type~lineareuler3d_t LinearEuler3D_t type~lineareuler3d_t->type~dgmodel3d type~ecadvection3d_t ECAdvection3D_t type~ecadvection3d_t->type~ecdgmodel3d type~advection_diffusion_3d_t advection_diffusion_3d_t type~advection_diffusion_3d_t->type~dgmodel3d type~multisetmodel3d_t MultiSetModel3D_t type~multisetmodel3d_t->type~elementset3d sets type~nulldgmodel3d NullDGModel3D type~nulldgmodel3d->type~nulldgmodel3d_t type~lineareuler3d~2 LinearEuler3D type~lineareuler3d~2->type~lineareuler3d_t type~nulldgmodel3d~2 NullDGModel3D type~nulldgmodel3d~2->type~nulldgmodel3d_t type~lineareuler3d LinearEuler3D type~lineareuler3d->type~lineareuler3d_t type~ecadvection3d ECAdvection3D type~ecadvection3d->type~ecadvection3d_t type~ecadvection3d~2 ECAdvection3D type~ecadvection3d~2->type~ecadvection3d_t type~advection_diffusion_3d advection_diffusion_3d type~advection_diffusion_3d->type~advection_diffusion_3d_t type~advection_diffusion_3d~2 advection_diffusion_3d type~advection_diffusion_3d~2->type~advection_diffusion_3d_t type~multisetmodel3d MultiSetModel3D type~multisetmodel3d->type~multisetmodel3d_t type~multisetmodel3d~2 MultiSetModel3D type~multisetmodel3d~2->type~multisetmodel3d_t

Contents

Source Code


Components

TypeVisibilityAttributesNameInitial
integer, public :: M
integer, public :: N
integer(kind=c_size_t), public :: alloc_avgBoundary =0
integer(kind=c_size_t), public :: alloc_boundary =0
integer(kind=c_size_t), public :: alloc_boundarynormal =0
integer(kind=c_size_t), public :: alloc_extBoundary =0
integer(kind=c_size_t), public :: alloc_interior =0
integer(kind=c_size_t), public :: alloc_jas =0
real(kind=prec), public, allocatable, dimension(:,:,:,:,:):: anisoMortarBuff
type(c_ptr), public :: anisoMortarBuff_gpu =c_null_ptr
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: avgBoundary
type(c_ptr), public :: avgBoundary_gpu

Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b).

character(len=3), public :: backend ="gpu"
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: boundary
type(c_ptr), public :: boundary_gpu
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() stays exactly as before while Resize can reuse the storage across an adaptation epoch. Nothing should index the pools.

type(c_ptr), public :: boundarynormal_gpu
type(EquationParser), public, allocatable:: eqn(:)
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: extBoundary
type(c_ptr), public :: extBoundary_gpu
type(SEMHex), public, pointer:: geometry=> null()
logical, public :: geometry_associated =.false.
integer, public :: halo_inflight =0
integer, public :: halo_nactive =0
type(c_ptr), public :: halo_recvbuf_gpu =c_null_ptr
integer, public, allocatable:: halo_reqs(:)

Bytes currently allocated for jas_gpu, so Resize can reuse it (Stage 6b). The capacity counters for the five arrays inherited from Scalar3D are declared there.

type(c_ptr), public :: halo_sendbuf_gpu =c_null_ptr
logical, public :: halo_static_done =.false.
real(kind=prec), public, pointer, contiguous, dimension(:,:,:,:,:):: interior
type(c_ptr), public :: interior_gpu
type(Lagrange), public, pointer:: interp
type(c_ptr), public :: jas_gpu
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 :: AnisoMortarExchange => AnisoMortarExchange_MappedScalar3D

  • public subroutine AnisoMortarExchange_MappedScalar3D(this, mesh)

    GPU implementation of the anisotropic mortar exchange (see the base class for the algorithm) : traces are staged, reoriented, restricted, and projected in device memory with the SELF_Mortar kernels.

    Arguments

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

procedure, public :: AssociateGeometry => AssociateGeometry_MappedScalar3D_t

procedure, public :: AverageSides => AverageSides_Scalar3D

procedure, public :: BoundaryInterp => BoundaryInterp_Scalar3D

procedure, public :: DissociateGeometry => DissociateGeometry_MappedScalar3D_t

procedure, public :: Free => Free_MappedScalar3D

generic, public :: Gradient => Gradient_Scalar3D_t, Gradient_Scalar3D

  • public subroutine Gradient_Scalar3D_t(this, df)

    Arguments

    TypeIntentOptionalAttributesName
    class(Scalar3D_t), intent(in) :: this
    real(kind=prec), intent(out) :: df(1:this%N+1,1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:3)
  • public subroutine Gradient_Scalar3D(this, df)

    Arguments

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

generic, public :: GridInterp => GridInterp_Scalar3D_t, GridInterp_Scalar3D

  • public subroutine GridInterp_Scalar3D_t(this, f)

    Arguments

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

    (Output) Array of function values, defined on the target grid

  • public subroutine GridInterp_Scalar3D(this, f)

    Arguments

    TypeIntentOptionalAttributesName
    class(Scalar3D), intent(inout) :: this
    type(c_ptr), intent(inout) :: f

procedure, public :: Init => Init_MappedScalar3D

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

    Arguments

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

procedure, private :: MPIAnisoMortarExchangeAsync => MPIAnisoMortarExchangeAsync_MappedScalar3D

  • public subroutine MPIAnisoMortarExchangeAsync_MappedScalar3D(this, mesh)

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

    Arguments

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

procedure, private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedScalar3D

  • public subroutine MPIMortarExchangeAsync_MappedScalar3D(this, mesh)

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

    Arguments

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

procedure, public :: MapArrays => MapArrays_Scalar3D_t

  • public subroutine MapArrays_Scalar3D_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. Bounds-remapping a rank-1 contiguous target to a rank-5 pointer is what keeps every extent and stride identical to a plain allocate while allowing the pool underneath to be larger and reused. See SELF_DataPool.

    Arguments

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

    Calculates the gradient of a function using the weak form of the gradient and the average boundary state. This method will compute the average boundary state from the and attributes of

    Arguments

    TypeIntentOptionalAttributesName
    class(MappedScalar3D_t), intent(in) :: this
    real(kind=prec), intent(out) :: df(1:this%N+1,1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:3)
  • public subroutine MappedDGGradient_MappedScalar3D(this, df)

    Calculates the gradient of a function using the weak form of the gradient and the average boundary state. This method will compute the average boundary state from the and attributes of

    Arguments

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

procedure, private :: MappedDGGradient_MappedScalar3D

  • public subroutine MappedDGGradient_MappedScalar3D(this, df)

    Calculates the gradient of a function using the weak form of the gradient and the average boundary state. This method will compute the average boundary state from the and attributes of

    Arguments

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

generic, public :: MappedGradient => MappedGradient_MappedScalar3D_t, MappedGradient_MappedScalar3D

  • public subroutine MappedGradient_MappedScalar3D_t(this, df)

    Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.

    Arguments

    TypeIntentOptionalAttributesName
    class(MappedScalar3D_t), intent(in) :: this
    real(kind=prec), intent(out) :: df(1:this%N+1,1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:3)
  • public subroutine MappedGradient_MappedScalar3D(this, df)

    Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.

    Arguments

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

procedure, private :: MappedGradient_MappedScalar3D

  • public subroutine MappedGradient_MappedScalar3D(this, df)

    Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.

    Arguments

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

procedure, public :: MortarExchange => MortarExchange_MappedScalar3D

  • public subroutine MortarExchange_MappedScalar3D(this, mesh)

    GPU implementation of the mortar exchange (see the base class for the algorithm) : traces are staged, reoriented, restricted, and projected in device memory with the SELF_Mortar kernels.

    Arguments

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

procedure, public :: Resize => Resize_MappedScalar3D

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

    Rebind to a new element count, reusing host pools and device buffers where they fit (AMR Stage 6b), and without uploading zeros the way Init does.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(MappedScalar3D), 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

  • 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

procedure, public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedScalar3D

  • public subroutine SetInteriorFromEquation_MappedScalar3D(this, geometry, time)

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

    Arguments

    TypeIntentOptionalAttributesName
    class(MappedScalar3D), intent(inout) :: this
    type(SEMHex), 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_MappedScalar3D

procedure, public :: SideExchangeFinish => SideExchangeFinish_MappedScalar3D

  • public subroutine SideExchangeFinish_MappedScalar3D(this, mesh)

    Complete the aggregated halo exchange started by SideExchangeStart: wait on the persistent requests and unpack the received traces into extBoundary, applying side flips. The host blocks in MPI_Waitall (which also drives MPI progress) while previously launched device kernels continue to execute. No-op if no exchange is in flight.

    Arguments

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

procedure, public :: SideExchangeStart => SideExchangeStart_MappedScalar3D

  • public subroutine SideExchangeStart_MappedScalar3D(this, mesh, nactive)

    Begin the aggregated halo exchange and launch the local (same-rank) side exchange kernel.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(MappedScalar3D), intent(inout) :: this
    type(Mesh3D), intent(inout) :: mesh
    integer, intent(in), optional :: nactive

procedure, public :: UpdateDevice => UpdateDevice_MappedScalar3D

procedure, public :: UpdateHost => UpdateHost_Scalar3D

generic, public :: WriteHDF5 => WriteHDF5_MPI_Scalar3D_t, WriteHDF5_Scalar3D_t

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

    Arguments

    TypeIntentOptionalAttributesName
    class(Scalar3D_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_Scalar3D_t(this, fileId, group)

    Arguments

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

Source Code

  type,extends(MappedScalar3D_t),public :: MappedScalar3D

    type(c_ptr) :: jas_gpu ! jacobian weighted scalar for gradient calculation
    type(c_ptr) :: mortarBuff_gpu = c_null_ptr ! mortar trace staging (lazy allocation)
    type(c_ptr) :: anisoMortarBuff_gpu = c_null_ptr ! anisotropic mortar staging (lazy)

    ! Packed device buffers and persistent MPI requests for the aggregated
    ! halo exchange. The side tables are shared across fields and live on
    ! mesh%decomp; the buffers and requests are per-field (sized by this
    ! field's variable count) and created 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
    integer,allocatable :: halo_reqs(:) ! persistent requests; receives in 1:nnbr, sends in nnbr+1:2*nnbr
    !! Bytes currently allocated for jas_gpu, so Resize can reuse it (Stage 6b). The capacity
    !! counters for the five arrays inherited from Scalar3D are declared there.
    integer(c_size_t) :: alloc_jas = 0
    integer :: halo_nactive = 0 ! variable count baked into halo_reqs
    integer :: halo_inflight = 0 ! variable count of the exchange in flight (0 = none)
    logical :: halo_static_done = .false. ! all variables have been exchanged at least once

  contains
    procedure,public :: Init => Init_MappedScalar3D
    procedure,public :: Resize => Resize_MappedScalar3D
    procedure,public :: Free => Free_MappedScalar3D
    procedure,public :: UpdateDevice => UpdateDevice_MappedScalar3D

    procedure,public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedScalar3D

    procedure,public :: SideExchange => SideExchange_MappedScalar3D
    procedure,public :: SideExchangeStart => SideExchangeStart_MappedScalar3D
    procedure,public :: SideExchangeFinish => SideExchangeFinish_MappedScalar3D
    procedure,public :: MortarExchange => MortarExchange_MappedScalar3D
    procedure,private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedScalar3D
    procedure,public :: AnisoMortarExchange => AnisoMortarExchange_MappedScalar3D
    procedure,private :: MPIAnisoMortarExchangeAsync => MPIAnisoMortarExchangeAsync_MappedScalar3D

    generic,public :: MappedGradient => MappedGradient_MappedScalar3D
    procedure,private :: MappedGradient_MappedScalar3D

    generic,public :: MappedDGGradient => MappedDGGradient_MappedScalar3D
    procedure,private :: MappedDGGradient_MappedScalar3D

  endtype MappedScalar3D