Ignore:
Timestamp:
Jul 3, 2025, 3:25:59 PM (3 weeks ago)
Author:
dcugnet
Message:

Add "isoFamilies", the list of defined isotopes families (==H2O? for now).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90

    r5754 r5756  
    44MODULE isotopes_mod
    55   USE strings_mod,  ONLY: msg, num2str, maxlen, strIdx, strStack
    6    USE infotrac_phy, ONLY: isoName, niso, ntiso
     6   USE infotrac_phy, ONLY: isoName, niso, ntiso, nbIso, isoFamilies, isoSelect, isoCheck
    77   USE iso_params_mod
    88   USE ioipsl_getin_p_mod, ONLY : getin_p
     
    150150
    151151   !=== Local variables:
    152    INTEGER :: ixt, is
     152   INTEGER :: ixt, is, ii
    153153   LOGICAL :: ltnat1
    154154   CHARACTER(LEN=maxlen) :: modname, sxt
     
    175175   CALL msg('64: niso = '//TRIM(num2str(niso)), modname)
    176176
     177   DO ii = 1, nbIso
     178      CALL msg('Can''t select isotopes class "'//TRIM(isoFamilies(ii))//'"', modname, isoSelect(ii, lVerbose=.TRUE.))
     179
     180!==============================================================================================================================
     181      IF(isoFamilies(ii) == 'H2O') THEN
     182!==============================================================================================================================
    177183         !--- Init de ntracisoOR: on ecrasera en cas de traceurs de tagging isotopiques
    178184         !                     (nzone>0) si complications avec ORCHIDEE
     
    203209         CALL getin_p( 'sstlatcrit',    sstlatcrit,     30.0)     !--- For modif_sst>=3
    204210         CALL getin_p('dsstlatcrit',   dsstlatcrit,      0.0)     !--- For modif_sst>=3
    205 #ifdef ISOVERIF
     211         IF(isoCheck) THEN
    206212         CALL msg('iso_init 270:  sstlatcrit='//num2str( sstlatcrit), modname, sstlatcrit < 0.0) !--- For modif_sst>=2
    207213         CALL msg('iso_init 279: dsstlatcrit='//num2str(dsstlatcrit), modname, sstlatcrit < 0.0) !--- For modif_sst>=3
    208214         IF(modif_sst >= 2 .AND. sstlatcrit < 0.0) STOP
    209 #endif             
    210 
     215         END IF
    211216         CALL getin_p('modif_sic', modif_sic,  0)
    212217         IF(modif_sic >= 1) &
     
    238243         CALL getin_p('A_satlim', A_satlim, 1.0)
    239244         CALL getin_p('ok_restrict_A_satlim', ok_restrict_A_satlim, 0)
    240 #ifdef ISOVERIF
     245         IF(isoCheck) THEN
    241246         CALL msg(' 315: A_satlim='//TRIM(num2str(A_satlim)), modname, A_satlim > 1.0)
    242247         IF(A_satlim > 1.0) STOP
    243 #endif
     248         END IF
    244249!        CALL getin_p('slope_limiterxy',   slope_limiterxy,  2.0)
    245250!        CALL getin_p('slope_limiterz',    slope_limiterz,   2.0)
     
    374379         CALL msg('69: h_land_ice = '//TRIM(num2str(h_land_ice)),    modname)
    375380         CALL msg('69:      P_veg = '//TRIM(num2str(P_veg)),         modname)
     381!==============================================================================================================================
     382      ELSE
     383!==============================================================================================================================
     384         CALL abort_physic('"isotopes_mod" is not set up yet for isotopes family "'//TRIM(isoFamilies(ii))//'"', modname, 1)
     385!==============================================================================================================================
     386      END IF
     387!==============================================================================================================================
     388   END DO
    376389
    377390END SUBROUTINE iso_init
    378 
    379 
    380 SUBROUTINE getinp_s(nam, val, def, lDisp)
    381    USE ioipsl, ONLY: getin
    382    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
    383    USE mod_phys_lmdz_omp_data, ONLY :  is_omp_root
    384    USE mod_phys_lmdz_transfert_para, ONLY : bcast
    385    CHARACTER(LEN=*),           INTENT(IN)    :: nam
    386    CHARACTER(LEN=*),           INTENT(INOUT) :: val
    387    CHARACTER(LEN=*), OPTIONAL, INTENT(IN)    :: def
    388    LOGICAL,          OPTIONAL, INTENT(IN)    :: lDisp
    389    LOGICAL :: lD
    390 !$OMP BARRIER
    391    IF(is_mpi_root.AND.is_omp_root) THEN
    392       IF(PRESENT(def)) val=def; CALL getin(nam,val)
    393       lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp
    394       IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(val))
    395   END IF
    396   CALL bcast(val)
    397 END SUBROUTINE getinp_s
    398 
    399 SUBROUTINE getinp_i(nam, val, def, lDisp)
    400    USE ioipsl, ONLY: getin
    401    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
    402    USE mod_phys_lmdz_omp_data, ONLY :  is_omp_root
    403    USE mod_phys_lmdz_transfert_para, ONLY : bcast
    404    CHARACTER(LEN=*),  INTENT(IN)    :: nam
    405    INTEGER,           INTENT(INOUT) :: val
    406    INTEGER, OPTIONAL, INTENT(IN)    :: def
    407    LOGICAL, OPTIONAL, INTENT(IN)    :: lDisp
    408    LOGICAL :: lD
    409 !$OMP BARRIER
    410    IF(is_mpi_root.AND.is_omp_root) THEN
    411       IF(PRESENT(def)) val=def; CALL getin(nam,val)
    412       lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp
    413       IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(num2str(val)))
    414   END IF
    415   CALL bcast(val)
    416 END SUBROUTINE getinp_i
    417 
    418 SUBROUTINE getinp_r(nam, val, def, lDisp)
    419    USE ioipsl, ONLY: getin
    420    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
    421    USE mod_phys_lmdz_omp_data, ONLY :  is_omp_root
    422    USE mod_phys_lmdz_transfert_para, ONLY : bcast
    423    CHARACTER(LEN=*),  INTENT(IN)    :: nam
    424    REAL,              INTENT(INOUT) :: val
    425    REAL,    OPTIONAL, INTENT(IN)    :: def
    426    LOGICAL, OPTIONAL, INTENT(IN)    :: lDisp
    427    LOGICAL :: lD
    428 !$OMP BARRIER
    429    IF(is_mpi_root.AND.is_omp_root) THEN
    430       IF(PRESENT(def)) val=def; CALL getin(nam,val)
    431       lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp
    432       IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(num2str(val)))
    433   END IF
    434   CALL bcast(val)
    435 END SUBROUTINE getinp_r
    436 
    437 SUBROUTINE getinp_l(nam, val, def, lDisp)
    438    USE ioipsl, ONLY: getin
    439    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
    440    USE mod_phys_lmdz_omp_data, ONLY :  is_omp_root
    441    USE mod_phys_lmdz_transfert_para, ONLY : bcast
    442    CHARACTER(LEN=*),  INTENT(IN)    :: nam
    443    LOGICAL,           INTENT(INOUT) :: val
    444    LOGICAL, OPTIONAL, INTENT(IN)    :: def
    445    LOGICAL, OPTIONAL, INTENT(IN)    :: lDisp
    446    LOGICAL :: lD
    447 !$OMP BARRIER
    448    IF(is_mpi_root.AND.is_omp_root) THEN
    449       IF(PRESENT(def)) val=def; CALL getin(nam,val)
    450       lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp
    451       IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(num2str(val)))
    452   END IF
    453   CALL bcast(val)
    454 END SUBROUTINE getinp_l
    455391
    456392END MODULE isotopes_mod
Note: See TracChangeset for help on using the changeset viewer.