SCALE-RM
scale_atmos_phy_mp.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
14 ! Warning: This file was generated from atmos-physics/microphysics/scale_atmos_phy_mp.F90.erb.
15 ! Do not edit this file.
16 !-------------------------------------------------------------------------------
18  !-----------------------------------------------------------------------------
19  !
20  !++ used modules
21  !
22  use scale_precision
23  use scale_stdio
24  use scale_prof
26  use scale_tracer
27  !-----------------------------------------------------------------------------
28  implicit none
29  private
30  !-----------------------------------------------------------------------------
31  !
32  !++ Public procedure
33  !
34  public :: atmos_phy_mp_setup
35 
36  !-----------------------------------------------------------------------------
37  !
38  !++ Public parameters & variables
39  !
40  !-----------------------------------------------------------------------------
41  !
42  !++ Private procedure
43  !
44  !-----------------------------------------------------------------------------
45  !
46  !++ Private parameters & variables
47  !
48  abstract interface
49  subroutine mp( &
50  DENS, &
51  MOMZ, &
52  MOMX, &
53  MOMY, &
54  RHOT, &
55  QTRC, &
56  CCN, &
57  EVAPORATE, &
58  SFLX_rain, &
59  SFLX_snow )
60  use scale_precision
62  use scale_tracer
63  real(RP), intent(inout) :: dens(ka,ia,ja)
64  real(RP), intent(inout) :: momz(ka,ia,ja)
65  real(RP), intent(inout) :: momx(ka,ia,ja)
66  real(RP), intent(inout) :: momy(ka,ia,ja)
67  real(RP), intent(inout) :: rhot(ka,ia,ja)
68  real(RP), intent(inout) :: qtrc(ka,ia,ja,qa)
69  real(RP), intent(in) :: ccn(ka,ia,ja)
70  real(RP), intent(out) :: evaporate(ka,ia,ja)
71  real(RP), intent(out) :: sflx_rain(ia,ja)
72  real(RP), intent(out) :: sflx_snow(ia,ja)
73  end subroutine mp
74  subroutine cf( &
75  cldfrac, &
76  QTRC )
77  use scale_precision
79  use scale_tracer
80  real(RP), intent(out) :: cldfrac(ka,ia,ja)
81  real(RP), intent(in) :: qtrc (ka,ia,ja,qa)
82  end subroutine cf
83  subroutine er( &
84  Re, &
85  QTRC0, &
86  DENS0, &
87  TEMP0 )
88  use scale_precision
90  use scale_tracer
91  real(RP), intent(out) :: re (ka,ia,ja,mp_qa) ! effective radius [cm]
92  real(RP), intent(in) :: qtrc0(ka,ia,ja,qa) ! tracer mass concentration [kg/kg]
93  real(RP), intent(in) :: dens0(ka,ia,ja) ! density [kg/m3]
94  real(RP), intent(in) :: temp0(ka,ia,ja) ! temperature [K]
95  end subroutine er
96  subroutine mr( &
97  Qe, &
98  QTRC0 )
99  use scale_precision
100  use scale_grid_index
101  use scale_tracer
102  real(RP), intent(out) :: qe (ka,ia,ja,mp_qa) ! mixing ratio of each cateory [kg/kg]
103  real(RP), intent(in) :: qtrc0(ka,ia,ja,qa) ! tracer mass concentration [kg/kg]
104  end subroutine mr
105  end interface
106  procedure(mp), pointer :: atmos_phy_mp => null()
107  procedure(cf), pointer :: atmos_phy_mp_cloudfraction => null()
108  procedure(er), pointer :: atmos_phy_mp_effectiveradius => null()
109  procedure(mr), pointer :: atmos_phy_mp_mixingratio => null()
110  public :: atmos_phy_mp
113  public :: atmos_phy_mp_mixingratio
114 
115  real(RP), pointer, public :: atmos_phy_mp_dens(:)
116 
117  !-----------------------------------------------------------------------------
118 contains
119  !-----------------------------------------------------------------------------
121  !-----------------------------------------------------------------------------
122  subroutine atmos_phy_mp_setup( MP_TYPE )
123  use scale_process, only: &
125 #define EXTM(pre, name, post) pre ## name ## post
126 #define NAME(pre, name, post) EXTM(pre, name, post)
127 #ifdef MP
128  use name(scale_atmos_phy_mp_, mp,), only: &
129  name(atmos_phy_mp_, mp, _setup), &
130  name(atmos_phy_mp_, mp,), &
131  name(atmos_phy_mp_, mp, _cloudfraction), &
132  name(atmos_phy_mp_, mp, _effectiveradius), &
133  name(atmos_phy_mp_, mp, _mixingratio), &
134  name(atmos_phy_mp_, mp, _dens) => atmos_phy_mp_dens
135 #else
136  use scale_atmos_phy_mp_dry, only: &
142  atmos_phy_mp_dry_dens => atmos_phy_mp_dens
143  use scale_atmos_phy_mp_kessler, only: &
149  atmos_phy_mp_kessler_dens => atmos_phy_mp_dens
150  use scale_atmos_phy_mp_tomita08, only: &
156  atmos_phy_mp_tomita08_dens => atmos_phy_mp_dens
157  use scale_atmos_phy_mp_sn14, only: &
163  atmos_phy_mp_sn14_dens => atmos_phy_mp_dens
164  use scale_atmos_phy_mp_suzuki10, only: &
170  atmos_phy_mp_suzuki10_dens => atmos_phy_mp_dens
171  use scale_atmos_phy_mp_sdm, only: &
177  atmos_phy_mp_sdm_dens => atmos_phy_mp_dens
178 #endif
179  implicit none
180 
181  character(len=*), intent(in) :: MP_TYPE
182  !---------------------------------------------------------------------------
183 
184 #ifdef MP
185  call name(atmos_phy_mp_, mp, _setup)( mp_type )
186  atmos_phy_mp => name(atmos_phy_mp_, mp,)
187  atmos_phy_mp_cloudfraction => name(atmos_phy_mp_, mp, _cloudfraction)
188  atmos_phy_mp_effectiveradius => name(atmos_phy_mp_, mp, _effectiveradius)
189  atmos_phy_mp_mixingratio => name(atmos_phy_mp_, mp, _mixingratio)
190  atmos_phy_mp_dens => name(atmos_phy_mp_, mp, _dens)
191 #else
192  select case ( mp_type )
193  case ( 'DRY' )
194  call atmos_phy_mp_dry_setup( mp_type )
199  atmos_phy_mp_dens => atmos_phy_mp_dry_dens
200  case ( 'KESSLER' )
201  call atmos_phy_mp_kessler_setup( mp_type )
206  atmos_phy_mp_dens => atmos_phy_mp_kessler_dens
207  case ( 'TOMITA08' )
208  call atmos_phy_mp_tomita08_setup( mp_type )
213  atmos_phy_mp_dens => atmos_phy_mp_tomita08_dens
214  case ( 'SN14' )
215  call atmos_phy_mp_sn14_setup( mp_type )
220  atmos_phy_mp_dens => atmos_phy_mp_sn14_dens
221  case ( 'SUZUKI10' )
222  call atmos_phy_mp_suzuki10_setup( mp_type )
227  atmos_phy_mp_dens => atmos_phy_mp_suzuki10_dens
228  case ( 'SDM' )
229  call atmos_phy_mp_sdm_setup( mp_type )
234  atmos_phy_mp_dens => atmos_phy_mp_sdm_dens
235  end select
236 #endif
237 
238  return
239  end subroutine atmos_phy_mp_setup
240 
241 end module scale_atmos_phy_mp
procedure(cf), pointer, public atmos_phy_mp_cloudfraction
subroutine, public atmos_phy_mp_kessler(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
subroutine, public atmos_phy_mp_sn14_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
procedure(mp), pointer, public atmos_phy_mp
subroutine, public atmos_phy_mp_sdm_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
subroutine, public prc_mpistop
Abort MPI.
module ATMOSPHERE / Physics Cloud Microphysics
subroutine, public atmos_phy_mp_tomita08_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_kessler_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
module ATMOSPHERE / Physics Cloud Microphysics
subroutine, public atmos_phy_mp_suzuki10_setup(MP_TYPE)
Setup.
module STDIO
Definition: scale_stdio.F90:12
integer, public qa
subroutine, public atmos_phy_mp_dry(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
subroutine, public atmos_phy_mp_dry_setup(MP_TYPE)
Setup.
subroutine, public atmos_phy_mp_tomita08_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
subroutine, public atmos_phy_mp_kessler_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
subroutine, public atmos_phy_mp_setup(MP_TYPE)
Setup Cloud Microphysics.
subroutine, public atmos_phy_mp_suzuki10_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
module grid index
module TRACER
integer, public ia
of x whole cells (local, with HALO)
module ATMOSPHERE / Physics Cloud Microphysics
module ATMOSPHERE / Physics Cloud Microphysics
integer, public mp_qa
subroutine, public atmos_phy_mp_suzuki10_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
integer, public ka
of z whole cells (local, with HALO)
subroutine, public atmos_phy_mp_suzuki10_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
procedure(mr), pointer, public atmos_phy_mp_mixingratio
subroutine, public atmos_phy_mp_kessler_setup(MP_TYPE)
Setup.
module PROCESS
procedure(er), pointer, public atmos_phy_mp_effectiveradius
subroutine, public atmos_phy_mp_suzuki10(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
subroutine, public atmos_phy_mp_sdm(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
subroutine, public atmos_phy_mp_tomita08(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
subroutine, public atmos_phy_mp_sn14_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
subroutine, public atmos_phy_mp_sn14(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
module profiler
Definition: scale_prof.F90:10
module ATMOSPHERE / Physics Cloud Microphysics
subroutine, public atmos_phy_mp_sn14_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_dry_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
module PRECISION
subroutine, public atmos_phy_mp_kessler_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_sdm_cloudfraction(cldfrac, QTRC)
Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_sdm_setup(MP_TYPE)
Setup Cloud Microphysics.
subroutine, public atmos_phy_mp_sn14_setup(MP_TYPE)
Setup Cloud Microphysics.
module ATMOSPHERE / Physics Cloud Microphysics
Module Spectran Bin Microphysics.
real(rp), dimension(:), pointer, public atmos_phy_mp_dens
subroutine, public atmos_phy_mp_sdm_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
subroutine, public atmos_phy_mp_tomita08_setup(MP_TYPE)
Setup.
subroutine, public atmos_phy_mp_tomita08_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
subroutine, public atmos_phy_mp_dry_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
integer, public ja
of y whole cells (local, with HALO)
subroutine, public atmos_phy_mp_dry_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.