SCALE-RM
scale_atmos_phy_ae.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
13 !-------------------------------------------------------------------------------
15  !-----------------------------------------------------------------------------
16  !
17  !++ used modules
18  !
19  use scale_precision
20  use scale_stdio
21  use scale_prof
23  use scale_tracer
24  !-----------------------------------------------------------------------------
25  implicit none
26  private
27  !-----------------------------------------------------------------------------
28  !
29  !++ Public procedure
30  !
31  abstract interface
32  subroutine ae( &
33  QQA, &
34  DENS, &
35  MOMZ, &
36  MOMX, &
37  MOMY, &
38  RHOT, &
39  EMIT, &
40  NREG, &
41  QTRC, &
42  CN, &
43  CCN, &
44  RHOQ_t_AE )
45  use scale_precision
47  use scale_tracer
48  integer, intent(in) :: QQA
49  real(RP), intent(inout) :: DENS(KA,IA,JA)
50  real(RP), intent(inout) :: MOMZ(KA,IA,JA)
51  real(RP), intent(inout) :: MOMX(KA,IA,JA)
52  real(RP), intent(inout) :: MOMY(KA,IA,JA)
53  real(RP), intent(inout) :: RHOT(KA,IA,JA)
54  real(RP), intent(inout) :: EMIT(KA,IA,JA,QQA)
55  real(RP), intent(in) :: NREG(KA,IA,JA)
56  real(RP), intent(inout) :: QTRC(KA,IA,JA,QA)
57  real(RP), intent(out) :: CN(KA,IA,JA)
58  real(RP), intent(out) :: CCN(KA,IA,JA)
59  real(RP), intent(inout) :: RHOQ_t_AE(KA,IA,JA,QA)
60  end subroutine ae
61  subroutine su
62  end subroutine su
63  subroutine er( &
64  RE, &
65  QTRC, &
66  RH )
67  use scale_precision
69  use scale_tracer
70  use scale_atmos_aerosol, only: n_ae
71  real(RP), intent(out) :: Re (KA,IA,JA,N_AE) ! effective radius
72  real(RP), intent(in) :: QTRC(KA,IA,JA,QA) ! tracer mass concentration [kg/kg]
73  real(RP), intent(in) :: RH (KA,IA,JA) ! relative humidity (0-1)
74  end subroutine er
75  end interface
76 
77  procedure(ae), pointer :: atmos_phy_ae => null()
78  procedure(su), pointer :: atmos_phy_ae_setup => null()
79  procedure(er), pointer :: atmos_phy_ae_effectiveradius => null()
80  public :: atmos_phy_ae_config
81  public :: atmos_phy_ae
82  public :: atmos_phy_ae_setup
84 
85  !-----------------------------------------------------------------------------
86  !
87  !++ Public parameters & variables
88  !
89  integer, public :: qa_ae ! number of aerosol microphysical tracers
90  integer, public :: qs_ae ! start index in QTRC
91  integer, public :: qe_ae ! end index in QTRC
92 
93  character(len=H_SHORT), pointer, public :: atmos_phy_ae_name(:)
94  character(len=H_MID), pointer, public :: atmos_phy_ae_desc(:)
95  character(len=H_SHORT), pointer, public :: atmos_phy_ae_unit(:)
96  real(RP), pointer, public :: atmos_phy_ae_dens(:) ! aerosol density [kg/m3]=[g/L]
97  !-----------------------------------------------------------------------------
98  !
99  !++ Private procedure
100  !
101  !-----------------------------------------------------------------------------
102  !
103  !++ Private parameters & variables
104  !
105  !-----------------------------------------------------------------------------
106 contains
107  !-----------------------------------------------------------------------------
109  subroutine atmos_phy_ae_config( AE_TYPE )
110  use scale_process, only: &
112  use scale_atmos_phy_ae_dummy, only: &
121  use scale_atmos_phy_ae_kajino13, only: &
130  implicit none
131 
132  character(len=*), intent(in) :: ae_type
133  !---------------------------------------------------------------------------
134 
135  if( io_l ) write(io_fid_log,*) '*** => ', trim(ae_type), ' is selected.'
136 
137  select case( ae_type )
138  case('DUMMY','NONE')
140  ae_type, &
141  qa_ae, qs_ae ) ! (out)
149  case('KAJINO13')
151  ae_type, &
152  qa_ae, qs_ae ) ! (out)
160  write(*,*) '### aerosol type(', ae_type, '). is not recommended in current version!'
161  case default
162  write(*,*) 'xxx invalid aerosol type(', ae_type, '). CHECK!'
163  call prc_mpistop
164  end select
165 
166  qe_ae = qs_ae + qa_ae - 1
167 
168  return
169  end subroutine atmos_phy_ae_config
170 
171 end module scale_atmos_phy_ae
character(len=h_short), dimension(:), pointer, public atmos_phy_ae_name
subroutine, public atmos_phy_ae_dummy_effectiveradius(Re, QTRC, RH)
Calculate Effective Radius.
subroutine, public prc_mpistop
Abort MPI.
module ATMOSPHERE / Physics Aerosol Microphysics
integer, parameter, public n_ae
logical, public io_l
output log or not? (this process)
Definition: scale_stdio.F90:61
character(len=h_mid), dimension(:), allocatable, target, public atmos_phy_ae_kajino13_desc
procedure(ae), pointer, public atmos_phy_ae
subroutine, public atmos_phy_ae_kajino13_config(AE_TYPE, QA, QS)
Config.
module STDIO
Definition: scale_stdio.F90:12
real(rp), dimension(n_ae), target, public atmos_phy_ae_kajino13_dens
character(len=h_short), dimension(qa_ae), target, public atmos_phy_ae_dummy_name
character(len=h_mid), dimension(:), pointer, public atmos_phy_ae_desc
module grid index
character(len=h_short), dimension(:), allocatable, target, public atmos_phy_ae_kajino13_name
module TRACER
subroutine, public atmos_phy_ae_dummy(QQA, DENS, MOMZ, MOMX, MOMY, RHOT, EMIT, NREG, QTRC, CN, CCN, RHOQ_t_AE)
Aerosol Microphysics.
character(len=h_mid), dimension(qa_ae), target, public atmos_phy_ae_dummy_desc
real(rp), dimension(qa_ae), target, public atmos_phy_ae_dummy_dens
module ATMOSPHERE / Physics Aerosol Microphysics
character(len=h_short), dimension(qa_ae), target, public atmos_phy_ae_dummy_unit
subroutine, public atmos_phy_ae_kajino13_setup
Setup.
subroutine, public atmos_phy_ae_kajino13(QQA, DENS, MOMZ, MOMX, MOMY, RHOT, EMIT, NREG, QTRC, CN, CCN, RHOQ_t_AE)
Aerosol Microphysics.
character(len=h_short), dimension(:), allocatable, target, public atmos_phy_ae_kajino13_unit
module PROCESS
subroutine, public atmos_phy_ae_config(AE_TYPE)
Setup.
character(len=h_short), dimension(:), pointer, public atmos_phy_ae_unit
procedure(su), pointer, public atmos_phy_ae_setup
subroutine, public atmos_phy_ae_kajino13_effectiveradius(Re, QTRC, RH)
Calculate Effective Radius.
module profiler
Definition: scale_prof.F90:10
module PRECISION
module ATMOSPHERE / Physics Aerosol Microphysics
procedure(er), pointer, public atmos_phy_ae_effectiveradius
subroutine, public atmos_phy_ae_dummy_setup
Setup.
real(rp), dimension(:), pointer, public atmos_phy_ae_dens
integer, public io_fid_log
Log file ID.
Definition: scale_stdio.F90:56
subroutine, public atmos_phy_ae_dummy_config(AE_TYPE, QA_AE, QS_AE)
Config.