SCALE-RM
Functions/Subroutines | Variables
scale_atmos_phy_mp_tomita08 Module Reference

module atmosphere / physics / microphysics / Tomita08 More...

Functions/Subroutines

subroutine, public atmos_phy_mp_tomita08_setup (KA, KS, KE, IA, IS, IE, JA, JS, JE, flg_lt)
 ATMOS_PHY_MP_tomita08_setup Setup. More...
 
subroutine, public atmos_phy_mp_tomita08_adjustment (KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, PRES, CCN, dt, TEMP, QTRC, CPtot, CVtot, RHOE_t, EVAPORATE, flg_lt, d0_crg, v0_crg, dqcrg, beta_crg, QSPLT_in, Sarea, QTRC_crg)
 ATMOS_PHY_MP_tomita08_adjustment calculate state after saturation process. More...
 
subroutine, public atmos_phy_mp_tomita08_terminal_velocity (KA, KS, KE, DENS0, TEMP0, RHOQ0, vterm)
 Lin-type cold rain microphysics (terminal velocity) More...
 
subroutine, public atmos_phy_mp_tomita08_cloud_fraction (KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC, mask_criterion, cldfrac)
 Calculate Cloud Fraction. More...
 
subroutine, public atmos_phy_mp_tomita08_effective_radius (KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS0, TEMP0, QTRC0, Re)
 Calculate Effective Radius. More...
 
subroutine, public atmos_phy_mp_tomita08_qtrc2qhyd (KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC, Qe)
 Calculate mass ratio of each category. More...
 
subroutine, public atmos_phy_mp_tomita08_qhyd2qtrc (KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC)
 get mass ratio of each category More...
 

Variables

integer, parameter, public atmos_phy_mp_tomita08_ntracers = QA_MP
 
integer, parameter, public atmos_phy_mp_tomita08_nwaters = 2
 
integer, parameter, public atmos_phy_mp_tomita08_nices = 3
 
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_tracer_names = (/ 'QV', 'QC', 'QR', 'QI', 'QS', 'QG' /)
 
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_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 '/)
 
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_tracer_units = (/ 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg' /)
 

Detailed Description

module atmosphere / physics / microphysics / Tomita08

Description
Cloud Microphysics by Lin-type parametarization Reference: Tomita(2008)
Author
Team SCALE
NAMELIST
  • PARAM_ATMOS_PHY_MP_TOMITA08
    nametypedefault valuecomment
    DO_COUPLE_AEROSOL logical apply CCN effect?
    DO_EXPLICIT_ICEGEN logical apply explicit ice generation?
    AUTOCONV_NC real(RP) Nc_ocn number concentration of cloud water [1/cc]
    ENABLE_KK2000 logical .false. use scheme by Khairoutdinov and Kogan (2000)
    ENABLE_RS2014 logical .false. use scheme by Roh and Satoh (2014)
    ENABLE_WDXZ2014 logical .false. use scheme by Wainwright et al. (2014)
    N0R_DEF real(RP) 8.E+6_RP intercept parameter for rain [1/m4]
    N0S_DEF real(RP) 3.E+6_RP intercept parameter for snow [1/m4]
    N0G_DEF real(RP) 4.E+6_RP intercept parameter for graupel [1/m4]
    DENS_S real(RP) 100.0_RP density of snow [kg/m3]
    DENS_G real(RP) 400.0_RP density of graupel [kg/m3]
    RE_QC real(RP) 8.E-6_RP effective radius for cloud water
    RE_QI real(RP) 40.E-6_RP effective radius for cloud ice
    DRAG_G real(RP) 0.6_RP drag coefficient for graupel
    CR real(RP) 130.0_RP
    CS real(RP) 4.84_RP
    EIW real(RP) 1.0_RP collection efficiency of cloud ice for cloud water
    ERW real(RP) 1.0_RP collection efficiency of rain for cloud water
    ESW real(RP) 1.0_RP collection efficiency of snow for cloud water
    EGW real(RP) 1.0_RP collection efficiency of graupel for cloud water
    ERI real(RP) 1.0_RP collection efficiency of rain for cloud ice
    ESI real(RP) 1.0_RP collection efficiency of snow for cloud ice
    EGI real(RP) 0.1_RP collection efficiency of graupel for cloud ice
    ESR real(RP) 1.0_RP collection efficiency of snow for rain
    EGR real(RP) 1.0_RP collection efficiency of graupel for rain
    EGS real(RP) 1.0_RP collection efficiency of graupel for snow
    GAMMA_SACR real(RP) 25.E-3_RP effect of low temperature for Esi
    GAMMA_GACS real(RP) 90.E-3_RP effect of low temperature for Egs
    MI real(RP) 4.19E-13_RP mass of one cloud ice crystal [kg]
    BETA_SAUT real(RP) 6.E-3_RP auto-conversion factor beta for ice
    GAMMA_SAUT real(RP) 60.E-3_RP auto-conversion factor gamma for ice
    QICRT_SAUT real(RP) 0.0_RP mass ratio threshold for Psaut [kg/kg]
    BETA_GAUT real(RP) 0.0_RP auto-conversion factor beta for snow
    GAMMA_GAUT real(RP) 90.E-3_RP auto-conversion factor gamma for snow
    QSCRT_GAUT real(RP) 6.E-4_RP mass ratio threshold for Pgaut [kg/kg]
    FIXED_RE logical .false. use ice's effective radius for snow and graupel, and set rain transparent?
    CONST_REC logical .true. use constant effective radius for cloud water?
    NOFALL_QR logical .false. surpress sedimentation of rain?
    NOFALL_QI logical .false. surpress sedimentation of ice?
    NOFALL_QS logical .false. surpress sedimentation of snow?
    NOFALL_QG logical .false. surpress sedimentation of graupel?
    ECOAL_GI real(RP) 0.0_RP
    ECOAL_GS real(RP) 0.0_RP

History Output
namedescriptionunitvariable
Pcsat QC production term by satadjust kg/kg/s QC_t_sat
Pisat QI production term by satadjust kg/kg/s QI_t_sat
Pgmlt individual tendency term in tomita08 kg/kg/s Pgmlt

Function/Subroutine Documentation

◆ atmos_phy_mp_tomita08_setup()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_setup ( 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,
logical, intent(in), optional  flg_lt 
)

ATMOS_PHY_MP_tomita08_setup Setup.

Definition at line 355 of file scale_atmos_phy_mp_tomita08.F90.

355  use scale_prc, only: &
356  prc_abort
357  use scale_const, only: &
358  pi => const_pi, &
359  grav => const_grav, &
360  dens_w => const_dwatr, &
361  dens_i => const_dice
362  use scale_specfunc, only: &
363  sf_gamma
364  use scale_file_history, only: &
366  implicit none
367 
368  integer, intent(in) :: KA, KS, KE
369  integer, intent(in) :: IA, IS, IE
370  integer, intent(in) :: JA, JS, JE
371 
372  logical, intent(in), optional :: flg_lt
373 
374  real(RP) :: autoconv_nc = nc_ocn
375 
376  namelist / param_atmos_phy_mp_tomita08 / &
377  do_couple_aerosol, &
378  do_explicit_icegen, &
379  autoconv_nc, &
380  enable_kk2000, &
381  enable_rs2014, &
382  enable_wdxz2014, &
383  n0r_def, &
384  n0s_def, &
385  n0g_def, &
386  dens_s, &
387  dens_g, &
388  re_qc, &
389  re_qi, &
390  drag_g, &
391  cr, &
392  cs, &
393  eiw, &
394  erw, &
395  esw, &
396  egw, &
397  eri, &
398  esi, &
399  egi, &
400  esr, &
401  egr, &
402  egs, &
403  gamma_sacr, &
404  gamma_gacs, &
405  mi, &
406  beta_saut, &
407  gamma_saut, &
408  qicrt_saut, &
409  beta_gaut, &
410  gamma_gaut, &
411  qscrt_gaut, &
412  fixed_re, &
413  const_rec, &
414  nofall_qr, &
415  nofall_qi, &
416  nofall_qs, &
417  nofall_qg, &
418  ecoal_gi, &
419  ecoal_gs
420 
421  real(RP), parameter :: max_term_vel = 10.0_rp !-- terminal velocity for calculate dt of sedimentation
422 
423  logical :: flg_lt_
424  integer :: ierr
425  integer :: i, j, ip
426  !---------------------------------------------------------------------------
427 
428 
429  log_newline
430  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Setup'
431  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Tomita (2008) 1-moment bulk 6 category'
432 
433  allocate( w3d(ka,ia,ja,w_nmax) )
434  w3d(:,:,:,:) = 0.0_rp
435 
436  allocate( nc_def(ia,ja) )
437 
438 
439  !--- read namelist
440  rewind(io_fid_conf)
441  read(io_fid_conf,nml=param_atmos_phy_mp_tomita08,iostat=ierr)
442  if( ierr < 0 ) then !--- missing
443  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Not found namelist. Default used.'
444  elseif( ierr > 0 ) then !--- fatal error
445  log_error("ATMOS_PHY_MP_tomita08_setup",*) 'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_TOMITA08. Check!'
446  call prc_abort
447  endif
448  log_nml(param_atmos_phy_mp_tomita08)
449 
450  log_newline
451  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'density of the snow [kg/m3] : ', dens_s
452  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'density of the graupel [kg/m3] : ', dens_g
453  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Nc for auto-conversion [num/m3]: ', autoconv_nc
454  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Use k-k scheme? : ', enable_kk2000
455  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Use Roh scheme? : ', enable_rs2014
456  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Use WDXZ scheme? : ', enable_wdxz2014
457  log_newline
458  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Use effective radius of ice for snow and graupel,'
459  log_info("ATMOS_PHY_MP_tomita08_setup",*) ' and set rain transparent? : ', fixed_re
460  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Density of the ice is used for the calculation of '
461  log_info("ATMOS_PHY_MP_tomita08_setup",*) ' optically effective volume of snow and graupel.'
462  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Surpress sedimentation of rain? : ', nofall_qr
463  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Surpress sedimentation of ice? : ', nofall_qi
464  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Surpress sedimentation of snow? : ', nofall_qs
465  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Surpress sedimentation of graupel? : ', nofall_qg
466  log_info("ATMOS_PHY_MP_tomita08_setup",*) 'Enable explicit ice generation? : ', do_explicit_icegen
467  log_newline
468 
469  do j = js, je
470  do i = is, ie
471  nc_def(i,j) = autoconv_nc
472  end do
473  end do
474 
475  !--- empirical coefficients A, B, C, D
476  ar = pi * dens_w / 6.0_rp
477  as = pi * dens_s / 6.0_rp
478  ag = pi * dens_g / 6.0_rp
479 
480  br = 3.0_rp
481  bs = 3.0_rp
482  bg = 3.0_rp
483 
484  cg = sqrt( ( 4.0_rp * dens_g * grav ) / ( 3.0_rp * dens00 * drag_g ) )
485 
486  dr = 0.50_rp
487  ds = 0.25_rp
488  dg = 0.50_rp
489 
490  if ( enable_rs2014 ) then ! overwrite parameters
491  do_explicit_icegen = .true.
492 
493  n0g_def = 4.e+8_rp
494  as = 0.069_rp
495  bs = 2.0_rp
496  esi = 0.25_rp
497  egi = 0.0_rp
498  egs = 0.0_rp
499  endif
500 
501  if ( do_explicit_icegen ) then
502  only_liquid = .true.
503  sw_expice = 1.0_rp
504  else
505  only_liquid = .false.
506  sw_expice = 0.0_rp
507  endif
508 
509  gam = 1.0_rp ! =0!
510  gam_2 = 1.0_rp ! =1!
511  gam_3 = 2.0_rp ! =2!
512 
513  gam_1br = sf_gamma( 1.0_rp + br ) ! = 4!
514  gam_2br = sf_gamma( 2.0_rp + br ) ! = 5!
515  gam_3br = sf_gamma( 3.0_rp + br ) ! = 6!
516  gam_3dr = sf_gamma( 3.0_rp + dr )
517  gam_6dr = sf_gamma( 6.0_rp + dr )
518  gam_1brdr = sf_gamma( 1.0_rp + br + dr )
519  gam_5dr_h = sf_gamma( 0.5_rp * (5.0_rp+dr) )
520 
521  gam_1bs = sf_gamma( 1.0_rp + bs ) ! = 4!
522  gam_2bs = sf_gamma( 2.0_rp + bs ) ! = 5!
523  gam_3bs = sf_gamma( 3.0_rp + bs ) ! = 6!
524  gam_3ds = sf_gamma( 3.0_rp + ds )
525  gam_1bsds = sf_gamma( 1.0_rp + bs + ds )
526  gam_5ds_h = sf_gamma( 0.5_rp * (5.0_rp+ds) )
527 
528  gam_1bg = sf_gamma( 1.0_rp + bg ) ! = 4!
529  gam_3dg = sf_gamma( 3.0_rp + dg )
530  gam_1bgdg = sf_gamma( 1.0_rp + bg + dg)
531  gam_5dg_h = sf_gamma( 0.5_rp * (5.0_rp+dg) )
532 
533  ln10 = log(10.0_rp)
534 
535  ! history
536  do ip = 1, w_nmax
537  call file_history_reg( w_name(ip), 'individual tendency term in tomita08', 'kg/kg/s', & ! [IN]
538  hist_id(ip) ) ! [OUT]
539  end do
540 
541 
542  if( present(flg_lt) ) then
543  flg_lt_ = flg_lt
544  else
545  flg_lt_ = .false.
546  end if
547  if ( flg_lt_ ) then
548  if( enable_rs2014 ) then
549  write(*,*) 'xxx ROH and Satoh (2014) scheme is not supported for Lightning'
550  call prc_abort
551  endif
552 
553  if( ecoal_gi == 0.0_rp ) then
554  flg_ecoali = 0.0_rp
555  ecoal_gi = egi
556  else
557  flg_ecoali = 1.0_rp
558  endif
559  if( ecoal_gs == 0.0_rp ) then
560  flg_ecoals = 0.0_rp
561  ecoal_gs = egs
562  else
563  flg_ecoals = 1.0_rp
564  endif
565 
566  else
567  ecoal_gi = 1.0_rp
568  ecoal_gs = 1.0_rp
569  endif
570 
571  return

References scale_const::const_dice, scale_const::const_dwatr, scale_const::const_grav, scale_const::const_pi, scale_file_history::file_history_reg(), scale_io::io_fid_conf, scale_prc::prc_abort(), and scale_specfunc::sf_gamma().

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_adjustment()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_adjustment ( 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)  PRES,
real(rp), dimension (ka,ia,ja), intent(in)  CCN,
real(dp), intent(in)  dt,
real(rp), dimension(ka,ia,ja), intent(inout)  TEMP,
real(rp), dimension(ka,ia,ja,qa_mp), intent(inout)  QTRC,
real(rp), dimension(ka,ia,ja), intent(inout)  CPtot,
real(rp), dimension(ka,ia,ja), intent(inout)  CVtot,
real(rp), dimension (ka,ia,ja), intent(out)  RHOE_t,
real(rp), dimension(ka,ia,ja), intent(out)  EVAPORATE,
logical, intent(in), optional  flg_lt,
real(rp), intent(in), optional  d0_crg,
real(rp), intent(in), optional  v0_crg,
real(rp), dimension(ka,ia,ja), intent(in), optional  dqcrg,
real(rp), dimension(ka,ia,ja), intent(in), optional  beta_crg,
real(rp), dimension(ka,ia,ja,3), intent(out), optional  QSPLT_in,
real(rp), dimension(ka,ia,ja,qa_mp-1), intent(out), optional  Sarea,
real(rp), dimension(ka,ia,ja,qa_mp-1), intent(inout), optional  QTRC_crg 
)

ATMOS_PHY_MP_tomita08_adjustment calculate state after saturation process.

Definition at line 588 of file scale_atmos_phy_mp_tomita08.F90.

588  use scale_const, only: &
589  dwatr => const_dwatr, &
590  pi => const_pi
591  use scale_file_history, only: &
592  file_history_in
593  use scale_atmos_phy_mp_common, only: &
594  mp_saturation_adjustment => atmos_phy_mp_saturation_adjustment
595  implicit none
596  integer, intent(in) :: KA, KS, KE
597  integer, intent(in) :: IA, IS, IE
598  integer, intent(in) :: JA, JS, JE
599 
600  real(RP), intent(in) :: DENS (KA,IA,JA)
601  real(RP), intent(in) :: PRES (KA,IA,JA)
602  real(RP), intent(in) :: CCN (KA,IA,JA)
603  real(DP), intent(in) :: dt
604 
605  real(RP), intent(inout) :: TEMP(KA,IA,JA)
606  real(RP), intent(inout) :: QTRC(KA,IA,JA,QA_MP)
607  real(RP), intent(inout) :: CPtot(KA,IA,JA)
608  real(RP), intent(inout) :: CVtot(KA,IA,JA)
609 
610  real(RP), intent(out) :: RHOE_t (KA,IA,JA)
611  real(RP), intent(out) :: EVAPORATE(KA,IA,JA) ! number of evaporated cloud [/m3/s]
612 
613  ! Optional for Lightning
614  logical, intent(in), optional :: flg_lt
615  real(RP), intent(in), optional :: d0_crg, v0_crg
616  real(RP), intent(in), optional :: dqcrg(KA,IA,JA)
617  real(RP), intent(in), optional :: beta_crg(KA,IA,JA)
618  real(RP), intent(out), optional :: Sarea(KA,IA,JA,QA_MP-1) ! Surface area of each hydrometeor
619  real(RP), intent(out), optional :: QSPLT_in(KA,IA,JA,3) ! Charge separation
620  real(RP), intent(inout), optional :: QTRC_crg(KA,IA,JA,QA_MP-1) ! Tracer for charge density
621 
622  real(RP) :: RHOE_d_sat(KA,IA,JA)
623 
624  real(RP) :: QC_t_sat(KA,IA,JA)
625  real(RP) :: QI_t_sat(KA,IA,JA)
626 
627  integer :: k, i, j
628  !---------------------------------------------------------------------------
629 
630  log_progress(*) 'atmosphere / physics / microphysics / Tomita08'
631 
632  !##### MP Main #####
633  call mp_tomita08( &
634  ka, ks, ke, ia, is, ie, ja, js, je, & ! [IN]
635  dens(:,:,:), pres(:,:,:), ccn(:,:,:), & ! [IN]
636  dt, & ! [IN]
637  temp(:,:,:), qtrc(:,:,:,:), & ! [INOUT]
638  cptot(:,:,:), cvtot(:,:,:), & ! [INOUT]
639  rhoe_t(:,:,:), & ! [OUT]
640  flg_lt, d0_crg, v0_crg, & ! [IN:Optional]
641  dqcrg(:,:,:), beta_crg(:,:,:), & ! [OUT:Optional]
642  qsplt_in(:,:,:,:), & ! [OUT:Optional]
643  sarea(:,:,:,:), & ! [OUT:Optional]
644  qtrc_crg(:,:,:,:) ) ! [INOUT:Optional]
645 
646  ! save value before saturation adjustment
647  do j = js, je
648  do i = is, ie
649  do k = ks, ke
650  qc_t_sat(k,i,j) = qtrc(k,i,j,i_qc)
651  qi_t_sat(k,i,j) = qtrc(k,i,j,i_qi)
652  enddo
653  enddo
654  enddo
655 
656  call mp_saturation_adjustment( &
657  ka, ks, ke, ia, is, ie, ja, js, je, &
658  dens(:,:,:), & ! [IN]
659  only_liquid, & ! [IN]
660  temp(:,:,:), & ! [INOUT]
661  qtrc(:,:,:,i_qv), & ! [INOUT]
662  qtrc(:,:,:,i_qc), qtrc(:,:,:,i_qi), & ! [INOUT]
663  cptot(:,:,:), cvtot(:,:,:), & ! [INOUT]
664  rhoe_d_sat(:,:,:) ) ! [OUT]
665 
666  do j = js, je
667  do i = is, ie
668  do k = ks, ke
669  rhoe_t(k,i,j) = rhoe_t(k,i,j) + rhoe_d_sat(k,i,j) / dt
670  enddo
671  enddo
672  enddo
673  do j = js, je
674  do i = is, ie
675  do k = ks, ke
676  qc_t_sat(k,i,j) = ( qtrc(k,i,j,i_qc) - qc_t_sat(k,i,j) ) / dt
677  enddo
678  enddo
679  enddo
680  do j = js, je
681  do i = is, ie
682  do k = ks, ke
683  qi_t_sat(k,i,j) = ( qtrc(k,i,j,i_qi) - qi_t_sat(k,i,j) ) / dt
684  enddo
685  enddo
686  enddo
687 
688  call file_history_in( qc_t_sat(:,:,:), 'Pcsat', 'QC production term by satadjust', 'kg/kg/s' )
689  call file_history_in( qi_t_sat(:,:,:), 'Pisat', 'QI production term by satadjust', 'kg/kg/s' )
690 
691  do j = js, je
692  do i = is, ie
693  do k = ks, ke
694  evaporate(k,i,j) = max( -qc_t_sat(k,i,j), 0.0_rp ) & ! if negative, condensation
695  * dens(k,i,j) / (4.0_rp/3.0_rp*pi*dwatr*re_qc**3) ! mass -> number (assuming constant particle radius as re_qc)
696  enddo
697  enddo
698  enddo
699 
700  !##### END MP Main #####
701 
702  return

References atmos_phy_mp_tomita08_effective_radius(), scale_const::const_cl, scale_const::const_dice, scale_const::const_dwatr, scale_const::const_eps, scale_const::const_lhf0, scale_const::const_lhs0, scale_const::const_lhv0, scale_const::const_pi, scale_const::const_pre00, scale_const::const_rvap, scale_const::const_tem00, scale_const::const_undef, 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, scale_atmos_hydrometeor::i_hs, scale_atmos_hydrometeor::lhf, scale_atmos_hydrometeor::lhv, scale_atmos_hydrometeor::n_hyd, scale_prof::prof_rapend(), and scale_prof::prof_rapstart().

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_calc_tendency().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_terminal_velocity()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_terminal_velocity ( integer, intent(in)  KA,
integer, intent(in)  KS,
integer, intent(in)  KE,
real(rp), dimension(ka), intent(in)  DENS0,
real(rp), dimension(ka), intent(in)  TEMP0,
real(rp), dimension(ka,qa_mp-1), intent(in)  RHOQ0,
real(rp), dimension(ka,qa_mp-1), intent(out)  vterm 
)

Lin-type cold rain microphysics (terminal velocity)

Definition at line 2036 of file scale_atmos_phy_mp_tomita08.F90.

2036  use scale_const, only: &
2037  tem00 => const_tem00
2038  implicit none
2039  integer, intent(in) :: KA, KS, KE
2040 
2041  real(RP), intent(in) :: DENS0(KA)
2042  real(RP), intent(in) :: TEMP0(KA)
2043  real(RP), intent(in) :: RHOQ0(KA,QA_MP-1)
2044 
2045  real(RP), intent(out) :: vterm(KA,QA_MP-1)
2046 
2047  real(RP) :: dens(KA)
2048  real(RP) :: temc(KA)
2049  real(RP) :: qr(KA), qi(KA), qs(KA), qg(KA)
2050 
2051  real(RP) :: rho_fact(KA) ! density factor
2052 
2053  real(RP) :: N0r(KA), N0s(KA), N0g(KA)
2054  real(RP) :: RLMDr, RLMDs, RLMDg
2055  real(RP) :: RLMDr_dr, RLMDs_ds, RLMDg_dg
2056 
2057  !---< Roh and Satoh (2014) >---
2058  real(RP) :: tems, Xs2
2059  real(RP) :: MOMs_0bs, RMOMs_Vt(KA)
2060  real(RP) :: coef_at(4), coef_bt(4)
2061  real(RP) :: loga_, b_, nm
2062 
2063  real(RP) :: zerosw
2064  integer :: k
2065  !---------------------------------------------------------------------------
2066 
2067  do k = ks, ke
2068  ! store to work
2069  dens(k) = dens0(k)
2070  temc(k) = temp0(k) - tem00
2071  qr(k) = rhoq0(k,i_hyd_qr) / dens(k)
2072  qi(k) = rhoq0(k,i_hyd_qi) / dens(k)
2073  qs(k) = rhoq0(k,i_hyd_qs) / dens(k)
2074  qg(k) = rhoq0(k,i_hyd_qg) / dens(k)
2075 
2076  rho_fact(k) = sqrt( dens00 / dens(k) )
2077  end do
2078 
2079  if ( enable_wdxz2014 ) then
2080  ! Wainwright et al. (2014)
2081  do k = ks, ke
2082  ! intercept parameter N0
2083  n0r(k) = 1.16e+5_rp * exp( log( max( dens(k)*qr(k)*1000.0_rp, 1.e-2_rp ) )*0.477_rp )
2084  n0s(k) = 4.58e+9_rp * exp( log( max( dens(k)*qs(k)*1000.0_rp, 1.e-2_rp ) )*0.788_rp )
2085  n0g(k) = 9.74e+8_rp * exp( log( max( dens(k)*qg(k)*1000.0_rp, 1.e-2_rp ) )*0.816_rp )
2086  end do
2087  else
2088  do k = ks, ke
2089  ! intercept parameter N0
2090  n0r(k) = n0r_def ! Marshall and Palmer (1948)
2091  n0s(k) = n0s_def ! Gunn and Marshall (1958)
2092  n0g(k) = n0g_def
2093  end do
2094  end if
2095 
2096 
2097  do k = ks, ke
2098  !---< terminal velocity >
2099  zerosw = 0.5_rp - sign(0.5_rp, qi(k) - 1.e-8_rp )
2100  vterm(k,i_hyd_qi) = -3.29_rp * exp( log( dens(k)*qi(k)+zerosw )*0.16_rp ) * ( 1.0_rp-zerosw )
2101  end do
2102 
2103 
2104  do k = ks, ke
2105  ! slope parameter lambda (Rain)
2106  zerosw = 0.5_rp - sign(0.5_rp, qr(k) - 1.e-12_rp )
2107  rlmdr = sqrt(sqrt( dens(k) * qr(k) / ( ar * n0r(k) * gam_1br ) + zerosw )) * ( 1.0_rp-zerosw )
2108  rlmdr_dr = sqrt( rlmdr ) ! **Dr
2109  vterm(k,i_hyd_qr) = -cr * rho_fact(k) * gam_1brdr / gam_1br * rlmdr_dr
2110  end do
2111 
2112 
2113  if ( enable_rs2014 ) then
2114  !---< modification by Roh and Satoh (2014) >---
2115  ! bimodal size distribution of snow
2116  do k = ks, ke
2117  zerosw = 0.5_rp - sign(0.5_rp, dens(k) * qs(k) - 1.e-12_rp )
2118  xs2 = dens(k) * qs(k) / as
2119 
2120  tems = min( -0.1_rp, temc(k) )
2121  coef_at(1) = coef_a01 + tems * ( coef_a02 + tems * ( coef_a05 + tems * coef_a09 ) )
2122  coef_at(2) = coef_a03 + tems * ( coef_a04 + tems * coef_a07 )
2123  coef_at(3) = coef_a06 + tems * coef_a08
2124  coef_at(4) = coef_a10
2125  coef_bt(1) = coef_b01 + tems * ( coef_b02 + tems * ( coef_b05 + tems * coef_b09 ) )
2126  coef_bt(2) = coef_b03 + tems * ( coef_b04 + tems * coef_b07 )
2127  coef_bt(3) = coef_b06 + tems * coef_b08
2128  coef_bt(4) = coef_b10
2129  ! 0 + Bs(=2) moment
2130  nm = 2.0_rp
2131  loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
2132  b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
2133  moms_0bs = exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw )
2134  ! Bs(=2) + Ds(=0.25) moment
2135  nm = 2.25_rp
2136  loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
2137  b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
2138  rmoms_vt(k) = exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) / ( moms_0bs + zerosw )
2139  end do
2140  else
2141  ! slope parameter lambda (Snow)
2142  do k = ks, ke
2143  zerosw = 0.5_rp - sign(0.5_rp, qs(k) - 1.e-12_rp )
2144  rlmds = sqrt(sqrt( dens(k) * qs(k) / ( as * n0s(k) * gam_1bs ) + zerosw )) * ( 1.0_rp-zerosw )
2145  rlmds_ds = sqrt( sqrt(rlmds) ) ! **Ds
2146  rmoms_vt(k) = gam_1bsds / gam_1bs * rlmds_ds
2147  end do
2148  end if
2149 
2150  do k = ks, ke
2151  vterm(k,i_hyd_qs) = -cs * rho_fact(k) * rmoms_vt(k)
2152  end do
2153 
2154 
2155  do k = ks, ke
2156  ! slope parameter lambda (Graupel)
2157  zerosw = 0.5_rp - sign(0.5_rp, qg(k) - 1.e-12_rp )
2158  rlmdg = sqrt(sqrt( dens(k) * qg(k) / ( ag * n0g(k) * gam_1bg ) + zerosw )) * ( 1.0_rp-zerosw )
2159  rlmdg_dg = sqrt( rlmdg ) ! **Dg
2160  vterm(k,i_hyd_qg) = -cg * rho_fact(k) * gam_1bgdg / gam_1bg * rlmdg_dg
2161  enddo
2162 
2163 
2164 !OCL XFILL
2165  do k = ks, ke
2166  vterm(k,i_hyd_qc) = 0.0_rp
2167  end do
2168 
2169  if ( nofall_qr ) then
2170 !OCL XFILL
2171  do k = ks, ke
2172  vterm(k,i_hyd_qr) = 0.0_rp
2173  enddo
2174  endif
2175 
2176  if ( nofall_qi ) then
2177 !OCL XFILL
2178  do k = ks, ke
2179  vterm(k,i_hyd_qi) = 0.0_rp
2180  enddo
2181  endif
2182 
2183  if ( nofall_qs ) then
2184 !OCL XFILL
2185  do k = ks, ke
2186  vterm(k,i_hyd_qs) = 0.0_rp
2187  enddo
2188  endif
2189 
2190  if ( nofall_qg ) then
2191 !OCL XFILL
2192  do k = ks, ke
2193  vterm(k,i_hyd_qg) = 0.0_rp
2194  enddo
2195  endif
2196 
2197  vterm( 1:ks-1,:) = 0.0_rp
2198  vterm(ke+1:ka ,:) = 0.0_rp
2199 
2200  return

References scale_const::const_tem00.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_calc_tendency().

Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_cloud_fraction()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_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 
)

Calculate Cloud Fraction.

Definition at line 2210 of file scale_atmos_phy_mp_tomita08.F90.

2210  implicit none
2211  integer, intent(in) :: KA, KS, KE
2212  integer, intent(in) :: IA, IS, IE
2213  integer, intent(in) :: JA, JS, JE
2214 
2215  real(RP), intent(in) :: QTRC(KA,IA,JA,QA_MP-1)
2216  real(RP), intent(in) :: mask_criterion
2217 
2218  real(RP), intent(out) :: cldfrac(KA,IA,JA)
2219 
2220  real(RP) :: qhydro
2221  integer :: k, i, j
2222  !---------------------------------------------------------------------------
2223 
2224  !$omp parallel do OMP_SCHEDULE_ &
2225  !$omp private(qhydro)
2226  do j = js, je
2227  do i = is, ie
2228  do k = ks, ke
2229  qhydro = qtrc(k,i,j,i_hyd_qc) + qtrc(k,i,j,i_hyd_qr) &
2230  + qtrc(k,i,j,i_hyd_qi) + qtrc(k,i,j,i_hyd_qs) + qtrc(k,i,j,i_hyd_qg)
2231  cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-mask_criterion)
2232  enddo
2233  enddo
2234  enddo
2235 
2236  return

Referenced by mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_effective_radius()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_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,qa_mp-1), intent(in)  QTRC0,
real(rp), dimension (ka,ia,ja,n_hyd), intent(out)  Re 
)

Calculate Effective Radius.

Definition at line 2245 of file scale_atmos_phy_mp_tomita08.F90.

2245  use scale_const, only: &
2246  pi => const_pi, &
2247  dens_w => const_dwatr, &
2248  dens_i => const_dice, &
2249  tem00 => const_tem00
2250  use scale_atmos_hydrometeor, only: &
2251  n_hyd, &
2252  i_hc, &
2253  i_hr, &
2254  i_hi, &
2255  i_hs, &
2256  i_hg
2257  implicit none
2258  integer, intent(in) :: KA, KS, KE
2259  integer, intent(in) :: IA, IS, IE
2260  integer, intent(in) :: JA, JS, JE
2261 
2262  real(RP), intent(in) :: DENS0(KA,IA,JA)
2263  real(RP), intent(in) :: TEMP0(KA,IA,JA)
2264  real(RP), intent(in) :: QTRC0(KA,IA,JA,QA_MP-1)
2265 
2266  real(RP), intent(out) :: Re (KA,IA,JA,N_HYD) ! effective radius [cm]
2267  real(RP) :: dens(KA)
2268  real(RP) :: temc(KA)
2269  real(RP) :: qr(KA), qs(KA), qg(KA)
2270  real(RP) :: Nc(KA)
2271  real(RP) :: N0r(KA), N0s(KA), N0g(KA)
2272  real(RP) :: RLMDr, RLMDs, RLMDg
2273 
2274  real(RP), parameter :: um2cm = 100.0_rp
2275 
2276  !---< Roh and Satoh (2014) >---
2277  real(RP) :: tems, Xs2
2278  real(RP) :: coef_at(4), coef_bt(4)
2279  real(RP) :: loga_, b_, nm
2280 
2281  real(RP) :: zerosw
2282  integer :: k, i, j, ih
2283  !---------------------------------------------------------------------------
2284 
2285  !$omp parallel do OMP_SCHEDULE_
2286  do j = js, je
2287  do i = is, ie
2288  do k = ks, ke
2289  re(k,i,j,i_hi) = re_qi * um2cm
2290  end do
2291  end do
2292  end do
2293  !$omp parallel do OMP_SCHEDULE_
2294  do ih = i_hg+1, n_hyd
2295  do j = js, je
2296  do i = is, ie
2297  do k = ks, ke
2298  re(k,i,j,ih) = 0.0_rp
2299  end do
2300  end do
2301  end do
2302  end do
2303 
2304  if ( const_rec .or. fixed_re ) then
2305 
2306  !$omp parallel do OMP_SCHEDULE_
2307  do j = js, je
2308  do i = is, ie
2309  do k = ks, ke
2310  re(k,i,j,i_hc) = re_qc * um2cm
2311  end do
2312  end do
2313  end do
2314 
2315  else
2316 
2317  !$omp parallel do OMP_SCHEDULE_ &
2318  !$omp private(Nc)
2319  do j = js, je
2320  do i = is, ie
2321  if ( do_couple_aerosol ) then
2322  do k = ks, ke
2323  ! Nc(k) = max( CCN(k,i,j), Nc_def(i,j)*1.E+6_RP ) ! [#/m3] tentatively off the CCN effect
2324  nc(k) = nc_def(i,j) * 1.e+6_rp ! [#/m3]
2325  enddo
2326  else
2327  do k = ks, ke
2328  nc(k) = nc_def(i,j) * 1.e+6_rp ! [#/m3]
2329  enddo
2330  endif
2331 
2332  do k = ks, ke
2333  re(k,i,j,i_hc) = 1.1_rp &
2334  * ( dens0(k,i,j) * qtrc0(k,i,j,i_hyd_qc) / nc(k) / ( 4.0_rp / 3.0_rp * pi * dens_w ) )**(1.0_rp/3.0_rp)
2335  re(k,i,j,i_hc) = min( 1.e-3_rp, max( 1.e-6_rp, re(k,i,j,i_hc) ) ) * um2cm
2336  enddo
2337  enddo
2338  enddo
2339 
2340  endif
2341 
2342  if ( fixed_re ) then
2343 
2344  !$omp parallel do OMP_SCHEDULE_
2345  do j = js, je
2346  do i = is, ie
2347  do k = ks, ke
2348  re(k,i,j,i_hr) = 10000.e-6_rp * um2cm
2349  end do
2350  end do
2351  end do
2352  !$omp parallel do OMP_SCHEDULE_
2353  do j = js, je
2354  do i = is, ie
2355  do k = ks, ke
2356  re(k,i,j,i_hs) = re_qi * um2cm
2357  end do
2358  end do
2359  end do
2360  !$omp parallel do OMP_SCHEDULE_
2361  do j = js, je
2362  do i = is, ie
2363  do k = ks, ke
2364  re(k,i,j,i_hg) = re_qi * um2cm
2365  end do
2366  end do
2367  end do
2368 
2369  else
2370 
2371 #ifndef __GFORTRAN__
2372  !$omp parallel do default(none) &
2373  !$omp shared(JS,JE,IS,IE,KS,KE,DENS0,TEMP0,QTRC0,enable_WDXZ2014,N0r_def) &
2374  !$omp shared(N0s_def,N0g_def,Ar,GAM_1br,Re,As,GAM_1bs) &
2375  !$omp shared(enable_RS2014,ln10,Ag,GAM_1bg) &
2376  !$omp private(i,j,k,dens,temc,qr,qs,qg,N0r,N0s,N0g,zerosw,RLMDr,RLMDs,Xs2,nm,tems,loga_) &
2377  !$omp private(b_,RLMDg,coef_at,coef_bt) &
2378  !$omp OMP_SCHEDULE_ collapse(2)
2379 #else
2380  !$omp parallel do default(shared) &
2381  !$omp private(i,j,k,dens,temc,qr,qs,qg,N0r,N0s,N0g,zerosw,RLMDr,RLMDs,Xs2,nm,tems,loga_) &
2382  !$omp private(b_,RLMDg,coef_at,coef_bt) &
2383  !$omp OMP_SCHEDULE_ collapse(2)
2384 #endif
2385  do j = js, je
2386  do i = is, ie
2387 
2388  do k = ks, ke
2389  dens(k) = dens0(k,i,j)
2390  temc(k) = temp0(k,i,j) - tem00
2391  qr(k) = qtrc0(k,i,j,i_hyd_qr)
2392  qs(k) = qtrc0(k,i,j,i_hyd_qs)
2393  qg(k) = qtrc0(k,i,j,i_hyd_qg)
2394  end do
2395 
2396  ! intercept parameter N0
2397  if ( enable_wdxz2014 ) then
2398  ! Wainwright et al. (2014)
2399  do k = ks, ke
2400  n0r(k) = 1.16e+5_rp * exp( log( max( dens(k)*qr(k)*1000.0_rp, 1.e-2_rp ) )*0.477_rp )
2401  n0s(k) = 4.58e+9_rp * exp( log( max( dens(k)*qs(k)*1000.0_rp, 1.e-2_rp ) )*0.788_rp )
2402  n0g(k) = 9.74e+8_rp * exp( log( max( dens(k)*qg(k)*1000.0_rp, 1.e-2_rp ) )*0.816_rp )
2403  end do
2404  else
2405  do k = ks, ke
2406  n0r(k) = n0r_def ! Marshall and Palmer (1948)
2407  n0s(k) = n0s_def ! Gunn and Marshall (1958)
2408  n0g(k) = n0g_def
2409  end do
2410  end if
2411 
2412  ! slope parameter lambda
2413  do k = ks, ke
2414  zerosw = 0.5_rp - sign(0.5_rp, qr(k) - 1.e-12_rp )
2415  rlmdr = sqrt(sqrt( dens(k) * qr(k) / ( ar * n0r(k) * gam_1br ) + zerosw )) * ( 1.0_rp-zerosw )
2416  ! Effective radius is defined by r3m/r2m = 1.5/lambda
2417  re(k,i,j,i_hr) = 1.5_rp * rlmdr * um2cm
2418  end do
2419 
2420  if ( enable_rs2014 ) then
2421  do k = ks, ke
2422  zerosw = 0.5_rp - sign(0.5_rp, qs(k) - 1.e-12_rp )
2423  !---< modification by Roh and Satoh (2014) >---
2424  ! bimodal size distribution of snow
2425  zerosw = 0.5_rp - sign(0.5_rp, dens(k) * qs(k) - 1.e-12_rp )
2426  xs2 = dens(k) * qs(k) / as
2427 
2428  tems = min( -0.1_rp, temc(k) )
2429  coef_at(1) = coef_a01 + tems * ( coef_a02 + tems * ( coef_a05 + tems * coef_a09 ) )
2430  coef_at(2) = coef_a03 + tems * ( coef_a04 + tems * coef_a07 )
2431  coef_at(3) = coef_a06 + tems * coef_a08
2432  coef_at(4) = coef_a10
2433  coef_bt(1) = coef_b01 + tems * ( coef_b02 + tems * ( coef_b05 + tems * coef_b09 ) )
2434  coef_bt(2) = coef_b03 + tems * ( coef_b04 + tems * coef_b07 )
2435  coef_bt(3) = coef_b06 + tems * coef_b08
2436  coef_bt(4) = coef_b10
2437  ! 1 + Bs(=2) moment
2438  nm = 3.0_rp
2439  loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
2440  b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
2441 
2442  re(k,i,j,i_hs) = 0.5_rp * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) / ( xs2+zerosw ) * um2cm
2443  end do
2444  else
2445  do k = ks, ke
2446  zerosw = 0.5_rp - sign(0.5_rp, qs(k) - 1.e-12_rp )
2447  rlmds = sqrt(sqrt( dens(k) * qs(k) / ( as * n0s(k) * gam_1bs ) + zerosw )) * ( 1.0_rp-zerosw )
2448  re(k,i,j,i_hs) = 1.5_rp * rlmds * um2cm
2449  ! Re(k,i,j,I_HS) = dens * qs / N0s / ( 2.0_RP / 3.0_RP * PI * dens_i ) / RLMDs**3 * um2cm
2450  end do
2451  end if
2452 
2453  do k = ks, ke
2454  zerosw = 0.5_rp - sign(0.5_rp, qg(k) - 1.e-12_rp )
2455  rlmdg = sqrt(sqrt( dens(k) * qg(k) / ( ag * n0g(k) * gam_1bg ) + zerosw )) * ( 1.0_rp-zerosw )
2456  re(k,i,j,i_hg) = 1.5_rp * rlmdg * um2cm
2457  ! Re(k,i,j,I_HG) = dens * qg / N0g / ( 2.0_RP / 3.0_RP * PI * dens_i ) / RLMDg**3 * um2cm
2458  enddo
2459 
2460  enddo
2461  enddo
2462 
2463  endif
2464 
2465  return

References scale_const::const_dice, scale_const::const_dwatr, scale_const::const_pi, scale_const::const_tem00, 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 atmos_phy_mp_tomita08_adjustment(), and mod_atmos_phy_mp_vars::atmos_phy_mp_vars_get_diagnostic().

Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_qtrc2qhyd()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_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)  QTRC,
real(rp), dimension(ka,ia,ja,n_hyd), intent(out)  Qe 
)

Calculate mass ratio of each category.

Definition at line 2534 of file scale_atmos_phy_mp_tomita08.F90.

2534  use scale_atmos_hydrometeor, only: &
2535  n_hyd, &
2536  i_hc, &
2537  i_hr, &
2538  i_hi, &
2539  i_hs, &
2540  i_hg
2541  implicit none
2542  integer, intent(in) :: KA, KS, KE
2543  integer, intent(in) :: IA, IS, IE
2544  integer, intent(in) :: JA, JS, JE
2545 
2546  real(RP), intent(in) :: QTRC(KA,IA,JA,QA_MP-1)
2547 
2548  real(RP), intent(out) :: Qe(KA,IA,JA,N_HYD) ! mass ratio of each cateory [kg/kg]
2549 
2550  integer :: k, i, j, ih
2551  !---------------------------------------------------------------------------
2552 
2553  !$omp parallel do OMP_SCHEDULE_
2554 !OCL XFILL
2555  do j = js, je
2556  do i = is, ie
2557  do k = ks, ke
2558  qe(k,i,j,i_hc) = qtrc(k,i,j,i_hyd_qc)
2559  end do
2560  end do
2561  end do
2562  !$omp parallel do OMP_SCHEDULE_
2563 !OCL XFILL
2564  do j = js, je
2565  do i = is, ie
2566  do k = ks, ke
2567  qe(k,i,j,i_hr) = qtrc(k,i,j,i_hyd_qr)
2568  end do
2569  end do
2570  end do
2571  !$omp parallel do OMP_SCHEDULE_
2572 !OCL XFILL
2573  do j = js, je
2574  do i = is, ie
2575  do k = ks, ke
2576  qe(k,i,j,i_hi) = qtrc(k,i,j,i_hyd_qi)
2577  end do
2578  end do
2579  end do
2580  !$omp parallel do OMP_SCHEDULE_
2581 !OCL XFILL
2582  do j = js, je
2583  do i = is, ie
2584  do k = ks, ke
2585  qe(k,i,j,i_hs) = qtrc(k,i,j,i_hyd_qs)
2586  end do
2587  end do
2588  end do
2589  !$omp parallel do OMP_SCHEDULE_
2590 !OCL XFILL
2591  do j = js, je
2592  do i = is, ie
2593  do k = ks, ke
2594  qe(k,i,j,i_hg) = qtrc(k,i,j,i_hyd_qg)
2595  end do
2596  end do
2597  end do
2598  !$omp parallel do OMP_SCHEDULE_
2599 !OCL XFILL
2600  do ih = i_hg+1, n_hyd
2601  do j = js, je
2602  do i = is, ie
2603  do k = ks, ke
2604  qe(k,i,j,ih) = 0.0_rp
2605  end do
2606  end do
2607  end do
2608  end do
2609 
2610  return

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().

Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_qhyd2qtrc()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_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 
)

get mass ratio of each category

Definition at line 2619 of file scale_atmos_phy_mp_tomita08.F90.

2619  use scale_atmos_hydrometeor, only: &
2620  n_hyd, &
2621  i_hc, &
2622  i_hr, &
2623  i_hi, &
2624  i_hs, &
2625  i_hg, &
2626  i_hh
2627  implicit none
2628 
2629  integer, intent(in) :: KA, KS, KE
2630  integer, intent(in) :: IA, IS, IE
2631  integer, intent(in) :: JA, JS, JE
2632  real(RP), intent(in) :: Qe (KA,IA,JA,N_HYD) ! mass ratio of each cateory [kg/kg]
2633  real(RP), intent(out) :: QTRC(KA,IA,JA,QA_MP-1)
2634 
2635  integer :: k, i, j
2636  !---------------------------------------------------------------------------
2637 
2638  !$omp parallel do OMP_SCHEDULE_
2639 !OCL XFILL
2640  do j = js, je
2641  do i = is, ie
2642  do k = ks, ke
2643  qtrc(k,i,j,i_hyd_qc) = qe(k,i,j,i_hc)
2644  end do
2645  end do
2646  end do
2647  !$omp parallel do OMP_SCHEDULE_
2648 !OCL XFILL
2649  do j = js, je
2650  do i = is, ie
2651  do k = ks, ke
2652  qtrc(k,i,j,i_hyd_qr) = qe(k,i,j,i_hr)
2653  end do
2654  end do
2655  end do
2656  !$omp parallel do OMP_SCHEDULE_
2657 !OCL XFILL
2658  do j = js, je
2659  do i = is, ie
2660  do k = ks, ke
2661  qtrc(k,i,j,i_hyd_qi) = qe(k,i,j,i_hi)
2662  end do
2663  end do
2664  end do
2665  !$omp parallel do OMP_SCHEDULE_
2666 !OCL XFILL
2667  do j = js, je
2668  do i = is, ie
2669  do k = ks, ke
2670  qtrc(k,i,j,i_hyd_qs) = qe(k,i,j,i_hs)
2671  end do
2672  end do
2673  end do
2674  !$omp parallel do OMP_SCHEDULE_
2675 !OCL XFILL
2676  do j = js, je
2677  do i = is, ie
2678  do k = ks, ke
2679  qtrc(k,i,j,i_hyd_qg) = qe(k,i,j,i_hg) + qe(k,i,j,i_hh)
2680  end do
2681  end do
2682  end do
2683 
2684  return

References 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, and scale_atmos_hydrometeor::n_hyd.

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_qhyd2qtrc().

Here is the caller graph for this function:

Variable Documentation

◆ atmos_phy_mp_tomita08_ntracers

integer, parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_ntracers = QA_MP

Definition at line 43 of file scale_atmos_phy_mp_tomita08.F90.

43  integer, parameter, public :: ATMOS_PHY_MP_tomita08_ntracers = qa_mp

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

◆ atmos_phy_mp_tomita08_nwaters

integer, parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_nwaters = 2

Definition at line 44 of file scale_atmos_phy_mp_tomita08.F90.

44  integer, parameter, public :: ATMOS_PHY_MP_tomita08_nwaters = 2

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

◆ atmos_phy_mp_tomita08_nices

integer, parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_nices = 3

Definition at line 45 of file scale_atmos_phy_mp_tomita08.F90.

45  integer, parameter, public :: ATMOS_PHY_MP_tomita08_nices = 3

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

◆ atmos_phy_mp_tomita08_tracer_names

character(len=h_short), dimension(qa_mp), parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_tracer_names = (/ 'QV', 'QC', 'QR', 'QI', 'QS', 'QG' /)

Definition at line 46 of file scale_atmos_phy_mp_tomita08.F90.

46  character(len=H_SHORT), parameter, public :: ATMOS_PHY_MP_tomita08_tracer_names(QA_MP) = (/ &
47  'QV', &
48  'QC', &
49  'QR', &
50  'QI', &
51  'QS', &
52  'QG' /)

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

◆ atmos_phy_mp_tomita08_tracer_descriptions

character(len=h_mid), dimension(qa_mp), parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_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 '/)

Definition at line 53 of file scale_atmos_phy_mp_tomita08.F90.

53  character(len=H_MID) , parameter, public :: ATMOS_PHY_MP_tomita08_tracer_descriptions(QA_MP) = (/ &
54  'Ratio of Water Vapor mass to total mass (Specific humidity)', &
55  'Ratio of Cloud Water mass to total mass ', &
56  'Ratio of Rain Water mass to total mass ', &
57  'Ratio of Cloud Ice mass ratio to total mass ', &
58  'Ratio of Snow miass ratio to total mass ', &
59  'Ratio of Graupel mass ratio to total mass '/)

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

◆ atmos_phy_mp_tomita08_tracer_units

character(len=h_short), dimension(qa_mp), parameter, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_tracer_units = (/ 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg', 'kg/kg' /)

Definition at line 60 of file scale_atmos_phy_mp_tomita08.F90.

60  character(len=H_SHORT), parameter, public :: ATMOS_PHY_MP_tomita08_tracer_units(QA_MP) = (/ &
61  'kg/kg', &
62  'kg/kg', &
63  'kg/kg', &
64  'kg/kg', &
65  'kg/kg', &
66  'kg/kg' /)

Referenced by mod_atmos_phy_mp_driver::atmos_phy_mp_driver_tracer_setup().

scale_const::const_grav
real(rp), public const_grav
standard acceleration of gravity [m/s2]
Definition: scale_const.F90:46
scale_prc::prc_abort
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:342
scale_atmos_hydrometeor::i_hr
integer, parameter, public i_hr
liquid water rain
Definition: scale_atmos_hydrometeor.F90:82
scale_atmos_hydrometeor::i_hs
integer, parameter, public i_hs
snow
Definition: scale_atmos_hydrometeor.F90:84
scale_atmos_hydrometeor
module atmosphere / hydrometeor
Definition: scale_atmos_hydrometeor.F90:12
scale_atmos_hydrometeor::i_hh
integer, parameter, public i_hh
hail
Definition: scale_atmos_hydrometeor.F90:86
scale_file_history
module file_history
Definition: scale_file_history.F90:15
scale_prc
module PROCESS
Definition: scale_prc.F90:11
scale_const::const_pi
real(rp), public const_pi
pi
Definition: scale_const.F90:31
scale_atmos_hydrometeor::i_hi
integer, parameter, public i_hi
ice water cloud
Definition: scale_atmos_hydrometeor.F90:83
scale_const
module CONSTANT
Definition: scale_const.F90:11
scale_atmos_phy_mp_common
module ATMOSPHERE / Physics Cloud Microphysics - Common
Definition: scale_atmos_phy_mp_common.F90:13
scale_specfunc
module SPECFUNC
Definition: scale_specfunc.F90:14
scale_atmos_hydrometeor::i_hc
integer, parameter, public i_hc
liquid water cloud
Definition: scale_atmos_hydrometeor.F90:81
scale_const::const_dwatr
real(rp), parameter, public const_dwatr
density of water [kg/m3]
Definition: scale_const.F90:82
scale_const::const_tem00
real(rp), parameter, public const_tem00
temperature reference (0C) [K]
Definition: scale_const.F90:90
scale_file_history::file_history_reg
subroutine, public file_history_reg(name, desc, unit, itemid, standard_name, ndims, dim_type, cell_measures, fill_halo)
Register/Append variable to history file.
Definition: scale_file_history.F90:650
scale_const::const_dice
real(rp), parameter, public const_dice
density of ice [kg/m3]
Definition: scale_const.F90:83
scale_specfunc::sf_gamma
real(rp) function, public sf_gamma(x)
Gamma function.
Definition: scale_specfunc.F90:50
scale_atmos_hydrometeor::i_hg
integer, parameter, public i_hg
graupel
Definition: scale_atmos_hydrometeor.F90:85