LOGICAL FUNCTION iso_verif_noNaN_nostop(x,err_msg) RESULT(out) USE infotrac, ONLY: isoCheck IMPLICIT NONE !--- Display the message if x is NaN and return .TRUE. if an error occured. REAL, INTENT(IN) :: x CHARACTER(LEN=*), INTENT(IN) :: err_msg include "iniprint.h" REAL, PARAMETER :: borne=1e19 out = .FALSE. IF(.NOT.isoCheck) RETURN out = x<=-borne .OR. x>=borne IF(.NOT.out) RETURN WRITE(lunout,*) 'Error detected by iso_verif_noNaN: '//TRIM(err_msg) WRITE(lunout,*) 'x=',x END FUNCTION iso_verif_noNaN_nostop LOGICAL FUNCTION iso_verif_egalite_nostop(a,b,err_msg) RESULT(out) USE infotrac, ONLY: isoCheck IMPLICIT NONE !--- Display the message if a/=b and return .FALSE. if an error occured. ! Equality is checked for absolute and relative error. REAL, INTENT(IN) :: a,b CHARACTER(LEN=*), INTENT(IN) :: err_msg include "iniprint.h" REAL, PARAMETER :: errmax=1e-8, errmaxrel=1e-3 out = .FALSE. IF(.NOT.isoCheck) RETURN out = ABS(a-b)>errmax IF(out) out = ABS((a-b)/MAX(MAX(ABS(b),ABS(a)),1e-18))>errmaxrel IF(.NOT.out) RETURN WRITE(lunout,*) 'Error detected by iso_verif_egalite: '//TRIM(err_msg) WRITE(lunout,*) 'a=',a WRITE(lunout,*) 'b=',b END FUNCTION iso_verif_egalite_nostop LOGICAL FUNCTION iso_verif_aberrant_nostop(x,kiso,q,err_msg) RESULT(out) USE infotrac, ONLY: isoCheck, tnat IMPLICIT NONE !--- Display the message if a/=b and return .FALSE. if an error occured. ! Equality is checked for absolute and relative error. REAL, INTENT(IN) :: x, q INTEGER, INTENT(IN) :: kiso ! 2=HDO, 1=O18 CHARACTER(LEN=*), INTENT(IN) :: err_msg include "iniprint.h" REAL, PARAMETER :: qmin=1e-11, deltaDmax=200.0, deltaDmin=-999.9 REAL :: deltaD out = .FALSE. IF(.NOT.isoCheck) RETURN IF(qdeltaDmax .OR. deltaD