include file: ERF_LSP 4 C*LL IN-LINE FUNCTION ERF_LSP------------------------------------------ ERF_LSP.2 !LL ERF_LSP.3 !LL Purpose: ERF_LSP.4 !LL Vectorizable calculation of (x**3 / 3) - x + (PI**0.5 * ERF(x)/2 ERF_LSP.5 !LL needed for LSPFOR routine evaluation of autoconversion rate. ERF_LSP.6 !LL Need to declare REAL ERF_LSP, XERF, TERF and to calculate ERF_LSP.7 !LL SQRT_PI = SQRT(PI) in calling routine. ERF_LSP.8 !LL ERF_LSP.9 !LL Author: A Bushell ERF_LSP.10 !LL ERF_LSP.11 !LL Model Modification history from model version 4.0: ERF_LSP.12 !LL version date ERF_LSP.13 !LL ERF_LSP.14 !LL Documentation: ERF_LSP.15 !LL For abs(XERF) <= 1.161, use the lowest order terms of the integrated ERF_LSP.16 !LL exp(-XERF**2) Maclaurin expansion. For a ERF_LSP.17 !LL mantissa precision error 1E-13, this will be ERF_LSP.18 !LL EXACT for abs(XERF) < 0.03 with max error at ERF_LSP.19 !LL 1.161 of about 0.01%. ERF_LSP.20 !LL For abs(XERF) > 1.161, Press, Teukolsky, Vettering & Flannery ERF_LSP.21 !LL NUMERICAL RECIPES IN FORTRAN eq 6.2.6 gives ERF_LSP.22 !LL a continued fraction representation. The 1st ERF_LSP.23 !LL 4 terms give ERF to high accuracy for ERF_LSP.24 !LL abs(XERF) > 2 & max error < 0.02% at 1.161. ERF_LSP.25 !LL ERF_LSP.26 !LL NOTE: ERF = (2/SQRT(Pi)) * (XERF - ((XERF**3)/3) + ERF_LSP) ERF_LSP.27 !LL BUT I have a provisional ERF COMDECK if you are interested. ACB. ERF_LSP.28 C*---------------------------------------------------------------------- ERF_LSP.29 ! ERF_LSP.30 TERF = XERF * XERF ERF_LSP.31 ! ERF_LSP.32 IF (ABS(XERF) .LE. 1.161) THEN ERF_LSP.33 !------Hardwired version of small x approximation----------------------- ERF_LSP.34 ERF_LSP = XERF * TERF * TERF * 0.1 ERF_LSP.35 & * (1. - ((5. / 21.) * TERF * (1. - ((7. / 36.) * TERF ERF_LSP.36 & * (1. - ((9. / 55.) * TERF * (1. - ((11. / 78.) * TERF )))) ERF_LSP.37 & )))) ERF_LSP.38 ! ERF_LSP.39 ELSEIF (ABS(XERF) .GT. 1.161 .AND. ABS(XERF) .LT. 6.) THEN ERF_LSP.40 !------Continued fraction approximation at large xerf------------------- ERF_LSP.41 ERF_LSP = SIGN((SQRT_PI * 0.5),XERF) - (XERF * (1. - (TERF / 3.) ERF_LSP.42 & + (EXP(- TERF) / (2. * (TERF + 0.5 - (0.5 / (TERF + 2.5 ERF_LSP.43 & - (3. / (TERF + 4.5 - (7.5 / (TERF + 6.5)))))))) ))) ERF_LSP.44 ! ERF_LSP.45 ELSE ERF_LSP.46 ERF_LSP = SIGN((SQRT_PI * 0.5),XERF) + (XERF * ((TERF / 3.) - 1.)) ERF_LSP.47 ! ERF_LSP.48 ENDIF ERF_LSP.49 C*---------------------------------------------------------------------- ERF_LSP.50