Changeset 5200 for LMDZ6/trunk/libf


Ignore:
Timestamp:
Sep 19, 2024, 4:11:02 PM (2 months ago)
Author:
dcugnet
Message:

Replace the hard-coded "tnat1" (TRUE by default) by a variable that can be changed using "tnateq1" in *.def files.
"iso_verif_dyn" now uses also this variable (fix)

Location:
LMDZ6/trunk/libf
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3d/check_isotopes.F90

    r5190 r5200  
    2020                      deltaDmin =-999.0, &
    2121                      ridicule  = 1e-12
    22    INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, &
    23                              iso_O17, iso_HTO
    24    LOGICAL, SAVE :: first=.TRUE.
    25    LOGICAL, PARAMETER :: tnat1=.TRUE.
     22   INTEGER, SAVE :: iso_eau, iso_O17, iso_O18, iso_HDO, iso_HTO
     23   LOGICAL, SAVE :: ltnat1, first=.TRUE.
    2624
    2725   modname='check_isotopes'
     
    3028   IF(niso == 0)        RETURN                   !--- No isotopes => finished
    3129   IF(first) THEN
     30      ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
     31      ALLOCATE(tnat(niso))
    3232      iso_eau = strIdx(isoName,'H216O')
     33      iso_O17 = strIdx(isoName,'H217O')
     34      iso_O18 = strIdx(isoName,'H218O')
    3335      iso_HDO = strIdx(isoName,'HDO')
    34       iso_O18 = strIdx(isoName,'H218O')
    35       iso_O17 = strIdx(isoName,'H217O')
    3636      iso_HTO = strIdx(isoName,'HTO')
    37       if (tnat1) then
    38               tnat(:)=1.0
    39       else
     37      IF(ltnat1) THEN
     38         tnat(:)=1.0
     39      ELSE
    4040         IF(getKey('tnat', tnat)) CALL abort_gcm(modname, 'missing isotopic parameter', 1)
    41       endif
     41      END IF
    4242      first = .FALSE.
    4343   END IF
     
    5151         DO k = 1, llm
    5252            DO i = 1, ip1jmp1
    53                IF(ABS(q(i,k,iq)) < borne) CYCLE
     53               IF(ABS(q(i,k,iq)) <= borne) CYCLE
    5454               WRITE(msg1,'(s,"(",i0,",",i0,",",i0,") = ",ES12.4)')TRIM(isoName(ixt)),i,k,iq,q(i,k,iq)
    5555               CALL msg(msg1, modname)
  • LMDZ6/trunk/libf/dyn3d/dynetat0.F90

    r5199 r5200  
    1919  USE temps_mod, ONLY: annee_ref, day_ini, day_ref, itau_dyn, start_time
    2020  USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
     21#ifdef CPP_IOIPSL
     22  USE IOIPSL,   ONLY: getin
     23#else
     24  USE ioipsl_getincom, ONLY: getin
     25#endif
    2126
    2227  IMPLICIT NONE
     
    4247  INTEGER :: iq, fID, vID, idecal, iqParent, iName, iZone, iPhase
    4348  REAL    :: time, tnat, alpha_ideal, tab_cntrl(length)    !--- RUN PARAMS TABLE
    44   LOGICAL :: lSkip, ll
    45   LOGICAL,PARAMETER :: tnat1=.TRUE.
     49  LOGICAL :: lSkip, ll, ltnat1
    4650!-------------------------------------------------------------------------------
    4751  modname="dynetat0"
     
    133137  ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr                                 !--- DETECT OLD REPRO start.nc FILE
    134138#endif
     139  ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
    135140  DO iq=1,nqtot
    136141    var = tracers(iq)%name
     
    156161      iqParent = tracers(iq)%iqParent
    157162      IF(tracers(iq)%iso_iZone == 0) THEN
    158          if (tnat1) then
    159                  tnat=1.0
    160                  alpha_ideal=1.0
    161                  write(*,*) 'attention dans dynetat0: les alpha_ideal sont a 1'
    162          else
     163         IF(ltnat1) THEN
     164            tnat = 1.0
     165            alpha_ideal = 1.0
     166            CALL msg(' !!!  Beware: alpha_ideal put to 1  !!!', modname)
     167         ELSE
    163168          IF(getKey('tnat', tnat, isoName(iName)) .OR. getKey('alpha', alpha_ideal, isoName(iName))) &
    164169            CALL abort_gcm(TRIM(modname), 'missing isotopic parameters', 1)
    165          endif
     170         END IF
    166171         CALL msg('Missing tracer <'//TRIM(var)//'> => initialized with a simplified Rayleigh distillation law.', modname)
    167172         q(:,:,:,iq) = q(:,:,:,iqParent)*tnat*(q(:,:,:,iqParent)/30.e-3)**(alpha_ideal-1.)
  • LMDZ6/trunk/libf/dyn3d/iniacademic.F90

    r5199 r5200  
    7979
    8080  REAL zdtvr, tnat, alpha_ideal
    81   LOGICAL,PARAMETER :: tnat1=.true.
     81  LOGICAL :: ltnat1
    8282 
    8383  character(len=*),parameter :: modname="iniacademic"
     
    308308        ! bulk initialization of tracers
    309309        if (planet_type=="earth") then
     310           ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
    310311           ! Earth: first two tracers will be water
    311312           do iq=1,nqtot
     
    321322              iqParent = tracers(iq)%iqParent
    322323              IF(tracers(iq)%iso_iZone == 0) THEN
    323                  if (tnat1) then
    324                          tnat=1.0
    325                          alpha_ideal=1.0
    326                          write(*,*) 'Attention dans iniacademic: alpha_ideal=1'
    327                  else
     324                 IF(ltnat1) THEN
     325                    tnat = 1.0
     326                    alpha_ideal = 1.0
     327                    WRITE(lunout, *)'In '//TRIM(modname)//': !!!  Beware: alpha_ideal put to 1  !!!'
     328                 ELSE
    328329                    IF(getKey('tnat', tnat, isoName(iName)) .OR. getKey('alpha', alpha_ideal, isoName(iName))) &
    329330                    CALL abort_gcm(TRIM(modname), 'missing isotopic parameters', 1)
    330                  endif
     331                 END IF
    331332                 q(:,:,iq) = q(:,:,iqParent)*tnat*(q(:,:,iqParent)/30.e-3)**(alpha_ideal-1.)
    332333              ELSE !IF(tracers(iq)%iso_iZone == 0) THEN
  • LMDZ6/trunk/libf/dyn3d_common/iso_verif_dyn.F

    r5190 r5200  
    6464        function iso_verif_aberrant_nostop
    6565     :           (x,iso,q,err_msg)
     66#ifdef CPP_IOIPSL
     67        USE IOIPSL, ONLY: getin
     68#else
     69        USE ioipsl_getincom, ONLY: getin
     70#endif
    6671        USE infotrac, ONLY: isoName, getKey
    6772        implicit none
     
    7782        parameter (qmin=1e-11)
    7883        parameter (deltaDmax=200.0,deltaDmin=-999.9)
     84        LOGICAL, SAVE :: ltnat1
     85        LOGICAL, SAVE :: lFirst=.TRUE.
    7986
    8087        ! output
    8188        integer iso_verif_aberrant_nostop
    8289
     90        IF(lFirst) THEN
     91           ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
     92           lFirst = .FALSE.
     93        END IF
    8394        iso_verif_aberrant_nostop=0
    8495
    8596        ! verifier que HDO est raisonable
    8697         if (q.gt.qmin) then
    87              IF(getKey('tnat', tnat, isoName(iso))) THEN
     98             IF(ltnat1) THEN
     99                tnat = 1.0
     100             ELSE IF(getKey('tnat', tnat, isoName(iso))) THEN
    88101                  err_msg = 'Missing isotopic parameter "tnat"'
    89102                  iso_verif_aberrant_nostop=1
  • LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F90

    r5190 r5200  
    44   USE infotrac,    ONLY: nqtot, niso, nphas, isotope, isoCheck, iqIsoPha, isoSelect, &
    55                          ntiso, iH2O, nzone, tracers, isoName,  itZonIso, getKey
     6#ifdef CPP_IOIPSL
     7   USE ioipsl,          ONLY: getin
     8#else
     9   USE ioipsl_getincom, ONLY: getin
     10#endif
    611   IMPLICIT NONE
    712   include "dimensions.h"
     
    2126                      deltaDmin =-999.0, &
    2227                      ridicule  = 1e-12
    23    INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, & !--- OpenMP shared variables
    24                              iso_O17, iso_HTO
     28   INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, iso_O17, iso_HTO
     29!$OMP THREADPRIVATE(iso_eau, iso_HDO, iso_O18, iso_O17, iso_HTO)
     30   LOGICAL       :: ltnat1
    2531   LOGICAL, SAVE :: first=.TRUE.
    26    LOGICAL, PARAMETER :: tnat1=.TRUE.
    2732!$OMP THREADPRIVATE(first)
    2833
     
    3338   IF(first) THEN
    3439!$OMP MASTER
     40      ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
     41      ALLOCATE(tnat(niso))
    3542      iso_eau = strIdx(isoName,'H216O')
     43      iso_O17 = strIdx(isoName,'H217O')
     44      iso_O18 = strIdx(isoName,'H218O')
    3645      iso_HDO = strIdx(isoName,'HDO')
    37       iso_O18 = strIdx(isoName,'H218O')
    38       iso_O17 = strIdx(isoName,'H217O')
    3946      iso_HTO = strIdx(isoName,'HTO')
    40       if (tnat1) then
    41               tnat(:)=1.0
    42       else
     47      IF(ltnat1) THEN
     48         tnat(:)=1.0
     49      ELSE
    4350         IF(getKey('tnat', tnat)) CALL abort_gcm(modname, 'missing isotopic parameter', 1)
    44       endif
     51      END IF
    4552!$OMP END MASTER
    4653!$OMP BARRIER
     
    5764         DO k = 1, llm
    5865            DO i = ijb, ije
    59                IF(ABS(q(i,k,iq))<=borne) CYCLE
     66               IF(ABS(q(i,k,iq)) <= borne) CYCLE
    6067               WRITE(msg1,'(s,"(",i0,",",i0,",",i0,") = ",ES12.4)')TRIM(isoName(ixt)),i,k,iq,q(i,k,iq)
    6168               CALL msg(msg1, modname)
  • LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90

    r5199 r5200  
    2020  USE temps_mod, ONLY: annee_ref, day_ini, day_ref, itau_dyn, start_time
    2121  USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
     22#ifdef CPP_IOIPSL
     23  USE IOIPSL,   ONLY: getin
     24#else
     25  USE ioipsl_getincom, ONLY: getin
     26#endif
    2227
    2328  IMPLICIT NONE
     
    4752  REAL,             ALLOCATABLE :: ucov_glo(:,:),    q_glo(:,:), phis_glo(:)
    4853  REAL,             ALLOCATABLE :: teta_glo(:,:)
    49   LOGICAL :: lSkip, ll
    50   LOGICAL,PARAMETER :: tnat1=.TRUE.
     54  LOGICAL :: lSkip, ll, ltnat1
    5155!-------------------------------------------------------------------------------
    5256  modname="dynetat0_loc"
     
    158162  ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr                                 !--- DETECT OLD REPRO start.nc FILE
    159163#endif
     164  ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
    160165  DO iq=1,nqtot
    161166    var = tracers(iq)%name
     
    181186      iqParent = tracers(iq)%iqParent
    182187      IF(tracers(iq)%iso_iZone == 0) THEN
    183          if (tnat1) then
    184                  tnat=1.0
    185                  alpha_ideal=1.0
    186                  write(*,*) 'attention dans dynetat0: les alpha_ideal sont a 1'
    187          else
     188         IF(ltnat1) THEN
     189            tnat = 1.0
     190            alpha_ideal = 1.0
     191            CALL msg(' !!!  Beware: alpha_ideal put to 1  !!!', modname)
     192         ELSE
    188193          IF(getKey('tnat', tnat, isoName(iName)) .OR. getKey('alpha', alpha_ideal, isoName(iName))) &
    189194            CALL abort_gcm(TRIM(modname), 'missing isotopic parameters', 1)
    190          endif
     195         END IF
    191196         CALL msg('Missing tracer <'//TRIM(var)//'> => initialized with a simplified Rayleigh distillation law.', modname)
    192197         q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat*(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal-1.)
  • LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90

    r5199 r5200  
    8484
    8585  REAL zdtvr, tnat, alpha_ideal
    86   LOGICAL,PARAMETER :: tnat1=.true.
     86  LOGICAL :: ltnat1
    8787 
    8888  character(len=*),parameter :: modname="iniacademic"
     
    310310        ! bulk initialization of tracers
    311311        if (planet_type=="earth") then
     312           ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
    312313           ! Earth: first two tracers will be water
    313314           do iq=1,nqtot
     
    323324              iqParent = tracers(iq)%iqParent
    324325              IF(tracers(iq)%iso_iZone == 0) THEN
    325                  if (tnat1) then
    326                          tnat=1.0
    327                          alpha_ideal=1.0
    328                          write(*,*) 'Attention dans iniacademic: alpha_ideal=1'
    329                  else
     326                 IF(ltnat1) THEN
     327                    tnat = 1.0
     328                    alpha_ideal = 1.0
     329                    WRITE(lunout, *) 'In '//TRIM(modname)//': !!!  Beware: alpha_ideal put to 1  !!!'
     330                 ELSE
    330331                    IF(getKey('tnat', tnat, isoName(iName)) .OR. getKey('alpha', alpha_ideal, isoName(iName))) &
    331332                    CALL abort_gcm(TRIM(modname), 'missing isotopic parameters', 1)
    332                  endif
     333                 END IF
    333334                 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat*(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal-1.)
    334335              ELSE !IF(tracers(iq)%iso_iZone == 0) THEN
  • LMDZ6/trunk/libf/phylmd/infotrac_phy.F90

    r5199 r5200  
    316316
    317317#ifdef REPROBUS
    318    CALL Init_chem_rep_trac(nbtr, nqo, tracers(:)%name)
     318   CALL Init_chem_rep_trac(nbtr, nqo, tracers(:)%name)                         !--- Transfert the number of tracers to Reprobus
    319319#endif
    320320
  • LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90

    r5190 r5200  
    161161   !=== Local variables:
    162162   INTEGER :: ixt
    163 
     163   LOGICAL :: ltnat1
     164   CHARACTER(LEN=maxlen) :: modname, sxt
    164165 
    165166   !--- For H2[17]O
     
    170171   LOGICAL, PARAMETER ::   ok_nocinsat = .FALSE. ! if T: no sursaturation effect for ice
    171172   LOGICAL, PARAMETER :: Rdefault_smow = .FALSE. ! if T: Rdefault=smow; if F: nul
    172    LOGICAL, PARAMETER :: tnat1 = .TRUE. ! If T: all tnats are 1.
    173173
    174174   !--- For [3]H
    175175   INTEGER :: iessai
    176 
    177    CHARACTER(LEN=maxlen) :: modname, sxt
    178176
    179177   modname = 'iso_init'
     
    265263   IF(ANY(isoName == 'HTO')) &
    266264   CALL get_in('ok_prod_nucl_tritium', ok_prod_nucl_tritium, .FALSE., .FALSE.)
     265   CALL get_in('tnateq1', ltnat1, .TRUE.)
    267266
    268267   ! Ocean composition
     
    295294       tkcin1(ixt) = 0.0005016
    296295       tkcin2(ixt) = 0.0014432
    297        if (tnat1) then
    298                tnat(ixt)=1
    299        else
    300                tnat(ixt)=0.
    301        endif
     296       tnat(ixt) = 0.0; IF(ltnat1) tnat(ixt)=1
    302297       toce(ixt)=4.0E-19 ! rapport T/H = 0.2 TU Dreisigacker and Roether 1978
    303298       tcorr(ixt)=1.
     
    318313       tkcin1(ixt) = tkcin1_O18*fac_kcin
    319314       tkcin2(ixt) = tkcin2_O18*fac_kcin
    320        if (tnat1) then
    321                tnat(ixt)=1
    322        else
    323                tnat(ixt)=0.004/100. ! O17 représente 0.004% de l'oxygène
    324        endif
     315       tnat(ixt)=0.004/100. ! O17 représente 0.004% de l'oxygène
     316       IF(ltnat1) tnat(ixt)=1
    325317       toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0)**pente_MWL
    326318       tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL ! donné par Amaelle           
     
    338330       tkcin1(ixt) = tkcin1_O18
    339331       tkcin2(ixt) = tkcin2_O18
    340        if (tnat1) then
    341                tnat(ixt)=1
    342        else
    343                tnat(ixt)=2005.2E-6
    344        endif
     332       tnat(ixt)=2005.2E-6; IF(ltnat1) tnat(ixt)=1
    345333       toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0)
    346334       tcorr(ixt)=1.0+fac_enrichoce18
     
    362350       tkcin1(ixt) = tkcin1_O18*fac_kcin
    363351       tkcin2(ixt) = tkcin2_O18*fac_kcin
    364        if (tnat1) then
    365                tnat(ixt)=1
    366        else
    367                tnat(ixt)=155.76E-6
    368        endif
     352       tnat(ixt)=155.76E-6; IF(ltnat1) tnat(ixt)=1
    369353       toce(ixt)=tnat(ixt)*(1.0+pente_MWL*deltaO18_oce/1000.0)
    370354       tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL         
Note: See TracChangeset for help on using the changeset viewer.