| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_fw |
fw/bw phase back subs. the auxiliary factors |
||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_bw |
fw/bw phase back subs. the auxiliary factors |
||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_sa |
fw/bw phase back subs. the auxiliary factors |
||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_sc |
fw/bw phase back subs. the auxiliary factors |
||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | dist_af |
fw/bw phase back subs. the auxiliary factors |
||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_f | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_s | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_w | |||
| real(kind=dp), | public, | allocatable, dimension(:) | :: | thom_p | |||
| real(kind=dp), | public, | allocatable | :: | stretch(:) | |||
| real(kind=dp), | public, | allocatable | :: | stretch_correct(:) | |||
| real(kind=dp), | public, | allocatable | :: | coeffs(:) | |||
| real(kind=dp), | public, | allocatable | :: | coeffs_s(:,:) | |||
| real(kind=dp), | public, | allocatable | :: | coeffs_e(:,:) | |||
| real(kind=dp), | public | :: | alpha |
Compact scheme coeffs |
|||
| real(kind=dp), | public | :: | a |
Compact scheme coeffs |
|||
| real(kind=dp), | public | :: | b |
Compact scheme coeffs |
|||
| real(kind=dp), | public | :: | c | = | 0._dp |
Compact scheme coeffs |
|
| real(kind=dp), | public | :: | d | = | 0._dp |
Compact scheme coeffs |
|
| real(kind=dp), | public | :: | beta | = | 0._dp |
LHS 2nd off-diagonal (pentadiag LHS only) |
|
| real(kind=dp), | public | :: | beta_lhs_s | = | 0._dp |
j=1 backward-sub beta (0/2β Neumann, β otherwise) |
|
| logical, | public | :: | periodic | ||||
| logical, | public | :: | pentadiag | = | .false. |
.true. for pentadiagonal LHS schemes Solve with the serial Thomas algorithm instead of the distributed one. The distributed solver truncates a neighbour's influence at the subdomain edge, which is invisible for the well-conditioned derivative operators but not for the low-pass filter, whose system is only marginally diagonally dominant as alpha approaches 0.5. Thomas is serial along the line, so this is only valid when the direction is not decomposed. |
|
| logical, | public | :: | prefer_thomas | = | .false. | ||
| integer, | public | :: | n_tds |
Tridiagonal system size |
|||
| integer, | public | :: | n_rhs |
Right-hand-side builder size |
|||
| integer, | public | :: | move | = | 0 |
move between vertices and cell centres |
|
| integer, | public | :: | n_halo |
number of halo points |
|||
| real(kind=dp), | public, | pointer, contiguous | :: | dist_fw_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | dist_bw_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | dist_sa_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | dist_sc_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | dist_af_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | thom_f_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | thom_s_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | thom_w_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | thom_p_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | stretch_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | stretch_correct_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | coeffs_dev(:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | coeffs_s_dev(:,:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | coeffs_e_dev(:,:) | => | null() | |
| real(kind=dp), | public, | pointer, contiguous | :: | penta_z_dev(:,:) | => | null() |
Columns of A_np^{-1}*[e_1|e_2|e_{n-1}|e_n] for the cyclic pentadiagonal solve. They depend on the operator alone, so they are built once here where the CUDA kernel rebuilds them in every block. |
Tridiagonal low-pass filter, matching Incompact3d's filter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in) | :: | af |
filter parameter, -0.5 < af < 0.5 |
||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in), | optional | :: | sym |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in) | :: | delta | |||
| character(len=*), | intent(in) | :: | scheme | |||
| character(len=*), | intent(in) | :: | from_to | |||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in), | optional | :: | sym |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| character(len=*), | intent(in) | :: | scheme | |||
| character(len=*), | intent(in) | :: | from_to | |||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in), | optional | :: | sym |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in) | :: | delta | |||
| character(len=*), | intent(in) | :: | scheme | |||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in), | optional | :: | sym | ||
| real(kind=dp), | intent(in), | optional | :: | c_nu | ||
| real(kind=dp), | intent(in), | optional | :: | nu0_nu |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in) | :: | delta | |||
| character(len=*), | intent(in) | :: | scheme | |||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in), | optional | :: | sym |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in), | dimension(:) | :: | b |
LU preprocessing for non-periodic pentadiagonal Thomas algorithm.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| integer, | intent(in) | :: | bc_start | |||
| integer, | intent(in) | :: | bc_end | |||
| logical, | intent(in) | :: | symmetry |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(tdsops_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in), | dimension(:) | :: | dist_b |