35
36
37
38
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "com01_c.inc"
50#include "task_c.inc"
51#include "scr18_c.inc"
52#include "parit_c.inc"
53#include "spmd_c.inc"
54#include "sms_c.inc"
55#include "i25edge_c.inc"
56#include "assert.inc"
57
58
59
60 INTEGER :: RESULT,NIN,NEDGE
61 INTEGER :: I_STOK_E2E,I_STOK_E2S
62 INTEGER :: CANDS_E2E(*),CANDS_E2S(*)
63 INTEGER :: IGAP , INTFRIC
64 INTEGER , INTENT(IN) :: ISTIF_MSDT
65
66
67
68#ifdef MPI
69 INTEGER :: LOC_PROC,P
70 INTEGER, DIMENSION(:), ALLOCATABLE :: IAUX,INDEX
71 INTEGER :: N,NN,I,J,NNP
72 INTEGER :: N1,N2
73 INTEGER :: NEDGE_KEPT
74 INTEGER :: IDEB
75 INTEGER :: NODFI
76 INTEGER :: LSKYFI
77 INTEGER :: L2
78
79
80
81 loc_proc = ispmd + 1
82 lskyfi = 0
83 nodfi = 0
84
85
86
87
88
89 IF(result==0) THEN
90
91
92
93 nedge_kept = 0
94 DO i = 1, i_stok_e2e
95 n = cands_e2e(i)
96 nn = n-nedge
97 IF(nn>0)THEN
99 nedge_kept = nedge_kept + 1
101 ENDIF
102 ENDIF
103 ENDDO
104
105 DO i = 1, i_stok_e2s
106 n = cands_e2s(i)
107 nn = n-nedge
108
109 IF(nn>0)THEN
111 nedge_kept = nedge_kept + 1
113 ENDIF
114 ENDIF
115 ENDDO
116
117
118
119
120 nodfi = nedge_kept * 2
121
122
124
125 ALLOCATE(
nsvfie(nin)%P(nedge_kept))
126 IF(
ASSOCIATED(
xfie(nin)%P))
DEALLOCATE(
xfie(nin)%P)
127 ALLOCATE(
xfie(nin)%P(3,nodfi))
128 IF(
ASSOCIATED(
vfie(nin)%P))
DEALLOCATE(
vfie(nin)%P)
129 ALLOCATE(
vfie(nin)%P(3,nodfi))
130 IF(
ASSOCIATED(
msfie(nin)%P))
DEALLOCATE(
msfie(nin)%P)
131 ALLOCATE(
msfie(nin)%P(nodfi))
133 ALLOCATE(
itafie(nin)%P(nodfi))
134
136 ALLOCATE(
gapfie(nin)%P(nedge_kept))
137
138
139 IF( igap == 3) THEN
142 ENDIF
144 ALLOCATE(
stifie(nin)%P(nedge_kept))
145
146 IF(istif_msdt > 0) THEN
149 ENDIF
150
153
154
157
159 ALLOCATE(
ledge_fie(nin)%P(e_ledge_size,nedge_kept))
160
161
163 ALLOCATE(
x_seg_fie(nin)%P(3,4,nedge_kept))
164
165
166 IF(idtmins == 2) THEN
173 ELSEIF(idtmins_int /= 0) THEN
178 ENDIF
179
180 IF(intfric > 0) THEN
183 ENDIF
184
185
186
187
188
189
191
192
193
194 ideb = 0
195 nn = 0
196 DO p = 1, nspmd
197 nnp = nn
198
200
205
206 nn = nn + 1
207 index(i+ideb) = nn
209
212
213
214 IF(idtmins /= 0) THEN
215 n1 = 2*(nn-1)+1
216 n2 = 2*nn
217 IF(idtmins/=2 .AND. idtmins_int == 0) THEN
218
219 ELSEIF(idtmins==2) THEN
226
229
230
231
232
233 ELSE
238 ENDIF
239 ENDIF
240
241 IF(intfric > 0) THEN
243 ENDIF
244
245
246 debug_e2e(
ledge_fie(nin)%P(e_global_id,nn)==d_es,nn)
247
248 n1 = 2*(nn-1)+1
249 xfie(nin)%P(1,n1) = xrem_edge(e_x1,i+ideb)
250 xfie(nin)%P(2,n1) = xrem_edge(e_y1,i+ideb)
251 xfie(nin)%P(3,n1) = xrem_edge(e_z1,i+ideb)
252 vfie(nin)%P(1,n1) = xrem_edge(e_vx1,i+ideb)
253 vfie(nin)%P(2,n1) = xrem_edge
254 vfie(nin)%P(3,n1) = xrem_edge(e_vz1,i+ideb)
255 msfie(nin)%P(n1) = xrem_edge(e_ms1,i+ideb)
257 n2 = 2*nn
258 xfie(nin)%P(1,n2) = xrem_edge(e_x2,i+ideb)
259 xfie(nin)%P(2,n2) = xrem_edge(e_y2,i+ideb)
260 xfie(nin)%P(3,n2) = xrem_edge(e_z2,i+ideb)
261 vfie(nin)%P(1,n2) = xrem_edge(e_vx2,i+ideb)
262 vfie(nin)%P(2,n2) = xrem_edge(e_vy2,i+ideb)
263 vfie(nin)%P(3,n2) = xrem_edge(e_vz2,i+ideb)
264 msfie(nin)%P(n2) = xrem_edge(e_ms2,i+ideb)
266
267 gapfie(nin)%p(nn) = xrem_edge(e_gap,i+ideb)
268
269 IF(igap == 3) THEN
270 gape_l_fie(nin)%P(nn) = xrem_edge(e_gapl,i+ideb)
271 ENDIF
272
273 stifie(nin)%p(nn) = xrem_edge(e_stife,i+ideb)
274
275 IF(istif_msdt > 0) THEN
277 ENDIF
278
279
280
281 l2 = e_edg_bis
282
284 l2 = e_vtx_bis
286 l2 = l2 + 3
288 l2 = l2 + 3
290 l2 = l2 + 3
292 l2 = l2 + 3
294 l2 = l2 + 3
296
297
298
299 ENDIF
300 ENDDO
302 ENDIF
303 assert(nn - nnp >= 0)
305 ENDDO
306 lskyfi = nn*multimax
307
309
310
311 ENDIF
313
314
315
316
318 IF(ALLOCATED(xrem_edge)) DEALLOCATE(xrem_edge)
319
320
321
322
323
324 IF(iparit==0) THEN
325 IF(
ASSOCIATED(
afie(nin)%P))
DEALLOCATE(
afie(nin)%P)
327 IF(nodfi>0)
ALLOCATE(
afie(nin)%P(3,nodfi*nthread))
328 IF(nodfi>0)
ALLOCATE(
stnfie(nin)%P(nodfi*nthread))
329
330 DO i = 1, nodfi*nthread
331 afie(nin)%P(1,i) = zero
332 afie(nin)%P(2,i) = zero
333 afie(nin)%P(3,i) = zero
335 ENDDO
336
337 IF(kdtint/=0)THEN
339 IF(nodfi>0)
ALLOCATE(
vscfie(nin)%P(nodfi*nthread))
340
341 DO i = 1, nodfi*nthread
343 ENDDO
344 ENDIF
345
347
348 ELSE
349
350
351
357 IF(lskyfi>0) THEN
358 ALLOCATE(
iskyfie(nin)%P(lskyfi))
360
361
362
364
367
368 ENDIF
369
370 ENDIF
371
372
373
374
375 DO i = 1, i_stok_e2e
376 n = cands_e2e(i)
377 nn = n-nedge
378 IF(nn>0)THEN
379 cands_e2e(i) = index(nn)+nedge
380 ENDIF
381 ENDDO
382
383
384
385 DO i = 1, i_stok_e2s
386 n = cands_e2s(i)
387 nn = n-nedge
388 IF(nn>0)THEN
389 cands_e2s(i) = index(nn)+nedge
390 ENDIF
391 ENDDO
392
393
394 DEALLOCATE(index)
395
396#endif
397 RETURN
type(real_pointer), dimension(:), allocatable gape_l_fie
type(real4_pointer3), dimension(:), allocatable edg_bisector_fie
type(real4_pointer3), dimension(:), allocatable vtx_bisector_fie
type(real_pointer3), dimension(:), allocatable x_seg_fie
integer, dimension(:,:), allocatable irem_edge
type(int_pointer2), dimension(:), allocatable ledge_fie
type(real_pointer), dimension(:), allocatable gapfie
type(real_pointer2), dimension(:), allocatable vfie
type(real_pointer2), dimension(:), allocatable fskyfie
type(int_pointer), dimension(:), allocatable ipartfric_fie
type(real_pointer2), dimension(:), allocatable xfie
type(int_pointer), dimension(:), allocatable iskyfie
type(int_pointer), dimension(:), allocatable nsnfie
type(real_pointer), dimension(:), allocatable stifie
type(real_pointer), dimension(:), allocatable stnfie
type(int_pointer), dimension(:), allocatable procamsfie
type(int_pointer), dimension(:), allocatable nodnxfie
type(real_pointer2), dimension(:), allocatable afie
type(int_pointer), dimension(:), allocatable nsvfie
type(int_pointer), dimension(:), allocatable nodamsfie
type(real_pointer), dimension(:), allocatable vscfie
type(int_pointer), dimension(:), allocatable itafie
integer, dimension(:), allocatable nlskyfie
type(real_pointer), dimension(:), allocatable stife_msdt_fi
type(real_pointer), dimension(:), allocatable msfie