SUBROUTINE check_isotopes(q, ijb, ije, err_msg) USE strings_mod, ONLY: strIdx, msg USE infotrac, ONLY: isotope, isoSelect, iH2O, isoCheck, isoName, nqtot, niso, nitr, nzon, npha, iTraPha, iZonIso, tnat USE parallel_lmdz IMPLICIT NONE #include "dimensions.h" REAL, INTENT(INOUT) :: q(ijb_u:ije_u,llm,nqtot) INTEGER, INTENT(IN) :: ijb, ije !--- Can be local and different from ijb_u,ije_u, for example in qminimum CHARACTER(LEN=*), INTENT(IN) :: err_msg !--- Error message to display CHARACTER(LEN=256) :: msg1, modname INTEGER :: ixt, ipha, k, i, iq, iiso, izon, ieau, iqeau INTEGER, ALLOCATABLE :: ix(:) REAL :: xtractot, xiiso, deltaD, q1, q2 REAL, PARAMETER :: borne = 1e19, & errmax = 1e-8, & !--- Max. absolute error errmaxrel = 1e-8, & !--- Max. relative error qmin = 1e-11, & deltaDmax = 200.0, & deltaDmin =-999.9, & ridicule = 1e-12 INTEGER, SAVE :: ixH2O, ixHDO, ixO18 !OMP THREADPRIVATE(ixH2O, ixHDO, ixO18) LOGICAL, SAVE :: first=.TRUE. !OMP THREADPRIVATE(first) modname = 'check_isotopes' IF(first) THEN iH2O = -1 IF(isoSelect('H2O')) RETURN ixH2O = strIdx(isoName,'H2[16]O') ixHDO = strIdx(isoName,'H[2]HO') ixO18 = strIdx(isoName,'H2[18]O') first = .FALSE. ELSE IF(iH2O == -1) RETURN IF(isoSelect(iH2O)) RETURN END IF IF(.NOT.isoCheck .OR. niso == 0) RETURN !--- No need to check or no isotopes => finished !--- CHECK FOR NaNs (FOR ALL THE ISOTOPES, INCLUDING GEOGRAPHIC TAGGING TRACERS) DO ixt = 1, nitr DO ipha = 1, npha iq = iTraPha(ixt,ipha) !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) DO k = 1, llm DO i = ijb, ije IF(ABS(q(i,k,iq))