91 module mpp_domains_mod
99 use iso_c_binding,
only : c_f_pointer, c_loc, c_ptr
100 use mpp_parameter_mod,
only : mpp_debug, mpp_verbose, mpp_domain_time
101 use mpp_parameter_mod,
only : global_data_domain, cyclic_global_domain, global,cyclic
102 use mpp_parameter_mod,
only : agrid, bgrid_sw, bgrid_ne, cgrid_ne, cgrid_sw, dgrid_ne, dgrid_sw
103 use mpp_parameter_mod,
only : fold_west_edge, fold_east_edge, fold_south_edge, fold_north_edge
104 use mpp_parameter_mod,
only : wupdate, eupdate, supdate, nupdate, xupdate, yupdate
105 use mpp_parameter_mod,
only : non_bitwise_exact_sum, bitwise_exact_sum, mpp_domain_time
106 use mpp_parameter_mod,
only : center, corner, scalar_pair, scalar_bit, bitwise_efp_sum
107 use mpp_parameter_mod,
only : north, north_east, east, south_east
108 use mpp_parameter_mod,
only : south, south_west, west, north_west
109 use mpp_parameter_mod,
only : max_domain_fields, null_pe, domain_id_base
110 use mpp_parameter_mod,
only : zero, ninety, minus_ninety, one_hundred_eighty, max_tiles
111 use mpp_parameter_mod,
only : event_send, event_recv, root_global
112 use mpp_parameter_mod,
only : nonblock_update_tag, edgeonly, edgeupdate
113 use mpp_parameter_mod,
only : nonsymedge, nonsymedgeupdate
114 use mpp_data_mod,
only : mpp_domains_stack, ptr_domains_stack
115 use mpp_data_mod,
only : mpp_domains_stack_nonblock, ptr_domains_stack_nonblock
118 use mpp_mod,
only :
mpp_clock_id, mpp_clock_begin, mpp_clock_end
123 use mpp_mod,
only :
mpp_type, mpp_byte
125 use mpp_mod,
only : comm_tag_1, comm_tag_2, comm_tag_3, comm_tag_4
134 public :: global_data_domain, cyclic_global_domain, bgrid_ne, bgrid_sw, cgrid_ne, cgrid_sw, agrid
135 public :: dgrid_ne, dgrid_sw, fold_west_edge, fold_east_edge, fold_south_edge, fold_north_edge
136 public :: wupdate, eupdate, supdate, nupdate, xupdate, yupdate
137 public :: non_bitwise_exact_sum, bitwise_exact_sum, mpp_domain_time, bitwise_efp_sum
138 public :: center, corner, scalar_pair
139 public :: north, north_east, east, south_east
140 public :: south, south_west, west, north_west
141 public :: zero, ninety, minus_ninety, one_hundred_eighty
142 public :: edgeupdate, nonsymedgeupdate
145 public :: null_domain1d, null_domain2d
197 public :: mpp_get_ug_domain_npes, mpp_get_ug_compute_domain, mpp_get_ug_domain_tile_id
198 public :: mpp_get_ug_domain_pelist, mpp_get_ug_domain_grid_index
199 public :: mpp_get_ug_domain_ntiles, mpp_get_ug_global_domain
201 public :: mpp_define_null_ug_domain, null_domainug, mpp_get_ug_domains_index
202 public :: mpp_get_ug_sg_domain, mpp_get_ug_domain_tile_pe_inf
207 public :: mpp_get_nest_coarse_domain, mpp_get_nest_fine_domain
208 public :: mpp_is_nest_coarse, mpp_is_nest_fine
209 public :: mpp_get_nest_pelist, mpp_get_nest_npes
210 public :: mpp_get_nest_fine_pelist, mpp_get_nest_fine_npes
214 public :: mpp_domain_ug_is_tile_root_pe
215 public :: mpp_deallocate_domainug
216 public :: mpp_get_io_domain_ug_layout
219 integer,
parameter :: NAME_LENGTH = 64
220 integer,
parameter :: MAXLIST = 100
221 integer,
parameter :: MAXOVERLAP = 200
222 integer,
parameter :: FIELD_S = 0
223 integer,
parameter :: FIELD_X = 1
224 integer,
parameter :: FIELD_Y = 2
234 integer :: begin, end, size, max_size
235 integer :: begin_index, end_index
242 type(unstruct_axis_spec) :: compute
254 integer,
pointer :: i(:)=>null()
255 integer,
pointer :: j(:)=>null()
262 integer :: nsend, nrecv
263 type(unstruct_overlap_type),
pointer :: recv(:)=>null()
264 type(unstruct_overlap_type),
pointer :: send(:)=>null()
273 type(
domainug),
pointer :: io_domain=>null()
276 integer,
pointer :: grid_index(:) => null()
277 type(
domain2d),
pointer :: sg_domain => null()
282 integer :: tile_root_pe
284 integer :: npes_io_group
285 integer(i4_kind) :: io_layout
303 type(domain_axis_spec) :: compute
304 type(domain_axis_spec) :: global
314 integer,
pointer :: tile_id(:) => null()
317 integer :: tile_root_pe
328 integer ,
pointer :: msgsize(:) => null()
329 integer,
pointer :: tileme(:) => null()
330 integer,
pointer :: tilenbr(:) => null()
331 integer,
pointer :: is(:) => null()
332 integer,
pointer :: ie(:) => null()
333 integer,
pointer :: js(:) => null()
334 integer,
pointer :: je(:) => null()
335 integer,
pointer :: dir(:) => null()
336 integer,
pointer :: rotation(:) => null()
337 integer,
pointer :: index(:) => null()
338 logical,
pointer :: from_contact(:) => null()
346 integer :: whalo, ehalo, shalo, nhalo
347 integer :: xbegin, xend, ybegin, yend
348 integer :: nsend, nrecv
349 integer :: sendsize, recvsize
358 integer :: xbegin, xend, ybegin, yend
372 character(len=NAME_LENGTH) :: name=
'unnamed'
373 integer(i8_kind) :: id
378 integer :: whalo, ehalo
379 integer :: shalo, nhalo
383 integer :: max_ntile_pe
385 logical :: rotated_ninety
386 logical :: initialized=.false.
387 integer :: tile_root_pe
388 integer :: io_layout(2)
390 integer,
pointer :: pearray(:,:) => null()
391 integer,
pointer :: tile_id(:) => null()
392 integer,
pointer :: tile_id_all(:)=> null()
423 integer,
pointer :: tile(:) =>null()
424 integer,
pointer :: align1(:)=>null(), align2(:)=>null()
425 real,
pointer :: refine1(:)=>null(), refine2(:)=>null()
426 integer,
pointer :: is1(:)=>null(), ie1(:)=>null()
427 integer,
pointer :: js1(:)=>null(), je1(:)=>null()
428 integer,
pointer :: is2(:)=>null(), ie2(:)=>null()
429 integer,
pointer :: js2(:)=>null(), je2(:)=>null()
435 integer :: is_me, ie_me, js_me, je_me
436 integer :: is_you, ie_you, js_you, je_you
443 integer :: xbegin, xend, ybegin, yend
444 integer :: xbegin_c, xend_c, ybegin_c, yend_c
445 integer :: xbegin_f, xend_f, ybegin_f, yend_f
446 integer :: xsize_c, ysize_c
447 type(index_type) :: west, east, south, north, center
448 integer :: nsend, nrecv
449 integer :: extra_halo
450 type(overlap_type),
pointer :: send(:) => null()
451 type(overlap_type),
pointer :: recv(:) => null()
452 type(nestSpec),
pointer :: next => null()
459 character(len=NAME_LENGTH) :: name
461 integer,
pointer :: nest_level(:) => null()
464 integer,
pointer :: tile_fine(:), tile_coarse(:)
465 integer,
pointer :: istart_fine(:), iend_fine(:), jstart_fine(:), jend_fine(:)
466 integer,
pointer :: istart_coarse(:), iend_coarse(:), jstart_coarse(:), jend_coarse(:)
474 logical :: is_fine, is_coarse
476 integer :: my_num_nest
477 integer,
pointer :: my_nest_id(:)
478 integer,
pointer :: tile_fine(:), tile_coarse(:)
479 integer,
pointer :: istart_fine(:), iend_fine(:), jstart_fine(:), jend_fine(:)
480 integer,
pointer :: istart_coarse(:), iend_coarse(:), jstart_coarse(:), jend_coarse(:)
481 integer :: x_refine, y_refine
482 logical :: is_fine_pe, is_coarse_pe
483 integer,
pointer :: pelist(:) => null()
484 integer,
pointer :: pelist_fine(:) => null()
485 integer,
pointer :: pelist_coarse(:) => null()
486 type(nestSpec),
pointer :: C2F_T => null()
487 type(nestSpec),
pointer :: C2F_C => null()
488 type(nestSpec),
pointer :: C2F_E => null()
489 type(nestSpec),
pointer :: C2F_N => null()
490 type(nestSpec),
pointer :: F2C_T => null()
491 type(nestSpec),
pointer :: F2C_C => null()
492 type(nestSpec),
pointer :: F2C_E => null()
493 type(nestSpec),
pointer :: F2C_N => null()
494 type(domain2d),
pointer :: domain_fine => null()
495 type(domain2d),
pointer :: domain_coarse => null()
503 logical :: initialized=.false.
504 integer(i8_kind) :: id=-9999
505 integer(i8_kind) :: l_addr =-9999
506 integer(i8_kind) :: l_addrx =-9999
507 integer(i8_kind) :: l_addry =-9999
508 type(domain2D),
pointer :: domain =>null()
509 type(domain2D),
pointer :: domain_in =>null()
510 type(domain2D),
pointer :: domain_out =>null()
511 type(overlapSpec),
pointer :: send(:,:,:,:) => null()
512 type(overlapSpec),
pointer :: recv(:,:,:,:) => null()
513 integer,
dimension(:,:),
allocatable :: sendis
514 integer,
dimension(:,:),
allocatable :: sendie
515 integer,
dimension(:,:),
allocatable :: sendjs
516 integer,
dimension(:,:),
allocatable :: sendje
517 integer,
dimension(:,:),
allocatable :: recvis
518 integer,
dimension(:,:),
allocatable :: recvie
519 integer,
dimension(:,:),
allocatable :: recvjs
520 integer,
dimension(:,:),
allocatable :: recvje
521 logical,
dimension(:),
allocatable :: S_do_buf
522 logical,
dimension(:),
allocatable :: R_do_buf
523 integer,
dimension(:),
allocatable :: cto_pe
524 integer,
dimension(:),
allocatable :: cfrom_pe
525 integer,
dimension(:),
allocatable :: S_msize
526 integer,
dimension(:),
allocatable :: R_msize
527 integer :: Slist_size=0, rlist_size=0
528 integer :: isize=0, jsize=0, ke=0
529 integer :: isize_in=0, jsize_in=0
530 integer :: isize_out=0, jsize_out=0
531 integer :: isize_max=0, jsize_max=0
532 integer :: gf_ioff=0, gf_joff=0
534 integer,
dimension(:) ,
allocatable :: isizeR
535 integer,
dimension(:) ,
allocatable :: jsizeR
536 integer,
dimension(:,:),
allocatable :: sendisR
537 integer,
dimension(:,:),
allocatable :: sendjsR
538 integer(i8_kind),
dimension(:),
allocatable :: rem_addr
539 integer(i8_kind),
dimension(:),
allocatable :: rem_addrx
540 integer(i8_kind),
dimension(:),
allocatable :: rem_addry
541 integer(i8_kind),
dimension(:,:),
allocatable :: rem_addrl
542 integer(i8_kind),
dimension(:,:),
allocatable :: rem_addrlx
543 integer(i8_kind),
dimension(:,:),
allocatable :: rem_addrly
547 integer,
parameter :: max_request = 100
554 integer :: recv_msgsize
555 integer :: send_msgsize
556 integer :: update_flags
557 integer :: update_position
558 integer :: update_gridtype
559 integer :: update_whalo
560 integer :: update_ehalo
561 integer :: update_shalo
562 integer :: update_nhalo
563 integer :: request_send_count
564 integer :: request_recv_count
565 type(mpi_request) :: request_send(MAX_REQUEST)
566 type(mpi_request) :: request_recv(MAX_REQUEST)
567 type(mpi_datatype) :: type_recv(MAX_REQUEST)
568 integer,
dimension(MAX_REQUEST) :: size_recv
569 integer,
dimension(MAX_REQUEST) :: buffer_pos_send
570 integer,
dimension(MAX_REQUEST) :: buffer_pos_recv
571 integer(i8_kind) :: field_addrs(MAX_DOMAIN_FIELDS)
572 integer(i8_kind) :: field_addrs2(MAX_DOMAIN_FIELDS)
580 logical :: initialized = .false.
581 logical :: k_loop_inside = .true.
582 logical :: nonsym_edge = .false.
583 integer :: nscalar = 0
584 integer :: nvector = 0
585 integer :: flags_s=0, flags_v=0
586 integer :: whalo_s=0, ehalo_s=0, shalo_s=0, nhalo_s=0
587 integer :: isize_s=0, jsize_s=0
588 integer :: whalo_v=0, ehalo_v=0, shalo_v=0, nhalo_v=0
589 integer :: isize_x=0, jsize_x=0
590 integer :: isize_y=0, jsize_y=0
592 integer :: position=0, gridtype=0
593 logical :: recv_s(8), recv_x(8), recv_y(8)
594 integer :: is_s=0, ie_s=0, js_s=0, je_s=0
595 integer :: is_x=0, ie_x=0, js_x=0, je_x=0
596 integer :: is_y=0, ie_y=0, js_y=0, je_y=0
597 integer :: ix_s=1, iy_s=2
598 integer :: ix_v=1, iy_v=2
599 integer,
allocatable,
dimension(:) :: shape_s
600 integer,
allocatable,
dimension(:) :: shape_x
601 integer,
allocatable,
dimension(:) :: shape_y
602 integer :: nrecv=0, nsend=0
603 integer :: npack=0, nunpack=0
604 integer :: reset_index_s = 0
605 integer :: reset_index_v = 0
606 integer :: tot_msgsize = 0
607 integer :: from_pe(maxoverlap)
608 integer :: to_pe(maxoverlap)
609 integer :: recv_size(maxoverlap)
610 integer :: send_size(maxoverlap)
611 integer :: buffer_pos_recv(maxoverlap)
612 integer :: buffer_pos_send(maxoverlap)
613 integer :: pack_type(maxoverlap)
614 integer :: pack_buffer_pos(maxoverlap)
615 integer :: pack_rotation(maxoverlap)
616 integer :: pack_size(maxoverlap)
617 integer :: pack_is(maxoverlap)
618 integer :: pack_ie(maxoverlap)
619 integer :: pack_js(maxoverlap)
620 integer :: pack_je(maxoverlap)
621 integer :: unpack_type(maxoverlap)
622 integer :: unpack_buffer_pos(maxoverlap)
623 integer :: unpack_rotation(maxoverlap)
624 integer :: unpack_size(maxoverlap)
625 integer :: unpack_is(maxoverlap)
626 integer :: unpack_ie(maxoverlap)
627 integer :: unpack_js(maxoverlap)
628 integer :: unpack_je(maxoverlap)
629 type(c_ptr) :: addrs_s(max_domain_fields)
630 type(c_ptr) :: addrs_x(max_domain_fields)
631 type(c_ptr) :: addrs_y(max_domain_fields)
632 integer :: buffer_start_pos = -1
664 logical :: module_is_initialized = .false.
665 logical :: debug = .false.
666 logical :: verbose=.false.
667 logical :: mosaic_defined = .false.
668 integer :: mpp_domains_stack_size=0
669 integer :: mpp_domains_stack_hwm=0
670 type(
domain1d),
save :: null_domain1d
671 type(
domain2d),
save :: null_domain2d
672 type(
domainug),
save :: null_domainug
673 integer :: current_id_update = 0
674 integer :: num_update = 0
675 integer :: num_nonblock_group_update = 0
676 integer :: nonblock_buffer_pos = 0
677 integer :: nonblock_group_buffer_pos = 0
678 logical :: start_update = .true.
679 logical :: complete_update = .false.
681 integer,
parameter :: max_nonblock_update = 100
683 integer :: group_update_buffer_pos = 0
684 logical :: complete_group_update_on = .false.
687 integer,
parameter :: max_addrs=512
689 integer,
dimension(-1:MAX_ADDRS),
save ::
addrs_idx=-9999
694 integer,
parameter :: max_addrs2=128
700 integer,
parameter :: max_dom_ids=128
701 integer(i8_kind),
dimension(MAX_DOM_IDS),
save ::
ids_sorted=-9999
702 integer,
dimension(-1:MAX_DOM_IDS),
save ::
ids_idx=-9999
707 integer,
parameter :: max_fields=1024
719 integer(i8_kind),
parameter :: gt_base = 256_i8_kind
722 integer(i8_kind),
parameter :: ke_base = 281474976710656_i8_kind
724 integer(i8_kind) :: domain_cnt=0
727 logical :: domain_clocks_on=.false.
728 integer :: send_clock=0, recv_clock=0, unpk_clock=0
729 integer :: wait_clock=0, pack_clock=0
730 integer :: send_pack_clock_nonblock=0, recv_clock_nonblock=0, unpk_clock_nonblock=0
731 integer :: wait_clock_nonblock=0
732 integer :: nest_send_clock=0, nest_recv_clock=0, nest_unpk_clock=0
733 integer :: nest_wait_clock=0, nest_pack_clock=0
734 integer :: group_recv_clock=0, group_send_clock=0, group_pack_clock=0, group_unpk_clock=0, group_wait_clock=0
735 integer :: nonblock_group_recv_clock=0, nonblock_group_send_clock=0, nonblock_group_pack_clock=0
736 integer :: nonblock_group_unpk_clock=0, nonblock_group_wait_clock=0
757 logical :: use_alltoallw = .false.
763 integer,
parameter :: no_check = -1
764 integer :: debug_update_level = no_check
913 module procedure mpp_define_null_domain1d
914 module procedure mpp_define_null_domain2d
929 module procedure mpp_deallocate_domain1d
930 module procedure mpp_deallocate_domain2d
1022 module procedure mpp_update_domain2d_r8_2d
1023 module procedure mpp_update_domain2d_r8_3d
1024 module procedure mpp_update_domain2d_r8_4d
1025 module procedure mpp_update_domain2d_r8_5d
1026 module procedure mpp_update_domain2d_r8_2dv
1027 module procedure mpp_update_domain2d_r8_3dv
1028 module procedure mpp_update_domain2d_r8_4dv
1029 module procedure mpp_update_domain2d_r8_5dv
1031 module procedure mpp_update_domain2d_c8_2d
1032 module procedure mpp_update_domain2d_c8_3d
1033 module procedure mpp_update_domain2d_c8_4d
1034 module procedure mpp_update_domain2d_c8_5d
1036 module procedure mpp_update_domain2d_i8_2d
1037 module procedure mpp_update_domain2d_i8_3d
1038 module procedure mpp_update_domain2d_i8_4d
1039 module procedure mpp_update_domain2d_i8_5d
1040 module procedure mpp_update_domain2d_r4_2d
1041 module procedure mpp_update_domain2d_r4_3d
1042 module procedure mpp_update_domain2d_r4_4d
1043 module procedure mpp_update_domain2d_r4_5d
1044 module procedure mpp_update_domain2d_r4_2dv
1045 module procedure mpp_update_domain2d_r4_3dv
1046 module procedure mpp_update_domain2d_r4_4dv
1047 module procedure mpp_update_domain2d_r4_5dv
1049 module procedure mpp_update_domain2d_c4_2d
1050 module procedure mpp_update_domain2d_c4_3d
1051 module procedure mpp_update_domain2d_c4_4d
1052 module procedure mpp_update_domain2d_c4_5d
1054 module procedure mpp_update_domain2d_i4_2d
1055 module procedure mpp_update_domain2d_i4_3d
1056 module procedure mpp_update_domain2d_i4_4d
1057 module procedure mpp_update_domain2d_i4_5d
1203 module procedure mpp_start_update_domain2d_r8_2d
1204 module procedure mpp_start_update_domain2d_r8_3d
1205 module procedure mpp_start_update_domain2d_r8_4d
1206 module procedure mpp_start_update_domain2d_r8_5d
1207 module procedure mpp_start_update_domain2d_r8_2dv
1208 module procedure mpp_start_update_domain2d_r8_3dv
1209 module procedure mpp_start_update_domain2d_r8_4dv
1210 module procedure mpp_start_update_domain2d_r8_5dv
1212 module procedure mpp_start_update_domain2d_c8_2d
1213 module procedure mpp_start_update_domain2d_c8_3d
1214 module procedure mpp_start_update_domain2d_c8_4d
1215 module procedure mpp_start_update_domain2d_c8_5d
1217 module procedure mpp_start_update_domain2d_i8_2d
1218 module procedure mpp_start_update_domain2d_i8_3d
1219 module procedure mpp_start_update_domain2d_i8_4d
1220 module procedure mpp_start_update_domain2d_i8_5d
1221 module procedure mpp_start_update_domain2d_r4_2d
1222 module procedure mpp_start_update_domain2d_r4_3d
1223 module procedure mpp_start_update_domain2d_r4_4d
1224 module procedure mpp_start_update_domain2d_r4_5d
1225 module procedure mpp_start_update_domain2d_r4_2dv
1226 module procedure mpp_start_update_domain2d_r4_3dv
1227 module procedure mpp_start_update_domain2d_r4_4dv
1228 module procedure mpp_start_update_domain2d_r4_5dv
1230 module procedure mpp_start_update_domain2d_c4_2d
1231 module procedure mpp_start_update_domain2d_c4_3d
1232 module procedure mpp_start_update_domain2d_c4_4d
1233 module procedure mpp_start_update_domain2d_c4_5d
1235 module procedure mpp_start_update_domain2d_i4_2d
1236 module procedure mpp_start_update_domain2d_i4_3d
1237 module procedure mpp_start_update_domain2d_i4_4d
1238 module procedure mpp_start_update_domain2d_i4_5d
1246 module procedure mpp_complete_update_domain2d_r8_2d
1247 module procedure mpp_complete_update_domain2d_r8_3d
1248 module procedure mpp_complete_update_domain2d_r8_4d
1249 module procedure mpp_complete_update_domain2d_r8_5d
1250 module procedure mpp_complete_update_domain2d_r8_2dv
1251 module procedure mpp_complete_update_domain2d_r8_3dv
1252 module procedure mpp_complete_update_domain2d_r8_4dv
1253 module procedure mpp_complete_update_domain2d_r8_5dv
1255 module procedure mpp_complete_update_domain2d_c8_2d
1256 module procedure mpp_complete_update_domain2d_c8_3d
1257 module procedure mpp_complete_update_domain2d_c8_4d
1258 module procedure mpp_complete_update_domain2d_c8_5d
1260 module procedure mpp_complete_update_domain2d_i8_2d
1261 module procedure mpp_complete_update_domain2d_i8_3d
1262 module procedure mpp_complete_update_domain2d_i8_4d
1263 module procedure mpp_complete_update_domain2d_i8_5d
1264 module procedure mpp_complete_update_domain2d_r4_2d
1265 module procedure mpp_complete_update_domain2d_r4_3d
1266 module procedure mpp_complete_update_domain2d_r4_4d
1267 module procedure mpp_complete_update_domain2d_r4_5d
1268 module procedure mpp_complete_update_domain2d_r4_2dv
1269 module procedure mpp_complete_update_domain2d_r4_3dv
1270 module procedure mpp_complete_update_domain2d_r4_4dv
1271 module procedure mpp_complete_update_domain2d_r4_5dv
1273 module procedure mpp_complete_update_domain2d_c4_2d
1274 module procedure mpp_complete_update_domain2d_c4_3d
1275 module procedure mpp_complete_update_domain2d_c4_4d
1276 module procedure mpp_complete_update_domain2d_c4_5d
1278 module procedure mpp_complete_update_domain2d_i4_2d
1279 module procedure mpp_complete_update_domain2d_i4_3d
1280 module procedure mpp_complete_update_domain2d_i4_4d
1281 module procedure mpp_complete_update_domain2d_i4_5d
1287 module procedure mpp_start_do_update_r8_3d
1288 module procedure mpp_start_do_update_r8_3dv
1290 module procedure mpp_start_do_update_c8_3d
1292 module procedure mpp_start_do_update_i8_3d
1293 module procedure mpp_start_do_update_r4_3d
1294 module procedure mpp_start_do_update_r4_3dv
1296 module procedure mpp_start_do_update_c4_3d
1298 module procedure mpp_start_do_update_i4_3d
1304 module procedure mpp_complete_do_update_r8_3d
1305 module procedure mpp_complete_do_update_r8_3dv
1307 module procedure mpp_complete_do_update_c8_3d
1309 module procedure mpp_complete_do_update_i8_3d
1310 module procedure mpp_complete_do_update_r4_3d
1311 module procedure mpp_complete_do_update_r4_3dv
1313 module procedure mpp_complete_do_update_c4_3d
1315 module procedure mpp_complete_do_update_i4_3d
1324 module procedure mpp_create_group_update_r4
1325 module procedure mpp_create_group_update_r4_v
1326 module procedure mpp_create_group_update_r8
1327 module procedure mpp_create_group_update_r8_v
1332 module procedure mpp_do_group_update_r4
1333 module procedure mpp_do_group_update_r8
1344 module procedure mpp_start_group_update_r4
1345 module procedure mpp_start_group_update_r8
1356 module procedure mpp_complete_group_update_r4
1357 module procedure mpp_complete_group_update_r8
1362 module procedure mpp_reset_group_update_field_r4
1363 module procedure mpp_reset_group_update_field_r4_v
1364 module procedure mpp_reset_group_update_field_r8
1365 module procedure mpp_reset_group_update_field_r8_v
1377 module procedure mpp_update_nest_fine_r8_2d
1378 module procedure mpp_update_nest_fine_r8_3d
1379 module procedure mpp_update_nest_fine_r8_4d
1380 module procedure mpp_update_nest_fine_r8_2dv
1381 module procedure mpp_update_nest_fine_r8_3dv
1382 module procedure mpp_update_nest_fine_r8_4dv
1384 module procedure mpp_update_nest_fine_c8_2d
1385 module procedure mpp_update_nest_fine_c8_3d
1386 module procedure mpp_update_nest_fine_c8_4d
1388 module procedure mpp_update_nest_fine_i8_2d
1389 module procedure mpp_update_nest_fine_i8_3d
1390 module procedure mpp_update_nest_fine_i8_4d
1391 module procedure mpp_update_nest_fine_r4_2d
1392 module procedure mpp_update_nest_fine_r4_3d
1393 module procedure mpp_update_nest_fine_r4_4d
1394 module procedure mpp_update_nest_fine_r4_2dv
1395 module procedure mpp_update_nest_fine_r4_3dv
1396 module procedure mpp_update_nest_fine_r4_4dv
1398 module procedure mpp_update_nest_fine_c4_2d
1399 module procedure mpp_update_nest_fine_c4_3d
1400 module procedure mpp_update_nest_fine_c4_4d
1402 module procedure mpp_update_nest_fine_i4_2d
1403 module procedure mpp_update_nest_fine_i4_3d
1404 module procedure mpp_update_nest_fine_i4_4d
1409 module procedure mpp_do_update_nest_fine_r8_3d
1410 module procedure mpp_do_update_nest_fine_r8_3dv
1412 module procedure mpp_do_update_nest_fine_c8_3d
1414 module procedure mpp_do_update_nest_fine_i8_3d
1415 module procedure mpp_do_update_nest_fine_r4_3d
1416 module procedure mpp_do_update_nest_fine_r4_3dv
1418 module procedure mpp_do_update_nest_fine_c4_3d
1420 module procedure mpp_do_update_nest_fine_i4_3d
1431 module procedure mpp_update_nest_coarse_r8_2d
1432 module procedure mpp_update_nest_coarse_r8_3d
1433 module procedure mpp_update_nest_coarse_r8_4d
1434 module procedure mpp_update_nest_coarse_r8_2dv
1435 module procedure mpp_update_nest_coarse_r8_3dv
1436 module procedure mpp_update_nest_coarse_r8_4dv
1438 module procedure mpp_update_nest_coarse_c8_2d
1439 module procedure mpp_update_nest_coarse_c8_3d
1440 module procedure mpp_update_nest_coarse_c8_4d
1442 module procedure mpp_update_nest_coarse_i8_2d
1443 module procedure mpp_update_nest_coarse_i8_3d
1444 module procedure mpp_update_nest_coarse_i8_4d
1445 module procedure mpp_update_nest_coarse_r4_2d
1446 module procedure mpp_update_nest_coarse_r4_3d
1447 module procedure mpp_update_nest_coarse_r4_4d
1448 module procedure mpp_update_nest_coarse_r4_2dv
1449 module procedure mpp_update_nest_coarse_r4_3dv
1450 module procedure mpp_update_nest_coarse_r4_4dv
1452 module procedure mpp_update_nest_coarse_c4_2d
1453 module procedure mpp_update_nest_coarse_c4_3d
1454 module procedure mpp_update_nest_coarse_c4_4d
1456 module procedure mpp_update_nest_coarse_i4_2d
1457 module procedure mpp_update_nest_coarse_i4_3d
1458 module procedure mpp_update_nest_coarse_i4_4d
1465 module procedure mpp_do_update_nest_coarse_r8_3d
1466 module procedure mpp_do_update_nest_coarse_r8_3dv
1468 module procedure mpp_do_update_nest_coarse_c8_3d
1470 module procedure mpp_do_update_nest_coarse_i8_3d
1471 module procedure mpp_do_update_nest_coarse_r4_3d
1472 module procedure mpp_do_update_nest_coarse_r4_3dv
1474 module procedure mpp_do_update_nest_coarse_c4_3d
1476 module procedure mpp_do_update_nest_coarse_i4_3d
1500 module procedure mpp_broadcast_domain_2
1502 module procedure mpp_broadcast_domain_nest_fine
1512 module procedure mpp_update_domains_ad_2d_r8_2d
1513 module procedure mpp_update_domains_ad_2d_r8_3d
1514 module procedure mpp_update_domains_ad_2d_r8_4d
1515 module procedure mpp_update_domains_ad_2d_r8_5d
1516 module procedure mpp_update_domains_ad_2d_r8_2dv
1517 module procedure mpp_update_domains_ad_2d_r8_3dv
1518 module procedure mpp_update_domains_ad_2d_r8_4dv
1519 module procedure mpp_update_domains_ad_2d_r8_5dv
1520 module procedure mpp_update_domains_ad_2d_r4_2d
1521 module procedure mpp_update_domains_ad_2d_r4_3d
1522 module procedure mpp_update_domains_ad_2d_r4_4d
1523 module procedure mpp_update_domains_ad_2d_r4_5d
1524 module procedure mpp_update_domains_ad_2d_r4_2dv
1525 module procedure mpp_update_domains_ad_2d_r4_3dv
1526 module procedure mpp_update_domains_ad_2d_r4_4dv
1527 module procedure mpp_update_domains_ad_2d_r4_5dv
1533 module procedure mpp_do_update_r8_3d
1534 module procedure mpp_do_update_r8_3dv
1536 module procedure mpp_do_update_c8_3d
1538 module procedure mpp_do_update_i8_3d
1539 module procedure mpp_do_update_r4_3d
1540 module procedure mpp_do_update_r4_3dv
1542 module procedure mpp_do_update_c4_3d
1544 module procedure mpp_do_update_i4_3d
1549 module procedure mpp_do_check_r8_3d
1550 module procedure mpp_do_check_r8_3dv
1552 module procedure mpp_do_check_c8_3d
1554 module procedure mpp_do_check_i8_3d
1555 module procedure mpp_do_check_r4_3d
1556 module procedure mpp_do_check_r4_3dv
1558 module procedure mpp_do_check_c4_3d
1560 module procedure mpp_do_check_i4_3d
1569 module procedure mpp_pass_sg_to_ug_r8_2d
1570 module procedure mpp_pass_sg_to_ug_r8_3d
1571 module procedure mpp_pass_sg_to_ug_r4_2d
1572 module procedure mpp_pass_sg_to_ug_r4_3d
1573 module procedure mpp_pass_sg_to_ug_i4_2d
1574 module procedure mpp_pass_sg_to_ug_i4_3d
1575 module procedure mpp_pass_sg_to_ug_l4_2d
1576 module procedure mpp_pass_sg_to_ug_l4_3d
1585 module procedure mpp_pass_ug_to_sg_r8_2d
1586 module procedure mpp_pass_ug_to_sg_r8_3d
1587 module procedure mpp_pass_ug_to_sg_r4_2d
1588 module procedure mpp_pass_ug_to_sg_r4_3d
1589 module procedure mpp_pass_ug_to_sg_i4_2d
1590 module procedure mpp_pass_ug_to_sg_i4_3d
1591 module procedure mpp_pass_ug_to_sg_l4_2d
1592 module procedure mpp_pass_ug_to_sg_l4_3d
1602 module procedure mpp_do_update_ad_r8_3d
1603 module procedure mpp_do_update_ad_r8_3dv
1604 module procedure mpp_do_update_ad_r4_3d
1605 module procedure mpp_do_update_ad_r4_3dv
1618 module procedure mpp_get_boundary_r8_2d
1619 module procedure mpp_get_boundary_r8_3d
1622 module procedure mpp_get_boundary_r8_2dv
1623 module procedure mpp_get_boundary_r8_3dv
1626 module procedure mpp_get_boundary_r4_2d
1627 module procedure mpp_get_boundary_r4_3d
1630 module procedure mpp_get_boundary_r4_2dv
1631 module procedure mpp_get_boundary_r4_3dv
1638 module procedure mpp_get_boundary_ad_r8_2d
1639 module procedure mpp_get_boundary_ad_r8_3d
1640 module procedure mpp_get_boundary_ad_r8_2dv
1641 module procedure mpp_get_boundary_ad_r8_3dv
1642 module procedure mpp_get_boundary_ad_r4_2d
1643 module procedure mpp_get_boundary_ad_r4_3d
1644 module procedure mpp_get_boundary_ad_r4_2dv
1645 module procedure mpp_get_boundary_ad_r4_3dv
1650 module procedure mpp_do_get_boundary_r8_3d
1651 module procedure mpp_do_get_boundary_r8_3dv
1652 module procedure mpp_do_get_boundary_r4_3d
1653 module procedure mpp_do_get_boundary_r4_3dv
1658 module procedure mpp_do_get_boundary_ad_r8_3d
1659 module procedure mpp_do_get_boundary_ad_r8_3dv
1660 module procedure mpp_do_get_boundary_ad_r4_3d
1661 module procedure mpp_do_get_boundary_ad_r4_3dv
1672 module procedure mpp_redistribute_r8_2d
1673 module procedure mpp_redistribute_r8_3d
1674 module procedure mpp_redistribute_r8_4d
1675 module procedure mpp_redistribute_r8_5d
1677 module procedure mpp_redistribute_c8_2d
1678 module procedure mpp_redistribute_c8_3d
1679 module procedure mpp_redistribute_c8_4d
1680 module procedure mpp_redistribute_c8_5d
1682 module procedure mpp_redistribute_i8_2d
1683 module procedure mpp_redistribute_i8_3d
1684 module procedure mpp_redistribute_i8_4d
1685 module procedure mpp_redistribute_i8_5d
1690 module procedure mpp_redistribute_r4_2d
1691 module procedure mpp_redistribute_r4_3d
1692 module procedure mpp_redistribute_r4_4d
1693 module procedure mpp_redistribute_r4_5d
1695 module procedure mpp_redistribute_c4_2d
1696 module procedure mpp_redistribute_c4_3d
1697 module procedure mpp_redistribute_c4_4d
1698 module procedure mpp_redistribute_c4_5d
1700 module procedure mpp_redistribute_i4_2d
1701 module procedure mpp_redistribute_i4_3d
1702 module procedure mpp_redistribute_i4_4d
1703 module procedure mpp_redistribute_i4_5d
1712 module procedure mpp_do_redistribute_r8_3d
1714 module procedure mpp_do_redistribute_c8_3d
1716 module procedure mpp_do_redistribute_i8_3d
1717 module procedure mpp_do_redistribute_l8_3d
1718 module procedure mpp_do_redistribute_r4_3d
1720 module procedure mpp_do_redistribute_c4_3d
1722 module procedure mpp_do_redistribute_i4_3d
1723 module procedure mpp_do_redistribute_l4_3d
1779 #ifndef __NVCOMPILER
1780 module procedure mpp_global_field_r8
1782 module procedure mpp_global_field_c8
1784 module procedure mpp_global_field_i8
1785 module procedure mpp_global_field_l8
1786 module procedure mpp_global_field_r4
1788 module procedure mpp_global_field_c4
1790 module procedure mpp_global_field_i4
1791 module procedure mpp_global_field_l4
1794 module procedure mpp_global_field_r8_2d
1795 module procedure mpp_global_field_r8_3d
1796 module procedure mpp_global_field_r8_4d
1797 module procedure mpp_global_field_r8_5d
1799 module procedure mpp_global_field_c8_2d
1800 module procedure mpp_global_field_c8_3d
1801 module procedure mpp_global_field_c8_4d
1802 module procedure mpp_global_field_c8_5d
1804 module procedure mpp_global_field_i8_2d
1805 module procedure mpp_global_field_i8_3d
1806 module procedure mpp_global_field_i8_4d
1807 module procedure mpp_global_field_i8_5d
1808 module procedure mpp_global_field_l8_2d
1809 module procedure mpp_global_field_l8_3d
1810 module procedure mpp_global_field_l8_4d
1811 module procedure mpp_global_field_l8_5d
1812 module procedure mpp_global_field_r4_2d
1813 module procedure mpp_global_field_r4_3d
1814 module procedure mpp_global_field_r4_4d
1815 module procedure mpp_global_field_r4_5d
1817 module procedure mpp_global_field_c4_2d
1818 module procedure mpp_global_field_c4_3d
1819 module procedure mpp_global_field_c4_4d
1820 module procedure mpp_global_field_c4_5d
1822 module procedure mpp_global_field_i4_2d
1823 module procedure mpp_global_field_i4_3d
1824 module procedure mpp_global_field_i4_4d
1825 module procedure mpp_global_field_i4_5d
1826 module procedure mpp_global_field_l4_2d
1827 module procedure mpp_global_field_l4_3d
1828 module procedure mpp_global_field_l4_4d
1829 module procedure mpp_global_field_l4_5d
1835 module procedure mpp_global_field2d_r8_2d_ad
1836 module procedure mpp_global_field2d_r8_3d_ad
1837 module procedure mpp_global_field2d_r8_4d_ad
1838 module procedure mpp_global_field2d_r8_5d_ad
1840 module procedure mpp_global_field2d_c8_2d_ad
1841 module procedure mpp_global_field2d_c8_3d_ad
1842 module procedure mpp_global_field2d_c8_4d_ad
1843 module procedure mpp_global_field2d_c8_5d_ad
1845 module procedure mpp_global_field2d_i8_2d_ad
1846 module procedure mpp_global_field2d_i8_3d_ad
1847 module procedure mpp_global_field2d_i8_4d_ad
1848 module procedure mpp_global_field2d_i8_5d_ad
1849 module procedure mpp_global_field2d_l8_2d_ad
1850 module procedure mpp_global_field2d_l8_3d_ad
1851 module procedure mpp_global_field2d_l8_4d_ad
1852 module procedure mpp_global_field2d_l8_5d_ad
1853 module procedure mpp_global_field2d_r4_2d_ad
1854 module procedure mpp_global_field2d_r4_3d_ad
1855 module procedure mpp_global_field2d_r4_4d_ad
1856 module procedure mpp_global_field2d_r4_5d_ad
1858 module procedure mpp_global_field2d_c4_2d_ad
1859 module procedure mpp_global_field2d_c4_3d_ad
1860 module procedure mpp_global_field2d_c4_4d_ad
1861 module procedure mpp_global_field2d_c4_5d_ad
1863 module procedure mpp_global_field2d_i4_2d_ad
1864 module procedure mpp_global_field2d_i4_3d_ad
1865 module procedure mpp_global_field2d_i4_4d_ad
1866 module procedure mpp_global_field2d_i4_5d_ad
1867 module procedure mpp_global_field2d_l4_2d_ad
1868 module procedure mpp_global_field2d_l4_3d_ad
1869 module procedure mpp_global_field2d_l4_4d_ad
1870 module procedure mpp_global_field2d_l4_5d_ad
1876 module procedure mpp_global_field2d_ug_r8_2d
1877 module procedure mpp_global_field2d_ug_r8_3d
1878 module procedure mpp_global_field2d_ug_r8_4d
1879 module procedure mpp_global_field2d_ug_r8_5d
1880 module procedure mpp_global_field2d_ug_i8_2d
1881 module procedure mpp_global_field2d_ug_i8_3d
1882 module procedure mpp_global_field2d_ug_i8_4d
1883 module procedure mpp_global_field2d_ug_i8_5d
1884 module procedure mpp_global_field2d_ug_r4_2d
1885 module procedure mpp_global_field2d_ug_r4_3d
1886 module procedure mpp_global_field2d_ug_r4_4d
1887 module procedure mpp_global_field2d_ug_r4_5d
1888 module procedure mpp_global_field2d_ug_i4_2d
1889 module procedure mpp_global_field2d_ug_i4_3d
1890 module procedure mpp_global_field2d_ug_i4_4d
1891 module procedure mpp_global_field2d_ug_i4_5d
1896 module procedure mpp_do_global_field2d_r8_3d_ad
1898 module procedure mpp_do_global_field2d_c8_3d_ad
1900 module procedure mpp_do_global_field2d_i8_3d_ad
1901 module procedure mpp_do_global_field2d_l8_3d_ad
1902 module procedure mpp_do_global_field2d_r4_3d_ad
1904 module procedure mpp_do_global_field2d_c4_3d_ad
1906 module procedure mpp_do_global_field2d_i4_3d_ad
1907 module procedure mpp_do_global_field2d_l4_3d_ad
1928 module procedure mpp_global_max_r8_2d
1929 module procedure mpp_global_max_r8_3d
1930 module procedure mpp_global_max_r8_4d
1931 module procedure mpp_global_max_r8_5d
1932 module procedure mpp_global_max_r4_2d
1933 module procedure mpp_global_max_r4_3d
1934 module procedure mpp_global_max_r4_4d
1935 module procedure mpp_global_max_r4_5d
1936 module procedure mpp_global_max_i8_2d
1937 module procedure mpp_global_max_i8_3d
1938 module procedure mpp_global_max_i8_4d
1939 module procedure mpp_global_max_i8_5d
1940 module procedure mpp_global_max_i4_2d
1941 module procedure mpp_global_max_i4_3d
1942 module procedure mpp_global_max_i4_4d
1943 module procedure mpp_global_max_i4_5d
1964 module procedure mpp_global_min_r8_2d
1965 module procedure mpp_global_min_r8_3d
1966 module procedure mpp_global_min_r8_4d
1967 module procedure mpp_global_min_r8_5d
1968 module procedure mpp_global_min_r4_2d
1969 module procedure mpp_global_min_r4_3d
1970 module procedure mpp_global_min_r4_4d
1971 module procedure mpp_global_min_r4_5d
1972 module procedure mpp_global_min_i8_2d
1973 module procedure mpp_global_min_i8_3d
1974 module procedure mpp_global_min_i8_4d
1975 module procedure mpp_global_min_i8_5d
1976 module procedure mpp_global_min_i4_2d
1977 module procedure mpp_global_min_i4_3d
1978 module procedure mpp_global_min_i4_4d
1979 module procedure mpp_global_min_i4_5d
2002 module procedure mpp_global_sum_r8_2d
2003 module procedure mpp_global_sum_r8_3d
2004 module procedure mpp_global_sum_r8_4d
2005 module procedure mpp_global_sum_r8_5d
2007 module procedure mpp_global_sum_c8_2d
2008 module procedure mpp_global_sum_c8_3d
2009 module procedure mpp_global_sum_c8_4d
2010 module procedure mpp_global_sum_c8_5d
2012 module procedure mpp_global_sum_r4_2d
2013 module procedure mpp_global_sum_r4_3d
2014 module procedure mpp_global_sum_r4_4d
2015 module procedure mpp_global_sum_r4_5d
2017 module procedure mpp_global_sum_c4_2d
2018 module procedure mpp_global_sum_c4_3d
2019 module procedure mpp_global_sum_c4_4d
2020 module procedure mpp_global_sum_c4_5d
2022 module procedure mpp_global_sum_i8_2d
2023 module procedure mpp_global_sum_i8_3d
2024 module procedure mpp_global_sum_i8_4d
2025 module procedure mpp_global_sum_i8_5d
2026 module procedure mpp_global_sum_i4_2d
2027 module procedure mpp_global_sum_i4_3d
2028 module procedure mpp_global_sum_i4_4d
2029 module procedure mpp_global_sum_i4_5d
2035 module procedure mpp_global_sum_tl_r8_2d
2036 module procedure mpp_global_sum_tl_r8_3d
2037 module procedure mpp_global_sum_tl_r8_4d
2038 module procedure mpp_global_sum_tl_r8_5d
2040 module procedure mpp_global_sum_tl_c8_2d
2041 module procedure mpp_global_sum_tl_c8_3d
2042 module procedure mpp_global_sum_tl_c8_4d
2043 module procedure mpp_global_sum_tl_c8_5d
2045 module procedure mpp_global_sum_tl_r4_2d
2046 module procedure mpp_global_sum_tl_r4_3d
2047 module procedure mpp_global_sum_tl_r4_4d
2048 module procedure mpp_global_sum_tl_r4_5d
2050 module procedure mpp_global_sum_tl_c4_2d
2051 module procedure mpp_global_sum_tl_c4_3d
2052 module procedure mpp_global_sum_tl_c4_4d
2053 module procedure mpp_global_sum_tl_c4_5d
2055 module procedure mpp_global_sum_tl_i8_2d
2056 module procedure mpp_global_sum_tl_i8_3d
2057 module procedure mpp_global_sum_tl_i8_4d
2058 module procedure mpp_global_sum_tl_i8_5d
2059 module procedure mpp_global_sum_tl_i4_2d
2060 module procedure mpp_global_sum_tl_i4_3d
2061 module procedure mpp_global_sum_tl_i4_4d
2062 module procedure mpp_global_sum_tl_i4_5d
2069 module procedure mpp_global_sum_ad_r8_2d
2070 module procedure mpp_global_sum_ad_r8_3d
2071 module procedure mpp_global_sum_ad_r8_4d
2072 module procedure mpp_global_sum_ad_r8_5d
2074 module procedure mpp_global_sum_ad_c8_2d
2075 module procedure mpp_global_sum_ad_c8_3d
2076 module procedure mpp_global_sum_ad_c8_4d
2077 module procedure mpp_global_sum_ad_c8_5d
2079 module procedure mpp_global_sum_ad_r4_2d
2080 module procedure mpp_global_sum_ad_r4_3d
2081 module procedure mpp_global_sum_ad_r4_4d
2082 module procedure mpp_global_sum_ad_r4_5d
2084 module procedure mpp_global_sum_ad_c4_2d
2085 module procedure mpp_global_sum_ad_c4_3d
2086 module procedure mpp_global_sum_ad_c4_4d
2087 module procedure mpp_global_sum_ad_c4_5d
2089 module procedure mpp_global_sum_ad_i8_2d
2090 module procedure mpp_global_sum_ad_i8_3d
2091 module procedure mpp_global_sum_ad_i8_4d
2092 module procedure mpp_global_sum_ad_i8_5d
2093 module procedure mpp_global_sum_ad_i4_2d
2094 module procedure mpp_global_sum_ad_i4_3d
2095 module procedure mpp_global_sum_ad_i4_4d
2096 module procedure mpp_global_sum_ad_i4_5d
2148 interface operator(.EQ.)
2155 interface operator(.NE.)
2314 module procedure check_data_size_1d
2315 module procedure check_data_size_2d
2331 #ifndef __NVCOMPILER
2332 module procedure arr2vec_r8
2334 module procedure arr2vec_c8
2336 module procedure arr2vec_i8
2337 module procedure arr2vec_l8
2338 module procedure arr2vec_r4
2340 module procedure arr2vec_c4
2342 module procedure arr2vec_i4
2343 module procedure arr2vec_l4
2345 module procedure arr2vec_r8_2d
2346 module procedure arr2vec_r8_3d
2347 module procedure arr2vec_r8_4d
2348 module procedure arr2vec_r8_5d
2349 module procedure arr2vec_i8_2d
2350 module procedure arr2vec_i8_3d
2351 module procedure arr2vec_i8_4d
2352 module procedure arr2vec_i8_5d
2353 module procedure arr2vec_l8_2d
2354 module procedure arr2vec_l8_3d
2355 module procedure arr2vec_l8_4d
2356 module procedure arr2vec_l8_5d
2357 module procedure arr2vec_r4_2d
2358 module procedure arr2vec_r4_3d
2359 module procedure arr2vec_r4_4d
2360 module procedure arr2vec_r4_5d
2361 module procedure arr2vec_i4_2d
2362 module procedure arr2vec_i4_3d
2363 module procedure arr2vec_i4_4d
2364 module procedure arr2vec_i4_5d
2365 module procedure arr2vec_l4_2d
2366 module procedure arr2vec_l4_3d
2367 module procedure arr2vec_l4_4d
2368 module procedure arr2vec_l4_5d
2375 #ifndef __NVCOMPILER
2376 module procedure vec2arr_r8
2378 module procedure vec2arr_c8
2380 module procedure vec2arr_i8
2381 module procedure vec2arr_l8
2382 module procedure vec2arr_r4
2384 module procedure vec2arr_c4
2386 module procedure vec2arr_i4
2387 module procedure vec2arr_l4
2389 module procedure vec2arr_r8_2d
2390 module procedure vec2arr_r8_3d
2391 module procedure vec2arr_r8_4d
2392 module procedure vec2arr_r8_5d
2393 module procedure vec2arr_i8_2d
2394 module procedure vec2arr_i8_3d
2395 module procedure vec2arr_i8_4d
2396 module procedure vec2arr_i8_5d
2397 module procedure vec2arr_l8_2d
2398 module procedure vec2arr_l8_3d
2399 module procedure vec2arr_l8_4d
2400 module procedure vec2arr_l8_5d
2401 module procedure vec2arr_r4_2d
2402 module procedure vec2arr_r4_3d
2403 module procedure vec2arr_r4_4d
2404 module procedure vec2arr_r4_5d
2405 module procedure vec2arr_i4_2d
2406 module procedure vec2arr_i4_3d
2407 module procedure vec2arr_i4_4d
2408 module procedure vec2arr_i4_5d
2409 module procedure vec2arr_l4_2d
2410 module procedure vec2arr_l4_3d
2411 module procedure vec2arr_l4_4d
2412 module procedure vec2arr_l4_5d
2419 #ifndef __NVCOMPILER
2420 module procedure arr_init_r8
2422 module procedure arr_init_c8
2424 module procedure arr_init_i8
2425 module procedure arr_init_l8
2426 module procedure arr_init_r4
2428 module procedure arr_init_c4
2430 module procedure arr_init_i4
2431 module procedure arr_init_l4
2433 module procedure arr_init_r8_2d
2434 module procedure arr_init_r8_3d
2435 module procedure arr_init_r8_4d
2436 module procedure arr_init_r8_5d
2437 module procedure arr_init_i8_2d
2438 module procedure arr_init_i8_3d
2439 module procedure arr_init_i8_4d
2440 module procedure arr_init_i8_5d
2441 module procedure arr_init_l8_2d
2442 module procedure arr_init_l8_3d
2443 module procedure arr_init_l8_4d
2444 module procedure arr_init_l8_5d
2445 module procedure arr_init_r4_2d
2446 module procedure arr_init_r4_3d
2447 module procedure arr_init_r4_4d
2448 module procedure arr_init_r4_5d
2449 module procedure arr_init_i4_2d
2450 module procedure arr_init_i4_3d
2451 module procedure arr_init_i4_4d
2452 module procedure arr_init_i4_5d
2453 module procedure arr_init_l4_2d
2454 module procedure arr_init_l4_3d
2455 module procedure arr_init_l4_4d
2456 module procedure arr_init_l4_5d
2461 #include<file_version.h>
2467 #include <mpp_define_nest_domains.inc>
2468 #include <mpp_domains_util.inc>
2469 #include <mpp_domains_comm.inc>
2470 #include <mpp_domains_define.inc>
2471 #include <mpp_domains_misc.inc>
2472 #include <mpp_pack.inc>
2473 #include <mpp_domains_reduce.inc>
2474 #include <mpp_unstruct_domain.inc>
2476 end module mpp_domains_mod
subroutine mpp_get_overlap(domain, action, p, is, ie, js, je, dir, rot, position)
Set user stack size.
subroutine mpp_get_neighbor_pe_2d(domain, direction, pe)
Return PE North/South/East/West of this PE-domain. direction must be NORTH, SOUTH,...
subroutine mpp_get_global_domains1d(domain, begin, end, size)
Set user stack size.
integer function mpp_get_domain_npes(domain)
Set user stack size.
subroutine mpp_define_unstruct_domain(UG_domain, SG_domain, npts_tile, grid_nlev, ndivs, npes_io_group, grid_index, name)
integer, save a2_sort_len
length sorted memory list
subroutine mpp_define_nest_domains(nest_domain, domain, num_nest, nest_level, tile_fine, tile_coarse, istart_coarse, icount_coarse, jstart_coarse, jcount_coarse, npes_nest_tile, x_refine, y_refine, extra_halo, name)
Set up a domain to pass data between aligned coarse and fine grid of nested model.
logical function mpp_domainug_ne(a, b)
Overload the .ne. for UG.
subroutine mpp_modify_domain2d(domain_in, domain_out, isc, iec, jsc, jec, isg, ieg, jsg, jeg, whalo, ehalo, shalo, nhalo)
logical function mpp_domain2d_eq(a, b)
Set user stack size.
integer function mpp_get_tile_npes(domain)
Returns number of processors used on current tile.
integer, dimension(-1:max_dom_ids), save ids_idx
index of d_comm associated with sorted addesses
integer nthread_control_loop
Determine the loop order for packing and unpacking. When number of threads is greater than nthread_co...
integer, save i_sort_len
length sorted domain ids list
subroutine mpp_get_global_domain2d(domain, xbegin, xend, ybegin, yend, xsize, xmax_size, ysize, ymax_size, tile_count, position)
Set user stack size.
subroutine mpp_get_pelist1d(domain, pelist, pos)
Set user stack size.
subroutine mpp_set_global_domain1d(domain, begin, end, size)
Set user stack size.
subroutine mpp_get_layout2d(domain, layout)
Set user stack size.
subroutine mpp_get_tile_pelist(domain, pelist)
Get the processors list used on current tile.
logical efp_sum_overflow_check
If .true., always do overflow_check when doing EFP bitwise mpp_global_sum.
subroutine mpp_get_domain_components(domain, x, y, tile_count)
Retrieve 1D components of 2D decomposition.
subroutine mpp_get_domain_extents1d(domain, xextent, yextent)
Set user stack size.
logical function mpp_group_update_is_set(group)
Set user stack size.
subroutine logical mpp_broadcast_domain_1(domain)
broadcast domain (useful only outside the context of its own pelist)
integer function mpp_get_domain_tile_commid(domain)
Set user stack size.
character(len=32) debug_update_domain
namelist interface
subroutine mpp_domains_init(flags)
Initialize domain decomp package.
subroutine mpp_set_global_domain2d(domain, xbegin, xend, ybegin, yend, xsize, ysize, tile_count)
Set user stack size.
logical function mpp_domain1d_eq(a, b)
Set user stack size.
integer function, dimension(size(domain%tile_id(:))) mpp_get_tile_id(domain)
Returns the tile_id on current pe.
logical function mpp_domain_is_symmetry(domain)
Set user stack size.
subroutine mpp_create_super_grid_domain(domain)
Modifies the indices of the input domain to create the supergrid domain.
logical function mpp_mosaic_defined()
Accessor function for value of mosaic_defined.
integer function mpp_get_num_overlap(domain, action, p, position)
Set user stack size.
integer function mpp_get_current_ntile(domain)
Returns number of tile on current pe.
subroutine mpp_define_domains1d(global_indices, ndivs, domain, pelist, flags, halo, extent, maskmap, memory_size, begin_halo, end_halo)
Define data and computational domains on a 1D set of data (isg:ieg) and assign them to PEs.
subroutine mpp_set_domain_symmetry(domain, symmetry)
Set user stack size.
integer function mpp_get_ntile_count(domain)
Returns number of tiles in mosaic.
subroutine mpp_get_domain_extents2d(domain, xextent, yextent)
This will return xextent and yextent for each tile.
logical debug_message_passing
Will check the consistency on the boundary between processor/tile when updating domain for symmetric ...
subroutine mpp_get_global_domain1d(domain, begin, end, size, max_size)
Set user stack size.
integer function, dimension(2) mpp_get_io_domain_layout(domain)
Set user stack size.
subroutine mpp_shift_nest_domains(nest_domain, domain, delta_i_coarse, delta_j_coarse, extra_halo)
Based on mpp_define_nest_domains, but just resets positioning of nest Modifies the parent/coarse star...
subroutine mpp_get_neighbor_pe_1d(domain, direction, pe)
Return PE to the righ/left of this PE-domain.
subroutine mpp_define_mosaic_pelist(sizes, pe_start, pe_end, pelist, costpertile)
Defines a pelist for use with mosaic tiles.
subroutine mpp_get_tile_compute_domains(domain, xbegin, xend, ybegin, yend, position)
Set user stack size.
subroutine mpp_get_compute_domain2d(domain, xbegin, xend, ybegin, yend, xsize, xmax_size, ysize, ymax_size, x_is_global, y_is_global, tile_count, position)
Set user stack size.
subroutine mpp_get_compute_domain1d(domain, begin, end, size, max_size, is_global)
Set user stack size.
subroutine mpp_define_io_domain(domain, io_layout)
Define the layout for IO pe's for the given domain.
subroutine mpp_get_f2c_index_coarse(nest_domain, is_coarse, ie_coarse, js_coarse, je_coarse, nest_level, position)
subroutine mpp_compute_extent(isg, ieg, ndivs, ibegin, iend, extent)
Computes extents for a grid decomposition with the given indices and divisions.
integer, dimension(-1:max_fields), save d_comm_idx
index of d_comm associated with sorted addresses
logical function mpp_domain1d_ne(a, b)
Set user stack size.
subroutine mpp_modify_domain1d(domain_in, domain_out, cbegin, cend, gbegin, gend, hbegin, hend)
Modifies the exents of a domain.
subroutine mpp_get_layout1d(domain, layout)
Set user stack size.
subroutine mpp_broadcast_domain_ug(domain)
Broadcast domain (useful only outside the context of its own pelist)
subroutine mpp_get_update_pelist(domain, action, pelist, position)
Set user stack size.
subroutine mpp_set_data_domain2d(domain, xbegin, xend, ybegin, yend, xsize, ysize, x_is_global, y_is_global, tile_count)
Set user stack size.
subroutine mpp_get_compute_domains1d(domain, begin, end, size)
Set user stack size.
integer(i8_kind), parameter addr2_base
= 0x0000000000010000
integer function mpp_get_domain_tile_root_pe(domain)
Set user stack size.
subroutine mpp_check_field_2d(field_in, pelist1, pelist2, domain, mesg, w_halo, s_halo, e_halo, n_halo, force_abort, position)
This routine is used to do parallel checking for 2d data between n and m pe. The comparison is is don...
integer, dimension(-1:max_addrs2), save addrs2_idx
index of addr2 associated with d_comm
subroutine mpp_define_mosaic(global_indices, layout, domain, num_tile, num_contact, tile1, tile2, istart1, iend1, jstart1, jend1, istart2, iend2, jstart2, jend2, pe_start, pe_end, pelist, whalo, ehalo, shalo, nhalo, xextent, yextent, maskmap, name, memory_size, symmetry, xflags, yflags, tile_id)
Defines a domain for mosaic tile grids.
integer, save n_comm
number of communicators used
subroutine mpp_domains_exit()
Exit mpp_domains_mod. Serves no particular purpose, but is provided should you require to re-initiali...
subroutine mpp_get_pelist2d(domain, pelist, pos)
Set user stack size.
integer, save n_ids
number of domain ids used (=i_sort_len; domain ids are never removed)
integer, save a_sort_len
length sorted memory list
subroutine mpp_get_memory_domain2d(domain, xbegin, xend, ybegin, yend, xsize, xmax_size, ysize, ymax_size, x_is_global, y_is_global, position)
Set user stack size.
subroutine mpp_check_field_3d(field_in, pelist1, pelist2, domain, mesg, w_halo, s_halo, e_halo, n_halo, force_abort, position)
This routine is used to do parallel checking for 3d data between n and m pe. The comparison is is don...
subroutine mpp_define_layout2d(global_indices, ndivs, layout)
type(mpi_comm) function mpp_get_domain_tile_comm(domain)
Set user stack size.
subroutine mpp_set_compute_domain1d(domain, begin, end, size, is_global)
Set user stack size.
integer function mpp_get_domain_pe(domain)
Set user stack size.
subroutine mpp_get_tile_list(domain, tiles)
Return the tile_id on current pelist. one-tile-per-pe is assumed.
subroutine mpp_get_f2c_index_fine(nest_domain, is_coarse, ie_coarse, js_coarse, je_coarse, is_fine, ie_fine, js_fine, je_fine, nest_level, position)
subroutine mpp_compute_block_extent(isg, ieg, ndivs, ibegin, iend)
Computes the extents of a grid block.
logical function mpp_group_update_initialized(group)
Set user stack size.
integer, save dc_sort_len
length sorted comm keys (=num active communicators)
subroutine mpp_set_compute_domain2d(domain, xbegin, xend, ybegin, yend, xsize, ysize, x_is_global, y_is_global, tile_count)
Set user stack size.
type(domain2d) function, pointer mpp_get_io_domain(domain)
Set user stack size.
subroutine mpp_get_compute_domains2d(domain, xbegin, xend, xsize, ybegin, yend, ysize, position)
Set user stack size.
subroutine mpp_copy_domain2d(domain_in, domain_out)
Copies input 2d domain to the output 2d domain.
type(mpi_comm) function mpp_get_domain_comm(domain)
Set user stack size.
integer(i8_kind), dimension(max_fields), save dckey_sorted
list of sorted local addresses
subroutine mpp_get_memory_domain1d(domain, begin, end, size, max_size, is_global)
Set user stack size.
type(domaincommunicator2d), dimension(:), allocatable, target, save d_comm
domain communicators
subroutine mpp_get_domain_shift(domain, ishift, jshift, position)
Returns the shift value in x and y-direction according to domain position..
logical function mpp_domain2d_ne(a, b)
Set user stack size.
logical function mpp_domain_is_initialized(domain)
Set user stack size.
subroutine mpp_broadcast_domain_nest_coarse(domain, tile_coarse)
Broadcast nested domain (useful only outside the context of its own pelist)
subroutine nullify_domain2d_list(domain)
Set user stack size.
integer, dimension(-1:max_addrs), save addrs_idx
index of address associated with d_comm
logical function mpp_domain_is_tile_root_pe(domain)
Returns if current pe is the root pe of the tile, if number of tiles on current pe is greater than 1,...
character(len=name_length) function mpp_get_domain_name(domain)
Set user stack size.
subroutine mpp_get_global_domains2d(domain, xbegin, xend, xsize, ybegin, yend, ysize, position)
Set user stack size.
subroutine mpp_get_c2f_index(nest_domain, is_fine, ie_fine, js_fine, je_fine, is_coarse, ie_coarse, js_coarse, je_coarse, dir, nest_level, position)
Get the index of the data passed from coarse grid to fine grid.
integer function mpp_get_domain_commid(domain)
Set user stack size.
integer, save n_addrs2
number of memory addresses used
subroutine mpp_get_data_domain2d(domain, xbegin, xend, ybegin, yend, xsize, xmax_size, ysize, ymax_size, x_is_global, y_is_global, tile_count, position)
Set user stack size.
subroutine mpp_get_domain_pelist(domain, pelist)
Set user stack size.
integer(i8_kind), dimension(max_addrs2), save addrs2_sorted
list of sorted local addresses
subroutine mpp_domains_set_stack_size(n)
Set user stack size.
subroutine mpp_clear_group_update(group)
Set user stack size.
subroutine mpp_get_update_size(domain, nsend, nrecv, position)
Set user stack size.
integer(i8_kind), dimension(max_addrs), save addrs_sorted
list of sorted local addresses
integer(i8_kind), dimension(max_dom_ids), save ids_sorted
list of sorted domain identifiers
integer function mpp_get_domain_root_pe(domain)
Set user stack size.
logical function mpp_domainug_eq(a, b)
Overload the .eq. for UG.
subroutine mpp_set_data_domain1d(domain, begin, end, size, is_global)
Set user stack size.
recursive subroutine mpp_copy_domain1d(domain_in, domain_out)
Copies input 1d domain to the output 1d domain.
integer, save n_addrs
number of memory addresses used
subroutine mpp_get_data_domain1d(domain, begin, end, size, max_size, is_global)
Set user stack size.
subroutine mpp_define_domains2d(global_indices, layout, domain, pelist, xflags, yflags, xhalo, yhalo, xextent, yextent, maskmap, name, symmetry, memory_size, whalo, ehalo, shalo, nhalo, is_mosaic, tile_count, tile_id, complete, x_cyclic_offset, y_cyclic_offset)
Define 2D data and computational domain on global rectilinear cartesian domain (isg:ieg,...
Private interface to pack an array into a vector.
Private interface to initialize an assumed-rank array.
Private interface for internal usage, compares two sizes.
Broadcasts domain to every pe. Only useful outside the context of it's own pelist.
Parallel checking between two ensembles which run on different set pes at the same time There are tw...
Private interface used for non blocking updates.
Completes a pending non-blocking group update Must follow a call to mpp_start_group_update.
Must be used after a call to mpp_start_update_domains in order to complete a nonblocking domain updat...
Constructor for the mpp_group_update_type which is then used with mpp_start_group_update.
Deallocate given 1D or 2D domain.
Set up a domain decomposition.
Retrieve layout associated with a domain decomposition. Given a global 2D domain and the number of di...
Defines a nullified 1D or 2D domain.
Private interface to updates data domain of 3D field whose computational domains have been computed.
Private interface used for mpp_update_domains.
Passes a data field from a unstructured grid to an structured grid Example usage:
Used by mpp_update_nest_coarse to perform domain updates.
Get the boundary data for symmetric domain when the data is at C, E, or N-cell center....
These routines retrieve the axis specifications associated with the compute domains....
Retrieve the entire array of compute domain extents associated with a decomposition.
These routines retrieve the axis specifications associated with the data domains. The domain is a der...
Get the index of the data passed from fine grid to coarse grid. Example usage:
These routines retrieve the axis specifications associated with the global domains....
Retrieve layout associated with a domain decomposition The 1D version of this call returns the number...
These routines retrieve the axis specifications associated with the memory domains....
Retrieve PE number of a neighboring domain.
Retrieve list of PEs associated with a domain decomposition. The 1D version of this call returns an a...
Fill in a global array from domain-decomposed arrays.
Same functionality as mpp_global_field but for unstructured domains.
Global max of domain-decomposed arrays. mpp_global_max is used to get the maximum value of a domain-...
Global min of domain-decomposed arrays. mpp_global_min is used to get the minimum value of a domain-...
Global sum of domain-decomposed arrays. mpp_global_sum is used to get the sum of a domain-decomposed...
Modifies the extents (compute, data and global) of a given domain.
Nullify domain list. This interface is needed in mpp_domains_test. 1-D case can be added in if needed...
Passes data from a structured grid to an unstructured grid Example usage:
Passes a data field from a structured grid to an unstructured grid Example usage:
Reorganization of distributed global arrays. mpp_redistribute is used to reorganize a distributed ar...
These routines set the axis specifications associated with the compute domains. The domain is a deriv...
These routines set the axis specifications associated with the data domains. The domain is a derived ...
These routines set the axis specifications associated with the global domains. The domain is a derive...
Private interface used for non blocking updates.
Starts non-blocking group update Must be followed up with a call to mpp_complete_group_update mpp_gro...
Interface to start halo updates mpp_start_update_domains is used to start a halo update of a domain-d...
Performs halo updates for a given domain.
Similar to mpp_update_domains , updates adjoint domains.
Pass the data from fine grid to fill the buffer to be ready to be interpolated onto coarse grid....
Pass the data from coarse grid to fill the buffer to be ready to be interpolated onto fine grid....
Private interface to unpack a vector into an array.
Type used to represent the contact between tiles.
One dimensional domain used to manage shared data access between pes.
A private type used to specify index limits for a domain decomposition.
The domain2D type contains all the necessary information to define the global, compute and data domai...
Private type to specify multiple index limits and pe information for a 2D domain.
Used to specify index limits along an axis of a domain.
Used for sending domain data between pe's.
Domain information for managing data on unstructured grids.
index bounds for use in nestSpec
used for updates on a group
domain with nested fine and course tiles
Private type to hold data for each level of nesting.
Used to specify bounds and index information for nested tiles as a linked list.
Used for nonblocking data transfer.
Type for overlapping data.
Private type for overlap specifications.
Upper and lower x and y bounds for a tile.
Private type for axis specification data for an unstructured grid.
Private type for axis specification data for an unstructured domain.
This interface uses a conversion to an integer representation of real numbers to give order-invariant...
subroutine, public mpp_memuse_end(text, unit)
End the memory collection, and report on total memory used during the execution of the model run.
subroutine, public mpp_memuse_begin
Initialize the memory module, and record the initial memory use.
subroutine mpp_sync_self(pelist, check, request, msg_size, msg_type)
This is to check if current PE's outstanding puts are complete but we can't use shmem_fence because w...
integer function stdout()
This function returns the current standard fortran unit numbers for output.
subroutine mpp_set_current_pelist(pelist, no_sync)
Set context pelist.
integer function stderr()
This function returns the current standard fortran unit numbers for error messages.
subroutine mpp_type_free(dtype)
Deallocates memory for mpp_type objects @TODO This should probably not take a pointer,...
integer function stdlog()
This function returns the current standard fortran unit numbers for log messages. Log messages,...
integer function mpp_npes()
Returns processor count for current pelist.
integer function mpp_pe()
Returns processor ID.
subroutine mpp_sync(pelist, do_self)
Synchronize PEs in list.
integer function mpp_clock_id(name, flags, grain)
Return an ID for a new or existing clock.
Scatter a vector across all PEs.
Perform parallel broadcasts.
Reduction operations. Find the max of scalar a from the PEs in pelist result is also automatically br...
Reduction operations. Find the min of scalar a from the PEs in pelist result is also automatically br...
Receive data from another PE.
Send data to a receiving PE.
Calculates sum of a given numerical array across pe's for adjoint domains.
Basic message-passing call.
Create a mpp_type variable.
Data types for generalized data transfer (e.g. MPI_Type)
Declare a pelist. The two flavors of this subroutine differ in the type of their comm/commID argument...
Get the current pelist. The two flavors of this subroutine differ in the type of their comm/commID ar...