LU preprocessing for non-periodic pentadiagonal Thomas algorithm.
System: betax_{i-2} + alphax_{i-1} + x_i + alphax_{i+1} + betax_{i+2} = r_i
After LU factorization, L has lower factors l1 (sub-1) and l2 (sub-2); U has diagonal d, upper-1 factor u1, and upper-2 = beta (constant).
Array meanings (repurposed for pentadiag, differ from tridiag usage): dist_fw(i) = 1/d_i -- inverse pivot for forward substitution dist_af(i) = l1_i -- lower-1 (alpha) elimination factor dist_sa(i) = l2_i -- lower-2 (beta) elimination factor dist_bw(i) = u1_i -- upper-1 factor for backward substitution self%beta = const -- upper-2 factor (beta, constant for interior rows)
BC_NEUMANN modifications: sym=True start: row 1 → f'_1 = 0 (u1_1 = 0); beta_lhs_s = 0 sym=False start: row 1 → f'_1 + 2αf'_2 + 2βf'_3 (u1_1 = 2α); beta_lhs_s = 2β sym=True end: row n → f'_n = 0 (l1_n = l2_n = 0, d_n = 1) sym=False end: row n → sub-diagonals doubled (2α, 2β)
| 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 |