| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | M | ||||
| integer, | public | :: | N | ||||
| integer(kind=c_size_t), | public | :: | alloc_boundary | = | 0 | ||
| integer(kind=c_size_t), | public | :: | alloc_extBoundary | = | 0 | ||
| integer(kind=c_size_t), | public | :: | alloc_interior | = | 0 | ||
| character(len=3), | public | :: | backend | = | "gpu" | ||
| real(kind=prec), | public, | pointer, contiguous, dimension(:,:,:,:,:,:) | :: | boundary | |||
| type(c_ptr), | public | :: | boundary_gpu | ||||
| type(EquationParser), | public, | allocatable | :: | eqn(:) | |||
| real(kind=prec), | public, | pointer, contiguous, dimension(:,:,:,:,:,:) | :: | extBoundary | High-water-mark backing store for the arrays above (AMR Stage 6b/6c; 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(c_ptr), | public | :: | extBoundary_gpu | Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b/6c). |
|||
| real(kind=prec), | public, | pointer, contiguous, dimension(:,:,:,:,:,:) | :: | interior | |||
| type(c_ptr), | public | :: | interior_gpu | ||||
| type(Lagrange), | public, | pointer | :: | interp | |||
| type(Metadata), | public, | allocatable | :: | meta(:) | |||
| integer, | public | :: | nElem | ||||
| integer, | public | :: | nVar | ||||
| real(kind=prec), | public, | pointer, contiguous | :: | pool_boundary(:) | => | null() | |
| real(kind=prec), | public, | pointer, contiguous | :: | pool_extBoundary(:) | => | null() | |
| real(kind=prec), | public, | pointer, contiguous | :: | pool_interior(:) | => | null() |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D_t), | intent(in) | :: | this | |||
| real(kind=prec), | intent(out) | :: | det(1:this%N+1,1:this%N+1,1:this%nelem,1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(out) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| integer, | intent(in) | :: | nVar | |||
| integer, | intent(in) | :: | 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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | Np | |||
| integer, | intent(in) | :: | nVar | |||
| integer, | intent(in) | :: | nElem |
Rebind to a new element count, reusing host pools and device buffers where they fit. Deliberately does NOT call UpdateDevice: Init uploads freshly zeroed arrays, which is pure waste in the adaptive loop because the arrays are rewritten immediately after.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| integer, | intent(in) | :: | nVar | |||
| integer, | intent(in) | :: | nElem |
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 |
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(Tensor2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |
type,extends(Tensor2D_t),public :: Tensor2D
character(3) :: backend = "gpu"
type(c_ptr) :: interior_gpu
type(c_ptr) :: boundary_gpu
type(c_ptr) :: extBoundary_gpu
!! Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b/6c).
integer(c_size_t) :: alloc_interior = 0
integer(c_size_t) :: alloc_boundary = 0
integer(c_size_t) :: alloc_extBoundary = 0
contains
procedure,public :: Init => Init_Tensor2D
procedure,public :: Resize => Resize_Tensor2D
procedure,public :: Free => Free_Tensor2D
procedure,public :: UpdateHost => UpdateHost_Tensor2D
procedure,public :: UpdateDevice => UpdateDevice_Tensor2D
endtype Tensor2D