Ignore:
Timestamp:
Oct 20, 2022, 1:57:21 PM (2 years ago)
Author:
dcugnet
Message:
  • for REPROBUS: simplify (and fix) the handling of exceptions for old HNO3 convention.
  • cleaning + comments added in readTracFiles_mod.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90

    r4270 r4301  
    88  USE parallel_lmdz
    99  USE infotrac,    ONLY: nqtot, tracers, niso, iqIsoPha, tnat, alpha_ideal, iH2O
    10   USE strings_mod, ONLY: maxlen, msg, strStack, real2str
     10  USE strings_mod, ONLY: maxlen, msg, strStack, real2str, int2str
    1111  USE netcdf,      ONLY: NF90_OPEN,  NF90_NOWRITE, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, &
    1212                         NF90_CLOSE, NF90_GET_VAR, NF90_INQUIRE_VARIABLE,  NF90_NoErr
    13   USE readTracFiles_mod, ONLY: new2oldName
     13  USE readTracFiles_mod, ONLY: new2oldH2O, newHNO3, oldHNO3
    1414  USE control_mod, ONLY: planet_type
    1515  USE assert_eq_m, ONLY: assert_eq
     
    4141  CHARACTER(LEN=maxlen) :: mesg, var, modname, oldVar
    4242  INTEGER, PARAMETER :: length=100
    43   INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase
     43  INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase, ix
    4444  REAL    :: time, tab_cntrl(length)               !--- RUN PARAMS TABLE
    4545  REAL,             ALLOCATABLE :: vcov_glo(:,:),masse_glo(:,:),   ps_glo(:)
    4646  REAL,             ALLOCATABLE :: ucov_glo(:,:),    q_glo(:,:), phis_glo(:)
    4747  REAL,             ALLOCATABLE :: teta_glo(:,:)
    48   LOGICAL :: lOldHNO3, ll
     48  LOGICAL :: lSkip, ll
    4949!-------------------------------------------------------------------------------
    5050  modname="dynetat0_loc"
     
    152152!--- Tracers
    153153  ALLOCATE(q_glo(ip1jmp1,llm))
    154   ll=.FALSE.
     154  ll = .FALSE.
    155155#ifdef REPROBUS
    156   !--- .TRUE. for old convention: HNO3 = g+l and HNO3_g = g (new convention: HNO3tot = g+l and HNO3 = g)
    157   ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr
     156  ll = NF90_INQ_VARID(fID, 'HNO3tot', vID) /= NF90_NoErr                                 !--- DETECT OLD REPRO start.nc FILE
    158157#endif
    159158  DO iq=1,nqtot
    160159    var = tracers(iq)%name
    161     oldVar = new2oldName(var)
    162     lOldHNO3 = ll .AND. (var == 'HNO3' .OR. var == 'HNO3_g')
    163     !--------------------------------------------------------------------------------------------------------------------------
    164     IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr .AND. .NOT.lOldHNO3) THEN             !=== REGULAR CASE
     160    oldVar = new2oldH2O(var)
     161    lSkip = ll .AND. var == 'HNO3'                                                       !--- FORCE "HNO3_g" READING FOR "HNO3"
     162#ifdef REPROBUS
     163    ix = strIdx(newHNO3, var); IF(ix /= 0) oldVar = oldHNO3(ix)                          !--- REPROBUS HNO3 exceptions
     164#endif
     165#ifdef INCA
     166    IF(var == 'O3') oldVar = 'OX'                                                        !--- DEAL WITH INCA OZONE EXCEPTION
     167#endif
     168    !--------------------------------------------------------------------------------------------------------------------------
     169    IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr .AND. .NOT.lSkip) THEN                !=== REGULAR CASE: AVAILABLE VARIABLE
    165170      CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
    166171    !--------------------------------------------------------------------------------------------------------------------------
    167     ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN                         !=== OLD NAME
     172    ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN                         !=== TRY WITH ALTERNATE NAME
    168173      CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to <'//TRIM(oldVar)//'>', modname)
    169174      CALL get_var2(oldVar, q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
    170     !--------------------------------------------------------------------------------------------------------------------------
    171 #ifdef REPROBUS
    172     ELSE IF(lOldHNO3 .AND. var == 'HNO3') THEN                                           !=== REPROBUS: HNO3_g INSTEAD OF HNO3
    173       CALL msg('Tracer <HNO3_g> is used for <HNO3> (old convention)', modname)
    174       CALL get_var2( 'HNO3_g', q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
    175     ELSE IF(lOldHNO3 .AND. var == 'HNO3tot') THEN                                        !=== REPROBUS: HNO3 INSTEAD OF HNO3tot
    176       CALL msg('Tracer <HNO3> is used for <HNO3tot> (old convention)', modname)
    177       CALL get_var2( 'HNO3', q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
    178 #endif
    179 #ifdef INCA
    180     ELSE IF(NF90_INQ_VARID(fID, 'OX',   vID) == NF90_NoErr .AND. var == 'O3') THEN       !=== INCA: OX INSTEAD OF O3
    181       CALL msg('Tracer <O3> is missing => initialized to <OX>', modname)
    182       CALL get_var2( 'OX' , q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
    183 #endif
    184175    !--------------------------------------------------------------------------------------------------------------------------
    185176    ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN                          !=== WATER ISOTOPES
     
    214205  CHARACTER(LEN=*), INTENT(IN) :: str1, str2
    215206  CHARACTER(LEN=maxlen) :: s1, s2
    216   IF(n1/=n2) THEN
    217     s1='value of '//TRIM(str1)//' ='
    218     s2=' read in starting file differs from parametrized '//TRIM(str2)//' ='
    219     WRITE(mesg,'(10x,a,i4,2x,a,i4)')TRIM(ADJUSTL(s1)),n1,TRIM(ADJUSTL(s2)),n2
    220     CALL ABORT_gcm(TRIM(modname),TRIM(mesg),1)
    221   END IF
     207  IF(n1/=n2) CALL abort_gcm(TRIM(modname), 'value of "'//TRIM(str1)//'" = '//TRIM(int2str(n1))// &
     208   ' read in starting file differs from gcm value of "'//TRIM(str2)//'" = '//TRIM(int2str(n2)), 1)
    222209END SUBROUTINE check_dim
    223210
Note: See TracChangeset for help on using the changeset viewer.