OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i17tri.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!|| i17tri ../engine/source/interfaces/int17/i17tri.F
25!||--- called by ------------------------------------------------------
26!|| i17buce ../engine/source/interfaces/int17/i17buce.F
27!|| i17buce_pena ../engine/source/interfaces/int17/i17buce.f
28!||--- calls -----------------------------------------------------
29!|| ancmsg ../engine/source/output/message/message.F
30!|| arret ../engine/source/system/arret.F
31!|| i17cut ../engine/source/interfaces/int17/i17tri.F
32!|| i17sto ../engine/source/interfaces/int17/i17tri.F
33!||--- uses -----------------------------------------------------
34!|| message_mod ../engine/share/message_module/message_mod.F
35!||====================================================================
36 SUBROUTINE i17tri(
37 2 TZINF ,IXS ,IXS16 ,IXS20 ,NELEM ,
38 3 NELES ,MAXSIZ ,CAND_N ,CAND_E ,MINBOX ,
39 5 CONT ,NB_N_B ,EMINX ,I_STOK_GLOB,NME ,
40 6 ITASK ,NOINT ,X ,V ,A ,
41 7 MX_CAND,EMINXS ,ESH_T ,MAXSIZS ,I_ADD_MAX,
42 8 XYZM ,NMES ,NMESR ,NIN )
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE message_mod
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51#include "comlock.inc"
52C-----------------------------------------------
53C G l o b a l P a r a m e t e r s
54C-----------------------------------------------
55#include "mvsiz_p.inc"
56C-----------------------------------------------
57C C o m m o n B l o c k s
58C-----------------------------------------------
59ctmp+1
60C-----------------------------------------------
61C D u m m y A r g u m e n t s
62C-----------------------------------------------
63C PARAMETER (I_ADD_MAX = 1001) declare dans I17BUCE
64 INTEGER I_ADD_MAX, NMESR, NIN,
65 . MAXSIZ,NB_N_B,I_STOK_GLOB,NME,NMES ,ITASK,NOINT ,MX_CAND,
66 . IXS(NIXS,*),IXS16(8,*),
67 . NELES(*),CAND_N(*),CAND_E(*),NELEM(*),IXS20(12,*),ESH_T,
68 . MAXSIZS
69C REAL
71 . x(3,*),v(3,*),a(3,*),eminx(6,*),eminxs(6,*),
72 . minbox,tzinf,
73 . xyzm(6,i_add_max-1)
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER I,J,I_ADD,I_STOK,L,NB_NC,NB_EC,CONT,NE
78 INTEGER ADD(2,I_ADD_MAX) ,PROV_N(MVSIZ),PROV_E(MVSIZ),
79 . BPE(MAXSIZ/3), PE(MAXSIZ), BPN(MAXSIZS/3), PN(MAXSIZS)
80C en toute rigueur MAXSIZ = NME et MAXSIZS = NMES+NMESR
81 my_real
82 . XMIN,YMIN,ZMIN,XMAX,YMAX,ZMAX
83C------------------------------------
84C---------------------------------
85C Init des boite main
86C---------------------------------
87C
88 nb_ec = nme
89 DO l=1,nb_ec
90 i = l + esh_t
91 bpe(l) = i
92 ENDDO
93C
94C-----INITIALISATION DES ADRESSES ET X,Y,Z
95C
96C ADDE ADDN X Y Z
97C 1 1 XMIN YMIN ZMIN
98C 1 1 XMAX YMAX ZMAX
99 i_stok = 0
100 add(1,1) = 0
101 add(2,1) = 0
102 add(1,2) = 0
103 add(2,2) = 0
104 i_add = 1
105 xmin = xyzm(1,i_add)
106 ymin = xyzm(2,i_add)
107 zmin = xyzm(3,i_add)
108 xmax = xyzm(4,i_add)
109 ymax = xyzm(5,i_add)
110 zmax = xyzm(6,i_add)
111 nb_nc = 0
112 DO i=1,nmes
113C
114 IF(eminxs(4,i)>xmin.AND.
115 . eminxs(5,i)>ymin.AND.
116 . eminxs(6,i)>zmin.AND.
117 . eminxs(1,i)<xmax.AND.
118 . eminxs(2,i)<ymax.AND.
119 . eminxs(3,i)<zmax)THEN
120 nb_nc=nb_nc+1
121 bpn(nb_nc) = i
122 ENDIF
123 ENDDO
124C
125C Prise en compte candidats non locaux en SPMD
126C
127 DO i = nmes+1, nmes+nmesr
128 nb_nc = nb_nc + 1
129 bpn(nb_nc) = i
130 ENDDO
131C
132C-----------------------------------------------
133C Boucle sur les boites
134C-----------------------------------------------
135 DO WHILE (cont==1)
136C-----------------------------------------------
137C Decoupage de l'espace en 2 suivant X Y ou Z
138C-----------------------------------------------
139 CALL i17cut(
140 1 bpe ,pe ,bpn ,pn ,add ,
141 2 x ,nb_nc ,nb_ec ,xyzm ,i_add ,
142 3 neles ,maxsiz ,cand_n ,cand_e ,minbox ,
143 4 cont ,nb_n_b ,i_add_max,eminx ,nelem ,
144 5 i_stok ,ixs ,ixs16 ,ixs20 ,tzinf ,
145 6 i_stok_glob,prov_n ,prov_e ,v ,a ,
146 7 mx_cand ,eminxs ,maxsizs ,nmes ,nin )
147 ENDDO
148C-----------------------------------------------
149C test de fin ou d'erreur
150C-----------------------------------------------
151C CONT = 0 ==> FIN
152C CONT = -1 ==> PAS ASSEZ DE MEMOIRE PILE
153C CONT = -2 ==> PAS ASSEZ DE MEMOIRE CANDIDATS
154C CONT = -3 ==> TROP NIVEAUX PILE
155 IF(cont==0)THEN
156 IF(i_stok/=0)CALL i17sto(
157 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
158 2 cont ,mx_cand )
159 ENDIF
160 IF(cont==-1) THEN
161 CALL ancmsg(msgid=86,anmode=aninfo,i1=noint)
162 CALL arret(2)
163 ELSEIF(cont==-2) THEN
164 CALL ancmsg(msgid=86,anmode=aninfo,i1=noint)
165 CALL arret(2)
166 ELSEIF(cont==-3)THEN
167 CALL ancmsg(msgid=90,anmode=aninfo,i1=noint)
168 CALL arret(2)
169 ENDIF
170C
171C
172 RETURN
173 END
174!||====================================================================
175!|| i17cut ../engine/source/interfaces/int17/i17tri.F
176!||--- called by ------------------------------------------------------
177!|| i17tri ../engine/source/interfaces/int17/i17tri.F
178!||--- calls -----------------------------------------------------
179!|| i17sto ../engine/source/interfaces/int17/i17tri.f
180!||--- uses -----------------------------------------------------
181!|| tri7box ../engine/share/modules/tri7box.F
182!||====================================================================
183 SUBROUTINE i17cut(
184 1 BPE ,PE ,BPN ,PN ,ADD ,
185 2 X ,NB_NC ,NB_EC ,XYZM ,I_ADD ,
186 3 NELES ,MAXSIZ ,CAND_N ,CAND_E ,MINBOX ,
187 4 CONT ,NB_N_B ,I_ADD_MAX,EMINX ,NELEM ,
188 5 I_STOK ,IXS ,IXS16 ,IXS20 ,TZINF ,
189 6 I_STOK_GLOB,PROV_N ,PROV_E ,V ,A ,
190 7 MX_CAND ,EMINXS ,MAXSIZS ,NMES ,NIN )
191C============================================================================
192C M o d u l e s
193C-----------------------------------------------
194 USE tri7box
195C-----------------------------------------------
196C I m p l i c i t T y p e s
197C-----------------------------------------------
198#include "implicit_f.inc"
199C-----------------------------------------------
200C G l o b a l P a r a m e t e r s
201C-----------------------------------------------
202#include "mvsiz_p.inc"
203C-----------------------------------------------
204C C o m m o n B l o c k s
205C-----------------------------------------------
206#include "com01_c.inc"
207C-----------------------------------------------
208C ROLE DE LA ROUTINE:
209C ===================
210C CLASSE LES ELETS DE BPE ET LES NOEUDS DE BPN EN TWO ZONES
211C > OU < A UNE FRONTIERE ICI DETERMINEE ET SORT LE TOUT
212C DANS bpe,hpe, et bpn,hpn
213C-----------------------------------------------
214C D u m m y A r g u m e n t s
215C
216C NOM DESCRIPTION E/S
217C
218C BPE TABLEAU DES FACETTES A TRIER E/S
219C ET DU RESULTAT COTE MAX
220C PE TABLEAU DES FACETTES S
221C RESULTAT COTE MIN
222C BPN TABLEAU DES NOEUDS A TRIER E/S
223C ET DU RESULTAT COTE MAX
224C PN TABLEAU DES NOEUDS S
225C RESULTAT COTE MIN
226C ADD(2,*) TABLEAU DES ADRESSES E/S
227C 1.......ADRESSES NOEUDS
228C 2.......ADRESSES ELEMENTS
229C ZYZM(6,*) TABLEAU DES XYZMIN E/S
230C 1.......XMIN BOITE
231C 2.......YMIN BOITE
232C 3.......ZMIN BOITE
233C 4.......XMAX BOITE
234C 5.......YMAX BOITE
235C 6.......ZMAX BOITE
236C EMINX(6,*) TABLEAU DES COORD ELEM MIN/MAX E
237C X(3,*) COORDONNEES NODALES E
238C NB_NC NOMBRE DE NOEUDS CANDIDATS E/S
239C NB_EC NOMBRE D'ELTS CANDIDATS E/S
240C I_ADD POSITION DANS LE TAB DES ADRESSES E/S
241C NSV NOS SYSTEMES DES NOEUDS E
242C XMAX plus grande abcisse existante E
243C XMAX plus grande ordonn. existante E
244C XMAX plus grande cote existante E
245C MAXSIZ TAILLE MEMOIRE MAX POSSIBLE E
246C I_STOK niveau de stockage des couples
247C candidats impact E/S
248C CAND_N boites resultats noeuds
249C CAND_E adresses des boites resultat elements
250C COUPLES NOEUDS,ELT CANDIDATS
251C MINBOX TAILLE MIN BUCKET
252C
253C-----------------------------------------------
254C D u m m y A r g u m e n t s
255C-----------------------------------------------
256 INTEGER NB_NC,NB_EC,I_ADD,MAXSIZ,I_STOK_GLOB,I_STOK,MX_CAND,NIN,
257 . NB_N_B,I_ADD_MAX,CONT ,IXS(NIXS,*),IXS16(8,*),
258 . ADD(2,*),BPE(*),PE(*),BPN(*),PN(*),
259 . CAND_N(*),CAND_E(*),NELEM(*),NELES(*),
260 . PROV_N(*) ,PROV_E(*) ,IXS20(12,*),MAXSIZS, NMES
261C REAL
262 my_real
263 . X(3,*),V(3,*),A(3,*),XYZM(6,*),EMINX(6,*),EMINXS(6,*),
264 . MINBOX,TZINF
265C-----------------------------------------------
266C L o c a l V a r i a b l e s
267C-----------------------------------------------
268 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,
269 . nes,ne,le,les,k,l,ncand_prov,n16,n20,lesl
270C REAL
271 my_real
272 . dx,dy,dz,dsup,seuil,xx,yy,zz
273C
274C-----------------------------------------------------------
275C
276C
277C 1- TEST ARRET = BOITE VIDE
278C BOITE TROP PETITE
279C BOITE NE CONTENANT QU'ONE NOEUD
280C PLUS DE MEMOIRE DISPONIBLE
281C
282C-------------------TEST SUR MEMOIRE DEPASSEE------------
283C
284 IF(add(2,i_add)+nb_ec>maxsiz) THEN
285C PLUS DE PLACE DANS LA PILE DES ELEMENTS MAINS BOITES TROP PETITES
286 cont = -1
287ctmp+++
288c WRITE(istdo,*)'MAXSIZ = ',MAXSIZ
289c WRITE(istdo,*)'ADD(2,I_ADD) = ',ADD(2,I_ADD)
290c WRITE(istdo,*)'NB_EC = ',NB_EC
291ctmp---
292 RETURN
293 ENDIF
294 IF(add(1,i_add)+nb_nc>maxsizs) THEN
295C PLUS DE PLACE DANS LA PILE DES ELEMENTS SECONDS BOITES TROP PETITES
296 cont = -1
297 RETURN
298 ENDIF
299C
300C--------------------TEST SUR BOITE VIDES--------------
301C
302 IF(nb_ec/=0.AND.nb_nc/=0) THEN
303C
304 dx = xyzm(4,i_add) - xyzm(1,i_add)
305 dy = xyzm(5,i_add) - xyzm(2,i_add)
306 dz = xyzm(6,i_add) - xyzm(3,i_add)
307 dsup= max(dx,dy,dz)
308C
309C-------------------TEST SUR FIN DE BRANCHE ------------
310C 1.1- STOCKAGE DU OU DES NOEUD CANDIDAT ET DES ELTS CORRESP.
311C VIRER LES INUTILES
312C
313C NCAND_PROV=NB_EC*NB_NC
314C NCAND_PROV negatif qd NB_EC*NB_NC > 2e31
315C
316 IF(nb_ec+nb_nc<=128) THEN
317 ncand_prov = nb_ec*nb_nc
318 ELSE
319 ncand_prov = 129
320 ENDIF
321C
322 IF(dsup<minbox.OR.nb_nc<=nb_n_b.OR.ncand_prov<=128)THEN
323C necessaire qd NB_NC<=NB_N_B ou DSUP<MINBOX et NB_EC+NB_NC>128
324 ncand_prov = nb_ec*nb_nc
325 DO l=1,ncand_prov
326 i = 1+(l-1)/nb_nc
327 j = l-(i-1)*nb_nc
328 le = bpe(i)
329 les = bpn(j)
330 ne = nelem(le)
331 IF(les<=nmes)THEN ! candidat local
332 nes = neles(les)
333 IF(ne/=nes.AND.
334 . eminxs(4,les)>eminx(1,le)-tzinf.AND.
335 . eminxs(5,les)>eminx(2,le)-tzinf.AND.
336 . eminxs(6,les)>eminx(3,le)-tzinf.AND.
337 . eminxs(1,les)<eminx(4,le)+tzinf.AND.
338 . eminxs(2,les)<eminx(5,le)+tzinf.AND.
339 . eminxs(3,les)<eminx(6,le)+tzinf)THEN
340 i_stok = i_stok + 1
341 prov_n(i_stok) = les
342 prov_e(i_stok) = le
343 IF(i_stok==mvsiz-1)CALL i17sto(
344 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
345 2 cont ,mx_cand )
346 IF(cont==-2)RETURN
347 ENDIF
348 ELSE ! partie complementaire SPMD
349 lesl = les-nmes
350 IF(xrem(4,lesl)>eminx(1,le)-tzinf.AND.
351 . xrem(5,lesl)>eminx(2,le)-tzinf.AND.
352 . xrem(6,lesl)>eminx(3,le)-tzinf.AND.
353 . xrem(1,lesl)<eminx(4,le)+tzinf.AND.
354 . xrem(2,lesl)<eminx(5,le)+tzinf.AND.
355 . xrem(3,lesl)<eminx(6,le)+tzinf)THEN
356 i_stok = i_stok + 1
357 prov_n(i_stok) = les
358 prov_e(i_stok) = le
359 IF(i_stok==mvsiz-1)CALL i17sto(
360 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
361 2 cont ,mx_cand )
362 IF(cont==-2)RETURN
363 ENDIF
364 END IF
365 ENDDO
366C-----------------------------------------------------------
367 ELSE
368C-----------------------------------------------------------
369C
370C
371C 2- PHASE DE TRI SUR LA MEDIANE SELON LA + GDE DIRECTION
372C
373C
374C-----------------------------------------------------------
375C
376C 2.1- DETERMINER LA DIRECTION A DIVISER X,Y OU Z
377C
378 dir = 1
379 IF(dy==dsup) THEN
380 dir = 2
381 ELSE IF(dz==dsup) THEN
382 dir = 3
383 ENDIF
384 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*half
385C
386C 2.2- DIVISER LES ELEMENTS SECONDS EN TWO ZONES
387C
388 nb_ncn= 0
389 nb_ncn1= 0
390 addnn= add(1,i_add)
391 nb_ecn= 0
392 addne= add(2,i_add)
393#include "vectorize.inc"
394 DO i=1,nb_nc
395 les = bpn(i)
396 IF(les<=nmes)THEN
397 IF(eminxs(dir,les)<seuil) THEN
398C ON STOCKE DANS LA PILE PN
399 nb_ncn1 = nb_ncn1 + 1
400 addnn = addnn + 1
401 pn(addnn) = les
402 ENDIF
403 END IF
404 ENDDO
405 IF(nspmd>1)THEN ! partie complementaire SPMD
406#include "vectorize.inc"
407 DO i=1,nb_nc
408 les = bpn(i)
409 IF(les>nmes)THEN
410 lesl = les-nmes
411 IF(xrem(dir,lesl)<seuil) THEN
412C ON STOCKE DANS LA PILE PN
413 nb_ncn1 = nb_ncn1 + 1
414 addnn = addnn + 1
415 pn(addnn) = les
416 END IF
417 END IF
418 END DO
419 END IF
420C
421#include "vectorize.inc"
422 DO i=1,nb_nc
423 les = bpn(i)
424 IF(les<=nmes)THEN
425 IF(eminxs(dir+3,les)>=seuil) THEN
426C ON STOCKE EN ECRASANT PROGRESSIVEMENT BPN
427 nb_ncn = nb_ncn + 1
428 bpn(nb_ncn) = les
429 ENDIF
430 ENDIF
431 ENDDO
432 IF(nspmd>1)THEN ! partie complementaire SPMD
433#include "vectorize.inc"
434 DO i=1,nb_nc
435 les = bpn(i)
436 IF(les>nmes)THEN
437 lesl = les-nmes
438 IF(xrem(dir+3,lesl)>=seuil) THEN
439C ON STOCKE EN ECRASANT PROGRESSIVEMENT BPN
440 nb_ncn = nb_ncn + 1
441 bpn(nb_ncn) = les
442 ENDIF
443 ENDIF
444 ENDDO
445 END IF
446C
447C 2.3- DIVISER LES ELEMENTS MAINS
448C
449 nb_ecn= 0
450 addne= add(2,i_add)
451 IF(nb_ncn1==0) THEN
452C pas d'elements seconds dans la deuxieme boite
453#include "vectorize.inc"
454 DO i=1,nb_ec
455 le = bpe(i)
456 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
457C ON STOCKE EN ECRASANT PROGRESSIVEMENT BPE
458 nb_ecn = nb_ecn + 1
459 bpe(nb_ecn) = le
460 ENDIF
461 ENDDO
462 ELSEIF(nb_ncn==0) THEN
463C pas d'elements seconds dans la premiere boite
464#include "vectorize.inc"
465 DO i=1,nb_ec
466 le = bpe(i)
467 IF(eminx(dir,le)-tzinf<seuil) THEN
468C ON STOCKE DANS LA PILE PE
469 addne = addne + 1
470 pe(addne) = le
471 ENDIF
472 ENDDO
473 ELSE
474#include "vectorize.inc"
475 DO i=1,nb_ec
476 le = bpe(i)
477 IF(eminx(dir,le)-tzinf<seuil) THEN
478C ON STOCKE DANS LA PILE PE
479 addne = addne + 1
480 pe(addne) = le
481 ENDIF
482 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
483C ON STOCKE EN ECRASANT PROGRESSIVEMENT BPE
484 nb_ecn = nb_ecn + 1
485 bpe(nb_ecn) = le
486 ENDIF
487 ENDDO
488 ENDIF
489C
490C 2.4- REMPLIR LES TABLEAUX D'ADRESSES
491C
492 add(1,i_add+1) = addnn
493 add(2,i_add+1) = addne
494C-----on remplit les min de la boite suivante et les max de la courante
495 xyzm(1,i_add+1) = xyzm(1,i_add)
496 xyzm(2,i_add+1) = xyzm(2,i_add)
497 xyzm(3,i_add+1) = xyzm(3,i_add)
498 xyzm(4,i_add+1) = xyzm(4,i_add)
499 xyzm(5,i_add+1) = xyzm(5,i_add)
500 xyzm(6,i_add+1) = xyzm(6,i_add)
501 xyzm(dir,i_add+1) = seuil
502 xyzm(dir+3,i_add) = seuil
503C
504 nb_nc = nb_ncn
505 nb_ec = nb_ecn
506C on incremente le niveau de descente avant de sortir
507 i_add = i_add + 1
508 IF(i_add+1>=i_add_max) THEN
509 cont = -3
510 RETURN
511 ENDIF
512C=======================================================================
513 cont=1
514ctmp+++
515c WRITE(istdo,*)'CONT = ',CONT
516c WRITE(istdo,*)'I_ADD = ',I_ADD
517c WRITE(istdo,*)'ADD(2,I_ADD) = ',ADD(2,I_ADD)
518c WRITE(istdo,*)'NB_EC = ',NB_EC
519c WRITE(istdo,*)'NB_NC = ',NB_NC
520c WRITE(istdo,*)'dir seuil = ',dir, seuil
521c WRITE(istdo,*)'Xmin = ',XYZM(1,I_ADD)
522c WRITE(istdo,*)'Ymin = ',XYZM(2,I_ADD)
523c WRITE(istdo,*)'Zmin = ',XYZM(3,I_ADD)
524c WRITE(istdo,*)'Xmax = ',XYZM(4,I_ADD)
525c WRITE(istdo,*)'Ymax = ',XYZM(5,I_ADD)
526c WRITE(istdo,*)'Zmax = ',XYZM(6,I_ADD)
527ctmp---
528 RETURN
529C=======================================================================
530 ENDIF
531 ENDIF
532C-------------------------------------------------------------------------
533C TEST FIN DU TRI
534C-------------------------------------------------------------------------
535 IF (i_add==1) THEN
536 cont = 0
537 RETURN
538 ENDIF
539C-----------------------------------------------------------
540C
541C 3- FIN DE BRANCHE ou BOITE VIDE
542C
543C-----------------------------------------------------------
544C-------------------------------------------------------------------------
545C on decremente le niveau de descente avant de recommencer
546C-------------------------------------------------------------------------
547 i_add = i_add - 1
548C-------------------------------------------------------------------------
549C IL FAUT COPIER LES BAS DES PILES DANS BAS_DE_PILE CORRESPONDANTS
550C AVANT DE REDESCENDRE DANS LA BRANCHE MITOYENNE
551C-------------------------------------------------------------------------
552C 3.1- PILE DES NOEUDS
553C
554 nb_nc = add(1,i_add+1) - add(1,i_add)
555 DO i=1,nb_nc
556 bpn(i) = pn(add(1,i_add)+i)
557 ENDDO
558C
559C 3.2- PILE DES ELEMENTS
560C
561 nb_ec = add(2,i_add+1) - add(2,i_add)
562 DO i=1,nb_ec
563 bpe(i) = pe(add(2,i_add)+i)
564 ENDDO
565C=======================================================================
566 cont=1
567 RETURN
568C=======================================================================
569 END
570!||====================================================================
571!|| i17sto ../engine/source/interfaces/int17/i17tri.F
572!||--- called by ------------------------------------------------------
573!|| i17cut ../engine/source/interfaces/int17/i17tri.F
574!|| i17tri ../engine/source/interfaces/int17/i17tri.F
575!||--- uses -----------------------------------------------------
576!|| icontact_mod ../engine/share/modules/icontact_mod.F
577!||====================================================================
578 SUBROUTINE i17sto(
579 1 I_STOK,I_STOK_GLOB,PROV_N ,CAND_N,PROV_E,CAND_E,
580 2 CONT ,MX_CAND )
581C-----------------------------------------------
582C M o d u l e s
583C-----------------------------------------------
584 USE icontact_mod
585C-----------------------------------------------
586C I m p l i c i t T y p e s
587C-----------------------------------------------
588#include "implicit_f.inc"
589#include "comlock.inc"
590C-----------------------------------------------
591C D u m m y A r g u m e n t s
592C-----------------------------------------------
593 INTEGER I_STOK,I_STOK_GLOB,CONT ,MX_CAND,
594 . PROV_N(*),CAND_N(*),PROV_E(*),CAND_E(*)
595C-----------------------------------------------
596C L o c a l V a r i a b l e s
597C-----------------------------------------------
598 INTEGER I,J_STOK_GLOB
599 INTEGER LE,LES,NEXT,IC,J
600C-----------------------------------------------
601C Recherche de doublons
602 J=0
603
604#include "lockon.inc"
605
606 DO I=1,I_STOK
607 LES = PROV_N(I)
608 LE = PROV_E(I)
609 NEXT = ADCHAINE(LES)
610 IF(NEXT == 0)THEN
611 J=J+1
612 PROV_N(J) = LES
613 PROV_E(J) = LE
614 MX_AD = MX_AD + 1
615 IF(MX_AD > MX_CAND)THEN
616 CONT = -2
617#include "lockoff.inc"
618 RETURN
619 ENDIF
620 ADCHAINE(LES) = MX_AD
621 CHAINE(1,MX_AD) = LE
622 CHAINE(2,MX_AD) = 0
623 goto 200
624 ENDIF
625 100 continue
626 IC = NEXT
627 IF(LE == CHAINE(1,IC))goto 200
628 NEXT = CHAINE(2,IC)
629 IF(NEXT /= 0)goto 100
630 J=J+1
631 PROV_N(J) = LES
632 PROV_E(J) = LE
633 MX_AD = MX_AD + 1
634 IF(MX_AD > MX_CAND)THEN
635 CONT = -2
636#include "lockoff.inc"
637 RETURN
638 ENDIF
639 CHAINE(2,IC) = MX_AD
640 CHAINE(1,MX_AD) = LE
641 CHAINE(2,MX_AD) = 0
642 200 continue
643 ENDDO
644 I_STOK = J
645
646 J_STOK_GLOB = I_STOK_GLOB
647 IF(I_STOK_GLOB + I_STOK<=MX_CAND)THEN
648 I_STOK_GLOB = I_STOK_GLOB + I_STOK
649 ELSE
650 CONT = -2
651 ENDIF
652#include "lockoff.inc"
653 IF(CONT==-2)RETURN
654C
655 DO I=1,I_STOK
656 CAND_N(I+J_STOK_GLOB)=PROV_N(I)
657 CAND_E(I+J_STOK_GLOB)=PROV_E(I)
658 ENDDO
659C
660 I_STOK = 0
661C-----------------------------------------------
662 RETURN
663 END
#define my_real
Definition cppsort.cpp:32
subroutine i17buce(neles, ixs, ixs16, ixs20, nelem, nme, lwat, nmes, cand_e, cand_n, noint, i_stok_glob, tzinf, minbox, eminxm, xsav, itask, x, v, a, mx_cand, eminxs, esh_t, frots, ks, isendto, ircvfrom, weight, nin, nmesr, vcom)
Definition i17buce.F:184
subroutine i17buce_pena(neles, ixs, ixs16, ixs20, nelem, nme, lwat, nmes, cand_e, cand_n, noint, i_stok_glob, tzinf, minbox, eminxm, xsav, itask, x, v, a, mx_cand, eminxs, esh_t, frots, ks, nin, nmesr, nb_n_b, bminma)
Definition i17buce.F:41
subroutine i17tri(tzinf, ixs, ixs16, ixs20, nelem, neles, maxsiz, cand_n, cand_e, minbox, cont, nb_n_b, eminx, i_stok_glob, nme, itask, noint, x, v, a, mx_cand, eminxs, esh_t, maxsizs, i_add_max, xyzm, nmes, nmesr, nin)
Definition i17tri.F:43
subroutine i17sto(i_stok, i_stok_glob, prov_n, cand_n, prov_e, cand_e, cont, mx_cand)
Definition i17tri.F:581
subroutine i17cut(bpe, pe, bpn, pn, add, x, nb_nc, nb_ec, xyzm, i_add, neles, maxsiz, cand_n, cand_e, minbox, cont, nb_n_b, i_add_max, eminx, nelem, i_stok, ixs, ixs16, ixs20, tzinf, i_stok_glob, prov_n, prov_e, v, a, mx_cand, eminxs, maxsizs, nmes, nin)
Definition i17tri.F:191
#define max(a, b)
Definition macros.h:21
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
subroutine arret(nn)
Definition arret.F:87