46#include "implicit_f.inc"
56 INTEGER,
INTENT(IN) :: NSPMD
57 INTEGER,
INTENT(IN) :: IPARI(NPARI,*)
58 TYPE(),
INTENT(IN) :: INTERCEP(3,NINTER)
59 TYPE(intbuf_struct_),
INTENT(INOUT) :: INTBUF_TAB(*)
67 INTEGER :: I,J,K, NRTM, NTY, CS,CM
68 INTEGER :: SH_EDGE,SOL_EDGE
69 INTEGER,
DIMENSION(:),
ALLOCATABLE :: CEP_EDGE,CEPM
70 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LOCAL_ID_EDG
71 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
72 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LOCAL_ID
74 INTEGER :: nbCand, nbCandE2E, nbCandE2S, sizeM
75 INTEGER,
DIMENSION(:),
ALLOCATABLE :: CANDS,CANDM
76 INTEGER,
DIMENSION(:),
ALLOCATABLE :: localIdx
77 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: secondaryRemoteCount
78 INTEGER :: LOCAL_CAND_COUNT(NSPMD)
87 sh_edge =iedge-10*sol_edge
89 IF(nty/=25 .OR. iedge==0) cycle
92 ALLOCATE(cep_edge(nedge))
93 ALLOCATE(local_id_edg(nedge))
94 ALLOCATE(local_id_seg(nrtm))
96 . intbuf_tab(nin)%LEDGE,
102 nbcande2e = intbuf_tab(nin)%I_STOK_E(1)
103 nbcande2s = intbuf_tab(nin)%I_STOK_E(2)
106 nbcand = nbcande2e + nbcande2s
107 ALLOCATE(localidx(nbcand))
108 ALLOCATE(secondaryremotecount(nspmd,nspmd
109 ALLOCATE(candm(nbcand))
110 ALLOCATE(cands(nbcand))
111 ALLOCATE(cepm(nedge+nrtm))
112 ALLOCATE(local_id(nedge+nrtm))
113 local_id(1:nedge) = local_id_edg(1:nedge)
114 local_id(nedge+1:nedge+nrtm) = local_id_seg(1:nrtm)
117 candm(1:nbcande2e) = intbuf_tab(nin)%CANDM_E2E(1:nbcande2e)
118 cands(1:nbcande2e) = intbuf_tab(nin)%CANDS_E2E(1:nbcande2e)
119 candm(nbcande2e+1:nbcand) = nedge + intbuf_tab(nin)%CANDM_E2S(1:nbcande2s)
120 cands(nbcande2e+1:nbcand) = intbuf_tab(nin)%CANDS_E2S(1:nbcande2s)
121 cepm(1:nedge) = cep_edge(1:nedge)
122 cepm(nedge+1:nedge+nrtm) = intercep(1,nin)%P(1:nrtm) - 1
134 . secondaryremotecount,
139 ALLOCATE(
i25_fie(nin,i)%NEDGE(nspmd))
140 i25_fie(nin,i)%NEDGE(1:nspmd) = 0
142 i25_fie(nin,i)%NEDGE(j) =
i25_fie(nin,i)%NEDGE(j) + secondaryremotecount(j,i)
143 i25_fie(nin,i)%NEDGE_TOT =
i25_fie(nin,i)%NEDGE_TOT + secondaryremotecount(j,i)
150 local_cand_count(1:nspmd) = 0
152 cm = cepm(intbuf_tab(nin)%CANDM_E2E(i)) + 1
153 local_cand_count(cm) = 1 + local_cand_count(cm)
161 local_cand_count(i) = 0
164 j = cepm(intbuf_tab(nin)%CANDM_E2E(i)) + 1
165 local_cand_count(j) = 1 + local_cand_count(j)
166 k = local_cand_count(j)
171 IF(cands(i) < 0)
THEN
172 i25_fie(nin,j)%ID(abs(cands(i))) = localidx(i)
173 assert(localidx(i) > 0)
180 local_cand_count(1:nspmd) = 0
182 cm = cepm(intbuf_tab(nin)%CANDM_E2S(i) + nedge ) + 1
183 local_cand_count(cm) = 1 + local_cand_count(cm)
190 local_cand_count(i) = 0
193 j = cepm(intbuf_tab(nin)%CANDM_E2S(i) + nedge) + 1
194 local_cand_count(j) = 1 + local_cand_count(j)
195 k = local_cand_count(j)
200 IF(cands(i+nbcande2e) < 0)
THEN
201 i25_fie(nin,j)%ID(abs(cands(i+nbcande2e))) = localidx(i+nbcande2e)
202 assert(localidx(i+nbcande2e) > 0 )
219 DEALLOCATE(secondaryremotecount)
222 DEALLOCATE(local_id_seg)
223 DEALLOCATE(local_id_edg)
243#include "implicit_f.inc"
247#include "param_c.inc"
251 INTEGER,
INTENT(IN) :: NEDGE,NRTM,NSPMD
252 INTEGER,
INTENT(INOUT) :: LEDGE(NLEDGE,NEDGE)
253 INTEGER,
INTENT(IN) :: CEP_SEG(NRTM)
254 INTEGER,
INTENT(INOUT) :: LOCAL_ID_SEG()
255 INTEGER,
INTENT(INOUT) :: CEP_EDGE(NEDGE)
256 INTEGER,
INTENT(INOUT) ::(NEDGE)
260 INTEGER :: NRTM_LOCAL(NSPMD)
261 INTEGER :: NB_FREE_EDGES(NSPMD)
262 INTEGER :: NB_INTERNAL_EDGES(NSPMD)
263 INTEGER :: NB_BOUNDARY_EDGES_LOCAL(NSPMD)
264 INTEGER :: NB_BOUNDARY_EDGES_REMOTE(NSPMD)
265 INTEGER :: EDGE_LOCAL(NSPMD)
267 INTEGER :: I,E1,E2,K1,K2,K
269 nrtm_local(1:nspmd) = 0
270 edge_local(1:nspmd) = 0
271 nb_free_edges(1:nspmd) = 0
272 nb_internal_edges(1:nspmd) = 0
273 nb_boundary_edges_local(1:nspmd) = 0
274 nb_boundary_edges_remote(1:nspmd) = 0
276 cep_edge(1:nedge) = -1
283 nb_free_edges(ispmd) = nb_free_edges(ispmd) + 1
284 edge_local(ispmd) = edge_local(ispmd) + 1
285 cep_edge(i) = ispmd - 1
286 local_id_edg(i) = edge_local(ispmd)
287 assert(ledge(9,i) == 0)
288 ledge(9,i) = ispmd - 1
289 ledge(10,i) = local_id_edg(i)
299 IF(ispmd /= cep_seg(e2)) cycle
300 nb_internal_edges(ispmd) = nb_internal_edges(ispmd) + 1
301 edge_local(ispmd) = edge_local(ispmd) + 1
302 cep_edge(i) = ispmd - 1
303 local_id_edg(i) = edge_local(ispmd)
304 assert(ledge(9,i) == 0)
305 ledge(9,i) = ispmd - 1
306 ledge(10,i) = local_id_edg(i)
316 IF(ispmd == cep_seg(e2)) cycle
317 nb_boundary_edges_local(ispmd) = nb_boundary_edges_local(ispmd) + 1
318 edge_local(ispmd) = edge_local(ispmd) +1
319 cep_edge(i) = ispmd - 1
320 local_id_edg(i) = edge_local(ispmd)
321 assert(ledge(9,i) == 0)
322 ledge(9,i) = ispmd - 1
323 ledge(10,i) = local_id_edg(i)
329 assert(cep_edge(i) >= 0)
334 nrtm_local(ispmd) = nrtm_local(ispmd) + 1
335 local_id_seg(k) = -nrtm_local(ispmd)