Device backend of the column operators (see SELF_ColumnOperators_3D_t). Every operator reads and writes the device copies (interior_gpu) of its fields and the device copy of the covariant basis, and moves no data between host and device. The caller uploads the inputs (UpdateDevice) and downloads the outputs (UpdateHost) when it needs them on the host.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(c_ptr), | value | :: | qbar | |||
| type(c_ptr), | value | :: | q | |||
| integer(kind=c_int), | value | :: | N | |||
| integer(kind=c_int), | value | :: | nLayers | |||
| integer(kind=c_int), | value | :: | nColumns | |||
| integer(kind=c_int), | value | :: | nvar |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(c_ptr), | value | :: | q | |||
| type(c_ptr), | value | :: | dxds | |||
| type(c_ptr), | value | :: | qWeights | |||
| type(c_ptr), | value | :: | qbar | |||
| integer(kind=c_int), | value | :: | N | |||
| integer(kind=c_int), | value | :: | nLayers | |||
| integer(kind=c_int), | value | :: | nColumns | |||
| integer(kind=c_int), | value | :: | nvar |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(c_ptr), | value | :: | aInv | |||
| type(c_ptr), | value | :: | r | |||
| type(c_ptr), | value | :: | inflow | |||
| type(c_ptr), | value | :: | q | |||
| integer(kind=c_int), | value | :: | N | |||
| integer(kind=c_int), | value | :: | nLayers | |||
| integer(kind=c_int), | value | :: | nColumns | |||
| integer(kind=c_int), | value | :: | nvar | |||
| integer(kind=c_int), | value | :: | upward |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | N | = | 0 | Polynomial degree of the solution |
|
| real(kind=prec), | public, | pointer, contiguous, dimension(:,:) | :: | downInverse | => | null() | At^{-1} in the same convention |
| type(c_ptr), | public | :: | downInverse_gpu | = | c_null_ptr | ||
| type(SEMHex), | public, | pointer | :: | geometry | => | null() | |
| type(Lagrange), | public, | pointer | :: | interp | => | null() | |
| logical, | public | :: | lobatto | = | .false. | True when the control nodes are Gauss-Lobatto, which the sweeps require |
|
| integer, | public | :: | nColumns | = | 0 | Rank-local columns, which is the rank-local element count of the surface mesh |
|
| integer, | public | :: | nElem | = | 0 | Rank-local 3-D elements, nLayers*nColumns |
|
| integer, | public | :: | nLayers | = | 0 | Layers per column, nz |
|
| real(kind=prec), | public, | pointer, contiguous, dimension(:,:) | :: | upInverse | => | null() | A^{-1} in SELF's matrix convention: (A^{-1} r)_l = sum_m upInverse(m,l) r_m |
| type(c_ptr), | public | :: | upInverse_gpu | = | c_null_ptr |
| procedure, public :: Broadcast => Broadcast_ColumnOperators3D | |
| procedure, public :: ColumnIntegral => ColumnIntegral_ColumnOperators3D | |
| procedure, public :: Free => Free_ColumnOperators3D | |
| procedure, public :: Init => Init_ColumnOperators3D | |
| procedure, public :: VerticalSweepDown => VerticalSweepDown_ColumnOperators3D | |
| procedure, public :: VerticalSweepUp => VerticalSweepUp_ColumnOperators3D |
Device version of Broadcast_ColumnOperators3D_t
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(in) | :: | this | |||
| class(Scalar2D), | intent(in) | :: | qbar | |||
| class(Scalar3D), | intent(inout) | :: | q |
Device version of ColumnIntegral_ColumnOperators3D_t
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | q | |||
| class(Scalar2D), | intent(inout) | :: | qbar |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(inout) | :: | this |
Init_ColumnOperators3D_t, followed by a copy of the two sweep inverses to the device
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(out) | :: | this | |||
| type(Lagrange), | intent(in), | target | :: | interp | ||
| type(Mesh3D), | intent(in) | :: | mesh | |||
| type(SEMHex), | intent(in), | target | :: | geometry |
Device version of VerticalSweepDown_ColumnOperators3D_t
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | r | |||
| class(Scalar2D), | intent(in) | :: | qTop | |||
| class(Scalar3D), | intent(inout) | :: | q |
Device version of VerticalSweepUp_ColumnOperators3D_t
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ColumnOperators3D), | intent(in) | :: | this | |||
| class(Scalar3D), | intent(in) | :: | r | |||
| class(Scalar2D), | intent(in) | :: | qBottom | |||
| class(Scalar3D), | intent(inout) | :: | q |