OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i24trivox.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| i24trivox ../engine/source/interfaces/intsort/i24trivox.F
25!||--- called by ------------------------------------------------------
26!|| i24buce ../engine/source/interfaces/intsort/i24buce.F
27!||--- calls -----------------------------------------------------
28!|| i24fic_getn ../engine/source/interfaces/int24/i24for3e.F
29!|| i24sto ../engine/source/interfaces/intsort/i24sto.F
30!|| my_barrier ../engine/source/system/machine.F
31!|| spmd_oldnumcd ../engine/source/mpi/interfaces/spmd_i7tool.F
32!||--- uses -----------------------------------------------------
33!|| tri7box ../engine/share/modules/tri7box.F
34!||====================================================================
35 SUBROUTINE i24trivox(
36 1 NSN ,NSNR ,ISZNSNR ,I_MEM ,VMAXDT ,
37 2 IRECT ,X ,STF ,STFN ,XYZM ,
38 3 NSV ,II_STOK ,CAND_N ,ESHIFT ,CAND_E ,
39 4 MULNSN ,NOINT ,V ,BGAPSMX ,
40 5 VOXEL ,NBX ,NBY ,NBZ ,PMAX_GAP ,
41 6 NRTM ,GAP_S ,GAP_M ,MARGE ,CURV_MAX ,
42 7 NIN ,ITASK ,PENE_OLD,ITAB ,NBINFLG ,
43 8 MBINFLG,ILEV ,MSEGTYP ,EDGE_L2 ,IEDGE ,
44 9 ISEADD ,ISEDGE ,CAND_T ,FLAGREMNODE,KREMNOD,
45 A REMNOD ,CAND_A ,RENUM ,NSNROLD ,IRTSE ,
46 B IS2SE ,NSNE ,DGAPLOAD,INTHEAT,IDT_THERM,NODADT_THERM)
47C============================================================================
48C M o d u l e s
49C-----------------------------------------------
50 USE tri7box
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C G l o b a l P a r a m e t e r s
57C-----------------------------------------------
58#include "mvsiz_p.inc"
59c parameter setting the size for the vector (orig version is 128)
60 INTEGER NVECSZ
61 parameter(nvecsz = mvsiz)
62C-----------------------------------------------
63C C o m m o n B l o c k s
64C-----------------------------------------------
65#include "com01_c.inc"
66#include "com04_c.inc"
67#include "param_c.inc"
68#include "task_c.inc"
69C-----------------------------------------------
70C role of the routine:
71C ===================
72C classify nodes into boxes
73C search for each facet the concerned boxes
74C search for candidates
75C-----------------------------------------------
76C D u m m y A r g u m e n t s
77C
78C NOM DESCRIPTION E/S
79C
80C IRECT(4,*) ARRAY OF CONEC FACETTES E
81C X(3,*) COORDONNEES NODALES E
82C NSV NOS SYSTEMES DES NODES E
83C Xmax larger abcisse existing e
84C XMAX largest order.existing E
85C Xmax larger existing side E
86C I_STOK storage level of pairs
87C CANDIDATES impact E/S
88C CAND_N boites resultats nodes C CAND_E adresses des boites resultat elements
89C MULNSN = MULTIMP*NSN maximum size now allowed for
90C COUPLES NODES,ELT CANDIDATES
91C NOINT INTERFACE USER NUMBER
92C
93C Prov_n Provisional Cand_n (static variable in i7tri)
94C PROV_E CAND_E provisoire (variable static in i7tri)
95
96C VOXEL(ix,iy,iz) contains the local number of the first node of
97C the box
98C Next_nod (i) Next node in the same box (if /= 0)
99C Last_nod (i) Last node in the same box (if /= 0)
100C used only to go directly from the first
101C node at the last
102C-----------------------------------------------
103C D u m m y A r g u m e n t s
104C-----------------------------------------------
105 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NIN,ITASK,
106 . MULNSN,NOINT,NSNR,NBX,NBY,NBZ,IEDGE,NSNE,
107 . NSV(*),CAND_N(*),CAND_E(*),
108 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,ITAB(*),
109 . NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*),CAND_T(*),
110 . ISEADD(*) ,ISEDGE(*),FLAGREMNODE,KREMNOD(*),REMNOD(*),CAND_A(*),
111 . RENUM(*),NSNROLD,IRTSE(5,*),IS2SE(2,*)
112 INTEGER, INTENT(IN) :: INTHEAT
113 INTEGER, INTENT(IN) :: IDT_THERM
114 INTEGER, INTENT(IN) :: NODADT_THERM
115C REAL
116 my_real
117 . x(3,*),v(3,*),xyzm(6),stf(*),stfn(*),gap_s(*),
118 . gap_m(*),curv_max(*),pene_old(5,nsn),edge_l2(*),
119 . marge,bgapsmx,pmax_gap,vmaxdt
120 my_real , INTENT(IN) :: dgapload
121C-----------------------------------------------
122C L o c a l V a r i a b l e s
123C-----------------------------------------------
124 INTEGER I,J,
125 . nn,ne,k,l,j_stok,jj,
126 . prov_n(mvsiz),prov_e(mvsiz),
127 . oldnum(isznsnr), nsnf, nsnl,m,nse,ns
128C REAL
129 my_real
130 . xs,ys,zs,sx,sy,sz,s2,
131 . xmin, xmax,ymin, ymax,zmin, zmax,
132 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
133 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2
134c provisional
135 INTEGER LAST_NOD(NSN+NSNR)
136 INTEGER IX,IY,IZ,M1,M2,M3,M4,
137 . IX1,IY1,IZ1,IX2,IY2,IZ2
138 INTEGER, DIMENSION(:),ALLOCATABLE :: IIX,IIY,IIZ
139 my_real
140 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
141 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
142 INTEGER FIRST,LAST
143 SAVE IIX,IIY,IIZ
144 INTEGER, DIMENSION(NUMNOD+NSNE) :: TAG
145C --------------------------------
146C TYPE24 E2E - I24FIC_GETN method
147C --------------------------------
148 INTEGER IK1(4),IK2(4),IED,NS1,NS2,NS1ID,NS2ID
149 DATA ik1 /1,2,3,4/
150 DATA ik2 /2,3,4,1/
151C-----------------------------------------------
152 IF(itask == 0)THEN
153 ALLOCATE(next_nod(nsn+nsnr))
154 ALLOCATE(iix(nsn+nsnr))
155 ALLOCATE(iiy(nsn+nsnr))
156 ALLOCATE(iiz(nsn+nsnr))
157 END IF
158C Barrier to wait init voxel and allocation NEX_NOD
159 CALL my_barrier
160C initial construction phase of BPE and BPN moved from I7BUCE => I7TRI
161C
162 xmin = xyzm(1)
163 ymin = xyzm(2)
164 zmin = xyzm(3)
165 xmax = xyzm(4)
166 ymax = xyzm(5)
167 zmax = xyzm(6)
168
169c Dev Future: xminb larger than Xmin ...
170 xminb = xmin
171 yminb = ymin
172 zminb = zmin
173 xmaxb = xmax
174 ymaxb = ymax
175 zmaxb = zmax
176
177c!!!!!!!!!!!!!!! A VERIFIER !!!!!!!!!!!!!!!
178C In SPMD, for IFQ, finds former number of non -local candidates
179c useless for INT 24 !!!!!!!!!!!!!!!!!
180 IF(nspmd>1) THEN
181 CALL spmd_oldnumcd(renum,oldnum,isznsnr,nsnrold,intheat,idt_therm,nodadt_therm)
182 END IF
183
184C=======================================================================
185C 1 putting nodes in the boxes
186C=======================================================================
187C Note for Edge2Edge : X is no more the Radioss X Array but an extension
188C NUMNOD+SNE
189C It is updated at any cycle
190 IF(itask == 0)THEN
191 DO i=1,nsn
192 iix(i)=0
193 iiy(i)=0
194 iiz(i)=0
195 IF(stfn(i) == zero)cycle
196 j=nsv(i)
197C optimization // search for nodes included in xmin xmax of
198C processor elements
199 IF(x(1,j) < xmin) cycle
200 IF(x(1,j) > xmax) cycle
201 IF(x(2,j) < ymin) cycle
202 IF(x(2,j) > ymax) cycle
203 IF(x(3,j) < zmin) cycle
204 IF(x(3,j) > zmax) cycle
205
206 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
207 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
208 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
209
210 iix(i)=max(1,2+min(nbx,iix(i)))
211 iiy(i)=max(1,2+min(nby,iiy(i)))
212 iiz(i)=max(1,2+min(nbz,iiz(i)))
213
214 first = voxel(iix(i),iiy(i),iiz(i))
215 IF(first == 0)THEN
216c Empty Cell
217 voxel(iix(i),iiy(i),iiz(i)) = i ! first
218 next_nod(i) = 0 ! last one
219 last_nod(i) = 0 ! no last
220 ELSEIF(last_nod(first) == 0)THEN
221c cell containing one node
222c add as next node
223 next_nod(first) = i ! next
224 last_nod(first) = i ! last
225 next_nod(i) = 0 ! last one
226 ELSE
227c
228c jump to the last node of the cell
229 last = last_nod(first) ! last node in this voxel
230 next_nod(last) = i ! next
231 last_nod(first) = i ! last
232 next_nod(i) = 0 ! last one
233 ENDIF
234 ENDDO
235C=======================================================================
236C 2 putting nodes in the boxes
237C non -local candidates in SPMD
238C=======================================================================
239 DO j = 1, nsnr
240
241 IF(irem(8,j)==-1) cycle ! case IREM / ISEDGE_FI==-1 : Node was added due to Fictive Remote Node only
242 ! Do not retain in sorting, otherwise node can be candidate twice
243
244 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
245 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
246 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
247 iix(nsn+j)=max(1,2+min(nbx,iix(nsn+j)))
248 iiy(nsn+j)=max(1,2+min(nby,iiy(nsn+j)))
249 iiz(nsn+j)=max(1,2+min(nbz,iiz(nsn+j)))
250
251 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
252 IF(first == 0)THEN
253c Empty Cell
254 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j ! first
255 next_nod(nsn+j) = 0 ! last one
256 last_nod(nsn+j) = 0 ! no last
257 ELSEIF(last_nod(first) == 0)THEN
258c cell containing one node
259c add as next node
260 next_nod(first) = nsn+j ! next
261 last_nod(first) = nsn+j ! last
262 next_nod(nsn+j) = 0 ! last one
263 ELSE
264c
265c jump to the last node of the cell
266 last = last_nod(first) ! last node in this voxel
267 next_nod(last) = nsn+j ! next
268 last_nod(first) = nsn+j ! last
269 next_nod(nsn+j) = 0 ! last one
270 ENDIF
271 ENDDO
272 END IF
273C Barrier to wait task0 treatment
274 CALL my_barrier
275C=======================================================================
276C 3 Searching boxes concerning each facet
277C and creation of candidates
278C=======================================================================
279 j_stok = 0
280 IF(flagremnode == 2)THEN
281 DO i=1,numnod+nsne
282 tag(i) = 0
283 ENDDO
284 END IF
285
286 DO ne=1,nrtm
287C We do not retain the Destruit facets
288 IF(stf(ne) == zero)cycle
289
290 aaa = marge+curv_max(ne)+bgapsmx+pmax_gap+vmaxdt
291 + + gap_m(ne)+dgapload
292
293
294c It is possible to improve the algo by cutting the facet
295c in 2 (4,3,6,9 ...) if the facet is large in front of AAA and inclinee
296
297 m1 = irect(1,ne)
298 m2 = irect(2,ne)
299 m3 = irect(3,ne)
300 m4 = irect(4,ne)
301
302 xx1=x(1,m1)
303 xx2=x(1,m2)
304 xx3=x(1,m3)
305 xx4=x(1,m4)
306 xmaxe=max(xx1,xx2,xx3,xx4)
307 xmine=min(xx1,xx2,xx3,xx4)
308
309 yy1=x(2,m1)
310 yy2=x(2,m2)
311 yy3=x(2,m3)
312 yy4=x(2,m4)
313 ymaxe=max(yy1,yy2,yy3,yy4)
314 ymine=min(yy1,yy2,yy3,yy4)
315
316 zz1=x(3,m1)
317 zz2=x(3,m2)
318 zz3=x(3,m3)
319 zz4=x(3,m4)
320 zmaxe=max(zz1,zz2,zz3,zz4)
321 zmine=min(zz1,zz2,zz3,zz4)
322
323
324c surface calculation (for future candidate elimination)
325
326 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
327 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
328 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
329 s2 = sx*sx + sy*sy + sz*sz
330
331c index of voxels occupied by the facet
332
333 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
334 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
335 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
336
337 ix1=max(1,2+min(nbx,ix1))
338 iy1=max(1,2+min(nby,iy1))
339 iz1=max(1,2+min(nbz,iz1))
340
341 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
342 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
343 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
344
345 ix2=max(1,2+min(nbx,ix2))
346 iy2=max(1,2+min(nby,iy2))
347 iz2=max(1,2+min(nbz,iz2))
348
349 IF(flagremnode == 2)THEN
350 k = kremnod(2*(ne-1)+1)+1
351 l = kremnod(2*(ne-1)+2)
352 DO i=k,l
353 tag(remnod(i)) = 1
354 ENDDO
355 END if!(FLAGREMNODE == 2)THEN
356cc nbpelem = 0
357cc'nnpelem = 0
358cc'nnr0pelem = 0
359cc'nnrpelem = 0
360
361 DO iz = iz1,iz2
362 DO iy = iy1,iy2
363 DO ix = ix1,ix2
364
365cc nbpelem = nbpelem + 1
366
367 jj = voxel(ix,iy,iz)
368
369 DO WHILE(jj /= 0)
370
371cc nnpelem = nnpelem + 1
372
373 IF(jj<=nsn)THEN
374 nn=nsv(jj)
375 IF(nn == m1)GOTO 200
376 IF(nn == m2)GOTO 200
377 IF(nn == m3)GOTO 200
378 IF(nn == m4)GOTO 200
379 IF(flagremnode == 2)THEN
380 IF(tag(nn) == 1)GOTO 200
381 END IF
382C----- fictitious nodes on edges-: auto-empact excluded -------
383 IF (nn >numnod) THEN
384 ns = nn-numnod
385 CALL i24fic_getn(ns ,irtse ,is2se ,nse ,
386 + ns1 ,ns2 )
387 IF(ns1 == m1 .OR. ns2 == m1) GOTO 200
388 IF(ns1 == m2 .OR. ns2 == m2) GOTO 200
389 IF(ns1 == m3 .OR. ns2 == m3) GOTO 200
390 IF(ns1 == m4 .OR. ns2 == m4) GOTO 200
391 END IF
392 xs = x(1,nn)
393 ys = x(2,nn)
394 zs = x(3,nn)
395c PMAX_GAP is a global overestimate penetration
396c NEED to communicate in SPMD
397c VMAXDT is a local overestimate of relative incremental displacement
398c NO need to communicate in SPMD
399
400 IF (iedge > 0) THEN
401 aaa = marge + curv_max(ne)
402 + + max(gap_s(jj)+gap_m(ne)+edge_l2(jj)+dgapload
403 + ,pene_old(3,jj))+vmaxdt
404 ELSE
405 aaa = marge + curv_max(ne)
406 + + max(gap_s(jj)+gap_m(ne)+dgapload
407 + ,pene_old(3,jj))+vmaxdt
408 END IF
409 ELSE
410 j=jj-nsn
411 IF(flagremnode == 2)THEN
412 k = kremnod(2*(ne-1)+2) + 1
413 l = kremnod(2*(ne-1)+3)
414 IF(irem(8,j)==1) THEN
415 DO m=k,l
416 IF(remnod(m) == -irem(2,j) ) GOTO 200
417 ENDDO
418 ELSE
419 DO m=k,l
420 IF(remnod(m) == -irem(2,j) ) GOTO 200
421 ENDDO
422 ENDIF
423 END if!(FLAGREMNODE == 2)THEN
424C
425C Auto impact between main surface and second Edge
426C can happen with Remote nodes when Second nodes are on border between 2 domains
427C and Fictive node is remote
428 IF(irem(8,j)==1) THEN
429 ! Same than in I24FIC_GETN but for Remote Node
430 i24irempnsne=irem(7,j) ! in IREM IRTSE is located in IREM(I24IREMPNSNE,J) to IREM(I24IREMPNSNE+4,J)
431 ied = irem(i24irempnsne+4,j) ! IED = IRTSE(5,xx)
432 ns1 = irem(i24irempnsne-1+ik1(ied),j) ! NS1 = IRTSE(IK1(IED))
433 ns2 = irem(i24irempnsne-1+ik2(ied),j) ! NS2 = IRTSE(IK2(IED))
434 ns1id = irem(2,ns1) ! ITAB Remote NS1
435 ns2id = irem(2,ns2) ! ITAB Remote NS2
436 IF (ns1id == itab(m1) .OR. ns2id == itab(m1)) GOTO 200
437 IF (ns1id == itab(m2) .OR. ns2id == itab(m2)) GOTO 200
438 IF (ns1id == itab(m3) .OR. ns2id == itab(m3)) GOTO 200
439 IF (ns1id == itab(m4) .OR. ns2id == itab(m4)) GOTO 200
440 ENDIF
441 xs = xrem(1,j)
442 ys = xrem(2,j)
443 zs = xrem(3,j)
444 aaa = marge+curv_max(ne)
445c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
446c +EDGE_L2(JJ) remote
447c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
448 + + max(xrem(igapxremp,j)+gap_m(ne)+dgapload,xrem(i24xremp+6,j))
449 + + vmaxdt
450 ENDIF
451
452 IF(xs<=xmine-aaa)GOTO 200
453 IF(xs>=xmaxe+aaa)GOTO 200
454 IF(ys<=ymine-aaa)GOTO 200
455 IF(ys>=ymaxe+aaa)GOTO 200
456 IF(zs<=zmine-aaa)GOTO 200
457 IF(zs>=zmaxe+aaa)GOTO 200
458
459c underestimation of distance**2 for candidate elimination
460
461cc'nnr0pelem = nnr0pelem + 1
462
463 d1x = xs - xx1
464 d1y = ys - yy1
465 d1z = zs - zz1
466 d2x = xs - xx2
467 d2y = ys - yy2
468 d2z = zs - zz2
469 dd1 = d1x*sx+d1y*sy+d1z*sz
470 dd2 = d2x*sx+d2y*sy+d2z*sz
471 IF(dd1*dd2 > zero)THEN
472 d2 = min(dd1*dd1,dd2*dd2)
473 a2 = aaa*aaa*s2
474 IF(d2 > a2)GOTO 200
475 ENDIF
476
477cc nnrpelem = nnrpelem + 1
478
479 j_stok = j_stok + 1
480 prov_n(j_stok) = jj
481 prov_e(j_stok) = ne
482 IF(j_stok == nvsiz)THEN
483
484 CALL i24sto(
485 1 nvsiz ,irect ,x ,nsv ,ii_stok,
486 2 cand_n,cand_e ,mulnsn,noint ,marge ,
487 3 i_mem ,prov_n ,prov_e,eshift,v ,
488 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
489 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
490 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
491 7 cand_a,oldnum,nsnrold,dgapload)
492 IF(i_mem==2)GOTO 100
493 j_stok = 0
494 ENDIF
495
496 200 CONTINUE
497
498 jj = next_nod(jj)
499
500 ENDDO ! WHILE(JJ /= 0)
501
502 ENDDO
503 ENDDO
504 ENDDO
505cc nbpelg = nbpelg + nbpelem
506cc nnpelg = nnpelg + nnpelem
507cc nnrpelg = nnrpelg + nnrpelem
508cc nnr0pelg = nnr0pelg + nnr0pelem
509 IF(flagremnode == 2)THEN
510 k = kremnod(2*(ne-1)+1)+1
511 l = kremnod(2*(ne-1)+2)
512 DO i=k,l
513 tag(remnod(i)) = 0
514 ENDDO
515 END IF
516 ENDDO
517
518C-------------------------------------------------------------------------
519C end of sorting
520C-------------------------------------------------------------------------
521 IF(j_stok/=0)CALL i24sto(
522 1 j_stok,irect ,x ,nsv ,ii_stok,
523 2 cand_n,cand_e ,mulnsn,noint ,marge ,
524 3 i_mem ,prov_n ,prov_e,eshift,v ,
525 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
526 5 pene_old,nbinflg,mbinflg,ilev ,msegtyp,
527 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
528 7 cand_a,oldnum,nsnrold,dgapload)
529
530C=======================================================================
531C 4 reset nodes to zero in the boxes
532C=======================================================================
533 100 CONTINUE
534
535C Barrier to avoid reinitialization before end of sorting
536 CALL my_barrier
537 nsnf = 1 + itask*nsn / nthread
538 nsnl = (itask+1)*nsn / nthread
539
540 DO i=nsnf,nsnl
541 IF(iix(i)/=0)THEN
542 voxel(iix(i),iiy(i),iiz(i))=0
543 ENDIF
544 ENDDO
545C=======================================================================
546C 5 reset nodes to zero in the boxes
547C non -local candidates in SPMD
548C=======================================================================
549 nsnf = 1 + itask*nsnr / nthread
550 nsnl = (itask+1)*nsnr / nthread
551 DO j = nsnf, nsnl
552 IF(irem(8,j)==-1)cycle
553 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))=0
554 ENDDO
555
556C
557 CALL my_barrier()
558 IF(itask == 0)THEN
559 DEALLOCATE(next_nod)
560 DEALLOCATE(iix)
561 DEALLOCATE(iiy)
562 DEALLOCATE(iiz)
563 ENDIF
564
565 RETURN
566 END
567
#define my_real
Definition cppsort.cpp:32
if(complex_arithmetic) id
subroutine i24sto(j_stok, irect, x, nsv, ii_stok, cand_n, cand_e, mulnsn, noint, marge, i_mem, prov_n, prov_e, eshift, v, nsn, gap_s, gap_m, curv_max, nin, pene_old, nbinflg, mbinflg, ilev, msegtyp, edge_l2, iedge, iseadd, isedge, cand_t, itab, cand_a, oldnum, nsnrold, dgapload)
Definition i24sto.F:43
subroutine i24fic_getn(ns, irtse, is2se, ie, ns1, ns2)
Definition i24surfi.F:1923
subroutine i24trivox(nsn, nsnr, isznsnr, i_mem, vmaxdt, irect, x, stf, stfn, xyzm, nsv, ii_stok, cand_n, eshift, cand_e, mulnsn, noint, v, bgapsmx, voxel, nbx, nby, nbz, pmax_gap, nrtm, gap_s, gap_m, marge, curv_max, nin, itask, pene_old, itab, nbinflg, mbinflg, ilev, msegtyp, edge_l2, iedge, iseadd, isedge, cand_t, flagremnode, kremnod, remnod, cand_a, renum, nsnrold, irtse, is2se, nsne, dgapload, intheat, idt_therm, nodadt_therm)
Definition i24trivox.F:47
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:274
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
integer, dimension(:), allocatable next_nod
Definition tri7box.F:48
integer, dimension(:,:), allocatable irem
Definition tri7box.F:339
subroutine spmd_oldnumcd(renum, oldnum, nsnr, nsnrold, intheat, idt_therm, nodadt_therm)
Definition spmd_i7tool.F:38
subroutine my_barrier
Definition machine.F:31