17 implicit none ;
private 37 real,
dimension(:,:),
intent(inout) :: A
38 real,
dimension(:),
intent(inout) :: B
39 real,
dimension(:),
intent(inout) :: X
40 integer :: system_size
44 real,
parameter :: eps = 0.0
47 real :: swap_a, swap_b
48 logical :: found_pivot
51 do i = 1,system_size-1
61 do while ( ( .NOT. found_pivot ) .AND. ( k .LE. system_size ) )
63 if ( abs( a(k,i) ) .GT. eps )
then 74 if ( .NOT. found_pivot )
then 76 call mom_error( fatal,
'The linear system is singular !' )
96 a(i,j) = a(i,j) / pivot
104 do k = (i+1),system_size
106 do j = (i+1),system_size
107 a(k,j) = a(k,j) - factor * a(i,j)
109 b(k) = b(k) - factor * b(i)
116 x(system_size) = b(system_size) / a(system_size,system_size)
117 do i = system_size-1,1,-1
119 do j = (i+1),system_size
120 x(i) = x(i) - a(i,j) * x(j)
137 real,
dimension(:),
intent(inout) :: Al, Ad, Au
138 real,
dimension(:),
intent(inout) :: B
139 real,
dimension(:),
intent(inout) :: X
140 integer,
intent(in) :: system_size
150 al(k+1) = al(k+1) / ad(k)
151 ad(k+1) = ad(k+1) - al(k+1) * au(k)
156 b(k) = b(k) - al(k) * b(k-1)
162 x(k) = ( b(k) - au(k)*x(k+1) ) / ad(k)
subroutine, public solve_tridiagonal_system(Al, Ad, Au, B, X, system_size)
subroutine, public solve_linear_system(A, B, X, system_size)
subroutine, public mom_error(level, message, all_print)