SCALE-RM
mod_copytopo.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_tracer
21  !-----------------------------------------------------------------------------
22  implicit none
23  private
24  !-----------------------------------------------------------------------------
25  !
26  !++ Public procedure
27  !
28  public :: copytopo
29 
30  !-----------------------------------------------------------------------------
31  !
32  !++ Public parameters & variables
33  !
34  !-----------------------------------------------------------------------------
35  !
36  !++ Private procedure
37  !
38  private :: copytopo_transgrid
39  private :: copytopo_setalpha
40  private :: copytopo_input_data
41  private :: copytopo_mix_data
42 
43  !-----------------------------------------------------------------------------
44  !
45  !++ Private parameters & variables
46  !
47  integer, private, parameter :: handle = 1
48 
49  character(len=H_LONG), private :: copytopo_in_basename = ''
50  real(RP), private :: copytopo_transition_dx = -1.0_rp
51  real(RP), private :: copytopo_transition_dy = -1.0_rp
52  real(RP), private :: copytopo_fracx = 1.0_rp
53  real(RP), private :: copytopo_fracy = 1.0_rp
54  real(RP), private :: copytopo_taux = 1.0_rp
55  real(RP), private :: copytopo_tauy = 1.0_rp
56  logical, private :: copytopo_entire_region = .false.
57  logical, private :: copytopo_linear_h = .true.
58  real(RP), private :: copytopo_exp_h = 2.0_rp
59  integer, private :: copytopo_filter_order = 2
60  integer, private :: copytopo_filter_niter = 20
61 
62  !-----------------------------------------------------------------------------
63 contains
64  !-----------------------------------------------------------------------------
66  subroutine copytopo( &
67  TOPO_child )
68  use scale_prc, only: &
69  prc_abort
70  implicit none
71 
72  real(RP), intent(inout) :: TOPO_child(:,:)
73 
74  real(RP) :: CTRX (ia)
75  real(RP) :: CTRY (ja)
76  real(RP) :: alpha (ia,ja)
77  real(RP) :: TOPO_parent(ia,ja)
78 
79  namelist / param_copytopo / &
80  copytopo_in_basename, &
81  copytopo_transition_dx, &
82  copytopo_transition_dy, &
83  copytopo_fracx, &
84  copytopo_fracy, &
85  copytopo_taux, &
86  copytopo_tauy, &
87  copytopo_entire_region, &
88  copytopo_linear_h, &
89  copytopo_exp_h, &
90  copytopo_filter_order, &
91  copytopo_filter_niter
92 
93  integer :: ierr
94  !---------------------------------------------------------------------------
95 
96  log_newline
97  log_info("COPYTOPO",*) 'Setup'
98 
99  !--- read namelist
100  rewind(io_fid_conf)
101  read(io_fid_conf,nml=param_copytopo,iostat=ierr)
102  if( ierr < 0 ) then !--- missing
103  log_info("COPYTOPO",*) 'Not found namelist. Default used.'
104  elseif( ierr > 0 ) then !--- fatal error
105  log_error("COPYTOPO",*) 'Not appropriate names in namelist PARAM_COPYTOPO. Check!'
106  call prc_abort
107  endif
108  log_nml(param_copytopo)
109 
110  ! copy topography from parent domain to transition region
111 
112  call copytopo_transgrid( ctrx(:), ctry(:) ) ! [OUT]
113 
114  call copytopo_setalpha ( ctrx(:), ctry(:), & ! [IN]
115  alpha(:,:) ) ! [OUT]
116 
117  call copytopo_input_data( topo_parent(:,:) ) ! [OUT]
118 
119  call copytopo_mix_data( topo_parent(:,:), & ! [IN]
120  alpha(:,:), & ! [IN]
121  topo_child(:,:) ) ! [INOUT]
122 
123  return
124  end subroutine copytopo
125 
126  !-----------------------------------------------------------------------------
128  subroutine copytopo_transgrid( &
129  CTRX, &
130  CTRY )
131  use scale_prc, only: &
132  prc_abort, &
133  prc_myrank
134  use scale_prc_cartesc, only: &
135  prc_2drank
136  use scale_const, only: &
137  eps => const_eps
138  use scale_atmos_grid_cartesc, only: &
139  cxg => atmos_grid_cartesc_cxg, &
140  fxg => atmos_grid_cartesc_fxg, &
141  cyg => atmos_grid_cartesc_cyg, &
142  fyg => atmos_grid_cartesc_fyg, &
143  cbfxg => atmos_grid_cartesc_cbfxg, &
144  cbfyg => atmos_grid_cartesc_cbfyg
145  implicit none
146 
147  real(RP), intent(out) :: CTRX(ia)
148  real(RP), intent(out) :: CTRY(ja)
149 
150  real(RP) :: CTRXG ( iag)
151  real(RP) :: CTRYG ( jag)
152 
153  real(RP) :: bufftotx, transtotx
154  real(RP) :: bufftoty, transtoty
155  integer :: imain, ibuff, itrans
156  integer :: jmain, jbuff, jtrans
157  integer :: copy_is, copy_ie
158  integer :: copy_js, copy_je
159 
160  integer :: i, j, ii, jj
161  !---------------------------------------------------------------------------
162 
163  ! X-direction
164  ! calculate buffer grid size
165 
166  do i = ihalo+1, iag
167  if( abs(cbfxg(i)) < eps ) exit
168  enddo
169  ibuff = i - 1 - ihalo
170  if ( ibuff == 0 ) then
171  bufftotx = 0.0_rp
172  else
173  bufftotx = fxg(ibuff+ihalo) - fxg(ihalo)
174  end if
175 
176  if ( copytopo_transition_dx < 0.0_rp ) then
177  copytopo_transition_dx = bufftotx
178  end if
179  do i = ibuff+ihalo+1, iag
180  if( cxg(i) - bufftotx - fxg(ihalo) >= copytopo_transition_dx ) exit
181  enddo
182  itrans = i - 1 - ihalo - ibuff
183  if ( itrans == 0 ) then
184  transtotx = 0.0_rp
185  else
186  transtotx = fxg(itrans+ibuff+ihalo) - fxg(ihalo) - bufftotx
187  end if
188 
189  imain = iag - 2*ibuff - 2*itrans - 2*ihalo
190 
191  if ( imain < 1 ) then
192  log_error("COPYTOPO_transgrid",*) 'Not appropriate transition width for global domain(X).', copytopo_transition_dx
193  log_error_cont(*) '# of buffer region (one side) = ', ibuff
194  log_error_cont(*) '# of transion region (one side) = ', itrans
195  call prc_abort
196  endif
197 
198  ! calc transition factor (global domaim)
199  ctrxg(:) = 0.0_rp
200 
201  copy_is = 1
202  copy_ie = ihalo+ibuff
203  !$omp parallel do
204  do i = copy_is, copy_ie
205  ctrxg(i) = 1.0_rp
206  enddo
207 
208  if ( itrans > 0 ) then
209  copy_is = ihalo+ibuff+1
210  copy_ie = ihalo+ibuff+itrans
211  !$omp parallel do
212  do i = copy_is, copy_ie
213  ctrxg(i) = (transtotx+bufftotx+fxg(ihalo )-cxg(i)) / transtotx
214  enddo
215  copy_is = iag - ihalo - ibuff - itrans + 1
216  copy_ie = iag - ihalo - ibuff
217  !$omp parallel do
218  do i = copy_is, copy_ie
219  ctrxg(i) = (transtotx+bufftotx-fxg(iag-ihalo)+cxg(i)) / transtotx
220  enddo
221  endif
222 
223  copy_is = iag - ihalo - ibuff + 1
224  copy_ie = iag
225  !$omp parallel do
226  do i = copy_is, copy_ie
227  ctrxg(i) = 1.0_rp
228  enddo
229 
230  ctrxg(:) = max( min( ctrxg(:), 1.0_rp ), 0.0_rp )
231 
232  ! Y-direction
233  ! calculate buffer grid size
234  do j = jhalo+1, jag
235  if( abs(cbfyg(j)) < eps ) exit
236  enddo
237  jbuff = j - 1 - jhalo
238  if ( jbuff == 0 ) then
239  bufftoty = 0.0_rp
240  else
241  bufftoty = fyg(jbuff+jhalo) - fyg(jhalo)
242  end if
243 
244  if ( copytopo_transition_dy < 0.0_rp ) then
245  copytopo_transition_dy = bufftoty
246  end if
247  do j = jbuff+jhalo+1, jag
248  if( cyg(j) - bufftoty - fyg(jhalo) >= copytopo_transition_dy ) exit
249  enddo
250  jtrans = j - 1 - jhalo - jbuff
251  if ( jtrans == 0 ) then
252  transtoty = 0.0_rp
253  else
254  transtoty = fyg(jtrans+jbuff+jhalo) - fyg(jhalo) - bufftoty
255  end if
256 
257  jmain = jag - 2*jbuff - 2*jtrans - 2*jhalo
258 
259  if ( jmain < 1 ) then
260  log_error("COPYTOPO_transgrid",*) 'Not appropriate transition width for global domain(Y).', copytopo_transition_dy
261  log_error_cont(*) '# of buffer region (one side)', jbuff
262  log_error_cont(*) '# of transion region (one side)', jtrans
263  call prc_abort
264  endif
265 
266  ! calc transition factor (global domaim)
267  ctryg(:) = 0.0_rp
268 
269  copy_js = 1
270  copy_je = jhalo+jbuff
271  !$omp parallel do
272  do j = copy_js, copy_je
273  ctryg(j) = 1.0_rp
274  enddo
275 
276  if ( jtrans > 0 ) then
277  copy_js = jhalo+jbuff+1
278  copy_je = jhalo+jbuff+jtrans
279  !$omp parallel do
280  do j = copy_js, copy_je
281  ctryg(j) = (transtoty+bufftoty+fyg(jhalo )-cyg(j)) / transtoty
282  enddo
283  copy_js = jag - jhalo - jbuff - jtrans + 1
284  copy_je = jag - jhalo - jbuff
285  !$omp parallel do
286  do j = copy_js, copy_je
287  ctryg(j) = (transtoty+bufftoty-fyg(jag-jhalo)+cyg(j)) / transtoty
288  enddo
289  endif
290 
291  copy_js = jag - jhalo - jbuff + 1
292  copy_je = jag
293  !$omp parallel do
294  do j = copy_js, copy_je
295  ctryg(j) = 1.0_rp
296  enddo
297 
298  ctryg(:) = max( min( ctryg(:), 1.0_rp ), 0.0_rp )
299 
300 
301 
302  ! horizontal coordinate (local domaim)
303  !$omp parallel do &
304  !$omp private(ii)
305  do i = 1, ia
306  ii = i + prc_2drank(prc_myrank,1) * imax
307  ctrx(i) = ctrxg(ii)
308  enddo
309 
310  !$omp parallel do &
311  !$omp private(jj)
312  do j = 1, ja
313  jj = j + prc_2drank(prc_myrank,2) * jmax
314  ctry(j) = ctryg(jj)
315  enddo
316 
317  log_info("COPYTOPO_transgrid",*) 'COPYTOPO grid Information'
318  log_info_cont(*) 'size of buffer region (x and y; one side) = ', bufftotx, bufftoty
319  log_info_cont(*) '# of buffer region (x and y; one side) = ', ibuff, jbuff
320  log_info_cont(*) 'size of transion region (x and y; one side) = ', transtotx, transtoty
321  log_info_cont(*) '# of transion region (x and y; one side) = ', itrans, jtrans
322 
323 
324  return
325  end subroutine copytopo_transgrid
326 
327 
328  !-----------------------------------------------------------------------------
330  subroutine copytopo_setalpha( &
331  CTRX, &
332  CTRY, &
333  alpha )
334  use scale_const, only: &
335  eps => const_eps
336  use scale_comm_cartesc, only: &
337  comm_vars8, &
338  comm_wait
339  implicit none
340 
341  real(RP), intent(in) :: CTRX (ia)
342  real(RP), intent(in) :: CTRY (ja)
343  real(RP), intent(out) :: alpha(ia,ja)
344 
345  real(RP) :: coef_x, alpha_x1
346  real(RP) :: coef_y, alpha_y1
347  real(RP) :: ee1
348 
349  integer :: i, j
350  !---------------------------------------------------------------------------
351 
352  ! check invalid fraction
353  copytopo_fracx = max( min( copytopo_fracx, 1.0_rp ), eps )
354  copytopo_fracy = max( min( copytopo_fracy, 1.0_rp ), eps )
355 
356  if ( copytopo_taux <= 0.0_rp ) then ! invalid tau
357  coef_x = 0.0_rp
358  else
359  coef_x = 1.0_rp / copytopo_taux
360  endif
361 
362  if ( copytopo_tauy <= 0.0_rp ) then ! invalid tau
363  coef_y = 0.0_rp
364  else
365  coef_y = 1.0_rp / copytopo_tauy
366  endif
367 
368  !$omp parallel do &
369  !$omp private(ee1,alpha_x1,alpha_y1)
370  do j = 1, ja
371  do i = 1, ia
372  ee1 = ctrx(i)
373 
374  if ( ee1 <= 1.0_rp - copytopo_fracx ) then
375  ee1 = 0.0_rp
376  else
377  ee1 = ( ee1 - 1.0_rp + copytopo_fracx ) / copytopo_fracx
378  endif
379 
380  if ( copytopo_linear_h ) then
381  alpha_x1 = coef_x * ee1
382  else
383  alpha_x1 = coef_x * ee1 * exp( -(1.0_rp-ee1) * copytopo_exp_h )
384  endif
385 
386  ee1 = ctry(j)
387 
388  if ( ee1 <= 1.0_rp - copytopo_fracy ) then
389  ee1 = 0.0_rp
390  else
391  ee1 = ( ee1 - 1.0_rp + copytopo_fracy ) / copytopo_fracy
392  endif
393 
394  if ( copytopo_linear_h ) then
395  alpha_y1 = coef_y * ee1
396  else
397  alpha_y1 = coef_y * ee1 * exp( -(1.0_rp-ee1) * copytopo_exp_h )
398  endif
399 
400  alpha(i,j) = max( alpha_x1, alpha_y1 )
401  enddo
402  enddo
403 
404  call comm_vars8( alpha(:,:), 1 )
405  call comm_wait ( alpha(:,:), 1 )
406 
407  return
408  end subroutine copytopo_setalpha
409 
410 
411  !-----------------------------------------------------------------------------
413  subroutine copytopo_input_data( &
414  TOPO_parent )
415  use scale_const, only: &
416  eps => const_eps, &
417  d2r => const_d2r
418  use scale_file, only: &
419  file_open, &
420  file_read, &
421  file_close
422  use scale_interp, only: &
424  interp_factor2d, &
426  use scale_comm_cartesc, only: &
427  comm_vars8, &
428  comm_wait
429  use scale_atmos_grid_cartesc_real, only: &
432  use scale_comm_cartesc_nest, only: &
433  nest_interp_level => comm_cartesc_nest_interp_level, &
434  nest_domain_shape => comm_cartesc_nest_domain_shape, &
435  nest_tile_num_x => comm_cartesc_nest_tile_num_x, &
436  nest_tile_num_y => comm_cartesc_nest_tile_num_y, &
437  nest_tile_id => comm_cartesc_nest_tile_id, &
438  parent_imax, &
440  use scale_filter, only: &
441  filter_hyperdiff
442  use scale_landuse, only: &
444  implicit none
445 
446  real(RP), intent(out) :: TOPO_parent(:,:)
447 
448  real(RP), allocatable :: LON_org (:,:)
449  real(RP), allocatable :: LAT_org (:,:)
450  real(RP), allocatable :: TOPO_org(:,:)
451  real(RP), allocatable :: read2D (:,:)
452 
453  real(RP) :: dummy(1,1)
454  integer :: idx_i(ia,ja,nest_interp_level)
455  integer :: idx_j(ia,ja,nest_interp_level)
456  real(RP) :: hfact(ia,ja,nest_interp_level)
457 
458  real(RP) :: TOPO_sign(ia,ja)
459 
460  integer :: IA_org, JA_org ! number of grids for whole domain
461  integer :: tilei, tilej
462  integer :: cxs, cxe, cys, cye ! for child domain
463  integer :: pxs, pxe, pys, pye ! for parent domain
464  integer :: rank
465 
466  real(RP) :: ocean_flag
467 
468  integer :: fid
469  integer :: n, i, j
470  !---------------------------------------------------------------------------
471 
472  ia_org = parent_imax(handle) * nest_tile_num_x
473  ja_org = parent_jmax(handle) * nest_tile_num_y
474 
475  allocate( lon_org(ia_org,ja_org) )
476  allocate( lat_org(ia_org,ja_org) )
477  allocate( topo_org(ia_org,ja_org) )
478 
479  do n = 1, size( nest_tile_id(:) )
480  ! read data from split files
481  rank = nest_tile_id(n)
482 
483  call nest_domain_shape( tilei, tilej, & ! [OUT]
484  cxs, cxe, & ! [OUT]
485  cys, cye, & ! [OUT]
486  pxs, pxe, & ! [OUT]
487  pys, pye, & ! [OUT]
488  n ) ! [IN]
489 
490  allocate( read2d(tilei,tilej) )
491 
492  call file_open( copytopo_in_basename, & ! [IN]
493  fid, & ! [OUT]
494  aggregate=.false., rankid=rank ) ! [IN]
495 
496  call file_read( fid, "lon", read2d(:,:) )
497  lon_org(cxs:cxe,cys:cye) = read2d(pxs:pxe,pys:pye) * d2r
498  call file_read( fid, "lat", read2d(:,:) )
499  lat_org(cxs:cxe,cys:cye) = read2d(pxs:pxe,pys:pye) * d2r
500  call file_read( fid, "TOPO", read2d(:,:) )
501  topo_org(cxs:cxe,cys:cye) = read2d(pxs:pxe,pys:pye)
502  deallocate( read2d )
503 
504  call file_close( fid )
505 
506  enddo
507 
508  call interp_domain_compatibility( lon_org(:,:), lat_org(:,:), dummy(:,:), &
509  lon(:,:), lat(:,:), dummy(:,:), dummy(:,:), &
510  skip_z=.true. )
511 
512  call interp_factor2d( nest_interp_level, & ! [IN]
513  ia_org, ja_org, & ! [IN]
514  lon_org(:,:), & ! [IN]
515  lat_org(:,:), & ! [IN]
516  ia, ja, & ! [IN]
517  lon(:,:), & ! [IN]
518  lat(:,:), & ! [IN]
519  idx_i(:,:,:), & ! [OUT]
520  idx_j(:,:,:), & ! [OUT]
521  hfact(:,:,:) ) ! [OUT]
522 
523  call interp_interp2d( nest_interp_level, & ! [IN]
524  ia_org, ja_org, & ! [IN]
525  ia, ja, & ! [IN]
526  idx_i(:,:,:), & ! [IN]
527  idx_j(:,:,:), & ! [IN]
528  hfact(:,:,:), & ! [IN]
529  topo_org(:,:), & ! [IN]
530  topo_parent(:,:) ) ! [OUT]
531 
532  if ( copytopo_filter_niter > 1 ) then
533  !$omp parallel do &
534  !$omp private(ocean_flag)
535  do j = 1, ja
536  do i = 1, ia
537  ocean_flag = ( 0.5_rp + sign( 0.5_rp, landuse_fact_ocean(i,j) - 1.0_rp + eps ) ) & ! fact_ocean==1
538  * ( 0.5_rp + sign( 0.5_rp, eps - abs(topo_parent(i,j)) ) ) ! |TOPO| > EPS
539  topo_sign(i,j) = sign( 1.0_rp, topo_parent(i,j) ) * ( 1.0_rp - ocean_flag )
540  end do
541  end do
542 
543  call filter_hyperdiff( ia, is, ie, ja, js, je, &
544  topo_parent(:,:), copytopo_filter_order, copytopo_filter_niter, &
545  limiter_sign = topo_sign(:,:) )
546  end if
547 
548 
549  call comm_vars8( topo_parent(:,:), 1 )
550  call comm_wait ( topo_parent(:,:), 1 )
551 
552 
553  return
554  end subroutine copytopo_input_data
555 
556  !-----------------------------------------------------------------------------
558  subroutine copytopo_mix_data( &
559  TOPO_parent, &
560  alpha, &
561  TOPO_child )
562  implicit none
563 
564  real(RP), intent(in) :: TOPO_parent(:,:) ! topography of parent domain
565  real(RP), intent(in) :: alpha (:,:) ! dumping coefficient (0-1)
566  real(RP), intent(inout) :: TOPO_child (:,:) ! topography of child domain
567 
568  integer :: i, j
569  !---------------------------------------------------------------------------
570 
571  if ( copytopo_entire_region ) then
572  !$omp parallel do
573  do j = 1, ja
574  do i = 1, ia
575  topo_child(i,j) = topo_parent(i,j)
576  enddo
577  enddo
578  else
579  !$omp parallel do
580  do j = 1, ja
581  do i = 1, ia
582  topo_child(i,j) = ( 1.0_rp-alpha(i,j) ) * topo_child(i,j) &
583  + ( alpha(i,j) ) * topo_parent(i,j)
584  enddo
585  enddo
586  endif
587 
588  return
589  end subroutine copytopo_mix_data
590 
591 end module mod_copytopo
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_cxg
center coordinate [m]: x, global
integer, public jmax
of computational cells: y, local
subroutine, public file_close(fid, skip_abort)
integer, public comm_cartesc_nest_tile_num_y
parent tile number in y-direction
integer, public imax
of computational cells: x, local
integer, public ia
of whole cells: x, local, with HALO
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_cyg
center coordinate [m]: y, global
integer, public iag
of computational grids
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_cbfxg
center buffer factor (0-1): x, global
real(rp), dimension(:,:), allocatable, public atmos_grid_cartesc_real_lat
latitude [rad,-pi,pi]
module INTERPOLATION
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_fxg
face coordinate [m]: x, global
integer, public ja
of whole cells: y, local, with HALO
module process / cartesC
integer, public io_fid_conf
Config file ID.
Definition: scale_io.F90:55
real(rp), public const_d2r
degree to radian
Definition: scale_const.F90:32
module Copy topography
subroutine, public copytopo(TOPO_child)
Setup and Main.
real(rp), dimension(:,:), allocatable, public atmos_grid_cartesc_real_lon
longitude [rad,0-2pi]
subroutine, public file_open(basename, fid, mode, single, aggregate, rankid, postfix)
Definition: scale_file.F90:464
module COMMUNICATION
integer, public is
start point of inner domain: x, local
module file
Definition: scale_file.F90:15
integer, public ie
end point of inner domain: x, local
module TRACER
integer, dimension(2), public parent_jmax
parent max number in y-direction
module LANDUSE
integer, public comm_cartesc_nest_interp_level
horizontal interpolation level
module FILTER
module atmosphere / grid / cartesC index
module PROCESS
Definition: scale_prc.F90:11
integer, public je
end point of inner domain: y, local
real(rp), dimension(:,:), allocatable, public landuse_fact_ocean
ocean factor
module atmosphere / grid / cartesC
subroutine, public interp_domain_compatibility(lon_org, lat_org, topc_org, lon_loc, lat_loc, topc_loc, topf_loc, skip_x, skip_y, skip_z)
integer, public prc_myrank
process num in local communicator
Definition: scale_prc.F90:89
integer, dimension(:,:), allocatable, public prc_2drank
node index in 2D topology
subroutine, public interp_interp2d(npoints, IA_ref, JA_ref, IA, JA, idx_i, idx_j, hfact, val_ref, val)
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:338
integer, public jag
of computational grids
module CONSTANT
Definition: scale_const.F90:11
module Communication CartesianC nesting
integer, public js
start point of inner domain: y, local
subroutine, public comm_cartesc_nest_domain_shape(tilei, tilej, cxs, cxe, cys, cye, pxs, pxe, pys, pye, iloc)
Return shape of ParentDomain at the specified rank (for offline)
integer, dimension(:), allocatable, public comm_cartesc_nest_tile_id
parent tile real id
module profiler
Definition: scale_prof.F90:11
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_cbfyg
center buffer factor (0-1): y, global
real(rp), public const_eps
small number
Definition: scale_const.F90:33
module Atmosphere GRID CartesC Real(real space)
module PRECISION
integer, dimension(2), public parent_imax
parent max number in x-direction
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_fyg
face coordinate [m]: y, global
subroutine, public interp_factor2d(npoints, IA_ref, JA_ref, lon_ref, lat_ref, IA, JA, lon, lat, idx_i, idx_j, hfact, search_limit, latlon_structure, weight_order)
module STDIO
Definition: scale_io.F90:10
integer, public comm_cartesc_nest_tile_num_x
parent tile number in x-direction