Ignore:
Timestamp:
Apr 5, 2022, 3:44:30 PM (4 years ago)
Author:
dcugnet
Message:
  • New water names: H2Ov, H2Ol, H2Oi, H2Or -> H2O_g, H2O_l, H2O_s, H2O_r.
  • Corrections for the lOldCode=.FALSE., not activated yet.
Location:
LMDZ6/trunk/libf/dyn3dmem
Files:
2 edited

Legend:

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

    r4063 r4120  
    77!-------------------------------------------------------------------------------
    88  USE parallel_lmdz
    9   USE strings_mod, ONLY: maxlen
    10   USE infotrac,    ONLY: nqtot, tracers, iqiso, iso_indnum, tnat, alpha_ideal, ok_isotopes
    11   USE netcdf, ONLY: NF90_OPEN,  NF90_INQUIRE_DIMENSION, NF90_INQ_VARID,        &
    12       NF90_NOWRITE, NF90_CLOSE, NF90_INQUIRE_VARIABLE,  NF90_GET_VAR, NF90_NoErr
     9  USE infotrac,    ONLY: nqtot, tracers, niso, iqiso, iso_indnum, iso_num, tnat, alpha_ideal, ok_isotopes, iH2O
     10  USE strings_mod, ONLY: maxlen, msg, strStack, real2str
     11  USE netcdf,      ONLY: NF90_OPEN,  NF90_NOWRITE, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, &
     12                         NF90_CLOSE, NF90_GET_VAR, NF90_INQUIRE_VARIABLE,  NF90_NoErr
     13  USE readTracFiles_mod, ONLY: new2oldName
    1314  USE control_mod, ONLY: planet_type
    1415  USE assert_eq_m, ONLY: assert_eq
    1516  USE comvert_mod, ONLY: pa,preff
    16   USE comconst_mod, ONLY: cpp, daysec, dtvr, g, im, jm, kappa, lllm, &
    17                           omeg, rad
     17  USE comconst_mod, ONLY: cpp, daysec, dtvr, g, im, jm, kappa, lllm, omeg, rad
    1818  USE logic_mod, ONLY: fxyhypb, ysinus
    1919  USE serre_mod, ONLY: clon, clat, grossismx, grossismy
    20   USE temps_mod, ONLY: annee_ref,day_ref,itau_dyn, &
    21                        start_time,day_ini,hour_ini
     20  USE temps_mod, ONLY: annee_ref, day_ini, day_ref, itau_dyn, start_time
    2221  USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
    23  
     22
    2423  IMPLICIT NONE
    2524  include "dimensions.h"
     
    4039!===============================================================================
    4140! Local variables:
    42   CHARACTER(LEN=maxlen) :: msg, var, modname
     41  CHARACTER(LEN=maxlen) :: mesg, var, modname, oldVar
    4342  INTEGER, PARAMETER :: length=100
    4443  INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase
     
    5857!!!     .... while keeping everything OK for LMDZ EARTH
    5958  IF(planet_type=="generic") THEN
    60     WRITE(lunout,*)'NOTE NOTE NOTE : Planeto-like start files'
     59    CALL msg('NOTE NOTE NOTE : Planeto-like start files', modname)
    6160    idecal = 4
    6261    annee_ref  = 2000
    6362  ELSE
    64     WRITE(lunout,*)'NOTE NOTE NOTE : Earth-like start files'
     63    CALL msg('NOTE NOTE NOTE : Earth-like start files', modname)
    6564    idecal = 5
    6665    annee_ref  = tab_cntrl(5)
     
    106105
    107106!-------------------------------------------------------------------------------
    108   WRITE(lunout,*)TRIM(modname)//': rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa
     107  CALL msg('rad, omeg, g, cpp, kappa = '//TRIM(strStack(real2str([rad,omeg,g,cpp,kappa]))), modname)
    109108  CALL check_dim(im,iim,'im','im')
    110109  CALL check_dim(jm,jjm,'jm','jm')
     
    120119  var="temps"
    121120  IF(NF90_INQ_VARID(fID,var,vID)/=NF90_NoErr) THEN
    122     WRITE(lunout,*)TRIM(modname)//": missing field <temps>"
    123     WRITE(lunout,*)TRIM(modname)//": trying with <Time>"; var="Time"
     121    CALL msg('missing field <temps> ; trying with <Time>', modname)
     122    var="Time"
    124123    CALL err(NF90_INQ_VARID(fID,var,vID),"inq",var)
    125124  END IF
     
    153152  ALLOCATE(q_glo(ip1jmp1,llm))
    154153  DO iq=1,nqtot
    155     var=TRIM(tracers(iq)%name)
     154    var = tracers(iq)%name
     155    oldVar = new2oldName(var)
     156    !--------------------------------------------------------------------------------------------------------------------------
     157    IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr) THEN                                 !=== REGULAR CASE
     158      CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
     159    !--------------------------------------------------------------------------------------------------------------------------
     160    ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN                         !=== OLD NAME
     161      CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to <'//TRIM(oldVar)//'>', modname)
     162      CALL get_var2(oldVar, q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
     163    !--------------------------------------------------------------------------------------------------------------------------
    156164#ifdef INCA
    157     IF (var .eq. "O3" ) THEN
    158        IF(NF90_INQ_VARID(fID,var,vID) == NF90_NoErr) THEN
    159           CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE
    160        ELSE
    161           WRITE(lunout,*) 'Tracer O3 is missing - it is initialized to OX'
    162           IF(NF90_INQ_VARID(fID,"OX",vID) == NF90_NoErr) THEN
    163              CALL get_var2("OX",q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE
    164           ENDIF
    165        ENDIF
    166     ENDIF
     165    ELSE IF(NF90_INQ_VARID(fID, 'OX',   vID) == NF90_NoErr .AND. var == 'O3') THEN       !=== INCA: OX INSTEAD OF O3
     166      CALL msg('Tracer <O3> is missing => initialized to <OX>', modname)
     167      CALL get_var2( 'OX' , q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:)
     168    !--------------------------------------------------------------------------------------------------------------------------
    167169#endif
    168     IF(NF90_INQ_VARID(fID,var,vID)==NF90_NoErr) THEN
    169       CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE
     170    ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN                          !=== WATER ISOTOPES
     171!     iName    = tracers(iq)%iso_iName  ! (next commit)
     172      iName    = iso_num(iq)
     173      iPhase   = tracers(iq)%iso_iPhase
     174      iqParent = tracers(iq)%iqParent
     175      IF(tracers(iq)%iso_iZone == 0) THEN
     176         CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized with a simplified Rayleigh distillation law.', modname)
     177         q(ijb_u:ije_u,:,iq)= q(ijb_u:ije_u,:,iqParent)*tnat(iName)*(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)
     178      ELSE
     179         CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to its parent isotope concentration.', modname)
     180         q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase))
     181      END IF
     182    !--------------------------------------------------------------------------------------------------------------------------
     183    ELSE                                                                                 !=== MISSING: SET TO 0
     184      CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to zero', modname)
     185      q(ijb_u:ije_u,:,iq)=0.
     186    !--------------------------------------------------------------------------------------------------------------------------
    170187    END IF
    171     WRITE(lunout,*)TRIM(modname)//": Tracer <"//TRIM(var)//"> is missing"
    172     WRITE(lunout,*)"         It is hence initialized to zero"
    173     q(ijb_u:ije_u,:,iq)=0.
    174    !--- CRisi: for isotops, theoretical initialization using very simplified
    175    !           Rayleigh distillation las.
    176     iName = tracers(iq)%iso_iName
    177     IF(.NOT.ok_isotopes .OR. iName <= 0) CYCLE
    178     iZone = tracers(iq)%iso_iZone
    179     iPhase= tracers(iq)%iso_iPhase
    180     iqParent = tracers(iq)%iqParent
    181     IF(iZone==0) q(:,:,iq) = q(:,:,iqParent)*tnat(iName)    &
    182      &         *(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)
    183     IF(iZone==1) q(:,:,iq) = q(:,:,iqiso(iso_indnum(iq),iPhase))
    184188  END DO
    185189  DEALLOCATE(q_glo)
     
    199203    s1='value of '//TRIM(str1)//' ='
    200204    s2=' read in starting file differs from parametrized '//TRIM(str2)//' ='
    201     WRITE(msg,'(10x,a,i4,2x,a,i4)'),s1,n1,s2,n2
    202     CALL ABORT_gcm(TRIM(modname),TRIM(msg),1)
     205    WRITE(mesg,'(10x,a,i4,2x,a,i4)')TRIM(ADJUSTL(s1)),n1,TRIM(ADJUSTL(s2)),n2
     206    CALL ABORT_gcm(TRIM(modname),TRIM(mesg),1)
    203207  END IF
    204208END SUBROUTINE check_dim
     
    263267  IF(ierr==NF90_NoERR) RETURN
    264268  SELECT CASE(typ)
    265     CASE('inq');   msg="Field <"//TRIM(nam)//"> is missing"
    266     CASE('get');   msg="Reading failed for <"//TRIM(nam)//">"
    267     CASE('open');  msg="File opening failed for <"//TRIM(nam)//">"
    268     CASE('close'); msg="File closing failed for <"//TRIM(nam)//">"
     269    CASE('inq');   mesg="Field <"//TRIM(nam)//"> is missing"
     270    CASE('get');   mesg="Reading failed for <"//TRIM(nam)//">"
     271    CASE('open');  mesg="File opening failed for <"//TRIM(nam)//">"
     272    CASE('close'); mesg="File closing failed for <"//TRIM(nam)//">"
    269273  END SELECT
    270   CALL ABORT_gcm(TRIM(modname),TRIM(msg),ierr)
     274  CALL ABORT_gcm(TRIM(modname),TRIM(mesg),ierr)
    271275END SUBROUTINE err
    272276
  • LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90

    r4056 r4120  
    66  USE filtreg_mod, ONLY: inifilr
    77  USE infotrac,    ONLY: nqtot, niso_possibles, ok_isotopes, ok_iso_verif, tnat, alpha_ideal, &
    8                          iqiso, tracers, iso_indnum
     8                         iqiso, tracers, iso_indnum, iso_num
    99  USE control_mod, ONLY: day_step,planet_type
    1010  use exner_hyb_m, only: exner_hyb
     
    2323  USE temps_mod, ONLY: annee_ref, day_ini, day_ref
    2424  USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0
     25  USE readTracFiles_mod, ONLY: addPhase
    2526
    2627  !   Author:    Frederic Hourdin      original: 15/01/93
     
    6667  real tetastrat ! potential temperature in the stratosphere, in K
    6768  real tetajl(jjp1,llm)
    68   INTEGER i,j,l,lsup,ij, iq, iName, iZone, iPhase, iqParent
     69  INTEGER i,j,l,lsup,ij, iq, iName, iPhase, iqParent
    6970
    7071  REAL teta0,ttp,delt_y,delt_z,eps ! Constantes pour profil de T
     
    280281           do iq=1,nqtot
    281282              q(ijb_u:ije_u,:,iq)=0.
    282 !              IF(tracers(iq)%name == 'H2O'//phases_sep//'g') q(ijb_u:ije_u,:,iq)=1.e-10
    283 !              IF(tracers(iq)%name == 'H2O'//phases_sep//'l') q(ijb_u:ije_u,:,iq)=1.e-15
    284               IF(tracers(iq)%name == 'H2Ov') q(ijb_u:ije_u,:,iq)=1.e-10
    285               IF(tracers(iq)%name == 'H2Ol') q(ijb_u:ije_u,:,iq)=1.e-15
     283              IF(tracers(iq)%name == addPhase('H2O', 'g')) q(ijb_u:ije_u,:,iq)=1.e-10
     284              IF(tracers(iq)%name == addPhase('H2O', 'l')) q(ijb_u:ije_u,:,iq)=1.e-15
    286285
    287286              ! CRisi: init des isotopes
    288287              ! distill de Rayleigh très simplifiée
    289               iName = tracers(iq)%iso_iName
     288!             iName    = tracers(iq)%iso_iName  ! (next commit)
     289              iName    = iso_num(iq)
    290290              if (.NOT.ok_isotopes .OR. iName <= 0) CYCLE
    291               iZone    = tracers(iq)%iso_iZone
    292291              iPhase   = tracers(iq)%iso_iPhase
    293292              iqParent = tracers(iq)%iqParent
    294               if (iZone == 0) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) &
    295                                                   *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1)
    296               if (iZone == 1) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase))
     293              IF(tracers(iq)%iso_iZone == 0) THEN
     294                 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) &
     295                                     *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)
     296              ELSE
     297                 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase))
     298              END IF
    297299           enddo
    298300        else
Note: See TracChangeset for help on using the changeset viewer.