SCALE-RM
scale_atmos_dyn_tstep_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 
37  subroutine large( &
38  DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, &
39  DENS_av, MOMZ_av, MOMX_av, MOMY_av, RHOT_av, QTRC_av, &
40  mflx_hi, tflx_hi, &
41  num_diff, num_diff_q, &
42  QTRC0, &
43  DENS_tp, MOMZ_tp, MOMX_tp, MOMY_tp, RHOT_tp, RHOQ_tp, &
44  CORIOLI, &
45  CDZ, CDX, CDY, FDZ, FDX, FDY, &
46  RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, &
47  PHI, GSQRT, &
48  J13G, J23G, J33G, MAPF, &
49  AQ_R, AQ_CV, AQ_CP, AQ_MASS, &
50  REF_dens, REF_pott, REF_qv, REF_pres, &
51  BND_W, BND_E, BND_S, BND_N, & ! (in)
52  nd_coef, nd_coef_q, nd_order, nd_sfc_fact, nd_use_rs, &
53  damp_dens, damp_velz, damp_velx, &
54  damp_vely, damp_pott, damp_qtrc, &
55  damp_alpha_dens, damp_alpha_velz, damp_alpha_velx, &
56  damp_alpha_vely, damp_alpha_pott, damp_alpha_qtrc, &
57  wdamp_coef, &
58  divdmp_coef, &
59  flag_fct_momentum, flag_fct_t, flag_fct_tracer, &
60  flag_fct_along_stream, &
61  use_average, &
62  dtl, dts, llast )
63  use scale_precision
65  use scale_index
66  use scale_tracer
67  use scale_atmos_boundary, only: &
68  bnd_qa
69  real(RP), intent(inout) :: DENS(KA,IA,JA)
70  real(RP), intent(inout) :: MOMZ(KA,IA,JA)
71  real(RP), intent(inout) :: MOMX(KA,IA,JA)
72  real(RP), intent(inout) :: MOMY(KA,IA,JA)
73  real(RP), intent(inout) :: RHOT(KA,IA,JA)
74  real(RP), intent(inout) :: QTRC(KA,IA,JA,QA)
75  real(RP), intent(inout) :: PROG(KA,IA,JA,VA)
76 
77  real(RP), intent(inout) :: DENS_av(KA,IA,JA)
78  real(RP), intent(inout) :: MOMZ_av(KA,IA,JA)
79  real(RP), intent(inout) :: MOMX_av(KA,IA,JA)
80  real(RP), intent(inout) :: MOMY_av(KA,IA,JA)
81  real(RP), intent(inout) :: RHOT_av(KA,IA,JA)
82  real(RP), intent(inout) :: QTRC_av(KA,IA,JA,QA)
83 
84  real(RP), intent(out) :: mflx_hi(KA,IA,JA,3)
85  real(RP), intent(out) :: tflx_hi(KA,IA,JA,3)
86 
87  real(RP), intent(out) :: num_diff(KA,IA,JA,5,3)
88  real(RP), intent(out) :: num_diff_q(KA,IA,JA,3)
89 
90  real(RP), intent(in) :: QTRC0(KA,IA,JA,QA)
91 
92  real(RP), intent(in) :: DENS_tp(KA,IA,JA)
93  real(RP), intent(in) :: MOMZ_tp(KA,IA,JA)
94  real(RP), intent(in) :: MOMX_tp(KA,IA,JA)
95  real(RP), intent(in) :: MOMY_tp(KA,IA,JA)
96  real(RP), intent(in) :: RHOT_tp(KA,IA,JA)
97  real(RP), intent(in) :: RHOQ_tp(KA,IA,JA,QA)
98 
99  real(RP), intent(in) :: CORIOLI(IA,JA)
100 
101  real(RP), intent(in) :: CDZ (KA)
102  real(RP), intent(in) :: CDX (IA)
103  real(RP), intent(in) :: CDY (JA)
104  real(RP), intent(in) :: FDZ (KA-1)
105  real(RP), intent(in) :: FDX (IA-1)
106  real(RP), intent(in) :: FDY (JA-1)
107  real(RP), intent(in) :: RCDZ(KA)
108  real(RP), intent(in) :: RCDX(IA)
109  real(RP), intent(in) :: RCDY(JA)
110  real(RP), intent(in) :: RFDZ(KA-1)
111  real(RP), intent(in) :: RFDX(IA-1)
112  real(RP), intent(in) :: RFDY(JA-1)
113 
114  real(RP), intent(in) :: PHI (KA,IA,JA)
115  real(RP), intent(in) :: GSQRT(KA,IA,JA,7)
116  real(RP), intent(in) :: J13G (KA,IA,JA,7)
117  real(RP), intent(in) :: J23G (KA,IA,JA,7)
118  real(RP), intent(in) :: J33G
119  real(RP), intent(in) :: MAPF (IA,JA,2,4)
120 
121  real(RP), intent(in) :: AQ_R (QA)
122  real(RP), intent(in) :: AQ_CV (QA)
123  real(RP), intent(in) :: AQ_CP (QA)
124  real(RP), intent(in) :: AQ_MASS(QA)
125 
126  real(RP), intent(in) :: REF_dens(KA,IA,JA)
127  real(RP), intent(in) :: REF_pott(KA,IA,JA)
128  real(RP), intent(in) :: REF_qv (KA,IA,JA)
129  real(RP), intent(in) :: REF_pres(KA,IA,JA)
130 
131  logical, intent(in) :: BND_W
132  logical, intent(in) :: BND_E
133  logical, intent(in) :: BND_S
134  logical, intent(in) :: BND_N
135 
136  real(RP), intent(in) :: ND_COEF
137  real(RP), intent(in) :: ND_COEF_Q
138  integer, intent(in) :: ND_ORDER
139  real(RP), intent(in) :: ND_SFC_FACT
140  logical, intent(in) :: ND_USE_RS
141 
142  real(RP), intent(in) :: DAMP_DENS(KA,IA,JA)
143  real(RP), intent(in) :: DAMP_VELZ(KA,IA,JA)
144  real(RP), intent(in) :: DAMP_VELX(KA,IA,JA)
145  real(RP), intent(in) :: DAMP_VELY(KA,IA,JA)
146  real(RP), intent(in) :: DAMP_POTT(KA,IA,JA)
147  real(RP), intent(in) :: DAMP_QTRC(KA,IA,JA,BND_QA)
148 
149  real(RP), intent(in) :: DAMP_alpha_DENS(KA,IA,JA)
150  real(RP), intent(in) :: DAMP_alpha_VELZ(KA,IA,JA)
151  real(RP), intent(in) :: DAMP_alpha_VELX(KA,IA,JA)
152  real(RP), intent(in) :: DAMP_alpha_VELY(KA,IA,JA)
153  real(RP), intent(in) :: DAMP_alpha_POTT(KA,IA,JA)
154  real(RP), intent(in) :: DAMP_alpha_QTRC(KA,IA,JA,BND_QA)
155 
156  real(RP), intent(in) :: wdamp_coef(KA)
157  real(RP), intent(in) :: divdmp_coef
158 
159  logical, intent(in) :: FLAG_FCT_MOMENTUM
160  logical, intent(in) :: FLAG_FCT_T
161  logical, intent(in) :: FLAG_FCT_TRACER
162  logical, intent(in) :: FLAG_FCT_ALONG_STREAM
163 
164  logical, intent(in) :: USE_AVERAGE
165 
166  real(DP), intent(in) :: DTL
167  real(DP), intent(in) :: DTS
168 
169  logical , intent(in) :: Llast
170  end subroutine large
171 
172  end interface
173 
174  procedure(large), pointer :: atmos_dyn_tstep_large => null()
175  public :: atmos_dyn_tstep_large
176 
177  !-----------------------------------------------------------------------------
178  !
179  !++ Public parameters & variables
180  !
181  !-----------------------------------------------------------------------------
182  !
183  !++ Private procedure
184  !
185  !-----------------------------------------------------------------------------
186  !
187  !++ Private parameters & variables
188  !
189  !-----------------------------------------------------------------------------
190 contains
191  !-----------------------------------------------------------------------------
193  subroutine atmos_dyn_tstep_large_setup( &
194  Tstep_large_type, &
195  DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, &
196  mflx_hi )
198  use scale_grid_index
199  use scale_index
200  use scale_process, only: &
205  implicit none
206  character(len=*), intent(in) :: tstep_large_type
207  real(RP), intent(inout) :: dens(ka,ia,ja)
208  real(RP), intent(inout) :: momz(ka,ia,ja)
209  real(RP), intent(inout) :: momx(ka,ia,ja)
210  real(RP), intent(inout) :: momy(ka,ia,ja)
211  real(RP), intent(inout) :: rhot(ka,ia,ja)
212  real(RP), intent(inout) :: qtrc(ka,ia,ja,qa)
213  real(RP), intent(inout) :: prog(ka,ia,ja,va)
214  real(RP), intent(inout) :: mflx_hi(ka,ia,ja,3)
215 
216  !---------------------------------------------------------------------------
217 
218  select case( tstep_large_type )
219  case( 'FVM-HEVE' )
221  dens, momz, momx, momy, rhot, qtrc, prog, &
222  mflx_hi )
224  case default
225  write(*,*) 'xxx ATMOS_DYN_Tstep_large_type is invalid: ', tstep_large_type
226  call prc_mpistop
227  end select
228 
229  return
230  end subroutine atmos_dyn_tstep_large_setup
231 
subroutine, public atmos_dyn_tstep_large_fvm_heve_setup(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, mflx_hi)
Setup.
subroutine, public prc_mpistop
Abort MPI.
integer, public va
Definition: scale_index.F90:38
module STDIO
Definition: scale_stdio.F90:12
subroutine, public atmos_dyn_tstep_large_fvm_heve(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, QTRC0, 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, DTLS, DTSS, Llast)
Dynamical Process.
integer, public qa
module Atmosphere / Dynamical scheme
module grid index
module TRACER
module Index
Definition: scale_index.F90:14
integer, public ia
of whole cells: x, local, with HALO
integer, public ka
of whole cells: z, local, with HALO
module PROCESS
module profiler
Definition: scale_prof.F90:10
subroutine, public atmos_dyn_tstep_large_setup(Tstep_large_type, DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, PROG, mflx_hi)
Register.
module PRECISION
module ATMOSPHERE / Boundary treatment
procedure(large), pointer, public atmos_dyn_tstep_large
integer, public ja
of whole cells: y, local, with HALO