SCALE-RM
scale_atmos_dyn_tinteg_large.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
10 !-------------------------------------------------------------------------------
11 #include "scalelib.h"
13  !-----------------------------------------------------------------------------
14  !
15  !++ used modules
16  !
17  use scale_precision
18  use scale_io
19  use scale_prof
21  use scale_index
22  use scale_tracer
23  !-----------------------------------------------------------------------------
24  implicit none
25  private
26  !-----------------------------------------------------------------------------
27  !
28  !++ Public procedure
29  !
31 
32  abstract interface
33  subroutine large( &
34  DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, &
35  DENS_av, MOMZ_av, MOMX_av, MOMY_av, RHOT_av, QTRC_av, &
36  num_diff, num_diff_q, &
37  DENS_tp, MOMZ_tp, MOMX_tp, MOMY_tp, RHOT_tp, RHOQ_tp, &
38  CORIOLI, &
39  CDZ, CDX, CDY, FDZ, FDX, FDY, &
40  RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, &
41  PHI, GSQRT, &
42  J13G, J23G, J33G, MAPF, &
43  AQ_R, AQ_CV, AQ_CP, AQ_MASS, &
44  REF_dens, REF_pott, REF_qv, REF_pres, &
45  BND_W, BND_E, BND_S, BND_N, TwoD, &
46  ND_COEF, ND_COEF_Q, ND_LAPLACIAN_NUM, &
47  ND_SFC_FACT, ND_USE_RS, &
48  BND_QA, BND_IQ, BND_SMOOTHER_FACT, &
49  DAMP_DENS, DAMP_VELZ, DAMP_VELX, &
50  DAMP_VELY, DAMP_POTT, DAMP_QTRC, &
51  DAMP_alpha_DENS, DAMP_alpha_VELZ, DAMP_alpha_VELX, &
52  DAMP_alpha_VELY, DAMP_alpha_POTT, DAMP_alpha_QTRC, &
53  MFLUX_OFFSET_X, MFLUX_OFFSET_Y, &
54  wdamp_coef, divdmp_coef, &
55  FLAG_TRACER_SPLIT_TEND, &
56  FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_TRACER, &
57  FLAG_FCT_ALONG_STREAM, &
58  USE_AVERAGE, &
59  I_QV, &
60  DTL, DTS )
61  use scale_precision
63  use scale_index
64  use scale_tracer
65  real(RP), intent(inout) :: DENS(KA,IA,JA)
66  real(RP), intent(inout) :: MOMZ(KA,IA,JA)
67  real(RP), intent(inout) :: MOMX(KA,IA,JA)
68  real(RP), intent(inout) :: MOMY(KA,IA,JA)
69  real(RP), intent(inout) :: RHOT(KA,IA,JA)
70  real(RP), intent(inout) :: QTRC(KA,IA,JA,QA)
71  real(RP), intent(inout) :: PROG(KA,IA,JA,VA)
72 
73  real(RP), intent(inout) :: DENS_av(KA,IA,JA)
74  real(RP), intent(inout) :: MOMZ_av(KA,IA,JA)
75  real(RP), intent(inout) :: MOMX_av(KA,IA,JA)
76  real(RP), intent(inout) :: MOMY_av(KA,IA,JA)
77  real(RP), intent(inout) :: RHOT_av(KA,IA,JA)
78  real(RP), intent(inout) :: QTRC_av(KA,IA,JA,QA)
79 
80  real(RP), intent(out) :: num_diff(KA,IA,JA,5,3)
81  real(RP), intent(out) :: num_diff_q(KA,IA,JA,3)
82 
83  real(RP), intent(in) :: DENS_tp(KA,IA,JA)
84  real(RP), intent(in) :: MOMZ_tp(KA,IA,JA)
85  real(RP), intent(in) :: MOMX_tp(KA,IA,JA)
86  real(RP), intent(in) :: MOMY_tp(KA,IA,JA)
87  real(RP), intent(in) :: RHOT_tp(KA,IA,JA)
88  real(RP), intent(in) :: RHOQ_tp(KA,IA,JA,QA)
89 
90  real(RP), intent(in) :: CORIOLI(IA,JA)
91 
92  real(RP), intent(in) :: CDZ (KA)
93  real(RP), intent(in) :: CDX (IA)
94  real(RP), intent(in) :: CDY (JA)
95  real(RP), intent(in) :: FDZ (KA-1)
96  real(RP), intent(in) :: FDX (IA-1)
97  real(RP), intent(in) :: FDY (JA-1)
98  real(RP), intent(in) :: RCDZ(KA)
99  real(RP), intent(in) :: RCDX(IA)
100  real(RP), intent(in) :: RCDY(JA)
101  real(RP), intent(in) :: RFDZ(KA-1)
102  real(RP), intent(in) :: RFDX(IA-1)
103  real(RP), intent(in) :: RFDY(JA-1)
104 
105  real(RP), intent(in) :: PHI (KA,IA,JA)
106  real(RP), intent(in) :: GSQRT(KA,IA,JA,7)
107  real(RP), intent(in) :: J13G (KA,IA,JA,7)
108  real(RP), intent(in) :: J23G (KA,IA,JA,7)
109  real(RP), intent(in) :: J33G
110  real(RP), intent(in) :: MAPF (IA,JA,2,4)
111 
112  real(RP), intent(in) :: AQ_R (QA)
113  real(RP), intent(in) :: AQ_CV (QA)
114  real(RP), intent(in) :: AQ_CP (QA)
115  real(RP), intent(in) :: AQ_MASS(QA)
116 
117  real(RP), intent(in) :: REF_dens(KA,IA,JA)
118  real(RP), intent(in) :: REF_pott(KA,IA,JA)
119  real(RP), intent(in) :: REF_qv (KA,IA,JA)
120  real(RP), intent(in) :: REF_pres(KA,IA,JA)
121 
122  logical, intent(in) :: BND_W
123  logical, intent(in) :: BND_E
124  logical, intent(in) :: BND_S
125  logical, intent(in) :: BND_N
126  logical, intent(in) :: TwoD
127 
128  real(RP), intent(in) :: ND_COEF
129  real(RP), intent(in) :: ND_COEF_Q
130  integer, intent(in) :: ND_LAPLACIAN_NUM
131  real(RP), intent(in) :: ND_SFC_FACT
132  logical, intent(in) :: ND_USE_RS
133 
134  integer, intent(in) :: BND_QA
135  integer, intent(in) :: BND_IQ(QA)
136  real(RP), intent(in) :: BND_SMOOTHER_FACT
137 
138  real(RP), intent(in) :: DAMP_DENS(KA,IA,JA)
139  real(RP), intent(in) :: DAMP_VELZ(KA,IA,JA)
140  real(RP), intent(in) :: DAMP_VELX(KA,IA,JA)
141  real(RP), intent(in) :: DAMP_VELY(KA,IA,JA)
142  real(RP), intent(in) :: DAMP_POTT(KA,IA,JA)
143  real(RP), intent(in) :: DAMP_QTRC(KA,IA,JA,BND_QA)
144  real(RP), intent(in) :: DAMP_alpha_DENS(KA,IA,JA)
145  real(RP), intent(in) :: DAMP_alpha_VELZ(KA,IA,JA)
146  real(RP), intent(in) :: DAMP_alpha_VELX(KA,IA,JA)
147  real(RP), intent(in) :: DAMP_alpha_VELY(KA,IA,JA)
148  real(RP), intent(in) :: DAMP_alpha_POTT(KA,IA,JA)
149  real(RP), intent(in) :: DAMP_alpha_QTRC(KA,IA,JA,BND_QA)
150  real(RP), intent(in) :: MFLUX_OFFSET_X(KA,JA,2)
151  real(RP), intent(in) :: MFLUX_OFFSET_Y(KA,IA,2)
152 
153  real(RP), intent(in) :: wdamp_coef(KA)
154  real(RP), intent(in) :: divdmp_coef
155 
156  logical, intent(in) :: FLAG_TRACER_SPLIT_TEND
157  logical, intent(in) :: FLAG_FCT_MOMENTUM
158  logical, intent(in) :: FLAG_FCT_T
159  logical, intent(in) :: FLAG_FCT_TRACER
160  logical, intent(in) :: FLAG_FCT_ALONG_STREAM
161  logical, intent(in) :: USE_AVERAGE
162 
163  integer, intent(in) :: I_QV
164 
165  real(DP), intent(in) :: DTL
166  real(DP), intent(in) :: DTS
167  end subroutine large
168  end interface
169  procedure(large), pointer :: atmos_dyn_tinteg_large => null()
170  public :: atmos_dyn_tinteg_large
171 
172  !-----------------------------------------------------------------------------
173  !
174  !++ Public parameters & variables
175  !
176  !-----------------------------------------------------------------------------
177  !
178  !++ Private procedure
179  !
180  !-----------------------------------------------------------------------------
181  !
182  !++ Private parameters & variables
183  !
184  !-----------------------------------------------------------------------------
185 contains
186  !-----------------------------------------------------------------------------
188  subroutine atmos_dyn_tinteg_large_setup( &
189  ATMOS_DYN_Tinteg_large_TYPE )
192  use scale_index
193  use scale_prc, only: &
194  prc_abort
201  implicit none
202 
203  character(len=*), intent(in) :: atmos_dyn_tinteg_large_type
204  !---------------------------------------------------------------------------
205 
206  select case( atmos_dyn_tinteg_large_type )
207  case( 'EULER' )
209  atmos_dyn_tinteg_large_type )
211  case( 'RK3' )
213  atmos_dyn_tinteg_large_type )
215  case( 'OFF', 'NONE' )
216  ! do nothing
217  case default
218  log_error("ATMOS_DYN_Tinteg_large_setup",*) 'ATMOS_DYN_TINTEG_LARGE_TYPE is invalid: ', atmos_dyn_tinteg_large_type
219  call prc_abort
220  end select
221 
222  return
223  end subroutine atmos_dyn_tinteg_large_setup
224 
scale_prc::prc_abort
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:350
scale_index
module Index
Definition: scale_index.F90:11
scale_atmos_dyn_tinteg_large::atmos_dyn_tinteg_large_setup
subroutine, public atmos_dyn_tinteg_large_setup(ATMOS_DYN_Tinteg_large_TYPE)
Register.
Definition: scale_atmos_dyn_tinteg_large.F90:190
scale_precision
module PRECISION
Definition: scale_precision.F90:14
scale_atmos_dyn_tinteg_large_rk3
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_large_rk3.F90:16
scale_atmos_dyn_tinteg_large::atmos_dyn_tinteg_large
procedure(large), pointer, public atmos_dyn_tinteg_large
Definition: scale_atmos_dyn_tinteg_large.F90:169
scale_atmos_dyn_tinteg_large_rk3::atmos_dyn_tinteg_large_rk3
subroutine, public atmos_dyn_tinteg_large_rk3(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, DENS_av, MOMZ_av, MOMX_av, MOMY_av, RHOT_av, QTRC_av, num_diff, num_diff_q, DENS_tp, MOMZ_tp, MOMX_tp, MOMY_tp, RHOT_tp, RHOQ_tp, CORIOLI, CDZ, CDX, CDY, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, AQ_R, AQ_CV, AQ_CP, AQ_MASS, REF_dens, REF_pott, REF_qv, REF_pres, BND_W, BND_E, BND_S, BND_N, TwoD, ND_COEF, ND_COEF_Q, ND_LAPLACIAN_NUM, ND_SFC_FACT, ND_USE_RS, BND_QA, BND_IQ, BND_SMOOTHER_FACT, DAMP_DENS, DAMP_VELZ, DAMP_VELX, DAMP_VELY, DAMP_POTT, DAMP_QTRC, DAMP_alpha_DENS, DAMP_alpha_VELZ, DAMP_alpha_VELX, DAMP_alpha_VELY, DAMP_alpha_POTT, DAMP_alpha_QTRC, MFLUX_OFFSET_X, MFLUX_OFFSET_Y, wdamp_coef, divdmp_coef, FLAG_TRACER_SPLIT_TEND, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_TRACER, FLAG_FCT_ALONG_STREAM, USE_AVERAGE, I_QV, DTL, DTS)
RK3.
Definition: scale_atmos_dyn_tinteg_large_rk3.F90:112
scale_atmos_dyn_tinteg_large_euler::atmos_dyn_tinteg_large_euler
subroutine, public atmos_dyn_tinteg_large_euler(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, DENS_av, MOMZ_av, MOMX_av, MOMY_av, RHOT_av, QTRC_av, num_diff, num_diff_q, DENS_tp, MOMZ_tp, MOMX_tp, MOMY_tp, RHOT_tp, RHOQ_tp, CORIOLI, CDZ, CDX, CDY, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, AQ_R, AQ_CV, AQ_CP, AQ_MASS, REF_dens, REF_pott, REF_qv, REF_pres, BND_W, BND_E, BND_S, BND_N, TwoD, ND_COEF, ND_COEF_Q, ND_LAPLACIAN_NUM, ND_SFC_FACT, ND_USE_RS, BND_QA, BND_IQ, BND_SMOOTHER_FACT, DAMP_DENS, DAMP_VELZ, DAMP_VELX, DAMP_VELY, DAMP_POTT, DAMP_QTRC, DAMP_alpha_DENS, DAMP_alpha_VELZ, DAMP_alpha_VELX, DAMP_alpha_VELY, DAMP_alpha_POTT, DAMP_alpha_QTRC, MFLUX_OFFSET_X, MFLUX_OFFSET_Y, wdamp_coef, divdmp_coef, FLAG_TRACER_SPLIT_TEND, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_TRACER, FLAG_FCT_ALONG_STREAM, USE_AVERAGE, I_QV, DTL, DTS)
RK3.
Definition: scale_atmos_dyn_tinteg_large_euler.F90:110
scale_prc
module PROCESS
Definition: scale_prc.F90:11
scale_io
module STDIO
Definition: scale_io.F90:10
scale_atmos_grid_cartesc_index
module atmosphere / grid / cartesC index
Definition: scale_atmos_grid_cartesC_index.F90:12
scale_atmos_dyn_tinteg_large_euler::atmos_dyn_tinteg_large_euler_setup
subroutine, public atmos_dyn_tinteg_large_euler_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_large_euler.F90:61
scale_prof
module profiler
Definition: scale_prof.F90:11
scale_atmos_dyn_tinteg_large_rk3::atmos_dyn_tinteg_large_rk3_setup
subroutine, public atmos_dyn_tinteg_large_rk3_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_large_rk3.F90:64
scale_atmos_dyn_tinteg_large_euler
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_large_euler.F90:13
scale_tracer
module TRACER
Definition: scale_tracer.F90:12
scale_atmos_dyn_tinteg_large
module Atmosphere / Dynamics Temporal integration
Definition: scale_atmos_dyn_tinteg_large.F90:12