Changeset 3682 for trunk/LMDZ.TITAN


Ignore:
Timestamp:
Mar 14, 2025, 2:27:06 PM (3 months ago)
Author:
lrosset
Message:

Titan microphysics and physics : Outputs the nucleation rates and growth rates for the condensible species. (LR)

Location:
trunk/LMDZ.TITAN/libf
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.TITAN/libf/muphytitan/mm_clouds.f90

    r3496 r3682  
    101101    IF (mm_w_cloud_nucond) THEN
    102102      ! Calls condensation/nucleation (and update saturation ratio diagnostic)
    103       call mm_cloud_nucond(dm0a,dm3a,dm0n,dm3n,dm3i,dgazs,mm_gazs_sat)
     103      ! ADDED : Extraction of nucleation and growth rates
     104      call mm_cloud_nucond(dm0a,dm3a,dm0n,dm3n,dm3i,dgazs,mm_gazs_sat,mm_nrate,mm_grate)
    104105    ENDIF
    105106
     
    134135  !-----------------------------------------------------------------------------
    135136
    136   SUBROUTINE mm_cloud_nucond(dm0a,dm3a,dm0n,dm3n,dm3i,dgazs,gazsat)
     137  SUBROUTINE mm_cloud_nucond(dm0a,dm3a,dm0n,dm3n,dm3i,dgazs,gazsat,nrate,grate)
    137138    !! Get moments tendencies through nucleation/condensation/evaporation.
    138139    !!
     
    166167    REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: gazsat
    167168    !! Saturation ratio of each condensible specie.
     169
     170    ! ADDED : Extraction of the nucleation and growth rate
     171    REAL(kind=mm_wp), DIMENSION(:,:),INTENT(out) :: nrate
     172    !! Nucleation rate values of each condensible species (\(m^{-2}.s^{-1}\)).
     173    REAL(kind=mm_wp), DIMENSION(:,:),INTENT(out) :: grate
     174    !! Growth rate values of each condensible species (\(m^{2}.s^{-1}\)).
     175
    168176    INTEGER                                       :: i,idx
    169177    REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zdm0a,zdm3a,zdm0n,zdm3n
     
    175183    DO i = 1, mm_nesp
    176184      call nc_esp(mm_xESPS(i),mm_gazs(:,i),mm_m3ice(:,i),dgazs(:,i),dm3i(:,i), &
    177                   zdm0a(:,i),zdm3a(:,i),zdm0n(:,i),zdm3n(:,i),gazsat(:,i))
     185                  zdm0a(:,i),zdm3a(:,i),zdm0n(:,i),zdm3n(:,i),gazsat(:,i),nrate(:,i),grate(:,i))
     186      ! ADDED : Extraction of nucleation and growth rates
    178187    ENDDO
    179188
     
    200209  END SUBROUTINE mm_cloud_nucond
    201210
    202   SUBROUTINE nc_esp(xESP,vapX,m3iX,dvapX,dm3iX,dm0aer,dm3aer,dm0ccn,dm3ccn,Xsat)
     211  SUBROUTINE nc_esp(xESP,vapX,m3iX,dvapX,dm3iX,dm0aer,dm3aer,dm0ccn,dm3ccn,Xsat,Xnrate,Xgrate) ! ADDED : arguments nrate, grate
    203212    !! Get moments tendencies through nucleation/condensation/evaporation of a given condensible specie.
    204213    !!
     
    230239    REAL(kind=mm_wp),INTENT(out), DIMENSION(:) :: Xsat
    231240    !! Saturation ratio values on the vertical grid (--).
     241
     242    ! ADDED : Extraction of the nucleation and growth rate
     243    REAL(kind=mm_wp),INTENT(out), DIMENSION(:) :: Xnrate
     244    !! Nucleation rate values on the vertical grid for the species X (\(m^{-2}.s^{-1}\)).
     245    REAL(kind=mm_wp),INTENT(out), DIMENSION(:) :: Xgrate
     246    !! Growth rate values on the vertical grid for the species X (\(m^{2}.s^{-1}\)).
     247
     248
    232249    INTEGER                                 :: i
    233250    REAL(kind=mm_wp)                        :: bef,aft
     
    281298    ! Then, from eq. 2:
    282299    ! Mn(k)[t+dt] = Mn(k)[t] + CST_M(k)/(1+CST_M(k))*Ma(k)[t]            (4)
     300   
     301    ! Copies the nucleation rate into an output variable
     302    Xnrate = nucr
     303   
    283304    cm0 = 4._mm_wp*mm_pi*nucr/mm_rm*mm_alpha_f(3._mm_wp)*mm_rcf**3*mm_dt
    284305    cm3 = 4._mm_wp*mm_pi*nucr/mm_rm*mm_alpha_f(6._mm_wp)/mm_alpha_f(3._mm_wp)*mm_rcf**3*mm_dt
     
    317338    ! gets "true" growth rate
    318339    grate = grate * (newvap/qsat - seq)
     340    ! Copies the growth rate into an output variable
     341    Xgrate = grate
    319342
    320343    ! computes tendencies through condensation
     
    377400    REAL(kind=mm_wp), INTENT(in), DIMENSION(:)  :: sat  !! Saturation ratio of given specie (--).
    378401    TYPE(mm_esp), INTENT(in)                    :: xESP !! X specie properties (--).
    379     REAL(kind=mm_wp), INTENT(out), DIMENSION(:) :: rate !! The nucleation rate (\(m^-{2}.s^{-1}\)).
     402    REAL(kind=mm_wp), INTENT(out), DIMENSION(:) :: rate !! The nucleation rate (\(m^{-2}.s^{-1}\)).
    380403    INTEGER          :: i
    381404    REAL(kind=mm_wp) :: r,t,s,sig,nX,rstar,gstar,x,zeldov,deltaf,fsh,fstar
  • trunk/LMDZ.TITAN/libf/muphytitan/mm_globals.f90

    r3657 r3682  
    522522  REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE, SAVE :: mm_ice_fluxes
    523523
     524  !> Condensible components nucleation rates.
     525  !!
     526  !! It is a 2D-array with the vertical layers in first dimension and the number of condensible
     527  !! species in the second.
     528  !! It is updated in [[mm_clouds(module):mm_cloud_microphysics(subroutine)]].
     529  REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE, SAVE :: mm_nrate
     530
     531  !> Condensible components growth rates.
     532  !!
     533  !! It is a 2D-array with the vertical layers in first dimension and the number of condensible
     534  !! species in the second.
     535  !! It is updated in [[mm_clouds(module):mm_cloud_microphysics(subroutine)]].
     536  REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE, SAVE :: mm_grate
     537
    524538  !> Condensible species saturation ratio (--).
    525539  !!
     
    583597  !$OMP THREADPRIVATE(mm_rcs,mm_rcf,mm_drad,mm_drho)
    584598  !$OMP THREADPRIVATE(mm_m0as_vsed,mm_m3as_vsed,mm_m0af_vsed,mm_m3af_vsed)
    585   !$OMP THREADPRIVATE(mm_aer_s_flux,mm_aer_f_flux,mm_ccn_vsed,mm_ccn_flux,mm_ice_prec,mm_ice_fluxes,mm_gazs_sat)
     599  !$OMP THREADPRIVATE(mm_aer_s_flux,mm_aer_f_flux,mm_ccn_vsed,mm_ccn_flux,mm_ice_prec,mm_ice_fluxes,mm_gazs_sat, mm_nrate, mm_grate)
    586600  !$OMP THREADPRIVATE(mm_m0as_min,mm_m3as_min,mm_rcs_min,mm_m0af_min,mm_m3af_min,mm_rcf_min,mm_m0n_min,mm_m3cld_min)
    587601  !$OMP THREADPRIVATE(mm_nla,mm_nle)
     
    12511265      ALLOCATE(mm_gazs_sat(mm_nla,mm_nesp)) ; mm_gazs_sat(:,:) = 0._mm_wp
    12521266    ENDIF
     1267    ! ADDED : Allocate memory for nucleation and growth rate
     1268    IF (.NOT.ALLOCATED(mm_nrate)) THEN
     1269      ALLOCATE(mm_nrate(mm_nla,mm_nesp)) ; mm_nrate(:,:) = 0._mm_wp
     1270    ENDIF
     1271      IF (.NOT.ALLOCATED(mm_grate)) THEN
     1272      ALLOCATE(mm_grate(mm_nla,mm_nesp)) ; mm_grate(:,:) = 0._mm_wp
     1273    ENDIF
    12531274
    12541275    ! note mm_dzlev already from top to ground
  • trunk/LMDZ.TITAN/libf/muphytitan/mm_microphysic.f90

    r3496 r3682  
    163163  END FUNCTION muphys_nocld
    164164
    165   SUBROUTINE mm_diagnostics(dt,aer_prec,aer_s_w,aer_f_w,aer_s_flux,aer_f_flux,ccn_prec,ccn_w,ccn_flux,ice_prec,ice_fluxes,gazs_sat)
     165  SUBROUTINE mm_diagnostics(dt,aer_prec,aer_s_w,aer_f_w,aer_s_flux,aer_f_flux,ccn_prec,ccn_w,ccn_flux,ice_prec,ice_fluxes,gazs_sat,nrate,grate)
    166166    !! Get various diagnostic fields of the microphysics.
    167167    !!
     
    171171    !! - Settling velocity (aerosols -total-, CCN and ices)
    172172    !! - Precipitations (aerosols -total-, CCN and ices)
    173     !! - condensible gazes saturation ratio
     173    !! - Condensible gazes saturation ratio
     174    !! - Nucleation and growth rates
    174175    !!
    175176    !! @note
     
    197198    REAL(kind=mm_wp), INTENT(out), OPTIONAL, DIMENSION(:,:) :: gazs_sat   !! Condensible gaz saturation ratios (--).
    198199    REAL(kind=mm_wp), INTENT(out), OPTIONAL, DIMENSION(:)   :: ice_prec   !! Ice precipitations (\(kg.m^{-2}.s^{-1}\)).
     200    ! Nucleation and growth rates
     201    REAL(kind=mm_wp), INTENT(out), OPTIONAL, DIMENSION(:,:)   :: nrate     !! Nucleation rate (\(m^{-2}.s^{-1}\)).
     202    REAL(kind=mm_wp), INTENT(out), OPTIONAL, DIMENSION(:,:)   :: grate     !! Growth rate (\(m^{2}.s^{-1}\)).
    199203
    200204    IF (PRESENT(aer_prec))   aer_prec   = ABS(mm_aer_prec) / dt
     
    211215      IF (PRESENT(ice_fluxes)) ice_fluxes = mm_ice_fluxes(mm_nla:1:-1,:)
    212216      IF (PRESENT(gazs_sat))   gazs_sat   = mm_gazs_sat(mm_nla:1:-1,:)
     217      ! Nucleation and growth rates
     218      IF (PRESENT(nrate))      nrate      = mm_nrate(mm_nla:1:-1,:)
     219      IF (PRESENT(grate))      grate      = mm_grate(mm_nla:1:-1,:)
    213220    ELSE
    214221      IF (PRESENT(ccn_prec))   ccn_prec   = 0._mm_wp
     
    218225      IF (PRESENT(ice_fluxes)) ice_fluxes = 0._mm_wp
    219226      IF (PRESENT(gazs_sat))   gazs_sat   = 0._mm_wp
     227      ! Nucleation and growth rates
     228      IF (PRESENT(nrate))      nrate      = 0._mm_wp
     229      IF (PRESENT(grate))      grate      = 0._mm_wp
    220230    ENDIF
    221231  END SUBROUTINE mm_diagnostics
  • trunk/LMDZ.TITAN/libf/phytitan/calmufi.F90

    r3656 r3682  
    167167    call mm_diagnostics(dt,mmd_aer_prec(ilon),mmd_aer_s_w(ilon,:),mmd_aer_f_w(ilon,:),mmd_aer_s_flux(ilon,:),mmd_aer_f_flux(ilon,:),  &
    168168                        mmd_ccn_prec(ilon),mmd_ccn_w(ilon,:),mmd_ccn_flux(ilon,:),mmd_ice_prec(ilon,:),   &
    169                         mmd_ice_fluxes(ilon,:,:),mmd_gazs_sat(ilon,:,:))
     169                        mmd_ice_fluxes(ilon,:,:),mmd_gazs_sat(ilon,:,:),mmd_nrate(ilon,:,:),mmd_grate(ilon,:,:))
     170                        ! ADDED ABOVE : Nucleation and growth rates
    170171    call mm_get_radii(mmd_rc_sph(ilon,:),mmd_rc_fra(ilon,:),mmd_rc_cld(ilon,:))
    171172
  • trunk/LMDZ.TITAN/libf/phytitan/muphy_diag.F90

    r3497 r3682  
    2626  REAL(kind=8), ALLOCATABLE, DIMENSION(:,:)   :: mmd_rc_fra     !! Fractal mode characteristic radius (m).
    2727  REAL(kind=8), ALLOCATABLE, DIMENSION(:,:)   :: mmd_rc_cld     !! Cloud drop radius (m).
     28  ! Nucleation and growth rates
     29  REAL(kind=8), ALLOCATABLE, DIMENSION(:,:,:) :: mmd_nrate      !! Condensible species nucleation rate (\(m^{-2}.s^{-1}\)).
     30  REAL(kind=8), ALLOCATABLE, DIMENSION(:,:,:) :: mmd_grate      !! Condensible species growth rate (\(m^{2}.s^{-1}\)).
    2831
    2932  !$OMP THREADPRIVATE(mmd_aer_prec,mmd_ccn_prec,mmd_aer_s_w,mmd_aer_f_w,mmd_ccn_w,mmd_aer_s_flux,mmd_aer_f_flux,mmd_ccn_flux,mmd_ice_fluxes)
     
    5154    ALLOCATE(mmd_rc_fra(ngrid,nlayer))
    5255    ALLOCATE(mmd_rc_cld(ngrid,nlayer))
     56    ! Nucleation and growth rates
     57    ALLOCATE(mmd_nrate(ngrid,nlayer,nices))
     58    ALLOCATE(mmd_grate(ngrid,nlayer,nices))
    5359
    5460    mmd_aer_prec(:)       = 0d0
     
    6672    mmd_rc_fra(:,:)       = 0d0
    6773    mmd_rc_cld(:,:)       = 0d0
     74    ! Nucleation and growth rates
     75    mmd_nrate(:,:,:)      = 0d0
     76    mmd_grate(:,:,:)      = 0d0
    6877     
    6978  END SUBROUTINE ini_diag_arrays
     
    8594    IF (ALLOCATED(mmd_rc_fra))     DEALLOCATE(mmd_rc_fra)
    8695    IF (ALLOCATED(mmd_rc_cld))     DEALLOCATE(mmd_rc_cld)
     96    ! Nucleation and growth rates
     97    IF (ALLOCATED(mmd_nrate))     DEALLOCATE(mmd_nrate)
     98    IF (ALLOCATED(mmd_grate))     DEALLOCATE(mmd_grate)
    8799  END SUBROUTINE free_diag_arrays
    88100END MODULE muphy_diag
  • trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90

    r3661 r3682  
    18141814      CALL send_xios_field('ttauhv_15',zpopthv(:,:,15,2)) ! 15 --> 1.000 um
    18151815      CALL send_xios_field('ttauhv_20',zpopthv(:,:,20,2)) ! 20 --> 0.671 um
    1816       CALL send_xios_field('ttauhv_23',zpopthv(:,:,23,2)) ! 23 --> 0.346 um
     1816      CALL send_xios_field('ttauhv_21',zpopthv(:,:,21,2)) ! 21 --> 0.55 um
    18171817      CALL send_xios_field('ttauhi_02',zpopthi(:,:,2,2))  ! 02 --> 175.3 um
    18181818      CALL send_xios_field('ttauhi_17',zpopthi(:,:,17,2)) ! 17 --> 11.00 um
     
    18221822      CALL send_xios_field('kkhv_15',zpopthv(:,:,15,3))
    18231823      CALL send_xios_field('kkhv_20',zpopthv(:,:,20,3))
    1824       CALL send_xios_field('kkhv_23',zpopthv(:,:,23,3))
     1824      CALL send_xios_field('kkhv_21',zpopthv(:,:,21,3))
    18251825      CALL send_xios_field('kkhi_02',zpopthi(:,:,2,3))
    18261826      CALL send_xios_field('kkhi_17',zpopthi(:,:,17,3))
     
    18301830      CALL send_xios_field('wwhv_15',zpopthv(:,:,15,4))
    18311831      CALL send_xios_field('wwhv_20',zpopthv(:,:,20,4))
    1832       CALL send_xios_field('wwhv_23',zpopthv(:,:,23,4))
     1832      CALL send_xios_field('wwhv_21',zpopthv(:,:,21,4))
    18331833      CALL send_xios_field('wwhi_02',zpopthi(:,:,2,4))
    18341834      CALL send_xios_field('wwhi_17',zpopthi(:,:,17,4))
     
    18381838      CALL send_xios_field('gghv_15',zpopthv(:,:,15,5))
    18391839      CALL send_xios_field('gghv_20',zpopthv(:,:,20,5))
    1840       CALL send_xios_field('gghv_23',zpopthv(:,:,23,5))
     1840      CALL send_xios_field('gghv_21',zpopthv(:,:,21,5))
    18411841      CALL send_xios_field('gghi_02',zpopthi(:,:,2,5))
    18421842      CALL send_xios_field('gghi_17',zpopthi(:,:,17,5))
     
    18491849         CALL send_xios_field('ttauv_15',zpopttv(:,:,15,2)) ! 15 --> 1.000 um
    18501850         CALL send_xios_field('ttauv_20',zpopttv(:,:,20,2)) ! 20 --> 0.671 um
    1851          CALL send_xios_field('ttauv_23',zpopttv(:,:,23,2)) ! 23 --> 0.346 um
     1851         CALL send_xios_field('ttauv_21',zpopttv(:,:,21,2)) ! 21 --> 0.55 um
    18521852         CALL send_xios_field('ttaui_02',zpoptti(:,:,2,2))  ! 02 --> 175.3 um
    18531853         CALL send_xios_field('ttaui_17',zpoptti(:,:,17,2)) ! 17 --> 11.00 um
     
    18571857         CALL send_xios_field('kkv_15',zpopttv(:,:,15,3))
    18581858         CALL send_xios_field('kkv_20',zpopttv(:,:,20,3))
    1859          CALL send_xios_field('kkv_23',zpopttv(:,:,23,3))
     1859         CALL send_xios_field('kkv_21',zpopttv(:,:,21,3))
    18601860         CALL send_xios_field('kki_02',zpoptti(:,:,2,3))
    18611861         CALL send_xios_field('kki_17',zpoptti(:,:,17,3))
     
    18651865         CALL send_xios_field('wwv_15',zpopttv(:,:,15,4))
    18661866         CALL send_xios_field('wwv_20',zpopttv(:,:,20,4))
    1867          CALL send_xios_field('wwv_23',zpopttv(:,:,23,4))
     1867         CALL send_xios_field('wwv_21',zpopttv(:,:,21,4))
    18681868         CALL send_xios_field('wwi_02',zpoptti(:,:,2,4))
    18691869         CALL send_xios_field('wwi_17',zpoptti(:,:,17,4))
     
    18731873         CALL send_xios_field('ggv_15',zpopttv(:,:,15,5))
    18741874         CALL send_xios_field('ggv_20',zpopttv(:,:,20,5))
    1875          CALL send_xios_field('ggv_23',zpopttv(:,:,23,5))
     1875         CALL send_xios_field('ggv_21',zpopttv(:,:,21,5))
    18761876         CALL send_xios_field('ggi_02',zpoptti(:,:,2,5))
    18771877         CALL send_xios_field('ggi_17',zpoptti(:,:,17,5))
     
    19421942               CALL send_xios_field('flux_i'//TRIM(nameOfTracer(gazs_indx(iq))),mmd_ice_fluxes(:,:,iq))
    19431943               CALL send_xios_field(TRIM(nameOfTracer(gazs_indx(iq)))//'_sat',mmd_gazs_sat(:,:,iq))
     1944               CALL send_xios_field(TRIM(nameOfTracer(gazs_indx(iq)))//'_nrate',mmd_nrate(:,:,iq))
     1945               CALL send_xios_field(TRIM(nameOfTracer(gazs_indx(iq)))//'_grate',mmd_grate(:,:,iq))
    19441946            ENDDO
    19451947         ENDIF
Note: See TracChangeset for help on using the changeset viewer.