TDMA 11.f90 - Solution of system of linear equatrions by Thomas method
From CFD-Wiki
Subroutine TDMA_1(NF)
include 'icomm_1.f90'
Dimension P(nx),Q(nx)
!--------------------------------------------------------------------------------------------------------------------------------------------------------
!--------------------------------------------------------------------------------------------------------------------------------------------------------
!--------------------------------------------------------------------------------------------------------------------------------------------------------
Do 101 J = 2, NYmax
P(1) = 0.
Q(1) = F(1,j,nf)
P(NXmaxP) = 0.
Q(NXmaxP) = F(NXmaxP,j,nf)
! Forward Elimination
Do 10 i = 2,NXmaxP-1
temp = Ap(i,j) - Aw(i,j) * P(i-1)
Spp= Sp(i,j) + As(i,j) * F(i,j-1,nf) + &
An(i,j) * F(i,j+1,nf)
P(i) = Ae(i,j) / temp
Q(i) = (Spp + Aw(i,j)*Q(i-1)) / temp
10 continue
! Back Substitution
Do 20 i = NXmaxP-1,1,-1
F(i,j,nf) = P(i)*F(i+1,j,nf) + Q(i)
20 continue
101 continue
!-------------------------------------------------------------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------------------------------------------------------------
Do 301 J = NYmax,2,-1
P(1) = 0.
Q(1) = F(1,j,nf)
P(NXmaxP) = 0.
Q(NXmaxP) = F(NXmaxP,j,nf)
! Forward Elimination
Do 32 i = 2,NXmaxP-1
temp = Ap(i,j) - Aw(i,j) * P(i-1)
Spp= Sp(i,j) + As(i,j) * F(i,j-1,nf) + &
An(i,j) * F(i,j+1,nf)
P(i) = Ae(i,j) / temp
Q(i) = (Spp + Aw(i,j)*Q(i-1)) / temp
32 continue
! Back Substitution
Do 30 i = NXmaxP-1,2,-1
F(i,j,nf) = P(i)*F(i+1,j,nf) + Q(i)
30 continue
301 continue
!--------------------------------------------------------------------------------------------------------------------------------------------------------
!--------------------------------------------------------------------------------------------------------------------------------------------------------
Do 201 I = NXmax,2,-1
P(1) = 0. Q(1) = F(i,1,nf)
P(NYmaxP) = 0.
Q(NYmaxP) = F(i,NYmaxP,nf)
! Forward Elimination
Do 14 j = 2,NYmaxP-1
temp = Ap(i,j) - As(i,j) * P(j-1)
Spp= Sp(i,j) + Aw(i,j) * F(i-1,j,nf) + &
Ae(i,j) * F(i+1,j,nf)
P(j) = An(i,j) / temp
Q(j) = (Spp - As(i,j)*Q(j-1)) / temp
14 continue
! Back Substitution
Do 22 j = NYmaxP-1,2,-1
! F(i,j,nf) = P(j)*F(i,j+1,nf) + Q(j)
22 continue
201 continue
!--------------------------------------------------------------------------------------------------------------------------------------------------------
!--------------------------------------------------------------------------------------------------------------------------------------------------------
Do 211 I = 2,NXmax
P(1) = 0.
Q(1) = F(i,1,nf)
P(NYmaxP) = 0.
Q(NYmaxP) = F(i,NYmaxP,nf)
! Forward Elimination
Do 15 j = 2,NYmaxP-1
temp = Ap(i,j) - As(i,j) * P(j-1)
Spp= Sp(i,j) + Aw(i,j) * F(i-1,j,nf) + &
Ae(i,j) * F(i+1,j,nf)
P(j) = An(i,j) / temp
Q(j) = (Spp - As(i,j)*Q(j-1)) / temp
15 continue
! Back Substitution
Do 23 j = NYmaxP-1,2,-1
! F(i,j,nf) = P(j)*F(i,j+1,nf) + Q(j)
23 continue
211 continue
!--------------------------------------------------------------------------------------------------------------------------------------------------------
Return
End