SCALE-RM
Functions/Subroutines | Variables
scale_atmos_phy_mp_sn14 Module Reference

module ATMOSPHERE / Physics Cloud Microphysics More...

Functions/Subroutines

subroutine, public atmos_phy_mp_sn14_setup (KA, IA, JA)
 ATMOS_PHY_MP_sn14_setup setup. More...
 
subroutine, public atmos_phy_mp_sn14_tendency (KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, W, QTRC, PRES, TEMP, Qdry, CPtot, CVtot, CCN, dt, cz, fz, RHOQ_t, RHOE_t, CPtot_t, CVtot_t, EVAPORATE)
 ATMOS_PHY_MP_sn14_tendency calculate tendency. More...
 
subroutine, public atmos_phy_mp_sn14_cloud_fraction (KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC, mask_criterion, cldfrac)
 ATMOS_PHY_MP_sn14_cloud_fraction Calculate Cloud Fraction. More...
 
subroutine, public atmos_phy_mp_sn14_effective_radius (KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS0, TEMP0, QTRC0, Re)
 ATMOS_PHY_MP_sn14_effective_radius Calculate Effective Radius. More...
 
subroutine, public atmos_phy_mp_sn14_qtrc2qhyd (KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Qe)
 ATMOS_PHY_MP_sn14_qtrc2qhyd Calculate mass ratio of each category. More...
 
subroutine, public atmos_phy_mp_sn14_qtrc2nhyd (KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Ne)
 Calculate number concentration of each category. More...
 
subroutine, public atmos_phy_mp_sn14_qhyd2qtrc (KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC, QNUM)
 
subroutine debug_tem_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, point, tem, rho, pre, qv)
 
subroutine nucleation_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, cz, fz, w, rho, tem, pre, qdry, rhoq, cpa, dTdt_rad, qke, CCN, dt, PQ)
 
subroutine ice_multiplication_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, Pac, tem, rhoq, xq, PQ)
 
subroutine mixed_phase_collection_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, wtem, rhoq, xq, dq_xave, vt_xave, PQ, Pac)
 
subroutine aut_acc_slc_brk_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, rhoq, xq, dq_xave, rho, PQ)
 
subroutine freezing_water_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, dt, rhoq, xq, tem, PQ)
 
subroutine, public atmos_phy_mp_sn14_terminal_velocity (KA, KS, KE, DENS, TEMP, RHOQ, PRES, vterm)
 ATMOS_PHY_MP_sn14_terminal_velocity Calculate terminal velocity. More...
 
subroutine update_by_phase_change_kij (KA, KS, KE, IA, IS, IE, JA, JS, JE, ntdiv, ntmax, dt, cz, fz, w, dTdt_rad, rho, qdry, esw, esi, rhoq2, pre, tem, cpa, cva, PQ, sl_PLCdep, sl_PLRdep, sl_PNRdep, RHOQ_t, RHOE_t, CPtot_t, CVtot_t, qc_evaporate)
 

Variables

integer, parameter, public qa_mp = 11
 
integer, parameter, public atmos_phy_mp_sn14_ntracers = QA_MP
 
integer, parameter, public atmos_phy_mp_sn14_nwaters = 2
 
integer, parameter, public atmos_phy_mp_sn14_nices = 3
 
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_names = (/ 'QV', 'QC', 'QR', 'QI', 'QS', 'QG', 'NC', 'NR', 'NI', 'NS', 'NG' /)
 
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_descriptions = (/ 'Ratio of Water Vapor mass to total mass (Specific humidity)', 'Ratio of Cloud Water mass to total mass ', 'Ratio of Rain Water mass to total mass ', 'Ratio of Cloud Ice mass ratio to total mass ', 'Ratio of Snow miass ratio to total mass ', 'Ratio of Graupel mass ratio to total mass ', 'Cloud Water Number Density ', 'Rain Water Number Density ', 'Cloud Ice Number Density ', 'Snow Number Density ', 'Graupel Number Density '/)
 
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_units = (/ 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'num/kg', 'num/kg', 'num/kg', 'num/kg', 'num/kg' /)
 

Detailed Description

module ATMOSPHERE / Physics Cloud Microphysics

Description
Cloud Microphysics by 6 water category, double moment bulk scheme Seiki and Nakajima(2014) J. Atmos. Sci., 71, 833–853

Reference: – Journals Seifert and Beheng(2006) : Meteorol.Atmos.Phys.,vol.92,pp.45-66 Seifert and Beheng(2001) : Atmos.Res.,vol.59-60,pp.265-281 Seifert(2008) : J.Atmos.Sci.,vol.65,pp.3608-3619 Lin et al.(1983) : J.Appl.Meteor.,vol.22,pp.1065-1092 Ruttledge and Hobbs(1983) : J.Atmos.Sci.,vol.40,pp.1185-1206 Ruttledge and Hobbs(1984) : J.Atmos.Sci.,vol.40,pp.2949-2977 Cotton etal.(1986) : J.C.Appl.Meteor.,25,pp.1658-1680 Cotton and Field (2002) : QJRMS.,vol.128,pp2417-pp2437 Beard(1980) : J.Atmos.Sci.,vol.37,pp.1363-1374 [Add] 10/08/03 Berry and Reinhardt(1974a): J.Atmos.Sci.,vol.31,pp.1814-1824 Berry and Reinhardt(1974b): J.Atmos.Sci.,vol.31,pp.1825-1831 Fu(1996) : J.Climate, vol.9, pp.2058-2082 [Add] 10/08/03 Fu etal(1998) : J.Climate, vol.11, pp.2223-2237 [Add] 10/08/03 Ghan etal.(1997) : J.Geophys.Res.,vol.102,pp.21777-21794, [Add] 09/08/18 Hong et al.(2004) : Mon.Wea.Rev.,pp.103-120 Heymsfeild and Iaquinta(2000): J.Atmos.Sci., vol.57, pp.916-938 [Add] 10/08/03 Heymsfield and Kajikawa(1987): J.Atmos.Sci., vol.44, pp.1088-1099 Johnson(1981) : J.Atmos.Sci., vol.38, pp.215-218 [Add] 09/08/18 McFarquhar and Heymsfield(1996): J.Atmos.Sci.,vol.53,pp.2401-2423 Mitchell(1996) : J.Atmos.Sci., vol.53, pp.1710-1723. [Add] 10/08/03 Morrison etal.(2005) : Mon.Wea.Rev.,vol.62,pp.1665-1677, [Add] 09/08/18 Locatelli and Hobbs (1974): J.Geophys.Res., vol.70, pp.2185-2197 Lohmann(2002) : J.Atmos.Sci.,vol.59,pp.647-656 Takano and Liou(1989) : J.Atmos.Sci.,vol.46,pp.3-19 Takano and Liou(1994) : J.Atmos.Sci.,vol.52,pp.818-837 Auer and Veal(1970) : J.Atmos.Sci.,vol.27,pp.919-926 Ikawa et al.(1991) : J.M.S.J.,vol.69,pp.641-667 Murakami(1990) : J.M.S.J.,vol.68,pp.107-128 – Books Pruppacher and Klett(1997): Kluwer Academic Publishers Microphysics of Clouds and Precipitation, 2nd.edit. Seinfeld and Pandis(1998) : Wiley Interscience Atmospheric Chemistry and Physics. Jacobson(2005) : Cambridge press Fundamentals of Atmospheric Modeling, 2nd.edit.

Author
Team SCALE
NAMELIST
  • PARAM_ATMOS_PHY_MP_SN14
    nametypedefault valuecomment
    MP_DOAUTOCONVERSION logical .true.
    MP_SSW_LIM real(RP) 1.E+1_RP
    MP_COUPLE_AEROSOL logical .false. apply CCN effect?

  • PARAM_ATMOS_PHY_MP_SN14_init
    nametypedefault valuecomment
    OPT_DEBUG logical .false.
    OPT_DEBUG_TEM logical .false.
    OPT_DEBUG_INC logical .true.
    OPT_DEBUG_ACT logical .true.
    OPT_DEBUG_REE logical .true.
    OPT_DEBUG_BCS logical .true.
    NTMAX_PHASE_CHANGE integer 1
    NTMAX_COLLECTION integer 1

  • PARAM_ATMOS_PHY_MP_SN14_particles
    nametypedefault valuecomment
    A_M real(RP), dimension(HYDRO_MAX)
    B_M real(RP), dimension(HYDRO_MAX)
    ALPHA_V real(RP), dimension(HYDRO_MAX,2)
    BETA_V real(RP), dimension(HYDRO_MAX,2)
    GAMMA_V real(RP), dimension(HYDRO_MAX)
    ALPHA_VN real(RP), dimension(HYDRO_MAX,2)
    BETA_VN real(RP), dimension(HYDRO_MAX,2)
    A_AREA real(RP), dimension(HYDRO_MAX)
    B_AREA real(RP), dimension(HYDRO_MAX)
    CAP real(RP), dimension(HYDRO_MAX)
    NU real(RP), dimension(HYDRO_MAX)
    MU real(RP), dimension(HYDRO_MAX)
    OPT_M96_COLUMN_ICE logical .false.
    OPT_M96_ICE logical .true.
    AR_ICE_FIX real(RP) 0.7_RP

  • PARAM_ATMOS_PHY_MP_SN14_nucleation
    nametypedefault valuecomment
    IN_MAX real(RP) 1000.E+3_RP max num. of Ice-Nuclei [num/m3]
    C_CCN real(RP) 1.00E+8_RP
    KAPPA real(RP) 0.462_RP
    NM_M92 real(RP) 1.E+3_RP
    AM_M92 real(RP) -0.639_RP
    BM_M92 real(RP) 12.96_RP
    XC_CCN real(RP) 1.E-12_RP [kg]
    XI_CCN real(RP) 1.E-12_RP [kg] ! [move] 11/08/30 T.Mitsui
    TEM_CCN_LOW real(RP) 233.150_RP = -40 degC ! [Add] 10/08/03 T.Mitsui
    TEM_IN_LOW real(RP) 173.150_RP = -100 degC ! [Add] 10/08/03 T.Mitsui
    SSW_MAX real(RP) 1.1_RP [%]
    SSI_MAX real(RP) 0.60_RP
    NUCL_TWOMEY logical .false.
    INUCL_W logical .false.

  • PARAM_ATMOS_PHY_MP_SN14_collection
    nametypedefault valuecomment
    DC0 real(RP) 15.0E-6_RP lower threshold of cloud
    DC1 real(RP) 40.0E-6_RP upper threshold of cloud
    DI0 real(RP) 150.0E-6_RP lower threshold of cloud
    DS0 real(RP) 150.0E-6_RP lower threshold of cloud
    DG0 real(RP) 150.0E-6_RP lower threshold of cloud
    SIGMA_C real(RP) 0.00_RP cloud
    SIGMA_R real(RP) 0.00_RP rain
    SIGMA_I real(RP) 0.2_RP ice
    SIGMA_S real(RP) 0.2_RP snow
    SIGMA_G real(RP) 0.00_RP graupel
    OPT_STICK_KS96 logical .false.
    OPT_STICK_CO86 logical .false.
    E_IM real(RP) 0.80_RP ice max
    E_SM real(RP) 0.80_RP snow max
    E_GM real(RP) 1.00_RP graupel max
    E_IR real(RP) 1.0_RP ice x rain
    E_SR real(RP) 1.0_RP snow x rain
    E_GR real(RP) 1.0_RP graupel x rain
    E_II real(RP) 1.0_RP ice x ice
    E_SI real(RP) 1.0_RP snow x ice
    E_GI real(RP) 1.0_RP graupel x ice
    E_SS real(RP) 1.0_RP snow x snow
    E_GS real(RP) 1.0_RP graupel x snow
    E_GG real(RP) 1.0_RP graupel x graupel
    I_ICONV2G integer 1 ice => graupel
    I_SCONV2G integer 1 snow => graupel
    RHO_G real(RP) 900.0_RP [kg/m3]
    CFILL_I real(RP) 0.68_RP ice
    CFILL_S real(RP) 0.01_RP snow
    DI_CRI real(RP) 500.E-6_RP [m]

  • PARAM_ATMOS_PHY_MP_SN14_condensation
    nametypedefault valuecomment
    OPT_FIX_TAUCND_C logical .false.
    FAC_CNDC real(RP) 1.0_RP

History Output
No history output

Function/Subroutine Documentation

◆ atmos_phy_mp_sn14_setup()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_setup ( integer, intent(in)  KA,
integer, intent(in)  IA,
integer, intent(in)  JA 
)

ATMOS_PHY_MP_sn14_setup setup.

Definition at line 523 of file scale_atmos_phy_mp_sn14.F90.

References scale_io::io_fid_conf, and scale_prc::prc_abort().

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_setup().

523  use scale_prc, only: &
524  prc_abort
525  implicit none
526 
527  integer, intent(in) :: ka
528  integer, intent(in) :: ia
529  integer, intent(in) :: ja
530 
531  namelist / param_atmos_phy_mp_sn14 / &
532  mp_doautoconversion, &
533  mp_ssw_lim, &
534  mp_couple_aerosol
535 
536  integer :: ierr
537  !---------------------------------------------------------------------------
538 
539  log_newline
540  log_info("ATMOS_PHY_MP_sn14_setup",*) 'Setup'
541  log_info("ATMOS_PHY_MP_sn14_setup",*) 'Seiki and Nakajima (2014) 2-moment bulk 6 category'
542 
543  !--- read namelist
544  rewind(io_fid_conf)
545  read(io_fid_conf,nml=param_atmos_phy_mp_sn14,iostat=ierr)
546  if( ierr < 0 ) then !--- missing
547  log_info("ATMOS_PHY_MP_sn14_setup",*) 'Not found namelist. Default used.'
548  elseif( ierr > 0 ) then !--- fatal error
549  log_error("ATMOS_PHY_MP_sn14_setup",*) 'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14. Check!'
550  call prc_abort
551  endif
552  log_nml(param_atmos_phy_mp_sn14)
553 
554  wlabel(1) = "CLOUD"
555  wlabel(2) = "RAIN"
556  wlabel(3) = "ICE"
557  wlabel(4) = "SNOW"
558  wlabel(5) = "GRAUPEL"
559 
560  call mp_sn14_init
561 
562  allocate(nc_uplim_d(1,ia,ja))
563  nc_uplim_d(:,:,:) = 150.e6_rp
564 
565  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
module PROCESS
Definition: scale_prc.F90:11
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:338
integer, public ka
of whole cells: z, local, with HALO
Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_tendency()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_tendency ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension (ka,ia,ja), intent(in)  DENS,
real(rp), dimension (ka,ia,ja), intent(in)  W,
real(rp), dimension (ka,ia,ja,qa_mp), intent(in)  QTRC,
real(rp), dimension(ka,ia,ja), intent(in)  PRES,
real(rp), dimension(ka,ia,ja), intent(in)  TEMP,
real(rp), dimension(ka,ia,ja), intent(in)  Qdry,
real(rp), dimension(ka,ia,ja), intent(in)  CPtot,
real(rp), dimension(ka,ia,ja), intent(in)  CVtot,
real(rp), dimension (ka,ia,ja), intent(in)  CCN,
real(dp), intent(in)  dt,
real(rp), dimension( ka,ia,ja), intent(in)  cz,
real(rp), dimension(0:ka,ia,ja), intent(in)  fz,
real(rp), dimension (ka,ia,ja,qa_mp), intent(out)  RHOQ_t,
real(rp), dimension (ka,ia,ja), intent(out)  RHOE_t,
real(rp), dimension(ka,ia,ja), intent(out)  CPtot_t,
real(rp), dimension(ka,ia,ja), intent(out)  CVtot_t,
real(rp), dimension(ka,ia,ja), intent(out)  EVAPORATE 
)

ATMOS_PHY_MP_sn14_tendency calculate tendency.

Definition at line 591 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_calc_tendency().

591  implicit none
592 
593  integer, intent(in) :: ka, ks, ke
594  integer, intent(in) :: ia, is, ie
595  integer, intent(in) :: ja, js, je
596 
597  real(RP), intent(in) :: dens (ka,ia,ja)
598  real(RP), intent(in) :: w (ka,ia,ja)
599  real(RP), intent(in) :: qtrc (ka,ia,ja,qa_mp)
600  real(RP), intent(in) :: pres(ka,ia,ja)
601  real(RP), intent(in) :: temp(ka,ia,ja)
602  real(RP), intent(in) :: qdry(ka,ia,ja)
603  real(RP), intent(in) :: cptot(ka,ia,ja)
604  real(RP), intent(in) :: cvtot(ka,ia,ja)
605  real(RP), intent(in) :: ccn (ka,ia,ja)
606  real(DP), intent(in) :: dt
607  real(RP), intent(in) :: cz( ka,ia,ja)
608  real(RP), intent(in) :: fz(0:ka,ia,ja)
609 
610  real(RP), intent(out) :: rhoq_t (ka,ia,ja,qa_mp)
611  real(RP), intent(out) :: rhoe_t (ka,ia,ja)
612  real(RP), intent(out) :: cptot_t(ka,ia,ja)
613  real(RP), intent(out) :: cvtot_t(ka,ia,ja)
614  real(RP), intent(out) :: evaporate(ka,ia,ja) !--- number of evaporated cloud [/m3]
615 
616  !---------------------------------------------------------------------------
617 
618  log_progress(*) 'atmosphere / physics / microphysics / SN14'
619 
620 #ifdef PROFILE_FIPP
621  call fipp_start()
622 #endif
623 
624  !##### MP Main #####
625  call mp_sn14 ( &
626  ka, ks, ke, ia, is, ie, ja, js, je, &
627  dens(:,:,:), w(:,:,:), qtrc(:,:,:,:), pres(:,:,:), temp(:,:,:), & ! (in)
628  qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), & ! (in)
629  real(dt,RP), cz(:,:,:), fz(:,:,:), & ! (in)
630  rhoq_t(:,:,:,:), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), & ! (out)
631  evaporate(:,:,:) ) ! (out)
632 
633 #ifdef PROFILE_FIPP
634  call fipp_stop()
635 #endif
636 
637  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_cloud_fraction()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_cloud_fraction ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension (ka,ia,ja,qa_mp-1), intent(in)  QTRC,
real(rp), intent(in)  mask_criterion,
real(rp), dimension(ka,ia,ja), intent(out)  cldfrac 
)

ATMOS_PHY_MP_sn14_cloud_fraction Calculate Cloud Fraction.

Definition at line 649 of file scale_atmos_phy_mp_sn14.F90.

References qa_mp.

Referenced by mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

649  implicit none
650  integer, intent(in) :: ka, ks, ke
651  integer, intent(in) :: ia, is, ie
652  integer, intent(in) :: ja, js, je
653 
654  real(RP), intent(in) :: qtrc (ka,ia,ja,qa_mp-1)
655  real(RP), intent(in) :: mask_criterion
656 
657  real(RP), intent(out) :: cldfrac(ka,ia,ja)
658 
659  real(RP) :: qhydro
660  integer :: k, i, j, iq
661  !---------------------------------------------------------------------------
662 
663  do j = js, je
664  do i = is, ie
665  do k = ks, ke
666  qhydro = 0.0_rp
667  do iq = 1, qa_mp-1
668  qhydro = qhydro + qtrc(k,i,j,iq)
669  enddo
670  cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-mask_criterion)
671  enddo
672  enddo
673  enddo
674 
675  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_effective_radius()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_effective_radius ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(ka,ia,ja), intent(in)  DENS0,
real(rp), dimension(ka,ia,ja), intent(in)  TEMP0,
real(rp), dimension(ka,ia,ja,i_qc:i_ng), intent(in)  QTRC0,
real(rp), dimension (ka,ia,ja,n_hyd), intent(out)  Re 
)

ATMOS_PHY_MP_sn14_effective_radius Calculate Effective Radius.

Definition at line 685 of file scale_atmos_phy_mp_sn14.F90.

References scale_atmos_hydrometeor::i_hc, scale_atmos_hydrometeor::i_hg, scale_atmos_hydrometeor::i_hi, scale_atmos_hydrometeor::i_hr, scale_atmos_hydrometeor::i_hs, and scale_atmos_hydrometeor::n_hyd.

Referenced by mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

685  use scale_atmos_hydrometeor, only: &
686  n_hyd, &
687  i_hc, &
688  i_hr, &
689  i_hi, &
690  i_hs, &
691  i_hg
692  implicit none
693  integer, intent(in) :: ka, ks, ke
694  integer, intent(in) :: ia, is, ie
695  integer, intent(in) :: ja, js, je
696 
697  real(RP), intent(in) :: dens0(ka,ia,ja) ! density [kg/m3]
698  real(RP), intent(in) :: temp0(ka,ia,ja) ! temperature [K]
699  real(RP), intent(in) :: qtrc0(ka,ia,ja,i_qc:i_ng) ! tracer mass concentration [kg/kg]
700 
701  real(RP), intent(out) :: re (ka,ia,ja,n_hyd) ! effective radius [cm]
702 
703  ! mass concentration[kg/m3] and mean particle mass[kg]
704  real(RP) :: xc(ka,ia,ja)
705  real(RP) :: xr(ka,ia,ja)
706  real(RP) :: xi(ka,ia,ja)
707  real(RP) :: xs(ka,ia,ja)
708  real(RP) :: xg(ka,ia,ja)
709  ! diameter of average mass[kg/m3]
710  real(RP) :: dc_ave(ka,ia,ja)
711  real(RP) :: dr_ave(ka,ia,ja)
712  ! radius of average mass
713  real(RP) :: rc, rr
714  ! 2nd. and 3rd. order moment of DSD
715  real(RP) :: ri2m(ka,ia,ja), ri3m(ka,ia,ja)
716  real(RP) :: rs2m(ka,ia,ja), rs3m(ka,ia,ja)
717  real(RP) :: rg2m(ka,ia,ja), rg3m(ka,ia,ja)
718 
719  real(RP) :: coef_fuetal1998
720  ! r2m_min is minimum value(moment of 1 particle with 1 micron)
721  real(RP), parameter :: r2m_min=1.e-12_rp
722  real(RP), parameter :: um2cm = 100.0_rp
723 
724  real(RP) :: limitsw, zerosw
725  integer :: k, i, j
726  !---------------------------------------------------------------------------
727 
728  ! mean particle mass[kg]
729  do j = js, je
730  do i = is, ie
731  do k = ks, ke
732  xc(k,i,j) = min( xc_max, max( xc_min, dens0(k,i,j)*qtrc0(k,i,j,i_qc)/(qtrc0(k,i,j,i_nc)+nc_min) ) )
733  xr(k,i,j) = min( xr_max, max( xr_min, dens0(k,i,j)*qtrc0(k,i,j,i_qr)/(qtrc0(k,i,j,i_nr)+nr_min) ) )
734  xi(k,i,j) = min( xi_max, max( xi_min, dens0(k,i,j)*qtrc0(k,i,j,i_qi)/(qtrc0(k,i,j,i_ni)+ni_min) ) )
735  xs(k,i,j) = min( xs_max, max( xs_min, dens0(k,i,j)*qtrc0(k,i,j,i_qs)/(qtrc0(k,i,j,i_ns)+ns_min) ) )
736  xg(k,i,j) = min( xg_max, max( xg_min, dens0(k,i,j)*qtrc0(k,i,j,i_qg)/(qtrc0(k,i,j,i_ng)+ng_min) ) )
737  enddo
738  enddo
739  enddo
740 
741  ! diameter of average mass : SB06 eq.(32)
742  do j = js, je
743  do i = is, ie
744  do k = ks, ke
745  dc_ave(k,i,j) = a_m(i_mp_qc) * xc(k,i,j)**b_m(i_mp_qc)
746  dr_ave(k,i,j) = a_m(i_mp_qr) * xr(k,i,j)**b_m(i_mp_qr)
747  enddo
748  enddo
749  enddo
750 
751  ! cloud effective radius
752  do j = js, je
753  do i = is, ie
754  do k = ks, ke
755  rc = 0.5_rp * dc_ave(k,i,j)
756  limitsw = 0.5_rp + sign(0.5_rp, rc-rmin_re )
757  re(k,i,j,i_hc) = coef_re(i_mp_qc) * rc * limitsw * um2cm
758  enddo
759  enddo
760  enddo
761 
762  ! rain effective radius
763  do j = js, je
764  do i = is, ie
765  do k = ks, ke
766  rr = 0.5_rp * dr_ave(k,i,j)
767  limitsw = 0.5_rp + sign(0.5_rp, rr-rmin_re )
768  re(k,i,j,i_hr) = coef_re(i_mp_qr) * rr * limitsw * um2cm
769  enddo
770  enddo
771  enddo
772 
773  do j = js, je
774  do i = is, ie
775  do k = ks, ke
776  ri2m(k,i,j) = pi * coef_rea2(i_mp_qi) * qtrc0(k,i,j,i_ni) * a_rea2(i_mp_qi) * xi(k,i,j)**b_rea2(i_mp_qi)
777  rs2m(k,i,j) = pi * coef_rea2(i_mp_qs) * qtrc0(k,i,j,i_ns) * a_rea2(i_mp_qs) * xs(k,i,j)**b_rea2(i_mp_qs)
778  rg2m(k,i,j) = pi * coef_rea2(i_mp_qg) * qtrc0(k,i,j,i_ng) * a_rea2(i_mp_qg) * xg(k,i,j)**b_rea2(i_mp_qg)
779  enddo
780  enddo
781  enddo
782 
783  ! Fu(1996), eq.(3.11) or Fu et al.(1998), eq.(2.5)
784  coef_fuetal1998 = 3.0_rp / (4.0_rp*rhoi)
785  do j = js, je
786  do i = is, ie
787  do k = ks, ke
788  ri3m(k,i,j) = coef_fuetal1998 * qtrc0(k,i,j,i_ni) * xi(k,i,j)
789  rs3m(k,i,j) = coef_fuetal1998 * qtrc0(k,i,j,i_ns) * xs(k,i,j)
790  rg3m(k,i,j) = coef_fuetal1998 * qtrc0(k,i,j,i_ng) * xg(k,i,j)
791  enddo
792  enddo
793  enddo
794 
795  ! ice effective radius
796  do j = js, je
797  do i = is, ie
798  do k = ks, ke
799  zerosw = 0.5_rp - sign(0.5_rp, ri2m(k,i,j) - r2m_min )
800  re(k,i,j,i_hi) = ri3m(k,i,j) / ( ri2m(k,i,j) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
801  enddo
802  enddo
803  enddo
804 
805  ! snow effective radius
806  do j = js, je
807  do i = is, ie
808  do k = ks, ke
809  zerosw = 0.5_rp - sign(0.5_rp, rs2m(k,i,j) - r2m_min )
810  re(k,i,j,i_hs) = rs3m(k,i,j) / ( rs2m(k,i,j) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
811  enddo
812  enddo
813  enddo
814 
815  ! graupel effective radius
816  do j = js, je
817  do i = is, ie
818  do k = ks, ke
819  zerosw = 0.5_rp - sign(0.5_rp, rg2m(k,i,j) - r2m_min )
820  re(k,i,j,i_hg) = rg3m(k,i,j) / ( rg2m(k,i,j) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
821  enddo
822  enddo
823  enddo
824 
825  re(:,:,:,i_hg+1:) = 0.0_rp
826 
827  return
integer, public ia
of whole cells: x, local, with HALO
integer, parameter, public i_hs
snow
integer, parameter, public i_hr
liquid water rain
integer, parameter, public i_hi
ice water cloud
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
module atmosphere / hydrometeor
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, parameter, public i_hc
liquid water cloud
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
integer, parameter, public n_hyd
integer, parameter, public i_hg
graupel
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_qtrc2qhyd()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_qtrc2qhyd ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(ka,ia,ja,qa_mp-1), intent(in)  QTRC0,
real(rp), dimension (ka,ia,ja,n_hyd), intent(out)  Qe 
)

ATMOS_PHY_MP_sn14_qtrc2qhyd Calculate mass ratio of each category.

Definition at line 837 of file scale_atmos_phy_mp_sn14.F90.

References scale_atmos_hydrometeor::i_hc, scale_atmos_hydrometeor::i_hg, scale_atmos_hydrometeor::i_hi, scale_atmos_hydrometeor::i_hr, scale_atmos_hydrometeor::i_hs, and scale_atmos_hydrometeor::n_hyd.

Referenced by mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

837  use scale_atmos_hydrometeor, only: &
838  n_hyd, &
839  i_hc, &
840  i_hr, &
841  i_hi, &
842  i_hs, &
843  i_hg
844  implicit none
845  integer, intent(in) :: ka, ks, ke
846  integer, intent(in) :: ia, is, ie
847  integer, intent(in) :: ja, js, je
848 
849  real(RP), intent(in) :: qtrc0(ka,ia,ja,qa_mp-1) ! tracer mass concentration [kg/kg]
850 
851  real(RP), intent(out) :: qe (ka,ia,ja,n_hyd) ! mixing ratio of each cateory [kg/kg]
852  !---------------------------------------------------------------------------
853 
854 !OCL XFILL
855  qe(:,:,:,i_hc) = qtrc0(:,:,:,i_mp_qc)
856 !OCL XFILL
857  qe(:,:,:,i_hr) = qtrc0(:,:,:,i_mp_qr)
858 !OCL XFILL
859  qe(:,:,:,i_hi) = qtrc0(:,:,:,i_mp_qi)
860 !OCL XFILL
861  qe(:,:,:,i_hs) = qtrc0(:,:,:,i_mp_qs)
862 !OCL XFILL
863  qe(:,:,:,i_hg) = qtrc0(:,:,:,i_mp_qg)
864 !OCL XFILL
865  qe(:,:,:,i_hg+1:) = 0.0_rp
866 
867  return
integer, public ia
of whole cells: x, local, with HALO
integer, parameter, public i_hs
snow
integer, parameter, public i_hr
liquid water rain
integer, parameter, public i_hi
ice water cloud
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
module atmosphere / hydrometeor
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, parameter, public i_hc
liquid water cloud
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
integer, parameter, public n_hyd
integer, parameter, public i_hg
graupel
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_qtrc2nhyd()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_qtrc2nhyd ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(ka,ia,ja,qa_mp-1), intent(in)  QTRC0,
real(rp), dimension (ka,ia,ja,n_hyd), intent(out)  Ne 
)

Calculate number concentration of each category.

Definition at line 875 of file scale_atmos_phy_mp_sn14.F90.

References scale_atmos_hydrometeor::i_hc, scale_atmos_hydrometeor::i_hg, scale_atmos_hydrometeor::i_hi, scale_atmos_hydrometeor::i_hr, scale_atmos_hydrometeor::i_hs, and scale_atmos_hydrometeor::n_hyd.

Referenced by mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

875  use scale_atmos_hydrometeor, only: &
876  n_hyd, &
877  i_hc, &
878  i_hr, &
879  i_hi, &
880  i_hs, &
881  i_hg
882  implicit none
883  integer, intent(in) :: ka, ks, ke
884  integer, intent(in) :: ia, is, ie
885  integer, intent(in) :: ja, js, je
886 
887  real(RP), intent(in) :: qtrc0(ka,ia,ja,qa_mp-1) ! tracer mass concentration [kg/kg]
888 
889  real(RP), intent(out) :: ne (ka,ia,ja,n_hyd) ! number density of each cateory [1/m3]
890  !---------------------------------------------------------------------------
891 
892 !OCL XFILL
893  ne(:,:,:,i_hc) = qtrc0(:,:,:,i_mp_nc)
894 !OCL XFILL
895  ne(:,:,:,i_hr) = qtrc0(:,:,:,i_mp_nr)
896 !OCL XFILL
897  ne(:,:,:,i_hi) = qtrc0(:,:,:,i_mp_ni)
898 !OCL XFILL
899  ne(:,:,:,i_hs) = qtrc0(:,:,:,i_mp_ns)
900 !OCL XFILL
901  ne(:,:,:,i_hg) = qtrc0(:,:,:,i_mp_ng)
902 !OCL XFILL
903  ne(:,:,:,i_hg+1:) = 0.0_rp
904 
905  return
integer, public ia
of whole cells: x, local, with HALO
integer, parameter, public i_hs
snow
integer, parameter, public i_hr
liquid water rain
integer, parameter, public i_hi
ice water cloud
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
module atmosphere / hydrometeor
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, parameter, public i_hc
liquid water cloud
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
integer, parameter, public n_hyd
integer, parameter, public i_hg
graupel
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_qhyd2qtrc()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_qhyd2qtrc ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(ka,ia,ja,n_hyd), intent(in)  Qe,
real(rp), dimension(ka,ia,ja,qa_mp-1), intent(out)  QTRC,
real(rp), dimension(ka,ia,ja,n_hyd), intent(in), optional  QNUM 
)

Definition at line 913 of file scale_atmos_phy_mp_sn14.F90.

References aut_acc_slc_brk_kij(), scale_const::const_pi, scale_atmos_hydrometeor::cp_ice, scale_atmos_hydrometeor::cp_vapor, scale_atmos_hydrometeor::cp_water, scale_atmos_hydrometeor::cv_ice, scale_atmos_hydrometeor::cv_vapor, scale_atmos_hydrometeor::cv_water, debug_tem_kij(), freezing_water_kij(), scale_atmos_hydrometeor::i_hc, scale_atmos_hydrometeor::i_hg, scale_atmos_hydrometeor::i_hh, scale_atmos_hydrometeor::i_hi, scale_atmos_hydrometeor::i_hr, scale_atmos_hydrometeor::i_hs, ice_multiplication_kij(), scale_io::io_fid_conf, mixed_phase_collection_kij(), scale_atmos_hydrometeor::n_hyd, nucleation_kij(), scale_prc::prc_abort(), scale_prof::prof_rapend(), scale_prof::prof_rapstart(), qa_mp, scale_specfunc::sf_gamma(), and update_by_phase_change_kij().

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_qhyd2qtrc().

913  use scale_const, only: &
914  pi => const_pi
915  use scale_atmos_hydrometeor, only: &
916  n_hyd, &
917  i_hc, &
918  i_hr, &
919  i_hi, &
920  i_hs, &
921  i_hg, &
922  i_hh
923  implicit none
924  integer, intent(in) :: ka, ks, ke
925  integer, intent(in) :: ia, is, ie
926  integer, intent(in) :: ja, js, je
927 
928  real(RP), intent(in) :: qe(ka,ia,ja,n_hyd) ! mass ratio of each cateory [kg/kg]
929 
930  real(RP), intent(out) :: qtrc(ka,ia,ja,qa_mp-1) ! tracer mass concentration [kg/kg]
931 
932  real(RP), intent(in), optional :: qnum(ka,ia,ja,n_hyd)
933 
934  real(RP), parameter :: dc = 20.e-6_rp ! typical particle diameter for cloud [m]
935  real(RP), parameter :: dr = 200.e-6_rp ! typical particle diameter for rain [m]
936  real(RP), parameter :: di = 80.e-6_rp ! typical particle diameter for ice [m]
937  real(RP), parameter :: ds = 80.e-6_rp ! typical particle diameter for snow [m]
938  real(RP), parameter :: dg = 200.e-6_rp ! typical particle diameter for grapel [m]
939  real(RP), parameter :: rhow = 1000.0_rp ! typical density for warm particles [kg/m3]
940  real(RP), parameter :: rhof = 100.0_rp ! typical density for frozen particles [kg/m3]
941  real(RP), parameter :: rhog = 400.0_rp ! typical density for grapel particles [kg/m3]
942  real(RP), parameter :: b = 3.0_rp ! assume spherical form
943 
944  real(RP) :: piov6
945 
946  integer :: k, i, j
947  !---------------------------------------------------------------------------
948 
949 
950 !OCL XFILL
951  !$omp parallel do
952  do j = js, je
953  do i = is, ie
954  do k = ks, ke
955  qtrc(k,i,j,i_mp_qc) = qe(k,i,j,i_hc)
956  end do
957  end do
958  end do
959 
960 !OCL XFILL
961  !$omp parallel do
962  do j = js, je
963  do i = is, ie
964  do k = ks, ke
965  qtrc(k,i,j,i_mp_qr) = qe(k,i,j,i_hr)
966  end do
967  end do
968  end do
969 
970 !OCL XFILL
971  !$omp parallel do
972  do j = js, je
973  do i = is, ie
974  do k = ks, ke
975  qtrc(k,i,j,i_mp_qi) = qe(k,i,j,i_hi)
976  end do
977  end do
978  end do
979 
980 !OCL XFILL
981  !$omp parallel do
982  do j = js, je
983  do i = is, ie
984  do k = ks, ke
985  qtrc(k,i,j,i_mp_qs) = qe(k,i,j,i_hs)
986  end do
987  end do
988  end do
989 
990 !OCL XFILL
991  !$omp parallel do
992  do j = js, je
993  do i = is, ie
994  do k = ks, ke
995  qtrc(k,i,j,i_mp_qg) = qe(k,i,j,i_hg) + qe(k,i,j,i_hh)
996  end do
997  end do
998  end do
999 
1000  if ( present(qnum) ) then
1001 
1002 !OCL XFILL
1003  !$omp parallel do
1004  do j = js, je
1005  do i = is, ie
1006  do k = ks, ke
1007  qtrc(k,i,j,i_mp_nc) = qnum(k,i,j,i_hc)
1008  end do
1009  end do
1010  end do
1011 
1012 !OCL XFILL
1013  !$omp parallel do
1014  do j = js, je
1015  do i = is, ie
1016  do k = ks, ke
1017  qtrc(k,i,j,i_mp_nr) = qnum(k,i,j,i_hr)
1018  end do
1019  end do
1020  end do
1021 
1022 !OCL XFILL
1023  !$omp parallel do
1024  do j = js, je
1025  do i = is, ie
1026  do k = ks, ke
1027  qtrc(k,i,j,i_mp_ni) = qnum(k,i,j,i_hi)
1028  end do
1029  end do
1030  end do
1031 
1032 !OCL XFILL
1033  !$omp parallel do
1034  do j = js, je
1035  do i = is, ie
1036  do k = ks, ke
1037  qtrc(k,i,j,i_mp_ns) = qnum(k,i,j,i_hs)
1038  end do
1039  end do
1040  end do
1041 
1042 !OCL XFILL
1043  !$omp parallel do
1044  do j = js, je
1045  do i = is, ie
1046  do k = ks, ke
1047  qtrc(k,i,j,i_mp_ng) = qnum(k,i,j,i_hg) + qnum(k,i,j,i_hh)
1048  end do
1049  end do
1050  end do
1051 
1052  else
1053  piov6 = pi / 6.0_rp
1054 
1055 !OCL XFILL
1056  !$omp parallel do
1057  do j = js, je
1058  do i = is, ie
1059  do k = ks, ke
1060  qtrc(k,i,j,i_mp_nc) = qtrc(k,i,j,i_mp_qc) / ( (piov6*rhow) * dc**b )
1061  end do
1062  end do
1063  end do
1064 
1065 !OCL XFILL
1066  !$omp parallel do
1067  do j = js, je
1068  do i = is, ie
1069  do k = ks, ke
1070  qtrc(k,i,j,i_mp_nr) = qtrc(k,i,j,i_mp_qr) / ( (piov6*rhow) * dr**b )
1071  end do
1072  end do
1073  end do
1074 
1075 !OCL XFILL
1076  !$omp parallel do
1077  do j = js, je
1078  do i = is, ie
1079  do k = ks, ke
1080  qtrc(k,i,j,i_mp_ni) = qtrc(k,i,j,i_mp_qi) / ( (piov6*rhof) * di**b )
1081  end do
1082  end do
1083  end do
1084 
1085 !OCL XFILL
1086  !$omp parallel do
1087  do j = js, je
1088  do i = is, ie
1089  do k = ks, ke
1090  qtrc(k,i,j,i_mp_ns) = qtrc(k,i,j,i_mp_qs) / ( (piov6*rhof) * ds**b )
1091  end do
1092  end do
1093  end do
1094 
1095 !OCL XFILL
1096  !$omp parallel do
1097  do j = js, je
1098  do i = is, ie
1099  do k = ks, ke
1100  qtrc(k,i,j,i_mp_ng) = qtrc(k,i,j,i_mp_qg) / ( (piov6*rhog) * dg**b )
1101  end do
1102  end do
1103  end do
1104 
1105  end if
1106 
1107  return
integer, public ia
of whole cells: x, local, with HALO
integer, parameter, public i_hs
snow
integer, parameter, public i_hr
liquid water rain
integer, parameter, public i_hi
ice water cloud
integer, public ja
of whole cells: y, local, with HALO
integer, parameter, public i_hh
hail
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
module atmosphere / hydrometeor
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
module CONSTANT
Definition: scale_const.F90:11
integer, parameter, public i_hc
liquid water cloud
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
real(rp), public const_pi
pi
Definition: scale_const.F90:31
integer, parameter, public n_hyd
integer, parameter, public i_hg
graupel
Here is the call graph for this function:
Here is the caller graph for this function:

◆ debug_tem_kij()

subroutine scale_atmos_phy_mp_sn14::debug_tem_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
integer, intent(in)  point,
real(rp), dimension(ka,ia,ja), intent(in)  tem,
real(rp), dimension(ka,ia,ja), intent(in)  rho,
real(rp), dimension(ka,ia,ja), intent(in)  pre,
real(rp), dimension (ka,ia,ja), intent(in)  qv 
)

Definition at line 2587 of file scale_atmos_phy_mp_sn14.F90.

References scale_prc::prc_myrank.

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

2587  use scale_prc, only: &
2588  prc_myrank
2589  implicit none
2590 
2591  integer, intent(in) :: ka, ks, ke
2592  integer, intent(in) :: ia, is, ie
2593  integer, intent(in) :: ja, js, je
2594 
2595  integer, intent(in) :: point
2596  real(RP), intent(in) :: tem(ka,ia,ja)
2597  real(RP), intent(in) :: rho(ka,ia,ja)
2598  real(RP), intent(in) :: pre(ka,ia,ja)
2599  real(RP), intent(in) :: qv (ka,ia,ja)
2600 
2601  integer :: k ,i, j
2602  !---------------------------------------------------------------------------
2603 
2604  do j = js, je
2605  do i = is, ie
2606  do k = ks, ke
2607  if ( tem(k,i,j) < tem_min &
2608  .OR. rho(k,i,j) < rho_min &
2609  .OR. pre(k,i,j) < 1.0_rp ) then
2610 
2611  log_info("ATMOS_PHY_MP_SN14_debug_tem_kij",'(A,I3,A,4(F16.5),3(I6))') &
2612  "point: ", point, " low tem,rho,pre:", tem(k,i,j), rho(k,i,j), pre(k,i,j), qv(k,i,j), k, i, j, prc_myrank
2613  endif
2614  enddo
2615  enddo
2616  enddo
2617 
2618  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
module PROCESS
Definition: scale_prc.F90:11
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public prc_myrank
process num in local communicator
Definition: scale_prc.F90:89
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ nucleation_kij()

subroutine scale_atmos_phy_mp_sn14::nucleation_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension( ka,ia,ja), intent(in)  cz,
real(rp), dimension(0:ka,ia,ja), intent(in)  fz,
real(rp), dimension (ka,ia,ja), intent(in)  w,
real(rp), dimension(ka,ia,ja), intent(in)  rho,
real(rp), dimension(ka,ia,ja), intent(in)  tem,
real(rp), dimension(ka,ia,ja), intent(in)  pre,
real(rp), dimension(ka,ia,ja), intent(in)  qdry,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq,
real(rp), dimension(ka,ia,ja), intent(in)  cpa,
real(rp), dimension(ka,ia,ja), intent(in)  dTdt_rad,
real(rp), dimension(ka,ia,ja), intent(in)  qke,
real(rp), dimension(ka,ia,ja), intent(in)  CCN,
real(rp), intent(in)  dt,
real(rp), dimension(pq_max,ka,ia,ja), intent(out)  PQ 
)

Definition at line 2632 of file scale_atmos_phy_mp_sn14.F90.

References scale_io::io_fid_conf, and scale_prc::prc_abort().

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

2632  use scale_prc, only: &
2633  prc_abort
2634  use scale_atmos_saturation, only: &
2635  moist_psat_liq => atmos_saturation_psat_liq, &
2636  moist_psat_ice => atmos_saturation_psat_ice, &
2637  moist_pres2qsat_liq => atmos_saturation_pres2qsat_liq, &
2638  moist_pres2qsat_ice => atmos_saturation_pres2qsat_ice, &
2639  moist_dqsi_dtem_dens => atmos_saturation_dqs_dtem_dens_liq
2640  implicit none
2641 
2642  integer, intent(in) :: ka, ks, ke
2643  integer, intent(in) :: ia, is, ie
2644  integer, intent(in) :: ja, js, je
2645 
2646  real(RP), intent(in) :: cz( ka,ia,ja) !
2647  real(RP), intent(in) :: fz(0:ka,ia,ja) !
2648  real(RP), intent(in) :: w (ka,ia,ja) ! w of full level
2649  real(RP), intent(in) :: rho(ka,ia,ja) ! [Add] 09/08/18 T.Mitsui
2650  real(RP), intent(in) :: tem(ka,ia,ja) ! [Add] 09/08/18 T.Mitsui
2651  real(RP), intent(in) :: pre(ka,ia,ja) ! [Add] 09/08/18 T.Mitsui
2652  real(RP), intent(in) :: qdry(ka,ia,ja)
2653  !
2654  real(RP), intent(in) :: rhoq(i_qv:i_ng,ka,ia,ja) !
2655  !
2656  real(RP), intent(in) :: cpa(ka,ia,ja) ! in 09/08/18 [Add] T.Mitsui
2657  real(RP), intent(in) :: dtdt_rad(ka,ia,ja) ! 09/08/18 T.Mitsui
2658  real(RP), intent(in) :: qke(ka,ia,ja) ! 09/08/18 T.Mitsui
2659  real(RP), intent(in) :: dt
2660  real(RP), intent(in) :: ccn(ka,ia,ja)
2661  !
2662  real(RP), intent(out) :: pq(pq_max,ka,ia,ja)
2663  !
2664  ! namelist variables
2665  !
2666  ! total aerosol number concentration [/m3]
2667  real(RP), parameter :: c_ccn_ocean= 1.00e+8_rp
2668  real(RP), parameter :: c_ccn_land = 1.26e+9_rp
2669  real(RP), save :: c_ccn = 1.00e+8_rp
2670  ! aerosol activation factor
2671  real(RP), parameter :: kappa_ocean= 0.462_rp
2672  real(RP), parameter :: kappa_land = 0.308_rp
2673  real(RP), save :: kappa = 0.462_rp
2674  real(RP), save :: c_in = 1.0_rp
2675  ! SB06 (36)
2676  real(RP), save :: nm_m92 = 1.e+3_rp
2677  real(RP), save :: am_m92 = -0.639_rp
2678  real(RP), save :: bm_m92 = 12.96_rp
2679  !
2680  real(RP), save :: in_max = 1000.e+3_rp ! max num. of Ice-Nuclei [num/m3]
2681  real(RP), save :: ssi_max= 0.60_rp
2682  real(RP), save :: ssw_max= 1.1_rp ! [%]
2683  !
2684  logical, save :: flag_first = .true.
2685  real(RP), save :: qke_min = 0.03_rp ! sigma=0.1[m/s], 09/08/18 T.Mitsui
2686  real(RP), save :: tem_ccn_low=233.150_rp ! = -40 degC ! [Add] 10/08/03 T.Mitsui
2687  real(RP), save :: tem_in_low =173.150_rp ! = -100 degC ! [Add] 10/08/03 T.Mitsui
2688  logical, save :: nucl_twomey = .false.
2689  logical, save :: inucl_w = .false.
2690  !
2691  namelist / param_atmos_phy_mp_sn14_nucleation / &
2692  in_max, & !
2693  c_ccn, kappa, & ! cloud nucleation
2694  nm_m92, am_m92, bm_m92, & ! ice nucleation
2695  xc_ccn, xi_ccn, &
2696  tem_ccn_low, & ! [Add] 10/08/03 T.Mitsui
2697  tem_in_low, & ! [Add] 10/08/03 T.Mitsui
2698  ssw_max, ssi_max, &
2699  nucl_twomey, inucl_w ! [Add] 13/01/30 Y.Sato
2700  !
2701 ! real(RP) :: c_ccn_map(1,IA,JA) ! c_ccn horizontal distribution
2702 ! real(RP) :: kappa_map(1,IA,JA) ! kappa horizontal distribution
2703 ! real(RP) :: c_in_map(1,IA,JA) ! c_in horizontal distribution ! [Add] 11/08/30 T.Mitsui
2704  real(RP) :: esw(ka,ia,ja) ! saturation vapor pressure, water
2705  real(RP) :: esi(ka,ia,ja) ! ice
2706  real(RP) :: ssw(ka,ia,ja) ! super saturation (water)
2707  real(RP) :: ssi(ka,ia,ja) ! super saturation (ice)
2708 ! real(RP) :: w_dsswdz(KA,IA,JA) ! w*(d_ssw/ d_z) super saturation(water) flux
2709  real(RP) :: w_dssidz(ka,ia,ja) ! w*(d_ssi/ d_z), 09/04/14 T.Mitsui
2710 ! real(RP) :: ssw_below(KA,IA,JA)! ssw(k-1)
2711  real(RP) :: ssi_below(ka,ia,ja)! ssi(k-1), 09/04/14 T.Mitsui
2712  real(RP) :: z_below(ka,ia,ja) ! z(k-1)
2713  real(RP) :: dzh ! z(k)-z(k-1)
2714  real(RP) :: pv ! vapor pressure
2715  ! work variables for Twomey Equation.
2716  real(RP) :: qsw(ka,ia,ja)
2717  real(RP) :: qsi(ka,ia,ja)
2718  real(RP) :: dqsidtem_rho(ka,ia,ja)
2719  real(RP) :: dssidt_rad(ka,ia,ja)
2720 ! real(RP) :: dni_ratio(KA,IA,JA)
2721  real(RP) :: wssi, wdssi
2722  !
2723 ! real(RP) :: xi_nuc(1,IA,JA) ! xi use the value @ cloud base
2724 ! real(RP) :: alpha_nuc(1,IA,JA) ! alpha_nuc
2725 ! real(RP) :: eta_nuc(1,IA,JA) ! xi use the value @ cloud base
2726  !
2727  real(RP) :: sigma_w(ka,ia,ja)
2728  real(RP) :: weff(ka,ia,ja)
2729  real(RP) :: weff_max(ka,ia,ja)
2730  real(RP) :: velz(ka)
2731  !
2732  real(RP) :: coef_ccn(ia,ja)
2733  real(RP) :: slope_ccn(ia,ja)
2734  real(RP) :: nc_new(ka,ia,ja)
2735  real(RP) :: nc_new_below(ka,ia,ja)
2736  real(RP) :: dnc_new
2737  real(RP) :: nc_new_max ! Lohmann (2002),
2738  real(RP) :: a_max
2739  real(RP) :: b_max
2740  logical :: flag_nucleation(ka,ia,ja)
2741  !
2742  real(RP) :: r_gravity
2743  real(RP), parameter :: r_sqrt3=0.577350269_rp ! = sqrt(1.d0/3.d0)
2744  real(RP), parameter :: eps=1.e-30_rp
2745  !====> ! 09/08/18
2746  !
2747  real(RP) :: dlcdt_max, dli_max ! defined by supersaturation
2748  real(RP) :: dncdt_max, dni_max ! defined by supersaturation
2749  real(RP) :: rdt
2750  !
2751  integer :: i, j, k
2752  !
2753  if( flag_first )then
2754  rewind(io_fid_conf)
2755  read(io_fid_conf, nml=param_atmos_phy_mp_sn14_nucleation, end=100)
2756 100 log_nml(param_atmos_phy_mp_sn14_nucleation)
2757  flag_first=.false.
2758 
2759  if ( mp_couple_aerosol .AND. nucl_twomey ) then
2760  log_error("ATMOS_PHY_MP_SN14_nucleation_kij",*) "nucl_twomey should be false when MP_couple_aerosol is true, stop"
2761  call prc_abort
2762  endif
2763  endif
2764  !
2765 ! c_ccn_map(1,:,:) = c_ccn
2766 ! kappa_map(1,:,:) = kappa
2767 ! c_in_map(1,:,:) = c_in
2768  !
2769 ! nc_uplim_d(1,:,:) = c_ccn_map(1,:,:)*1.5_RP
2770  do j = js, je
2771  do i = is, ie
2772  nc_uplim_d(1,i,j) = c_ccn*1.5_rp
2773  end do
2774  end do
2775  !
2776  rdt = 1.0_rp/dt
2777  r_gravity = 1.0_rp/grav
2778  !
2779  call moist_psat_liq ( ka, ks, ke, ia, is, ie, ja, js, je, &
2780  tem(:,:,:), esw(:,:,:) ) ! [IN], [OUT]
2781  call moist_psat_ice ( ka, ks, ke, ia, is, ie, ja, js, je, &
2782  tem(:,:,:), esi(:,:,:) ) ! [IN], [OUT]
2783  call moist_pres2qsat_liq ( ka, ks, ke, ia, is, ie, ja, js, je, &
2784  tem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
2785  qsw(:,:,:) ) ! [OUT]
2786  call moist_pres2qsat_ice ( ka, ks, ke, ia, is, ie, ja, js, je, &
2787  tem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
2788  qsi(:,:,:) ) ! [OUT]
2789  call moist_dqsi_dtem_dens( ka, ks, ke, ia, is, ie, ja, js, je, &
2790  tem(:,:,:), rho(:,:,:), & ! [IN]
2791  dqsidtem_rho(:,:,:) ) ! [OUT]
2792  !
2793  ! Lohmann (2002),JAS, eq.(1) but changing unit [cm-3] => [m-3]
2794  a_max = 1.e+6_rp*0.1_rp*(1.e-6_rp)**1.27_rp
2795  b_max = 1.27_rp
2796  !
2797  ssi_max = 1.0_rp
2798 
2799  do j = js, je
2800  do i = is, ie
2801  do k = ks, ke
2802  pv = rhoq(i_qv,k,i,j)*rvap*tem(k,i,j)
2803  ssw(k,i,j) = min( mp_ssw_lim, ( pv/esw(k,i,j)-1.0_rp ) )*100.0_rp
2804  ssi(k,i,j) = (pv/esi(k,i,j) - 1.00_rp)
2805 ! ssw_below(k+1,i,j) = ssw(k,i,j)
2806  ssi_below(k+1,i,j) = ssi(k,i,j)
2807  z_below(k+1,i,j) = cz(k,i,j)
2808  end do
2809 ! ssw_below(KS,i,j) = ssw(KS,i,j)
2810  ssi_below(ks,i,j) = ssi(ks,i,j)
2811  z_below(ks,i,j) = cz(ks-1,i,j)
2812 
2813  ! dS/dz is evaluated by first order upstream difference
2814  !*** Solution for Twomey Equation ***
2815 ! coef_ccn(i,j) = 1.E+6_RP*0.88_RP*(c_ccn_map(1,i,j)*1.E-6_RP)**(2.0_RP/(kappa_map(1,i,j) + 2.0_RP)) * &
2816  coef_ccn(i,j) = 1.e+6_rp*0.88_rp*(c_ccn*1.e-6_rp)**(2.0_rp/(kappa + 2.0_rp)) &
2817 ! * (70.0_RP)**(kappa_map(1,i,j)/(kappa_map(1,i,j) + 2.0_RP))
2818  * (70.0_rp)**(kappa/(kappa + 2.0_rp))
2819 ! slope_ccn(i,j) = 1.5_RP*kappa_map(1,i,j)/(kappa_map(1,i,j) + 2.0_RP)
2820  slope_ccn(i,j) = 1.5_rp*kappa/(kappa + 2.0_rp)
2821  !
2822  do k=ks, ke
2823  sigma_w(k,i,j) = r_sqrt3*sqrt(max(qke(k,i,j),qke_min))
2824  end do
2825  sigma_w(ks-1,i,j) = sigma_w(ks,i,j)
2826  sigma_w(ke+1,i,j) = sigma_w(ke,i,j)
2827  ! effective vertical velocity
2828  do k=ks, ke
2829  weff(k,i,j) = w(k,i,j) - cpa(k,i,j)*r_gravity*dtdt_rad(k,i,j)
2830  end do
2831 
2832  end do
2833  end do
2834  !
2835  if( mp_couple_aerosol ) then
2836 
2837  do j = js, je
2838  do i = is, ie
2839  do k = ks, ke
2840  if( ssw(k,i,j) > 1.e-10_rp .AND. pre(k,i,j) > 300.e+2_rp ) then
2841  nc_new(k,i,j) = max( ccn(k,i,j), c_ccn )
2842  else
2843  nc_new(k,i,j) = 0.0_rp
2844  endif
2845  enddo
2846  enddo
2847  enddo
2848 
2849  else
2850 
2851  if( nucl_twomey ) then
2852  ! diagnose cloud condensation nuclei
2853 
2854  do j = js, je
2855  do i = is, ie
2856  do k = ks, ke
2857  ! effective vertical velocity (maximum vertical velocity in turbulent flow)
2858  weff_max(k,i,j) = weff(k,i,j) + sigma_w(k,i,j)
2859  ! large scale upward motion region and saturated
2860  if( (weff(k,i,j) > 1.e-8_rp) .AND. (ssw(k,i,j) > 1.e-10_rp) .AND. pre(k,i,j) > 300.e+2_rp )then
2861  ! Lohmann (2002), eq.(1)
2862  nc_new_max = coef_ccn(i,j)*weff_max(k,i,j)**slope_ccn(i,j)
2863  nc_new(k,i,j) = a_max*nc_new_max**b_max
2864  else
2865  nc_new(k,i,j) = 0.0_rp
2866  end if
2867  end do
2868  end do
2869  end do
2870  else
2871  ! calculate cloud condensation nuclei
2872  do j = js, je
2873  do i = is, ie
2874  do k = ks, ke
2875  if( ssw(k,i,j) > 1.e-10_rp .AND. pre(k,i,j) > 300.e+2_rp ) then
2876  nc_new(k,i,j) = c_ccn*ssw(k,i,j)**kappa
2877  else
2878  nc_new(k,i,j) = 0.0_rp
2879  endif
2880  enddo
2881  enddo
2882  enddo
2883  endif
2884 
2885  endif
2886 
2887  do j = js, je
2888  do i = is, ie
2889  do k = ks, ke
2890  ! nc_new is bound by upper limit
2891  if( nc_new(k,i,j) > nc_uplim_d(1,i,j) )then ! no more CCN
2892  flag_nucleation(k,i,j) = .false.
2893  nc_new_below(k+1,i,j) = 1.e+30_rp
2894  else if( nc_new(k,i,j) > eps )then ! nucleation can occur
2895  flag_nucleation(k,i,j) = .true.
2896  nc_new_below(k+1,i,j) = nc_new(k,i,j)
2897  else ! nucleation cannot occur(unsaturated or negative w)
2898  flag_nucleation(k,i,j) = .false.
2899  nc_new_below(k+1,i,j) = 0.0_rp
2900  end if
2901  end do
2902  nc_new_below(ks,i,j) = 0.0_rp
2903 ! do k=KS, KE
2904  ! search maximum value of nc_new
2905 ! if( ( nc_new(k,i,j) < nc_new_below(k,i,j) ) .OR. &
2906 ! ( nc_new_below(k,i,j) > c_ccn_map(1,i,j)*0.05_RP ) )then ! 5% of c_ccn
2907 ! ( nc_new_below(k,i,j) > c_ccn*0.05_RP ) )then ! 5% of c_ccn
2908 ! flag_nucleation(k,i,j) = .false.
2909 ! end if
2910 ! end do
2911 
2912  end do
2913  end do
2914 
2915  if( mp_couple_aerosol ) then
2916 
2917  do j = js, je
2918  do i = is, ie
2919  do k = ks, ke
2920  ! nucleation occurs at only cloud base.
2921  ! if CCN is more than below parcel, nucleation newly occurs
2922  ! effective vertical velocity
2923  if ( flag_nucleation(k,i,j) .AND. & ! large scale upward motion region and saturated
2924  tem(k,i,j) > tem_ccn_low ) then
2925  dlcdt_max = (rhoq(i_qv,k,i,j) - esw(k,i,j)/(rvap*tem(k,i,j)))*rdt
2926  dncdt_max = dlcdt_max/xc_min
2927 ! dnc_new = nc_new(k,i,j)-rhoq(I_NC,k,i,j)
2928  dnc_new = nc_new(k,i,j)
2929  pq(i_ncccn,k,i,j) = min( dncdt_max, dnc_new*rdt )
2930  pq(i_lcccn,k,i,j) = min( dlcdt_max, xc_min*pq(i_ncccn,k,i,j) )
2931  else
2932  pq(i_ncccn,k,i,j) = 0.0_rp
2933  pq(i_lcccn,k,i,j) = 0.0_rp
2934  end if
2935  end do
2936  end do
2937  end do
2938 
2939  else
2940 
2941  if( nucl_twomey ) then
2942  do j = js, je
2943  do i = is, ie
2944  do k = ks, ke
2945  ! nucleation occurs at only cloud base.
2946  ! if CCN is more than below parcel, nucleation newly occurs
2947  ! effective vertical velocity
2948  if ( flag_nucleation(k,i,j) .AND. & ! large scale upward motion region and saturated
2949  tem(k,i,j) > tem_ccn_low .AND. &
2950  nc_new(k,i,j) > rhoq(i_nc,k,i,j) ) then
2951  dlcdt_max = (rhoq(i_qv,k,i,j) - esw(k,i,j)/(rvap*tem(k,i,j)))*rdt
2952  dncdt_max = dlcdt_max/xc_min
2953  dnc_new = nc_new(k,i,j)-rhoq(i_nc,k,i,j)
2954  pq(i_ncccn,k,i,j) = min( dncdt_max, dnc_new*rdt )
2955  pq(i_lcccn,k,i,j) = min( dlcdt_max, xc_min*pq(i_ncccn,k,i,j) )
2956  else
2957  pq(i_ncccn,k,i,j) = 0.0_rp
2958  pq(i_lcccn,k,i,j) = 0.0_rp
2959  end if
2960  end do
2961  end do
2962  end do
2963  else
2964  do j = js, je
2965  do i = is, ie
2966  do k = ks, ke
2967  ! effective vertical velocity
2968  if( tem(k,i,j) > tem_ccn_low .AND. &
2969  nc_new(k,i,j) > rhoq(i_nc,k,i,j) ) then
2970  dlcdt_max = (rhoq(i_qv,k,i,j) - esw(k,i,j)/(rvap*tem(k,i,j)))*rdt
2971  dncdt_max = dlcdt_max/xc_min
2972  dnc_new = nc_new(k,i,j)-rhoq(i_nc,k,i,j)
2973  pq(i_ncccn,k,i,j) = min( dncdt_max, dnc_new*rdt )
2974  pq(i_lcccn,k,i,j) = min( dlcdt_max, xc_min*pq(i_ncccn,k,i,j) )
2975  else
2976  pq(i_ncccn,k,i,j) = 0.0_rp
2977  pq(i_lcccn,k,i,j) = 0.0_rp
2978  end if
2979  end do
2980  end do
2981  end do
2982  endif
2983  endif
2984 
2985  !
2986  ! ice nucleation
2987  !
2988  ! +++ NOTE ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2989  ! Based on Phillips etal.(2006).
2990  ! However this approach doesn't diagnose Ni itself but diagnose tendency.
2991  ! Original approach adjust Ni instantaneously .
2992  ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2993  do j = js, je
2994  do i = is, ie
2995  do k = ks, ke-1
2996  velz(k) = ( w(k,i,j) * ( cz(k+1,i,j) - fz(k,i,j) ) + w(k+1,i,j) * ( fz(k,i,j) - cz(k,i,j) ) ) / ( cz(k+1,i,j) - cz(k,i,j) ) ! @ half level
2997  end do
2998  velz(ke) = 0.0_rp
2999  do k = ks, ke
3000  dzh = cz(k,i,j) - z_below(k,i,j)
3001  w_dssidz(k,i,j) = velz(k) * (ssi(k,i,j) - ssi_below(k,i,j))/dzh ! 09/04/14 [Add] T.Mitsui
3002  dssidt_rad(k,i,j) = -rhoq(i_qv,k,i,j)/(rho(k,i,j)*qsi(k,i,j)*qsi(k,i,j))*dqsidtem_rho(k,i,j)*dtdt_rad(k,i,j)
3003  dli_max = (rhoq(i_qv,k,i,j) - esi(k,i,j)/(rvap*tem(k,i,j)))*rdt
3004  dni_max = min( dli_max/xi_ccn, (in_max-rhoq(i_ni,k,i,j))*rdt )
3005  wdssi = min( w_dssidz(k,i,j)+dssidt_rad(k,i,j), 0.01_rp)
3006  wssi = min( ssi(k,i,j), ssi_max)
3007  ! SB06(34),(35)
3008  if( ( wdssi > eps ) .AND. & !
3009  (tem(k,i,j) < 273.15_rp ) .AND. & !
3010  (rhoq(i_ni,k,i,j) < in_max ) .AND. &
3011  (wssi >= eps ) )then !
3012 ! PNIccn(k,i,j) = min(dni_max, c_in_map(1,i,j)*bm_M92*nm_M92*0.3_RP*exp(0.3_RP*bm_M92*(wssi-0.1_RP))*wdssi)
3013  if( inucl_w ) then
3014  pq(i_niccn,k,i,j) = min(dni_max, c_in*bm_m92*nm_m92*0.3_rp*exp(0.3_rp*bm_m92*(wssi-0.1_rp))*wdssi)
3015  else
3016  pq(i_niccn,k,i,j) = min(dni_max, max(c_in*nm_m92*exp(0.3_rp*bm_m92*(wssi-0.1_rp) )-rhoq(i_ni,k,i,j),0.0_rp )*rdt )
3017  endif
3018  pq(i_liccn,k,i,j) = min(dli_max, pq(i_niccn,k,i,j)*xi_ccn )
3019  ! only for output
3020 ! dni_ratio(k,i,j) = dssidt_rad(k,i,j)/( w_dssidz(k,i,j)+dssidt_rad(k,i,j) )
3021  else
3022  pq(i_niccn,k,i,j) = 0.0_rp
3023  pq(i_liccn,k,i,j) = 0.0_rp
3024  end if
3025  end do
3026  end do
3027  end do
3028 
3029  return
module atmosphere / saturation
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
module PROCESS
Definition: scale_prc.F90:11
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:338
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ice_multiplication_kij()

subroutine scale_atmos_phy_mp_sn14::ice_multiplication_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(pac_max,ka,ia,ja), intent(in)  Pac,
real(rp), dimension(ka,ia,ja), intent(in)  tem,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  xq,
real(rp), dimension(pq_max,ka,ia,ja), intent(inout)  PQ 
)

Definition at line 3037 of file scale_atmos_phy_mp_sn14.F90.

References scale_specfunc::sf_gamma().

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

3037 
3038  ! ice multiplication by splintering
3039  ! we consider Hallet-Mossop process
3040  use scale_specfunc, only: &
3041  gammafunc => sf_gamma
3042  implicit none
3043 
3044  integer, intent(in) :: ka, ks, ke
3045  integer, intent(in) :: ia, is, ie
3046  integer, intent(in) :: ja, js, je
3047  !
3048  real(RP), intent(in) :: pac(pac_max,ka,ia,ja)
3049  real(RP), intent(in) :: tem(ka,ia,ja)
3050  real(RP), intent(in) :: rhoq(i_qv:i_ng,ka,ia,ja)
3051  real(RP), intent(in) :: xq(hydro_max,ka,ia,ja)
3052  !
3053  real(RP), intent(inout):: pq(pq_max,ka,ia,ja)
3054  !
3055  logical, save :: flag_first = .true.
3056  ! production of (350.d3 ice particles)/(cloud riming [g]) => 350*d6 [/kg]
3057  real(RP), parameter :: pice = 350.0e+6_rp
3058  ! production of (1 ice particle)/(250 cloud particles riming)
3059  real(RP), parameter :: pnc = 250.0_rp
3060  real(RP), parameter :: rc_cr= 12.e-6_rp ! critical size[micron]
3061  ! temperature factor
3062  real(RP) :: fp
3063  ! work for incomplete gamma function
3064  real(RP), save :: xc_cr ! mass[kg] of cloud with r=critical size[micron]
3065  real(RP), save :: alpha ! slope parameter of gamma function
3066  real(RP), save :: gm, lgm ! gamma(alpha), log(gamma(alpha))
3067  real(RP) :: igm ! in complete gamma(x,alpha)
3068  real(RP) :: x
3069  ! coefficient of expansion using in calculation of igm
3070  real(RP) :: a0,a1,a2,a3,a4,a5
3071  real(RP) :: a6,a7,a8,a9,a10
3072  real(RP) :: an1,an2,b0,b1,b2,c0,c1,c2
3073  real(RP) :: d0,d1,d2,e1,e2,h0,h1,h2
3074  real(RP), parameter :: eps=1.0e-30_rp
3075  ! number of cloud droplets larger than 12 micron(radius).
3076  real(RP) :: n12
3077  !
3078  real(RP) :: wn, wni, wns, wng
3079  integer :: i, j, k
3080  !
3081  if( flag_first )then
3082  flag_first = .false.
3083  ! work for Incomplete Gamma function
3084  xc_cr = (2.0_rp*rc_cr/a_m(i_mp_qc))**(1.0_rp/b_m(i_mp_qc))
3085  alpha = (nu(i_mp_qc)+1.0_rp)/mu(i_mp_qc)
3086  gm = gammafunc(alpha)
3087  lgm = log(gm)
3088  end if
3089  !
3090  do j = js, je
3091  do i = is, ie
3092  do k = ks, ke
3093  ! Here we assume particle temperature is same as environment temperature.
3094  ! If you want to treat in a better manner,
3095  ! you can diagnose with eq.(64) in CT(86)
3096  if (tem(k,i,j) > 270.16_rp)then
3097  fp = 0.0_rp
3098  else if(tem(k,i,j) >= 268.16_rp)then
3099  fp = (270.16_rp-tem(k,i,j))*0.5_rp
3100  else if(tem(k,i,j) >= 265.16_rp)then
3101  fp = (tem(k,i,j)-265.16_rp)*0.333333333_rp
3102  else
3103  fp = 0.0_rp
3104  end if
3105  ! Approximation of Incomplete Gamma function
3106  ! Here we calculate with algorithm by Numerical Recipes.
3107  ! This approach is based on eq.(78) in Cotton etal.(1986),
3108  ! but more accurate and expanded for Generalized Gamma Distribution.
3109  x = coef_lambda(i_mp_qc)*(xc_cr/xq(i_mp_qc,k,i,j))**mu(i_mp_qc)
3110  !
3111  if(x<1.e-2_rp*alpha)then ! negligible
3112  igm = 0.0_rp
3113  else if(x<alpha+1.0_rp)then ! series expansion
3114  ! 10th-truncation is enough for cloud droplet.
3115  a0 = 1.0_rp/alpha ! n=0
3116  a1 = a0*x/(alpha+1.0_rp) ! n=1
3117  a2 = a1*x/(alpha+2.0_rp) ! n=2
3118  a3 = a2*x/(alpha+3.0_rp) ! n=3
3119  a4 = a3*x/(alpha+4.0_rp) ! n=4
3120  a5 = a4*x/(alpha+5.0_rp) ! n=5
3121  a6 = a5*x/(alpha+6.0_rp) ! n=6
3122  a7 = a6*x/(alpha+7.0_rp) ! n=7
3123  a8 = a7*x/(alpha+8.0_rp) ! n=8
3124  a9 = a8*x/(alpha+9.0_rp) ! n=9
3125  a10 = a9*x/(alpha+10.0_rp) ! n=10
3126  igm = (a0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)*exp( -x + alpha*log(x) - lgm )
3127  else if(x<alpha*1.d2) then ! continued fraction expansion
3128  ! 2nd-truncation is enough for cloud droplet.
3129  ! setup
3130  b0 = x+1.0_rp-alpha
3131  c0 = 1.0_rp/eps
3132  d0 = 1.0_rp/b0
3133  h0 = d0
3134  ! n=1
3135  an1 = -(1.0_rp-alpha)
3136  b1 = b0 + 2.0_rp
3137  d1 = 1.0_rp/(an1*d0+b1)
3138  c1 = b1+an1/c0
3139  e1 = d1*c1
3140  h1 = h0*e1
3141  ! n=2
3142  an2 = -2.0_rp*(2.0_rp-alpha)
3143  b2 = b1 + 2.0_rp
3144  d2 = 1.0_rp/(an2*d1+b2)
3145  c2 = b2+an2/c1
3146  e2 = d2*c2
3147  h2 = h1*e2
3148  !
3149  igm = 1.0_rp - exp( -x + alpha*log(x) - lgm )*h2
3150  else ! negligible
3151  igm = 1.0_rp
3152  end if
3153  ! n12 is number of cloud droplets larger than 12 micron.
3154  n12 = rhoq(i_nc,k,i,j)*(1.0_rp-igm)
3155  ! eq.(82) CT(86)
3156  wn = (pice + n12/((rhoq(i_qc,k,i,j)+xc_min)*pnc) )*fp ! filtered by xc_min
3157  wni = wn*(-pac(i_liaclc2li,k,i,j) ) ! riming production rate is all negative
3158  wns = wn*(-pac(i_lsaclc2ls,k,i,j) )
3159  wng = wn*(-pac(i_lgaclc2lg,k,i,j) )
3160  pq(i_nispl,k,i,j) = wni+wns+wng
3161  !
3162  pq(i_lsspl,k,i,j) = - wns*xq(i_mp_qi,k,i,j) ! snow => ice
3163  pq(i_lgspl,k,i,j) = - wng*xq(i_mp_qi,k,i,j) ! graupel => ice
3164  !
3165  end do
3166  end do
3167  end do
3168  !
3169  return
integer, public ia
of whole cells: x, local, with HALO
real(rp) function, public sf_gamma(x)
Gamma function.
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
module SPECFUNC
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mixed_phase_collection_kij()

subroutine scale_atmos_phy_mp_sn14::mixed_phase_collection_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(ka,ia,ja), intent(in)  wtem,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  xq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  dq_xave,
real(rp), dimension(hydro_max,2,ka,ia,ja), intent(in)  vt_xave,
real(rp), dimension(pq_max,ka,ia,ja), intent(inout)  PQ,
real(rp), dimension(pac_max,ka,ia,ja), intent(out)  Pac 
)

Definition at line 3180 of file scale_atmos_phy_mp_sn14.F90.

References scale_io::io_fid_conf.

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

3180  use scale_atmos_saturation, only: &
3181  moist_psat_ice => atmos_saturation_psat_ice
3182  implicit none
3183 
3184  integer, intent(in) :: ka, ks, ke
3185  integer, intent(in) :: ia, is, ie
3186  integer, intent(in) :: ja, js, je
3187 
3188  !--- mixed-phase collection process
3189  ! And all we set all production term as a negative sign to avoid confusion.
3190  !
3191  real(RP), intent(in) :: wtem(ka,ia,ja)
3192  !--- mass/number concentration[kg/m3]
3193  real(RP), intent(in) :: rhoq(i_qv:i_ng,ka,ia,ja)
3194  ! necessary ?
3195  real(RP), intent(in) :: xq(hydro_max,ka,ia,ja)
3196  !--- diameter of averaged mass( D(ave x) )
3197  real(RP), intent(in) :: dq_xave(hydro_max,ka,ia,ja)
3198  !--- terminal velocity of averaged mass( vt(ave x) )
3199  real(RP), intent(in) :: vt_xave(hydro_max,2,ka,ia,ja)
3200  ! [Add] 11/08/30 T.Mitsui, for autoconversion of ice
3201  ! real(RP), intent(in) :: rho(KA,IA,JA)
3202  !--- partial conversion
3203  real(RP), intent(inout):: pq(pq_max,ka,ia,ja)
3204  !
3205  real(RP), intent(out):: pac(pac_max,ka,ia,ja)
3206  !
3207  ! namelist variables
3208  !=== for collection
3209  !--- threshold of diameters to collide with others
3210  real(RP), save :: dc0 = 15.0e-6_rp ! lower threshold of cloud
3211  real(RP), save :: dc1 = 40.0e-6_rp ! upper threshold of cloud
3212  real(RP), save :: di0 = 150.0e-6_rp ! lower threshold of cloud
3213  real(RP), save :: ds0 = 150.0e-6_rp ! lower threshold of cloud
3214  real(RP), save :: dg0 = 150.0e-6_rp ! lower threshold of cloud
3215  !--- standard deviation of terminal velocity[m/s]
3216  real(RP), save :: sigma_c=0.00_rp ! cloud
3217  real(RP), save :: sigma_r=0.00_rp ! rain
3218  real(RP), save :: sigma_i=0.2_rp ! ice
3219  real(RP), save :: sigma_s=0.2_rp ! snow
3220  real(RP), save :: sigma_g=0.00_rp ! graupel
3221  !--- max collection efficiency for cloud
3222  real(RP), save :: e_im = 0.80_rp ! ice max
3223  real(RP), save :: e_sm = 0.80_rp ! snow max
3224  real(RP), save :: e_gm = 1.00_rp ! graupel max
3225  !--- collection efficiency between 2 species
3226  real(RP), save :: e_ir=1.0_rp ! ice x rain
3227  real(RP), save :: e_sr=1.0_rp ! snow x rain
3228  real(RP), save :: e_gr=1.0_rp ! graupel x rain
3229  real(RP), save :: e_ii=1.0_rp ! ice x ice
3230  real(RP), save :: e_si=1.0_rp ! snow x ice
3231  real(RP), save :: e_gi=1.0_rp ! graupel x ice
3232  real(RP), save :: e_ss=1.0_rp ! snow x snow
3233  real(RP), save :: e_gs=1.0_rp ! graupel x snow
3234  real(RP), save :: e_gg=1.0_rp ! graupel x graupel
3235  !=== for partial conversion
3236  !--- flag: 1=> partial conversion to graupel, 0=> no conversion
3237  integer, save :: i_iconv2g=1 ! ice => graupel
3238  integer, save :: i_sconv2g=1 ! snow => graupel
3239  !--- bulk density of graupel
3240  real(RP), save :: rho_g = 900.0_rp ! [kg/m3]
3241  !--- space filling coefficient [%]
3242  real(RP), save :: cfill_i = 0.68_rp ! ice
3243  real(RP), save :: cfill_s = 0.01_rp ! snow
3244  !--- critical diameter for ice conversion
3245  real(RP), save :: di_cri = 500.e-6_rp ! [m]
3246  ! [Add] 10/08/03 T.Mitsui
3247  logical, save :: opt_stick_ks96=.false.
3248  logical, save :: opt_stick_co86=.false.
3249  real(RP), parameter :: a_dec = 0.883_rp
3250  real(RP), parameter :: b_dec = 0.093_rp
3251  real(RP), parameter :: c_dec = 0.00348_rp
3252  real(RP), parameter :: d_dec = 4.5185e-5_rp
3253  !
3254  logical, save :: flag_first = .true.
3255  namelist / param_atmos_phy_mp_sn14_collection / &
3256  dc0, dc1, di0, ds0, dg0, &
3257  sigma_c, sigma_r, sigma_i, sigma_s, sigma_g, &
3258  opt_stick_ks96, &
3259  opt_stick_co86, &
3260  e_im, e_sm, e_gm, &
3261  e_ir, e_sr, e_gr, e_ii, e_si, e_gi, e_ss, e_gs, e_gg, &
3262  i_iconv2g, i_sconv2g, rho_g, cfill_i, cfill_s, di_cri
3263  !
3264  real(RP) :: tem(ka,ia,ja)
3265  !
3266  !--- collection efficency of each specie
3267  real(RP) :: e_c, e_r, e_i, e_s, e_g !
3268  real(RP) :: e_ic, e_sc, e_gc !
3269  !--- sticking efficiency
3270  real(RP) :: e_stick(ka,ia,ja)
3271  ! [Add] 10/08/03 T.Mitsui
3272  real(RP) :: temc, temc2, temc3
3273  real(RP) :: e_dec
3274  real(RP) :: esi_rat
3275  real(RP) :: esi(ka,ia,ja)
3276  !
3277  real(RP) :: temc_p, temc_m ! celcius tem.
3278  ! [Add] 11/08/30 T.Mitsui, estimation of autoconversion time
3279 ! real(RP) :: ci_aut(KA,IA,JA)
3280 ! real(RP) :: taui_aut(KA,IA,JA)
3281 ! real(RP) :: tau_sce(KA,IA,JA)
3282  !--- DSD averaged diameter for each species
3283  real(RP) :: ave_dc ! cloud
3284 ! real(RP) :: ave_dr ! rain
3285  real(RP) :: ave_di ! ice
3286  real(RP) :: ave_ds ! snow
3287  real(RP) :: ave_dg ! graupel
3288  !--- coefficient of collection equations(L:mass, N:number)
3289  real(RP) :: coef_acc_lci, coef_acc_nci ! cloud - cloud ice
3290  real(RP) :: coef_acc_lcs, coef_acc_ncs ! cloud - snow
3291  !
3292  real(RP) :: coef_acc_lcg, coef_acc_ncg ! cloud - graupel
3293  real(RP) :: coef_acc_lri_i, coef_acc_nri_i ! rain - cloud ice
3294  real(RP) :: coef_acc_lri_r, coef_acc_nri_r ! rain - cloud ice
3295  real(RP) :: coef_acc_lrs_s, coef_acc_nrs_s ! rain - snow
3296  real(RP) :: coef_acc_lrs_r, coef_acc_nrs_r ! rain - snow
3297  real(RP) :: coef_acc_lrg, coef_acc_nrg ! rain - graupel
3298  real(RP) :: coef_acc_lii, coef_acc_nii ! cloud ice - cloud ice
3299  real(RP) :: coef_acc_lis, coef_acc_nis ! cloud ice - snow
3300  real(RP) :: coef_acc_nss ! snow - snow
3301  real(RP) :: coef_acc_ngg ! grauepl - graupel
3302  real(RP) :: coef_acc_lsg, coef_acc_nsg ! snow - graupel
3303  !--- (diameter) x (diameter)
3304  real(RP) :: dcdc, dcdi, dcds, dcdg
3305  real(RP) :: drdr, drdi, drds, drdg
3306  real(RP) :: didi, dids, didg
3307  real(RP) :: dsds, dsdg
3308  real(RP) :: dgdg
3309  !--- (terminal velocity) x (terminal velocity)
3310  real(RP) :: vcvc, vcvi, vcvs, vcvg
3311  real(RP) :: vrvr, vrvi, vrvs, vrvg
3312  real(RP) :: vivi, vivs, vivg
3313  real(RP) :: vsvs, vsvg
3314  real(RP) :: vgvg
3315  !
3316  real(RP) :: wx_cri, wx_crs
3317  real(RP) :: coef_emelt
3318  real(RP) :: w1
3319 
3320  real(RP) :: sw
3321  !
3322  integer :: i, j, k
3323  !
3324  if( flag_first )then
3325  rewind( io_fid_conf )
3326  read( io_fid_conf, nml=param_atmos_phy_mp_sn14_collection, end=100 )
3327 100 log_nml(param_atmos_phy_mp_sn14_collection)
3328  flag_first = .false.
3329  end if
3330  !
3331  ! [Add] 10/08/03 T.Mitsui
3332  do j = js, je
3333  do i = is, ie
3334  do k = ks, ke
3335  tem(k,i,j) = max( wtem(k,i,j), tem_min ) ! 11/08/30 T.Mitsui
3336  end do
3337  end do
3338  end do
3339 
3340  call moist_psat_ice( ka, ks, ke, ia, is, ie, ja, js, je, &
3341  tem(:,:,:), esi(:,:,:) ) ! [IN], [OUT]
3342 
3343  if( opt_stick_ks96 )then
3344  do j = js, je
3345  do i = is, ie
3346  do k = ks, ke
3347  ! Khain and Sednev (1996), eq.(3.15)
3348  temc = tem(k,i,j) - t00
3349  temc2 = temc*temc
3350  temc3 = temc2*temc
3351  e_dec = max(0.0_rp, a_dec + b_dec*temc + c_dec*temc2 + d_dec*temc3 )
3352  esi_rat = rhoq(i_qv,k,i,j)*rvap*tem(k,i,j)/esi(k,i,j)
3353  e_stick(k,i,j) = min(1.0_rp, e_dec*esi_rat)
3354  end do
3355  end do
3356  end do
3357  else if( opt_stick_co86 )then
3358  do j = js, je
3359  do i = is, ie
3360  do k = ks, ke
3361  ! [Add] 11/08/30 T.Mitsui, Cotton et al. (1986)
3362  temc = min(tem(k,i,j) - t00,0.0_rp)
3363  w1 = 0.035_rp*temc-0.7_rp
3364  e_stick(k,i,j) = 10._rp**w1
3365  end do
3366  end do
3367  end do
3368  else
3369  do j = js, je
3370  do i = is, ie
3371  do k = ks, ke
3372  ! Lin et al. (1983)
3373  temc_m = min(tem(k,i,j) - t00,0.0_rp) ! T < 273.15
3374  e_stick(k,i,j) = exp(0.09_rp*temc_m)
3375  end do
3376  end do
3377  end do
3378  end if
3379  !
3380  profile_start("sn14_collection")
3381 !OCL NOSIMD
3382  do j = js, je
3383  do i = is, ie
3384  do k = ks, ke
3385  !
3386 ! temc_m = min(tem(k,i,j) - T00,0.0_RP) ! T < 273.15
3387  temc_p = max(tem(k,i,j) - t00,0.0_rp) ! T > 273.15
3388  ! averaged diameter using SB06(82)
3389  ave_dc = coef_d(i_mp_qc)*xq(i_mp_qc,k,i,j)**b_m(i_mp_qc)
3390  ave_di = coef_d(i_mp_qi)*xq(i_mp_qi,k,i,j)**b_m(i_mp_qi)
3391  ave_ds = coef_d(i_mp_qs)*xq(i_mp_qs,k,i,j)**b_m(i_mp_qs)
3392  ave_dg = coef_d(i_mp_qg)*xq(i_mp_qg,k,i,j)**b_m(i_mp_qg)
3393  !------------------------------------------------------------------------
3394  ! coellection efficiency are given as follows
3395  e_c = max(0.0_rp, min(1.0_rp, (ave_dc-dc0)/(dc1-dc0) ))
3396  sw = 0.5_rp - sign(0.5_rp, di0-ave_di) ! if(ave_di>di0)then sw=1
3397  e_i = e_im * sw
3398  sw = 0.5_rp - sign(0.5_rp, ds0-ave_ds) ! if(ave_ds>ds0)then sw=1
3399  e_s = e_sm * sw
3400  sw = 0.5_rp - sign(0.5_rp, dg0-ave_dg) ! if(ave_dg>dg0)then sw=1
3401  e_g = e_gm * sw
3402  e_ic = e_i*e_c
3403  e_sc = e_s*e_c
3404  e_gc = e_g*e_c
3405  !------------------------------------------------------------------------
3406  ! Collection: a collects b ( assuming particle size a>b )
3407  dcdc = dq_xave(i_mp_qc,k,i,j) * dq_xave(i_mp_qc,k,i,j)
3408  drdr = dq_xave(i_mp_qr,k,i,j) * dq_xave(i_mp_qr,k,i,j)
3409  didi = dq_xave(i_mp_qi,k,i,j) * dq_xave(i_mp_qi,k,i,j)
3410  dsds = dq_xave(i_mp_qs,k,i,j) * dq_xave(i_mp_qs,k,i,j)
3411  dgdg = dq_xave(i_mp_qg,k,i,j) * dq_xave(i_mp_qg,k,i,j)
3412  dcdi = dq_xave(i_mp_qc,k,i,j) * dq_xave(i_mp_qi,k,i,j)
3413  dcds = dq_xave(i_mp_qc,k,i,j) * dq_xave(i_mp_qs,k,i,j)
3414  dcdg = dq_xave(i_mp_qc,k,i,j) * dq_xave(i_mp_qg,k,i,j)
3415  drdi = dq_xave(i_mp_qr,k,i,j) * dq_xave(i_mp_qi,k,i,j)
3416  drds = dq_xave(i_mp_qr,k,i,j) * dq_xave(i_mp_qs,k,i,j)
3417  drdg = dq_xave(i_mp_qr,k,i,j) * dq_xave(i_mp_qg,k,i,j)
3418  dids = dq_xave(i_mp_qi,k,i,j) * dq_xave(i_mp_qs,k,i,j)
3419 ! didg = dq_xave(I_mp_QI,k,i,j) * dq_xave(I_mp_QG,k,i,j)
3420  dsdg = dq_xave(i_mp_qs,k,i,j) * dq_xave(i_mp_qg,k,i,j)
3421  !
3422  vcvc = vt_xave(i_mp_qc,2,k,i,j)* vt_xave(i_mp_qc,2,k,i,j)
3423  vrvr = vt_xave(i_mp_qr,2,k,i,j)* vt_xave(i_mp_qr,2,k,i,j)
3424  vivi = vt_xave(i_mp_qi,2,k,i,j)* vt_xave(i_mp_qi,2,k,i,j)
3425  vsvs = vt_xave(i_mp_qs,2,k,i,j)* vt_xave(i_mp_qs,2,k,i,j)
3426  vgvg = vt_xave(i_mp_qg,2,k,i,j)* vt_xave(i_mp_qg,2,k,i,j)
3427  vcvi = vt_xave(i_mp_qc,2,k,i,j)* vt_xave(i_mp_qi,2,k,i,j)
3428  vcvs = vt_xave(i_mp_qc,2,k,i,j)* vt_xave(i_mp_qs,2,k,i,j)
3429  vcvg = vt_xave(i_mp_qc,2,k,i,j)* vt_xave(i_mp_qg,2,k,i,j)
3430  vrvi = vt_xave(i_mp_qr,2,k,i,j)* vt_xave(i_mp_qi,2,k,i,j)
3431  vrvs = vt_xave(i_mp_qr,2,k,i,j)* vt_xave(i_mp_qs,2,k,i,j)
3432  vrvg = vt_xave(i_mp_qr,2,k,i,j)* vt_xave(i_mp_qg,2,k,i,j)
3433  vivs = vt_xave(i_mp_qi,2,k,i,j)* vt_xave(i_mp_qs,2,k,i,j)
3434 ! vivg = vt_xave(I_mp_QI,2,k,i,j)* vt_xave(I_mp_QG,2,k,i,j)
3435  vsvg = vt_xave(i_mp_qs,2,k,i,j)* vt_xave(i_mp_qg,2,k,i,j)
3436  !------------------------------------------------------------------------
3437  !
3438  !+++ pattern 1: a + b => a (a>b)
3439  ! (i-c, s-c, g-c, s-i, g-r, s-g)
3440  !------------------------------------------------------------------------
3441  ! cloud-ice => ice
3442  ! reduction term of cloud
3443  coef_acc_lci = &
3444  ( delta_b1(i_mp_qc)*dcdc + delta_ab1(i_mp_qi,i_mp_qc)*dcdi + delta_b0(i_mp_qi)*didi ) &
3445  * ( theta_b1(i_mp_qc)*vcvc - theta_ab1(i_mp_qi,i_mp_qc)*vcvi + theta_b0(i_mp_qi)*vivi &
3446  + sigma_i + sigma_c )**0.5_rp
3447  coef_acc_nci = &
3448  ( delta_b0(i_mp_qc)*dcdc + delta_ab0(i_mp_qi,i_mp_qc)*dcdi + delta_b0(i_mp_qi)*didi ) &
3449  * ( theta_b0(i_mp_qc)*vcvc - theta_ab0(i_mp_qi,i_mp_qc)*vcvi + theta_b0(i_mp_qi)*vivi &
3450  + sigma_i + sigma_c )**0.5_rp
3451  pac(i_liaclc2li,k,i,j)= -0.25_rp*pi*e_ic*rhoq(i_ni,k,i,j)*rhoq(i_qc,k,i,j)*coef_acc_lci
3452  pac(i_niacnc2ni,k,i,j)= -0.25_rp*pi*e_ic*rhoq(i_ni,k,i,j)*rhoq(i_nc,k,i,j)*coef_acc_nci
3453  ! cloud-snow => snow
3454  ! reduction term of cloud
3455  coef_acc_lcs = &
3456  ( delta_b1(i_mp_qc)*dcdc + delta_ab1(i_mp_qs,i_mp_qc)*dcds + delta_b0(i_mp_qs)*dsds ) &
3457  * ( theta_b1(i_mp_qc)*vcvc - theta_ab1(i_mp_qs,i_mp_qc)*vcvs + theta_b0(i_mp_qs)*vsvs &
3458  + sigma_s + sigma_c )**0.5_rp
3459  coef_acc_ncs = &
3460  ( delta_b0(i_mp_qc)*dcdc + delta_ab0(i_mp_qs,i_mp_qc)*dcds + delta_b0(i_mp_qs)*dsds ) &
3461  * ( theta_b0(i_mp_qc)*vcvc - theta_ab0(i_mp_qs,i_mp_qc)*vcvs + theta_b0(i_mp_qs)*vsvs &
3462  + sigma_s + sigma_c )**0.5_rp
3463  pac(i_lsaclc2ls,k,i,j)= -0.25_rp*pi*e_sc*rhoq(i_ns,k,i,j)*rhoq(i_qc,k,i,j)*coef_acc_lcs
3464  pac(i_nsacnc2ns,k,i,j)= -0.25_rp*pi*e_sc*rhoq(i_ns,k,i,j)*rhoq(i_nc,k,i,j)*coef_acc_ncs
3465  ! cloud-graupel => graupel
3466  ! reduction term of cloud
3467  coef_acc_lcg = &
3468  ( delta_b1(i_mp_qc)*dcdc + delta_ab1(i_mp_qg,i_mp_qc)*dcdg + delta_b0(i_mp_qg)*dgdg ) &
3469  * ( theta_b1(i_mp_qc)*vcvc - theta_ab1(i_mp_qg,i_mp_qc)*vcvg + theta_b0(i_mp_qg)*vgvg &
3470  + sigma_g + sigma_c )**0.5_rp
3471  coef_acc_ncg = &
3472  ( delta_b0(i_mp_qc)*dcdc + delta_ab0(i_mp_qg,i_mp_qc)*dcdg + delta_b0(i_mp_qg)*dgdg ) &
3473  * ( theta_b0(i_mp_qc)*vcvc - theta_ab0(i_mp_qg,i_mp_qc)*vcvg + theta_b0(i_mp_qg)*vgvg &
3474  + sigma_g + sigma_c )**0.5_rp
3475  pac(i_lgaclc2lg,k,i,j)= -0.25_rp*pi*e_gc*rhoq(i_ng,k,i,j)*rhoq(i_qc,k,i,j)*coef_acc_lcg
3476  pac(i_ngacnc2ng,k,i,j)= -0.25_rp*pi*e_gc*rhoq(i_ng,k,i,j)*rhoq(i_nc,k,i,j)*coef_acc_ncg
3477  ! snow-graupel => graupel
3478  coef_acc_lsg = &
3479  ( delta_b1(i_mp_qs)*dsds + delta_ab1(i_mp_qg,i_mp_qs)*dsdg + delta_b0(i_mp_qg)*dgdg ) &
3480  * ( theta_b1(i_mp_qs)*vsvs - theta_ab1(i_mp_qg,i_mp_qs)*vsvg + theta_b0(i_mp_qg)*vgvg &
3481  + sigma_g + sigma_s )**0.5_rp
3482  coef_acc_nsg = &
3483  ( delta_b0(i_mp_qs)*dsds + delta_ab0(i_mp_qg,i_mp_qs)*dsdg + delta_b0(i_mp_qg)*dgdg ) &
3484  ! [fix] T.Mitsui 08/05/08
3485  * ( theta_b0(i_mp_qs)*vsvs - theta_ab0(i_mp_qg,i_mp_qs)*vsvg + theta_b0(i_mp_qg)*vgvg &
3486  + sigma_g + sigma_s )**0.5_rp
3487  pac(i_lgacls2lg,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_gs*rhoq(i_ng,k,i,j)*rhoq(i_qs,k,i,j)*coef_acc_lsg
3488  pac(i_ngacns2ng,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_gs*rhoq(i_ng,k,i,j)*rhoq(i_ns,k,i,j)*coef_acc_nsg
3489  !------------------------------------------------------------------------
3490  ! ice-snow => snow
3491  ! reduction term of ice
3492  coef_acc_lis = &
3493  ( delta_b1(i_mp_qi)*didi + delta_ab1(i_mp_qs,i_mp_qi)*dids + delta_b0(i_mp_qs)*dsds ) &
3494  * ( theta_b1(i_mp_qi)*vivi - theta_ab1(i_mp_qs,i_mp_qi)*vivs + theta_b0(i_mp_qs)*vsvs &
3495  + sigma_i + sigma_s )**0.5_rp
3496  coef_acc_nis = &
3497  ( delta_b0(i_mp_qi)*didi + delta_ab0(i_mp_qs,i_mp_qi)*dids + delta_b0(i_mp_qs)*dsds ) &
3498  * ( theta_b0(i_mp_qi)*vivi - theta_ab0(i_mp_qs,i_mp_qi)*vivs + theta_b0(i_mp_qs)*vsvs &
3499  + sigma_i + sigma_s )**0.5_rp
3500  pac(i_liacls2ls,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_si*rhoq(i_ns,k,i,j)*rhoq(i_qi,k,i,j)*coef_acc_lis
3501  pac(i_niacns2ns,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_si*rhoq(i_ns,k,i,j)*rhoq(i_ni,k,i,j)*coef_acc_nis
3502  !
3503  sw = sign(0.5_rp, t00-tem(k,i,j)) + 0.5_rp
3504  ! if ( tem(k,i,j) <= T00 )then
3505  ! rain-graupel => graupel
3506  ! reduction term of rain
3507  ! sw = 1
3508  ! else
3509  ! rain-graupel => rain
3510  ! reduction term of graupel
3511  ! sw = 0
3512  coef_acc_lrg = &
3513  ( ( delta_b1(i_mp_qr)*drdr + delta_ab1(i_mp_qg,i_mp_qr)*drdg + delta_b0(i_mp_qg)*dgdg ) * sw &
3514  + ( delta_b1(i_mp_qg)*dgdg + delta_ab1(i_mp_qr,i_mp_qg)*drdg + delta_b0(i_mp_qr)*drdr ) * (1.0_rp-sw) ) &
3515  * sqrt( ( theta_b1(i_mp_qr)*vrvr - theta_ab1(i_mp_qg,i_mp_qr)*vrvg + theta_b0(i_mp_qg)*vgvg ) * sw &
3516  + ( theta_b1(i_mp_qg)*vgvg - theta_ab1(i_mp_qr,i_mp_qg)*vrvg + theta_b0(i_mp_qr)*vrvr ) * (1.0_rp-sw) &
3517  + sigma_r + sigma_g )
3518  pac(i_lraclg2lg,k,i,j) = -0.25_rp*pi*e_gr*coef_acc_lrg &
3519  * ( rhoq(i_ng,k,i,j)*rhoq(i_qr,k,i,j) * sw &
3520  + rhoq(i_nr,k,i,j)*rhoq(i_qg,k,i,j) * (1.0_rp-sw) )
3521  coef_acc_nrg = &
3522  ( delta_b0(i_mp_qr)*drdr + delta_ab0(i_mp_qg,i_mp_qr)*drdg + delta_b0(i_mp_qg)*dgdg ) &
3523  * ( theta_b0(i_mp_qr)*vrvr - theta_ab0(i_mp_qg,i_mp_qr)*vrvg + theta_b0(i_mp_qg)*vgvg &
3524  + sigma_r + sigma_g )**0.5_rp
3525  pac(i_nracng2ng,k,i,j) = -0.25_rp*pi*e_gr*rhoq(i_ng,k,i,j)*rhoq(i_nr,k,i,j)*coef_acc_nrg
3526  !
3527  !------------------------------------------------------------------------
3528  !
3529  !+++ pattern 2: a + b => c (a>b)
3530  ! (r-i,r-s)
3531  !------------------------------------------------------------------------
3532  ! rain-ice => graupel
3533  ! reduction term of ice
3534  coef_acc_lri_i = &
3535  ( delta_b1(i_mp_qi)*didi + delta_ab1(i_mp_qr,i_mp_qi)*drdi + delta_b0(i_mp_qr)*drdr ) &
3536  * ( theta_b1(i_mp_qi)*vivi - theta_ab1(i_mp_qr,i_mp_qi)*vrvi + theta_b0(i_mp_qr)*vrvr &
3537  + sigma_r + sigma_i )**0.5_rp
3538  coef_acc_nri_i = &
3539  ( delta_b0(i_mp_qi)*didi + delta_ab0(i_mp_qr,i_mp_qi)*drdi + delta_b0(i_mp_qr)*drdr ) &
3540  * ( theta_b0(i_mp_qi)*vivi - theta_ab0(i_mp_qr,i_mp_qi)*vrvi + theta_b0(i_mp_qr)*vrvr &
3541  + sigma_r + sigma_i )**0.5_rp
3542  pac(i_lracli2lg_i,k,i,j)= -0.25_rp*pi*e_ir*rhoq(i_nr,k,i,j)*rhoq(i_qi,k,i,j)*coef_acc_lri_i
3543  pac(i_nracni2ng_i,k,i,j)= -0.25_rp*pi*e_ir*rhoq(i_nr,k,i,j)*rhoq(i_ni,k,i,j)*coef_acc_nri_i
3544  ! reduction term of rain
3545  coef_acc_lri_r = &
3546  ( delta_b1(i_mp_qr)*drdr + delta_ab1(i_mp_qi,i_mp_qr)*drdi + delta_b0(i_mp_qi)*didi ) &
3547  * ( theta_b1(i_mp_qr)*vrvr - theta_ab1(i_mp_qi,i_mp_qr)*vrvi + theta_b0(i_mp_qi)*vivi &
3548  + sigma_r + sigma_i )**0.5_rp
3549  coef_acc_nri_r = &
3550  ( delta_b0(i_mp_qr)*drdr + delta_ab0(i_mp_qi,i_mp_qr)*drdi + delta_b0(i_mp_qi)*didi ) &
3551  * ( theta_b0(i_mp_qr)*vrvr - theta_ab0(i_mp_qi,i_mp_qr)*vrvi + theta_b0(i_mp_qi)*vivi &
3552  + sigma_r + sigma_i )**0.5_rp
3553  pac(i_lracli2lg_r,k,i,j)= -0.25_rp*pi*e_ir*rhoq(i_ni,k,i,j)*rhoq(i_qr,k,i,j)*coef_acc_lri_r
3554  pac(i_nracni2ng_r,k,i,j)= -0.25_rp*pi*e_ir*rhoq(i_ni,k,i,j)*rhoq(i_nr,k,i,j)*coef_acc_nri_r
3555  ! rain-snow => graupel
3556  ! reduction term of snow
3557  coef_acc_lrs_s = &
3558  ( delta_b1(i_mp_qs)*dsds + delta_ab1(i_mp_qr,i_mp_qs)*drds + delta_b0(i_mp_qr)*drdr ) &
3559  * ( theta_b1(i_mp_qs)*vsvs - theta_ab1(i_mp_qr,i_mp_qs)*vrvs + theta_b0(i_mp_qr)*vrvr &
3560  + sigma_r + sigma_s )**0.5_rp
3561  coef_acc_nrs_s = &
3562  ( delta_b0(i_mp_qs)*dsds + delta_ab0(i_mp_qr,i_mp_qs)*drds + delta_b0(i_mp_qr)*drdr ) &
3563  * ( theta_b0(i_mp_qs)*vsvs - theta_ab0(i_mp_qr,i_mp_qs)*vrvs + theta_b0(i_mp_qr)*vrvr &
3564  + sigma_r + sigma_s )**0.5_rp
3565  pac(i_lracls2lg_s,k,i,j)= -0.25_rp*pi*e_sr*rhoq(i_nr,k,i,j)*rhoq(i_qs,k,i,j)*coef_acc_lrs_s
3566  pac(i_nracns2ng_s,k,i,j)= -0.25_rp*pi*e_sr*rhoq(i_nr,k,i,j)*rhoq(i_ns,k,i,j)*coef_acc_nrs_s
3567  ! reduction term of rain
3568  coef_acc_lrs_r = &
3569  ( delta_b1(i_mp_qr)*drdr + delta_ab1(i_mp_qs,i_mp_qr)*drds + delta_b0(i_mp_qs)*dsds ) &
3570  * ( theta_b1(i_mp_qr)*vrvr - theta_ab1(i_mp_qs,i_mp_qr)*vrvs + theta_b0(i_mp_qs)*vsvs &
3571  + sigma_r + sigma_s )**0.5_rp
3572  coef_acc_nrs_r = &
3573  ( delta_b0(i_mp_qr)*drdr + delta_ab0(i_mp_qs,i_mp_qr)*drds + delta_b0(i_mp_qs)*dsds ) &
3574  * ( theta_b0(i_mp_qr)*vrvr - theta_ab0(i_mp_qs,i_mp_qr)*vrvs + theta_b0(i_mp_qs)*vsvs &
3575  + sigma_r + sigma_s )**0.5_rp
3576  pac(i_lracls2lg_r,k,i,j)= -0.25_rp*pi*e_sr*rhoq(i_ns,k,i,j)*rhoq(i_qr,k,i,j)*coef_acc_lrs_r
3577  pac(i_nracns2ng_r,k,i,j)= -0.25_rp*pi*e_sr*rhoq(i_ns,k,i,j)*rhoq(i_nr,k,i,j)*coef_acc_nrs_r
3578  !------------------------------------------------------------------------
3579  !
3580  !+++ pattern 3: a + a => b (i-i)
3581  !
3582  !------------------------------------------------------------------------
3583  ! ice-ice ( reduction is double, but includes double-count)
3584  coef_acc_lii = &
3585  ( delta_b0(i_mp_qi)*didi + delta_ab1(i_mp_qi,i_mp_qi)*didi + delta_b1(i_mp_qi)*didi ) &
3586  * ( theta_b0(i_mp_qi)*vivi - theta_ab1(i_mp_qi,i_mp_qi)*vivi + theta_b1(i_mp_qi)*vivi &
3587  + sigma_i + sigma_i )**0.5_rp
3588  coef_acc_nii = &
3589  ( delta_b0(i_mp_qi)*didi + delta_ab0(i_mp_qi,i_mp_qi)*didi + delta_b0(i_mp_qi)*didi ) &
3590  * ( theta_b0(i_mp_qi)*vivi - theta_ab0(i_mp_qi,i_mp_qi)*vivi + theta_b0(i_mp_qi)*vivi &
3591  + sigma_i + sigma_i )**0.5_rp
3592  pac(i_liacli2ls,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_ii*rhoq(i_ni,k,i,j)*rhoq(i_qi,k,i,j)*coef_acc_lii
3593  pac(i_niacni2ns,k,i,j)= -0.25_rp*pi*e_stick(k,i,j)*e_ii*rhoq(i_ni,k,i,j)*rhoq(i_ni,k,i,j)*coef_acc_nii
3594  !
3595 ! ci_aut(k,i,j) = 0.25_RP*pi*E_ii*rhoq(I_NI,k,i,j)*coef_acc_LII
3596 ! taui_aut(k,i,j) = 1._RP/max(E_stick(k,i,j)*ci_aut(k,i,j),1.E-10_RP)
3597 ! tau_sce(k,i,j) = rhoq(I_QI,k,i,j)/max(rhoq(I_QI,k,i,j)+rhoq(I_QS,k,i,j),1.E-10_RP)
3598  !------------------------------------------------------------------------
3599  !
3600  !+++ pattern 4: a + a => a (s-s)
3601  !
3602  !------------------------------------------------------------------------
3603  ! snow-snow => snow
3604  coef_acc_nss = &
3605  ( delta_b0(i_mp_qs)*dsds + delta_ab0(i_mp_qs,i_mp_qs)*dsds + delta_b0(i_mp_qs)*dsds ) &
3606  * ( theta_b0(i_mp_qs)*vsvs - theta_ab0(i_mp_qs,i_mp_qs)*vsvs + theta_b0(i_mp_qs)*vsvs &
3607  + sigma_s + sigma_s )**0.5_rp
3608  pac(i_nsacns2ns,k,i,j)= -0.125_rp*pi*e_stick(k,i,j)*e_ss*rhoq(i_ns,k,i,j)*rhoq(i_ns,k,i,j)*coef_acc_nss
3609  !
3610  ! graupel-grauple => graupel
3611  coef_acc_ngg = &
3612  ( delta_b0(i_mp_qg)*dgdg + delta_ab0(i_mp_qg,i_mp_qg)*dgdg + delta_b0(i_mp_qg)*dgdg ) &
3613  * ( theta_b0(i_mp_qg)*vgvg - theta_ab0(i_mp_qg,i_mp_qg)*vgvg + theta_b0(i_mp_qg)*vgvg &
3614  + sigma_g + sigma_g )**0.5_rp
3615  pac(i_ngacng2ng,k,i,j)= -0.125_rp*pi*e_stick(k,i,j)*e_gg*rhoq(i_ng,k,i,j)*rhoq(i_ng,k,i,j)*coef_acc_ngg
3616  !
3617  !------------------------------------------------------------------------
3618  !--- Partial conversion
3619  ! SB06(70),(71)
3620  ! i_iconv2g: option whether partial conversions work or not
3621  ! ice-cloud => graupel
3622  sw = 0.5_rp - sign(0.5_rp,di_cri-ave_di) ! if( ave_di > di_cri )then sw=1
3623  wx_cri = cfill_i*dwatr/rho_g*( pi/6.0_rp*rho_g*ave_di*ave_di*ave_di/xq(i_mp_qi,k,i,j) - 1.0_rp ) * sw
3624  pq(i_licon,k,i,j) = i_iconv2g * pac(i_liaclc2li,k,i,j)/max(1.0_rp, wx_cri) * sw
3625  pq(i_nicon,k,i,j) = i_iconv2g * pq(i_licon,k,i,j)/xq(i_mp_qi,k,i,j) * sw
3626 
3627  ! snow-cloud => graupel
3628  wx_crs = cfill_s*dwatr/rho_g*( pi/6.0_rp*rho_g*ave_ds*ave_ds*ave_ds/xq(i_mp_qs,k,i,j) - 1.0_rp )
3629  pq(i_lscon,k,i,j) = i_sconv2g * (pac(i_lsaclc2ls,k,i,j))/max(1.0_rp, wx_crs)
3630  pq(i_nscon,k,i,j) = i_sconv2g * pq(i_lscon,k,i,j)/xq(i_mp_qs,k,i,j)
3631  !------------------------------------------------------------------------
3632  !--- enhanced melting( due to collection-freezing of water droplets )
3633  ! originally from Rutledge and Hobbs(1984). eq.(A.21)
3634  ! if T > 273.15 then temc_p=T-273.15, else temc_p=0
3635  ! 08/05/08 [fix] T.Mitsui LHF00 => LHF0
3636  ! melting occurs around T=273K, so LHF0 is suitable both SIMPLE and EXACT,
3637  ! otherwise LHF can have sign both negative(EXACT) and positive(SIMPLE).
3638 !!$ coef_emelt = -CL/LHF00*temc_p
3639  coef_emelt = cl/lhf0*temc_p
3640  ! cloud-graupel
3641  pq(i_lgacm,k,i,j) = coef_emelt*pac(i_lgaclc2lg,k,i,j)
3642  pq(i_ngacm,k,i,j) = pq(i_lgacm,k,i,j)/xq(i_mp_qg,k,i,j)
3643  ! rain-graupel
3644  pq(i_lgarm,k,i,j) = coef_emelt*pac(i_lraclg2lg,k,i,j)
3645  pq(i_ngarm,k,i,j) = pq(i_lgarm,k,i,j)/xq(i_mp_qg,k,i,j)
3646  ! cloud-snow
3647  pq(i_lsacm,k,i,j) = coef_emelt*(pac(i_lsaclc2ls,k,i,j))
3648  pq(i_nsacm,k,i,j) = pq(i_lsacm,k,i,j)/xq(i_mp_qs,k,i,j)
3649  ! rain-snow
3650  pq(i_lsarm,k,i,j) = coef_emelt*(pac(i_lracls2lg_r,k,i,j)+pac(i_lracls2lg_s,k,i,j))
3651  pq(i_nsarm,k,i,j) = pq(i_lsarm,k,i,j)/xq(i_mp_qg,k,i,j) ! collect? might be I_mp_QS
3652  ! cloud-ice
3653  pq(i_liacm,k,i,j) = coef_emelt*pac(i_liaclc2li,k,i,j)
3654  pq(i_niacm,k,i,j) = pq(i_liacm,k,i,j)/xq(i_mp_qi,k,i,j)
3655  ! rain-ice
3656  pq(i_liarm,k,i,j) = coef_emelt*(pac(i_lracli2lg_r,k,i,j)+pac(i_lracli2lg_i,k,i,j))
3657  pq(i_niarm,k,i,j) = pq(i_liarm,k,i,j)/xq(i_mp_qg,k,i,j) ! collect? might be I_mp_QI
3658  end do
3659  end do
3660  end do
3661  profile_stop("sn14_collection")
3662 
3663  !
3664  return
module atmosphere / saturation
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ aut_acc_slc_brk_kij()

subroutine scale_atmos_phy_mp_sn14::aut_acc_slc_brk_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  xq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  dq_xave,
real(rp), dimension(ka,ia,ja), intent(in)  rho,
real(rp), dimension(pq_max,ka,ia,ja), intent(inout)  PQ 
)

Definition at line 3673 of file scale_atmos_phy_mp_sn14.F90.

References scale_const::const_eps.

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

3673  implicit none
3674 
3675  integer, intent(in) :: ka, ks, ke
3676  integer, intent(in) :: ia, is, ie
3677  integer, intent(in) :: ja, js, je
3678  !
3679  real(RP), intent(in) :: rhoq(i_qv:i_ng,ka,ia,ja)
3680  real(RP), intent(in) :: xq(hydro_max,ka,ia,ja)
3681  real(RP), intent(in) :: dq_xave(hydro_max,ka,ia,ja)
3682  real(RP), intent(in) :: rho(ka,ia,ja)
3683  !
3684  real(RP), intent(inout) :: pq(pq_max,ka,ia,ja)
3685  !
3686  ! parameter for autoconversion
3687  real(RP), parameter :: kcc = 4.44e+9_rp ! collision efficiency [m3/kg2/sec]
3688  real(RP), parameter :: tau_min = 1.e-20_rp ! empirical filter by T.Mitsui
3689  real(RP), parameter :: rx_sep = 1.0_rp/x_sep ! 1/x_sep, 10/08/03 [Add] T.Mitsui
3690  !
3691  ! parameter for accretion
3692  real(RP), parameter :: kcr = 5.8_rp ! collision efficiency [m3/kg2/sec]
3693  real(RP), parameter :: thr_acc = 5.e-5_rp ! threshold for universal function original
3694  !
3695  ! parameter for self collection and collison break-up
3696  real(RP), parameter :: krr = 4.33_rp ! k_rr, S08 (35)
3697  real(RP), parameter :: kaprr = 60.7_rp ! kappa_rr, SB06(11)
3698  real(RP), parameter :: kbr = 1000._rp ! k_br, SB06(14)
3699  real(RP), parameter :: kapbr = 2.3e+3_rp ! kappa_br, SB06(15)
3700  real(RP), parameter :: dr_min = 0.35e-3_rp ! minimum diameter, SB06(13)-(15)
3701  !
3702  ! work variables
3703  real(RP) :: coef_nuc0 ! coefficient of number for Auto-conversion
3704  real(RP) :: coef_nuc1 ! mass
3705  real(RP) :: coef_aut0 ! number
3706  real(RP) :: coef_aut1 ! mass
3707  real(RP) :: lwc ! lc+lr
3708  real(RP) :: tau ! conversion ratio: qr/(qc+qr) ranges [0:1]
3709  real(RP) :: rho_fac ! factor of air density
3710  real(RP) :: psi_aut ! Universal function of Auto-conversion
3711  real(RP) :: psi_acc ! Universal function of Accretion
3712  real(RP) :: psi_brk ! Universal function of Breakup
3713  real(RP) :: ddr ! diameter difference from equilibrium
3714  !
3715  integer :: i, j, k
3716  !
3717  coef_nuc0 = (nu(i_mp_qc)+2.0_rp)/(nu(i_mp_qc)+1.0_rp)
3718  coef_nuc1 = (nu(i_mp_qc)+2.0_rp)*(nu(i_mp_qc)+4.0_rp)/(nu(i_mp_qc)+1.0_rp)/(nu(i_mp_qc)+1.0_rp)
3719  coef_aut0 = -kcc*coef_nuc0
3720  coef_aut1 = -kcc/x_sep/20._rp*coef_nuc1
3721  !
3722  do j = js, je
3723  do i = is, ie
3724  do k = ks, ke
3725  lwc = rhoq(i_qr,k,i,j)+rhoq(i_qc,k,i,j)
3726  if( lwc > xc_min )then
3727  tau = max(tau_min, rhoq(i_qr,k,i,j)/lwc)
3728  else
3729  tau = tau_min
3730  end if
3731  rho_fac = sqrt(rho_0/max(rho(k,i,j),rho_min))
3732  !
3733  ! Auto-conversion ( cloud-cloud => rain )
3734  psi_aut = 400._rp*(tau**0.7_rp)*(1.0_rp - (tau**0.7_rp))**3 ! (6) SB06
3735  pq(i_ncaut,k,i,j) = coef_aut0*rhoq(i_qc,k,i,j)*rhoq(i_qc,k,i,j)*rho_fac*rho_fac ! (9) SB06 sc+aut
3736  ! lc = lwc*(1-tau), lr = lwc*tau
3737  pq(i_lcaut,k,i,j) = coef_aut1*lwc*lwc*xq(i_mp_qc,k,i,j)*xq(i_mp_qc,k,i,j) & ! (4) SB06
3738  *((1.0_rp-tau)*(1.0_rp-tau) + psi_aut)*rho_fac*rho_fac !
3739  pq(i_nraut,k,i,j) = -rx_sep*pq(i_lcaut,k,i,j) ! (A7) SB01
3740  !
3741  ! Accretion ( cloud-rain => rain )
3742  psi_acc =(tau/(tau+thr_acc))**4 ! (8) SB06
3743  pq(i_lcacc,k,i,j) = -kcr*rhoq(i_qc,k,i,j)*rhoq(i_qr,k,i,j)*rho_fac*psi_acc ! (7) SB06
3744  pq(i_ncacc,k,i,j) = -kcr*rhoq(i_nc,k,i,j)*rhoq(i_qr,k,i,j)*rho_fac*psi_acc ! (A6) SB01
3745  !
3746  ! Self-collection ( rain-rain => rain )
3747  pq(i_nrslc,k,i,j) = -krr*rhoq(i_nr,k,i,j)*rhoq(i_qr,k,i,j)*rho_fac ! (A.8) SB01
3748  !
3749  ! Collisional breakup of rain
3750  ddr = min(1.e-3_rp, dq_xave(i_mp_qr,k,i,j) - dr_eq )
3751  if ( dq_xave(i_mp_qr,k,i,j) < dr_min ) then ! negligible
3752  psi_brk = -1.0_rp
3753  else if ( dq_xave(i_mp_qr,k,i,j) <= dr_eq ) then
3754  psi_brk = kbr*ddr ! (14) SB06
3755  else
3756  psi_brk = exp(kapbr*ddr) - 1.0_rp ! (15) SB06 (SB06 has a typo)
3757  end if
3758  pq(i_nrbrk,k,i,j) = - (psi_brk + 1.0_rp)*pq(i_nrslc,k,i,j) ! (13) SB06
3759  !
3760  end do
3761  end do
3762  end do
3763  !
3764  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ freezing_water_kij()

subroutine scale_atmos_phy_mp_sn14::freezing_water_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
real(rp), intent(in)  dt,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq,
real(rp), dimension(hydro_max,ka,ia,ja), intent(in)  xq,
real(rp), dimension(ka,ia,ja), intent(in)  tem,
real(rp), dimension(pq_max,ka,ia,ja), intent(inout)  PQ 
)

Definition at line 4016 of file scale_atmos_phy_mp_sn14.F90.

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

4016  implicit none
4017  !
4018  ! In this subroutine,
4019  ! We assumed surface temperature of droplets are same as environment.
4020 
4021  integer, intent(in) :: ka, ks, ke
4022  integer, intent(in) :: ia, is, ie
4023  integer, intent(in) :: ja, js, je
4024 
4025  real(RP), intent(in) :: dt
4026  !
4027  real(RP), intent(in) :: tem(ka,ia,ja)
4028  !
4029  real(RP), intent(in) :: rhoq(i_qv:i_ng,ka,ia,ja)
4030  real(RP), intent(in) :: xq(hydro_max,ka,ia,ja)
4031  !
4032  real(RP), intent(inout):: pq(pq_max,ka,ia,ja)
4033  !
4034  real(RP), parameter :: temc_min = -65.0_rp
4035  real(RP), parameter :: a_het = 0.2_rp ! SB06 (44)
4036  real(RP), parameter :: b_het = 0.65_rp ! SB06 (44)
4037  !
4038  real(RP) :: coef_m2_c
4039  real(RP) :: coef_m2_r
4040  ! temperature [celsius]
4041  real(RP) :: temc, temc2, temc3, temc4
4042  ! temperature function of homegenous/heterogenous freezing
4043  real(RP) :: jhom, jhet
4044  real(RP) :: rdt
4045  real(RP) :: tmp
4046  !
4047  integer :: i,j,k
4048  !
4049  rdt = 1.0_rp/dt
4050  !
4051  coef_m2_c = coef_m2(i_mp_qc)
4052  coef_m2_r = coef_m2(i_mp_qr)
4053  !
4054  profile_start("sn14_freezing")
4055  do j = js, je
4056  do i = is, ie
4057  do k = ks, ke
4058  temc = max( tem(k,i,j) - t00, temc_min )
4059  ! These cause from aerosol-droplet interaction.
4060  ! Bigg(1953) formula, Khain etal.(2000) eq.(4.5), Pruppacher and Klett(1997) eq.(9-48)
4061  jhet = a_het*exp( -b_het*temc - 1.0_rp )
4062  ! These cause in nature.
4063  ! Cotton and Field 2002, QJRMS. (12)
4064  if( temc < -65.0_rp )then
4065  jhom = 10.0_rp**(24.37236_rp)*1.e+3_rp
4066  jhet = a_het*exp( 65.0_rp*b_het - 1.0_rp ) ! 09/04/14 [Add], fixer T.Mitsui
4067  else if( temc < -30.0_rp ) then
4068  temc2 = temc*temc
4069  temc3 = temc*temc2
4070  temc4 = temc2*temc2
4071  jhom = 10.0_rp**(&
4072  - 243.40_rp - 14.75_rp*temc - 0.307_rp*temc2 &
4073  - 0.00287_rp*temc3 - 0.0000102_rp*temc4 ) *1.e+3_rp
4074  else if( temc < 0.0_rp) then
4075  jhom = 10._rp**(-7.63_rp-2.996_rp*(temc+30.0_rp))*1.e+3_rp
4076  else
4077  jhom = 0.0_rp
4078  jhet = 0.0_rp
4079  end if
4080  ! Note, xc should be limited in range[xc_min:xc_max].
4081  ! and PNChom need to be calculated by NC
4082  ! because reduction rate of Nc need to be bound by NC.
4083  ! For the same reason PLChom also bound by LC and xc.
4084  ! Basically L and N should be independent
4085  ! but average particle mass x should be in suitable range.
4086  ! Homogenous Freezing
4087  pq(i_lchom,k,i,j) = 0.0_rp
4088  pq(i_nchom,k,i,j) = 0.0_rp
4089  ! Heterogenous Freezing
4090 #if defined(PGI) || defined(SX)
4091  tmp = min( xq(i_mp_qc,k,i,j)*(jhet+jhom)*dt, 1.e+3_rp) ! apply exp limiter
4092  pq(i_lchet,k,i,j) = -rdt*rhoq(i_qc,k,i,j)*( 1.0_rp - exp( -coef_m2_c*tmp ) )
4093  pq(i_nchet,k,i,j) = -rdt*rhoq(i_nc,k,i,j)*( 1.0_rp - exp( - tmp ) )
4094 
4095  tmp = min( xq(i_mp_qr,k,i,j)*(jhet+jhom)*dt, 1.e+3_rp) ! apply exp limiter
4096  pq(i_lrhet,k,i,j) = -rdt*rhoq(i_qr,k,i,j)*( 1.0_rp - exp( -coef_m2_r*tmp ) )
4097  pq(i_nrhet,k,i,j) = -rdt*rhoq(i_nr,k,i,j)*( 1.0_rp - exp( - tmp ) )
4098 #else
4099  pq(i_lchet,k,i,j) = -rdt*rhoq(i_qc,k,i,j)*( 1.0_rp - exp( -coef_m2_c*xq(i_mp_qc,k,i,j)*(jhet+jhom)*dt ) )
4100  pq(i_nchet,k,i,j) = -rdt*rhoq(i_nc,k,i,j)*( 1.0_rp - exp( - xq(i_mp_qc,k,i,j)*(jhet+jhom)*dt ) )
4101  pq(i_lrhet,k,i,j) = -rdt*rhoq(i_qr,k,i,j)*( 1.0_rp - exp( -coef_m2_r*xq(i_mp_qr,k,i,j)*(jhet+jhom)*dt ) )
4102  pq(i_nrhet,k,i,j) = -rdt*rhoq(i_nr,k,i,j)*( 1.0_rp - exp( - xq(i_mp_qr,k,i,j)*(jhet+jhom)*dt ) )
4103 #endif
4104  end do
4105  end do
4106  end do
4107  profile_stop("sn14_freezing")
4108  !
4109  return
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ atmos_phy_mp_sn14_terminal_velocity()

subroutine, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_terminal_velocity ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
real(rp), dimension(ka), intent(in)  DENS,
real(rp), dimension(ka), intent(in)  TEMP,
real(rp), dimension(ka,i_qc:i_ng), intent(in)  RHOQ,
real(rp), dimension(ka), intent(in)  PRES,
real(rp), dimension(ka,qa_mp-1), intent(out)  vterm 
)

ATMOS_PHY_MP_sn14_terminal_velocity Calculate terminal velocity.

Definition at line 4124 of file scale_atmos_phy_mp_sn14.F90.

References scale_const::const_undef, and qa_mp.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_calc_tendency().

4124  use scale_const, only: &
4125  const_undef
4126  implicit none
4127 
4128  integer, intent(in) :: ka, ks, ke
4129 
4130  real(RP), intent(in) :: rhoq(ka,i_qc:i_ng) ! rho * q
4131  real(RP), intent(in) :: dens(ka) ! rho
4132  real(RP), intent(in) :: temp(ka) ! temperature
4133  real(RP), intent(in) :: pres(ka) ! pressure
4134 
4135  real(RP), intent(out) :: vterm(ka,qa_mp-1) ! terminal velocity of cloud mass
4136 
4137  real(RP) :: xq ! average mass of 1 particle( mass/number )
4138 
4139  real(RP) :: rhofac ! density factor for terminal velocity( air friction )
4140  real(RP) :: rhofac_q(hydro_max)
4141 
4142  real(RP) :: rlambdar ! work for diagnosis of Rain DSD ( Seifert, 2008 )
4143  real(RP) :: mud_r
4144  real(RP) :: dq, dql ! weigthed diameter. Improved Rogers etal. (1993) formula by T.Mitsui
4145 
4146 
4147  real(RP) :: weight ! weighting coefficient for 2-branches is determined by ratio between 0.745mm and weighted diameter. SB06 Table.1
4148  real(RP) :: velq_s ! terminal velocity for small branch of Rogers formula
4149  real(RP) :: velq_l ! terminal velocity for large branch of Rogers formula
4150 
4151  real(RP) :: tmp
4152  integer :: k, i, j, iq
4153  !---------------------------------------------------------------------------
4154 
4155  profile_start("sn14_terminal_vel")
4156 
4157  mud_r = 3.0_rp * nu(i_mp_qr) + 2.0_rp
4158 
4159 
4160  do k = ks, ke
4161  rhofac = rho_0 / max( dens(k), rho_min )
4162 
4163  ! QC
4164  rhofac_q(i_mp_qc) = rhofac ** gamma_v(i_mp_qc)
4165  xq = max( xqmin(i_mp_qc), min( xqmax(i_mp_qc), rhoq(k,i_qc) / ( rhoq(k,i_nc) + nqmin(i_mp_qc) ) ) )
4166 
4167  vterm(k,i_mp_qc) = -rhofac_q(i_mp_qc) * coef_vt1(i_mp_qc,1) * xq**beta_v(i_mp_qc,1)
4168  ! NC
4169  vterm(k,i_mp_nc) = -rhofac_q(i_mp_qc) * coef_vt0(i_mp_qc,1) * xq**beta_vn(i_mp_qc,1)
4170 
4171  ! QR
4172  rhofac_q(i_mp_qr) = rhofac ** gamma_v(i_mp_qr)
4173  xq = max( xqmin(i_mp_qr), min( xqmax(i_mp_qr), rhoq(k,i_qr) / ( rhoq(k,i_nr) + nqmin(i_mp_qr) ) ) )
4174 
4175  rlambdar = a_m(i_mp_qr) * xq**b_m(i_mp_qr) &
4176  * ( (mud_r+3.0_rp) * (mud_r+2.0_rp) * (mud_r+1.0_rp) )**(-0.333333333_rp)
4177  dq = ( 4.0_rp + mud_r ) * rlambdar ! D^(3)+mu weighted mean diameter
4178  dql = dq
4179  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + tanh( pi * log( dq/d_vtr_branch ) ) ) ) )
4180 
4181  velq_s = coef_vtr_ar2 * dq &
4182  * ( 1.0_rp - ( 1.0_rp + coef_vtr_br2*rlambdar )**(-5.0_rp-mud_r) )
4183  velq_l = coef_vtr_ar1 - coef_vtr_br1 &
4184  * ( 1.0_rp + coef_vtr_cr1*rlambdar )**(-4.0_rp-mud_r)
4185  vterm(k,i_mp_qr) = -rhofac_q(i_mp_qr) &
4186  * ( velq_l * ( weight ) &
4187  + velq_s * ( 1.0_rp - weight ) )
4188  ! NR
4189  dq = ( 1.0_rp + mud_r ) * rlambdar
4190  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + tanh( pi * log( dq/d_vtr_branch ) ) ) ) )
4191 
4192  velq_s = coef_vtr_ar2 * dql &
4193  * ( 1.0_rp - ( 1.0_rp + coef_vtr_br2*rlambdar )**(-2.0_rp-mud_r) )
4194  velq_l = coef_vtr_ar1 - coef_vtr_br1 &
4195  * ( 1.0_rp + coef_vtr_cr1*rlambdar )**(-1.0_rp-mud_r)
4196  vterm(k,i_mp_nr) = -rhofac_q(i_mp_qr) &
4197  * ( velq_l * ( weight ) &
4198  + velq_s * ( 1.0_rp - weight ) )
4199 
4200  ! QI
4201  rhofac_q(i_mp_qi) = ( pres(k)/pre0_vt )**a_pre0_vt * ( temp(k)/tem0_vt )**a_tem0_vt
4202  xq = max( xqmin(i_mp_qi), min( xqmax(i_mp_qi), rhoq(k,i_qi) / ( rhoq(k,i_ni) + nqmin(i_mp_qi) ) ) )
4203 
4204  tmp = a_m(i_mp_qi) * xq**b_m(i_mp_qi)
4205  dq = coef_dave_l(i_mp_qi) * tmp
4206  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_li ) ) ) )
4207 
4208  velq_s = coef_vt1(i_mp_qi,1) * xq**beta_v(i_mp_qi,1)
4209  velq_l = coef_vt1(i_mp_qi,2) * xq**beta_v(i_mp_qi,2)
4210  vterm(k,i_mp_qi) = -rhofac_q(i_mp_qi) &
4211  * ( velq_l * ( weight ) &
4212  + velq_s * ( 1.0_rp - weight ) )
4213  ! NI
4214  dq = coef_dave_n(i_mp_qi) * tmp
4215  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_ni ) ) ) )
4216 
4217  velq_s = coef_vt0(i_mp_qi,1) * xq**beta_vn(i_mp_qi,1)
4218  velq_l = coef_vt0(i_mp_qi,2) * xq**beta_vn(i_mp_qi,2)
4219  vterm(k,i_mp_ni) = -rhofac_q(i_mp_qi) &
4220  * ( velq_l * ( weight ) &
4221  + velq_s * ( 1.0_rp - weight ) )
4222 
4223  ! QS
4224  rhofac_q(i_mp_qs) = rhofac_q(i_mp_qi)
4225  xq = max( xqmin(i_mp_qs), min( xqmax(i_mp_qs), rhoq(k,i_qs) / ( rhoq(k,i_ns) + nqmin(i_mp_qs) ) ) )
4226 
4227  tmp = a_m(i_mp_qs) * xq**b_m(i_mp_qs)
4228  dq = coef_dave_l(i_mp_qs) * tmp
4229  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_ls ) ) ) )
4230 
4231  velq_s = coef_vt1(i_mp_qs,1) * xq**beta_v(i_mp_qs,1)
4232  velq_l = coef_vt1(i_mp_qs,2) * xq**beta_v(i_mp_qs,2)
4233  vterm(k,i_mp_qs) = -rhofac_q(i_mp_qs) &
4234  * ( velq_l * ( weight ) &
4235  + velq_s * ( 1.0_rp - weight ) )
4236  ! NS
4237  dq = coef_dave_n(i_mp_qs) * tmp
4238  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_ns ) ) ) )
4239 
4240  velq_s = coef_vt0(i_mp_qs,1) * xq**beta_vn(i_mp_qs,1)
4241  velq_l = coef_vt0(i_mp_qs,2) * xq**beta_vn(i_mp_qs,2)
4242  vterm(k,i_mp_ns) = -rhofac_q(i_mp_qs) &
4243  * ( velq_l * ( weight ) &
4244  + velq_s * ( 1.0_rp - weight ) )
4245 
4246  ! QG
4247  rhofac_q(i_mp_qg) = rhofac_q(i_mp_qi)
4248  xq = max( xqmin(i_mp_qg), min( xqmax(i_mp_qg), rhoq(k,i_qg) / ( rhoq(k,i_ng) + nqmin(i_mp_qg) ) ) )
4249 
4250  tmp = a_m(i_mp_qg) * xq**b_m(i_mp_qg)
4251  dq = coef_dave_l(i_mp_qg) * tmp
4252  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_lg ) ) ) )
4253 
4254  velq_s = coef_vt1(i_mp_qg,1) * xq**beta_v(i_mp_qg,1)
4255  velq_l = coef_vt1(i_mp_qg,2) * xq**beta_v(i_mp_qg,2)
4256  vterm(k,i_mp_qg) = -rhofac_q(i_mp_qg) &
4257  * ( velq_l * ( weight ) &
4258  + velq_s * ( 1.0_rp - weight ) )
4259  ! NG
4260  dq = coef_dave_n(i_mp_qg) * tmp
4261  weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log( dq/d0_ng ) ) ) )
4262 
4263  velq_s = coef_vt0(i_mp_qg,1) * xq**beta_vn(i_mp_qg,1)
4264  velq_l = coef_vt0(i_mp_qg,2) * xq**beta_vn(i_mp_qg,2)
4265  vterm(k,i_mp_ng) = -rhofac_q(i_mp_qg) &
4266  * ( velq_l * ( weight ) &
4267  + velq_s * ( 1.0_rp - weight ) )
4268  enddo
4269 
4270  do iq = 1, qa_mp-1
4271  vterm(1:ks-2,iq) = const_undef
4272  vterm(ks-1,iq) = vterm(ks,iq)
4273  vterm(ke+1:ka,iq) = const_undef
4274  enddo
4275 
4276  profile_stop("sn14_terminal_vel")
4277 
4278  return
real(rp), public const_undef
Definition: scale_const.F90:41
integer, public ke
end point of inner domain: z, local
integer, public ks
start point of inner domain: z, local
module CONSTANT
Definition: scale_const.F90:11
integer, public ka
of whole cells: z, local, with HALO
Here is the caller graph for this function:

◆ update_by_phase_change_kij()

subroutine scale_atmos_phy_mp_sn14::update_by_phase_change_kij ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
integer, intent(in)  IA,
integer, intent(in)  IS,
integer, intent(in)  IE,
integer, intent(in)  JA,
integer, intent(in)  JS,
integer, intent(in)  JE,
integer, intent(in)  ntdiv,
integer, intent(in)  ntmax,
real(rp), intent(in)  dt,
real(rp), dimension(ka,ia,ja), intent(in)  cz,
real(rp), dimension(ka,ia,ja), intent(in)  fz,
real(rp), dimension(ka,ia,ja), intent(in)  w,
real(rp), dimension(ka,ia,ja), intent(in)  dTdt_rad,
real(rp), dimension(ka,ia,ja), intent(in)  rho,
real(rp), dimension(ka,ia,ja), intent(in)  qdry,
real(rp), dimension(ka,ia,ja), intent(in)  esw,
real(rp), dimension(ka,ia,ja), intent(in)  esi,
real(rp), dimension(i_qv:i_ng,ka,ia,ja), intent(in)  rhoq2,
real(rp), dimension(ka,ia,ja), intent(in)  pre,
real(rp), dimension(ka,ia,ja), intent(in)  tem,
real(rp), dimension(ka,ia,ja), intent(in)  cpa,
real(rp), dimension(ka,ia,ja), intent(in)  cva,
real(rp), dimension(pq_max,ka,ia,ja), intent(inout)  PQ,
real(rp), dimension(ia,ja), intent(inout)  sl_PLCdep,
real(rp), dimension(ia,ja), intent(inout)  sl_PLRdep,
real(rp), dimension(ia,ja), intent(inout)  sl_PNRdep,
real(rp), dimension(ka, ia, ja, qa_mp), intent(out)  RHOQ_t,
real(rp), dimension(ka, ia, ja), intent(out)  RHOE_t,
real(rp), dimension(ka,ia,ja), intent(out)  CPtot_t,
real(rp), dimension(ka,ia,ja), intent(out)  CVtot_t,
real(rp), dimension(ka,ia,ja), intent(out)  qc_evaporate 
)

Definition at line 4303 of file scale_atmos_phy_mp_sn14.F90.

References scale_atmos_hydrometeor::cp_ice, scale_atmos_hydrometeor::cp_vapor, scale_atmos_hydrometeor::cp_water, scale_atmos_hydrometeor::cv_ice, scale_atmos_hydrometeor::cv_vapor, scale_atmos_hydrometeor::cv_water, and scale_io::io_fid_conf.

Referenced by atmos_phy_mp_sn14_qhyd2qtrc().

4303 
4304  use scale_atmos_hydrometeor, only: &
4305  cp_vapor, &
4306  cp_water, &
4307  cp_ice, &
4308  cv_vapor, &
4309  cv_water, &
4310  cv_ice
4311  use scale_atmos_saturation, only: &
4312  moist_pres2qsat_liq => atmos_saturation_pres2qsat_liq, &
4313  moist_pres2qsat_ice => atmos_saturation_pres2qsat_ice, &
4314  moist_dqs_dtem_dens_liq => atmos_saturation_dqs_dtem_dens_liq, &
4315  moist_dqs_dtem_dens_ice => atmos_saturation_dqs_dtem_dens_ice, &
4316  moist_dqs_dtem_dpre_liq => atmos_saturation_dqs_dtem_dpre_liq, &
4317  moist_dqs_dtem_dpre_ice => atmos_saturation_dqs_dtem_dpre_ice
4318  implicit none
4319 
4320  integer, intent(in) :: ka, ks, ke
4321  integer, intent(in) :: ia, is, ie
4322  integer, intent(in) :: ja, js, je
4323 
4324  integer, intent(in) :: ntdiv ! [Add] 10/08/03
4325  integer, intent(in) :: ntmax ! [Add] 10/08/03
4326  !
4327  real(RP), intent(in) :: dt ! time step[s]
4328  !real(RP), intent(in) :: gsgam2(KA,IA,JA) ! metric
4329  real(RP), intent(in) :: cz(ka,ia,ja) ! altitude [m]
4330  real(RP), intent(in) :: fz(ka,ia,ja) ! altitude difference [m]
4331  real(RP), intent(in) :: w(ka,ia,ja) ! vertical velocity @ full level [m/s]
4332  real(RP), intent(in) :: dtdt_rad(ka,ia,ja) ! temperture tendency by radiation[K/s]
4333  real(RP), intent(in) :: rho(ka,ia,ja) ! density[kg/m3]
4334  real(RP), intent(in) :: qdry(ka,ia,ja) ! dry air mass ratio [kg/kg]
4335  real(RP), intent(in) :: esw(ka,ia,ja) ! saturated vapor pressure for liquid
4336  real(RP), intent(in) :: esi(ka,ia,ja) ! for ice
4337  real(RP), intent(in) :: rhoq2(i_qv:i_ng,ka,ia,ja)
4338 
4339  real(RP), intent(in) :: tem(ka,ia,ja) ! temperature[K]
4340  real(RP), intent(in) :: pre(ka,ia,ja) ! pressure[Pa]
4341  real(RP), intent(in) :: cva(ka,ia,ja) ! specific heat at constant volume
4342  real(RP), intent(in) :: cpa(ka,ia,ja) !
4343 
4344  !+++ tendency[kg/m3/s]
4345  real(RP), intent(inout) :: pq(pq_max,ka,ia,ja)
4346  !+++ Column integrated tendency[kg/m2/s]
4347  real(RP), intent(inout) :: sl_plcdep(ia,ja)
4348  real(RP), intent(inout) :: sl_plrdep(ia,ja), sl_pnrdep(ia,ja)
4349 
4350  real(RP),intent(out) :: rhoq_t(ka, ia, ja, qa_mp)
4351  real(RP),intent(out) :: rhoe_t(ka, ia, ja)
4352  real(RP),intent(out) :: cptot_t(ka,ia,ja)
4353  real(RP),intent(out) :: cvtot_t(ka,ia,ja)
4354 
4355  !+++ tendency[kg/m3/s]
4356  real(RP), intent(out) :: qc_evaporate(ka,ia,ja)
4357 
4358  real(RP) :: xi ! mean mass of ice particles
4359  real(RP) :: rrho ! 1/rho
4360  real(RP) :: wtem(ka,ia,ja) ! temperature[K]
4361  !
4362  real(RP) :: r_cva ! specific heat at constant volume
4363  !real(RP) :: cpa ! specific heat at constant pressure
4364  real(RP) :: r_cpa ! specific heat at constant pressure
4365  real(RP) :: qsw(ka,ia,ja) ! saturated mixing ratio for liquid
4366  real(RP) :: qsi(ka,ia,ja) ! saturated mixing ratio for solid
4367  real(RP) :: dqswdtem_rho(ka,ia,ja) ! (dqsw/dtem)_rho
4368  real(RP) :: dqsidtem_rho(ka,ia,ja) ! (dqsi/dtem)_rho
4369  real(RP) :: dqswdtem_pre(ka,ia,ja) ! (dqsw/dtem)_pre
4370  real(RP) :: dqsidtem_pre(ka,ia,ja) ! (dqsi/dtem)_pre
4371  real(RP) :: dqswdpre_tem(ka,ia,ja) ! (dqsw/dpre)_tem
4372  real(RP) :: dqsidpre_tem(ka,ia,ja) ! (dqsi/dpre)_tem
4373  !
4374  real(RP) :: w2 ! vetical velocity[m/s]
4375  real(RP) :: acnd ! Pdynliq + Bergeron-Findeisen
4376  real(RP) :: adep ! Pdyndep + Bergeron-Findeisen
4377  real(RP) :: aliqliq, asolliq
4378  real(RP) :: aliqsol, asolsol
4379  real(RP) :: pdynliq ! production term of ssw by vertical motion
4380  real(RP) :: pdynsol ! production term of ssi by vertical motion
4381  real(RP) :: pradliq ! production term of ssw by radiation
4382  real(RP) :: pradsol ! production term of ssi by radiation
4383  real(RP) :: taucnd, r_taucnd ! time scale of ssw change by MP
4384  real(RP) :: taudep, r_taudep ! time scale of ssi change by MP
4385  real(RP) :: taucnd_c(ka,ia,ja), r_taucnd_c ! by cloud
4386  real(RP) :: taucnd_r(ka,ia,ja), r_taucnd_r ! by rain
4387  real(RP) :: taudep_i(ka,ia,ja), r_taudep_i ! by ice
4388  real(RP) :: taudep_s(ka,ia,ja), r_taudep_s ! by snow
4389  real(RP) :: taudep_g(ka,ia,ja), r_taudep_g ! by graupel
4390  ! alternative tendency through changing ssw and ssi
4391  real(RP) :: pncdep ! [Add] 11/08/30 T.Mitsui
4392  real(RP) :: plr2nr, pli2ni, pls2ns, plg2ng
4393  real(RP) :: coef_a_cnd, coef_b_cnd
4394  real(RP) :: coef_a_dep, coef_b_dep
4395  !
4396  real(RP) :: frz_dqc
4397  real(RP) :: frz_dnc
4398  real(RP) :: frz_dqr
4399  real(RP) :: frz_dnr
4400  real(RP) :: mlt_dqi
4401  real(RP) :: mlt_dni
4402  real(RP) :: mlt_dqs
4403  real(RP) :: mlt_dns
4404  real(RP) :: mlt_dqg
4405  real(RP) :: mlt_dng
4406  real(RP) :: dep_dqi
4407  real(RP) :: dep_dni
4408  real(RP) :: dep_dqs
4409  real(RP) :: dep_dns
4410  real(RP) :: dep_dqg
4411  real(RP) :: dep_dng
4412  real(RP) :: dep_dqr
4413  real(RP) :: dep_dnr
4414  real(RP) :: dep_dqc
4415  real(RP) :: dep_dnc ! 11/08/30 [Add] T.Mitsui, dep_dnc
4416  real(RP) :: r_xc_ccn, r_xi_ccn ! 11/08/30 [Add] T.Mitsui
4417  !
4418  real(RP) :: drhoqv
4419  real(RP) :: drhoqc, drhoqr, drhoqi, drhoqs, drhoqg
4420  real(RP) :: drhonc, drhonr, drhoni, drhons, drhong
4421  !
4422  real(RP) :: fac1, fac2, fac3, fac4, fac5, fac6
4423  real(RP) :: r_rvaptem ! 1/(Rvap*tem)
4424  real(RP) :: pv ! vapor pressure
4425  real(RP) :: lvsw, lvsi ! saturated vapor density
4426  real(RP) :: dlvsw, dlvsi !
4427  ! [Add] 11/08/30 T.Mitsui
4428  real(RP) :: dcnd, ddep ! total cndensation/deposition
4429  real(RP) :: uplim_cnd ! upper limit of condensation
4430  real(RP) :: lowlim_cnd ! lower limit of evaporation
4431  ! [Add] 11/08/30 T.Mitsui
4432  real(RP) :: uplim_dep ! upper limit of condensation
4433  real(RP) :: lowlim_dep ! lower limit of evaporation
4434  real(RP) :: ssw, ssi ! supersaturation ratio
4435  real(RP) :: r_esw, r_esi ! 1/esw, 1/esi
4436  real(RP) :: r_lvsw, r_lvsi ! 1/(lvsw*ssw), 1/(lvsi*ssi)
4437  real(RP) :: r_dt ! 1/dt
4438  real(RP) :: ssw_o, ssi_o
4439 ! real(RP) :: dt_dyn
4440 ! real(RP) :: dt_mp
4441  !
4442 ! real(RP) :: tem_lh(KA,IA,JA)
4443 ! real(RP) :: dtemdt_lh(KA,IA,JA)
4444  real(RP), save :: fac_cndc = 1.0_rp
4445  logical, save :: opt_fix_taucnd_c=.false.
4446  logical, save :: flag_first =.true.
4447  !
4448  namelist / param_atmos_phy_mp_sn14_condensation / &
4449  opt_fix_taucnd_c, fac_cndc
4450 
4451  real(RP) :: fac_cndc_wrk
4452  !
4453  real(RP), parameter :: tau100day = 1.e+7_rp
4454  real(RP), parameter :: r_tau100day = 1.e-7_rp
4455  real(RP), parameter :: eps=1.e-30_rp
4456  !
4457  real(RP) :: dz
4458  !
4459  integer :: i,j,k,iqw
4460  real(RP) :: sw
4461  real(RP) :: dqv, dqc, dqr, dqi, dqs, dqg, dcv, dcp
4462  !
4463 
4464  ! [Add] 11/08/30 T.Mitsui
4465  if( flag_first )then
4466  flag_first = .false.
4467  rewind(io_fid_conf)
4468  read (io_fid_conf,nml=param_atmos_phy_mp_sn14_condensation, end=100)
4469 100 log_nml(param_atmos_phy_mp_sn14_condensation)
4470  end if
4471  !
4472 ! dt_dyn = dt*ntmax
4473 ! dt_mp = dt*(ntdiv-1)
4474  !
4475  r_dt = 1.0_rp/dt
4476  !
4477  r_xc_ccn=1.0_rp/xc_ccn
4478 ! r_xi_ccn=1.0_RP/xi_ccn
4479  !
4480  if( opt_fix_taucnd_c )then
4481  fac_cndc_wrk = fac_cndc**(1.0_rp-b_m(i_mp_qc))
4482  do j = js, je
4483  do i = is, ie
4484  do k = ks, ke
4485  pq(i_lcdep,k,i,j) = pq(i_lcdep,k,i,j)*fac_cndc_wrk
4486  end do
4487  end do
4488  end do
4489  log_info("ATMOS_PHY_MP_SN14_update_by_phase_change_kij",*) "taucnd:fac_cndc_wrk=",fac_cndc_wrk
4490  end if
4491 
4492 !OCL XFILL
4493  do j = js, je
4494  do i = is, ie
4495  do k = ks, ke
4496  ! Temperature lower limit is only used for saturation condition.
4497  ! On the other hand original "tem" is used for calculation of latent heat or energy equation.
4498  wtem(k,i,j) = max( tem(k,i,j), tem_min )
4499  end do
4500  end do
4501  end do
4502 
4503  call moist_pres2qsat_liq( ka, ks, ke, ia, is, ie, ja, js, je, &
4504  wtem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
4505  qsw(:,:,:) ) ! [OUT]
4506  call moist_pres2qsat_ice( ka, ks, ke, ia, is, ie, ja, js, je, &
4507  wtem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
4508  qsi(:,:,:) ) ! [OUT]
4509  call moist_dqs_dtem_dens_liq( ka, ks, ke, ia, is, ie, ja, js, je, &
4510  wtem(:,:,:), rho(:,:,:), & ! [IN]
4511  dqswdtem_rho(:,:,:) ) ! [OUT]
4512  call moist_dqs_dtem_dens_ice( ka, ks, ke, ia, is, ie, ja, js, je, &
4513  wtem(:,:,:), rho(:,:,:), & ! [IN]
4514  dqsidtem_rho(:,:,:) ) ! [OUT]
4515  call moist_dqs_dtem_dpre_liq( ka, ks, ke, ia, is, ie, ja, js, je, &
4516  wtem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
4517  dqswdtem_pre(:,:,:), dqswdpre_tem(:,:,:) ) ! [OUT]
4518  call moist_dqs_dtem_dpre_ice( ka, ks, ke, ia, is, ie, ja, js, je, &
4519  wtem(:,:,:), pre(:,:,:), qdry(:,:,:), & ! [IN]
4520  dqsidtem_pre(:,:,:), dqsidpre_tem(:,:,:) ) ! [OUT]
4521 
4522  profile_start("sn14_update")
4523  do j = js, je
4524  do i = is, ie
4525  do k = ks, ke
4526  if( cz(k,i,j) <= 25000.0_rp )then
4527  w2 = w(k,i,j)
4528  else
4529  w2 = 0.0_rp
4530  end if
4531  if( pre(k,i,j) < esw(k,i,j)+1.e-10_rp )then
4532  qsw(k,i,j) = 1.0_rp
4533  dqswdtem_rho(k,i,j) = 0.0_rp
4534  dqswdtem_pre(k,i,j) = 0.0_rp
4535  dqswdpre_tem(k,i,j) = 0.0_rp
4536  end if
4537  if( pre(k,i,j) < esi(k,i,j)+1.e-10_rp )then
4538  qsi(k,i,j) = 1.0_rp
4539  dqsidtem_rho(k,i,j) = 0.0_rp
4540  dqsidtem_pre(k,i,j) = 0.0_rp
4541  dqsidpre_tem(k,i,j) = 0.0_rp
4542  end if
4543 
4544  r_rvaptem = 1.0_rp/(rvap*wtem(k,i,j))
4545  lvsw = esw(k,i,j)*r_rvaptem ! rho=p/(Rv*T)
4546  lvsi = esi(k,i,j)*r_rvaptem !
4547  pv = rhoq2(i_qv,k,i,j)*rvap*tem(k,i,j)
4548  r_esw = 1.0_rp/esw(k,i,j)
4549  r_esi = 1.0_rp/esi(k,i,j)
4550  ssw = min( mp_ssw_lim, ( pv*r_esw-1.0_rp ) )
4551  ssi = pv*r_esi - 1.0_rp
4552  r_lvsw = 1.0_rp/lvsw
4553  r_lvsi = 1.0_rp/lvsi
4554  r_taucnd_c = pq(i_lcdep,k,i,j)*r_lvsw
4555  r_taucnd_r = pq(i_lrdep,k,i,j)*r_lvsw
4556  r_taudep_i = pq(i_lidep,k,i,j)*r_lvsi
4557  r_taudep_s = pq(i_lsdep,k,i,j)*r_lvsi
4558  r_taudep_g = pq(i_lgdep,k,i,j)*r_lvsi
4559 ! taucnd_c(k,i,j) = 1.0_RP/(r_taucnd_c+r_tau100day)
4560 ! taucnd_r(k,i,j) = 1.0_RP/(r_taucnd_r+r_tau100day)
4561 ! taudep_i(k,i,j) = 1.0_RP/(r_taudep_i+r_tau100day)
4562 ! taudep_s(k,i,j) = 1.0_RP/(r_taudep_s+r_tau100day)
4563 ! taudep_g(k,i,j) = 1.0_RP/(r_taudep_g+r_tau100day)
4564 
4565  r_cva = 1.0_rp / cva(k,i,j)
4566  r_cpa = 1.0_rp / cpa(k,i,j)
4567 
4568  ! Coefficient of latent heat release for ssw change by PLCdep and PLRdep
4569  aliqliq = 1.0_rp &
4570  + r_cva*( lhv00 + (cvvap-cl)*tem(k,i,j) )*dqswdtem_rho(k,i,j)
4571  ! Coefficient of latent heat release for ssw change by PLIdep, PLSdep and PLGdep
4572  asolliq = 1.0_rp &
4573  + r_cva*( lhv00 + lhf00 + (cvvap-ci)*tem(k,i,j) )*dqswdtem_rho(k,i,j)
4574  ! Coefficient of latent heat release for ssi change by PLCdep and PLRdep
4575  aliqsol = 1.0_rp &
4576  + r_cva*( lhv00 + (cvvap-cl)*tem(k,i,j) )*dqsidtem_rho(k,i,j)
4577  ! Coefficient of latent heat release for ssi change by PLIdep, PLSdep and PLGdep
4578  asolsol = 1.0_rp &
4579  + r_cva*( lhv00 + lhf00 + (cvvap-ci)*tem(k,i,j) )*dqsidtem_rho(k,i,j)
4580  pdynliq = w2 * grav * ( r_cpa*dqswdtem_pre(k,i,j) + rho(k,i,j)*dqswdpre_tem(k,i,j) )
4581  pdynsol = w2 * grav * ( r_cpa*dqsidtem_pre(k,i,j) + rho(k,i,j)*dqsidpre_tem(k,i,j) )
4582  pradliq = -dtdt_rad(k,i,j) * dqswdtem_rho(k,i,j)
4583  pradsol = -dtdt_rad(k,i,j) * dqsidtem_rho(k,i,j)
4584 
4585  ssw_o = ssw
4586  ssi_o = ssi
4587 ! ssw_o = ssw - Pdynliq*(dt_dyn-dt_mp)/qsw(k,i,j) + Pradliq*r_qsw*dt_mp
4588 ! ssi_o = ssi - Pdynsol*(dt_dyn-dt_mp)/qsi(k,i,j) + Pradsol*r_qsi*dt_mp
4589 
4590  acnd = pdynliq + pradliq &
4591  - ( r_taudep_i+r_taudep_s+r_taudep_g ) * ( qsw(k,i,j) - qsi(k,i,j) )
4592  adep = pdynsol + pradsol &
4593  + ( r_taucnd_c+r_taucnd_r ) * ( qsw(k,i,j) - qsi(k,i,j) )
4594  r_taucnd = &
4595  + aliqliq*( r_taucnd_c+r_taucnd_r ) &
4596  + asolliq*( r_taudep_i+r_taudep_s+r_taudep_g )
4597  r_taudep = &
4598  + aliqsol*( r_taucnd_c+r_taucnd_r )&
4599  + asolsol*( r_taudep_i+r_taudep_s+r_taudep_g )
4600 
4601  uplim_cnd = max( rho(k,i,j)*ssw_o*qsw(k,i,j)*r_dt, 0.0_rp )
4602  lowlim_cnd = min( rho(k,i,j)*ssw_o*qsw(k,i,j)*r_dt, 0.0_rp )
4603  if( r_taucnd < r_tau100day )then
4604 ! taucnd = tau100day
4605  pq(i_lcdep,k,i,j) = max(lowlim_cnd, min(uplim_cnd, pq(i_lcdep,k,i,j)*ssw_o ))
4606  pq(i_lrdep,k,i,j) = max(lowlim_cnd, min(uplim_cnd, pq(i_lrdep,k,i,j)*ssw_o ))
4607  pq(i_nrdep,k,i,j) = min(0.0_rp, pq(i_nrdep,k,i,j)*ssw_o )
4608 ! PLR2NR = 0.0_RP
4609  else
4610  taucnd = 1.0_rp/r_taucnd
4611  ! Production term for liquid water content
4612  coef_a_cnd = rho(k,i,j)*acnd*taucnd
4613  coef_b_cnd = rho(k,i,j)*taucnd*r_dt*(ssw_o*qsw(k,i,j)-acnd*taucnd) * ( exp(-dt*r_taucnd) - 1.0_rp )
4614  pq(i_lcdep,k,i,j) = coef_a_cnd*r_taucnd_c - coef_b_cnd*r_taucnd_c
4615  plr2nr = pq(i_nrdep,k,i,j)/(pq(i_lrdep,k,i,j)+1.e-30_rp)
4616  pq(i_lrdep,k,i,j) = coef_a_cnd*r_taucnd_r - coef_b_cnd*r_taucnd_r
4617  pq(i_nrdep,k,i,j) = min(0.0_rp, pq(i_lrdep,k,i,j)*plr2nr )
4618  end if
4619 
4620  uplim_dep = max( rho(k,i,j)*ssi_o*qsi(k,i,j)*r_dt, 0.0_rp )
4621  lowlim_dep = min( rho(k,i,j)*ssi_o*qsi(k,i,j)*r_dt, 0.0_rp )
4622  if( r_taudep < r_tau100day )then
4623 ! taudep = tau100day
4624  pq(i_lidep,k,i,j) = max(lowlim_dep, min(uplim_dep, pq(i_lidep,k,i,j)*ssi_o ))
4625  pq(i_lsdep,k,i,j) = max(lowlim_dep, min(uplim_dep, pq(i_lsdep,k,i,j)*ssi_o ))
4626  pq(i_lgdep,k,i,j) = max(lowlim_dep, min(uplim_dep, pq(i_lgdep,k,i,j)*ssi_o ))
4627  pq(i_nidep,k,i,j) = min(0.0_rp, pq(i_nidep,k,i,j)*ssi_o )
4628  pq(i_nsdep,k,i,j) = min(0.0_rp, pq(i_nsdep,k,i,j)*ssi_o )
4629  pq(i_ngdep,k,i,j) = min(0.0_rp, pq(i_ngdep,k,i,j)*ssi_o )
4630  else
4631  taudep = 1.0_rp/r_taudep
4632  ! Production term for ice water content
4633  coef_a_dep = rho(k,i,j)*adep*taudep
4634  coef_b_dep = rho(k,i,j)*taudep*r_dt*(ssi_o*qsi(k,i,j)-adep*taudep) * ( exp(-dt*r_taudep) - 1.0_rp )
4635  pli2ni = pq(i_nidep,k,i,j)/max(pq(i_lidep,k,i,j),1.e-30_rp)
4636  pls2ns = pq(i_nsdep,k,i,j)/max(pq(i_lsdep,k,i,j),1.e-30_rp)
4637  plg2ng = pq(i_ngdep,k,i,j)/max(pq(i_lgdep,k,i,j),1.e-30_rp)
4638  pq(i_lidep,k,i,j) = coef_a_dep*r_taudep_i - coef_b_dep*r_taudep_i
4639  pq(i_lsdep,k,i,j) = coef_a_dep*r_taudep_s - coef_b_dep*r_taudep_s
4640  pq(i_lgdep,k,i,j) = coef_a_dep*r_taudep_g - coef_b_dep*r_taudep_g
4641  pq(i_nidep,k,i,j) = min(0.0_rp, pq(i_lidep,k,i,j)*pli2ni )
4642  pq(i_nsdep,k,i,j) = min(0.0_rp, pq(i_lsdep,k,i,j)*pls2ns )
4643  pq(i_ngdep,k,i,j) = min(0.0_rp, pq(i_lgdep,k,i,j)*plg2ng )
4644  end if
4645 
4646  sw = 0.5_rp - sign(0.5_rp, pq(i_lcdep,k,i,j)+eps) != 1 for PLCdep<=-eps
4647  pncdep = min(0.0_rp, ((rhoq2(i_qc,k,i,j)+pq(i_lcdep,k,i,j)*dt)*r_xc_ccn - rhoq2(i_nc,k,i,j))*r_dt ) * sw
4648 ! if( PQ(I_LCdep,k,i,j) < -eps )then
4649 ! PNCdep = min(0.0_RP, ((rhoq2(I_QC,k,i,j)+PQ(I_LCdep,k,i,j)*dt)*r_xc_ccn - rhoq2(I_NC,k,i,j))*r_dt )
4650 ! else
4651 ! PNCdep = 0.0_RP
4652 ! end if
4653 ! if( PQ(I_LIdep,k,i,j) < -eps )then
4654 ! PQ(I_NIdep,k,i,j) = min(0.0_RP, ((li(k,i,j)+PQ(I_LIdep,k,i,j)*dt)*r_xi_ccn - rhoq2(I_NI,k,i,j))*r_dt )
4655 ! else
4656 ! PQ(I_NIdep,k,i,j) = 0.0_RP
4657 ! end if
4658 
4659  !--- evaporation/condensation
4660  r_rvaptem = 1.0_rp/(rvap*wtem(k,i,j))
4661  lvsw = esw(k,i,j)*r_rvaptem
4662  dlvsw = rhoq2(i_qv,k,i,j)-lvsw
4663  dcnd = dt*(pq(i_lcdep,k,i,j)+pq(i_lrdep,k,i,j))
4664 
4665  sw = ( sign(0.5_rp,dcnd) + sign(0.5_rp,dlvsw) ) &
4666  * ( 0.5_rp + sign(0.5_rp,abs(dcnd)-eps) ) ! to avoid zero division
4667  ! sw= 1: always supersaturated
4668  ! sw=-1: always unsaturated
4669  ! sw= 0: partially unsaturated during timestep
4670  fac1 = min(dlvsw*sw,dcnd*sw)*sw / (abs(sw)-1.0_rp+dcnd) & ! sw=1,-1
4671  + 1.0_rp - abs(sw) ! sw=0
4672  dep_dqc = max( dt*pq(i_lcdep,k,i,j)*fac1, &
4673  -rhoq2(i_qc,k,i,j) - 1e30_rp*(sw+1.0_rp) )*abs(sw) != -lc for sw=-1, -inf for sw=1
4674  dep_dqr = max( dt*pq(i_lrdep,k,i,j)*fac1, &
4675  -rhoq2(i_qr,k,i,j) - 1e30_rp*(sw+1.0_rp) )*abs(sw) != -lr for sw=-1, -inf for sw=1
4676 ! if ( (dcnd > eps) .AND. (dlvsw > eps) )then
4677 ! ! always supersaturated
4678 ! fac1 = min(dlvsw,dcnd)/dcnd
4679 ! dep_dqc = dt*PQ(I_LCdep,k,i,j)*fac1
4680 ! dep_dqr = dt*PQ(I_LRdep,k,i,j)*fac1
4681 ! else if( (dcnd < -eps) .AND. (dlvsw < -eps) )then
4682 ! ! always unsaturated
4683 ! fac1 = max( dlvsw,dcnd )/dcnd
4684 ! dep_dqc = max( dt*PQ(I_LCdep,k,i,j)*fac1, -rhoq2(I_QC,k,i,j) )
4685 ! dep_dqr = max( dt*PQ(I_LRdep,k,i,j)*fac1, -rhoq2(I_QR,k,i,j) )
4686 ! else
4687 ! ! partially unsaturated during timestep
4688 ! fac1 = 1.0_RP
4689 ! dep_dqc = 0.0_RP
4690 ! dep_dqr = 0.0_RP
4691 ! end if
4692 
4693  ! evaporation always lose number(always negative).
4694  dep_dnc = max( dt*pncdep*fac1, -rhoq2(i_nc,k,i,j) ) ! ss>0 dep=0, ss<0 dep<0 ! [Add] 11/08/30 T.Mitsui
4695  dep_dnr = max( dt*pq(i_nrdep,k,i,j)*fac1, -rhoq2(i_nr,k,i,j) ) ! ss>0 dep=0, ss<0 dep<0
4696 
4697  qc_evaporate(k,i,j) = - dep_dnc ! [Add] Y.Sato 15/09/08
4698 
4699  !--- deposition/sublimation
4700  lvsi = esi(k,i,j)*r_rvaptem
4701  ddep = dt*(pq(i_lidep,k,i,j)+pq(i_lsdep,k,i,j)+pq(i_lgdep,k,i,j))
4702  dlvsi = rhoq2(i_qv,k,i,j)-lvsi ! limiter for esi>1.d0
4703 
4704  sw = ( sign(0.5_rp,ddep) + sign(0.5_rp,dlvsi) ) &
4705  * ( 0.5_rp + sign(0.5_rp,abs(ddep)-eps) ) ! to avoid zero division
4706  ! sw= 1: always supersaturated
4707  ! sw=-1: always unsaturated
4708  ! sw= 0: partially unsaturated during timestep
4709  fac2 = min(dlvsi*sw,ddep*sw)*sw / (abs(sw)-1.0_rp+ddep) & ! sw=1,-1
4710  + 1.0_rp - abs(sw) ! sw=0
4711  dep_dqi = max( dt*pq(i_lidep,k,i,j) &
4712  * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), & != fac2 for sw=-1,1, 1 for sw=0
4713  -rhoq2(i_qi,k,i,j) - 1e30_rp*(sw+1.0_rp) ) != -li for sw=-1, -inf for sw=0,1
4714  dep_dqs = max( dt*pq(i_lsdep,k,i,j) &
4715  * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), & != fac2 for sw=-1,1, 1 for sw=0
4716  -rhoq2(i_qs,k,i,j) - 1e30_rp*(sw+1.0_rp) ) != -ls for sw=-1, -inf for sw=0,1
4717  dep_dqg = max( dt*pq(i_lgdep,k,i,j) &
4718  * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), & != fac2 for sw=-1,1, 1 for sw=0
4719  -rhoq2(i_qg,k,i,j) - 1e30_rp*(sw+1.0_rp) ) != -lg for sw=-1, -inf for sw=0,1
4720 ! if ( (ddep > eps) .AND. (dlvsi > eps) )then
4721 ! ! always supersaturated
4722 ! fac2 = min(dlvsi,ddep)/ddep
4723 ! dep_dqi = dt*PQ(I_LIdep,k,i,j)*fac2
4724 ! dep_dqs = dt*PQ(I_LSdep,k,i,j)*fac2
4725 ! dep_dqg = dt*PQ(I_LGdep,k,i,j)*fac2
4726 ! else if ( (ddep < -eps) .AND. (dlvsi < -eps) )then
4727 ! ! always unsaturated
4728 ! fac2 = max(dlvsi,ddep)/ddep
4729 ! dep_dqi = max(dt*PQ(I_LIdep,k,i,j)*fac2, -rhoq2(I_QI,k,i,j) )
4730 ! dep_dqs = max(dt*PQ(I_LSdep,k,i,j)*fac2, -rhoq2(I_QS,k,i,j) )
4731 ! dep_dqg = max(dt*PQ(I_LGdep,k,i,j)*fac2, -rhoq2(I_QG,k,i,j) )
4732 ! else
4733 ! ! partially unsaturated during timestep
4734 ! fac2 = 1.0_RP
4735 ! dep_dqi = dt*PQ(I_LIdep,k,i,j)
4736 ! dep_dqs = dt*PQ(I_LSdep,k,i,j)
4737 ! dep_dqg = dt*PQ(I_LGdep,k,i,j)
4738 ! end if
4739 
4740  ! evaporation always lose number(always negative).
4741  dep_dni = max( dt*pq(i_nidep,k,i,j)*fac2, -rhoq2(i_ni,k,i,j) ) ! ss>0 dep=0, ss<0 dep<0
4742  dep_dns = max( dt*pq(i_nsdep,k,i,j)*fac2, -rhoq2(i_ns,k,i,j) ) ! ss>0 dep=0, ss<0 dep<0
4743  dep_dng = max( dt*pq(i_ngdep,k,i,j)*fac2, -rhoq2(i_ng,k,i,j) ) ! ss>0 dep=0, ss<0 dep<0
4744 
4745  !--- freezing of cloud drop
4746  frz_dqc = max( dt*(pq(i_lchom,k,i,j)+pq(i_lchet,k,i,j)), -rhoq2(i_qc,k,i,j)-dep_dqc ) ! negative value
4747  frz_dnc = max( dt*(pq(i_nchom,k,i,j)+pq(i_nchet,k,i,j)), -rhoq2(i_nc,k,i,j)-dep_dnc ) ! negative value
4748  fac3 = ( frz_dqc-eps )/( dt*(pq(i_lchom,k,i,j)+pq(i_lchet,k,i,j))-eps )
4749  fac4 = ( frz_dnc-eps )/( dt*(pq(i_nchom,k,i,j)+pq(i_nchet,k,i,j))-eps )
4750  pq(i_lchom,k,i,j) = fac3*pq(i_lchom,k,i,j)
4751  pq(i_lchet,k,i,j) = fac3*pq(i_lchet,k,i,j)
4752  pq(i_nchom,k,i,j) = fac4*pq(i_nchom,k,i,j)
4753  pq(i_nchet,k,i,j) = fac4*pq(i_nchet,k,i,j)
4754 
4755  !--- melting
4756  ! ice change
4757  mlt_dqi = max( dt*pq(i_limlt,k,i,j), -rhoq2(i_qi,k,i,j)-dep_dqi ) ! negative value
4758  mlt_dni = max( dt*pq(i_nimlt,k,i,j), -rhoq2(i_ni,k,i,j)-dep_dni ) ! negative value
4759  ! snow change
4760  mlt_dqs = max( dt*pq(i_lsmlt,k,i,j), -rhoq2(i_qs,k,i,j)-dep_dqs ) ! negative value
4761  mlt_dns = max( dt*pq(i_nsmlt,k,i,j), -rhoq2(i_ns,k,i,j)-dep_dns ) ! negative value
4762  ! graupel change
4763  mlt_dqg = max( dt*pq(i_lgmlt,k,i,j), -rhoq2(i_qg,k,i,j)-dep_dqg ) ! negative value
4764  mlt_dng = max( dt*pq(i_ngmlt,k,i,j), -rhoq2(i_ng,k,i,j)-dep_dng ) ! negative value
4765 
4766  !--- freezing of larger droplets
4767  frz_dqr = max( dt*(pq(i_lrhet,k,i,j)), min(0.0_rp, -rhoq2(i_qr,k,i,j)-dep_dqr) ) ! negative value
4768  frz_dnr = max( dt*(pq(i_nrhet,k,i,j)), min(0.0_rp, -rhoq2(i_nr,k,i,j)-dep_dnr) ) ! negative value
4769 
4770  fac5 = ( frz_dqr-eps )/( dt*pq(i_lrhet,k,i,j)-eps )
4771  pq(i_lrhet,k,i,j) = fac5*pq(i_lrhet,k,i,j)
4772  fac6 = ( frz_dnr-eps )/( dt*pq(i_nrhet,k,i,j)-eps )
4773  pq(i_nrhet,k,i,j) = fac6*pq(i_nrhet,k,i,j)
4774 
4775  ! water vapor change
4776  drhoqv = -(dep_dqc+dep_dqi+dep_dqs+dep_dqg+dep_dqr)
4777 
4778  xi = min(xi_max, max(xi_min, rhoq2(i_qi,k,i,j)/(rhoq2(i_ni,k,i,j)+ni_min) ))
4779  sw = 0.5_rp + sign(0.5_rp,xi-x_sep) ! if (xi>=x_sep) then sw=1 else sw=0
4780  ! sw=1: large ice crystals turn into rain by melting
4781 
4782  ! total cloud change
4783  drhoqc = ( frz_dqc - mlt_dqi*(1.0_rp-sw) + dep_dqc )
4784  drhonc = ( frz_dnc - mlt_dni*(1.0_rp-sw) + dep_dnc )
4785  ! total rain change
4786  drhoqr = ( frz_dqr - mlt_dqg - mlt_dqs - mlt_dqi*sw + dep_dqr )
4787  drhonr = ( frz_dnr - mlt_dng - mlt_dns - mlt_dni*sw + dep_dnr )
4788 
4789  ! total ice change
4790  drhoqi = (-frz_dqc + mlt_dqi + dep_dqi )
4791  drhoni = (-frz_dnc + mlt_dni + dep_dni )
4792 
4793  ! total snow change
4794  drhoqs = ( mlt_dqs + dep_dqs )
4795  drhons = ( mlt_dns + dep_dns )
4796 
4797  ! total graupel change
4798  drhoqg = (-frz_dqr + mlt_dqg + dep_dqg )
4799  drhong = (-frz_dnr + mlt_dng + dep_dng )
4800 
4801  ! tendency
4802  rhoq_t(k,i,j,i_qv) = drhoqv / dt
4803  rhoq_t(k,i,j,i_qc) = drhoqc / dt
4804  rhoq_t(k,i,j,i_nc) = drhonc / dt
4805  rhoq_t(k,i,j,i_qr) = drhoqr / dt
4806  rhoq_t(k,i,j,i_nr) = drhonr / dt
4807  rhoq_t(k,i,j,i_qi) = drhoqi / dt
4808  rhoq_t(k,i,j,i_ni) = drhoni / dt
4809  rhoq_t(k,i,j,i_qs) = drhoqs / dt
4810  rhoq_t(k,i,j,i_ns) = drhons / dt
4811  rhoq_t(k,i,j,i_qg) = drhoqg / dt
4812  rhoq_t(k,i,j,i_ng) = drhong / dt
4813 
4814  rhoe_t(k,i,j) = ( - lhv * drhoqv + lhf * ( drhoqi+ drhoqs + drhoqg ) ) / dt
4815 
4816  rrho = 1.0_rp/rho(k,i,j)
4817  dqv = drhoqv * rrho
4818  dqc = drhoqc * rrho
4819  dqr = drhoqr * rrho
4820  dqi = drhoqi * rrho
4821  dqs = drhoqs * rrho
4822  dqg = drhoqg * rrho
4823 
4824  dcv = cv_vapor * dqv + cv_water * ( dqc + dqr ) + cv_ice * ( dqi + dqs + dqg )
4825  dcp = cp_vapor * dqv + cp_water * ( dqc + dqr ) + cp_ice * ( dqi + dqs + dqg )
4826 
4827  cvtot_t(k,i,j) = dcv/dt
4828  cptot_t(k,i,j) = dcp/dt
4829 
4830  dz = fz(k,i,j) - fz(k,i,j)
4831  sl_plcdep(i,j) = sl_plcdep(i,j) + dep_dqc*dz
4832  sl_plrdep(i,j) = sl_plrdep(i,j) + dep_dqr*dz
4833  sl_pnrdep(i,j) = sl_pnrdep(i,j) + dep_dnr*dz
4834  end do
4835  end do
4836  end do
4837  profile_stop("sn14_update")
4838 
4839  return
module atmosphere / saturation
real(rp), public cv_ice
CV for ice [J/kg/K].
real(rp), public cp_ice
CP for ice [J/kg/K].
integer, public ia
of whole cells: x, local, with HALO
integer, public ja
of whole cells: y, local, with HALO
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
integer, public is
start point of inner domain: x, local
integer, public ie
end point of inner domain: x, local
real(rp), public cv_vapor
CV for vapor [J/kg/K].
module atmosphere / hydrometeor
integer, public ke
end point of inner domain: z, local
integer, public je
end point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public js
start point of inner domain: y, local
integer, public ka
of whole cells: z, local, with HALO
real(rp), public cp_vapor
CP for vapor [J/kg/K].
real(rp), public cp_water
CP for water [J/kg/K].
real(rp), public cv_water
CV for water [J/kg/K].
Here is the caller graph for this function:

Variable Documentation

◆ qa_mp

integer, parameter, public scale_atmos_phy_mp_sn14::qa_mp = 11

Definition at line 119 of file scale_atmos_phy_mp_sn14.F90.

Referenced by atmos_phy_mp_sn14_cloud_fraction(), atmos_phy_mp_sn14_qhyd2qtrc(), and atmos_phy_mp_sn14_terminal_velocity().

119  integer, public, parameter :: qa_mp = 11

◆ atmos_phy_mp_sn14_ntracers

integer, parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_ntracers = QA_MP

Definition at line 121 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

121  integer, parameter, public :: atmos_phy_mp_sn14_ntracers = qa_mp

◆ atmos_phy_mp_sn14_nwaters

integer, parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_nwaters = 2

Definition at line 122 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

122  integer, parameter, public :: atmos_phy_mp_sn14_nwaters = 2

◆ atmos_phy_mp_sn14_nices

integer, parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_nices = 3

Definition at line 123 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

123  integer, parameter, public :: atmos_phy_mp_sn14_nices = 3

◆ atmos_phy_mp_sn14_tracer_names

character(len=h_short), dimension(qa_mp), parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_tracer_names = (/ 'QV', 'QC', 'QR', 'QI', 'QS', 'QG', 'NC', 'NR', 'NI', 'NS', 'NG' /)

Definition at line 124 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

124  character(len=H_SHORT), parameter, public :: atmos_phy_mp_sn14_tracer_names(qa_mp) = (/ &
125  'QV', &
126  'QC', &
127  'QR', &
128  'QI', &
129  'QS', &
130  'QG', &
131  'NC', &
132  'NR', &
133  'NI', &
134  'NS', &
135  'NG' /)

◆ atmos_phy_mp_sn14_tracer_descriptions

character(len=h_mid), dimension(qa_mp), parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_tracer_descriptions = (/ 'Ratio of Water Vapor mass to total mass (Specific humidity)', 'Ratio of Cloud Water mass to total mass ', 'Ratio of Rain Water mass to total mass ', 'Ratio of Cloud Ice mass ratio to total mass ', 'Ratio of Snow miass ratio to total mass ', 'Ratio of Graupel mass ratio to total mass ', 'Cloud Water Number Density ', 'Rain Water Number Density ', 'Cloud Ice Number Density ', 'Snow Number Density ', 'Graupel Number Density '/)

Definition at line 136 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

136  character(len=H_MID) , parameter, public :: atmos_phy_mp_sn14_tracer_descriptions(qa_mp) = (/ &
137  'Ratio of Water Vapor mass to total mass (Specific humidity)', &
138  'Ratio of Cloud Water mass to total mass ', &
139  'Ratio of Rain Water mass to total mass ', &
140  'Ratio of Cloud Ice mass ratio to total mass ', &
141  'Ratio of Snow miass ratio to total mass ', &
142  'Ratio of Graupel mass ratio to total mass ', &
143  'Cloud Water Number Density ', &
144  'Rain Water Number Density ', &
145  'Cloud Ice Number Density ', &
146  'Snow Number Density ', &
147  'Graupel Number Density '/)

◆ atmos_phy_mp_sn14_tracer_units

character(len=h_short), dimension(qa_mp), parameter, public scale_atmos_phy_mp_sn14::atmos_phy_mp_sn14_tracer_units = (/ 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'kg/kg ', 'num/kg', 'num/kg', 'num/kg', 'num/kg', 'num/kg' /)

Definition at line 148 of file scale_atmos_phy_mp_sn14.F90.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

148  character(len=H_SHORT), parameter, public :: atmos_phy_mp_sn14_tracer_units(qa_mp) = (/ &
149  'kg/kg ', &
150  'kg/kg ', &
151  'kg/kg ', &
152  'kg/kg ', &
153  'kg/kg ', &
154  'kg/kg ', &
155  'num/kg', &
156  'num/kg', &
157  'num/kg', &
158  'num/kg', &
159  'num/kg' /)