- Timestamp:
- Jul 23, 2024, 7:14:34 PM (8 weeks ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/iso_verif_dyn.f90
r5104 r5105 1 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 realx8 character*(*)err_msg ! message d''erreur à afficher6 ! ! input: 7 real :: x 8 character(len=*) :: err_msg ! message d''erreur à afficher 9 9 10 ! output11 realborne12 13 integeriso_verif_noNaN_nostop10 ! ! output 11 real :: borne 12 parameter (borne=1e19) 13 integer :: iso_verif_noNaN_nostop 14 14 15 16 17 18 19 20 21 22 endif15 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 25 end 24 return 25 end function iso_verif_nonan_nostop 26 26 27 function iso_verif_egalite_nostop28 :(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 reala, b36 character*(*)err_msg ! message d''erreur à afficher34 ! ! input: 35 real :: a, b 36 character(len=*) :: err_msg ! message d''erreur à afficher 37 37 38 39 realerrmax ! erreur maximale en absolu.40 realerrmaxrel ! erreur maximale en relatif autorisée41 42 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 integeriso_verif_egalite_nostop44 ! ! output 45 integer :: iso_verif_egalite_nostop 46 46 47 47 iso_verif_egalite_nostop=0 48 48 49 50 if (abs((a-b)/max(max(abs(b),abs(a)),1e-18))51 :>errmaxrel) then52 53 54 55 56 57 58 endif59 60 61 end 49 if (abs(a-b)>errmax) then 50 if (abs((a-b)/max(max(abs(b),abs(a)),1e-18)) & 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 58 endif 59 60 return 61 end function iso_verif_egalite_nostop 62 62 63 63 64 function iso_verif_aberrant_nostop 65 : (x,iso,q,err_msg) 66 USE infotrac, ONLY: isoName, getKey 67 implicit none 68 69 ! input: 70 real x,q 71 integer iso ! 2=HDO, 1=O18 72 character*(*) err_msg ! message d''erreur à afficher 64 function iso_verif_aberrant_nostop & 65 (x,iso,q,err_msg) 66 USE infotrac, ONLY: isoName, getKey 67 implicit none 73 68 74 ! locals 75 real qmin,deltaD 76 real deltaDmax,deltaDmin,tnat 77 parameter (qmin=1e-11) 78 parameter (deltaDmax=200.0,deltaDmin=-999.9) 69 ! ! input: 70 real :: x,q 71 integer :: iso ! 2=HDO, 1=O18 72 character(len=*) :: err_msg ! message d''erreur à afficher 79 73 80 ! output 81 integer iso_verif_aberrant_nostop 74 ! ! locals 75 real :: qmin,deltaD 76 real :: deltaDmax,deltaDmin,tnat 77 parameter (qmin=1e-11) 78 parameter (deltaDmax=200.0,deltaDmin=-999.9) 82 79 83 iso_verif_aberrant_nostop=0 80 ! ! output 81 integer :: iso_verif_aberrant_nostop 84 82 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 83 iso_verif_aberrant_nostop=0 102 84 103 104 return 105 end 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 106 102 103 104 return 105 end function iso_verif_aberrant_nostop 106
Note: See TracChangeset
for help on using the changeset viewer.