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)
 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  atmos_phy_mp_dens(i_mp_qc) = dens_w
402  atmos_phy_mp_dens(i_mp_qr) = dens_w
403  atmos_phy_mp_dens(i_mp_qi) = dens_i
404  atmos_phy_mp_dens(i_mp_qs) = dens_s
405  atmos_phy_mp_dens(i_mp_qg) = dens_g
406 
407  !--- empirical coefficients A, B, C, D
408  ar = pi * dens_w / 6.0_rp
409  as = pi * dens_s / 6.0_rp
410  ag = pi * dens_g / 6.0_rp
411 
412  br = 3.0_rp
413  bs = 3.0_rp
414  bg = 3.0_rp
415 
416  cg = sqrt( ( 4.0_rp * dens_g * grav ) / ( 3.0_rp * dens00 * drag_g ) )
417 
418  dr = 0.50_rp
419  ds = 0.25_rp
420  dg = 0.50_rp
421 
422  if ( enable_roh2014 ) then ! overwrite parameters
423  sw_roh2014 = 1.0_rp
424  n0g = 4.e8_rp
425  as = 0.069_rp
426  bs = 2.0_rp
427  esi = 0.25_rp
428  endif
429 
430  gam = 1.0_rp ! =0!
431  gam_2 = 1.0_rp ! =1!
432  gam_3 = 2.0_rp ! =2!
433 
434  gam_1br = sf_gamma( 1.0_rp + br ) ! = 4!
435  gam_2br = sf_gamma( 2.0_rp + br ) ! = 5!
436  gam_3br = sf_gamma( 3.0_rp + br ) ! = 6!
437  gam_3dr = sf_gamma( 3.0_rp + dr )
438  gam_6dr = sf_gamma( 6.0_rp + dr )
439  gam_1brdr = sf_gamma( 1.0_rp + br + dr )
440  gam_5dr_h = sf_gamma( 0.5_rp * (5.0_rp+dr) )
441 
442  gam_1bs = sf_gamma( 1.0_rp + bs ) ! = 4!
443  gam_2bs = sf_gamma( 2.0_rp + bs ) ! = 5!
444  gam_3bs = sf_gamma( 3.0_rp + bs ) ! = 6!
445  gam_3ds = sf_gamma( 3.0_rp + ds )
446  gam_1bsds = sf_gamma( 1.0_rp + bs + ds )
447  gam_5ds_h = sf_gamma( 0.5_rp * (5.0_rp+ds) )
448 
449  gam_1bg = sf_gamma( 1.0_rp + bg ) ! = 4!
450  gam_3dg = sf_gamma( 3.0_rp + dg )
451  gam_1bgdg = sf_gamma( 1.0_rp + bg + dg)
452  gam_5dg_h = sf_gamma( 0.5_rp * (5.0_rp+dg) )
453 
454  do j = js, je
455  do i = is, ie
456  nc_def(i,j) = autoconv_nc
457  enddo
458  enddo
459 
460  if ( mp_doexpricit_icegen ) then
461  only_liquid = .true.
462  sw_useicegen = 1.0_rp
463  else
464  only_liquid = .false.
465  sw_useicegen = 0.0_rp
466  endif
467 
468  if ( enable_kk2000 ) then
469  sw_kk2000 = 1.0_rp
470  else
471  sw_kk2000 = 0.0_rp
472  endif
473 
474  ! detailed tendency monitor
475  w_desc(:) = w_name(:)
476  do ip = 1, w_nmax
477  call hist_reg( w_histid(ip), w_zinterp(ip), w_name(ip), w_desc(ip), w_unit(ip), ndim=3 )
478  enddo
479 
480  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
logical, public io_l
output log or not? (this process)
Definition: scale_stdio.F90:59
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
logical, public io_lnml
output log or not? (for namelist, this process)
Definition: scale_stdio.F90:60
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, public io_fid_conf
Config file ID.
Definition: scale_stdio.F90:55
integer, public io_fid_log
Log file ID.
Definition: scale_stdio.F90:56
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 496 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().

496  use scale_grid_index
497  use scale_const, only: &
498  dwatr => const_dwatr, &
499  pi => const_pi
500  use scale_time, only: &
502  use scale_history, only: &
503  hist_in
504  use scale_tracer, only: &
505  qad => qa
506  use scale_atmos_thermodyn, only: &
507  thermodyn_rhoe => atmos_thermodyn_rhoe, &
508  thermodyn_rhot => atmos_thermodyn_rhot, &
509  thermodyn_temp_pres_e => atmos_thermodyn_temp_pres_e
510  use scale_atmos_phy_mp_common, only: &
511  mp_negative_fixer => atmos_phy_mp_negative_fixer, &
512  mp_precipitation => atmos_phy_mp_precipitation, &
513  mp_saturation_adjustment => atmos_phy_mp_saturation_adjustment
514  implicit none
515 
516  real(RP), intent(inout) :: dens(ka,ia,ja)
517  real(RP), intent(inout) :: momz(ka,ia,ja)
518  real(RP), intent(inout) :: momx(ka,ia,ja)
519  real(RP), intent(inout) :: momy(ka,ia,ja)
520  real(RP), intent(inout) :: rhot(ka,ia,ja)
521  real(RP), intent(inout) :: qtrc(ka,ia,ja,qad)
522  real(RP), intent(in) :: ccn(ka,ia,ja)
523  real(RP), intent(out) :: evaporate(ka,ia,ja) ! number of evaporated cloud [/m3/s]
524  real(RP), intent(out) :: sflx_rain(ia,ja)
525  real(RP), intent(out) :: sflx_snow(ia,ja)
526 
527  real(RP) :: rhoe_t(ka,ia,ja)
528  real(RP) :: qtrc_t(ka,ia,ja,qa)
529  real(RP) :: rhoe (ka,ia,ja)
530  real(RP) :: temp (ka,ia,ja)
531  real(RP) :: pres (ka,ia,ja)
532 
533  real(RP) :: vterm (ka,ia,ja,qa) ! terminal velocity of each tracer [m/s]
534  real(RP) :: flx_rain (ka,ia,ja)
535  real(RP) :: flx_snow (ka,ia,ja)
536  real(RP) :: wflux_rain(ka,ia,ja)
537  real(RP) :: wflux_snow(ka,ia,ja)
538  real(RP) :: qc_before_satadj(ka,ia,ja)
539  integer :: step
540  integer :: k, i, j
541  !---------------------------------------------------------------------------
542 
543  if( io_l ) write(io_fid_log,*) '*** Physics step: Cloud microphysics(tomita08)'
544 
545  if ( mp_donegative_fixer ) then
546  call mp_negative_fixer( dens(:,:,:), & ! [INOUT]
547  rhot(:,:,:), & ! [INOUT]
548  qtrc(:,:,:,:) ) ! [INOUT]
549  endif
550 
551  call thermodyn_rhoe( rhoe(:,:,:), & ! [OUT]
552  rhot(:,:,:), & ! [IN]
553  qtrc(:,:,:,:) ) ! [IN]
554 
555  !##### MP Main #####
556  call mp_tomita08( rhoe_t(:,:,:), & ! [OUT]
557  qtrc_t(:,:,:,:), & ! [OUT]
558  rhoe(:,:,:), & ! [INOUT]
559  qtrc(:,:,:,:), & ! [INOUT]
560  ccn(:,:,:), & ! [IN]
561  dens(:,:,:) ) ! [IN]
562 
563  flx_rain(:,:,:) = 0.0_rp
564  flx_snow(:,:,:) = 0.0_rp
565 
566  vterm(:,:,:,:) = 0.0_rp
567 
568  if ( mp_doprecipitation ) then
569 
570  do step = 1, mp_nstep_sedimentation
571 
572  call thermodyn_temp_pres_e( temp(:,:,:), & ! [OUT]
573  pres(:,:,:), & ! [OUT]
574  dens(:,:,:), & ! [IN]
575  rhoe(:,:,:), & ! [IN]
576  qtrc(:,:,:,:) ) ! [IN]
577 
578  call mp_tomita08_vterm( vterm(:,:,:,:), & ! [OUT]
579  dens(:,:,:), & ! [IN]
580  temp(:,:,:), & ! [IN]
581  qtrc(:,:,:,:) ) ! [IN]
582 
583  call mp_precipitation( wflux_rain(:,:,:), & ! [OUT]
584  wflux_snow(:,:,:), & ! [OUT]
585  dens(:,:,:), & ! [INOUT]
586  momz(:,:,:), & ! [INOUT]
587  momx(:,:,:), & ! [INOUT]
588  momy(:,:,:), & ! [INOUT]
589  rhoe(:,:,:), & ! [INOUT]
590  qtrc(:,:,:,:), & ! [INOUT]
591  vterm(:,:,:,:), & ! [IN]
592  temp(:,:,:), & ! [IN]
593  mp_dtsec_sedimentation ) ! [IN]
594 
595  do j = js, je
596  do i = is, ie
597  do k = ks-1, ke
598  flx_rain(k,i,j) = flx_rain(k,i,j) + wflux_rain(k,i,j) * mp_rnstep_sedimentation
599  flx_snow(k,i,j) = flx_snow(k,i,j) + wflux_snow(k,i,j) * mp_rnstep_sedimentation
600  enddo
601  enddo
602  enddo
603 
604  enddo
605 
606  else
607  vterm(:,:,:,:) = 0.0_rp
608  endif
609 
610  call hist_in( vterm(:,:,:,i_qr), 'Vterm_QR', 'terminal velocity of QR', 'm/s' )
611  call hist_in( vterm(:,:,:,i_qi), 'Vterm_QI', 'terminal velocity of QI', 'm/s' )
612  call hist_in( vterm(:,:,:,i_qs), 'Vterm_QS', 'terminal velocity of QS', 'm/s' )
613  call hist_in( vterm(:,:,:,i_qg), 'Vterm_QG', 'terminal velocity of QG', 'm/s' )
614 
615  do j = js, je
616  do i = is, ie
617  do k = ks, ke
618  qc_before_satadj(k,i,j) = qtrc(k,i,j,i_qc)
619  enddo
620  enddo
621  enddo
622 
623  call mp_saturation_adjustment( rhoe_t(:,:,:), & ! [INOUT]
624  qtrc_t(:,:,:,:), & ! [INOUT]
625  rhoe(:,:,:), & ! [INOUT]
626  qtrc(:,:,:,:), & ! [INOUT]
627  dens(:,:,:), & ! [IN]
628  only_liquid ) ! [IN]
629 
630  do j = js, je
631  do i = is, ie
632  do k = ks, ke
633  evaporate(k,i,j) = max( qc_before_satadj(k,i,j) - qtrc(k,i,j,i_qc), 0.0_rp ) / dt ! if negative, condensation
634  evaporate(k,i,j) = evaporate(k,i,j) * dens(k,i,j) &
635  / (4.0_rp/3.0_rp*pi*dwatr*re_qc**3) ! mass -> number (assuming constant particle radius as re_qc)
636  enddo
637  enddo
638  enddo
639 
640  !##### END MP Main #####
641 
642  call thermodyn_rhot( rhot(:,:,:), & ! [OUT]
643  rhoe(:,:,:), & ! [IN]
644  qtrc(:,:,:,:) ) ! [IN]
645 
646  if ( mp_donegative_fixer ) then
647  call mp_negative_fixer( dens(:,:,:), & ! [INOUT]
648  rhot(:,:,:), & ! [INOUT]
649  qtrc(:,:,:,:) ) ! [INOUT]
650  endif
651 
652  sflx_rain(:,:) = flx_rain(ks-1,:,:)
653  sflx_snow(:,:) = flx_snow(ks-1,:,:)
654 
655  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
logical, public io_l
output log or not? (this process)
Definition: scale_stdio.F90:59
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 io_fid_log
Log file ID.
Definition: scale_stdio.F90:56
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 
)

Calculate Cloud Fraction.

Definition at line 1813 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().

1813  use scale_grid_index
1814  use scale_tracer, only: &
1815  qad => qa
1816  implicit none
1817 
1818  real(RP), intent(out) :: cldfrac(ka,ia,ja)
1819  real(RP), intent(in) :: qtrc (ka,ia,ja,qad)
1820 
1821  real(RP) :: qcriteria = 0.005e-3_rp ! 0.005g/kg, Tompkins & Craig
1822 
1823  real(RP) :: qhydro
1824  integer :: k, i, j, iq
1825  !---------------------------------------------------------------------------
1826 
1827  do j = js, je
1828  do i = is, ie
1829  do k = ks, ke
1830  qhydro = 0.0_rp
1831  do iq = 1, mp_qa
1832  qhydro = qhydro + qtrc(k,i,j,i_mp2all(iq))
1833  enddo
1834  cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-qcriteria)
1835  enddo
1836  enddo
1837  enddo
1838 
1839  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 1849 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().

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

1943  use scale_grid_index
1944  use scale_tracer, only: &
1945  qad => qa, &
1946  mp_qad => mp_qa
1947  implicit none
1948 
1949  real(RP), intent(out) :: qe (ka,ia,ja,mp_qad) ! mixing ratio of each cateory [kg/kg]
1950  real(RP), intent(in) :: qtrc0(ka,ia,ja,qad) ! tracer mass concentration [kg/kg]
1951 
1952  integer :: ihydro
1953  !---------------------------------------------------------------------------
1954 
1955  do ihydro = 1, mp_qa
1956  qe(:,:,:,ihydro) = qtrc0(:,:,:,i_mp2all(ihydro))
1957  enddo
1958 
1959  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