| 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. | ||
| 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 | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D_t), | intent(inout) | :: | this | |||
| type(SEMQuad), | intent(in), | target | :: | geometry |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(in) | :: | this | |||
| real(kind=prec) | :: | df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(out) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| integer, | intent(in) | :: | nVar | |||
| integer, | intent(in) | :: | nElem |
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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
GPU-resident mortar message posting for vector data; messages are posted on device memory (GPU-aware MPI), one per variable and physical direction.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
One-directional messages for MortarFluxCollect on device memory : each remote small side sends its boundaryNormal trace to the big side's rank.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D_t), | intent(in) | :: | this | |||
| real(kind=prec) | :: | df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(out) | :: | df(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(out) | :: | df |
GPU implementation of the vector mortar exchange; the kernels treat the (variable, direction) pairs as 2*nvar independent trace lines.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | 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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MappedVector2D), | 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 equation parser for the idir direction and ivar-th variable
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | idir | |||
| 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(MappedVector2D), | 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(MappedVector2D), | intent(inout) | :: | this | |||
| type(Mesh2D), | intent(inout) | :: | mesh |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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 |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Vector2D_t), | intent(in) | :: | this | |||
| integer(kind=HID_T), | intent(in) | :: | fileId | |||
| character, | intent(in) | :: | group |
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 :: 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