Ignore:
Timestamp:
Jan 12, 2022, 10:54:09 PM (2 years ago)
Author:
dcugnet
Message:

Most of the changes are intended to help to eventually remove the constraints about the tracers assumptions, in particular water tracers.

  • Remove index tables itr_indice and niadv, replaced by tracers(:)%isAdvected and tracers(:)%isH2OFamily. Most of the loops are now from 1 to nqtot:
    • DO iq=nqo+1,nqtot loops are replaced with: DO iq=1,nqtot

IF(tracers(iq)%isH2Ofamily) CYCLE

  • DO it=1,nbtr; iq=niadv(it+nqo)

and DO it=1,nqtottr; iq=itr_indice(it) loops are replaced with:

it = 0
DO iq = 1, nqtot

IF(.NOT.tracers(iq)%isAdvected .OR. tracers(iq)%isH2Ofamily) CYCLE
it = it+1

  • Move some StratAer? related code from infotrac to infotrac_phy
  • Remove "nqperes" variable:

DO iq=1,nqpere loops are replaced with:
DO iq=1,nqtot

IF(tracers(iq)%parent/='air') CYCLE

  • Cosmetic changes (justification, SELECT CASE instead of multiple IF...) mostly in advtrac* routines.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/phys_output_mod.F90

    r4046 r4056  
    3535    USE iophy
    3636    USE dimphy
    37     USE infotrac_phy, ONLY: nqtot, nqo, niadv, tracers, type_trac
    38     USE strings_mod,  ONLY: maxlen
     37    USE infotrac_phy, ONLY: nqtot, tracers, type_trac, niso, ntraciso, maxlen
    3938    USE ioipsl
    4039    USE phys_cal_mod, only : hour, calend
     
    9695    CHARACTER(LEN=4), DIMENSION(nlevSTD)  :: clevSTD
    9796    REAL, DIMENSION(nlevSTD)              :: rlevSTD
    98     INTEGER                               :: nsrf, k, iq, iiq, iff, i, j, ilev, jq
     97    INTEGER                               :: nsrf, k, iq, iff, i, j, ilev, itr, ixt, iiso, izone
    9998    INTEGER                               :: naero
    10099    LOGICAL                               :: ok_veget
     
    115114    LOGICAL, DIMENSION(nfiles)            :: phys_out_filestations
    116115
    117     CHARACTER(LEN=50) :: outiso
    118     CHARACTER(LEN=20) :: unit
    119116    CHARACTER(LEN=maxlen) :: tnam, lnam, dn
    120117    INTEGER :: flag(nfiles)
     
    122119!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    123120    !                 entre [phys_out_lonmin,phys_out_lonmax] et [phys_out_latmin,phys_out_latmax]
    124 
    125     LOGICAL, DIMENSION(nfiles), SAVE  :: phys_out_regfkey       = (/ .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., &
    126                                                                      .FALSE., .FALSE., .FALSE., .FALSE., .FALSE. /)
    127     REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmin        = (/ -180., -180., -180., -180., -180., &
    128                                                                      -180., -180., -180., -180., -180. /)
    129     REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmax        = (/  180.,  180.,  180.,  180.,  180., &
    130                                                                       180.,  180.,  180.,  180.,  180. /)
    131     REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmin        = (/  -90.,  -90.,  -90.,  -90.,  -90., &
    132                                                                       -90.,  -90.,  -90.,  -90.,  -90. /)
    133     REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmax        = (/   90.,   90.,   90.,   90.,   90., &
    134                                                                        90.,   90.,   90.,   90.,   90. /)
     121    LOGICAL, DIMENSION(nfiles), SAVE :: &
     122      phys_out_regfkey = [.FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE., .FALSE.]
     123    REAL,    DIMENSION(nfiles), SAVE :: &
     124      phys_out_lonmin  = [  -180.,   -180.,   -180.,   -180.,   -180.,   -180.,   -180.,   -180.,   -180.,   -180.], &
     125      phys_out_lonmax  = [   180.,    180.,    180.,    180.,    180.,    180.,    180.,    180.,    180.,    180.], &
     126      phys_out_latmin  = [   -90.,    -90.,    -90.,    -90.,    -90.,    -90.,    -90.,    -90.,    -90.,    -90.], &
     127      phys_out_latmax  = [    90.,     90.,     90.,     90.,     90.,     90.,     90.,     90.,     90.,     90.]
    135128    REAL, DIMENSION(klev,2) :: Ahyb_bounds, Bhyb_bounds
    136129    REAL, DIMENSION(klev+1)   :: lev_index
     
    169162    ALLOCATE(o_dtr_dry(nqtot),o_dtr_vdf(nqtot))
    170163
    171     levmax = (/ klev, klev, klev, klev, klev, klev, nlevSTD, nlevSTD, nlevSTD, klev /)
     164    levmax = [klev, klev, klev, klev, klev, klev, nlevSTD, nlevSTD, nlevSTD, klev]
    172165
    173166    phys_out_filenames(1) = 'histmth'
     
    366359    CALL wxios_add_vaxis("bnds", 2, (/1.,2./))
    367360
    368      CALL wxios_add_vaxis("Alt", &
     361    CALL wxios_add_vaxis("Alt", &
    369362            levmax(iff) - levmin(iff) + 1, pseudoalt)
    370363
    371     IF (NSW.EQ.6) THEN
    372 !
    373 !wl1_sun: minimum bound of wavelength (in um)
    374 !
    375       wl1_sun(1)=0.180
    376       wl1_sun(2)=0.250
    377       wl1_sun(3)=0.440
    378       wl1_sun(4)=0.690
    379       wl1_sun(5)=1.190
    380       wl1_sun(6)=2.380
    381 !
    382 !wl2_sun: maximum bound of wavelength (in um)
    383 !
    384       wl2_sun(1)=0.250
    385       wl2_sun(2)=0.440
    386       wl2_sun(3)=0.690
    387       wl2_sun(4)=1.190
    388       wl2_sun(5)=2.380
    389       wl2_sun(6)=4.000
    390 !
    391     ELSE IF(NSW.EQ.2) THEN
    392 !
    393 !wl1_sun: minimum bound of wavelength (in um)
    394 !
    395       wl1_sun(1)=0.250
    396       wl1_sun(2)=0.690
    397 !
    398 !wl2_sun: maximum bound of wavelength (in um)
    399 !
    400       wl2_sun(1)=0.690
    401       wl2_sun(2)=4.000
    402     ENDIF
     364    ! wl1_sun/wl2_sun: minimum/maximum bound of wavelength (in um)
     365    SELECT CASE(NSW)
     366      CASE(6)
     367        wl1_sun(1:6) = [0.180, 0.250, 0.440, 0.690, 1.190, 2.380]
     368        wl2_sun(1:6) = [0.250, 0.440, 0.690, 1.190, 2.380, 4.000]
     369      CASE(2)
     370        wl1_sun(1:2) = [0.250, 0.690]
     371        wl2_sun(1:2) = [0.690, 4.000]
     372    END SELECT
    403373
    404374    DO ISW=1, NSW
     
    498468     ENDIF ! clef_files
    499469
    500        IF (nqtot>=nqo+1) THEN
    501 !
    502           DO iq=nqo+1,nqtot
    503             iiq=niadv(iq); jq = iq-nqo
    504             dn = 'd'//TRIM(tracers(iiq)%name)//'_'
     470          itr = 0
     471          DO iq = 1, nqtot
     472            IF(.NOT.tracers(iq)%isAdvected .OR. tracers(iq)%isH2Ofamily) CYCLE
     473            itr = itr + 1
     474            dn = 'd'//TRIM(tracers(iq)%name)//'_'
    505475
    506476            flag = [1, 5, 5, 5, 10, 10, 11, 11, 11, 11]
    507             lnam = 'Tracer '//TRIM(tracers(iiq)%longName)
    508             tnam = TRIM(tracers(iiq)%name); o_trac          (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     477            lnam = 'Tracer '//TRIM(tracers(iq)%longName)
     478            tnam = TRIM(tracers(iq)%name);  o_trac          (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     479
    509480            flag = [4, 7, 7, 7, 10, 10, 11, 11, 11, 11]
    510             lnam = 'Tendance tracer '//TRIM(tracers(iiq)%longName)
    511             tnam = TRIM(dn)//'vdf';         o_dtr_vdf       (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     481            lnam = 'Tendance tracer '//TRIM(tracers(iq)%longName)
     482            tnam = TRIM(dn)//'vdf';         o_dtr_vdf       (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    512483
    513484            flag = [5, 7, 7, 7, 10, 10, 11, 11, 11, 11]
    514             tnam = TRIM(dn)//'the';         o_dtr_the       (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    515             tnam = TRIM(dn)//'con';         o_dtr_con       (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     485            tnam = TRIM(dn)//'the';         o_dtr_the       (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     486            tnam = TRIM(dn)//'con';         o_dtr_con       (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    516487
    517488            flag = [7, 7, 7, 7, 10, 10, 11, 11, 11, 11]
    518             tnam = TRIM(dn)//'lessi_impa';  o_dtr_lessi_impa(jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    519             tnam = TRIM(dn)//'lessi_nucl';  o_dtr_lessi_nucl(jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    520             tnam = TRIM(dn)//'insc';        o_dtr_insc      (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    521             tnam = TRIM(dn)//'bcscav';      o_dtr_bcscav    (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    522             tnam = TRIM(dn)//'evapls';      o_dtr_evapls    (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    523             tnam = TRIM(dn)//'ls';          o_dtr_ls        (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    524             tnam = TRIM(dn)//'trsp';        o_dtr_trsp      (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    525             tnam = TRIM(dn)//'sscav';       o_dtr_sscav     (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    526             tnam = TRIM(dn)//'sat';         o_dtr_sat       (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    527             tnam = TRIM(dn)//'uscav';       o_dtr_uscav     (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    528 
    529             lnam = 'tracer tendency dry deposition'//TRIM(tracers(iiq)%longName)
    530             tnam = 'cum'//TRIM(dn)//'dry';  o_dtr_dry       (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     489            tnam = TRIM(dn)//'lessi_impa';  o_dtr_lessi_impa(itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     490            tnam = TRIM(dn)//'lessi_nucl';  o_dtr_lessi_nucl(itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     491            tnam = TRIM(dn)//'insc';        o_dtr_insc      (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     492            tnam = TRIM(dn)//'bcscav';      o_dtr_bcscav    (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     493            tnam = TRIM(dn)//'evapls';      o_dtr_evapls    (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     494            tnam = TRIM(dn)//'ls';          o_dtr_ls        (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     495            tnam = TRIM(dn)//'trsp';        o_dtr_trsp      (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     496            tnam = TRIM(dn)//'sscav';       o_dtr_sscav     (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     497            tnam = TRIM(dn)//'sat';         o_dtr_sat       (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     498            tnam = TRIM(dn)//'uscav';       o_dtr_uscav     (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     499
     500            lnam = 'tracer tendency dry deposition'//TRIM(tracers(iq)%longName)
     501            tnam = 'cum'//TRIM(dn)//'dry';  o_dtr_dry       (itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    531502
    532503            flag = [1, 4, 10, 10, 10, 10, 11, 11, 11, 11]
    533             lnam = 'Cumulated tracer '//TRIM(tracers(iiq)%longName)
    534             tnam = 'cum'//TRIM(tracers(iiq)%name); o_trac_cum(jq)= ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
     504            lnam = 'Cumulated tracer '//TRIM(tracers(iq)%longName)
     505            tnam = 'cum'//TRIM(tracers(iq)%name); o_trac_cum(itr) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)])
    535506          ENDDO
    536        ENDIF
    537507
    538508   ENDDO !  iff
     
    555525    ENDIF
    556526
    557 !  DO iq=nqo+1,nqtot
    558 !    iiq=niadv(iq)
    559 !    dn = 'd'//TRIM(tracers(iiq)%name)//'_'
    560 !    WRITE(*,'(a,i1,a,10i3)')'trac(',iiq,')%flag = ',o_trac(iiq)%flag
    561 !    WRITE(*,'(a,i1,a)')'trac(',iiq,')%tnam = '//TRIM(o_trac(iiq)%name)
    562 !    WRITE(*,'(a,i1,a)')'trac(',iiq,')%lnam = '//TRIM(o_trac(iiq)%description)
     527!  DO iq=1,nqtot
     528!    IF(.NOT.tracers(iq)%isAdvected .OR. tracers(iq)%isH2Ofamily) CYCLE
     529!    WRITE(*,'(a,i1,a,10i3)')'trac(',iq,')%flag = ',o_trac(iq)%flag
     530!    WRITE(*,'(a,i1,a)')'trac(',iq,')%name = '//TRIM(o_trac(iq)%name)
     531!    WRITE(*,'(a,i1,a)')'trac(',iq,')%description = '//TRIM(o_trac(iq)%description)
    563532!  END DO
    564533
Note: See TracChangeset for help on using the changeset viewer.