Ignore:
Timestamp:
Sep 20, 2024, 12:32:04 PM (5 days ago)
Author:
Laurent Fairhead
Message:

Updating cirrus branch to trunk revision 5171

Location:
LMDZ6/branches/cirrus
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/cirrus

  • LMDZ6/branches/cirrus/libf/phylmd/StratAer/traccoag_mod.F90

    r4769 r5202  
    99       presnivs, xlat, xlon, pphis, pphi, &
    1010       t_seri, pplay, paprs, sh, rh, tr_seri)
    11 
     11   
    1212    USE phys_local_var_mod, ONLY: mdw, R2SO4, DENSO4, f_r_wet, surf_PM25_sulf, &
    13         & budg_emi_ocs, budg_emi_so2, budg_emi_h2so4, budg_emi_part
    14 
     13        & budg_emi_ocs, budg_emi_so2, budg_emi_h2so4, budg_emi_part, &
     14        & R2SO4B, DENSO4B, f_r_wetB, sulfmmr, SAD_sulfate, sulfmmr_mode, nd_mode, reff_sulfate
     15   
    1516    USE dimphy
    1617    USE infotrac_phy, ONLY : nbtr_bin, nbtr_sulgas, nbtr, id_SO2_strat
     
    5657    REAL                                   :: m_aer_emiss_vol_daily ! daily injection mass emission
    5758    REAL                                   :: m_aer               ! aerosol mass
    58     INTEGER                                :: it, k, i, ilon, ilev, itime, i_int, ieru
     59    INTEGER                                :: it, k, i, j, ilon, ilev, itime, i_int, ieru
    5960    LOGICAL,DIMENSION(klon,klev)           :: is_strato           ! true = above tropopause, false = below
    6061    REAL,DIMENSION(klon,klev)              :: m_air_gridbox       ! mass of air in every grid box [kg]
     
    8283    INTEGER                                :: injdur_sai          ! injection duration for SAI case [days]
    8384    INTEGER                                :: yr, is_bissext
     85    REAL                                   :: samoment2, samoment3! 2nd and 3rd order moments of size distribution
    8486
    8587    IF (is_mpi_root .AND. flag_verbose_strataer) THEN
     
    8890    ENDIF
    8991   
     92    !   radius [m]
    9093    DO it=1, nbtr_bin
    9194      r_bin(it)=mdw(it)/2.
     
    117120
    118121    IF(flag_new_strat_compo) THEN
    119        IF(debutphy) WRITE(lunout,*) 'traccoag: USE STRAT COMPO from Tabazadeh 1994', flag_new_strat_compo
    120        ! STRACOMP (H2O, P, t_seri -> aerosol composition (R2SO4)) : binary routine (from reprobus)
    121        ! H2SO4 mass fraction in aerosol (%) from Tabazadeh et al. (1994).
    122        CALL stracomp_bin(sh,t_seri,pplay)
    123        
    124        ! aerosol density (gr/cm3) - from Tabazadeh
    125        CALL denh2sa_taba(t_seri)
     122       IF(debutphy) WRITE(lunout,*) 'traccoag: COMPO/DENSITY (Tabazadeh 97) + H2O kelvin effect', flag_new_strat_compo
     123       ! STRACOMP (H2O, P, t_seri, R -> R2SO4 + Kelvin effect) : Taba97, Socol, etc...
     124       CALL stracomp_kelvin(sh,t_seri,pplay)
    126125    ELSE
    127        IF(debutphy) WRITE(lunout,*) 'traccoag: USE STRAT COMPO from Bekki 2D model', flag_new_strat_compo
     126       IF(debutphy) WRITE(lunout,*) 'traccoag: COMPO from Bekki 2D model', flag_new_strat_compo
    128127       ! STRACOMP (H2O, P, t_seri -> aerosol composition (R2SO4))
    129128       ! H2SO4 mass fraction in aerosol (%)
     
    132131       ! aerosol density (gr/cm3)
    133132       CALL denh2sa(t_seri)
     133       
     134       ! compute factor for converting dry to wet radius (for every grid box)
     135       f_r_wet(:,:) = (dens_aer_dry/(DENSO4(:,:)*1000.)/(R2SO4(:,:)/100.))**(1./3.)
    134136    ENDIF
    135137   
    136 ! compute factor for converting dry to wet radius (for every grid box)
    137     f_r_wet(:,:) = (dens_aer_dry/(DENSO4(:,:)*1000.)/(R2SO4(:,:)/100.))**(1./3.)
    138 
    139138!--calculate mass of air in every grid box
    140139    DO ilon=1, klon
     
    348347    ENDDO
    349348   
     349!--compute
     350!     sulfmmr: Sulfate aerosol concentration (dry mixing ratio) (condensed H2SO4 mmr)
     351!     SAD_sulfate: SAD all aerosols (cm2/cm3) (must be WET)
     352!     sulfmmr_mode: sulfate(=H2SO4 if dry) MMR in different modes (ambiguous but based on sulfmmr, it mus be DRY(?) mmr)
     353!     nd_mode: DRY(?) particle concentration in different modes (part/m3)
     354     sulfmmr(:,:)=0.0
     355     SAD_sulfate(:,:)=0.0
     356     sulfmmr_mode(:,:,:)=0.0
     357     nd_mode(:,:,:)=0.0
     358     reff_sulfate(:,:)=0.0
     359     
     360     DO i=1,klon
     361        DO j=1,klev
     362           samoment2=0.0
     363           samoment3=0.0
     364           DO it=1, nbtr_bin
     365              !surf_PM25_sulf(i)=surf_PM25_sulf(i)+tr_seri(i,1,it+nbtr_sulgas)*m_part(i,1,it) &
     366              !assume that particles consist of ammonium sulfate at the surface (132g/mol)
     367              !and are dry at T = 20 deg. C and 50 perc. humidity
     368             
     369              !     sulfmmr_mode: sulfate(=H2SO4 if dry) MMR in different modes (based on sulfmmr, it must be DRY mmr)
     370              !     equivalent to condensed H2SO4 mmr= H2SO4 kg / kgA in bin it
     371              sulfmmr_mode(i,j,it) = tr_seri(i,j,it+nbtr_sulgas) &        ! [DRY part/kgA in bin it]
     372                   &  *(4./3.)*RPI*(mdw(it)/2.)**3.   &                   ! [mdw: dry diameter in m]
     373                   &  *dens_aer_dry                                       ! [dry aerosol mass density in kg/m3]
     374             
     375              !     sulfmmr: Sulfate aerosol concentration (dry mass mixing ratio)
     376              !     equivalent to total condensed H2SO4 mmr (H2SO4 kg / kgA
     377              sulfmmr(i,j) = sulfmmr(i,j) + sulfmmr_mode(i,j,it)
     378             
     379              !     nd_mode: particle concentration in different modes (DRY part/m3)
     380              nd_mode(i,j,it) = tr_seri(i,j,it+nbtr_sulgas) &             ! [DRY part/kgA in bin it]
     381                   & *pplay(i,j)/t_seri(i,j)/RD                           ! [air mass concentration in kg air /m3A]
     382             
     383              IF(flag_new_strat_compo) THEN
     384                 !     SAD_sulfate: SAD WET sulfate aerosols (cm2/cm3)
     385                 SAD_sulfate(i,j) = SAD_sulfate(i,j) + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     386                      &  *4.*RPI*( mdw(it)*f_r_wetB(i,j,it)/2. )**2. &       ! [WET SA of part it in m2]
     387                      &  *1.e-2                                              ! conversion from m2/m3 to cm2/cm3A
     388!    samoment2 : 2nd order moment of WET sulfate aerosols (m2/m3)
     389                 samoment2 = samoment2 + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     390                      &  *( mdw(it)*f_r_wetB(i,j,it)/2. )**2.                     ! [WET SA of part it in m2]
     391!    samoment3 : 3nd order moment of WET sulfate aerosols (cm2/cm3)
     392                 samoment3 = samoment3 + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     393                      &  *( mdw(it)*f_r_wetB(i,j,it)/2. )**3.                     ! [WET SA of part it in m2]
     394              ELSE
     395!     SAD_sulfate: SAD WET sulfate aerosols (cm2/cm3)
     396                 SAD_sulfate(i,j) = SAD_sulfate(i,j) + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     397                      &  *4.*RPI*( mdw(it)*f_r_wet(i,j)/2. )**2. &           ! [WET SA of part it in m2]
     398                      &  *1.e-2                                              ! conversion from m2/m3 to cm2/cm3A
     399!    samoment2 : 2nd order moment of WET sulfate aerosols (m2/m3)
     400                 samoment2 = samoment2 + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     401                      &  *( mdw(it)*f_r_wet(i,j)/2. )**2.                          ! [WET SA of part it in m2]
     402!    samoment3 : 3nd order moment of WET sulfate aerosols (cm2/cm3)
     403                 samoment3 = samoment3 + nd_mode(i,j,it) &     ! [DRY part/m3A (in bin it)]
     404                      &  *( mdw(it)*f_r_wet(i,j)/2. )**3.                          ! [WET SA of part it in m2]
     405              ENDIF
     406           ENDDO
     407!     reff_sulfate: effective radius of WET sulfate aerosols (cm)
     408           reff_sulfate(i,j) = (samoment3 / samoment2) &
     409                & *1.e2                                              ! conversion from m to cm
     410        ENDDO
     411     ENDDO
     412     
    350413  END SUBROUTINE traccoag
    351414
Note: See TracChangeset for help on using the changeset viewer.