SCALE-RM
scale_atmos_dyn_tinteg_short.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
9 !-------------------------------------------------------------------------------
10 #include "scalelib.h"
12  !-----------------------------------------------------------------------------
13  !
14  !++ used modules
15  !
16  use scale_precision
17  use scale_io
18  use scale_prof
20  use scale_index
21  use scale_tracer
22  !-----------------------------------------------------------------------------
23  implicit none
24  private
25  !-----------------------------------------------------------------------------
26  !
27  !++ Public procedure
28  !
30 
32  abstract interface
33  subroutine short( &
34  DENS, MOMZ, MOMX, MOMY, RHOT, PROG, & ! (inout)
35  mflx_hi, tflx_hi, & ! (inout, out)
36  dens_t, momz_t, momx_t, momy_t, rhot_t, & ! (in)
37  dpres0, cvtot, corioli, & ! (in)
38  num_diff, wdamp_coef, divdmp_coef, ddiv, & ! (in)
39  flag_fct_momentum, flag_fct_t, & ! (in)
40  flag_fct_along_stream, & ! (in)
41  cdz, fdz, fdx, fdy, & ! (in)
42  rcdz, rcdx, rcdy, rfdz, rfdx, rfdy, & ! (in)
43  phi, gsqrt, j13g, j23g, j33g, mapf, & ! (in)
44  ref_pres, ref_dens, & ! (in)
45  bnd_w, bnd_e, bnd_s, bnd_n, twod, & ! (in)
46  dt ) ! (in)
47  use scale_precision
49  use scale_index
50  real(RP), intent(inout) :: DENS(KA,IA,JA)
51  real(RP), intent(inout) :: MOMZ(KA,IA,JA)
52  real(RP), intent(inout) :: MOMX(KA,IA,JA)
53  real(RP), intent(inout) :: MOMY(KA,IA,JA)
54  real(RP), intent(inout) :: RHOT(KA,IA,JA)
55  real(RP), intent(inout) :: PROG(KA,IA,JA,VA)
56 
57  real(RP), intent(inout) :: mflx_hi(KA,IA,JA,3)
58  real(RP), intent(out) :: tflx_hi(KA,IA,JA,3)
59 
60  real(RP), intent(in) :: DENS_t(KA,IA,JA)
61  real(RP), intent(in) :: MOMZ_t(KA,IA,JA)
62  real(RP), intent(in) :: MOMX_t(KA,IA,JA)
63  real(RP), intent(in) :: MOMY_t(KA,IA,JA)
64  real(RP), intent(in) :: RHOT_t(KA,IA,JA)
65 
66  real(RP), intent(in) :: DPRES0(KA,IA,JA)
67  real(RP), intent(in) :: CVtot(KA,IA,JA)
68  real(RP), intent(in) :: CORIOLI(IA,JA)
69 
70  real(RP), intent(in) :: num_diff(KA,IA,JA,5,3)
71  real(RP), intent(in) :: wdamp_coef(KA)
72  real(RP), intent(in) :: divdmp_coef
73  real(RP), intent(in) :: DDIV(KA,IA,JA)
74 
75  logical, intent(in) :: FLAG_FCT_MOMENTUM
76  logical, intent(in) :: FLAG_FCT_T
77  logical, intent(in) :: FLAG_FCT_ALONG_STREAM
78 
79  real(RP), intent(in) :: CDZ (KA)
80  real(RP), intent(in) :: FDZ (KA-1)
81  real(RP), intent(in) :: FDX (IA-1)
82  real(RP), intent(in) :: FDY (JA-1)
83  real(RP), intent(in) :: RCDZ(KA)
84  real(RP), intent(in) :: RCDX(IA)
85  real(RP), intent(in) :: RCDY(JA)
86  real(RP), intent(in) :: RFDZ(KA-1)
87  real(RP), intent(in) :: RFDX(IA-1)
88  real(RP), intent(in) :: RFDY(JA-1)
89 
90  real(RP), intent(in) :: PHI (KA,IA,JA)
91  real(RP), intent(in) :: GSQRT(KA,IA,JA,7)
92  real(RP), intent(in) :: J13G (KA,IA,JA,7)
93  real(RP), intent(in) :: J23G (KA,IA,JA,7)
94  real(RP), intent(in) :: J33G
95  real(RP), intent(in) :: MAPF (IA,JA,2,4)
96 
97  real(RP), intent(in) :: REF_pres(KA,IA,JA)
98  real(RP), intent(in) :: REF_dens(KA,IA,JA)
99 
100  logical, intent(in) :: BND_W
101  logical, intent(in) :: BND_E
102  logical, intent(in) :: BND_S
103  logical, intent(in) :: BND_N
104  logical, intent(in) :: TwoD
105 
106  real(RP), intent(in) :: dt
107  end subroutine short
108  end interface
109  procedure(short), pointer :: atmos_dyn_tinteg_short => null()
110  public :: atmos_dyn_tinteg_short
111 
112  !-----------------------------------------------------------------------------
113  !
114  !++ Public parameters & variables
115  !
116  !-----------------------------------------------------------------------------
117  !
118  !++ Private procedure
119  !
120  !-----------------------------------------------------------------------------
121  !
122  !++ Private parameters & variables
123  !
124  !-----------------------------------------------------------------------------
125 contains
126  !-----------------------------------------------------------------------------
128  subroutine atmos_dyn_tinteg_short_setup( &
129  ATMOS_DYN_Tinteg_short_TYPE, ATMOS_DYN_Tstep_short_TYPE )
130 
131  use scale_precision
133  use scale_index
134  use scale_prc, only: &
135  prc_abort
148  implicit none
149 
150  character(len=*), intent(in) :: atmos_dyn_tinteg_short_type
151  character(len=*), intent(in) :: atmos_dyn_tstep_short_type
152  !---------------------------------------------------------------------------
153 
154  select case( atmos_dyn_tinteg_short_type )
155  case( 'RK3', 'RK3WS2002' )
157  atmos_dyn_tinteg_short_type )
159  case( 'RK4' )
161  atmos_dyn_tinteg_short_type )
163  case( 'RK7s6o', 'RK7s6oLawson1967', 'RK7s6oButcher1964' )
164  if ( .not. (atmos_dyn_tstep_short_type == 'HEVE' .or. atmos_dyn_tstep_short_type == 'FVM-HEVE') ) then
165  log_error("ATMOS_DYN_Tinteg_short_setup",*) "ATMOS_DYN_TINTEG_SHORT_TYPE is now supported only for 'HEVE',", atmos_dyn_tinteg_short_type
166  end if
168  atmos_dyn_tinteg_short_type )
170  case( 'RK11s8o', 'RK11s8oCooperVerner1972' )
171  if ( .not. (atmos_dyn_tstep_short_type == 'HEVE' .or. atmos_dyn_tstep_short_type == 'FVM-HEVE') ) then
172  log_error("ATMOS_DYN_Tinteg_short_setup",*) "ATMOS_DYN_TINTEG_SHORT_TYPE is now supported only for 'HEVE',", atmos_dyn_tinteg_short_type
173  end if
175  atmos_dyn_tinteg_short_type )
177  case( 'OFF', 'NONE' )
178  ! do nothing
179  case default
180  log_error("ATMOS_DYN_Tinteg_short_setup",*) 'ATMOS_DYN_TINTEG_SHORT_TYPE is invalid: ', atmos_dyn_tinteg_short_type
181  call prc_abort
182  end select
183 
184  return
185  end subroutine atmos_dyn_tinteg_short_setup
186 
scale_prc::prc_abort
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:342
scale_index
module Index
Definition: scale_index.F90:11
scale_atmos_dyn_tinteg_short_rk11s8o::atmos_dyn_tinteg_short_rk11s8o_setup
subroutine, public atmos_dyn_tinteg_short_rk11s8o_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_short_rk11s8o.F90:149
scale_precision
module PRECISION
Definition: scale_precision.F90:14
scale_atmos_dyn_tinteg_short_rk4::atmos_dyn_tinteg_short_rk4
subroutine, public atmos_dyn_tinteg_short_rk4(DENS, MOMZ, MOMX, MOMY, RHOT, PROG, mflx_hi, tflx_hi, DENS_t, MOMZ_t, MOMX_t, MOMY_t, RHOT_t, DPRES0, CVtot, CORIOLI, num_diff, wdamp_coef, divdmp_coef, DDIV, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_ALONG_STREAM, CDZ, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, REF_pres, REF_dens, BND_W, BND_E, BND_S, BND_N, TwoD, dt)
RK3.
Definition: scale_atmos_dyn_tinteg_short_rk4.F90:220
scale_atmos_dyn_tinteg_short::atmos_dyn_tinteg_short_setup
subroutine, public atmos_dyn_tinteg_short_setup(ATMOS_DYN_Tinteg_short_TYPE, ATMOS_DYN_Tstep_short_TYPE)
Register.
Definition: scale_atmos_dyn_tinteg_short.F90:130
scale_atmos_dyn_tinteg_short
module Atmosphere / Dynamics Temporal integration
Definition: scale_atmos_dyn_tinteg_short.F90:11
scale_atmos_dyn_tinteg_short_rk4::atmos_dyn_tinteg_short_rk4_setup
subroutine, public atmos_dyn_tinteg_short_rk4_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_short_rk4.F90:107
scale_prc
module PROCESS
Definition: scale_prc.F90:11
scale_io
module STDIO
Definition: scale_io.F90:10
scale_atmos_dyn_tinteg_short_rk7s6o
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_short_rk7s6o.F90:17
scale_atmos_grid_cartesc_index
module atmosphere / grid / cartesC index
Definition: scale_atmos_grid_cartesC_index.F90:12
scale_atmos_dyn_tinteg_short_rk3::atmos_dyn_tinteg_short_rk3
subroutine, public atmos_dyn_tinteg_short_rk3(DENS, MOMZ, MOMX, MOMY, RHOT, PROG, mflx_hi, tflx_hi, DENS_t, MOMZ_t, MOMX_t, MOMY_t, RHOT_t, DPRES0, CVtot, CORIOLI, num_diff, wdamp_coef, divdmp_coef, DDIV, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_ALONG_STREAM, CDZ, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, REF_pres, REF_dens, BND_W, BND_E, BND_S, BND_N, TwoD, dt)
RK3.
Definition: scale_atmos_dyn_tinteg_short_rk3.F90:205
scale_prof
module profiler
Definition: scale_prof.F90:11
scale_atmos_dyn_tinteg_short::atmos_dyn_tinteg_short
procedure(short), pointer, public atmos_dyn_tinteg_short
Definition: scale_atmos_dyn_tinteg_short.F90:109
scale_atmos_dyn_tinteg_short_rk3
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_short_rk3.F90:15
scale_tracer
module TRACER
Definition: scale_tracer.F90:12
scale_atmos_dyn_tinteg_short_rk11s8o
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_short_rk11s8o.F90:15
scale_atmos_dyn_tinteg_short_rk3::atmos_dyn_tinteg_short_rk3_setup
subroutine, public atmos_dyn_tinteg_short_rk3_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_short_rk3.F90:93
scale_atmos_dyn_tinteg_short_rk11s8o::atmos_dyn_tinteg_short_rk11s8o
subroutine, public atmos_dyn_tinteg_short_rk11s8o(DENS, MOMZ, MOMX, MOMY, RHOT, PROG, mflx_hi, tflx_hi, DENS_t, MOMZ_t, MOMX_t, MOMY_t, RHOT_t, DPRES0, CVtot, CORIOLI, num_diff, wdamp_coef, divdmp_coef, DDIV, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_ALONG_STREAM, CDZ, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, REF_pres, REF_dens, BND_W, BND_E, BND_S, BND_N, TwoD, dt)
RK7s6o.
Definition: scale_atmos_dyn_tinteg_short_rk11s8o.F90:222
scale_atmos_dyn_tinteg_short_rk4
module Atmosphere / Dyn Tinteg
Definition: scale_atmos_dyn_tinteg_short_rk4.F90:20
scale_atmos_dyn_tinteg_short_rk7s6o::atmos_dyn_tinteg_short_rk7s6o
subroutine, public atmos_dyn_tinteg_short_rk7s6o(DENS, MOMZ, MOMX, MOMY, RHOT, PROG, mflx_hi, tflx_hi, DENS_t, MOMZ_t, MOMX_t, MOMY_t, RHOT_t, DPRES0, CVtot, CORIOLI, num_diff, wdamp_coef, divdmp_coef, DDIV, FLAG_FCT_MOMENTUM, FLAG_FCT_T, FLAG_FCT_ALONG_STREAM, CDZ, FDZ, FDX, FDY, RCDZ, RCDX, RCDY, RFDZ, RFDX, RFDY, PHI, GSQRT, J13G, J23G, J33G, MAPF, REF_pres, REF_dens, BND_W, BND_E, BND_S, BND_N, TwoD, dt)
RK7s6o.
Definition: scale_atmos_dyn_tinteg_short_rk7s6o.F90:202
scale_atmos_dyn_tinteg_short_rk7s6o::atmos_dyn_tinteg_short_rk7s6o_setup
subroutine, public atmos_dyn_tinteg_short_rk7s6o_setup(tinteg_type)
Setup.
Definition: scale_atmos_dyn_tinteg_short_rk7s6o.F90:126