| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| 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 | ||
| 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 | ||||
| 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_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 | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(in) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(in) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | df |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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 |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | f |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this | |||
| type(c_ptr), | intent(inout) | :: | f |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | 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. 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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D_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 in the adaptive loop is pure waste because the solution transfer overwrites them immediately.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | 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(Scalar3D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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 |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Scalar3D_t), | intent(in) | :: | this | |||
| integer(kind=HID_T), | intent(in) | :: | fileId | |||
| character, | intent(in) | :: | group |
type,extends(Scalar3D_t),public :: Scalar3D
character(3) :: backend = "gpu"
type(c_ptr) :: interior_gpu
type(c_ptr) :: boundary_gpu
type(c_ptr) :: boundarynormal_gpu
type(c_ptr) :: extBoundary_gpu
type(c_ptr) :: avgBoundary_gpu
!! Bytes currently allocated for each device buffer, so Resize can reuse them (Stage 6b).
integer(c_size_t) :: alloc_interior = 0
integer(c_size_t) :: alloc_boundary = 0
integer(c_size_t) :: alloc_extBoundary = 0
integer(c_size_t) :: alloc_avgBoundary = 0
integer(c_size_t) :: alloc_boundarynormal = 0
contains
procedure,public :: Init => Init_Scalar3D
procedure,public :: Resize => Resize_Scalar3D
procedure,public :: Free => Free_Scalar3D
procedure,public :: UpdateHost => UpdateHost_Scalar3D
procedure,public :: UpdateDevice => UpdateDevice_Scalar3D
procedure,public :: BoundaryInterp => BoundaryInterp_Scalar3D
procedure,public :: AverageSides => AverageSides_Scalar3D
generic,public :: GridInterp => GridInterp_Scalar3D
procedure,private :: GridInterp_Scalar3D
generic,public :: Gradient => Gradient_Scalar3D
procedure,private :: Gradient_Scalar3D
endtype Scalar3D