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