| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| 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. | ||
| 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(:) | |||
| 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(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 |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D_t), | intent(inout) | :: | this | |||
| type(SEMQuad), | intent(in), | target | :: | geometry |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(inout) | :: | df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar,1:2) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(inout) | :: | f(1:this%M+1,1:this%M+1,1:this%nelem,1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(out) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| integer, | intent(in) | :: | nVar | |||
| integer, | intent(in) | :: | nElem |
GPU-resident analogue of the base-class mortar message posting; messages are posted on device memory (GPU-aware MPI), following MPIExchangeAsync.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D_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) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | df |
Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D_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) |
Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
Set the description of the ivar-th variable
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(SELF_DataObj), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | ivar | |||
| character, | intent(in) | :: | description |
Sets the equation parser for the ivar-th variable
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(SELF_DataObj), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | ivar | |||
| character, | intent(in) | :: | eqnChar |
Sets the this % interior attribute using the eqn attribute, geometry (for physical positions), and provided simulation time.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(SEMQuad), | intent(in) | :: | geometry | |||
| real(kind=prec), | intent(in) | :: | time |
Set the name of the ivar-th variable
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(SELF_DataObj), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | ivar | |||
| character, | intent(in) | :: | name |
Set the units of the ivar-th variable
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(SELF_DataObj), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | ivar | |||
| character, | intent(in) | :: | units |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | 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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
Begin the aggregated halo exchange and launch the local (same-rank) side exchange kernel.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedScalar2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh | |||
| integer, | intent(in), | optional | :: | nactive |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(in) | :: | this | |||
| integer(kind=HID_T), | intent(in) | :: | fileId | |||
| character, | intent(in) | :: | group | |||
| integer, | intent(in) | :: | elemoffset | |||
| integer, | intent(in) | :: | nglobalelem |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar2D_t), | intent(in) | :: | this | |||
| integer(kind=HID_T), | intent(in) | :: | fileId | |||
| character, | intent(in) | :: | group |
type,extends(MappedScalar2D_t),public :: MappedScalar2D
type(c_ptr) :: jas_gpu ! jacobian weighted scalar for gradient calculation
type(c_ptr) :: mortarBuff_gpu = c_null_ptr ! mortar trace staging (lazy allocation)
! 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
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_MappedScalar2D
procedure,public :: Free => Free_MappedScalar2D
procedure,public :: SetInteriorFromEquation => SetInteriorFromEquation_MappedScalar2D
procedure,public :: SideExchange => SideExchange_MappedScalar2D
procedure,public :: SideExchangeStart => SideExchangeStart_MappedScalar2D
procedure,public :: SideExchangeFinish => SideExchangeFinish_MappedScalar2D
procedure,public :: MortarExchange => MortarExchange_MappedScalar2D
procedure,private :: MPIMortarExchangeAsync => MPIMortarExchangeAsync_MappedScalar2D
generic,public :: MappedGradient => MappedGradient_MappedScalar2D
procedure,private :: MappedGradient_MappedScalar2D
generic,public :: MappedDGGradient => MappedDGGradient_MappedScalar2D
procedure,private :: MappedDGGradient_MappedScalar2D
endtype MappedScalar2D