| 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() |
| procedure, public :: BoundaryInterp => BoundaryInterp_Tensor2D_t | |
| generic, public :: Determinant => Determinant_Tensor2D_t | |
| procedure, public :: Free => Free_Tensor2D | |
| procedure, public :: Init => Init_Tensor2D | |
| procedure, public :: MapArrays => MapArrays_Tensor2D_t | |
| procedure, public :: Resize => Resize_Tensor2D | |
| procedure, public :: SetDescription => SetDescription_DataObj | |
| generic, public :: SetEquation => SetEquation_DataObj | |
| procedure, public :: SetName => SetName_DataObj | |
| procedure, public :: SetUnits => SetUnits_DataObj | |
| procedure, public :: UpdateDevice => UpdateDevice_Tensor2D | |
| procedure, public :: UpdateHost => UpdateHost_Tensor2D |
Grow each device buffer to hold the current logical array, reusing the existing allocation when the bytes already fit (AMR Stage 6b/6c). A device pointer carries no shape, so only byte capacity has to be tracked.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |
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 |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Tensor2D), | intent(inout) | :: | this |