Ignore:
Timestamp:
May 22, 2024, 3:16:36 PM (5 weeks ago)
Author:
lebasn
Message:

StratAer?: New model version (microphysic, composition routine, code cleaning, new params...)

File:
1 edited

Legend:

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

    r4601 r4950  
    88  USE aerophys
    99  USE infotrac_phy, ONLY : nbtr_bin, nbtr_sulgas, nbtr, id_H2SO4_strat
    10   USE phys_local_var_mod, ONLY: mdw, budg_3D_nucl, budg_3D_cond_evap, budg_h2so4_to_part, R2SO4, DENSO4, f_r_wet
     10  USE phys_local_var_mod, ONLY: mdw, budg_3D_nucl, budg_3D_cond_evap, budg_h2so4_to_part, R2SO4, DENSO4, &
     11       f_r_wet, R2SO4B, DENSO4B, f_r_wetB
    1112  USE nucleation_tstep_mod
    1213  USE cond_evap_tstep_mod
     
    1415  USE YOMCST, ONLY : RPI, RD, RG
    1516  USE print_control_mod, ONLY: lunout
    16   USE strataer_local_var_mod
     17  USE strataer_local_var_mod ! contains also RRSI and Vbin
    1718 
    1819  IMPLICIT NONE
     
    3536  REAL                      :: ntot !total number of molecules in the critical cluster (ntot>4)
    3637  REAL                      :: x    ! molefraction of H2SO4 in the critical cluster     
    37   REAL Vbin(nbtr_bin)
    3838  REAL a_xm, b_xm, c_xm
    3939  REAL PDT, dt
    4040  REAL H2SO4_init
    4141  REAL ACTSO4(klon,klev)
    42   REAL RRSI(nbtr_bin)
    4342  REAL nucl_rate
    4443  REAL cond_evap_rate
     
    4847  REAL DNDR(nbtr_bin)
    4948  REAL H2SO4_sat
    50 
    51   DO it=1,nbtr_bin
    52     Vbin(it)=4.0*RPI*((mdw(it)/2.)**3)/3.0
    53   ENDDO
    54 
     49  REAL R2SO4ik(nbtr_bin), DENSO4ik(nbtr_bin), f_r_wetik(nbtr_bin)
     50 
    5551  !coefficients for H2SO4 density parametrization used for nucleation if ntot<4
    5652  a_xm = 0.7681724 + 1.*(2.1847140 + 1.*(7.1630022 + 1.*(-44.31447 + &
     
    6157       & 1.*(7.990811e-4 + 1.*(-7.458060e-4 + 1.*2.58139e-4 )))))
    6258
    63   ! STRAACT (R2SO4, t_seri -> H2SO4 activity coefficient (ACTSO4)) for cond/evap
    64   CALL STRAACT(ACTSO4)
    65 
    66   ! compute particle radius in cm RRSI from diameter in m
    67   DO it=1,nbtr_bin
    68     RRSI(it)=mdw(it)/2.*100.
    69   ENDDO
    70 
     59  IF(.not.flag_new_strat_compo) THEN
     60     ! STRAACT (R2SO4, t_seri -> H2SO4 activity coefficient (ACTSO4)) for cond/evap
     61     CALL STRAACT(ACTSO4)
     62  ENDIF
     63 
    7164  DO ilon=1, klon
    7265!
     
    10497      ENDIF
    10598      ! compute cond/evap rate in kg(H2SO4)/kgA/s
    106       CALL condens_evapor_rate(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
    107              & ACTSO4(ilon,ilev),R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
    108              & RRSI,Vbin,FL,ASO4,DNDR)
     99      IF(flag_new_strat_compo) THEN
     100         R2SO4ik(:)   = R2SO4B(ilon,ilev,:)
     101         DENSO4ik(:)  = DENSO4B(ilon,ilev,:)
     102         f_r_wetik(:) = f_r_wetB(ilon,ilev,:)
     103         CALL condens_evapor_rate_kelvin(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
     104              & R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
     105              & R2SO4ik,DENSO4ik,f_r_wetik,FL,ASO4,DNDR)
     106      ELSE
     107         CALL condens_evapor_rate(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
     108              & ACTSO4(ilon,ilev),R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
     109              & FL,ASO4,DNDR)
     110      ENDIF
    109111      ! Compute H2SO4 saturate vapor for big particules
    110112      H2SO4_sat = DNDR(nbtr_bin)/(pplay(ilon,ilev)/t_seri(ilon,ilev)/RD/1.E6/mH2SO4mol)
     
    127129      tr_seri(ilon,ilev,id_H2SO4_strat)=MAX(0.,tr_seri(ilon,ilev,id_H2SO4_strat)-(nucl_rate+cond_evap_rate)*dt)
    128130      ! apply cond to bins
    129       CALL cond_evap_part(dt,FL,ASO4,f_r_wet(ilon,ilev),RRSI,Vbin,tr_seri(ilon,ilev,:))
     131      CALL condens_evapor_part(dt,FL,ASO4,f_r_wet(ilon,ilev),tr_seri(ilon,ilev,:))
    130132      ! apply nucl. to bins
    131       CALL nucleation_part(nucl_rate,ntot,x,dt,Vbin,tr_seri(ilon,ilev,:))
     133      CALL nucleation_part(nucl_rate,ntot,x,dt,tr_seri(ilon,ilev,:))
    132134      ! compute fluxes as diagnostic in [kg(S)/m2/layer/s] (now - for evap and + for cond)
    133135      budg_3D_cond_evap(ilon,ilev)=budg_3D_cond_evap(ilon,ilev)+mSatom/mH2SO4mol &
     
    142144        & *pplay(ilon,ilev)/t_seri(ilon,ilev)/RD/1.E6/mH2SO4mol
    143145    ! compute cond/evap rate in kg(H2SO4)/kgA/s (now only evap for pdtphys)
    144     CALL condens_evapor_rate(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
    145            & ACTSO4(ilon,ilev),R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
    146            & RRSI,Vbin,FL,ASO4,DNDR)
     146    IF(flag_new_strat_compo) THEN
     147       CALL condens_evapor_rate_kelvin(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
     148            & R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
     149            & R2SO4ik,DENSO4ik,f_r_wetik,FL,ASO4,DNDR)
     150    ELSE
     151       CALL condens_evapor_rate(rhoa,t_seri(ilon,ilev),pplay(ilon,ilev), &
     152            & ACTSO4(ilon,ilev),R2SO4(ilon,ilev),DENSO4(ilon,ilev),f_r_wet(ilon,ilev), &
     153            & FL,ASO4,DNDR)
     154    ENDIF
    147155    ! limit evaporation (negative FL) over one physics time step to H2SO4 content of the droplet
    148156    DO it=1,nbtr_bin
     
    159167    tr_seri(ilon,ilev,id_H2SO4_strat)=MAX(0.,tr_seri(ilon,ilev,id_H2SO4_strat)-evap_rate*pdtphys)
    160168    ! apply evap to bins
    161     CALL cond_evap_part(pdtphys,FL,ASO4,f_r_wet(ilon,ilev),RRSI,Vbin,tr_seri(ilon,ilev,:))
     169    CALL condens_evapor_part(pdtphys,FL,ASO4,f_r_wet(ilon,ilev),tr_seri(ilon,ilev,:))
    162170    ! compute fluxes as diagnostic in [kg(S)/m2/layer/s] (now - for evap and + for cond)
    163171    budg_3D_cond_evap(ilon,ilev)=budg_3D_cond_evap(ilon,ilev)+mSatom/mH2SO4mol &
Note: See TracChangeset for help on using the changeset viewer.