36
37
38
40
41
42
43 USE spmd_comm_world_mod, ONLY : spmd_comm_world
44#include "implicit_f.inc"
45
46
47
48#include "spmd.inc"
49
50
51
52#include "com01_c.inc"
53#include "com04_c.inc"
54#include "task_c.inc"
55#include "spmd_c.inc"
56
57
58
59 INTEGER NFVTR, FVOFF(2,*), NFVNOD, NFVPART, NFVSUBS, IDMAX,
60 . ITAB(*), NODCUT, NNWL, NNSRG, NNSMD, NNSPHG
61
62
63
64#ifdef MPI
65 INTEGER IDMAXL, I, ITAG, , IDMAXP(NSPMD-1),
66 . REQ(NSPMD-1), IERR, STAT(MPI_STATUS_SIZE,NSPMD-1),
67 . , TAB(4),MSGTYP
68 DATA msgoff/7037/
69
70 idmaxl=0
71 DO i=1,numnod
72 idmaxl=
max(idmaxl,itab(i))
73 ENDDO
74 IF (ispmd==0) THEN
75 DO i=1,nspmd-1
76 msgtyp=msgoff
77 CALL mpi_irecv(idmaxp(i), 1, mpi_integer, it_spmd(i+1),
78 . msgtyp, spmd_comm_world, req(i), ierr)
79 ENDDO
81
82 idmax=idmaxl
83 DO i=1,nspmd-1
84 idmax=
max(idmax,idmaxp(i))
85 ENDDO
86 ELSE
87 msgtyp=msgoff
88 CALL mpi_isend(idmaxl, 1, mpi_integer, it_spmd(1),
89 . msgtyp, spmd_comm_world, req, ierr)
91 ENDIF
92
95 IF (ispmd==0) THEN
96 IF (ispmd==pmain-1) THEN
98 fvoff(1,i)=numnodg+nodcut+nsect+nrwall+nnwl
99 . +nnsrg+nnsmd+nnsphg+2*numels16g+nfvnod
100 fvoff(2,i)=idmax+nfvnod
101 nfvnod=nfvnod+
fvdata(i)%NNS_ANIM
102 nfvpart=nfvpart+
fvdata(i)%NPOLH_ANIM
103 nfvsubs=nfvsubs+1
104 ELSE
105 msgtyp=msgoff
106 CALL mpi_recv(tab, 3, mpi_integer, it_spmd(pmain),
107 . msgtyp, spmd_comm_world, stat, ierr)
108
109 nfvtr=nfvtr+tab(1)
110 fvoff(1,i)=numnodg+nodcut+nsect+nrwall+nnwl
111 . +nnsrg+nnsmd+nnsphg+2*numels16g+nfvnod
112 fvoff(2,i)=idmax+nfvnod
113 nfvnod=nfvnod+tab(2)
114 nfvpart=nfvpart+tab(3)
115 nfvsubs=nfvsubs+1
116 ENDIF
117 ELSE
118 IF (ispmd==pmain-1) THEN
119 msgtyp=msgoff
122 tab(3)=
fvdata(i)%NPOLH_ANIM
123 CALL mpi_send(tab, 3, mpi_integer, it_spmd(1),
124 . msgtyp, spmd_comm_world, ierr)
125 ENDIF
126 ENDIF
127 ENDDO
128
129 IF (ispmd==0) THEN
130 tab(1)=nfvtr
131 tab(2)=nfvnod
132 tab(3)=nfvpart
133 tab(4)=nfvsubs
134 ENDIF
135 CALL mpi_bcast(tab, 4, mpi_integer, it_spmd(1),
136 . spmd_comm_world, ierr)
137 IF (ispmd/=0) THEN
138 nfvtr=tab(1)
139 nfvnod=tab(2)
140 nfvpart=tab(3)
141 nfvsubs=tab(4)
142 ENDIF
143
144#endif
145 RETURN
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_waitall(cnt, array_of_requests, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_bcast(buffer, cnt, datatype, root, comm, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
type(fvbag_spmd), dimension(:), allocatable fvspmd
type(fvbag_data), dimension(:), allocatable fvdata