Changeset 4750 for LMDZ6


Ignore:
Timestamp:
Nov 14, 2023, 7:06:07 PM (14 months ago)
Author:
dcugnet
Message:

StratAer? : new strat composition (from reprobus) and density (Tabazadeh, 1994) routines.

Location:
LMDZ6/trunk/libf/phylmd/StratAer
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/StratAer/strataer_local_var_mod.F90

    r4625 r4750  
    1 ! $Id: strataer_local_var_mod.F90 2022-10-17 19:39:09Z nlebas $
    21MODULE strataer_local_var_mod
    32! This module contains strato microphysic model parameters & variables
     
    4140  LOGICAL,SAVE :: flag_newclim_file
    4241  !$OMP THREADPRIVATE(flag_newclim_file)
     42 
     43  ! flag to choose new H2SO4 density and weight percent from Tabazadeh et al. (1994).
     44  LOGICAL,SAVE :: flag_new_strat_compo
     45  !$OMP THREADPRIVATE(flag_new_strat_compo)
    4346 
    4447  ! Verbose mode to get more print info
     
    178181    flag_H2SO4_photolysis = .FALSE. ! H2SO4 photolysis (default: No)
    179182    flag_min_rreduce = .TRUE.       ! Minimum lifetime=1.5 pdt phys (default: Yes)
     183    flag_new_strat_compo =.TRUE.    ! H2SO4/H2O weight percent & density routine (default: S. Bekki)
    180184    ok_qemiss = .FALSE.             ! H2O emission flag
    181185   
     
    208212    CALL getin_p('flag_H2SO4_photolysis',flag_H2SO4_photolysis)
    209213    CALL getin_p('flag_min_rreduce',flag_min_rreduce)
     214    CALL getin_p('flag_new_strat_compo',flag_new_strat_compo)
    210215    CALL getin_p('ok_qemiss',ok_qemiss)
    211216   
     
    235240          WRITE(lunout,*) 'IN STRATAER : flag_H2SO4_photolysis = ',flag_H2SO4_photolysis
    236241          WRITE(lunout,*) 'IN STRATAER : flag_min_rreduce = ',flag_min_rreduce
     242          WRITE(lunout,*) 'IN STRATAER : flag_new_strat_compo = ',flag_new_strat_compo
    237243          WRITE(lunout,*) 'IN STRATAER : ok_qemiss = ',ok_qemiss
    238244       ENDIF
  • LMDZ6/trunk/libf/phylmd/StratAer/sulfate_aer_mod.F90

    r3663 r4750  
    1 !
    2 ! $Id$
    3 !
    41MODULE sulfate_aer_mod
    52
     
    85
    96CONTAINS
     7
     8!*******************************************************************
     9  SUBROUTINE STRACOMP_BIN(sh,t_seri,pplay)
     10!
     11!   Aerosol H2SO4 weight fraction as a function of PH2O and temperature
     12!   INPUT:
     13!   sh: VMR of H2O
     14!   t_seri: temperature (K)
     15!   pplay: middle layer pression (Pa)
     16!
     17!   OUTPUT:
     18!   R2SO4: aerosol H2SO4 weight fraction (percent)
     19   
     20    USE dimphy, ONLY : klon,klev ! nb of longitude and altitude bands
     21    USE aerophys
     22    USE phys_local_var_mod, ONLY: R2SO4
     23   
     24    IMPLICIT NONE
     25   
     26    REAL,DIMENSION(klon,klev),INTENT(IN)          :: t_seri  ! Temperature
     27    REAL,DIMENSION(klon,klev),INTENT(IN)          :: pplay   ! pression in the middle of each layer (Pa)
     28    REAL,DIMENSION(klon,klev),INTENT(IN)          :: sh      ! specific humidity
     29   
     30    REAL ks(7)
     31    REAL t,qh2o,ptot,pw
     32    REAL a,b,c,det
     33    REAL xsb,msb
     34   
     35    INTEGER ilon,ilev
     36    DATA ks/-21.661,2724.2,51.81,-15732.0,47.004,-6969.0,-4.6183/
     37   
     38!*******************************************************************
     39!***     liquid aerosols process
     40!*******************************************************************
     41!        BINARIES LIQUID AEROROLS:
     42   
     43    DO ilon=1,klon
     44       DO ilev=1,klev
     45         
     46          t = max(t_seri(ilon,ilev),185.)
     47          qh2o=sh(ilon,ilev)/18.*28.9
     48          ptot=pplay(ilon,ilev)/100.
     49          pw = qh2o*ptot/1013.0
     50          pw = min(pw,2.e-3/1013.)
     51          pw = max(pw,2.e-5/1013.)
     52         
     53!*******************************************************************
     54!***     binaries aerosols h2so4/h2o
     55!*******************************************************************
     56          a = ks(3) + ks(4)/t
     57          b = ks(1) + ks(2)/t
     58          c = ks(5) + ks(6)/t + ks(7)*log(t) - log(pw)
     59         
     60          det = b**2 - 4.*a*c
     61         
     62          IF (det > 0.) THEN
     63             xsb = (-b - sqrt(det))/(2.*a)
     64             msb = 55.51*xsb/(1.0 - xsb)
     65          ELSE
     66             msb = 0.
     67          ENDIF
     68          R2SO4(ilon,ilev) = 100*msb*0.098076/(1.0 + msb*0.098076)
     69         
     70          ! H2SO4 min dilution: 0.5%
     71          R2SO4(ilon,ilev) = max( R2SO4(ilon,ilev), 0.005 )
     72       ENDDO
     73    ENDDO
     74100 RETURN
     75   
     76  END SUBROUTINE STRACOMP_BIN
    1077
    1178!********************************************************************
     
    479546
    480547!****************************************************************
     548    SUBROUTINE DENH2SA_TABA(t_seri)
     549
     550!   AERSOL DENSITY AS A FUNCTION OF H2SO4 WEIGHT PERCENT AND T
     551!   from Tabazadeh et al. (1994) abaques
     552!   ---------------------------------------------
     553
     554!   
     555!   INPUT:
     556!   R2SO4: aerosol H2SO4 weight fraction (percent)
     557!   t_seri: temperature (K)
     558!   klon: number of latitude bands in the model domain
     559!   klev: number of altitude bands in the model domain
     560!   for IFS: perhaps add another dimension for longitude
     561!
     562!   OUTPUT:
     563!   DENSO4: aerosol mass density (gr/cm3 = aerosol mass/aerosol volume)
     564!   
     565    USE dimphy, ONLY : klon,klev
     566    USE phys_local_var_mod, ONLY: R2SO4, DENSO4
     567   
     568    IMPLICIT NONE
     569   
     570    REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
     571       
     572    INTEGER i,j
     573   
     574!----------------------------------------------------------------------
     575!       ... Local variables
     576!----------------------------------------------------------------------
     577      real, parameter :: a9 = -268.2616e4, a10 = 576.4288e3
     578     
     579      real :: a0, a1, a2, a3, a4, a5, a6, a7 ,a8
     580      real :: c1, c2, c3, c4, w
     581     
     582     
     583!   Loop on model domain (2 dimension for UPMC model; 3 for IFS)
     584    DO i=1,klon
     585       DO j=1,klev
     586!----------------------------------------------------------------------
     587!       ... Temperature variables
     588!----------------------------------------------------------------------
     589          c1 = t_seri(I,J)- 273.15
     590          c2 = c1**2
     591          c3 = c1*c2
     592          c4 = c1*c3
     593!----------------------------------------------------------------------
     594!       Polynomial Coefficients
     595!----------------------------------------------------------------------
     596          a0 = 999.8426 + 334.5402e-4*c1 - 569.1304e-5*c2
     597          a1 = 547.2659 - 530.0445e-2*c1 + 118.7671e-4*c2 + 599.0008e-6*c3
     598          a2 = 526.295e1 + 372.0445e-1*c1 + 120.1909e-3*c2 - 414.8594e-5*c3 + 119.7973e-7*c4
     599          a3 = -621.3958e2 - 287.7670*c1 - 406.4638e-3*c2 + 111.9488e-4*c3 + 360.7768e-7*c4
     600          a4 = 409.0293e3 + 127.0854e1*c1 + 326.9710e-3*c2 - 137.7435e-4*c3 - 263.3585e-7*c4
     601          a5 = -159.6989e4 - 306.2836e1*c1 + 136.6499e-3*c2 + 637.3031e-5*c3
     602          a6 = 385.7411e4 + 408.3717e1*c1 - 192.7785e-3*c2
     603          a7 = -580.8064e4 - 284.4401e1*c1
     604          a8 = 530.1976e4 + 809.1053*c1
     605!----------------------------------------------------------------------
     606!       ... Summation
     607!----------------------------------------------------------------------
     608!     w : H2SO4 Weight fraction
     609          w=r2SO4(i,j)*0.01
     610          DENSO4(i,j) = 0.001*(a0 + w*(a1 + w*(a2 + w*(a3 + w*(a4 +  &
     611               w*(a5 + w*(a6 + w*(a7 + w*(a8 + w*(a9 + w*a10))))))))))
     612          DENSO4(i,j) = max (0.0, DENSO4(i,j) )
     613
     614       ENDDO
     615    ENDDO
     616
     617  END SUBROUTINE DENH2SA_TABA
     618 
     619!****************************************************************
    481620    SUBROUTINE DENH2SA(t_seri)
    482621
  • LMDZ6/trunk/libf/phylmd/StratAer/traccoag_mod.F90

    r4601 r4750  
    1 !
    2 ! $Id$
    3 !
    41MODULE traccoag_mod
    52!
     
    119116    WHERE (stratomask.GT.0.5) is_strato=.TRUE.
    120117
    121 ! STRACOMP (H2O, P, t_seri -> aerosol composition (R2SO4))
    122 ! H2SO4 mass fraction in aerosol (%)
    123     CALL stracomp(sh,t_seri,pplay)
    124 
    125 ! aerosol density (gr/cm3)
    126     CALL denh2sa(t_seri)
    127 
     118    IF(flag_new_strat_compo) THEN
     119       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)
     126    ELSE
     127       WRITE(lunout,*) 'traccoag: USE STRAT COMPO from Bekki 2D model', flag_new_strat_compo
     128       ! STRACOMP (H2O, P, t_seri -> aerosol composition (R2SO4))
     129       ! H2SO4 mass fraction in aerosol (%)
     130       CALL stracomp(sh,t_seri,pplay)
     131       
     132       ! aerosol density (gr/cm3)
     133       CALL denh2sa(t_seri)
     134    ENDIF
     135   
    128136! compute factor for converting dry to wet radius (for every grid box)
    129137    f_r_wet(:,:) = (dens_aer_dry/(DENSO4(:,:)*1000.)/(R2SO4(:,:)/100.))**(1./3.)
Note: See TracChangeset for help on using the changeset viewer.