Ignore:
Timestamp:
Oct 19, 2023, 4:02:57 PM (9 months ago)
Author:
idelkadi
Message:

Merged trunk changes -r4488:4726 LMDZ_ECRad branch

Location:
LMDZ6/branches/LMDZ_ECRad
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_ECRad

  • LMDZ6/branches/LMDZ_ECRad/libf/phylmd/phytrac_mod.F90

    r4482 r4727  
    4242  REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_impa ! Td du lessivage par impaction
    4343  REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_nucl ! Td du lessivage par nucleation
    44   REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: qPrls      !jyg: concentration tra dans pluie LS a la surf.
    45   REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: d_tr_dry ! Td depot sec/traceur (1st layer),ALLOCATABLE,SAVE  jyg
    46   REAL,DIMENSION(:,:),ALLOCATABLE,SAVE      :: flux_tr_dry ! depot sec/traceur (surface),ALLOCATABLE,SAVE    jyg
     44  REAL,DIMENSION(:,:),ALLOCATABLE,SAVE   :: qPrls      !jyg: concentration tra dans pluie LS a la surf.
     45  REAL,DIMENSION(:,:),ALLOCATABLE,SAVE   :: d_tr_dry ! Td depot sec/traceur (1st layer),ALLOCATABLE,SAVE  jyg
     46  REAL,DIMENSION(:,:),ALLOCATABLE,SAVE   :: flux_tr_dry ! depot sec/traceur (surface),ALLOCATABLE,SAVE    jyg
    4747
    4848!$OMP THREADPRIVATE(qPa,qMel,qTrdi,dtrcvMA,d_tr_th,d_tr_lessi_impa,d_tr_lessi_nucl)
     
    5151!$OMP THREADPRIVATE(d_tr_cl,d_tr_dry,flux_tr_dry,d_tr_dec,d_tr_cv)
    5252
    53 
    5453CONTAINS
    5554
    5655  SUBROUTINE phytrac_init()
     56
    5757    USE dimphy
    5858    USE infotrac_phy, ONLY: nbtr, type_trac
    5959    USE tracco2i_mod, ONLY: tracco2i_init
     60   
    6061    IMPLICIT NONE
    6162
    62        ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr))
    63        ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr))
    64        ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr))
    65        ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr))
    66        ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr))
    67        ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr))
    68        ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr))
    69        ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
    70        ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
    71        ALLOCATE(d_tr_th(klon,klev,nbtr))
    72        ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr))
    73 
    74 
     63    ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr))
     64    ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr))
     65    ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr))
     66    ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr))
     67    ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr))
     68    ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr))
     69    ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr))
     70    ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
     71    ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
     72    ALLOCATE(d_tr_th(klon,klev,nbtr))
     73    ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr))
    7574
    7675    !===============================================================================
     
    7978    !===============================================================================
    8079    !   -- CO2 interactif --
    81     IF(ANY(type_trac == ['co2i','inco'])) CALL tracco2i_init()
     80    IF (ANY(type_trac == ['co2i','inco'])) CALL tracco2i_init()
    8281
    8382       !   -- type_trac == 'co2i' ! PC
     
    136135    USE print_control_mod, ONLY: lunout
    137136    USE aero_mod, ONLY : naero_grp
     137    USE lmdz_thermcell_dq, ONLY : thermcell_dq
    138138
    139139    USE tracco2i_mod
     
    147147    USE phys_local_var_mod, ONLY: budg_dep_dry_part,  budg_dep_wet_part
    148148    USE infotrac_phy, ONLY: nbtr_sulgas, id_OCS_strat, id_SO2_strat, id_H2SO4_strat
     149    USE strataer_nuc_mod, ONLY : tracstrataer_init
    149150    USE aerophys
    150151#endif
     
    242243    REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw
    243244    ! RomP <<<
    244 
    245245    !
    246246    REAL,DIMENSION(klon,klev),INTENT(IN)     :: mp
     
    251251    !----------
    252252    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: fm_therm
    253     REAL,DIMENSION(klon,klev),INTENT(IN)     :: entr_therm
     253    REAL,DIMENSION(klon,klev),INTENT(INOUT)     :: entr_therm
    254254    !
    255255    !Couche limite:
     
    374374          zrho(i,k)=0.
    375375          zdz(i,k)=0.
    376        END DO
    377     END DO
     376       ENDDO
     377    ENDDO
    378378
    379379    DO it=1, nbtr
     
    401401             zmfdam(i,k,it)=0.
    402402             zmfphi2(i,k,it)=0.
    403           END DO
    404        END DO
    405     END DO
     403          ENDDO
     404       ENDDO
     405    ENDDO
    406406
    407407    DO it=1, nbtr
     
    409409          d_tr_dry(i,it)=0.
    410410          flux_tr_dry(i,it)=0.
    411        END DO
    412     END DO
     411       ENDDO
     412    ENDDO
    413413
    414414    DO k = 1, klev
    415415       DO i = 1, klon
    416416          delp(i,k) = paprs(i,k)-paprs(i,k+1)
    417        END DO
    418     END DO
     417       ENDDO
     418    ENDDO
    419419
    420420    IF (debutphy) THEN
     
    491491
    492492       ! Initialize module for specific tracers
    493        IF(type_trac == 'inca') THEN
     493       IF (type_trac == 'inca') THEN
    494494          source(:,:)=init_source(:,:)
    495495          CALL tracinca_init(aerosol,lessivage)
    496        ELSE IF(type_trac == 'repr') THEN
     496       ELSE IF (type_trac == 'repr') THEN
    497497          source(:,:)=0.
    498        ELSE IF(type_trac == 'co2i') THEN
     498       ELSE IF (type_trac == 'co2i') THEN
    499499          source(:,:)=0.
    500500          lessivage  = .FALSE.
     
    504504          iflag_vdf_trac= 1
    505505          iflag_con_trac= 1
    506        ELSE IF(type_trac == 'inco') THEN
     506       ELSE IF (type_trac == 'inco') THEN
    507507          source(:,1:nqCO2) = 0.                          ! from CO2i ModThL
    508508          source(:,nqCO2+1:nbtr)=init_source(:,:)         ! from INCA ModThL
     
    514514          iflag_con_trac = 1                              ! From CO2i
    515515#ifdef CPP_StratAer
    516        ELSE IF(type_trac == 'coag') THEN
     516       ELSE IF (type_trac == 'coag') THEN
    517517          source(:,:)=0.
    518           DO it= 1, nbtr_sulgas
    519             aerosol(it)=.FALSE.
    520             IF (it==id_H2SO4_strat) aerosol(it)=.TRUE.
    521           ENDDO
    522           DO it= nbtr_sulgas+1, nbtr
    523             aerosol(it)=.TRUE.
    524           ENDDO
     518          CALL tracstrataer_init(aerosol,lessivage)       ! init aerosols and lessivage param
    525519#endif
    526        ELSE IF(type_trac == 'lmdz') THEN
     520       ELSE IF (type_trac == 'lmdz') THEN
    527521          CALL traclmdz_init(pctsrf,xlat,xlon,ftsol,tr_seri,t_seri,pplay,sh,pdtphys,aerosol,lessivage)
    528        END IF
     522       ENDIF
    529523
    530524       !
     
    539533          !
    540534          DO it=1, nbtr
    541              IF(type_trac == 'repr') THEN
     535             IF (type_trac == 'repr') THEN
    542536                 flag_cvltr(it)=.FALSE.
    543              ELSE IF(type_trac == 'inca') THEN
     537             ELSE IF (type_trac == 'inca') THEN
    544538!                IF ((it.EQ.id_Rn222) .OR. ((it.GE.id_SO2) .AND. (it.LE.id_NH3)) ) THEN
    545539!                   !--gas-phase species
     
    565559                !--for now we do not scavenge in cvltr
    566560                flag_cvltr(it)=.FALSE.
    567              ELSE IF(type_trac == 'co2i') THEN
     561             ELSE IF (type_trac == 'co2i') THEN
    568562                !--co2 tracers are not scavenged
    569563                flag_cvltr(it)=.FALSE.
    570              ELSE IF(type_trac == 'inco') THEN     ! Add ThL
     564             ELSE IF (type_trac == 'inco') THEN     ! Add ThL
    571565                flag_cvltr(it)=.FALSE.
    572566#ifdef CPP_StratAer
    573              ELSE IF(type_trac == 'coag') THEN
     567             ELSE IF (type_trac == 'coag') THEN
    574568                IF (convscav.and.aerosol(it)) THEN
    575569                   flag_cvltr(it)=.TRUE.
     
    581575                ENDIF
    582576#endif
    583              ELSE IF(type_trac == 'lmdz') THEN
     577             ELSE IF (type_trac == 'lmdz') THEN
    584578                IF (convscav.and.aerosol(it)) THEN
    585579                   flag_cvltr(it)=.TRUE.
     
    590584                   flag_cvltr(it)=.FALSE.
    591585                ENDIF
    592              END IF
     586             ENDIF
    593587          ENDDO
    594588          !
     
    623617       DO i=1,klon
    624618          zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg
    625        END DO
    626     END DO
     619       ENDDO
     620    ENDDO
    627621    !
    628622    IF (id_be .GT. 0) THEN
     
    630624          DO i=1,klon
    631625             sourceBE(i,k)=srcbe(i,k)       !RomP  -> pour sortie histrac
    632           END DO
    633        END DO
     626          ENDDO
     627       ENDDO
    634628    ENDIF
    635629
     
    638632    !     
    639633    !===============================================================================
    640     IF(type_trac == 'inca') THEN
     634    IF (type_trac == 'inca') THEN
    641635       !    -- CHIMIE INCA  config_inca = aero or chem --
    642636       ! Appel fait en fin de phytrac pour avoir les emissions modifiees par
    643637       ! la couche limite et la convection avant le calcul de la chimie
    644638
    645     ELSE IF(type_trac == 'repr') THEN
     639    ELSE IF (type_trac == 'repr') THEN
    646640       !   -- CHIMIE REPROBUS --
    647641       CALL tracreprobus(pdtphys, gmtime, debutphy, julien, &
     
    650644            tr_seri)
    651645
    652     ELSE IF(type_trac == 'co2i') THEN
     646    ELSE IF (type_trac == 'co2i') THEN
    653647       !   -- CO2 interactif --
    654648       !   -- source is updated with FF and BB emissions
     
    659653            xlat, xlon, pphis, pphi, &
    660654            t_seri, pplay, paprs, tr_seri, source)
    661     ELSE IF(type_trac == 'inco') THEN      ! Add ThL
     655    ELSE IF (type_trac == 'inco') THEN      ! Add ThL
    662656       CALL tracco2i(pdtphys, debutphy, &
    663657            xlat, xlon, pphis, pphi, &
     
    665659
    666660#ifdef CPP_StratAer
    667     ELSE IF(type_trac == 'coag') THEN
     661    ELSE IF (type_trac == 'coag') THEN
    668662       !   --STRATOSPHERIC AER IN THE STRAT --
    669663       CALL traccoag(pdtphys, gmtime, debutphy, julien, &
     
    672666            tr_seri)
    673667#endif
    674     ELSE IF(type_trac == 'lmdz') THEN
     668    ELSE IF (type_trac == 'lmdz') THEN
    675669       !    -- Traitement des traceurs avec traclmdz
    676670       CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
     
    678672            rh, pphi, ustar, wstar, ale_bl, ale_wake,  u10m, v10m, &
    679673            tr_seri, source, d_tr_cl,d_tr_dec, zmasse)               !RomP
    680     END IF
     674    ENDIF
    681675    !======================================================================
    682676    !       -- Calcul de l'effet de la convection --
     
    738732             DO i = 1, klon       
    739733                tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
    740              END DO
    741           END DO
     734             ENDDO
     735          ENDDO
    742736
    743737          CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'convection it = '//TRIM(int2str(it)))
    744738
    745        END DO ! nbtr
     739       ENDDO ! nbtr
    746740
    747741#ifdef CPP_StratAer
     
    795789!             tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10)
    796790!#endif
    797           END DO
    798        END DO
    799     END DO
     791          ENDDO
     792       ENDDO
     793    ENDDO
    800794
    801795    IF (iflag_thermals.GT.0.AND.iflag_the_trac>0) THEN   
     
    811805                d_tr_th(i,k,it)=pdtphys*d_tr_th(i,k,it)
    812806                tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr_th(i,k,it),0.)
    813              END DO
    814           END DO
    815 
    816        END DO ! it
     807             ENDDO
     808          ENDDO
     809
     810       ENDDO ! it
    817811
    818812    ENDIF ! Thermiques
     
    854848       DO it=1, nbtr
    855849          !
    856           IF( pbl_flg(it) /= 0 ) THEN
     850          IF (pbl_flg(it) /= 0) THEN
    857851             !
    858852             CALL cltrac(pdtphys, coefh,t_seri,       &
     
    929923             ! Liu (2001) proposed to use 1.5e-3 kg/kg
    930924
    931 !jyg<
    932 !!             CALL lsc_scav(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,rneb,beta_fisrt,  &
    933925             CALL lsc_scav(pdtphys,it,iflag_lscav,aerosol,ql_incl,prfl,psfl,rneb,beta_fisrt,  &
    934 !>jyg
    935                   beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,   &
    936                   d_tr_bcscav,d_tr_evapls,qPrls)
     926                           beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,d_tr_bcscav,d_tr_evapls,qPrls)
    937927
    938928             !large scale scavenging tendency
     
    946936             ENDIF
    947937
    948           END DO  !tr
     938          ENDDO  !tr
    949939
    950940#ifdef CPP_StratAer
Note: See TracChangeset for help on using the changeset viewer.