PROGRAM UPWIND C==================================================================== C UPWIND FINITE DIFFERENCE WITH ADDITIVE VISCOSITY C N = NUMBER OF ELEMENTS, NN=NUMBER OF NODES C==================================================================== IMPLICIT REAL*8 ( A-H , O-Z ) PARAMETER ( MXN=31 ) DIMENSION A (MXN,MXN), RHS(MXN) 99 WRITE (*,*)'ENTER U =' READ (*,*) U IF ( U .EQ. 0. ) STOP N = 10 TL = 1.D0 DX = TL/FLOAT(N) FK = 1.D0 FKP = DX*U/2.D0 GBAR = U / FK GAMMA = FKP/FK WRITE (*,*)' GAMMA=',GAMMA C = FKP * ALPHA(GAMMA) + FK DX2 = 2.D0* DX DXDX = DX * DX A1 = - U/DX2 - C / DXDX A2 = 2.D0* C / DXDX A3 = U / DX2 - C / DXDX C--------- RESET MATIX AND RIGHT HAND SIDE NN = N + 1 DO 10 I = 1 , NN RHS (I) = 0. DO 10 J = 1 , NN A (I,J) = 0. 10 CONTINUE DO 20 I = 2 , N A (I,I-1) = A1 A (I,I ) = A2 A (I,I+1) = A3 20 CONTINUE C--------- IMPLEMENTATION OF BOUNDARY CONDITION A (1,1) = 1.D0 RHS(1) = 1.D0 A(NN,NN) = 1.D0 RHS(NN) = 0. C--------- EVELUATION FOR UNKNOWNS CALL SYSTEM ( MXN , NN , A , RHS ) C--------- PRINTING RESULTS X = 0.D0 I = 1 AA = 1.D0-GAMMA BB = 1.D0+GAMMA WRITE (*,200) 200 FORMAT ( 5X,'======== UPWIND PROGRAM =======' ) EX = EXACT ( X , FK , U, TL) WRITE (*,105) 105 FORMAT ( 1X,6X,' X-COORD',6X,' EXACT',' UPWIND SOLUTION', * ' WITHOUT UPWIND') WRITE (*,100) X , EX, RHS(1), EXACT1 ( I, AA, BB, NN ) 100 FORMAT ( 1X, 4F16.10 ) DO 30 I = 2 , NN X = X + DX EX = EXACT( X , FK , U, TL) WRITE (*,100) X , EX, RHS(I), EXACT1 ( I, AA, BB, NN ) 30 CONTINUE GO TO 99 END C FUNCTION ALPHA ( G ) IMPLICIT REAL*8 ( A-H , O-Z ) ALPHA = 0.D0 IF ( G .LE. 0.001D0 ) RETURN ALPHA = 1.D0 IF ( G .GT. 15.D0 ) RETURN E = DEXP( G ) COTHG = ( E + 1.D0/E ) / ( E - 1.D0/E ) ALPHA = COTHG - 1.D0/ G RETURN END C CCCCCCCCCCFUNCTION EXACT ( X , G , U ) C IMPLICIT REAL*8 ( A-H , O-Z ) C EXACT = (1.D0/U)*(X-(1-DEXP(G*X))/(1.-DEXP(G)) ) C RETURN C END C C FUNCTION EXACT ( X , FK , U, TL ) IMPLICIT REAL*8 ( A-H , O-Z ) C---------- T(X=0)=1. AND T(X=TL)=0. EXACT = (DEXP(U*TL/FK)-DEXP(U*X/FK)) / (DEXP(U*TL/FK)-1.) RETURN END C C FUNCTION EXACT1 ( I, A, B, N ) IMPLICIT REAL*8 ( A-H , O-Z ) C---------- T(1)=1. AND T(N)=0. C---------- EXACT SOLUTION FOR FINITE DIFFRENCE EQUATION ABN = (B/A)**N EXACT1 = ( ABN - (B/A)**I ) /( ABN - B/A ) RETURN END C SUBROUTINE SYSTEM ( MXN, N, A, R ) IMPLICIT REAL*8 ( A-H , O-Z ) DIMENSION A(MXN,MXN), R(MXN) DO 40 K = 1 , N P = A(K,K) DO 10 J = K , N A(K,J) = A(K,J) / P 10 CONTINUE R(K) = R(K) / P DO 20 I = 1 , N IF ( I .EQ. K ) GO TO 20 AIK = A (I,K) DO 30 J = K , N A(I,J) = A(I,J)-AIK*A(K,J) 30 CONTINUE R(I) = R(I) - AIK * R(K) 20 CONTINUE 40 CONTINUE RETURN END