Changeset 5223 for LMDZ6/branches/Amaury_dev/libf/dyn3d_common
- Timestamp:
- Sep 23, 2024, 4:45:12 PM (3 months ago)
- Location:
- LMDZ6/branches/Amaury_dev
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 5200
- Property svn:mergeinfo changed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/iso_verif_dyn.f90
r5182 r5223 1 function iso_verif_noNaN_nostop(x,err_msg)2 3 4 1 function iso_verif_noNaN_nostop(x, err_msg) 2 IMPLICIT NONE 3 ! si x est NaN, on affiche message 4 ! d'erreur et return 1 si erreur 5 5 6 7 8 CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher6 ! input: 7 REAL :: x 8 CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher 9 9 10 11 12 parameter (borne=1e19)13 10 ! output 11 REAL :: borne 12 parameter (borne = 1e19) 13 INTEGER :: iso_verif_noNaN_nostop 14 14 15 16 iso_verif_noNAN_nostop=017 18 WRITE(*,*) 'erreur detectee par iso_verif_nonNaN:'19 WRITE(*,*) err_msg20 WRITE(*,*) 'x=',x21 iso_verif_noNaN_nostop=122 15 IF ((x>-borne).AND.(x<borne)) THEN 16 iso_verif_noNAN_nostop = 0 17 else 18 WRITE(*, *) 'erreur detectee par iso_verif_nonNaN:' 19 WRITE(*, *) err_msg 20 WRITE(*, *) 'x=', x 21 iso_verif_noNaN_nostop = 1 22 endif 23 23 24 24 RETURN 25 25 END FUNCTION iso_verif_nonan_nostop 26 26 27 28 (a,b,err_msg)29 30 31 32 27 function iso_verif_egalite_nostop & 28 (a, b, err_msg) 29 IMPLICIT NONE 30 ! compare a et b. Si pas egal, on affiche message 31 ! d'erreur et stoppe 32 ! pour egalite, on verifie erreur absolue et arreur relative 33 33 34 35 36 CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher34 ! input: 35 REAL :: a, b 36 CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher 37 37 38 39 40 41 parameter (errmax=1e-8)42 parameter (errmaxrel=1e-3)38 ! locals 39 REAL :: errmax ! erreur maximale en absolu. 40 REAL :: errmaxrel ! erreur maximale en relatif autorisée 41 parameter (errmax = 1e-8) 42 parameter (errmaxrel = 1e-3) 43 43 44 45 44 ! output 45 INTEGER :: iso_verif_egalite_nostop 46 46 47 iso_verif_egalite_nostop=047 iso_verif_egalite_nostop = 0 48 48 49 IF (abs(a-b)>errmax) THEN50 IF (abs((a-b)/max(max(abs(b),abs(a)),1e-18)) &49 IF (abs(a - b)>errmax) THEN 50 IF (abs((a - b) / max(max(abs(b), abs(a)), 1e-18)) & 51 51 >errmaxrel) THEN 52 WRITE(*,*) 'erreur detectee par iso_verif_egalite:' 53 WRITE(*,*) err_msg 54 WRITE(*,*) 'a=',a 55 WRITE(*,*) 'b=',b 56 iso_verif_egalite_nostop=1 57 endif 52 WRITE(*, *) 'erreur detectee par iso_verif_egalite:' 53 WRITE(*, *) err_msg 54 WRITE(*, *) 'a=', a 55 WRITE(*, *) 'b=', b 56 iso_verif_egalite_nostop = 1 58 57 endif 58 endif 59 59 60 60 RETURN 61 61 END FUNCTION iso_verif_egalite_nostop 62 62 63 63 64 65 (x,iso,q,err_msg)66 67 64 function iso_verif_aberrant_nostop & 65 (x, iso, q, err_msg) 66 USE lmdz_infotrac, ONLY: isoName, getKey 67 IMPLICIT NONE 68 68 69 70 REAL :: x,q71 72 CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher69 ! input: 70 REAL :: x, q 71 INTEGER :: iso ! 2=HDO, 1=O18 72 CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher 73 73 74 ! locals 75 REAL :: qmin,deltaD 76 REAL :: deltaDmax,deltaDmin,tnat 77 parameter (qmin=1e-11) 78 parameter (deltaDmax=200.0,deltaDmin=-999.9) 74 ! locals 75 REAL :: qmin, deltaD 76 REAL :: deltaDmax, deltaDmin, tnat 77 parameter (qmin = 1e-11) 78 parameter (deltaDmax = 200.0, deltaDmin = -999.9) 79 LOGICAL, SAVE :: ltnat1 80 LOGICAL, SAVE :: lFirst = .TRUE. 79 81 80 81 82 ! output 83 INTEGER :: iso_verif_aberrant_nostop 82 84 83 iso_verif_aberrant_nostop=0 85 IF(lFirst) THEN 86 ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1) 87 lFirst = .FALSE. 88 END IF 89 iso_verif_aberrant_nostop = 0 84 90 85 ! verifier que HDO est raisonable 86 IF (q>qmin) THEN 87 IF(getKey('tnat', tnat, isoName(iso))) THEN 88 err_msg = 'Missing isotopic parameter "tnat"' 89 iso_verif_aberrant_nostop=1 90 RETURN 91 END IF 92 deltaD=(x/q/tnat-1)*1000 93 IF ((deltaD>deltaDmax).OR.(deltaD<deltaDmin)) THEN 94 WRITE(*,*) 'erreur detectee par iso_verif_aberrant:' 95 WRITE(*,*) err_msg 96 WRITE(*,*) 'q=',q 97 WRITE(*,*) 'deltaD=',deltaD 98 WRITE(*,*) 'iso=',iso 99 iso_verif_aberrant_nostop=1 100 endif !if ((deltaD.gt.deltaDmax).OR.(deltaD.lt.deltaDmin)) THEN 101 endif !if (q(i,k,iq).gt.qmin) THEN 102 RETURN 91 ! verifier que HDO est raisonable 92 IF (q>qmin) THEN 93 IF(ltnat1) THEN 94 tnat = 1.0 95 ELSE IF(getKey('tnat', tnat, isoName(iso))) THEN 96 err_msg = 'Missing isotopic parameter "tnat"' 97 iso_verif_aberrant_nostop = 1 98 RETURN 99 END IF 100 deltaD = (x / q / tnat - 1) * 1000 101 IF ((deltaD>deltaDmax).OR.(deltaD<deltaDmin)) THEN 102 WRITE(*, *) 'erreur detectee par iso_verif_aberrant:' 103 WRITE(*, *) err_msg 104 WRITE(*, *) 'q=', q 105 WRITE(*, *) 'deltaD=', deltaD 106 WRITE(*, *) 'iso=', iso 107 iso_verif_aberrant_nostop = 1 108 endif !if ((deltaD.gt.deltaDmax).OR.(deltaD.lt.deltaDmin)) THEN 109 endif !if (q(i,k,iq).gt.qmin) THEN 110 RETURN 103 111 END FUNCTION iso_verif_aberrant_nostop 104 112
Note: See TracChangeset
for help on using the changeset viewer.