马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
c##########################################################################
SUBROUTINE SOLVER(FI)
c##########################################################################
PARAMETER(NX=81,NY=81,NZ=81)
COMMON /IDATA/NI,NJ,NK,NIM,NJM,NKM,X(NX),Y(NY),Z(NZ),XC(NX),
* YC(NY),ZC(NZ)
COMMON /COEF/AW(NX,NY,NZ),AE(NX,NY,NZ),AS(NX,NY,NZ),AN(NX,NY,NZ),
* AB(NX,NY,NZ),AT(NX,NY,NZ),SU(NX,NY,NZ),APO(NX,NY,NZ),
*AP(NX,NY,NZ),SPAD(NX,NY,NZ),SCAD(NX,NY,NZ)
COMMON IST,JST,KST
c===========================================================================
REAL,DIMENSION(NX,NY,NZ)::FI,FIO,FIOO
REAL,DIMENSION(NX): I,QI,AP1,SU1
REAL,DIMENSION(NY): J,QJ,AP2,SU2
REAL,DIMENSION(NZ): K,QK,AP3,SU3
REAL APR,QR
DATA PI /NX*0./,QI /NX*0./,PJ /NY*0./,QJ /NY*0./,
*PK /NZ*0./,QK /NZ*0./
C
C......TO SOLVE WITH TDMA ALONG I LINES
C
DO K=KST,NKM
DO J=JST,NJM
DO I=IST,NIM
AP1(I)=AP(I,J,K)+AE(I,J,K)+AW(I,J,K)
SU1(I)=SU(I,J,K)+APO(I,J,K)*FI(I,J,K)+AS(I,J,K)*
* FI(I,J-1,K)+AN(I,J,K)*FI(I,J+1,K)+AT(I,J,K)*FI(I,J,K+1)+
* AB(I,J,K)*FI(I,J,K-1)-
*(as(i,j,k)+an(i,j,k)+at(i,j,k)+ab(i,j,k))*fi(i,j,k)
END DO
C
PI(IST-1)=0.
QI(IST-1)=FIO(IST-1,J,K)
C
DO I=IST,NIM
APR=AP1(I)-PI(I-1)*AW(I,J,K)
PI(I)=AE(I,J,K)/APR
QR=SU1(I)
QI(I)=(QR+AW(I,J,K)*QI(I-1))/APR
END DO
C
DO I=NIM,IST,-1
FIO(I,J,K)=FIO(I+1,J,K)*PI(I)+QI(I)
END DO
C
END DO
END DO
C
C......TO SOLVE WITH TDMA ALONG J LINES
C
DO K=KST,NKM
DO I=IST,NIM
DO J=JST,NJM
AP2(J)=AP(I,J,K)+AN(I,J,K)+AS(I,J,K)
SU2(J)=SU(I,J,K)+APO(I,J,K)*FI(I,J,K)+
* AW(I,J,K)*FIO(I-1,J,K)+AE(I,J,K)*FIO(I+1,J,K)+
* AT(I,J,K)*FI(I,J,K+1)+AB(I,J,K)*FI(I,J,K-1)-
* (AT(I,J,K)+AB(I,J,K))*FI(I,J,K)-(AW(I,J,K)+AE(I,J,K))*FIO(I,J,K)
END DO
C
PJ(JST-1)=0.
QJ(JST-1)=FIOO(I,JST-1,K)
DO J=JST,NJM
APR=AP2(J)-PJ(J-1)*AS(I,J,K)
PJ(J)=AN(I,J,K)/APR
QR=SU2(J)
QJ(J)=(QR+AS(I,J,K)*QJ(J-1))/APR
END DO
DO J=NJM,JST,-1
FIOO(I,J,K)=FIOO(I,J+1,K)*PJ(J)+QJ(J)
END DO
c
END DO
END DO
C
C......TO SOLVE WITH TDMA ALONG K LINES
C
DO I=IST,NIM
DO J=JST,NJM
DO K=KST,NKM
AP3(K)=AP(I,J,K)+AT(I,J,K)+AB(I,J,K)
SU3(K)=SU(I,J,K)+APO(I,J,K)*FITWO(I,J,K)+
* AS(I,J,K)*FITWO(I,J-1,K)+AN(I,J,K)*FITWO(I,J+1,K)+
* AW(I,J,K)*FIONE(I-1,J,K)+AE(I,J,K)*FIONE(I+1,J,K)-
*(AS(I,J,K)+AN(I,J,K))*FIOO(I,J,K)-(AW(I,J,K)+AE(I,J,K))*
*FIO(I,J,K)
END DO
PK(KST-1)=0.
QK(KST-1)=FI(I,J,KST-1)
DO K=KST,NKM
APR=AP3(K)-PK(K-1)*AB(I,J,K)
PK(K)=AT(I,J,K)/APR
QR=SU3(K)
QK(K)=(QR+AB(I,J,K)*QK(K-1))/APR
END DO
DO K=NKM,KST,-1
FI(I,J,K)=FI(I,J,K+1)*PK(K)+QK(K)
END DO
END DO
END DO
C
C
RETURN
END |