preprocess_penta_dist Subroutine

public subroutine preprocess_penta_dist(self, bc_start, bc_end, symmetry)

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 Bound

tdsops_t

Arguments

Type IntentOptional Attributes Name
class(tdsops_t), intent(inout) :: self
integer, intent(in) :: bc_start
integer, intent(in) :: bc_end
logical, intent(in) :: symmetry

Called by

proc~~preprocess_penta_dist~~CalledByGraph proc~preprocess_penta_dist m_tdsops::tdsops_t%preprocess_penta_dist proc~deriv_1st m_tdsops::tdsops_t%deriv_1st proc~deriv_1st->proc~preprocess_penta_dist proc~tdsops_init m_tdsops::tdsops_init proc~tdsops_init->proc~deriv_1st interface~tdsops_t m_tdsops::tdsops_t interface~tdsops_t->proc~tdsops_init proc~cuda_tdsops_init m_cuda_tdsops::cuda_tdsops_init proc~cuda_tdsops_init->proc~tdsops_init interface~cuda_tdsops_t m_cuda_tdsops::cuda_tdsops_t interface~cuda_tdsops_t->proc~cuda_tdsops_init