camfort-0.62: samples/book/two/code24.f90
!!!!!!!!!!!!!!!!!!!!!!!!!!! Program 2.4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! !
! Please Note: !
! !
! (1) This computer program is written by Tao Pang in conjunction with !
! his book, "An Introduction to Computational Physics," published !
! by Cambridge University Press in 1997. !
! !
! (2) No warranties, express or implied, are made for this program. !
! !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
PROGRAM DERIVATIVES
!
! Main program for derivatives of f(x) = sin(x). F1: f';
! F2: f"; D1: error in f'; and D2: error in f".
! Copyright (c) Tao Pang 1997.
!
IMPLICIT NONE
INTEGER, PARAMETER :: N=101
INTEGER :: I
REAL :: PI,H
REAL, DIMENSION (N) :: X,F,F1,D1,F2,D2
!
PI = 4.0*ATAN(1.0)
H = PI/(2*100)
DO I = 1, N
X(I) = H*(I-1)
F(I) = SIN(X(I))
END DO
CALL THREE(N,H,F,F1,F2)
DO I = 1, N
D1(I) = F1(I)-COS(X(I))
D2(I) = F2(I)+SIN(X(I))
WRITE (6, "(5F10.6)") X(I),F1(I),D1(I),F2(I),D2(I)
END DO
END PROGRAM DERIVATIVES
!
SUBROUTINE THREE (N,H,FI,F1,F2)
!
! Subroutine for 1st and 2nd order derivatives with the three-point
! formulas. Extrapolations are made at the boundaries. FI: input
! f(x); H: interval; F1: f'; and F2: f". Copyright (c) Tao Pang 1997.
!
IMPLICIT NONE
INTEGER, INTENT (IN) :: N
INTEGER :: I
REAL, INTENT (IN) :: H
REAL, INTENT (IN), DIMENSION (N) :: FI
REAL, INTENT (OUT), DIMENSION (N) :: F1,F2
!
! f' and f" from three-point formulas
!
DO I = 2, N-1
F1(I) = (FI(I+1)-FI(I-1))/(2.*H)
F2(I) = (FI(I+1)-2.0*FI(I)+FI(I-1))/(H*H)
END DO
!
! Linear extrapolation for the boundary points
!
F1(1) = 2.0*F1(2)-F1(3)
F1(N) = 2.0*F1(N-1)-F1(N-2)
F2(1) = 2.0*F2(2)-F2(3)
F2(N) = 2.0*F2(N-1)-F2(N-2)
END SUBROUTINE THREE