Page 325 - Introduction to Computational Fluid Dynamics
P. 325

P1: ICD
                                                                                   May 11, 2005
                                                                                                 15:43
                            CB908/Date
                                         0 521 85326 5
            0521853265appb
                     304
                                   FCMX=0.0                       APPENDIX B. 1D CONDUCTION CODE
                            C ------------------------------------------------
                            C***   SOLVE BY GAUSS-SIEDEL METHOD
                            C ------------------------------------------------
                                   IF(GAUSS)THEN
                                   DO 2 I=2,N-1
                                   TL=T(I)
                                   ANUM=PSI*(AE(I)*T(I+1)+AW(I)*T(I-1))+SU(I)
                                   T(I)=ANUM/AP(I)
                                   DIFF=(T(I)-TL)/(TL+SMALL)
                                   IF(ABS(DIFF).GT.FCMX)FCMX=ABS(DIFF)
                            2      CONTINUE
                                   ENDIF
                            C ------------------------------------------------
                            C***   SOLVE BY TDMA
                            C ------------------------------------------------
                                   IF(THOMAS)THEN
                            C CALCULATE   COEFFICIENTS BY RECURRENCE
                                   AA(2)=PSI*AE(2)/AP(2)
                                   BB(2)=SU(2)/AP(2)
                                   DO 3 I=3,N-1
                                   DEN=1.0-PSI*AW(I)/AP(I)*AA(I-1)
                                   AA(I)=PSI*AE(I)/AP(I)/(DEN+SMALL)
                            3      BB(I)=(PSI*AW(I)*BB(I-1)+SU(I))/AP(I)/(DEN+SMALL)
                            C BACK SUBSTITUTION
                                   DO 4 I=N-1,2,-1
                                   TL=T(I)
                                   T(I)=AA(I)*T(I+1)+BB(I)
                                   DIFF=(T(I)-TL)/(TL+SMALL)
                                   IF(ABS(DIFF).GT.FCMX)FCMX=ABS(DIFF)
                            4      CONTINUE
                                   ENDIF
                                   RETURN
                                   END
                            C *************************************************
                                   SUBROUTINE UPDATE
                                   INCLUDE ’COM1D.FOR’
                            C *************************************************
                            C RESET OLD VALUES
                                   DO 200 I=1,N
                            200    TO(I)=T(I)
                                   QB1O=QB1
   320   321   322   323   324   325   326   327   328   329   330