SCALE-RM
Functions/Subroutines | Variables
scale_atmos_phy_mp_tomita08 Module Reference

module ATMOSPHERE / Physics Cloud Microphysics More...

Functions/Subroutines

subroutine, public atmos_phy_mp_tomita08_setup (MP_TYPE)
 Setup. More...
 
subroutine, public atmos_phy_mp_tomita08 (DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
 Cloud Microphysics. More...
 
subroutine, public atmos_phy_mp_tomita08_cloudfraction (cldfrac, QTRC, mask_criterion)
 Calculate Cloud Fraction. More...
 
subroutine, public atmos_phy_mp_tomita08_effectiveradius (Re, QTRC0, DENS0, TEMP0)
 Calculate Effective Radius. More...
 
subroutine, public atmos_phy_mp_tomita08_mixingratio (Qe, QTRC0)
 Calculate mixing ratio of each category. More...
 

Variables

real(rp), dimension(mp_qa), target, public atmos_phy_mp_dens
 

Detailed Description

module ATMOSPHERE / Physics Cloud Microphysics

Description
Cloud Microphysics by Lin-type parametarization Reference: Tomita(2008)
Author
Team SCALE
History
  • 2013-03-25 (H.Yashiro) [new]
  • 2015-09-08 (Y.Sato) [add] Add evaporated cloud number concentration
NAMELIST
  • PARAM_ATMOS_PHY_MP
    nametypedefault valuecomment
    MP_DOPRECIPITATION logical .true. apply sedimentation (precipitation)?
    MP_DONEGATIVE_FIXER logical .true. apply negative fixer?
    MP_DOEXPRICIT_ICEGEN logical .false. apply explicit ice generation?
    MP_NTMAX_SEDIMENTATION integer 1 number of time step for sedimentation
    MP_COUPLE_AEROSOL logical .false. apply CCN effect?

  • PARAM_ATMOS_PHY_MP_TOMITA08
    nametypedefault valuecomment
    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_ROH2014 logical .false. use scheme by Roh and Satoh (2014)
    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
    CR real(RP) 130.0_RP
    CS real(RP) 4.84_RP
    DRAG_G real(RP) 0.6_RP drag coefficient for graupel
    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
    GAMMA_SACR real(RP) 25.E-3_RP effect of low temperature for Esi
    N0S real(RP) 3.E6_RP intercept parameter for snow [1/m4]
    N0G real(RP) 4.E6_RP intercept parameter for graupel [1/m4]
    DEBUG logical

History Output
namedescriptionunitvariable
Vterm_QG terminal velocity of QG m/s vterm
Vterm_QI terminal velocity of QI m/s vterm
Vterm_QR terminal velocity of QR m/s vterm
Vterm_QS terminal velocity of QS m/s vterm

Function/Subroutine Documentation

◆ atmos_phy_mp_tomita08_setup()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_setup ( character(len=*), intent(in)  MP_TYPE)

Setup.

Definition at line 277 of file scale_atmos_phy_mp_tomita08.F90.

References atmos_phy_mp_dens, scale_const::const_dice, scale_const::const_dwatr, scale_const::const_grav, scale_const::const_pi, scale_grid::grid_cdz, scale_history::hist_reg(), scale_grid_index::ia, scale_grid_index::ie, scale_stdio::io_fid_conf, scale_stdio::io_fid_log, scale_stdio::io_l, scale_stdio::io_lnml, scale_grid_index::is, scale_grid_index::ja, scale_grid_index::je, scale_grid_index::js, scale_grid_index::ka, scale_process::prc_mpistop(), scale_specfunc::sf_gamma(), and scale_time::time_dtsec_atmos_phy_mp.

Referenced by scale_atmos_phy_mp::atmos_phy_mp_setup().

277  use scale_process, only: &
279  use scale_const, only: &
280  pi => const_pi, &
281  grav => const_grav, &
282  dens_w => const_dwatr, &
283  dens_i => const_dice
284  use scale_specfunc, only: &
285  sf_gamma
286  use scale_time, only: &
288  use scale_grid, only: &
289  cdz => grid_cdz
290  use scale_history, only: &
291  hist_reg
292  implicit none
293 
294  character(len=*), intent(in) :: mp_type
295 
296  real(RP) :: autoconv_nc = nc_ocn
297  logical :: enable_kk2000 = .false.
298  logical :: enable_roh2014 = .false.
299 
300  namelist / param_atmos_phy_mp / &
301  mp_doprecipitation, &
302  mp_donegative_fixer, &
303  mp_doexpricit_icegen, &
304  mp_ntmax_sedimentation, &
305  mp_couple_aerosol
306 
307  namelist / param_atmos_phy_mp_tomita08 / &
308  autoconv_nc, &
309  enable_kk2000, &
310  enable_roh2014, &
311  dens_s, &
312  dens_g, &
313  re_qc, &
314  re_qi, &
315  cr, &
316  cs, &
317  drag_g, &
318  beta_saut, &
319  gamma_saut, &
320  gamma_sacr, &
321  n0s, &
322  n0g, &
323  debug
324 
325  real(RP), parameter :: max_term_vel = 10.0_rp !-- terminal velocity for calculate dt of sedimentation
326  integer :: nstep_max
327 
328  integer :: ierr
329  integer :: i, j, ip
330  !---------------------------------------------------------------------------
331 
332  if( io_l ) write(io_fid_log,*)
333  if( io_l ) write(io_fid_log,*) '++++++ Module[Cloud Microphysics] / Categ[ATMOS PHYSICS] / Origin[SCALElib]'
334  if( io_l ) write(io_fid_log,*) '*** TOMITA08: 1-moment bulk 6 category'
335 
336  if ( mp_type /= 'TOMITA08' ) then
337  write(*,*) 'xxx ATMOS_PHY_MP_TYPE is not TOMITA08. Check!'
338  call prc_mpistop
339  endif
340 
341  if ( i_qv <= 0 &
342  .OR. i_qc <= 0 &
343  .OR. i_qr <= 0 &
344  .OR. i_qi <= 0 &
345  .OR. i_qs <= 0 &
346  .OR. i_qg <= 0 ) then
347  write(*,*) 'xxx TOMITA08 needs QV/C/R/I/S/G tracer. Check!'
348  call prc_mpistop
349  endif
350 
351  allocate( work3d(ka,ia,ja) )
352  work3d(:,:,:) = 0.0_rp
353 
354  allocate( nc_def(ia,ja) )
355 
356  !--- read namelist
357  rewind(io_fid_conf)
358  read(io_fid_conf,nml=param_atmos_phy_mp,iostat=ierr)
359  if( ierr < 0 ) then !--- missing
360  if( io_l ) write(io_fid_log,*) '*** Not found namelist. Default used.'
361  elseif( ierr > 0 ) then !--- fatal error
362  write(*,*) 'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_MP. Check!'
363  call prc_mpistop
364  endif
365  if( io_lnml ) write(io_fid_log,nml=param_atmos_phy_mp)
366 
367  if ( io_l ) write(io_fid_log,*)
368  if ( io_l ) write(io_fid_log,*) '*** Enable negative fixer? : ', mp_donegative_fixer
369  if ( io_l ) write(io_fid_log,*) '*** Enable sedimentation (precipitation)? : ', mp_doprecipitation
370  if ( io_l ) write(io_fid_log,*) '*** Enable explicit ice generation? : ', mp_doexpricit_icegen
371 
372  nstep_max = ceiling( ( time_dtsec_atmos_phy_mp * max_term_vel ) / minval( cdz(:) ) )
373  mp_ntmax_sedimentation = max( mp_ntmax_sedimentation, nstep_max )
374 
375  mp_nstep_sedimentation = mp_ntmax_sedimentation
376  mp_rnstep_sedimentation = 1.0_rp / real(mp_ntmax_sedimentation,kind=rp)
377  mp_dtsec_sedimentation = time_dtsec_atmos_phy_mp * mp_rnstep_sedimentation
378 
379  if ( io_l ) write(io_fid_log,*) '*** Timestep of sedimentation is divided into : ', mp_ntmax_sedimentation, 'step'
380  if ( io_l ) write(io_fid_log,*) '*** DT of sedimentation : ', mp_dtsec_sedimentation, '[s]'
381 
382  !--- read namelist
383  rewind(io_fid_conf)
384  read(io_fid_conf,nml=param_atmos_phy_mp_tomita08,iostat=ierr)
385  if( ierr < 0 ) then !--- missing
386  if( io_l ) write(io_fid_log,*) '*** Not found namelist. Default used.'
387  elseif( ierr > 0 ) then !--- fatal error
388  write(*,*) 'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_MP_TOMITA08. Check!'
389  call prc_mpistop
390  endif
391  if( io_lnml ) write(io_fid_log,nml=param_atmos_phy_mp_tomita08)
392 
393  if ( io_l ) write(io_fid_log,*)
394  if ( io_l ) write(io_fid_log,*) '*** density of the snow [kg/m3] : ', dens_s
395  if ( io_l ) write(io_fid_log,*) '*** density of the graupel [kg/m3] : ', dens_g
396  if ( io_l ) write(io_fid_log,*) '*** Nc for auto-conversion [num/m3]: ', autoconv_nc
397  if ( io_l ) write(io_fid_log,*) '*** Use k-k scheme? : ', enable_kk2000
398  if ( io_l ) write(io_fid_log,*) '*** Use Roh scheme? : ', enable_roh2014
399  if ( io_l ) write(io_fid_log,*)
400 
401  ! For the calculation of optically effective volume
402  atmos_phy_mp_dens(i_mp_qc) = dens_w
403  atmos_phy_mp_dens(i_mp_qr) = dens_w
404  atmos_phy_mp_dens(i_mp_qi) = dens_i
405  atmos_phy_mp_dens(i_mp_qs) = dens_i
406  atmos_phy_mp_dens(i_mp_qg) = dens_i
407 
408  !--- empirical coefficients A, B, C, D
409  ar = pi * dens_w / 6.0_rp
410  as = pi * dens_s / 6.0_rp
411  ag = pi * dens_g / 6.0_rp
412 
413  br = 3.0_rp
414  bs = 3.0_rp
415  bg = 3.0_rp
416 
417  cg = sqrt( ( 4.0_rp * dens_g * grav ) / ( 3.0_rp * dens00 * drag_g ) )
418 
419  dr = 0.50_rp
420  ds = 0.25_rp
421  dg = 0.50_rp
422 
423  if ( enable_roh2014 ) then ! overwrite parameters
424  sw_roh2014 = 1.0_rp
425  n0g = 4.e8_rp
426  as = 0.069_rp
427  bs = 2.0_rp
428  esi = 0.25_rp
429  endif
430 
431  gam = 1.0_rp ! =0!
432  gam_2 = 1.0_rp ! =1!
433  gam_3 = 2.0_rp ! =2!
434 
435  gam_1br = sf_gamma( 1.0_rp + br ) ! = 4!
436  gam_2br = sf_gamma( 2.0_rp + br ) ! = 5!
437  gam_3br = sf_gamma( 3.0_rp + br ) ! = 6!
438  gam_3dr = sf_gamma( 3.0_rp + dr )
439  gam_6dr = sf_gamma( 6.0_rp + dr )
440  gam_1brdr = sf_gamma( 1.0_rp + br + dr )
441  gam_5dr_h = sf_gamma( 0.5_rp * (5.0_rp+dr) )
442 
443  gam_1bs = sf_gamma( 1.0_rp + bs ) ! = 4!
444  gam_2bs = sf_gamma( 2.0_rp + bs ) ! = 5!
445  gam_3bs = sf_gamma( 3.0_rp + bs ) ! = 6!
446  gam_3ds = sf_gamma( 3.0_rp + ds )
447  gam_1bsds = sf_gamma( 1.0_rp + bs + ds )
448  gam_5ds_h = sf_gamma( 0.5_rp * (5.0_rp+ds) )
449 
450  gam_1bg = sf_gamma( 1.0_rp + bg ) ! = 4!
451  gam_3dg = sf_gamma( 3.0_rp + dg )
452  gam_1bgdg = sf_gamma( 1.0_rp + bg + dg)
453  gam_5dg_h = sf_gamma( 0.5_rp * (5.0_rp+dg) )
454 
455  do j = js, je
456  do i = is, ie
457  nc_def(i,j) = autoconv_nc
458  enddo
459  enddo
460 
461  if ( mp_doexpricit_icegen ) then
462  only_liquid = .true.
463  sw_useicegen = 1.0_rp
464  else
465  only_liquid = .false.
466  sw_useicegen = 0.0_rp
467  endif
468 
469  if ( enable_kk2000 ) then
470  sw_kk2000 = 1.0_rp
471  else
472  sw_kk2000 = 0.0_rp
473  endif
474 
475  ! detailed tendency monitor
476  w_desc(:) = w_name(:)
477  do ip = 1, w_nmax
478  call hist_reg( w_histid(ip), w_zinterp(ip), w_name(ip), w_desc(ip), w_unit(ip), ndim=3 )
479  enddo
480 
481  return
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
subroutine, public hist_reg(itemid, zinterp, item, desc, unit, ndim, xdim, ydim, zdim)
Register/Append variable to history file.
subroutine, public prc_mpistop
Abort MPI.
real(rp), parameter, public const_dwatr
density of water [kg/m3]
Definition: scale_const.F90:87
real(dp), public time_dtsec_atmos_phy_mp
time interval of physics(microphysics) [sec]
Definition: scale_time.F90:41
real(rp) function, public sf_gamma(x)
Gamma function.
real(rp), parameter, public const_dice
density of ice [kg/m3]
Definition: scale_const.F90:88
integer, public ia
of x whole cells (local, with HALO)
integer, public ka
of z whole cells (local, with HALO)
real(rp), dimension(mp_qa), target, public atmos_phy_mp_dens
real(rp), public const_grav
standard acceleration of gravity [m/s2]
Definition: scale_const.F90:48
integer, public js
start point of inner domain: y, local
module TIME
Definition: scale_time.F90:15
module PROCESS
module SPECFUNC
module CONSTANT
Definition: scale_const.F90:14
module GRID (cartesian)
integer, public ie
end point of inner domain: x, local
real(rp), dimension(:), allocatable, public grid_cdz
z-length of control volume [m]
module HISTORY
real(rp), public const_pi
pi
Definition: scale_const.F90:34
integer, parameter, public rp
integer, public ja
of y whole cells (local, with HALO)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08 ( real(rp), dimension(ka,ia,ja), intent(inout)  DENS,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMZ,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMX,
real(rp), dimension(ka,ia,ja), intent(inout)  MOMY,
real(rp), dimension(ka,ia,ja), intent(inout)  RHOT,
real(rp), dimension(ka,ia,ja,qad), intent(inout)  QTRC,
real(rp), dimension(ka,ia,ja), intent(in)  CCN,
real(rp), dimension(ka,ia,ja), intent(out)  EVAPORATE,
real(rp), dimension(ia,ja), intent(out)  SFLX_rain,
real(rp), dimension(ia,ja), intent(out)  SFLX_snow 
)

Cloud Microphysics.

Definition at line 497 of file scale_atmos_phy_mp_tomita08.F90.

References scale_atmos_phy_mp_common::atmos_phy_mp_negative_fixer(), scale_atmos_phy_mp_common::atmos_phy_mp_precipitation(), scale_atmos_phy_mp_common::atmos_phy_mp_saturation_adjustment(), scale_const::const_cl, scale_const::const_dwatr, scale_const::const_eps, scale_const::const_pi, scale_const::const_pre00, scale_const::const_rvap, scale_const::const_tem00, scale_history::hist_query(), scale_grid_index::ie, scale_stdio::io_fid_log, scale_stdio::io_l, scale_grid_index::is, scale_grid_index::je, scale_grid_index::js, scale_grid_index::ka, scale_grid_index::ke, scale_grid_index::ks, dc_log::log(), scale_prof::prof_rapend(), scale_prof::prof_rapstart(), scale_tracer::qa, and scale_time::time_dtsec_atmos_phy_mp.

Referenced by scale_atmos_phy_mp::atmos_phy_mp_setup().

497  use scale_grid_index
498  use scale_const, only: &
499  dwatr => const_dwatr, &
500  pi => const_pi
501  use scale_time, only: &
503  use scale_history, only: &
504  hist_in
505  use scale_tracer, only: &
506  qad => qa
507  use scale_atmos_thermodyn, only: &
508  thermodyn_rhoe => atmos_thermodyn_rhoe, &
509  thermodyn_rhot => atmos_thermodyn_rhot, &
510  thermodyn_temp_pres_e => atmos_thermodyn_temp_pres_e
511  use scale_atmos_phy_mp_common, only: &
512  mp_negative_fixer => atmos_phy_mp_negative_fixer, &
513  mp_precipitation => atmos_phy_mp_precipitation, &
514  mp_saturation_adjustment => atmos_phy_mp_saturation_adjustment
515  implicit none
516 
517  real(RP), intent(inout) :: dens(ka,ia,ja)
518  real(RP), intent(inout) :: momz(ka,ia,ja)
519  real(RP), intent(inout) :: momx(ka,ia,ja)
520  real(RP), intent(inout) :: momy(ka,ia,ja)
521  real(RP), intent(inout) :: rhot(ka,ia,ja)
522  real(RP), intent(inout) :: qtrc(ka,ia,ja,qad)
523  real(RP), intent(in) :: ccn(ka,ia,ja)
524  real(RP), intent(out) :: evaporate(ka,ia,ja) ! number of evaporated cloud [/m3/s]
525  real(RP), intent(out) :: sflx_rain(ia,ja)
526  real(RP), intent(out) :: sflx_snow(ia,ja)
527 
528  real(RP) :: rhoe_t(ka,ia,ja)
529  real(RP) :: qtrc_t(ka,ia,ja,qa)
530  real(RP) :: rhoe (ka,ia,ja)
531  real(RP) :: temp (ka,ia,ja)
532  real(RP) :: pres (ka,ia,ja)
533 
534  real(RP) :: vterm (ka,ia,ja,qa) ! terminal velocity of each tracer [m/s]
535  real(RP) :: flx_rain (ka,ia,ja)
536  real(RP) :: flx_snow (ka,ia,ja)
537  real(RP) :: wflux_rain(ka,ia,ja)
538  real(RP) :: wflux_snow(ka,ia,ja)
539  real(RP) :: qc_before_satadj(ka,ia,ja)
540  integer :: step
541  integer :: k, i, j
542  !---------------------------------------------------------------------------
543 
544  if( io_l ) write(io_fid_log,*) '*** Physics step: Cloud microphysics(tomita08)'
545 
546  if ( mp_donegative_fixer ) then
547  call mp_negative_fixer( dens(:,:,:), & ! [INOUT]
548  rhot(:,:,:), & ! [INOUT]
549  qtrc(:,:,:,:) ) ! [INOUT]
550  endif
551 
552  call thermodyn_rhoe( rhoe(:,:,:), & ! [OUT]
553  rhot(:,:,:), & ! [IN]
554  qtrc(:,:,:,:) ) ! [IN]
555 
556  !##### MP Main #####
557  call mp_tomita08( rhoe_t(:,:,:), & ! [OUT]
558  qtrc_t(:,:,:,:), & ! [OUT]
559  rhoe(:,:,:), & ! [INOUT]
560  qtrc(:,:,:,:), & ! [INOUT]
561  ccn(:,:,:), & ! [IN]
562  dens(:,:,:) ) ! [IN]
563 
564  flx_rain(:,:,:) = 0.0_rp
565  flx_snow(:,:,:) = 0.0_rp
566 
567  vterm(:,:,:,:) = 0.0_rp
568 
569  if ( mp_doprecipitation ) then
570 
571  do step = 1, mp_nstep_sedimentation
572 
573  call thermodyn_temp_pres_e( temp(:,:,:), & ! [OUT]
574  pres(:,:,:), & ! [OUT]
575  dens(:,:,:), & ! [IN]
576  rhoe(:,:,:), & ! [IN]
577  qtrc(:,:,:,:) ) ! [IN]
578 
579  call mp_tomita08_vterm( vterm(:,:,:,:), & ! [OUT]
580  dens(:,:,:), & ! [IN]
581  temp(:,:,:), & ! [IN]
582  qtrc(:,:,:,:) ) ! [IN]
583 
584  call mp_precipitation( wflux_rain(:,:,:), & ! [OUT]
585  wflux_snow(:,:,:), & ! [OUT]
586  dens(:,:,:), & ! [INOUT]
587  momz(:,:,:), & ! [INOUT]
588  momx(:,:,:), & ! [INOUT]
589  momy(:,:,:), & ! [INOUT]
590  rhoe(:,:,:), & ! [INOUT]
591  qtrc(:,:,:,:), & ! [INOUT]
592  vterm(:,:,:,:), & ! [IN]
593  temp(:,:,:), & ! [IN]
594  mp_dtsec_sedimentation ) ! [IN]
595 
596  do j = js, je
597  do i = is, ie
598  do k = ks-1, ke
599  flx_rain(k,i,j) = flx_rain(k,i,j) + wflux_rain(k,i,j) * mp_rnstep_sedimentation
600  flx_snow(k,i,j) = flx_snow(k,i,j) + wflux_snow(k,i,j) * mp_rnstep_sedimentation
601  enddo
602  enddo
603  enddo
604 
605  enddo
606 
607  else
608  vterm(:,:,:,:) = 0.0_rp
609  endif
610 
611  call hist_in( vterm(:,:,:,i_qr), 'Vterm_QR', 'terminal velocity of QR', 'm/s' )
612  call hist_in( vterm(:,:,:,i_qi), 'Vterm_QI', 'terminal velocity of QI', 'm/s' )
613  call hist_in( vterm(:,:,:,i_qs), 'Vterm_QS', 'terminal velocity of QS', 'm/s' )
614  call hist_in( vterm(:,:,:,i_qg), 'Vterm_QG', 'terminal velocity of QG', 'm/s' )
615 
616  do j = js, je
617  do i = is, ie
618  do k = ks, ke
619  qc_before_satadj(k,i,j) = qtrc(k,i,j,i_qc)
620  enddo
621  enddo
622  enddo
623 
624  call mp_saturation_adjustment( rhoe_t(:,:,:), & ! [INOUT]
625  qtrc_t(:,:,:,:), & ! [INOUT]
626  rhoe(:,:,:), & ! [INOUT]
627  qtrc(:,:,:,:), & ! [INOUT]
628  dens(:,:,:), & ! [IN]
629  only_liquid ) ! [IN]
630 
631  do j = js, je
632  do i = is, ie
633  do k = ks, ke
634  evaporate(k,i,j) = max( qc_before_satadj(k,i,j) - qtrc(k,i,j,i_qc), 0.0_rp ) / dt ! if negative, condensation
635  evaporate(k,i,j) = evaporate(k,i,j) * dens(k,i,j) &
636  / (4.0_rp/3.0_rp*pi*dwatr*re_qc**3) ! mass -> number (assuming constant particle radius as re_qc)
637  enddo
638  enddo
639  enddo
640 
641  !##### END MP Main #####
642 
643  call thermodyn_rhot( rhot(:,:,:), & ! [OUT]
644  rhoe(:,:,:), & ! [IN]
645  qtrc(:,:,:,:) ) ! [IN]
646 
647  if ( mp_donegative_fixer ) then
648  call mp_negative_fixer( dens(:,:,:), & ! [INOUT]
649  rhot(:,:,:), & ! [INOUT]
650  qtrc(:,:,:,:) ) ! [INOUT]
651  endif
652 
653  sflx_rain(:,:) = flx_rain(ks-1,:,:)
654  sflx_snow(:,:) = flx_snow(ks-1,:,:)
655 
656  return
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
subroutine, public atmos_phy_mp_precipitation(flux_rain, flux_snow, DENS, MOMZ, MOMX, MOMY, RHOE, QTRC, vterm, temp, dt)
precipitation transport
real(rp), parameter, public const_dwatr
density of water [kg/m3]
Definition: scale_const.F90:87
real(dp), public time_dtsec_atmos_phy_mp
time interval of physics(microphysics) [sec]
Definition: scale_time.F90:41
integer, public ke
end point of inner domain: z, local
integer, public qa
module ATMOSPHERE / Physics Cloud Microphysics - Common
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public ka
of z whole cells (local, with HALO)
integer, public js
start point of inner domain: y, local
module TIME
Definition: scale_time.F90:15
module CONSTANT
Definition: scale_const.F90:14
integer, public ks
start point of inner domain: z, local
subroutine, public atmos_phy_mp_negative_fixer(DENS, RHOT, QTRC)
Negative fixer.
integer, public ie
end point of inner domain: x, local
module ATMOSPHERE / Thermodynamics
module HISTORY
real(rp), public const_pi
pi
Definition: scale_const.F90:34
subroutine, public atmos_phy_mp_saturation_adjustment(RHOE_t, QTRC_t, RHOE0, QTRC0, DENS0, flag_liquid)
Saturation adjustment.
integer, public ja
of y whole cells (local, with HALO)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_cloudfraction()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_cloudfraction ( real(rp), dimension(ka,ia,ja), intent(out)  cldfrac,
real(rp), dimension (ka,ia,ja,qad), intent(in)  QTRC,
real(rp), intent(in)  mask_criterion 
)

Calculate Cloud Fraction.

Definition at line 1815 of file scale_atmos_phy_mp_tomita08.F90.

References scale_grid_index::ie, scale_grid_index::is, scale_grid_index::je, scale_grid_index::js, scale_grid_index::ke, scale_grid_index::ks, and scale_tracer::qa.

Referenced by scale_atmos_phy_mp::atmos_phy_mp_setup().

1815  use scale_grid_index
1816  use scale_tracer, only: &
1817  qad => qa
1818  implicit none
1819 
1820  real(RP), intent(out) :: cldfrac(ka,ia,ja)
1821  real(RP), intent(in) :: qtrc (ka,ia,ja,qad)
1822  real(RP), intent(in) :: mask_criterion
1823 
1824  real(RP) :: qhydro
1825  integer :: k, i, j, iq
1826  !---------------------------------------------------------------------------
1827 
1828  do j = js, je
1829  do i = is, ie
1830  do k = ks, ke
1831  qhydro = 0.0_rp
1832  do iq = 1, mp_qa
1833  qhydro = qhydro + qtrc(k,i,j,i_mp2all(iq))
1834  enddo
1835  cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-mask_criterion)
1836  enddo
1837  enddo
1838  enddo
1839 
1840  return
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
integer, public ke
end point of inner domain: z, local
integer, public qa
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public ka
of z whole cells (local, with HALO)
integer, public js
start point of inner domain: y, local
integer, public ks
start point of inner domain: z, local
integer, public ie
end point of inner domain: x, local
integer, public ja
of y whole cells (local, with HALO)
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_effectiveradius()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_effectiveradius ( real(rp), dimension (ka,ia,ja,mp_qad), intent(out)  Re,
real(rp), dimension(ka,ia,ja,qad), intent(in)  QTRC0,
real(rp), dimension(ka,ia,ja), intent(in)  DENS0,
real(rp), dimension(ka,ia,ja), intent(in)  TEMP0 
)

Calculate Effective Radius.

Definition at line 1850 of file scale_atmos_phy_mp_tomita08.F90.

References scale_const::const_tem00, scale_grid_index::ie, scale_grid_index::is, scale_grid_index::je, scale_grid_index::js, scale_grid_index::ke, scale_grid_index::ks, scale_tracer::mp_qa, and scale_tracer::qa.

Referenced by scale_atmos_phy_mp::atmos_phy_mp_setup().

1850  use scale_grid_index
1851  use scale_const, only: &
1852  tem00 => const_tem00
1853  use scale_tracer, only: &
1854  qad => qa, &
1855  mp_qad => mp_qa
1856  implicit none
1857 
1858  real(RP), intent(out) :: re (ka,ia,ja,mp_qad) ! effective radius [cm]
1859  real(RP), intent(in) :: qtrc0(ka,ia,ja,qad) ! tracer mass concentration [kg/kg]
1860  real(RP), intent(in) :: dens0(ka,ia,ja) ! density [kg/m3]
1861  real(RP), intent(in) :: temp0(ka,ia,ja) ! temperature [K]
1862 
1863  real(RP) :: dens
1864  real(RP) :: temc
1865  real(RP) :: q(qa)
1866  real(RP) :: rlmdr, rlmds, rlmdg
1867 
1868  real(RP), parameter :: um2cm = 100.0_rp
1869 
1870  !---< Roh and Satoh (2014) >---
1871  real(RP) :: tems, rhoqs, xs2
1872  real(RP) :: moms_2, moms_1bs
1873  real(RP) :: coef_at(4), coef_bt(4)
1874  real(RP) :: loga_, b_, nm
1875 
1876  real(RP) :: zerosw
1877  integer :: k, i, j, iq
1878  !---------------------------------------------------------------------------
1879 
1880  re(:,:,:,i_mp_qc) = re_qc * um2cm
1881  re(:,:,:,i_mp_qi) = re_qi * um2cm
1882 
1883  do j = js, je
1884  do i = is, ie
1885  do k = ks, ke
1886  dens = dens0(k,i,j)
1887  temc = temp0(k,i,j) - tem00
1888  do iq = i_qv, i_qg
1889  q(iq) = qtrc0(k,i,j,iq)
1890  enddo
1891 
1892  ! slope parameter lambda
1893  zerosw = 0.5_rp - sign(0.5_rp, q(i_qr) - 1.e-12_rp )
1894  rlmdr = sqrt(sqrt( dens * q(i_qr) / ( ar * n0r * gam_1br ) + zerosw )) * ( 1.0_rp - zerosw )
1895 
1896  ! Effective radius is defined by r3m/r2m = 1.5/lambda
1897  re(k,i,j,i_mp_qr) = 1.5_rp * rlmdr * um2cm
1898 
1899  zerosw = 0.5_rp - sign(0.5_rp, q(i_qs) - 1.e-12_rp )
1900  rlmds = sqrt(sqrt( dens * q(i_qs) / ( as * n0s * gam_1bs ) + zerosw )) * ( 1.0_rp - zerosw )
1901 
1902  !---< modification by Roh and Satoh (2014) >---
1903  ! bimodal size distribution of snow
1904  rhoqs = dens * q(i_qs)
1905  zerosw = 0.5_rp - sign(0.5_rp, rhoqs - 1.e-12_rp )
1906  xs2 = rhoqs / as * ( 1.0_rp - zerosw )
1907 
1908  tems = min( -0.1_rp, temc )
1909  coef_at(1) = coef_a( 1) + tems * ( coef_a( 2) + tems * ( coef_a( 5) + tems * coef_a( 9) ) )
1910  coef_at(2) = coef_a( 3) + tems * ( coef_a( 4) + tems * coef_a( 7) )
1911  coef_at(3) = coef_a( 6) + tems * coef_a( 8)
1912  coef_at(4) = coef_a(10)
1913  coef_bt(1) = coef_b( 1) + tems * ( coef_b( 2) + tems * ( coef_b( 5) + tems * coef_b( 9) ) )
1914  coef_bt(2) = coef_b( 3) + tems * ( coef_b( 4) + tems * coef_b( 7) )
1915  coef_bt(3) = coef_b( 6) + tems * coef_b( 8)
1916  coef_bt(4) = coef_b(10)
1917  ! 2nd moment
1918  moms_2 = xs2
1919  ! 1 + Bs(=2) moment
1920  nm = 3.0_rp
1921  loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1922  b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1923  moms_1bs = 10.0_rp**loga_ * xs2**b_
1924 
1925  re(k,i,j,i_mp_qs) = ( sw_roh2014 ) * 0.5_rp * moms_1bs / ( moms_2 + zerosw ) * um2cm &
1926  + ( 1.0_rp-sw_roh2014 ) * 1.5_rp * rlmds * um2cm
1927 
1928  zerosw = 0.5_rp - sign(0.5_rp, q(i_qg) - 1.e-12_rp )
1929  rlmdg = sqrt(sqrt( dens * q(i_qg) / ( ag * n0g * gam_1bg ) + zerosw )) * ( 1.0_rp - zerosw )
1930 
1931  re(k,i,j,i_mp_qg) = 1.5_rp * rlmdg * um2cm
1932  enddo
1933  enddo
1934  enddo
1935 
1936  return
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
integer, public ke
end point of inner domain: z, local
real(rp), parameter, public const_tem00
temperature reference (0C) [K]
Definition: scale_const.F90:95
integer, public qa
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public mp_qa
integer, public ka
of z whole cells (local, with HALO)
integer, public js
start point of inner domain: y, local
module CONSTANT
Definition: scale_const.F90:14
integer, public ks
start point of inner domain: z, local
integer, public ie
end point of inner domain: x, local
integer, public ja
of y whole cells (local, with HALO)
Here is the caller graph for this function:

◆ atmos_phy_mp_tomita08_mixingratio()

subroutine, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_tomita08_mixingratio ( real(rp), dimension (ka,ia,ja,mp_qad), intent(out)  Qe,
real(rp), dimension(ka,ia,ja,qad), intent(in)  QTRC0 
)

Calculate mixing ratio of each category.

Definition at line 1944 of file scale_atmos_phy_mp_tomita08.F90.

References scale_tracer::mp_qa, and scale_tracer::qa.

Referenced by scale_atmos_phy_mp::atmos_phy_mp_setup().

1944  use scale_grid_index
1945  use scale_tracer, only: &
1946  qad => qa, &
1947  mp_qad => mp_qa
1948  implicit none
1949 
1950  real(RP), intent(out) :: qe (ka,ia,ja,mp_qad) ! mixing ratio of each cateory [kg/kg]
1951  real(RP), intent(in) :: qtrc0(ka,ia,ja,qad) ! tracer mass concentration [kg/kg]
1952 
1953  integer :: ihydro
1954  !---------------------------------------------------------------------------
1955 
1956  do ihydro = 1, mp_qa
1957  qe(:,:,:,ihydro) = qtrc0(:,:,:,i_mp2all(ihydro))
1958  enddo
1959 
1960  return
integer, public qa
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
integer, public mp_qa
integer, public ka
of z whole cells (local, with HALO)
integer, public ja
of y whole cells (local, with HALO)
Here is the caller graph for this function:

Variable Documentation

◆ atmos_phy_mp_dens

real(rp), dimension(mp_qa), target, public scale_atmos_phy_mp_tomita08::atmos_phy_mp_dens

Definition at line 45 of file scale_atmos_phy_mp_tomita08.F90.

Referenced by atmos_phy_mp_tomita08_setup().

45  real(RP), public, target :: atmos_phy_mp_dens(mp_qa) ! hydrometeor density [kg/m3]=[g/L]
integer, public mp_qa
real(rp), dimension(mp_qa), target, public atmos_phy_mp_dens