43
44
45
46 use glob_therm_mod
47 use my_alloc_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "com01_c.inc"
56#include "com04_c.inc"
57#include "com08_c.inc"
58#include "com_xfem1.inc"
59#include "parit_c.inc"
60#include "units_c.inc"
61#include "task_c.inc"
62#include "spmd_c.inc"
63#include "scr18_c.inc"
64 INTEGER MAXBLOC,NBLOC,NBVAL,NBCOL
65 parameter(maxbloc=1000)
66 common/ptmparit/nbloc,nbval(1:maxbloc),nbcol(1:maxbloc)
67 INTEGER MAXBLOCI2,NBLOCI2,NBVALI2,NBCOLI2
68 parameter(maxbloci2=1000)
69 common/ptmpari2/nbloci2,nbvali2(1:maxbloci2),nbcoli2(1:maxbloci2)
70
71
72
73 INTEGER INDSKY(*),ADDCNE(*),(2,*),FR_NBCC(2,*),
74 . PROCNE(*),FR_ELEM(*), NISKYFI(*), ADDCNI2(*),NISKYFIE(*),
75 . PROCNI2(*), IAD_I2M(*), FR_I2M(*), FR_NBCCI2(2,*),
76 . INDSKYI2(*), IADSDP(*), IADRCP(*), ISENDP(*), IRECVP(*),
77 . PROCNE_PXFEM(*),ISENDP_PXFEM(*),IRECVP_PXFEM(*),
78 . IADSDP_PXFEM(*),IADRCP_PXFEM(*),FR_NBCC1(2,*),
79 . ADDCNE_PXFEM(*),INOD_PXFEM(*),ADDCNE_CRKXFEM(*),
80 . INOD_CRKXFEM(*),PROCNE_CRKXFEM(*),ISENDP_CRKXFEM(*),
81 . IRECVP_CRKXFEM(*),IADSDP_CRKXFEM(*),IADRCP_CRKXFEM(*)
83 . fsky(8,lsky),fskym(lsky),fthesky(lsky),condnsky(lsky)
84 type (glob_therm_) ,intent(inout) :: glob_therm
85
86
87
88 INTEGER I, J, , K, L, NC1, NC, LOC_PROC, NOD, CC, lsd, lrc,
89 . WORK(70000), LSD1,LRC1,NOD1,XFEM_REM_COUNT
90 INTEGER,DIMENSION(:),ALLOCATABLE :: INDEX
91
92 CALL my_alloc(index,2*numnod)
93
94
95
96 nisky = 0
97 DO n = 1, ninter
98 niskyfi(n) = 0
99 niskyfie(n) = 0
100 ENDDO
101 DO k=1,8
102 DO i = 1, lsky
103 fsky(k,i)=zero
104 ENDDO
105 ENDDO
106
107
108 IF (glob_therm%ITHERM_FE > 0 ) THEN
109 DO i=1,lsky
110 fthesky(i) = zero
111 ENDDO
112 ENDIF
113
114 IF (glob_therm%NODADT_THERM > 0 ) THEN
115 DO i=1,lsky
116 condnsky(i) = zero
117 ENDDO
118 ENDIF
119
120 IF (n2d == 0 .AND. iale+ieuler + glob_therm%ITHERM > 0) THEN
121 DO i = 1, lsky
122 fskym(i)=zero
123 ENDDO
124 ENDIF
125
126
127
128
129
130
131
132 DO i = 1, nspmd+1
133 fr_nbcc(1,i) = 0
134 fr_nbcc(2,i) = 0
135 ENDDO
136 IF(iplyxfem > 0 ) THEN
137 DO i = 1, nspmd+1
138 fr_nbcc1(1,i) = 0
139 fr_nbcc1(2,i) = 0
140 ENDDO
141 ENDIF
142
143 IF(icrack3d > 0 .AND. nspmd > 1)THEN
144 DO i = 1, nspmd+1
145 fr_nbcc1(1,i) = 0
146 fr_nbcc1(2,i) = 0
147 ENDDO
148 ENDIF
149
150 loc_proc = ispmd+1
151
152 lsd = 1
153 lrc = 1
154
155 lsd1 = 1
156 lrc1 = 1
157 IF(iplyxfem == 0 .AND. icrack3d == 0) THEN
158 DO i = 1, nspmd
159 iadsdp(i)=lsd
160 iadrcp(i)=lrc
161 IF(i/=loc_proc) THEN
162 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
163 nod = fr_elem(j)
164 DO cc = addcne(nod),addcne(nod+1)-1
165 IF(procne(cc)==loc_proc) THEN
166 fr_nbcc(1,i) = fr_nbcc(1,i)+1
167 isendp(lsd) = cc
168 lsd = lsd + 1
169 ELSEIF(procne(cc)==i) THEN
170 fr_nbcc(2,i) = fr_nbcc(2,i)+1
171 irecvp(lrc) = cc
172 lrc = lrc + 1
173 ENDIF
174 ENDDO
175 ENDDO
176 ENDIF
177 ENDDO
178
179 iadsdp(nspmd+1)=lsd
180 iadrcp(nspmd+1)=lrc
181 ELSE IF (iplyxfem > 0) THEN
182 DO i = 1, nspmd
183 iadsdp(i)=lsd
184 iadrcp(i)=lrc
185
186 iadsdp_pxfem(i)=lsd1
187 iadrcp_pxfem(i)=lrc1
188 IF(i/=loc_proc) THEN
189 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
190 nod = fr_elem(j)
191 DO cc = addcne(nod),addcne(nod+1)-1
192 IF(procne(cc)==loc_proc) THEN
193 fr_nbcc(1,i) = fr_nbcc(1,i)+1
194 isendp(lsd) = cc
195 lsd = lsd + 1
196 ELSEIF(procne(cc)==i) THEN
197 fr_nbcc(2,i) = fr_nbcc(2,i)+1
198 irecvp(lrc) = cc
199 lrc = lrc + 1
200 ENDIF
201 ENDDO
202 nod1 = inod_pxfem(nod)
203 IF(nod1 > 0 ) THEN
204 DO cc = addcne_pxfem(nod1),addcne_pxfem(nod1+1)-1
205 IF(procne_pxfem(cc)==loc_proc) THEN
206 fr_nbcc1(1,i) = fr_nbcc1(1,i)+1
207 isendp_pxfem(lsd1) = cc
208 lsd1 = lsd1 + 1
209 ELSEIF(procne_pxfem(cc)==i) THEN
210 fr_nbcc1(2,i) = fr_nbcc1(2,i)+1
211 irecvp_pxfem(lrc1) = cc
212 lrc1 = lrc1 + 1
213 ENDIF
214 ENDDO
215 ENDIF
216 ENDDO
217 ENDIF
218 ENDDO
219 iadsdp(nspmd+1)=lsd
220 iadrcp(nspmd+1)=lrc
221
222 iadsdp_pxfem(nspmd+1)=lsd1
223 iadrcp_pxfem(nspmd+1)=lrc1
224
225 ELSE IF (icrack3d > 0 .AND. nspmd > 1) THEN
226 DO i = 1, nspmd
227 iadsdp(i)=lsd
228 iadrcp(i)=lrc
229
230 iadsdp_crkxfem(i)=lsd1
231 iadrcp_crkxfem(i)=lrc1
232 IF (i /= loc_proc) THEN
233 DO j = iad_elem(1,i),iad_elem(1,i+1)-1
234 nod = fr_elem(j)
235 DO cc = addcne(nod),addcne(nod+1)-1
236 IF (procne(cc) == loc_proc) THEN
237 fr_nbcc(1,i) = fr_nbcc(1,i)+1
238 isendp(lsd) = cc
239 lsd = lsd + 1
240 ELSEIF (procne(cc) == i) THEN
241 fr_nbcc(2,i) = fr_nbcc(2,i)+1
242 irecvp(lrc) = cc
243 lrc = lrc + 1
244 ENDIF
245 ENDDO
246
247 nod1 = inod_crkxfem(nod)
248 IF (nod1 > 0 ) THEN
249 xfem_rem_count = 0
250 DO cc = addcne_crkxfem(nod1),addcne_crkxfem(nod1+1)-1
251 IF (procne_crkxfem(cc) == i) xfem_rem_count =
252 .
253 ENDDO
254
255 IF (xfem_rem_count /= 0) THEN
256 DO cc = addcne_crkxfem(nod1),addcne_crkxfem(nod1+1)-1
257 IF (procne_crkxfem(cc)==loc_proc) THEN
258 fr_nbcc1(1,i) = fr_nbcc1(1,i)+1
259 isendp_crkxfem(lsd1) = cc
260 lsd1 = lsd1 + 1
261 ELSEIF (procne_crkxfem(cc)==i) THEN
262 fr_nbcc1(2,i) = fr_nbcc1(2,i)+1
263 irecvp_crkxfem(lrc1) = cc
264 lrc1 = lrc1 + 1
265 ENDIF
266 ENDDO
267 ENDIF
268
269 ENDIF
270
271 ENDDO
272 ENDIF
273 ENDDO
274 iadsdp(nspmd+1)=lsd
275 iadrcp(nspmd+1)=lrc
276
277 iadsdp_crkxfem(nspmd+1)=lsd1
278 iadrcp_crkxfem(nspmd+1)=lrc1
279 ENDIF
280
281 DO i = 1, nspmd
282 fr_nbcc(1,nspmd+1) = fr_nbcc(1,nspmd+1) + fr_nbcc(1,i)
283 fr_nbcc(2,nspmd+1) = fr_nbcc(2,nspmd+1) + fr_nbcc(2,i)
284 ENDDO
285
286 IF(iplyxfem > 0) THEN
287 DO i = 1, nspmd
288 fr_nbcc1(1,nspmd+1) = fr_nbcc1(1,nspmd+1) + fr_nbcc1(1,i)
289 fr_nbcc1(2,nspmd+1) = fr_nbcc1(2,nspmd+1) + fr_nbcc1(2,i)
290 ENDDO
291 ENDIF
292
293 IF(icrack3d > 0 .AND. nspmd > 1)THEN
294 DO i = 1, nspmd
295 fr_nbcc1(1,nspmd+1) = fr_nbcc1(1,nspmd+1) + fr_nbcc1(1,i)
296 fr_nbcc1(2,nspmd+1) = fr_nbcc1(2,nspmd+1) + fr_nbcc1(2,i)
297 ENDDO
298 ENDIF
299
300
301
302 IF (ivector==1) THEN
303
304
305 DO n = 1, numnod
306 indsky(n) = addcne(n+1) - addcne(n)
307 index(n) = n
308 ENDDO
309 CALL my_orders(0,work,indsky,index,numnod,1)
310 DO n = 1, numnod
311 indsky(n) = index(n)
312 ENDDO
313
314
315
316 nc1 = -1
317 i = 1
318 nbloc = 0
319 DO WHILE (i<=numnod)
320 n = indsky(i)
321 nc = addcne(n+1)-addcne(n)
322 IF(nc==nc1) THEN
323 nbval(nbloc) = nbval(nbloc)+1
324 ELSE
325 nc1 = nc
326 nbloc = nbloc+1
327 IF (nbloc>maxbloc) THEN
328 WRITE(iout,*)
329 . ' **ERROR**: MEMORY PROBLEM IN PARITH OPTION'
330 WRITE(istdo,*)
331 . ' **ERROR**: MEMORY PROBLEM IN PARITH OPTION'
332 tstop=zero
333 RETURN
334 ENDIF
335 nbval(nbloc) = 1
336 nbcol(nbloc) = nc
337 ENDIF
338 i = i+1
339 ENDDO
340
341 ENDIF
342
343
344
345 DO i = 1, nspmd+1
346 fr_nbcci2(1,i) = 0
347 fr_nbcci2(2,i) = 0
348 ENDDO
349
350 IF(i2nsnt>0) THEN
351
352
353
354
355 loc_proc = ispmd+1
356 DO i = 1, nspmd
357 IF(i/=loc_proc) THEN
358 DO j=iad_i2m(i),iad_i2m(i+1)-1
359 nod = fr_i2m(j)
360 DO cc = addcni2(nod),addcni2(nod+1)-1
361 IF(procni2(cc)==loc_proc) THEN
362 fr_nbcci2(1,i) = fr_nbcci2(1,i)+1
363
364 ELSEIF(procni2(cc)==i) THEN
365 fr_nbcci2(2,i) = fr_nbcci2(2,i)+1
366 ENDIF
367 ENDDO
368 ENDDO
369 ENDIF
370 ENDDO
371
372 DO i = 1, nspmd
373 fr_nbcci2(1,nspmd+1) = fr_nbcci2(1,nspmd+1)+fr_nbcci2(1,i)
374 fr_nbcci2(2,nspmd+1) = fr_nbcci2(2,nspmd+1)+fr_nbcci2(2,i)
375 ENDDO
376
377
378
379 IF (ivector==1) THEN
380
381
382 DO n = 1, numnod
383 indskyi2(n) = addcni2(n+1) - addcni2(n)
384 index(n) = n
385 ENDDO
386 CALL my_orders(0,work,indskyi2,index,numnod,1)
387 DO n = 1, numnod
388 indskyi2(n) = index(n)
389 ENDDO
390
391
392
393 nc1 = -1
394 i = 1
395 nbloci2 = 0
396 DO WHILE (i<=numnod)
397 n = indskyi2(i)
398 nc = addcni2(n+1)-addcni2(n)
399 IF(nc==nc1) THEN
400 nbvali2(nbloci2) = nbvali2(nbloci2)+1
401 ELSE
402 nc1 = nc
403 nbloci2 = nbloci2+1
404 IF (nbloci2>maxbloc) THEN
405 WRITE(iout,*)
406 . ' **ERROR**: MEMORY PROBLEM IN PARITH OPTION'
407 WRITE(istdo,*)
408 . ' **ERROR**: MEMORY PROBLEM IN PARITH OPTION'
409 tstop=zero
410 RETURN
411 ENDIF
412 nbvali2(nbloci2) = 1
413 nbcoli2(nbloci2) = nc
414 ENDIF
415 i = i+1
416 ENDDO
417
418 ENDIF
419
420 END IF
421
422 DEALLOCATE(index)
423 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)