Line data Source code
1 : MODULE m_rsimp 2 : 3 : CONTAINS 4 : 5 76 : REAL FUNCTION rsimp(mrad,f,r,irn,dx) 6 : 7 : IMPLICIT NONE 8 : 9 : ! radial integration via simpson 10 : INTEGER,INTENT (IN) :: mrad 11 : REAL dx 12 : INTEGER irn 13 : 14 : REAL f(mrad),r(mrad) 15 : 16 : REAL s 17 : INTEGER i,isw,nl,np 18 : 19 76 : isw = 0 20 76 : rsimp = 0.0 21 76 : IF (irn.LE.2) RETURN 22 76 : IF (irn/2*2.EQ.irn) isw = 1 23 76 : np = irn - isw 24 76 : s = f(1)*r(1) + f(np)*r(np) 25 76 : nl = np - 1 26 76 : DO i = 2,nl,2 27 25536 : s = s + 4.0*f(i)*r(i) 28 : END DO 29 76 : nl = nl - 1 30 76 : IF (.NOT.(nl.LT.3)) THEN 31 76 : DO i = 3,nl,2 32 25460 : s = s + 2.0*f(i)*r(i) 33 : END DO 34 : END IF 35 76 : s = s*dx/3.0 36 76 : IF (.NOT.(isw.EQ.1)) THEN 37 76 : rsimp = s 38 : RETURN 39 : END IF 40 0 : rsimp = s + (f(irn)*r(irn)+f(irn-1)*r(irn-1))*0.50*dx 41 0 : RETURN 42 : END FUNCTION rsimp 43 : END MODULE m_rsimp