14 #include "inc_openmp.h" 65 character(len=*),
intent(in) :: type
67 if (
type /=
'FVM-HEVE' ) then
68 write(*,*)
'xxx Tstep_tracer_type is not "FVM-HEVE"!' 77 qtrc, qtrc0, rhoq_t, &
81 cdz, rcdz, rcdx, rcdy, &
84 flag_fct_along_stream )
104 real(RP),
intent(inout) :: qtrco (
ka,
ia,
ja)
105 real(RP),
intent(in) :: qtrc (
ka,
ia,
ja)
106 real(RP),
intent(in) :: qtrc0 (
ka,
ia,
ja)
107 real(RP),
intent(in) :: rhoq_t (
ka,
ia,
ja)
108 real(RP),
intent(in) :: dens0 (
ka,
ia,
ja)
109 real(RP),
intent(in) :: dens (
ka,
ia,
ja)
110 real(RP),
intent(in) :: mflx_hi (
ka,
ia,
ja,3)
111 real(RP),
intent(in) :: num_diff(
ka,
ia,
ja,3)
112 real(RP),
intent(in) :: gsqrt (
ka,
ia,
ja,7)
113 real(RP),
intent(in) :: mapf (
ia,
ja,2)
114 real(RP),
intent(in) :: cdz(
ka)
115 real(RP),
intent(in) :: rcdz(
ka)
116 real(RP),
intent(in) :: rcdx(
ia)
117 real(RP),
intent(in) :: rcdy(
ja)
118 real(RP),
intent(in) :: dtl
119 logical,
intent(in) :: flag_fct_tracer
120 logical,
intent(in) :: flag_fct_along_stream
124 real(RP) :: qflx_hi (
ka,
ia,
ja,3)
125 real(RP) :: qflx_lo (
ka,
ia,
ja,3)
126 real(RP) :: qflx_anti(
ka,
ia,
ja,3)
134 qflx_hi(:,:,:,:) = undef
135 qflx_lo(:,:,:,:) = undef
145 mflx_hi(:,:,:,
zdir), qtrc, gsqrt(:,:,:,
i_xyw), &
146 num_diff(:,:,:,
zdir), &
152 mflx_hi(:,:,:,
xdir), qtrc, gsqrt(:,:,:,
i_uyz), &
153 num_diff(:,:,:,
xdir), &
159 mflx_hi(:,:,:,
ydir), qtrc, gsqrt(:,:,:,
i_xvz), &
160 num_diff(:,:,:,
ydir), &
164 if ( flag_fct_tracer )
then 167 mflx_hi(:,:,:,
zdir), qtrc0, gsqrt(:,:,:,
i_xyw), &
168 num_diff(:,:,:,
zdir), &
170 iis-1, iie+1, jjs-1, jje+1 )
173 mflx_hi(:,:,:,
xdir), qtrc0, gsqrt(:,:,:,
i_uyz), &
174 num_diff(:,:,:,
xdir), &
176 iis-1, iie+1, jjs-1, jje+1 )
179 mflx_hi(:,:,:,
ydir), qtrc0, gsqrt(:,:,:,
i_xvz), &
180 num_diff(:,:,:,
ydir), &
182 iis-1, iie+1, jjs-1, jje+1 )
188 if ( flag_fct_tracer )
then 191 qtrc0, dens0, dens, &
195 gsqrt(:,:,:,
i_xyz), &
197 flag_fct_along_stream )
208 qtrco(k,i,j) = ( qtrc0(k,i,j) * dens0(k,i,j) &
209 + dtl * ( - ( ( qflx_hi(k ,i ,j ,
zdir) - qflx_anti(k ,i ,j ,
zdir) &
210 - qflx_hi(k-1,i ,j ,
zdir) + qflx_anti(k-1,i ,j ,
zdir) ) * rcdz(k) &
211 + ( qflx_hi(k ,i ,j ,
xdir) - qflx_anti(k ,i ,j ,
xdir) &
212 - qflx_hi(k ,i-1,j ,
xdir) + qflx_anti(k ,i-1,j ,
xdir) ) * rcdx(i) &
213 + ( qflx_hi(k ,i ,j ,
ydir) - qflx_anti(k ,i ,j ,
ydir) &
214 - qflx_hi(k ,i ,j-1,
ydir) + qflx_anti(k ,i ,j-1,
ydir) ) * rcdy(j) &
215 ) * mapf(i,j,1) * mapf(i,j,2) / gsqrt(k,i,j,
i_xyz) &
216 + rhoq_t(k,i,j) ) ) / dens(k,i,j)
237 qtrco(k,i,j) = ( qtrc0(k,i,j) * dens0(k,i,j) &
238 + dtl * ( - ( ( qflx_hi(k,i,j,
zdir) - qflx_hi(k-1,i ,j ,
zdir) ) * rcdz(k) &
239 + ( qflx_hi(k,i,j,
xdir) - qflx_hi(k ,i-1,j ,
xdir) ) * rcdx(i) &
240 + ( qflx_hi(k,i,j,
ydir) - qflx_hi(k ,i ,j-1,
ydir) ) * rcdy(j) &
241 ) * mapf(i,j,1) * mapf(i,j,2) / gsqrt(k,i,j,
i_xyz) &
242 + rhoq_t(k,i,j) ) ) / dens(k,i,j)
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
subroutine, public atmos_dyn_fvm_fluxy_xyz_ud1(flux, mflx, val, GSQRT, num_diff, CDZ, IIS, IIE, JJS, JJE)
calculation Y-flux at XYZ
subroutine, public prc_mpistop
Abort MPI.
subroutine, public atmos_dyn_tstep_tracer_fvm_heve(QTRCo, QTRC, QTRC0, RHOQ_t, DENS0, DENS, mflx_hi, num_diff, GSQRT, MAPF, CDZ, RCDZ, RCDX, RCDY, dtl, FLAG_FCT_TRACER, FLAG_FCT_ALONG_STREAM)
subroutine, public atmos_dyn_fvm_fluxz_xyz_ud1(flux, mflx, val, GSQRT, num_diff, CDZ, IIS, IIE, JJS, JJE)
calculation z-flux at XYZ
integer, public iblock
block size for cache blocking: x
integer, parameter, public zdir
integer, parameter, public ydir
integer, public ke
end point of inner domain: z, local
integer, parameter, public xdir
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxy_xyz_tracer
subroutine, public check(current_line, v)
Undefined value checker.
real(rp), public const_undef
integer, public ia
of whole cells: x, local, with HALO
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxx_xyz_tracer
integer, public ka
of whole cells: z, local, with HALO
integer, public jblock
block size for cache blocking: y
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxz_xyz_tracer
integer, public js
start point of inner domain: y, local
integer, parameter, public const_undef2
undefined value (INT2)
module Atmosphere / Dynamics common
subroutine, public atmos_dyn_tstep_tracer_fvm_heve_setup(type)
Setup.
integer, public ks
start point of inner domain: z, local
integer, public ie
end point of inner domain: x, local
module scale_atmos_dyn_fvm_flux
module Atmosphere / Dynamics
subroutine, public atmos_dyn_fct(qflx_anti, phi_in, DENS0, DENS, qflx_hi, qflx_lo, mflx_hi, rdz, rdx, rdy, GSQRT, MAPF, dt, flag_vect)
Flux Correction Transport Limiter.
subroutine, public atmos_dyn_fvm_fluxx_xyz_ud1(flux, mflx, val, GSQRT, num_diff, CDZ, IIS, IIE, JJS, JJE)
calculation X-flux at XYZ
module scale_atmos_dyn_fvm_flux_ud1
integer, public ja
of whole cells: y, local, with HALO