Advertisement
Guest User

QUANC8

a guest
Dec 11th, 2019
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. !DECLARE MODULE TO PASS THE PARAMETER TO THE EXTERNAL FUNCTION
  2.         MODULE FUN_PARAMETER
  3.         REAL T
  4.         END MODULE
  5.  
  6. !THE EXTERNAL FUNCTION (THE INTEGRAND)
  7.         REAL FUNCTION FUN(Z)
  8.         USE FUN_PARAMETER
  9.         FUN=1/(EXP(1.0)**(1.9 * Z**2) + T)
  10.         RETURN
  11.         END
  12.  
  13.         USE FUN_PARAMETER
  14.         EXTERNAL FUN
  15.         INTEGER NOFUN, ER, L
  16.         REAL FUN,A,B,RELERR,ABSERR,RESULT,ERREST,FLAG, F_K, EPS
  17.         REAL POINTS(7), FS(7), C(7), D(7), E(7), SEVALS(6), F_KS(6)
  18.         REAL LPOLYNOMIAL_VALUES(6)
  19.  
  20. !CALCULATE THE INTEGRAL
  21.         PI=4.D0*DATAN (1.D0)
  22.         A=0.0
  23.         B=1
  24.         RELERR=1.E-06
  25.         ABSERR=0.0
  26.  
  27.         T=-0.5
  28.         DO I=1, 7
  29.             T=T+0.5
  30.             FS(I)=T
  31.             CALL QUANC8(FUN,A,B,ABSERR,RELERR,RESULT, ERREST,NOFUN,FLAG)
  32.             POINTS(I)=RESULT
  33.         END DO
  34.  
  35. !OBTAIN COEFFICIENTS OF THE SPLINE FUNCTION FOR 0.5<=F<=1.5
  36.         CALL SPLINE(7, FS, POINTS, C, D, E)
  37.  
  38. !OBTAIN APPROXIMATE VALUES FOR F=0.55+0.1*K (K=0...9) USING THE SPLINE FUNCTION
  39.         K=0
  40.         DO I=1,6
  41.             F_K=0.25+0.5*K
  42.             F_KS(I)=F_K
  43.             SEVALS(I)=SEVAL(7, F_K, FS, POINTS, C, D, E)
  44.             K=K+1
  45.         END DO
  46.  
  47. !OBTAIN APPROXIMATE VALUES FOR F=0.55+0.1*K (K=0...9) USING THE LAGRANGE POLYNOMIAL
  48.         K=0
  49.         DO L=1,6
  50.             F_K=0.25+0.5*K
  51.             F_KS(L)=F_K
  52.             CALL LAGRANGE_POLINOMIAL(F_KS(L), FS, POINTS, Q)
  53.             LPOLYNOMIAL_VALUES(L)=Q
  54.             K=K+1
  55.         END DO
  56.  
  57.         PRINT *, "F_KS AND CORRESPONDING VALUES OF THE LAGRANGE POLYNOMIAL"
  58.         PRINT 102, (F_KS(I), LPOLYNOMIAL_VALUES(I), I=1,6)
  59.         PRINT *, "F_KS AND CORRESPONDING VALUES OF THE SPLINE FUNCTION"
  60.         PRINT 102, (F_KS(I), SEVALS(I), I=1,6)
  61.         PRINT *, "COEFFICIENTS OF THE SPLINE FUNCTION"
  62.         PRINT 101,(C(I),D(I),E(I),I=1,7)
  63.         PRINT *, "INTEGRAL VALUES:"
  64.         PRINT 101, POINTS
  65.         PRINT *, "F VALUES:"
  66.         PRINT 101, FS
  67.         PRINT 1,RESULT,ERREST,NOFUN,FLAG
  68.         STOP
  69.     1 FORMAT(10X,'RESULT=',E14.7,3X,'ERREST=',E12.5/11X,'NOFUN=',I8,11X,'FLAG=',F10.3)
  70.     101 FORMAT(5X,3E16.7)
  71.     102 FORMAT(5X,2E16.7)
  72.  
  73.         CONTAINS
  74.         SUBROUTINE LAGRANGE_POLINOMIAL(F_KS, FS, POINTS, Q)
  75.         REAL Q
  76.         REAL WKX(7), WKXK(7), FS(7), POINTS(7), F_KS(7)
  77.         Q=0
  78.         WKX(:)=1
  79.         WKXK(:)=1
  80.  
  81.         DO I=1, 7
  82.             DO J=1, 7
  83.                 IF (I/=J) THEN
  84.                     WKX(I)=WKX(I)*(F_K-FS(J))
  85.                     WKXK(I)=WKXK(I)*(FS(I)-FS(J))
  86.                 END IF
  87.             END DO
  88.  
  89.             IF (WKXK(I)/=0) THEN
  90.                 Q=Q+((WKX(I)/WKXK(I))*POINTS(I))
  91.             END IF
  92.         END DO
  93.         END SUBROUTINE
  94.         END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement