17 type (hecmwST_local_mesh) :: hecMESH
19 integer(kind=kint):: ierr
20 call mpi_barrier (hecmesh%MPI_COMM, ierr)
27 double precision :: sbuf(*)
28 integer(kind=kint) :: sc(*)
29 integer(kind=kint) :: disp(*)
30 double precision :: rbuf(*)
31 integer(kind=kint) :: rc
32 integer(kind=kint) :: root
33 integer(kind=kint) :: comm
35 integer(kind=kint) :: ierr
36 call mpi_scatterv( sbuf, sc, disp, mpi_double_precision, &
37 rbuf, rc, mpi_double_precision, &
49 integer(kind=kint) :: operation
66 integer(kind=kint) :: sbuf(*)
67 integer(kind=kint) :: rval
68 integer(kind=kint) :: root
69 integer(kind=kint) :: comm
71 integer(kind=kint) :: ierr
72 call mpi_scatter( sbuf, 1, mpi_integer, &
73 & rval, 1, mpi_integer, root, comm, ierr )
82 integer(kind=kint) :: sval
83 integer(kind=kint) :: rbuf(*)
84 integer(kind=kint) :: root
85 integer(kind=kint) :: comm
87 integer(kind=kint) :: ierr
88 call mpi_gather( sval, 1, mpi_integer, &
89 & rbuf, 1, mpi_integer, root, comm, ierr )
98 integer(kind=kint) :: sval
99 integer(kind=kint) :: rbuf(*)
100 integer(kind=kint) :: comm
102 integer(kind=kint) :: ierr
103 call mpi_allgather( sval, 1, mpi_integer, &
104 & rbuf, 1, mpi_integer, comm, ierr )
111 & rbuf, rc, root, comm)
114 real(kind=
kreal) :: sbuf(*)
115 integer(kind=kint) :: scs(*)
116 integer(kind=kint) :: disp(*)
117 real(kind=
kreal) :: rbuf(*)
118 integer(kind=kint) :: rc
119 integer(kind=kint) :: root
120 integer(kind=kint) :: comm
122 integer(kind=kint) :: ierr
123 call mpi_scatterv( sbuf, scs, disp, mpi_real8, &
124 & rbuf, rc, mpi_real8, root, comm, ierr )
126 rbuf(1:rc)=sbuf(1:rc)
131 & rbuf, rcs, disp, root, comm)
134 real(kind=
kreal) :: sbuf(*)
135 integer(kind=kint) :: sc
136 real(kind=
kreal) :: rbuf(*)
137 integer(kind=kint) :: rcs(*)
138 integer(kind=kint) :: disp(*)
139 integer(kind=kint) :: root
140 integer(kind=kint) :: comm
142 integer(kind=kint) :: ierr
143 call mpi_gatherv( sbuf, sc, mpi_real8, &
144 & rbuf, rcs, disp, mpi_real8, root, comm, ierr )
146 rbuf(1:sc)=sbuf(1:sc)
151 & rbuf, rcs, disp, root, comm)
154 integer(kind=kint) :: sbuf(*)
155 integer(kind=kint) :: sc
156 integer(kind=kint) :: rbuf(*)
157 integer(kind=kint) :: rcs(*)
158 integer(kind=kint) :: disp(*)
159 integer(kind=kint) :: root
160 integer(kind=kint) :: comm
162 integer(kind=kint) :: ierr
163 call mpi_gatherv( sbuf, sc, mpi_integer, &
164 & rbuf, rcs, disp, mpi_integer, root, comm, ierr )
166 rbuf(1:sc)=sbuf(1:sc)
173 integer(kind=kint) :: sval
174 integer(kind=kint) :: rval
175 integer(kind=kint):: op, comm, ierr
177 call mpi_allreduce(sval, rval, 1, mpi_integer, &
187 integer(kind=kint) :: sbuf(*)
188 integer(kind=kint) :: sc
189 integer(kind=kint) :: rbuf(*)
190 integer(kind=kint) :: rc
191 integer(kind=kint) :: comm
193 integer(kind=kint) :: ierr
194 call mpi_alltoall( sbuf, sc, mpi_integer, &
195 & rbuf, rc, mpi_integer, comm, ierr )
197 rbuf(1:sc)=sbuf(1:sc)
205 integer(kind=kint) :: sbuf(*)
206 integer(kind=kint) :: sc
207 integer(kind=kint) :: dest
208 integer(kind=kint) :: tag
209 integer(kind=kint) :: comm
210 integer(kind=kint) :: req
212 integer(kind=kint) :: ierr
213 call mpi_isend(sbuf, sc, mpi_integer, &
214 & dest, tag, comm, req, ierr)
222 integer(kind=kint) :: sc
223 double precision,
dimension(sc) :: sbuf
224 integer(kind=kint) :: dest
225 integer(kind=kint) :: tag
226 integer(kind=kint) :: comm
227 integer(kind=kint) :: req
229 integer(kind=kint) :: ierr
230 call mpi_isend(sbuf, sc, mpi_double_precision, &
231 & dest, tag, comm, req, ierr)
239 integer(kind=kint) :: rbuf(*)
240 integer(kind=kint) :: rc
241 integer(kind=kint) :: source
242 integer(kind=kint) :: tag
243 integer(kind=kint) :: comm
244 integer(kind=kint) :: req
246 integer(kind=kint) :: ierr
247 call mpi_irecv(rbuf, rc, mpi_integer, &
248 & source, tag, comm, req, ierr)
256 integer(kind=kint) :: rc
257 double precision,
dimension(rc) :: rbuf
258 integer(kind=kint) :: source
259 integer(kind=kint) :: tag
260 integer(kind=kint) :: comm
261 integer(kind=kint) :: req
263 integer(kind=kint) :: ierr
264 call mpi_irecv(rbuf, rc, mpi_double_precision, &
265 & source, tag, comm, req, ierr)
272 integer(kind=kint) :: cnt
273 integer(kind=kint) :: reqs(*)
274 integer(kind=kint) :: stats(HECMW_STATUS_SIZE,*)
276 integer(kind=kint) :: ierr
277 call mpi_waitall(cnt, reqs, stats, ierr)
285 integer(kind=kint) :: rbuf(*)
286 integer(kind=kint) :: rc
287 integer(kind=kint) :: source
288 integer(kind=kint) :: tag
289 integer(kind=kint) :: comm
290 integer(kind=kint) :: stat(HECMW_STATUS_SIZE)
292 integer(kind=kint) :: ierr
293 call mpi_recv(rbuf, rc, mpi_integer, &
294 & source, tag, comm, stat, ierr)
302 integer(kind=kint) :: rc
303 double precision,
dimension(rc) :: rbuf
304 integer(kind=kint) :: source
305 integer(kind=kint) :: tag
306 integer(kind=kint) :: comm
307 integer(kind=kint) :: stat(HECMW_STATUS_SIZE)
309 integer(kind=kint) :: ierr
310 call mpi_recv(rbuf, rc, mpi_double_precision, &
311 & source, tag, comm, stat, ierr)
322 integer(kind=kint) :: n, hec_op,op, comm, ierr
323 double precision,
dimension(n) :: val
324 double precision,
dimension(n) :: VALM
326 select case( hec_op )
336 call mpi_allreduce(val,valm,n,mpi_double_precision,op,comm,ierr)
338 integer(kind=kint) :: i
348 integer(kind=kint) :: hec_op, comm
349 double precision :: s1, s2
350 double precision,
dimension(1) :: val
351 double precision,
dimension(1) :: VALM
373 integer(kind=kint):: n, ntag
374 real(kind=
kreal),
dimension(n) :: val
375 type (hecmwST_local_mesh) :: hecMESH
377 integer(kind=kint):: ierr
378 real(kind=
kreal),
dimension(:),
allocatable :: valm
380 integer(kind=kint) :: i
381 real(kind=
kreal),
dimension(n) :: tmp
382 type(c_devptr) :: tmp_dev
384 tmp_dev = acc_malloc(
kreal * n)
385 call acc_map_data(tmp, tmp_dev,
kreal * n)
399 & (tmp, valm, n, mpi_double_precision, mpi_sum, &
400 & hecmesh%MPI_COMM, ierr)
404 & (val, valm, n, mpi_double_precision, mpi_sum, &
405 & hecmesh%MPI_COMM, ierr)
411 & (val, valm, n, mpi_double_precision, mpi_max, &
412 & hecmesh%MPI_COMM, ierr)
417 & (val, valm, n, mpi_double_precision, mpi_min, &
418 & hecmesh%MPI_COMM, ierr)
422 call acc_unmap_data(tmp)
423 call acc_free(tmp_dev)
434 integer(kind=kint):: ntag
435 real(kind=
kreal) :: s
438 real(kind=
kreal),
dimension(1) :: val
455 integer(kind=kint):: n, ntag
456 integer(kind=kint),
dimension(n) :: val
459 integer(kind=kint):: ierr
460 integer(kind=kint),
dimension(:),
allocatable :: VALM
466 & (val, valm, n, mpi_integer, mpi_sum, &
467 & hecmesh%MPI_COMM, ierr)
472 & (val, valm, n, mpi_integer, mpi_max, &
473 & hecmesh%MPI_COMM, ierr)
478 & (val, valm, n, mpi_integer, mpi_min, &
479 & hecmesh%MPI_COMM, ierr)
491 integer(kind=kint):: ntag, s
492 type (hecmwST_local_mesh) :: hecMESH
494 integer(kind=kint),
dimension(1) :: val
505 integer(kind=kint):: ntag
507 type (hecmwST_local_mesh) :: hecMESH
509 integer(kind=kint):: ierr
515 & (flag, flagm, 1, mpi_logical, mpi_lor, &
516 & hecmesh%MPI_COMM, ierr)
521 & (flag, flagm, 1, mpi_logical, mpi_land, &
522 & hecmesh%MPI_COMM, ierr)
537 integer(kind=kint):: n, nbase
538 real(kind=
kreal),
dimension(n) :: val
539 type (hecmwST_local_mesh) :: hecMESH
541 integer(kind=kint):: ierr
542 call mpi_bcast (val, n, mpi_double_precision, nbase, hecmesh%MPI_COMM, ierr)
549 integer(kind=kint):: n, nbase
550 real(kind=
kreal),
dimension(n) :: val
551 integer(kind=kint):: comm
553 integer(kind=kint):: ierr
554 call mpi_bcast (val, n, mpi_double_precision, nbase, comm, ierr)
561 integer(kind=kint):: nbase, ierr
562 real(kind=
kreal) :: s
563 type (hecmwST_local_mesh) :: hecMESH
565 real(kind=
kreal),
dimension(1) :: val
567 call mpi_bcast (val, 1, mpi_double_precision, nbase, hecmesh%MPI_COMM, ierr)
575 integer(kind=kint):: nbase
576 real(kind=
kreal) :: s
577 integer(kind=kint):: comm
579 integer(kind=kint):: ierr
580 real(kind=
kreal),
dimension(1) :: val
582 call mpi_bcast (val, 1, mpi_double_precision, nbase, comm, ierr)
594 integer(kind=kint):: n, nbase
595 integer(kind=kint),
dimension(n) :: val
596 type (hecmwST_local_mesh) :: hecMESH
598 integer(kind=kint):: ierr
599 call mpi_bcast (val, n, mpi_integer, nbase, hecmesh%MPI_COMM, ierr)
606 integer(kind=kint):: n, nbase
607 integer(kind=kint),
dimension(n) :: val
608 integer(kind=kint):: comm
610 integer(kind=kint):: ierr
611 call mpi_bcast (val, n, mpi_integer, nbase, comm, ierr)
618 integer(kind=kint):: nbase, s
619 type (hecmwST_local_mesh) :: hecMESH
621 integer(kind=kint):: ierr
622 integer(kind=kint),
dimension(1) :: val
624 call mpi_bcast (val, 1, mpi_integer, nbase, hecmesh%MPI_COMM, ierr)
632 integer(kind=kint):: nbase, s
633 integer(kind=kint):: comm
635 integer(kind=kint):: ierr
636 integer(kind=kint),
dimension(1) :: val
638 call mpi_bcast (val, 1, mpi_integer, nbase, comm, ierr)
650 integer(kind=kint):: n, nn, nbase
651 character(len=n) :: val(nn)
652 type (hecmwST_local_mesh) :: hecMESH
654 integer(kind=kint):: ierr
655 call mpi_bcast (val, n*nn, mpi_character, nbase, hecmesh%MPI_COMM,&
663 integer(kind=kint):: n, nn, nbase
664 character(len=n) :: val(nn)
665 integer(kind=kint):: comm
667 integer(kind=kint):: ierr
668 call mpi_bcast (val, n*nn, mpi_character, nbase, comm,&
682 integer(kind=kint):: n, m
683 real(kind=
kreal),
dimension(m*n) :: val
684 type (hecmwST_local_mesh) :: hecMESH
686 integer(kind=kint):: ns, nr
687 real(kind=
kreal),
dimension(:),
allocatable :: ws, wr
689 if( hecmesh%n_neighbor_pe == 0 )
return
691 ns = hecmesh%import_index(hecmesh%n_neighbor_pe)
692 nr = hecmesh%export_index(hecmesh%n_neighbor_pe)
694 allocate (ws(m*ns), wr(m*nr))
696 & ( n, m, hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
697 & hecmesh%import_index, hecmesh%import_item, &
698 & hecmesh%export_index, hecmesh%export_item, &
699 & ws, wr, val , hecmesh%MPI_COMM, hecmesh%my_rank)
713 integer(kind=kint):: n, m
714 integer(kind=kint),
dimension(m*n) :: val
715 type (hecmwST_local_mesh) :: hecMESH
717 integer(kind=kint):: ns, nr
718 integer(kind=kint),
dimension(:),
allocatable :: WS, WR
720 if( hecmesh%n_neighbor_pe == 0 )
return
722 ns = hecmesh%import_index(hecmesh%n_neighbor_pe)
723 nr = hecmesh%export_index(hecmesh%n_neighbor_pe)
725 allocate (ws(m*ns), wr(m*nr))
727 & ( n, m, hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
728 & hecmesh%import_index, hecmesh%import_item, &
729 & hecmesh%export_index, hecmesh%export_item, &
730 & ws, wr, val , hecmesh%MPI_COMM, hecmesh%my_rank)
745 integer(kind=kint):: n, m
746 real(kind=
kreal),
dimension(m*n) :: val
747 type (hecmwST_local_mesh) :: hecMESH
749 integer(kind=kint):: ns, nr
750 real(kind=
kreal),
dimension(:),
allocatable :: ws, wr
752 if( hecmesh%n_neighbor_pe == 0 )
return
754 ns = hecmesh%export_index(hecmesh%n_neighbor_pe)
755 nr = hecmesh%import_index(hecmesh%n_neighbor_pe)
757 allocate (ws(m*ns), wr(m*nr))
759 & ( n, m, hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
760 & hecmesh%import_index, hecmesh%import_item, &
761 & hecmesh%export_index, hecmesh%export_item, &
762 & ws, wr, val , hecmesh%MPI_COMM, hecmesh%my_rank)
778 integer(kind=kint):: n, m, ireq
779 real(kind=
kreal),
dimension(m*n) :: val
780 type (hecmwST_local_mesh) :: hecMESH
782 if( hecmesh%n_neighbor_pe == 0 )
return
785 & ( n, m, hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
786 & hecmesh%import_index, hecmesh%import_item, &
787 & hecmesh%export_index, hecmesh%export_item, &
788 & val , hecmesh%MPI_COMM, hecmesh%my_rank, ireq)
803 integer(kind=kint):: ireq
804 type (hecmwST_local_mesh) :: hecMESH
806 if( hecmesh%n_neighbor_pe == 0 )
return
823 integer(kind=kint):: n, m
824 integer(kind=kint),
dimension(m*n) :: val
825 type (hecmwST_local_mesh) :: hecMESH
827 integer(kind=kint):: ns, nr
828 integer(kind=kint),
dimension(:),
allocatable :: WS, WR
830 if( hecmesh%n_neighbor_pe == 0 )
return
832 ns = hecmesh%export_index(hecmesh%n_neighbor_pe)
833 nr = hecmesh%import_index(hecmesh%n_neighbor_pe)
835 allocate (ws(m*ns), wr(m*nr))
837 & ( n, m, hecmesh%n_neighbor_pe, hecmesh%neighbor_pe, &
838 & hecmesh%import_index, hecmesh%import_item, &
839 & hecmesh%export_index, hecmesh%export_item, &
840 & ws, wr, val , hecmesh%MPI_COMM, hecmesh%my_rank)
subroutine hecmw_solve_send_recv_i(N, m, NEIBPETOT, NEIBPE, STACK_IMPORT, NOD_IMPORT, STACK_EXPORT, NOD_EXPORT, WS, WR, X, SOLVER_COMM, my_rank)
subroutine hecmw_solve_rev_send_recv_i(N, M, NEIBPETOT, NEIBPE, STACK_IMPORT, NOD_IMPORT, STACK_EXPORT, NOD_EXPORT, WS, WR, X, SOLVER_COMM, my_rank)
subroutine hecmw_solve_isend_irecv_wait(m, ireq)
subroutine hecmw_solve_isend_irecv(N, M, NEIBPETOT, NEIBPE, STACK_IMPORT, NOD_IMPORT, STACK_EXPORT, NOD_EXPORT, X, SOLVER_COMM, my_rank, ireq)
subroutine hecmw_solve_send_recv(N, m, NEIBPETOT, NEIBPE, STACK_IMPORT, NOD_IMPORT, STACK_EXPORT, NOD_EXPORT, WS, WR, X, SOLVER_COMM, my_rank)
subroutine hecmw_solve_rev_send_recv(N, M, NEIBPETOT, NEIBPE, STACK_IMPORT, NOD_IMPORT, STACK_EXPORT, NOD_EXPORT, WS, WR, X, SOLVER_COMM, my_rank)
integer(kind=kint), parameter hecmw_land
integer(kind=kint), parameter hecmw_sum
integer(kind=kint), parameter hecmw_prod
integer(kind=kint), parameter hecmw_max
integer(kind=4), parameter kreal
integer(kind=kint), parameter hecmw_lor
integer(kind=kint), parameter hecmw_min
subroutine hecmw_assemble_r(hecMESH, val, n, m)
subroutine hecmw_bcast_c_comm(val, n, nn, nbase, comm)
subroutine hecmw_gatherv_real(sbuf, sc, rbuf, rcs, disp, root, comm)
subroutine hecmw_update_r(hecMESH, val, n, m)
subroutine hecmw_isend_int(sbuf, sc, dest, tag, comm, req)
subroutine hecmw_scatterv_real(sbuf, scs, disp, rbuf, rc, root, comm)
subroutine hecmw_recv_int(rbuf, rc, source, tag, comm, stat)
subroutine hecmw_bcast_r_comm(val, n, nbase, comm)
subroutine hecmw_bcast_c(hecMESH, val, n, nn, nbase)
subroutine hecmw_isend_r(sbuf, sc, dest, tag, comm, req)
subroutine hecmw_allreduce_i1(hecMESH, s, ntag)
subroutine hecmw_gather_int_1(sval, rbuf, root, comm)
subroutine hecmw_bcast_i_comm(val, n, nbase, comm)
subroutine hecmw_allreduce_i(hecMESH, val, n, ntag)
subroutine hecmw_allreduce_r(hecMESH, val, n, ntag)
subroutine hecmw_bcast_i1(hecMESH, s, nbase)
subroutine hecmw_allgather_int_1(sval, rbuf, comm)
subroutine hecmw_allreduce_dp1(s1, s2, hec_op, comm)
subroutine hecmw_waitall(cnt, reqs, stats)
subroutine hecmw_assemble_i(hecMESH, val, n, m)
subroutine hecmw_allreduce_dp(val, VALM, n, hec_op, comm)
subroutine hecmw_bcast_r(hecMESH, val, n, nbase)
subroutine hecmw_irecv_int(rbuf, rc, source, tag, comm, req)
subroutine hecmw_bcast_r1_comm(s, nbase, comm)
subroutine hecmw_scatter_int_1(sbuf, rval, root, comm)
subroutine hecmw_irecv_r(rbuf, rc, source, tag, comm, req)
subroutine hecmw_allreduce_l1(hecMESH, flag, ntag)
subroutine hecmw_bcast_i(hecMESH, val, n, nbase)
subroutine hecmw_update_r_async(hecMESH, val, n, m, ireq)
subroutine hecmw_update_i(hecMESH, val, n, m)
subroutine hecmw_recv_r(rbuf, rc, source, tag, comm, stat)
subroutine hecmw_allreduce_r1(hecMESH, s, ntag)
subroutine hecmw_alltoall_int(sbuf, sc, rbuf, rc, comm)
subroutine hecmw_update_r_wait(hecMESH, ireq)
subroutine hecmw_bcast_r1(hecMESH, s, nbase)
subroutine hecmw_scatterv_dp(sbuf, sc, disp, rbuf, rc, root, comm)
subroutine hecmw_allreduce_int_1(sval, rval, op, comm)
subroutine hecmw_gatherv_int(sbuf, sc, rbuf, rcs, disp, root, comm)
subroutine hecmw_barrier(hecMESH)
integer(kind=kint) function hecmw_operation_hec2mpi(operation)
subroutine hecmw_bcast_i1_comm(s, nbase, comm)