SCALE-RM
Data Types | Functions/Subroutines | Variables
mod_atmos_bnd_driver Module Reference

module ATMOSPHERE / Boundary treatment More...

Functions/Subroutines

subroutine, public atmos_boundary_driver_setup
 Setup. More...
 
subroutine, public atmos_boundary_driver_set
 set More...
 
subroutine atmos_boundary_set_file
 Set boundary value for real case experiment. More...
 
subroutine atmos_boundary_set_online
 Set boundary value for real case experiment [online daughter]. More...
 
subroutine, public atmos_boundary_driver_finalize
 Finalize boundary value. More...
 
subroutine, public atmos_boundary_driver_update (last_step)
 Update boundary value with a constant time boundary. More...
 
subroutine, public atmos_boundary_driver_send
 Send data to child domain. More...
 
subroutine set_boundary (use_velz)
 
subroutine update_ref_index
 Update indices of array of boundary references. More...
 
subroutine calc_mass (ref)
 
subroutine set_offset
 

Variables

integer, public bnd_qa
 
integer, allocatable, public of
 
integer, allocatable, public tracer
 
integer, public at
 
integer, public boundary
 
integer, dimension(:), allocatable, public bnd_iq
 
integer, allocatable, public index
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_dens
 
real(rp), allocatable, public reference
 
real(rp), dimension(0-1), allocatable, public dens
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_velz
 
real(rp), dimension(0-1), allocatable, public velz
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_velx
 
real(rp), dimension(0-1), allocatable, public velx
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_vely
 
real(rp), dimension(0-1), allocatable, public vely
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_pott
 
real(rp), dimension(0-1), allocatable, public pott
 
real(rp), dimension(:,:,:,:), allocatable, public atmos_boundary_qtrc
 
real(rp), dimension(0-1), allocatable, public qtrc
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_alpha_dens
 
real(rp), allocatable, public damping
 
real(rp), allocatable, public coefficient
 
real(rp), allocatable, public for
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_alpha_velz
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_alpha_velx
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_alpha_vely
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_alpha_pott
 
real(rp), dimension(:,:,:,:), allocatable, public atmos_boundary_alpha_qtrc
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_mflux_offset_x
 
real(rp), allocatable, public mass
 
real(rp), allocatable, public flux
 
real(rp), dimension(south, north), allocatable, public offset
 
real(rp), dimension(:,:,:), allocatable, public atmos_boundary_mflux_offset_y
 
real(rp), public atmos_boundary_smoother_fact = 0.2_RP
 
real(rp), public fact
 
real(rp), public smoother
 
real(rp), public to
 
logical, public atmos_boundary_update_flag = .false.
 
logical, public switch
 
logical, public real
 
logical, public case
 

Detailed Description

module ATMOSPHERE / Boundary treatment

Description
Boundary treatment of model domain Additional forcing, Sponge layer, rayleigh dumping
Author
Team SCALE
NAMELIST
  • PARAM_ATMOS_BOUNDARY
    nametypedefault valuecomment
    ATMOS_BOUNDARY_TYPE character(len=H_SHORT) 'NONE'
    ATMOS_BOUNDARY_IN_BASENAME character(len=H_LONG) ''
    ATMOS_BOUNDARY_IN_CHECK_COORDINATES logical .true.
    ATMOS_BOUNDARY_IN_AGGREGATE logical
    ATMOS_BOUNDARY_OUT_BASENAME character(len=H_LONG) ''
    ATMOS_BOUNDARY_OUT_TITLE character(len=H_MID) 'SCALE-RM BOUNDARY CONDITION' title of the output file
    ATMOS_BOUNDARY_OUT_DTYPE character(len=H_SHORT) 'DEFAULT' REAL4 or REAL8
    ATMOS_BOUNDARY_OUT_AGGREGATE logical
    ATMOS_BOUNDARY_USE_VELZ logical .false. read from file?
    ATMOS_BOUNDARY_USE_VELX logical .false. read from file?
    ATMOS_BOUNDARY_USE_VELY logical .false. read from file?
    ATMOS_BOUNDARY_USE_PT logical .false. read from file?
    ATMOS_BOUNDARY_USE_DENS logical .false. read from file?
    ATMOS_BOUNDARY_USE_QV logical .false. read from file?
    ATMOS_BOUNDARY_USE_QHYD logical .false. read from file?
    ATMOS_BOUNDARY_USE_CHEM logical .false. read from file?
    ATMOS_BOUNDARY_DENS_ADJUST logical .false.
    ATMOS_BOUNDARY_DENS_ADJUST_TAU real(RP) -1.0_RP
    ATMOS_BOUNDARY_VALUE_VELZ real(RP) 0.0_RP velocity w at boundary, 0 [m/s]
    ATMOS_BOUNDARY_VALUE_VELX real(RP) 0.0_RP velocity u at boundary, 0 [m/s]
    ATMOS_BOUNDARY_VALUE_VELY real(RP) 0.0_RP velocity v at boundary, 0 [m/s]
    ATMOS_BOUNDARY_VALUE_PT real(RP) 300.0_RP potential temp. at boundary, 300 [K]
    ATMOS_BOUNDARY_VALUE_QTRC real(RP) 0.0_RP tracer at boundary, 0 [kg/kg]
    ATMOS_BOUNDARY_ALPHAFACT_DENS real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_ALPHAFACT_VELZ real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_ALPHAFACT_VELX real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_ALPHAFACT_VELY real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_ALPHAFACT_PT real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_ALPHAFACT_QTRC real(RP) 1.0_RP alpha factor again default
    ATMOS_BOUNDARY_SMOOTHER_FACT real(RP) 0.2_RP > fact for smoother to damping
    ATMOS_BOUNDARY_FRACZ real(RP) 1.0_RP fraction of boundary region for dumping (z) (0-1)
    ATMOS_BOUNDARY_FRACX real(RP) 1.0_RP fraction of boundary region for dumping (x) (0-1)
    ATMOS_BOUNDARY_FRACY real(RP) 1.0_RP fraction of boundary region for dumping (y) (0-1)
    ATMOS_BOUNDARY_TAUZ real(RP) maximum value for damping tau (z) [s]
    ATMOS_BOUNDARY_TAUX real(RP) maximum value for damping tau (x) [s]
    ATMOS_BOUNDARY_TAUY real(RP) maximum value for damping tau (y) [s]
    ATMOS_BOUNDARY_UPDATE_DT real(DP) 0.0_DP inteval time of boudary data update [s]
    ATMOS_BOUNDARY_START_DATE integer, dimension(6) (/ -9999, 0, 0, 0, 0, 0 /) boundary initial date
    ATMOS_BOUNDARY_LINEAR_V logical .false. linear or non-linear profile of relax region
    ATMOS_BOUNDARY_LINEAR_H logical .true. linear or non-linear profile of relax region
    ATMOS_BOUNDARY_EXP_H real(RP) 2.0_RP factor of non-linear profile of relax region
    ATMOS_BOUNDARY_INTERP_TYPE character(len=H_SHORT) 'lerp_initpoint' type of boundary interporation
    ATMOS_GRID_NUDGING_UV logical .false. grid nudging
    ATMOS_GRID_NUDGING_PT logical .false. grid nudging
    ATMOS_GRID_NUDGING_QV logical .false. grid nudging
    ATMOS_GRID_NUDGING_TAU real(RP) Damping tau for grid nudging [s]

History Output
namedescriptionunitvariable
DENS_BND Boundary Density kg/m3 ATMOS_BOUNDARY_DENS
PT_BND Boundary potential temperature K ATMOS_BOUNDARY_POTT
VELX_BND Boundary velocity x-direction m/s ATMOS_BOUNDARY_VELX
VELY_BND Boundary velocity y-direction m/s ATMOS_BOUNDARY_VELY
VELZ_BND Boundary velocity z-direction m/s ATMOS_BOUNDARY_VELZ
{TRACER_NAME}_BND {TRACER_NAME} in boundary;
{TRACER_NAME} depends on the physics schemes, e.g., QV, QC, QR.
kg/kg ATMOS_BOUNDARY_QTRC

Function/Subroutine Documentation

◆ atmos_boundary_driver_setup()

subroutine, public mod_atmos_bnd_driver::atmos_boundary_driver_setup

Setup.

Definition at line 223 of file mod_atmos_bnd_driver.F90.

223  use scale_prc, only: &
224  prc_abort
225  use scale_const, only: &
226  undef => const_undef
227  use scale_time, only: &
228  dt => time_dtsec
229  use scale_file, only: &
231  use scale_comm_cartesc_nest, only: &
234  use_nesting, &
235  offline, &
238  nestqa => comm_cartesc_nest_bnd_qa
239  use scale_atmos_hydrometeor, only: &
241  i_qv
242  use mod_atmos_phy_mp_vars, only: &
243  qs_mp, &
244  qe_mp
245  use mod_atmos_phy_ch_vars, only: &
246  qs_ch, &
247  qe_ch
248  use scale_atmos_grid_cartesc_real, only: &
250  implicit none
251 
252  namelist / param_atmos_boundary / &
253  atmos_boundary_type, &
254  atmos_boundary_in_basename, &
255  atmos_boundary_in_check_coordinates, &
256  atmos_boundary_in_aggregate, &
257  atmos_boundary_out_basename, &
258  atmos_boundary_out_title, &
259  atmos_boundary_out_dtype, &
260  atmos_boundary_out_aggregate, &
261  atmos_boundary_use_velz, &
262  atmos_boundary_use_velx, &
263  atmos_boundary_use_vely, &
264  atmos_boundary_use_pt, &
265  atmos_boundary_use_dens, &
266  atmos_boundary_use_qv, &
267  atmos_boundary_use_qhyd, &
268  atmos_boundary_use_chem, &
269  atmos_boundary_dens_adjust, &
270  atmos_boundary_dens_adjust_tau, &
271  atmos_boundary_value_velz, &
272  atmos_boundary_value_velx, &
273  atmos_boundary_value_vely, &
274  atmos_boundary_value_pt, &
275  atmos_boundary_value_qtrc, &
276  atmos_boundary_alphafact_dens, &
277  atmos_boundary_alphafact_velz, &
278  atmos_boundary_alphafact_velx, &
279  atmos_boundary_alphafact_vely, &
280  atmos_boundary_alphafact_pt, &
281  atmos_boundary_alphafact_qtrc, &
282  atmos_boundary_smoother_fact, &
283  atmos_boundary_fracz, &
284  atmos_boundary_fracx, &
285  atmos_boundary_fracy, &
286  atmos_boundary_tauz, &
287  atmos_boundary_taux, &
288  atmos_boundary_tauy, &
289  atmos_boundary_update_dt, &
290  atmos_boundary_start_date, &
291  atmos_boundary_linear_v, &
292  atmos_boundary_linear_h, &
293  atmos_boundary_exp_h, &
294  atmos_boundary_interp_type, &
295  atmos_grid_nudging_uv, &
296  atmos_grid_nudging_pt, &
297  atmos_grid_nudging_qv, &
298  atmos_grid_nudging_tau
299 
300  integer :: k, i, j, iq
301  integer :: ierr
302  !---------------------------------------------------------------------------
303 
304  log_newline
305  log_info("ATMOS_BOUNDARY_setup",*) 'Setup'
306 
307 
308  atmos_boundary_tauz = dt * 10.0_rp
309  atmos_boundary_taux = dt * 10.0_rp
310  atmos_boundary_tauy = dt * 10.0_rp
311 
312  atmos_boundary_in_aggregate = file_aggregate
313  atmos_boundary_out_aggregate = file_aggregate
314 
315  atmos_grid_nudging_tau = 10.0_rp * 24.0_rp * 3600.0_rp ! 10days [s]
316 
317  !--- read namelist
318  rewind(io_fid_conf)
319  read(io_fid_conf,nml=param_atmos_boundary,iostat=ierr)
320  if( ierr < 0 ) then !--- missing
321  log_info("ATMOS_BOUNDARY_setup",*) 'Not found namelist. Default used.'
322  elseif( ierr > 0 ) then !--- fatal error
323  log_error("ATMOS_BOUNDARY_setup",*) 'Not appropriate names in namelist PARAM_ATMOS_BOUNDARY. Check!'
324  call prc_abort
325  endif
326  log_nml(param_atmos_boundary)
327 
328  ! setting switches
329  if( .NOT. use_nesting ) then
330  atmos_boundary_online = .false.
331  else
332  if( offline ) then
333  atmos_boundary_online = .false.
334  else
335  atmos_boundary_online = .true.
336  endif
337  endif
338  do_parent_process = .false.
339  do_daughter_process = .false.
340  atmos_boundary_online_master = .false.
341  if ( atmos_boundary_online ) then
342  if ( online_iam_parent ) then
343  do_parent_process = .true.
344  if ( .NOT. online_iam_daughter ) then
345  atmos_boundary_online_master = .true.
346  endif
347  endif
348  if ( online_iam_daughter ) then
349  do_daughter_process = .true.
350  atmos_boundary_use_qhyd = online_boundary_use_qhyd
351  endif
352  endif
353 
354  allocate( bnd_iq(qa) )
355  bnd_iq(:) = -1
356  bnd_qa = 0
357  if ( .not. atmos_hydrometeor_dry ) then
358  bnd_qa = bnd_qa + 1
359  bnd_iq(i_qv) = bnd_qa
360  if( atmos_boundary_use_qhyd ) then
361  do iq = qs_mp+1, qe_mp
362  bnd_qa = bnd_qa + 1
363  bnd_iq(iq) = bnd_qa
364  end do
365  end if
366  end if
367  if( atmos_boundary_use_chem ) then
368  do iq = qs_ch, qe_ch
369  bnd_qa = bnd_qa + 1
370  bnd_iq(iq) = bnd_qa
371  end do
372  endif
373 
374  if ( atmos_boundary_dens_adjust_tau <= 0.0_rp ) then
375  atmos_boundary_dens_adjust_tau = max( real(atmos_boundary_update_dt,kind=rp) / 6.0_rp, &
376  atmos_boundary_taux, atmos_boundary_tauy )
377  end if
378 
379 
380 
381  allocate( atmos_boundary_dens(ka,ia,ja) )
382  allocate( atmos_boundary_velz(ka,ia,ja) )
383  allocate( atmos_boundary_velx(ka,ia,ja) )
384  allocate( atmos_boundary_vely(ka,ia,ja) )
385  allocate( atmos_boundary_pott(ka,ia,ja) )
386  allocate( atmos_boundary_qtrc(ka,ia,ja,bnd_qa) )
387  atmos_boundary_dens(:,:,:) = undef
388  atmos_boundary_velz(:,:,:) = undef
389  atmos_boundary_velx(:,:,:) = undef
390  atmos_boundary_vely(:,:,:) = undef
391  atmos_boundary_pott(:,:,:) = undef
392  atmos_boundary_qtrc(:,:,:,:) = undef
393 
394  allocate( atmos_boundary_alpha_dens(ka,ia,ja) )
395  allocate( atmos_boundary_alpha_velz(ka,ia,ja) )
396  allocate( atmos_boundary_alpha_velx(ka,ia,ja) )
397  allocate( atmos_boundary_alpha_vely(ka,ia,ja) )
398  allocate( atmos_boundary_alpha_pott(ka,ia,ja) )
399  allocate( atmos_boundary_alpha_qtrc(ka,ia,ja,bnd_qa) )
400  atmos_boundary_alpha_dens(:,:,:) = 0.0_rp
401  atmos_boundary_alpha_velz(:,:,:) = 0.0_rp
402  atmos_boundary_alpha_velx(:,:,:) = 0.0_rp
403  atmos_boundary_alpha_vely(:,:,:) = 0.0_rp
404  atmos_boundary_alpha_pott(:,:,:) = 0.0_rp
405  atmos_boundary_alpha_qtrc(:,:,:,:) = 0.0_rp
406 
407  allocate( atmos_boundary_mflux_offset_x(ka,ja,2) )
408  allocate( atmos_boundary_mflux_offset_y(ka,ia,2) )
409  atmos_boundary_mflux_offset_x(:,:,:) = 0.0_rp
410  atmos_boundary_mflux_offset_y(:,:,:) = 0.0_rp
411 
412  if ( atmos_boundary_type == 'REAL' .OR. do_daughter_process ) then
413  l_bnd = .true.
414  else
415  l_bnd = .false.
416  end if
417 
418  if ( l_bnd ) then
419 
420  select case(atmos_boundary_interp_type)
421  case('same_parent')
422  get_boundary => get_boundary_same_parent
423  case('nearest_neighbor')
424  get_boundary => get_boundary_nearest_neighbor
425  case('lerp_initpoint')
426  get_boundary => get_boundary_lerp_initpoint
427  case('lerp_midpoint')
428  get_boundary => get_boundary_lerp_midpoint
429  case default
430  log_error("ATMOS_BOUNDARY_setup",*) 'Wrong parameter in ATMOS_BOUNDARY_interp_TYPE. Check!'
431  call prc_abort
432  end select
433 
434  allocate( atmos_boundary_ref_dens(ka,ia,ja,ref_size) )
435  allocate( atmos_boundary_ref_velz(ka,ia,ja,ref_size) )
436  allocate( atmos_boundary_ref_velx(ka,ia,ja,ref_size) )
437  allocate( atmos_boundary_ref_vely(ka,ia,ja,ref_size) )
438  allocate( atmos_boundary_ref_pott(ka,ia,ja,ref_size) )
439  allocate( atmos_boundary_ref_qtrc(ka,ia,ja,bnd_qa,ref_size) )
440  atmos_boundary_ref_dens(:,:,:,:) = undef
441  atmos_boundary_ref_velz(:,:,:,:) = undef
442  atmos_boundary_ref_velx(:,:,:,:) = undef
443  atmos_boundary_ref_vely(:,:,:,:) = undef
444  atmos_boundary_ref_pott(:,:,:,:) = undef
445  atmos_boundary_ref_qtrc(:,:,:,:,:) = undef
446 
447  ! initialize boundary value (reading file or waiting parent domain)
448  if ( do_daughter_process ) then
449  call atmos_boundary_initialize_online
450  else
451  if ( atmos_boundary_in_basename /= '' ) then
452  call atmos_boundary_initialize_file
453  else
454  log_error("ATMOS_BOUNDARY_setup",*) 'You need specify ATMOS_BOUNDARY_IN_BASENAME'
455  call prc_abort
456  endif
457  endif
458 
459  call atmos_boundary_setalpha
460 
461  atmos_boundary_update_flag = .true.
462 
463  ! for mass flux offset
464  allocate( areazuy_w(ka,ja), areazuy_e(ka,ja) )
465  allocate( mflux_offset_x(ka,ja,2,2), mflux_offset_y(ka,ia,2,2) )
466 
467  !$omp parallel do
468  do j = js, je
469  do k = ks, ke
470  areazuy_w(k,j) = atmos_grid_cartesc_real_areazuy_x(k,is-1,j)
471  areazuy_e(k,j) = atmos_grid_cartesc_real_areazuy_x(k,ie ,j)
472  end do
473  end do
474  !$omp parallel do
475  do j = js, je
476  do k = ks, ke
477  mflux_offset_x(k,j,:,:) = 0.0_rp
478  end do
479  end do
480  !$omp parallel do
481  do i = is, ie
482  do k = ks, ke
483  mflux_offset_y(k,i,:,:) = 0.0_rp
484  end do
485  end do
486 
487  elseif ( atmos_boundary_type == 'NONE' ) then
488 
489  atmos_boundary_update_flag = .false.
490 
491  elseif ( atmos_boundary_type == 'CONST' ) then
492 
493  call atmos_boundary_setalpha
494 
495  atmos_boundary_update_flag = .false.
496 
497  elseif ( atmos_boundary_type == 'INIT' ) then
498 
499  call atmos_boundary_setalpha
500 
501  atmos_boundary_update_flag = .false.
502 
503  elseif ( atmos_boundary_type == 'OFFLINE' ) then
504 
505  if ( atmos_boundary_in_basename /= '' ) then
506  call atmos_boundary_read
507  else
508  log_error("ATMOS_BOUNDARY_setup",*) 'You need specify ATMOS_BOUNDARY_IN_BASENAME'
509  call prc_abort
510  endif
511 
512  atmos_boundary_update_flag = .false.
513 
514  else
515  log_error("ATMOS_BOUNDARY_setup",*) 'unsupported ATMOS_BOUNDARY_TYPE. Check!', trim(atmos_boundary_type)
516  call prc_abort
517  endif
518 
519  if ( use_nesting ) atmos_boundary_update_flag = .true.
520 
521 
522  !----- report data -----
523  log_newline
524  log_info("ATMOS_BOUNDARY_setup",*) 'Atmospheric boundary parameters '
525  log_info_cont(*) 'Atmospheric boundary type : ', atmos_boundary_type
526  log_newline
527  log_info_cont(*) 'Is VELZ used in atmospheric boundary? : ', atmos_boundary_use_velz
528  log_info_cont(*) 'Is VELX used in atmospheric boundary? : ', atmos_boundary_use_velx
529  log_info_cont(*) 'Is VELY used in atmospheric boundary? : ', atmos_boundary_use_vely
530  log_info_cont(*) 'Is PT used in atmospheric boundary? : ', atmos_boundary_use_pt
531  log_info_cont(*) 'Is DENS used in atmospheric boundary? : ', atmos_boundary_use_dens
532  log_info_cont(*) 'Is QV used in atmospheric boundary? : ', atmos_boundary_use_qv
533  log_info_cont(*) 'Is QHYD used in atmospheric boundary? : ', atmos_boundary_use_qhyd
534  log_info_cont(*) 'Is CHEM used in atmospheric boundary? : ', atmos_boundary_use_chem
535  log_newline
536  log_info_cont(*) 'Atmospheric boundary VELZ values : ', atmos_boundary_value_velz
537  log_info_cont(*) 'Atmospheric boundary VELX values : ', atmos_boundary_value_velx
538  log_info_cont(*) 'Atmospheric boundary VELY values : ', atmos_boundary_value_vely
539  log_info_cont(*) 'Atmospheric boundary PT values : ', atmos_boundary_value_pt
540  log_info_cont(*) 'Atmospheric boundary QTRC values : ', atmos_boundary_value_qtrc
541  log_newline
542  log_info_cont(*) 'Atmospheric boundary smoother factor : ', atmos_boundary_smoother_fact
543  log_info_cont(*) 'Atmospheric boundary z-fraction : ', atmos_boundary_fracz
544  log_info_cont(*) 'Atmospheric boundary x-fraction : ', atmos_boundary_fracx
545  log_info_cont(*) 'Atmospheric boundary y-fraction : ', atmos_boundary_fracy
546  log_info_cont(*) 'Atmospheric boundary z-relaxation time : ', atmos_boundary_tauz
547  log_info_cont(*) 'Atmospheric boundary x-relaxation time : ', atmos_boundary_taux
548  log_info_cont(*) 'Atmospheric boundary y-relaxation time : ', atmos_boundary_tauy
549  log_newline
550  log_info_cont(*) 'Atmospheric boundary update dt : ', atmos_boundary_update_dt
551  log_info_cont(*) 'Atmospheric boundary start date : ', atmos_boundary_start_date(:)
552  log_newline
553  log_info_cont(*) 'Linear profile in vertically relax region : ', atmos_boundary_linear_v
554  log_info_cont(*) 'Linear profile in horizontally relax region : ', atmos_boundary_linear_h
555  log_info_cont(*) 'Non-linear factor in horizontally relax region : ', atmos_boundary_exp_h
556  log_newline
557  log_info_cont(*) 'Online nesting for lateral boundary : ', atmos_boundary_online
558 
559  log_info_cont(*) 'Does lateral boundary exist in this domain? : ', l_bnd
560  if ( l_bnd ) then
561  log_info_cont(*) 'Lateral boundary interporation type : ', trim(atmos_boundary_interp_type)
562  endif
563  log_newline
564  log_info_cont(*) 'Is grid nudging used for VELX & VELY? : ', atmos_grid_nudging_uv
565  log_info_cont(*) 'Is grid nudging used for POTT? : ', atmos_grid_nudging_pt
566  log_info_cont(*) 'Is grid nudging used for QV? : ', atmos_grid_nudging_qv
567  log_info_cont(*) 'Relaxation time for grid nudging : ', atmos_grid_nudging_tau
568 
569  log_info_cont(*) 'Density adjustment : ', atmos_boundary_dens_adjust
570  if ( atmos_boundary_dens_adjust ) then
571  log_info_cont(*) 'Density relaxation time : ', atmos_boundary_dens_adjust_tau
572  end if
573 
574  if ( online_boundary_diagqhyd ) then
575  allocate( q_work(ka,ia,ja,nestqa) )
576  end if
577 
578  allocate( zero_x(ka,ja), zero_y(ka,ia) )
579  !$omp parallel do
580  do j = js, je
581  do k = ks, ke
582  zero_x(k,j) = 0.0_rp
583  end do
584  end do
585  !$omp parallel do
586  do i = is, ie
587  do k = ks, ke
588  zero_y(k,i) = 0.0_rp
589  end do
590  end do
591 
592 
593 
594  return

References atmos_boundary_alpha_dens, atmos_boundary_alpha_pott, atmos_boundary_alpha_qtrc, atmos_boundary_alpha_velx, atmos_boundary_alpha_vely, atmos_boundary_alpha_velz, atmos_boundary_dens, atmos_boundary_mflux_offset_x, atmos_boundary_mflux_offset_y, atmos_boundary_pott, atmos_boundary_qtrc, atmos_boundary_smoother_fact, atmos_boundary_update_flag, atmos_boundary_velx, atmos_boundary_vely, atmos_boundary_velz, scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_areazuy_x, scale_atmos_hydrometeor::atmos_hydrometeor_dry, bnd_iq, bnd_qa, scale_comm_cartesc_nest::comm_cartesc_nest_bnd_qa, scale_const::const_undef, scale_file::file_aggregate, scale_atmos_hydrometeor::i_qv, scale_atmos_grid_cartesc_index::ia, scale_atmos_grid_cartesc_index::ie, scale_io::io_fid_conf, scale_atmos_grid_cartesc_index::is, scale_atmos_grid_cartesc_index::ja, scale_atmos_grid_cartesc_index::je, scale_atmos_grid_cartesc_index::js, scale_tracer::k, scale_atmos_grid_cartesc_index::ka, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, scale_comm_cartesc_nest::offline, scale_comm_cartesc_nest::online_boundary_diagqhyd, scale_comm_cartesc_nest::online_boundary_use_qhyd, scale_comm_cartesc_nest::online_iam_daughter, scale_comm_cartesc_nest::online_iam_parent, scale_prc::prc_abort(), scale_tracer::qa, mod_atmos_phy_ch_vars::qe_ch, mod_atmos_phy_mp_vars::qe_mp, mod_atmos_phy_ch_vars::qs_ch, mod_atmos_phy_mp_vars::qs_mp, real, scale_precision::rp, scale_time::time_dtsec, and scale_comm_cartesc_nest::use_nesting.

Referenced by mod_atmos_driver::atmos_driver_setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_driver_set()

subroutine, public mod_atmos_bnd_driver::atmos_boundary_driver_set

set

Definition at line 600 of file mod_atmos_bnd_driver.F90.

600  use mod_atmos_vars, only: &
601  dens, &
602  momz, &
603  momx, &
604  momy, &
605  rhot, &
606  qtrc, &
607  qv, &
608  qe
609  use mod_atmos_phy_mp_vars, only: &
610  qs_mp, &
611  qe_mp
612  implicit none
613 
614  if ( do_parent_process ) then !online [parent]
615  call atmos_boundary_firstsend( &
616  dens, momz, momx, momy, rhot, qtrc(:,:,:,qs_mp:qe_mp), qv, qe )
617  end if
618 
619  if ( l_bnd ) then
620 
621  ! initialize boundary value (reading file or waiting parent domain)
622  if ( do_daughter_process ) then
623  call atmos_boundary_set_online
624  else
625  if ( atmos_boundary_in_basename /= '' ) then
626  call atmos_boundary_set_file
627  endif
628  endif
629 
630  elseif ( atmos_boundary_type == 'CONST' ) then
631 
632  call atmos_boundary_generate
633 
634  elseif ( atmos_boundary_type == 'INIT' ) then
635 
636  call atmos_boundary_setinitval( dens, & ! [IN]
637  momz, & ! [IN]
638  momx, & ! [IN]
639  momy, & ! [IN]
640  rhot, & ! [IN]
641  qtrc ) ! [IN]
642  endif
643 
644  if( atmos_boundary_out_basename /= '' ) then
645  call atmos_boundary_write
646  endif
647 
648  if ( atmos_boundary_update_flag ) then
649 
650  call history_bnd( &
651  atmos_boundary_dens, &
652  atmos_boundary_velz, &
653  atmos_boundary_velx, &
654  atmos_boundary_vely, &
655  atmos_boundary_pott, &
656  atmos_boundary_qtrc )
657  end if
658 
659  return

References atmos_boundary_alpha_dens, atmos_boundary_alpha_pott, atmos_boundary_alpha_qtrc, atmos_boundary_alpha_velx, atmos_boundary_alpha_vely, atmos_boundary_alpha_velz, atmos_boundary_dens, atmos_boundary_pott, atmos_boundary_qtrc, atmos_boundary_set_file(), atmos_boundary_set_online(), atmos_boundary_update_flag, atmos_boundary_velx, atmos_boundary_vely, atmos_boundary_velz, scale_atmos_grid_cartesc::atmos_grid_cartesc_cbfx, scale_atmos_grid_cartesc::atmos_grid_cartesc_cbfy, scale_atmos_grid_cartesc::atmos_grid_cartesc_cbfz, scale_atmos_grid_cartesc::atmos_grid_cartesc_fbfx, scale_atmos_grid_cartesc::atmos_grid_cartesc_fbfy, scale_atmos_grid_cartesc::atmos_grid_cartesc_fbfz, scale_atmos_refstate::atmos_refstate_dens, bnd_iq, bnd_qa, scale_calendar::calendar_combine_daysec(), scale_calendar::calendar_date2char(), scale_calendar::calendar_date2daysec(), scale_const::const_eps, scale_const::const_pi, dens, scale_file_cartesc::file_cartesc_close(), scale_file_cartesc::file_cartesc_create(), scale_file_cartesc::file_cartesc_def_var(), scale_file_cartesc::file_cartesc_enddef(), scale_file_cartesc::file_cartesc_open(), scale_atmos_hydrometeor::i_qv, scale_atmos_grid_cartesc_index::ia, scale_atmos_grid_cartesc_index::ieb, scale_atmos_grid_cartesc_index::isb, scale_atmos_grid_cartesc_index::ja, scale_atmos_grid_cartesc_index::jeb, scale_atmos_grid_cartesc_index::jsb, scale_tracer::k, scale_atmos_grid_cartesc_index::ka, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, mod_atmos_vars::momx, mod_atmos_vars::momy, mod_atmos_vars::momz, scale_comm_cartesc_nest::online_use_velz, scale_prc::prc_abort(), scale_tracer::qa, mod_atmos_vars::qe, mod_atmos_phy_mp_vars::qe_mp, mod_atmos_phy_mp_vars::qs_mp, qtrc, mod_atmos_vars::qv, mod_atmos_vars::rhot, scale_time::time_nowdate, scale_tracer::tracer_name, and scale_tracer::tracer_unit.

Referenced by mod_rm_driver::restart_read().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_set_file()

subroutine mod_atmos_bnd_driver::atmos_boundary_set_file

Set boundary value for real case experiment.

Definition at line 1412 of file mod_atmos_bnd_driver.F90.

1412  use scale_prc, only: &
1413  prc_abort
1414  use scale_const, only: &
1415  pi => const_pi
1416  use scale_time, only: &
1417  time_nowdate, &
1418  time_dtsec
1419  use scale_calendar, only: &
1422  implicit none
1423 
1424  real(RP) :: bnd_DENS(KA,IA,JA) ! damping coefficient for DENS (0-1)
1425  real(RP) :: bnd_VELZ(KA,IA,JA) ! damping coefficient for VELZ (0-1)
1426  real(RP) :: bnd_VELX(KA,IA,JA) ! damping coefficient for VELX (0-1)
1427  real(RP) :: bnd_VELY(KA,IA,JA) ! damping coefficient for VELY (0-1)
1428  real(RP) :: bnd_POTT(KA,IA,JA) ! damping coefficient for POTT (0-1)
1429  real(RP) :: bnd_QTRC(KA,IA,JA,BND_QA) ! damping coefficient for QTRC (0-1)
1430 
1431  integer :: run_time_startdate(6)
1432  integer :: run_time_startday
1433  real(DP) :: run_time_startsec
1434  real(DP) :: run_time_startms
1435  integer :: run_time_offset_year
1436  real(DP) :: run_time_nowdaysec
1437 
1438  real(DP) :: boundary_diff_daysec
1439  real(RP) :: boundary_inc_offset
1440  integer :: fillgaps_steps
1441 
1442  real(RP) :: total
1443 
1444  integer :: i, j, k, n, iq
1445  !---------------------------------------------------------------------------
1446 
1447  if ( atmos_boundary_update_dt <= 0.0_dp ) then
1448  log_error("ATMOS_BOUNDARY_set_file",*) 'You need specify ATMOS_BOUNDARY_UPDATE_DT as larger than 0.0'
1449  call prc_abort
1450  endif
1451  update_nstep = nint( atmos_boundary_update_dt / time_dtsec )
1452  if ( abs(update_nstep * time_dtsec - atmos_boundary_update_dt) > 1e-10_dp ) then
1453  log_error("ATMOS_BOUNDARY_set_file",*) 'ATMOS_BOUNDARY_UPDATE_DT is not multiple of DT'
1454  call prc_abort
1455  end if
1456 
1457  !--- recalculate time of the run [no offset]
1458  run_time_startdate(:) = time_nowdate(:)
1459  run_time_startms = 0.0_dp
1460  run_time_offset_year = 0
1461 
1462  call calendar_date2daysec( run_time_startday, & ! [OUT]
1463  run_time_startsec, & ! [OUT]
1464  run_time_startdate(:), & ! [IN]
1465  run_time_startms, & ! [IN]
1466  run_time_offset_year ) ! [IN]
1467 
1468  run_time_nowdaysec = calendar_combine_daysec( run_time_startday, run_time_startsec )
1469 
1470  boundary_diff_daysec = run_time_nowdaysec - boundary_time_initdaysec
1471  boundary_timestep = 1 + int( boundary_diff_daysec / atmos_boundary_update_dt )
1472  boundary_inc_offset = mod( boundary_diff_daysec, atmos_boundary_update_dt )
1473  fillgaps_steps = int( boundary_inc_offset / time_dtsec )
1474 
1475  log_info("ATMOS_BOUNDARY_set_file",*) 'BOUNDARY TIMESTEP NUMBER FOR INIT:', boundary_timestep
1476  log_info("ATMOS_BOUNDARY_set_file",*) 'BOUNDARY OFFSET:', boundary_inc_offset
1477  log_info("ATMOS_BOUNDARY_set_file",*) 'BOUNDARY FILLGAPS STEPS:', fillgaps_steps
1478 
1479 
1480  if ( atmos_boundary_dens_adjust ) then
1481  allocate( offset_time_fact(0:update_nstep) )
1482  total = 0.0_rp
1483  !$omp parallel do reduction(+:total)
1484  do n = 0, update_nstep
1485  offset_time_fact(n) = 1.0_rp - cos( 2.0_rp * pi * ( n - 1 ) / update_nstep )
1486  total = total + offset_time_fact(n)
1487  end do
1488  total = total / update_nstep
1489  !$omp parallel do
1490  do n = 0, update_nstep
1491  offset_time_fact(n) = offset_time_fact(n) / total
1492  end do
1493  end if
1494 
1495  ! read boundary data from input file
1496  call atmos_boundary_update_file( ref_now )
1497 
1498  if ( atmos_boundary_dens_adjust ) then
1499  call calc_mass( ref_now )
1500  end if
1501 
1502  boundary_timestep = boundary_timestep + 1
1503  call atmos_boundary_update_file( ref_new )
1504 
1505  if ( atmos_boundary_dens_adjust ) then
1506  call calc_mass( ref_new )
1507  call set_offset
1508  end if
1509 
1510  ! copy now to old
1511  !$omp parallel do default(none) private(i,j,k,iq) OMP_SCHEDULE_ collapse(2) &
1512  !$omp shared(JA,IA,KS,KE,ATMOS_BOUNDARY_ref_DENS,ref_old,ref_now,ATMOS_BOUNDARY_ref_VELX) &
1513  !$omp shared(ATMOS_BOUNDARY_ref_VELY,ATMOS_BOUNDARY_ref_POTT,BND_QA,ATMOS_BOUNDARY_ref_QTRC)
1514  do j = 1, ja
1515  do i = 1, ia
1516  do k = ks, ke
1517  atmos_boundary_ref_dens(k,i,j,ref_old) = atmos_boundary_ref_dens(k,i,j,ref_now)
1518  atmos_boundary_ref_velx(k,i,j,ref_old) = atmos_boundary_ref_velx(k,i,j,ref_now)
1519  atmos_boundary_ref_vely(k,i,j,ref_old) = atmos_boundary_ref_vely(k,i,j,ref_now)
1520  atmos_boundary_ref_pott(k,i,j,ref_old) = atmos_boundary_ref_pott(k,i,j,ref_now)
1521  do iq = 1, bnd_qa
1522  atmos_boundary_ref_qtrc(k,i,j,iq,ref_old) = atmos_boundary_ref_qtrc(k,i,j,iq,ref_now)
1523  end do
1524  end do
1525  end do
1526  end do
1527 
1528  if ( atmos_boundary_use_velz ) then
1529  !$omp parallel do collapse(2)
1530  do j = 1, ja
1531  do i = 1, ia
1532  do k = ks, ke
1533  atmos_boundary_ref_velz(k,i,j,:) = atmos_boundary_value_velz
1534  end do
1535  end do
1536  end do
1537  end if
1538 
1539  now_step = fillgaps_steps
1540 
1541  ! set boundary data
1542  call set_boundary( atmos_boundary_use_velz )
1543 
1544  return

References bnd_qa, calc_mass(), scale_calendar::calendar_combine_daysec(), scale_calendar::calendar_date2daysec(), scale_comm_cartesc_nest::comm_cartesc_nest_bnd_qa, scale_comm_cartesc_nest::comm_cartesc_nest_recvwait_issue(), scale_const::const_pi, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, scale_comm_cartesc_nest::online_use_velz, scale_comm_cartesc_nest::parent_dtsec, scale_prc::prc_abort(), set_boundary(), set_offset(), scale_time::time_dtsec, and scale_time::time_nowdate.

Referenced by atmos_boundary_driver_set().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_set_online()

subroutine mod_atmos_bnd_driver::atmos_boundary_set_online

Set boundary value for real case experiment [online daughter].

Definition at line 1579 of file mod_atmos_bnd_driver.F90.

1579  use scale_prc, only: &
1580  prc_abort
1581  use scale_const, only: &
1582  pi => const_pi
1583  use scale_time, only: &
1584  time_dtsec, &
1585  time_nstep
1586  use scale_comm_cartesc_nest, only: &
1587  online_use_velz, &
1588  parent_nstep
1589  implicit none
1590 
1591  ! parameters
1592  integer, parameter :: handle = 2
1593 
1594  real(RP) :: total
1595 
1596  ! works
1597  integer :: i, j, k, n, iq
1598  !---------------------------------------------------------------------------
1599 
1600  ! import data from parent domain
1601  boundary_timestep = 1
1602  log_info("ATMOS_BOUNDARY_set_online",*) 'BOUNDARY TIMESTEP NUMBER FOR INIT:', boundary_timestep
1603 
1604  call atmos_boundary_update_online_daughter( ref_now )
1605 
1606  if ( atmos_boundary_dens_adjust ) then
1607  call calc_mass( ref_now )
1608  end if
1609 
1610  boundary_timestep = boundary_timestep + 1
1611  log_info("ATMOS_BOUNDARY_set_online",*) 'BOUNDARY TIMESTEP NUMBER FOR INIT:', boundary_timestep
1612 
1613  call atmos_boundary_update_online_daughter( ref_new )
1614 
1615  if ( atmos_boundary_dens_adjust ) then
1616  call calc_mass( ref_new )
1617  call set_offset
1618  end if
1619 
1620  ! copy now to old
1621  !$omp parallel do collapse(2)
1622  do j = 1, ja
1623  do i = 1, ia
1624  do k = ks, ke
1625  atmos_boundary_ref_dens(k,i,j,ref_old) = atmos_boundary_ref_dens(k,i,j,ref_now)
1626  atmos_boundary_ref_velx(k,i,j,ref_old) = atmos_boundary_ref_velx(k,i,j,ref_now)
1627  atmos_boundary_ref_vely(k,i,j,ref_old) = atmos_boundary_ref_vely(k,i,j,ref_now)
1628  atmos_boundary_ref_pott(k,i,j,ref_old) = atmos_boundary_ref_pott(k,i,j,ref_now)
1629  do iq = 1, bnd_qa
1630  atmos_boundary_ref_qtrc(k,i,j,iq,ref_old) = atmos_boundary_ref_qtrc(k,i,j,iq,ref_now)
1631  end do
1632  end do
1633  end do
1634  end do
1635 
1636  update_nstep = nint( atmos_boundary_update_dt / time_dtsec )
1637  if ( update_nstep * time_dtsec /= atmos_boundary_update_dt ) then
1638  log_error("ATMOS_BOUNDARY_set_online",*) 'DT of the parent is not multiple of the DT'
1639  call prc_abort
1640  end if
1641  if ( update_nstep * parent_nstep(handle) /= time_nstep ) then
1642  log_error("ATMOS_BOUNDARY_set_online",*) 'DURATION must be the same as that of the parent'
1643  call prc_abort
1644  end if
1645 
1646  now_step = 0 ! should be set as zero in initialize process
1647 
1648  if ( atmos_boundary_dens_adjust ) then
1649  allocate( offset_time_fact(update_nstep) )
1650  total = 0.0_rp
1651  !$omp parallel do reduction(+:total)
1652  do n = 0, update_nstep
1653  offset_time_fact(n) = 1.0_rp - cos( 2.0_rp * pi * ( n - 1 ) / update_nstep )
1654  total = total + offset_time_fact(n)
1655  end do
1656  total = total / update_nstep
1657  !$omp parallel do
1658  do n = 0, update_nstep
1659  offset_time_fact(n) = offset_time_fact(n) / total
1660  end do
1661  end if
1662 
1663  ! set boundary data
1664  call set_boundary( online_use_velz )
1665 
1666  return

References bnd_qa, calc_mass(), scale_const::const_pi, scale_atmos_grid_cartesc_index::ia, scale_atmos_grid_cartesc_index::ja, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, scale_atmos_hydrometeor::n_hyd, scale_comm_cartesc_nest::online_use_velz, scale_comm_cartesc_nest::parent_nstep, scale_prc::prc_abort(), mod_atmos_phy_mp_vars::qa_mp, set_boundary(), set_offset(), scale_time::time_dtsec, and scale_time::time_nstep.

Referenced by atmos_boundary_driver_set().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_driver_finalize()

subroutine, public mod_atmos_bnd_driver::atmos_boundary_driver_finalize

Finalize boundary value.

Definition at line 1702 of file mod_atmos_bnd_driver.F90.

1702  use scale_comm_cartesc_nest, only: &
1705  nestqa => comm_cartesc_nest_bnd_qa
1706  use scale_file_cartesc, only: &
1708  implicit none
1709 
1710  ! works
1711  integer :: handle
1712  !---------------------------------------------------------------------------
1713 
1714  if ( do_parent_process ) then !online [parent]
1715  handle = 1
1716  call comm_cartesc_nest_recvwait_issue( handle, nestqa )
1717  endif
1718 
1719  if ( do_daughter_process ) then !online [daughter]
1720  handle = 2
1721  call comm_cartesc_nest_recv_cancel( handle )
1722  endif
1723 
1724  if ( atmos_boundary_fid > 0 ) then
1725  call file_cartesc_close( atmos_boundary_fid )
1726  atmos_boundary_fid = -1
1727  end if
1728 
1729  return

References scale_comm_cartesc_nest::comm_cartesc_nest_bnd_qa, scale_comm_cartesc_nest::comm_cartesc_nest_recv_cancel(), scale_comm_cartesc_nest::comm_cartesc_nest_recvwait_issue(), and scale_file_cartesc::file_cartesc_close().

Referenced by mod_atmos_driver::atmos_driver_finalize().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_driver_update()

subroutine, public mod_atmos_bnd_driver::atmos_boundary_driver_update ( logical, intent(in)  last_step)

Update boundary value with a constant time boundary.

Definition at line 1736 of file mod_atmos_bnd_driver.F90.

1736  use scale_prc, only: &
1737  prc_abort
1738  use scale_comm_cartesc_nest, only: &
1739  online_use_velz, &
1741  implicit none
1742 
1743  logical, intent(in) :: last_step
1744 
1745  integer :: handle
1746  !---------------------------------------------------------------------------
1747 
1748  if ( l_bnd ) then
1749 
1750  ! step boundary
1751  now_step = now_step + 1
1752 
1753  ! update referce vars
1754  if ( last_step ) then
1755  now_step = min( now_step, update_nstep-1 )
1756  else if ( now_step >= update_nstep ) then
1757  now_step = 0
1758  boundary_timestep = boundary_timestep + 1
1759 
1760  call update_ref_index
1761 
1762  if ( do_daughter_process ) then !online [daughter]
1763  call atmos_boundary_update_online_daughter( ref_new )
1764  else
1765  call atmos_boundary_update_file( ref_new )
1766  end if
1767 
1768  if ( atmos_boundary_dens_adjust ) then
1769  call calc_mass( ref_new )
1770  end if
1771 
1772  end if
1773 
1774  call set_boundary( online_use_velz )
1775 
1776  if ( atmos_boundary_dens_adjust ) then
1777  call set_offset
1778  end if
1779 
1780  elseif ( do_parent_process ) then
1781  ! do nothing
1782  else
1783  log_error("ATMOS_BOUNDARY_update",*) '[BUG] invalid path'
1784  call prc_abort
1785  end if
1786 
1787  call history_bnd( atmos_boundary_dens, &
1788  atmos_boundary_velz, &
1789  atmos_boundary_velx, &
1790  atmos_boundary_vely, &
1791  atmos_boundary_pott, &
1792  atmos_boundary_qtrc )
1793 
1794  ! To be enable to do asynchronous communicaton
1795  if ( do_daughter_process ) then !online [daughter]
1796  handle = 2
1797  call comm_cartesc_nest_test( handle )
1798  endif
1799 
1800  return

References atmos_boundary_dens, atmos_boundary_pott, atmos_boundary_qtrc, atmos_boundary_velx, atmos_boundary_vely, atmos_boundary_velz, calc_mass(), scale_comm_cartesc_nest::comm_cartesc_nest_test(), scale_comm_cartesc_nest::online_use_velz, scale_prc::prc_abort(), set_boundary(), set_offset(), and update_ref_index().

Referenced by mod_atmos_driver::atmos_driver_update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ atmos_boundary_driver_send()

subroutine, public mod_atmos_bnd_driver::atmos_boundary_driver_send

Send data to child domain.

Definition at line 1806 of file mod_atmos_bnd_driver.F90.

1806  use scale_comm_cartesc_nest, only: &
1808  use mod_atmos_vars, only: &
1809  dens, &
1810  momz, &
1811  momx, &
1812  momy, &
1813  rhot, &
1814  qtrc, &
1815  qv, &
1816  qe
1817  use mod_atmos_phy_mp_vars, only: &
1818  qs_mp, &
1819  qe_mp
1820  implicit none
1821 
1822  integer :: handle
1823  !---------------------------------------------------------------------------
1824 
1825  if ( do_parent_process ) then !online [parent]
1826  ! should be called every time step
1827  call atmos_boundary_update_online_parent( dens,momz,momx,momy,rhot,qtrc(:,:,:,qs_mp:qe_mp), qv, qe )
1828 
1829  ! To be enable to do asynchronous communicaton
1830  handle = 1
1831  call comm_cartesc_nest_test( handle )
1832  endif
1833 
1834  return

References mod_atmos_phy_mp_driver::atmos_phy_mp_driver_qhyd2qtrc(), bnd_iq, scale_comm_cartesc_nest::comm_cartesc_nest_bnd_qa, scale_comm_cartesc_nest::comm_cartesc_nest_nestdown(), scale_comm_cartesc_nest::comm_cartesc_nest_recvwait_issue(), scale_comm_cartesc_nest::comm_cartesc_nest_test(), scale_comm_cartesc_nest::daughter_ia, scale_comm_cartesc_nest::daughter_ja, scale_comm_cartesc_nest::daughter_ka, dens, scale_file_cartesc::file_cartesc_flush(), scale_atmos_grid_cartesc_index::ia, scale_atmos_grid_cartesc_index::ja, scale_atmos_grid_cartesc_index::ka, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, mod_atmos_vars::momx, mod_atmos_vars::momy, mod_atmos_vars::momz, scale_atmos_hydrometeor::n_hyd, scale_comm_cartesc_nest::online_boundary_diagqhyd, scale_comm_cartesc_nest::parent_ia, scale_comm_cartesc_nest::parent_ja, scale_comm_cartesc_nest::parent_ka, scale_prc::prc_abort(), scale_tracer::qa, mod_atmos_phy_mp_vars::qa_mp, mod_atmos_vars::qe, mod_atmos_phy_mp_vars::qe_mp, mod_atmos_phy_mp_vars::qs_mp, qtrc, mod_atmos_vars::qv, mod_atmos_vars::rhot, and scale_tracer::tracer_name.

Referenced by mod_atmos_driver::atmos_driver_update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_boundary()

subroutine mod_atmos_bnd_driver::set_boundary ( logical, intent(in)  use_velz)

Definition at line 2077 of file mod_atmos_bnd_driver.F90.

2077  use scale_prc_cartesc, only: &
2078  prc_has_w, &
2079  prc_has_e, &
2080  prc_has_s, &
2081  prc_has_n
2082  use mod_atmos_vars, only: &
2083  dens, &
2084  momz, &
2085  momx, &
2086  momy, &
2087  rhot, &
2088  qtrc
2089  implicit none
2090  logical, intent(in) :: use_velz
2091 
2092  real(RP) :: bnd_DENS(KA,IA,JA) ! damping coefficient for DENS (0-1)
2093  real(RP) :: bnd_VELZ(KA,IA,JA) ! damping coefficient for VELZ (0-1)
2094  real(RP) :: bnd_VELX(KA,IA,JA) ! damping coefficient for VELX (0-1)
2095  real(RP) :: bnd_VELY(KA,IA,JA) ! damping coefficient for VELY (0-1)
2096  real(RP) :: bnd_POTT(KA,IA,JA) ! damping coefficient for POTT (0-1)
2097  real(RP) :: bnd_QTRC(KA,IA,JA,BND_QA) ! damping coefficient for QTRC (0-1)
2098 
2099  integer :: i, j, k, iq, iqb
2100 
2101 
2102  ! get boundaryal coefficients
2103  call get_boundary( bnd_dens(:,:,:), & ! [OUT]
2104  bnd_velz(:,:,:), & ! [OUT]
2105  bnd_velx(:,:,:), & ! [OUT]
2106  bnd_vely(:,:,:), & ! [OUT]
2107  bnd_pott(:,:,:), & ! [OUT]
2108  bnd_qtrc(:,:,:,:), & ! [OUT]
2109  now_step, & ! [IN]
2110  update_nstep ) ! [IN]
2111 
2112  ! update boundary vars
2113  !$omp parallel do collapse(2)
2114  do j = 1, ja
2115  do i = 1, ia
2116  do k = ks, ke
2117  atmos_boundary_dens(k,i,j) = bnd_dens(k,i,j)
2118  atmos_boundary_velx(k,i,j) = bnd_velx(k,i,j)
2119  atmos_boundary_vely(k,i,j) = bnd_vely(k,i,j)
2120  atmos_boundary_pott(k,i,j) = bnd_pott(k,i,j)
2121  do iq = 1, bnd_qa
2122  atmos_boundary_qtrc(k,i,j,iq) = bnd_qtrc(k,i,j,iq)
2123  end do
2124  end do
2125  end do
2126  end do
2127  if ( use_velz ) then
2128  !$omp parallel do collapse(2)
2129  do j = 1, ja
2130  do i = 1, ia
2131  do k = ks, ke
2132  atmos_boundary_velz(k,i,j) = bnd_velz(k,i,j)
2133  end do
2134  end do
2135  end do
2136  end if
2137 
2138  ! fill HALO in western region
2139  if ( .NOT. prc_has_w ) then
2140  !$omp parallel do default(none) OMP_SCHEDULE_ collapse(2) &
2141  !$omp shared(JA,JS,IS,KS,KE,QA,DENS,MOMX,RHOT,QTRC) &
2142  !$omp shared(ATMOS_BOUNDARY_DENS,ATMOS_BOUNDARY_VELX) &
2143  !$omp shared(ATMOS_BOUNDARY_POTT,ATMOS_BOUNDARY_QTRC) &
2144  !$omp shared(BND_QA,BND_IQ) &
2145  !$omp private(i,j,k,iq,iqb)
2146  do j = 1, ja
2147  do i = 1, is-1
2148  do k = ks, ke
2149  dens(k,i,j) = atmos_boundary_dens(k,i,j)
2150  momx(k,i,j) = atmos_boundary_velx(k,i,j) &
2151  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i+1,j) ) * 0.5_rp
2152  rhot(k,i,j) = atmos_boundary_pott(k,i,j) * atmos_boundary_dens(k,i,j)
2153  do iq = 1, qa
2154  iqb = bnd_iq(iq)
2155  if ( iqb > 0 ) then
2156  qtrc(k,i,j,iq) = atmos_boundary_qtrc(k,i,j,iqb)
2157  else
2158  qtrc(k,i,j,iq) = qtrc(k,is,j,iq)
2159  end if
2160  end do
2161  end do
2162  end do
2163  end do
2164  !$omp parallel do
2165  do j = 1, ja-1
2166  do i = 1, is-1
2167  do k = ks, ke
2168  momy(k,i,j) = atmos_boundary_vely(k,i,j) &
2169  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i,j+1) ) * 0.5_rp
2170  end do
2171  end do
2172  end do
2173  do i = 1, is-1
2174  do k = ks, ke
2175  momy(k,i,ja) = atmos_boundary_vely(k,i,ja) &
2176  * atmos_boundary_dens(k,i,ja)
2177  end do
2178  end do
2179  if ( use_velz ) then
2180  !$omp parallel do
2181  do j = 1, ja
2182  do i = 1, is-1
2183  do k = ks, ke-1
2184  momz(k,i,j) = atmos_boundary_velz(k,i,j) &
2185  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k+1,i,j) ) * 0.5_rp
2186  end do
2187  end do
2188  end do
2189  else
2190  !$omp parallel do
2191  do j = 1, ja
2192  do i = 1, is-1
2193  do k = ks, ke-1
2194  momz(k,i,j) = momz(k,is,j)
2195  end do
2196  end do
2197  end do
2198  end if
2199  end if
2200 
2201  ! fill HALO in eastern region
2202  if ( .NOT. prc_has_e ) then
2203  !$omp parallel do default(none) OMP_SCHEDULE_ collapse(2) &
2204  !$omp shared(JA,IE,IA,KS,KE,QA) &
2205  !$omp shared(DENS,RHOT,QTRC) &
2206  !$omp shared(ATMOS_BOUNDARY_DENS,ATMOS_BOUNDARY_VELX) &
2207  !$omp shared(ATMOS_BOUNDARY_POTT,ATMOS_BOUNDARY_QTRC) &
2208  !$omp shared(BND_QA,BND_IQ) &
2209  !$omp private(i,j,k,iq,iqb)
2210  do j = 1, ja
2211  do i = ie+1, ia
2212  do k = ks, ke
2213  dens(k,i,j) = atmos_boundary_dens(k,i,j)
2214  rhot(k,i,j) = atmos_boundary_pott(k,i,j) * atmos_boundary_dens(k,i,j)
2215  do iq = 1, qa
2216  iqb = bnd_iq(iq)
2217  if ( iqb > 0 ) then
2218  qtrc(k,i,j,iq) = atmos_boundary_qtrc(k,i,j,iqb)
2219  else
2220  qtrc(k,i,j,iq) = qtrc(k,ie,j,iq)
2221  end if
2222  end do
2223  end do
2224  end do
2225  end do
2226  !$omp parallel do
2227  do j = 1, ja
2228  do i = ie, ia-1
2229  do k = ks, ke
2230  momx(k,i,j) = atmos_boundary_velx(k,i,j) &
2231  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i+1,j) ) * 0.5_rp
2232  end do
2233  end do
2234  end do
2235  !$omp parallel do
2236  do j = 1, ja
2237  do k = ks, ke
2238  momx(k,ia,j) = atmos_boundary_velx(k,ia,j) * atmos_boundary_dens(k,ia,j)
2239  end do
2240  end do
2241  !$omp parallel do
2242  do j = 1, ja-1
2243  do i = ie+1, ia
2244  do k = ks, ke
2245  momy(k,i,j) = atmos_boundary_vely(k,i,j) &
2246  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i,j+1) ) * 0.5_rp
2247  end do
2248  end do
2249  end do
2250  do i = ie+1, ia
2251  do k = ks, ke
2252  momy(k,i,ja) = atmos_boundary_vely(k,i,ja) &
2253  * atmos_boundary_dens(k,i,ja)
2254  end do
2255  end do
2256  if ( use_velz ) then
2257  !$omp parallel do
2258  do j = 1, ja
2259  do i = ie+1, ia
2260  do k = ks, ke-1
2261  momz(k,i,j) = atmos_boundary_velz(k,i,j) &
2262  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k+1,i,j) ) * 0.5_rp
2263  end do
2264  end do
2265  end do
2266  else
2267  !$omp parallel do
2268  do j = 1, ja
2269  do i = ie+1, ia
2270  do k = ks, ke-1
2271  momz(k,i,j) = momz(k,ie,j)
2272  end do
2273  end do
2274  end do
2275  end if
2276  end if
2277 
2278  ! fill HALO in southern region
2279  if ( .NOT. prc_has_s ) then
2280  do j = 1, js-1
2281  do i = 1, ia
2282  do k = ks, ke
2283  dens(k,i,j) = atmos_boundary_dens(k,i,j)
2284  momy(k,i,j) = atmos_boundary_vely(k,i,j) &
2285  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i,j+1) ) * 0.5_rp
2286  rhot(k,i,j) = atmos_boundary_pott(k,i,j) * atmos_boundary_dens(k,i,j)
2287  do iq = 1, qa
2288  iqb = bnd_iq(iq)
2289  if ( iqb > 0 ) then
2290  qtrc(k,i,j,iq) = atmos_boundary_qtrc(k,i,j,iqb)
2291  else
2292  qtrc(k,i,j,iq) = qtrc(k,i,js,iq)
2293  end if
2294  end do
2295  end do
2296  end do
2297  end do
2298  do j = 1, js-1
2299  do i = 1, ia-1
2300  do k = ks, ke
2301  momx(k,i,j) = atmos_boundary_velx(k,i,j) &
2302  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i+1,j) ) * 0.5_rp
2303  end do
2304  end do
2305  end do
2306  do j = 1, js-1
2307  do k = ks, ke
2308  momx(k,ia,j) = atmos_boundary_velx(k,ia,j) &
2309  * atmos_boundary_dens(k,ia,j)
2310  end do
2311  end do
2312  if ( use_velz ) then
2313  do j = 1, js-1
2314  do i = 1, ia
2315  do k = ks, ke-1
2316  momz(k,i,j) = atmos_boundary_velz(k,i,j) &
2317  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k+1,i,j) ) * 0.5_rp
2318  end do
2319  end do
2320  end do
2321  else
2322  do j = 1, js-1
2323  do i = 1, ia
2324  do k = ks, ke-1
2325  momz(k,i,j) = momz(k,i,js)
2326  end do
2327  end do
2328  end do
2329  end if
2330  end if
2331 
2332  ! fill HALO in northern region
2333  if ( .NOT. prc_has_n ) then
2334  do j = je+1, ja
2335  do i = 1, ia
2336  do k = ks, ke
2337  dens(k,i,j) = atmos_boundary_dens(k,i,j)
2338  rhot(k,i,j) = atmos_boundary_pott(k,i,j) * atmos_boundary_dens(k,i,j)
2339  do iq = 1, qa
2340  iqb = bnd_iq(iq)
2341  if ( iqb > 0 ) then
2342  qtrc(k,i,j,iq) = atmos_boundary_qtrc(k,i,j,iqb)
2343  else
2344  qtrc(k,i,j,iq) = qtrc(k,i,je,iq)
2345  end if
2346  end do
2347  end do
2348  end do
2349  end do
2350  do j = je, ja-1
2351  do i = 1, ia
2352  do k = ks, ke
2353  momy(k,i,j) = atmos_boundary_vely(k,i,j) &
2354  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i,j+1) ) * 0.5_rp
2355  end do
2356  end do
2357  end do
2358  do i = 1, ia
2359  do k = ks, ke
2360  momy(k,i,ja) = atmos_boundary_vely(k,i,ja) * atmos_boundary_dens(k,i,ja)
2361  end do
2362  end do
2363  do j = je+1, ja
2364  do i = 1, ia-1
2365  do k = ks, ke
2366  momx(k,i,j) = atmos_boundary_velx(k,i,j) &
2367  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k,i+1,j) ) * 0.5_rp
2368  end do
2369  end do
2370  end do
2371  do j = je+1, ja
2372  do k = ks, ke
2373  momx(k,ia,j) = atmos_boundary_velx(k,ia,j) &
2374  * atmos_boundary_dens(k,ia,j)
2375  end do
2376  end do
2377  if ( use_velz ) then
2378  do j = je+1, ja
2379  do i = 1, ia
2380  do k = ks, ke-1
2381  momz(k,i,j) = atmos_boundary_velz(k,i,j) &
2382  * ( atmos_boundary_dens(k,i,j) + atmos_boundary_dens(k+1,i,j) ) * 0.5_rp
2383  end do
2384  end do
2385  end do
2386  else
2387  do j = je+1, ja
2388  do i = 1, ia
2389  do k = ks, ke-1
2390  momz(k,i,j) = momz(k,i,je)
2391  end do
2392  end do
2393  end do
2394  end if
2395  end if
2396 
2397  return

References atmos_boundary_dens, atmos_boundary_pott, atmos_boundary_qtrc, atmos_boundary_velx, atmos_boundary_vely, atmos_boundary_velz, bnd_iq, bnd_qa, dens, scale_atmos_grid_cartesc_index::ia, scale_atmos_grid_cartesc_index::ie, scale_atmos_grid_cartesc_index::is, scale_atmos_grid_cartesc_index::ja, scale_atmos_grid_cartesc_index::je, scale_atmos_grid_cartesc_index::js, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, mod_atmos_vars::momx, mod_atmos_vars::momy, mod_atmos_vars::momz, scale_prc_cartesc::prc_has_e, scale_prc_cartesc::prc_has_n, scale_prc_cartesc::prc_has_s, scale_prc_cartesc::prc_has_w, scale_tracer::qa, qtrc, real, mod_atmos_vars::rhot, and scale_time::time_dtsec.

Referenced by atmos_boundary_driver_update(), atmos_boundary_set_file(), and atmos_boundary_set_online().

Here is the caller graph for this function:

◆ update_ref_index()

subroutine mod_atmos_bnd_driver::update_ref_index

Update indices of array of boundary references.

Definition at line 2716 of file mod_atmos_bnd_driver.F90.

2716  implicit none
2717 
2718  ! works
2719  integer :: ref_tmp
2720  !---------------------------------------------------------------------------
2721 
2722  ref_tmp = ref_old
2723  ref_old = ref_now
2724  ref_now = ref_new
2725  ref_new = ref_tmp
2726 
2727  return

References bnd_iq, scale_tracer::qa, mod_atmos_phy_mp_vars::qs_mp, and scale_tracer::tracer_name.

Referenced by atmos_boundary_driver_update().

Here is the caller graph for this function:

◆ calc_mass()

subroutine mod_atmos_bnd_driver::calc_mass ( integer, intent(in)  ref)

Definition at line 2768 of file mod_atmos_bnd_driver.F90.

2768  use scale_prc_cartesc, only: &
2769  prc_has_w, &
2770  prc_has_e, &
2771  prc_has_s, &
2772  prc_has_n
2773  use scale_statistics, only: &
2774  statistics_total
2775  use scale_atmos_grid_cartesc_real, only: &
2776  vol => atmos_grid_cartesc_real_vol, &
2777  totvol => atmos_grid_cartesc_real_totvol, &
2778  areazxv_y => atmos_grid_cartesc_real_areazxv_y, &
2779  totareazuy_x => atmos_grid_cartesc_real_totareazuy_x, &
2780  totareazxv_y => atmos_grid_cartesc_real_totareazxv_y
2781  use scale_atmos_refstate, only: &
2782  dens_ref => atmos_refstate_dens
2783  use mod_atmos_vars, only: &
2784  dens
2785  implicit none
2786  integer, intent(in) :: ref
2787 
2788  real(DP) :: masstot, masstot_current
2789  real(DP) :: massflx
2790  real(DP) :: offset_band, offset_bias
2791  real(DP) :: ref_tot
2792  real(DP) :: flx_w, flx_e, flx_s, flx_n
2793  real(DP) :: ref_w, ref_e, ref_s, ref_n
2794 
2795  real(RP), target :: work_x(KA,JA), work_y(KA,IA)
2796  real(RP), pointer :: ptr(:,:)
2797 
2798  integer :: k, i, j
2799 
2800  ! total mass
2801  call statistics_total( ka, ks, ke, ia, is, ie, ja, js, je, &
2802  atmos_boundary_ref_dens(:,:,:,ref), & ! (in)
2803  "DENS_bnd", & ! (in)
2804  vol(:,:,:), totvol, & ! (in)
2805  log_suppress = .true., global = .true., & ! (in)
2806  sum = masstot ) ! (out)
2807 
2808 !!$ call STATISTICS_total( KA, KS, KE, IA, IS, IE, JA, JS, JE, &
2809 !!$ DENS(:,:,:), "DENS_bnd_update", & ! (in)
2810 !!$ VOL(:,:,:), TOTVOL, & ! (in)
2811 !!$ log_suppress = .true., global = .true., & ! (in)
2812 !!$ sum = masstot_current ) ! (out)
2813 
2814 
2815  ! West
2816  if ( .NOT. prc_has_w ) then
2817  !$omp parallel do
2818  do j = js, je
2819  do k = ks, ke
2820  work_x(k,j) = atmos_boundary_ref_velx(k,is-1,j,ref) &
2821  * ( atmos_boundary_ref_dens(k,is-1,j,ref) + atmos_boundary_ref_dens(k,is,j,ref) ) * 0.5_rp
2822  end do
2823  end do
2824  ptr => work_x
2825  else
2826  ptr => zero_x
2827  end if
2828  call statistics_total( ka, ks, ke, ja, js, je, &
2829  ptr(:,:), "MFLUX_bnd_w", & ! (in)
2830  areazuy_w(:,:), totareazuy_x(is-1), & ! (in)
2831  log_suppress = .true., global = .true., & ! (in)
2832  sum = flx_w ) ! (out)
2833  if ( .NOT. prc_has_w ) then
2834  !$omp parallel do
2835  do j = js, je
2836  do k = ks, ke
2837  work_x(k,j) = dens_ref(k,is,j)
2838  end do
2839  end do
2840  end if
2841  call statistics_total( ka, ks, ke, ja, js, je, &
2842  ptr(:,:), "DENS_ref_w", & ! (in)
2843  areazuy_w(:,:), totareazuy_x(is-1), & ! (in)
2844  log_suppress = .true., global = .true., & ! (in)
2845  sum = ref_w ) ! (out)
2846 
2847  ! East
2848  if ( .NOT. prc_has_e ) then
2849  !$omp parallel do
2850  do j = js, je
2851  do k = ks, ke
2852  work_x(k,j) = atmos_boundary_ref_velx(k,ie,j,ref) &
2853  * ( atmos_boundary_ref_dens(k,ie,j,ref) + atmos_boundary_ref_dens(k,ie+1,j,ref) ) * 0.5_rp
2854  end do
2855  end do
2856  ptr => work_x
2857  else
2858  ptr => zero_x
2859  end if
2860  call statistics_total( ka, ks, ke, ja, js, je, &
2861  ptr(:,:), "MFLUX_bnd_e", & ! (in)
2862  areazuy_e(:,:), totareazuy_x(ie), & ! (in)
2863  log_suppress = .true., global = .true., & ! (in)
2864  sum = flx_e ) ! (out)
2865  if ( .NOT. prc_has_e ) then
2866  !$omp parallel do
2867  do j = js, je
2868  do k = ks, ke
2869  work_x(k,j) = dens_ref(k,ie,j)
2870  end do
2871  end do
2872  end if
2873  call statistics_total( ka, ks, ke, ja, js, je, &
2874  ptr(:,:), "DENS_ref_e", & ! (in)
2875  areazuy_e(:,:), totareazuy_x(ie), & ! (in)
2876  log_suppress = .true., global = .true., & ! (in)
2877  sum = ref_e ) ! (out)
2878 
2879  ! South
2880  if ( .NOT. prc_has_s ) then
2881  !$omp parallel do
2882  do i = is, ie
2883  do k = ks, ke
2884  work_y(k,i) = atmos_boundary_ref_vely(k,i,js-1,ref) &
2885  * ( atmos_boundary_ref_dens(k,i,js-1,ref) + atmos_boundary_ref_dens(k,i,js,ref) ) * 0.5_rp
2886  end do
2887  end do
2888  ptr => work_y
2889  else
2890  ptr => zero_y
2891  end if
2892  call statistics_total( ka, ks, ke, ia, is, ie, &
2893  ptr(:,:), "MFLUX_bnd_s", & ! (in)
2894  areazxv_y(:,:,js-1), totareazxv_y(js-1), & ! (in)
2895  log_suppress = .true., global = .true., & ! (in)
2896  sum = flx_s ) ! (out)
2897  if ( .NOT. prc_has_s ) then
2898  !$omp parallel do
2899  do i = is, ie
2900  do k = ks, ke
2901  work_y(k,i) = dens_ref(k,i,js)
2902  end do
2903  end do
2904  end if
2905  call statistics_total( ka, ks, ke, ia, is, ie, &
2906  ptr(:,:), "DENS_ref_s", & ! (in)
2907  areazxv_y(:,:,js-1), totareazxv_y(js-1), & ! (in)
2908  log_suppress = .true., global = .true., & ! (in)
2909  sum = ref_s ) ! (out)
2910 
2911  ! North
2912  if ( .NOT. prc_has_n ) then
2913  !$omp parallel do
2914  do i = is, ie
2915  do k = ks, ke
2916  work_y(k,i) = atmos_boundary_ref_vely(k,i,je,ref) &
2917  * ( atmos_boundary_ref_dens(k,i,je,ref) + atmos_boundary_ref_dens(k,i,je+1,ref) ) * 0.5_rp
2918  end do
2919  end do
2920  ptr => work_y
2921  else
2922  ptr => zero_y
2923  end if
2924  call statistics_total( ka, ks, ke, ia, is, ie, &
2925  ptr(:,:), "MFLX_bnd_n", & ! (in)
2926  areazxv_y(:,:,je), totareazxv_y(je), & ! (in)
2927  log_suppress = .true., global = .true., & ! (in)
2928  sum = flx_n ) ! (out)
2929  if ( .NOT. prc_has_n ) then
2930  !$omp parallel do
2931  do i = is, ie
2932  do k = ks, ke
2933  work_y(k,i) = dens_ref(k,i,je)
2934  end do
2935  end do
2936  end if
2937  call statistics_total( ka, ks, ke, ia, is, ie, &
2938  ptr(:,:), "DENS_ref_n", & ! (in)
2939  areazxv_y(:,:,je), totareazxv_y(je), & ! (in)
2940  log_suppress = .true., global = .true., & ! (in)
2941  sum = ref_n ) ! (out)
2942 
2943  massflx = flx_w - flx_e + flx_s - flx_n
2944 
2945  offset_band = ( masstot - masstot_now ) / atmos_boundary_update_dt &
2946  - ( massflx + massflx_now ) * 0.5_dp
2947 ! offset_bias = ( MASSTOT_now - masstot_current ) / ATMOS_BOUNDARY_UPDATE_DT
2948 
2949  log_info("ATMOS_BOUNDARY_calc_mass",*) "Offset_band is: ", offset_band, "(", masstot, masstot_now, massflx, massflx_now, ")"
2950 
2951  ref_tot = ref_w + ref_e + ref_s + ref_n
2952  offset_band = offset_band / ref_tot
2953 ! offset_bias = offset_bias / ref_tot
2954 
2955  log_info_cont(*) " per dens ", offset_band
2956 
2957  ! density of the reference state is used as weight
2958  if ( .not. prc_has_w ) then
2959  !$omp parallel do
2960  do j = js, je
2961  do k = ks, ke
2962  mflux_offset_x(k,j,1,1) = offset_band * dens_ref(k,is,j)
2963 ! MFLUX_OFFSET_X(k,j,1,2) = offset_bias * DENS_ref(k,IS,j)
2964  end do
2965  end do
2966  end if
2967  if ( .not. prc_has_e ) then
2968  !$omp parallel do
2969  do j = js, je
2970  do k = ks, ke
2971  mflux_offset_x(k,j,2,1) = - offset_band * dens_ref(k,ie,j)
2972 ! MFLUX_OFFSET_X(k,j,2,2) = - offset_bias * DENS_ref(k,IE,j)
2973  end do
2974  end do
2975  end if
2976  if ( .not. prc_has_s ) then
2977  !$omp parallel do
2978  do i = is, ie
2979  do k = ks, ke
2980  mflux_offset_y(k,i,1,1) = offset_band * dens_ref(k,i,js)
2981 ! MFLUX_OFFSET_Y(k,i,1,2) = offset_bias * DENS_ref(k,i,JS)
2982  end do
2983  end do
2984  end if
2985  if ( .not. prc_has_n ) then
2986  !$omp parallel do
2987  do i = is, ie
2988  do k = ks, ke
2989  mflux_offset_y(k,i,2,1) = - offset_band * dens_ref(k,i,je)
2990 ! MFLUX_OFFSET_Y(k,i,2,2) = - offset_bias * DENS_ref(k,i,JE)
2991  end do
2992  end do
2993  end if
2994 
2995  masstot_now = masstot
2996  massflx_now = massflx
2997 
2998  return

References scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_areazxv_y, scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totareazuy_x, scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totareazxv_y, scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totvol, scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_vol, scale_atmos_refstate::atmos_refstate_dens, dens, scale_atmos_grid_cartesc_index::ie, scale_atmos_grid_cartesc_index::is, scale_atmos_grid_cartesc_index::je, scale_atmos_grid_cartesc_index::js, scale_atmos_grid_cartesc_index::ke, scale_atmos_grid_cartesc_index::ks, scale_prc_cartesc::prc_has_e, scale_prc_cartesc::prc_has_n, scale_prc_cartesc::prc_has_s, and scale_prc_cartesc::prc_has_w.

Referenced by atmos_boundary_driver_update(), atmos_boundary_set_file(), and atmos_boundary_set_online().

Here is the caller graph for this function:

◆ set_offset()

subroutine mod_atmos_bnd_driver::set_offset

Definition at line 3003 of file mod_atmos_bnd_driver.F90.

3003  integer :: k, i, j, n
3004 
3005  !$omp parallel do
3006  do j = js, je
3007  do k = ks, ke
3008  do n = 1, 2
3009  atmos_boundary_mflux_offset_x(k,j,n) = mflux_offset_x(k,j,n,1) * offset_time_fact(now_step) !&
3010 ! + MFLUX_OFFSET_X(k,j,n,2)
3011  end do
3012  end do
3013  end do
3014 
3015  !$omp parallel do
3016  do i = is, ie
3017  do k = ks, ke
3018  do n = 1, 2
3019  atmos_boundary_mflux_offset_y(k,i,n) = mflux_offset_y(k,i,n,1) * offset_time_fact(now_step) !&
3020 ! + MFLUX_OFFSET_Y(k,i,n,2)
3021  end do
3022  end do
3023  end do
3024 
3025  return

References atmos_boundary_mflux_offset_x, atmos_boundary_mflux_offset_y, scale_atmos_grid_cartesc_index::ie, scale_atmos_grid_cartesc_index::is, scale_atmos_grid_cartesc_index::je, scale_atmos_grid_cartesc_index::js, scale_atmos_grid_cartesc_index::ke, and scale_atmos_grid_cartesc_index::ks.

Referenced by atmos_boundary_driver_update(), atmos_boundary_set_file(), and atmos_boundary_set_online().

Here is the caller graph for this function:

Variable Documentation

◆ bnd_qa

integer, public mod_atmos_bnd_driver::bnd_qa

◆ of

integer allocatable public mod_atmos_bnd_driver::of

Definition at line 42 of file mod_atmos_bnd_driver.F90.

◆ tracer

integer allocatable public mod_atmos_bnd_driver::tracer

Definition at line 42 of file mod_atmos_bnd_driver.F90.

◆ at

integer, public mod_atmos_bnd_driver::at

Definition at line 42 of file mod_atmos_bnd_driver.F90.

◆ boundary

integer, public mod_atmos_bnd_driver::boundary

Definition at line 42 of file mod_atmos_bnd_driver.F90.

◆ bnd_iq

integer, dimension(:), allocatable, public mod_atmos_bnd_driver::bnd_iq

◆ index

integer, allocatable, public mod_atmos_bnd_driver::index

Definition at line 43 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_dens

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_dens

Definition at line 45 of file mod_atmos_bnd_driver.F90.

45  real(RP), public, allocatable :: ATMOS_BOUNDARY_DENS(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ reference

real(rp), allocatable, public mod_atmos_bnd_driver::reference

Definition at line 45 of file mod_atmos_bnd_driver.F90.

◆ dens

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::dens

◆ atmos_boundary_velz

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_velz

Definition at line 46 of file mod_atmos_bnd_driver.F90.

46  real(RP), public, allocatable :: ATMOS_BOUNDARY_VELZ(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ velz

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::velz

Definition at line 46 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_velx

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_velx

Definition at line 47 of file mod_atmos_bnd_driver.F90.

47  real(RP), public, allocatable :: ATMOS_BOUNDARY_VELX(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ velx

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::velx

Definition at line 47 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_vely

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_vely

Definition at line 48 of file mod_atmos_bnd_driver.F90.

48  real(RP), public, allocatable :: ATMOS_BOUNDARY_VELY(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ vely

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::vely

Definition at line 48 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_pott

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_pott

Definition at line 49 of file mod_atmos_bnd_driver.F90.

49  real(RP), public, allocatable :: ATMOS_BOUNDARY_POTT(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ pott

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::pott

Definition at line 49 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_qtrc

real(rp), dimension(:,:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_qtrc

Definition at line 50 of file mod_atmos_bnd_driver.F90.

50  real(RP), public, allocatable :: ATMOS_BOUNDARY_QTRC(:,:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), atmos_boundary_driver_update(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_boundary().

◆ qtrc

real(rp), dimension (0-1), allocatable, public mod_atmos_bnd_driver::qtrc

◆ atmos_boundary_alpha_dens

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_dens

Definition at line 52 of file mod_atmos_bnd_driver.F90.

52  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_DENS(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ damping

real(rp), allocatable, public mod_atmos_bnd_driver::damping

Definition at line 52 of file mod_atmos_bnd_driver.F90.

◆ coefficient

real(rp), allocatable, public mod_atmos_bnd_driver::coefficient

Definition at line 52 of file mod_atmos_bnd_driver.F90.

◆ for

logical allocatable public mod_atmos_bnd_driver::for

Definition at line 52 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_alpha_velz

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_velz

Definition at line 53 of file mod_atmos_bnd_driver.F90.

53  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_VELZ(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ atmos_boundary_alpha_velx

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_velx

Definition at line 54 of file mod_atmos_bnd_driver.F90.

54  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_VELX(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ atmos_boundary_alpha_vely

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_vely

Definition at line 55 of file mod_atmos_bnd_driver.F90.

55  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_VELY(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ atmos_boundary_alpha_pott

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_pott

Definition at line 56 of file mod_atmos_bnd_driver.F90.

56  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_POTT(:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ atmos_boundary_alpha_qtrc

real(rp), dimension(:,:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_alpha_qtrc

Definition at line 57 of file mod_atmos_bnd_driver.F90.

57  real(RP), public, allocatable :: ATMOS_BOUNDARY_alpha_QTRC(:,:,:,:)

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ atmos_boundary_mflux_offset_x

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_mflux_offset_x

Definition at line 59 of file mod_atmos_bnd_driver.F90.

59  real(RP), public, allocatable :: ATMOS_BOUNDARY_MFLUX_OFFSET_X(:,:,:)

Referenced by atmos_boundary_driver_setup(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_offset().

◆ mass

real(rp), allocatable, public mod_atmos_bnd_driver::mass

Definition at line 59 of file mod_atmos_bnd_driver.F90.

◆ flux

real(rp), allocatable, public mod_atmos_bnd_driver::flux

Definition at line 59 of file mod_atmos_bnd_driver.F90.

◆ offset

real(rp), dimension (south, north), allocatable, public mod_atmos_bnd_driver::offset

Definition at line 59 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_mflux_offset_y

real(rp), dimension(:,:,:), allocatable, public mod_atmos_bnd_driver::atmos_boundary_mflux_offset_y

Definition at line 60 of file mod_atmos_bnd_driver.F90.

60  real(RP), public, allocatable :: ATMOS_BOUNDARY_MFLUX_OFFSET_Y(:,:,:)

Referenced by atmos_boundary_driver_setup(), mod_atmos_dyn_driver::atmos_dyn_driver(), and set_offset().

◆ atmos_boundary_smoother_fact

real(rp), public mod_atmos_bnd_driver::atmos_boundary_smoother_fact = 0.2_RP

Definition at line 62 of file mod_atmos_bnd_driver.F90.

62  real(RP), public :: ATMOS_BOUNDARY_SMOOTHER_FACT = 0.2_rp

Referenced by atmos_boundary_driver_setup(), and mod_atmos_dyn_driver::atmos_dyn_driver().

◆ fact

real(rp), public mod_atmos_bnd_driver::fact

Definition at line 62 of file mod_atmos_bnd_driver.F90.

◆ smoother

real(rp), public mod_atmos_bnd_driver::smoother

Definition at line 62 of file mod_atmos_bnd_driver.F90.

◆ to

real(rp), public mod_atmos_bnd_driver::to

Definition at line 62 of file mod_atmos_bnd_driver.F90.

◆ atmos_boundary_update_flag

logical, public mod_atmos_bnd_driver::atmos_boundary_update_flag = .false.

Definition at line 64 of file mod_atmos_bnd_driver.F90.

64  logical, public :: ATMOS_BOUNDARY_UPDATE_FLAG = .false.

Referenced by atmos_boundary_driver_set(), atmos_boundary_driver_setup(), mod_atmos_driver::atmos_driver_finalize(), and mod_atmos_driver::atmos_driver_update().

◆ switch

logical, public mod_atmos_bnd_driver::switch

Definition at line 64 of file mod_atmos_bnd_driver.F90.

◆ real

mod_atmos_bnd_driver::real

Definition at line 64 of file mod_atmos_bnd_driver.F90.

Referenced by atmos_boundary_driver_setup(), and set_boundary().

◆ case

logical, public mod_atmos_bnd_driver::case

Definition at line 64 of file mod_atmos_bnd_driver.F90.

scale_comm_cartesc_nest::comm_cartesc_nest_recv_cancel
subroutine, public comm_cartesc_nest_recv_cancel(HANDLE)
Sub-command for data transfer from parent to daughter: nestdown.
Definition: scale_comm_cartesC_nest.F90:2407
scale_statistics
module Statistics
Definition: scale_statistics.F90:11
mod_atmos_phy_mp_vars
module Atmosphere / Physics Cloud Microphysics
Definition: mod_atmos_phy_mp_vars.F90:12
mod_atmos_vars::qe
real(rp), dimension(:,:,:,:), allocatable, target, public qe
Definition: mod_atmos_vars.F90:104
scale_prc::prc_abort
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:342
scale_prc_cartesc::prc_has_s
logical, public prc_has_s
Definition: scale_prc_cartesC.F90:50
scale_calendar::calendar_combine_daysec
real(dp) function, public calendar_combine_daysec(absday, abssec)
Combine day and second.
Definition: scale_calendar.F90:405
scale_atmos_refstate::atmos_refstate_dens
real(rp), dimension(:,:,:), allocatable, public atmos_refstate_dens
refernce density [kg/m3]
Definition: scale_atmos_refstate.F90:40
mod_atmos_phy_mp_vars::qs_mp
integer, public qs_mp
Definition: mod_atmos_phy_mp_vars.F90:78
scale_comm_cartesc_nest
module Communication CartesianC nesting
Definition: scale_comm_cartesC_nest.F90:12
scale_atmos_hydrometeor
module atmosphere / hydrometeor
Definition: scale_atmos_hydrometeor.F90:12
scale_atmos_refstate
module atmosphere / reference state
Definition: scale_atmos_refstate.F90:12
scale_atmos_hydrometeor::atmos_hydrometeor_dry
logical, public atmos_hydrometeor_dry
Definition: scale_atmos_hydrometeor.F90:97
scale_calendar
module CALENDAR
Definition: scale_calendar.F90:13
mod_atmos_vars::rhot
real(rp), dimension(:,:,:), allocatable, target, public rhot
Definition: mod_atmos_vars.F90:79
mod_atmos_phy_ch_vars::qs_ch
integer, public qs_ch
Definition: mod_atmos_phy_ch_vars.F90:61
scale_atmos_grid_cartesc_real
module Atmosphere GRID CartesC Real(real space)
Definition: scale_atmos_grid_cartesC_real.F90:11
mod_atmos_vars::qtrc
real(rp), dimension(:,:,:,:), allocatable, target, public qtrc
Definition: mod_atmos_vars.F90:80
scale_file
module file
Definition: scale_file.F90:15
scale_prc_cartesc::prc_has_n
logical, public prc_has_n
Definition: scale_prc_cartesC.F90:48
scale_prc_cartesc::prc_has_e
logical, public prc_has_e
Definition: scale_prc_cartesC.F90:49
scale_prc
module PROCESS
Definition: scale_prc.F90:11
scale_const::const_pi
real(rp), public const_pi
pi
Definition: scale_const.F90:31
scale_comm_cartesc_nest::online_iam_parent
logical, public online_iam_parent
a flag to say "I am a parent"
Definition: scale_comm_cartesC_nest.F90:100
mod_atmos_vars::dens
real(rp), dimension(:,:,:), allocatable, target, public dens
Definition: mod_atmos_vars.F90:75
scale_comm_cartesc_nest::online_boundary_use_qhyd
logical, public online_boundary_use_qhyd
Definition: scale_comm_cartesC_nest.F90:105
scale_const
module CONSTANT
Definition: scale_const.F90:11
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_vol
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_vol
control volume (zxy) [m3]
Definition: scale_atmos_grid_cartesC_real.F90:83
mod_atmos_vars::momz
real(rp), dimension(:,:,:), allocatable, target, public momz
Definition: mod_atmos_vars.F90:76
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_areazuy_x
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_areazuy_x
virtical area (zuy, normal x) [m2]
Definition: scale_atmos_grid_cartesC_real.F90:66
scale_file_cartesc::file_cartesc_close
subroutine, public file_cartesc_close(fid)
Close a netCDF file.
Definition: scale_file_cartesC.F90:1023
scale_prc_cartesc
module process / cartesC
Definition: scale_prc_cartesC.F90:11
scale_calendar::calendar_date2daysec
subroutine, public calendar_date2daysec(absday, abssec, ymdhms, subsec, offset_year)
Convert from gregorian date to absolute day/second.
Definition: scale_calendar.F90:159
mod_atmos_phy_ch_vars
module Atmosphere / Physics Chemistry
Definition: mod_atmos_phy_ch_vars.F90:12
mod_atmos_vars::momx
real(rp), dimension(:,:,:), allocatable, target, public momx
Definition: mod_atmos_vars.F90:77
scale_comm_cartesc_nest::online_iam_daughter
logical, public online_iam_daughter
a flag to say "I am a daughter"
Definition: scale_comm_cartesC_nest.F90:101
mod_atmos_vars::momy
real(rp), dimension(:,:,:), allocatable, target, public momy
Definition: mod_atmos_vars.F90:78
scale_time
module TIME
Definition: scale_time.F90:11
mod_atmos_vars::qv
real(rp), dimension(:,:,:), allocatable, pointer, target, public qv
Definition: mod_atmos_vars.F90:96
scale_comm_cartesc_nest::parent_nstep
integer, dimension(2), public parent_nstep
parent step [number]
Definition: scale_comm_cartesC_nest.F90:63
scale_atmos_hydrometeor::i_qv
integer, public i_qv
Definition: scale_atmos_hydrometeor.F90:77
scale_file::file_aggregate
logical, public file_aggregate
Definition: scale_file.F90:182
scale_comm_cartesc_nest::online_use_velz
logical, public online_use_velz
Definition: scale_comm_cartesC_nest.F90:103
scale_time::time_dtsec
real(dp), public time_dtsec
time interval of model [sec]
Definition: scale_time.F90:33
scale_comm_cartesc_nest::use_nesting
logical, public use_nesting
Definition: scale_comm_cartesC_nest.F90:98
mod_atmos_vars
module ATMOSPHERIC Variables
Definition: mod_atmos_vars.F90:12
scale_time::time_nowdate
integer, dimension(6), public time_nowdate
current time [YYYY MM DD HH MM SS]
Definition: scale_time.F90:66
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totareazuy_x
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_real_totareazuy_x
total area (zuy, normal x) [m2]
Definition: scale_atmos_grid_cartesC_real.F90:80
scale_comm_cartesc_nest::online_boundary_diagqhyd
logical, public online_boundary_diagqhyd
Definition: scale_comm_cartesC_nest.F90:106
mod_atmos_phy_mp_vars::qe_mp
integer, public qe_mp
Definition: mod_atmos_phy_mp_vars.F90:79
mod_atmos_phy_ch_vars::qe_ch
integer, public qe_ch
Definition: mod_atmos_phy_ch_vars.F90:62
scale_time::time_nstep
integer, public time_nstep
total steps [number]
Definition: scale_time.F90:72
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totvol
real(rp), public atmos_grid_cartesc_real_totvol
total volume (zxy, local) [m3]
Definition: scale_atmos_grid_cartesC_real.F90:87
scale_const::const_undef
real(rp), public const_undef
Definition: scale_const.F90:41
scale_comm_cartesc_nest::comm_cartesc_nest_test
subroutine, public comm_cartesc_nest_test(HANDLE)
[check communication status] Inter-communication
Definition: scale_comm_cartesC_nest.F90:2813
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_areazxv_y
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_areazxv_y
virtical area (zxv, normal y) [m2]
Definition: scale_atmos_grid_cartesC_real.F90:67
scale_prc_cartesc::prc_has_w
logical, public prc_has_w
Definition: scale_prc_cartesC.F90:47
scale_file_cartesc
module file / cartesianC
Definition: scale_file_cartesC.F90:11
scale_comm_cartesc_nest::comm_cartesc_nest_recvwait_issue
subroutine, public comm_cartesc_nest_recvwait_issue(HANDLE, BND_QA)
Sub-command for data transfer from parent to daughter: nestdown.
Definition: scale_comm_cartesC_nest.F90:2303
scale_comm_cartesc_nest::comm_cartesc_nest_bnd_qa
integer, public comm_cartesc_nest_bnd_qa
number of tracer treated in nesting system
Definition: scale_comm_cartesC_nest.F90:94
scale_comm_cartesc_nest::offline
logical, public offline
Definition: scale_comm_cartesC_nest.F90:99
scale_atmos_grid_cartesc_real::atmos_grid_cartesc_real_totareazxv_y
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_real_totareazxv_y
total area (zxv, normal y) [m2]
Definition: scale_atmos_grid_cartesC_real.F90:81