OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i7buce.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "com01_c.inc"
#include "units_c.inc"
#include "warn_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine i7buce (x, irect, nsv, inacti, cand_p, nmn, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, ncontact, bminma, tzinf, maxbox, minbox, mwag, curv_max, nb_n_b, eshift, ild, ifq, ifpen, stfn, nin, stf, igap, gap_s, nsnr, ncont, renum, nsnrold, gap_m, gapmin, gapmax, curv_max_max, num_imp, gap_s_l, gap_m_l, intth, itask, bgapsmx, i_mem, kremnod, remnod, itab, flagremnode, drad, itied, cand_f, dgapload, intheat, idt_therm, nodadt_therm)
subroutine i7buce_vox (x, irect, nsv, inacti, cand_p, nmn, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, ncontact, bminma, tzinf, maxbox, minbox, mwag, curv_max, nb_n_b, eshift, ild, ifq, ifpen, stfn, nin, stf, igap, gap_s, nsnr, ncont, renum, nsnrold, gap_m, gapmin, gapmax, curv_max_max, num_imp, gap_s_l, gap_m_l, intth, itask, bgapsmx, i_mem, kremnod, remnod, itab, flagremnode, drad, itied, cand_f, dgapload, remote_s_node, list_remote_s_node, total_nb_nrtm, intheat, idt_therm, nodadt_therm)

Function/Subroutine Documentation

◆ i7buce()

subroutine i7buce ( x,
integer, dimension(4,*) irect,
integer, dimension(*) nsv,
integer inacti,
cand_p,
integer nmn,
integer nrtm,
integer nsn,
integer, dimension(*) cand_e,
integer, dimension(*) cand_n,
gap,
integer noint,
integer ii_stok,
integer ncontact,
bminma,
tzinf,
maxbox,
minbox,
integer, dimension(*) mwag,
curv_max,
integer nb_n_b,
integer eshift,
integer ild,
integer ifq,
integer, dimension(*) ifpen,
stfn,
integer nin,
stf,
integer igap,
gap_s,
integer nsnr,
integer ncont,
integer, dimension(*) renum,
integer nsnrold,
gap_m,
gapmin,
gapmax,
curv_max_max,
integer num_imp,
gap_s_l,
gap_m_l,
integer intth,
integer itask,
bgapsmx,
integer i_mem,
integer, dimension(*) kremnod,
integer, dimension(*) remnod,
integer, dimension(*) itab,
integer flagremnode,
intent(in) drad,
integer itied,
cand_f,
intent(in) dgapload,
integer, intent(in) intheat,
integer, intent(in) idt_therm,
integer, intent(in) nodadt_therm )

Definition at line 34 of file i7buce.F.

47C============================================================================
48C M o d u l e s
49C-----------------------------------------------
50 USE tri7box
51 USE message_mod
52C-----------------------------------------------
53C I m p l i c i t T y p e s
54C-----------------------------------------------
55#include "implicit_f.inc"
56#include "comlock.inc"
57C-----------------------------------------------
58C C o m m o n B l o c k s
59C-----------------------------------------------
60#include "com01_c.inc"
61C-----------------------------------------------
62C D u m m y A r g u m e n t s
63C-----------------------------------------------
64 INTEGER NMN, NRTM, NSN, NOINT,IDT,INACTI,IFQ, NIN, NSNR, NSNROLD
65 INTEGER IRECT(4,*),NSV(*),MWAG(*), RENUM(*),NUM_IMP, ITASK
66 INTEGER CAND_E(*),CAND_N(*),IFPEN(*),KREMNOD(*),REMNOD(*),ITAB(*)
67 INTEGER NCONTACT,ESHIFT,ILD,NB_N_B, IGAP, NCONT,INTTH,I_MEM,
68 * II_STOK, FLAGREMNODE, ITIED
69 INTEGER, INTENT(IN) :: INTHEAT
70 INTEGER, INTENT(IN) :: IDT_THERM
71 INTEGER, INTENT(IN) :: NODADT_THERM
72C REAL
74 . gap,tzinf,maxbox,minbox,curv_max_max,
75 . gapmin, gapmax, bminma(12),curv_max(nrtm),bgapsmx
76 my_real , INTENT(IN) :: drad,dgapload
78 . x(3,*), cand_p(*), stfn(*),
79 . stf(*), gap_s(*), gap_m(*),
80 . gap_s_l(*), gap_m_l(*), cand_f(*)
81C-----------------------------------------------
82C L o c a l V a r i a b l e s
83C-----------------------------------------------
84 INTEGER I_ADD_MAX,I_ADD
85 parameter(i_add_max = 1001)
86 INTEGER ADD(2,I_ADD_MAX)
87
88 INTEGER I, J, IP0, IP1,
89 . LOC_PROC, N, ISZNSNR,
90 . NSNFIOLD(NSPMD)
91C REAL
93 . xyzm(6,i_add_max-1), marge, aaa
94C-----------------------------------------------
95C PROV
96C-----------------------------------------------
97cc INTEGER INIVOXEL, VOXEL(LVOXEL),NBX,NBY,NBZ
98c INTEGER INIVOXEL, VOXEL(1),NBX,NBY,NBZ
99cc SAVE INIVOXEL, VOXEL
100cc DATA INIVOXEL /1/
101 INTEGER NBX,NBY,NBZ
102 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
103 INTEGER MAXSIZ
104
105
106 maxsiz = 10 * (nrtm+100)
107
108 add(1,1) = 0
109 add(1,2) = 0
110 add(2,1) = 0
111 add(2,2) = 0
112
113
114C-----------------------------------------------
115C S o u r c e L i n e s
116C-----------------------------------------------
117C
118C----- TRI PAR BOITES DES ELEMENTS ET DES NOEUDS
119C
120C-----------------------------------------------
121C SI ON A PAS ASSEZ DE MEMOIRE POUR LES PILES ON RECOMMENCE LE TRI
122C EN INCREMENTANT LE NB_N_B (NOMBRE DE NOEUDS PAR BOITE FINIE)
123C POINTEUR NOM TAILLE
124C P0........ NSN + 3 [+ NSNROLD dans le cas SPMD]
125C P1........Elt Bas Pile NRTM
126C P2........Elt PILE 2*NRTM
127
128C
129 ip0 = 1
130 ip1 = ip0 + nsn + nsnrold + 3
131C
132C-----INITIALISATION
133
134C----- BORNES DU DOMAINE DEJA CALCULEES
135C
136 i_add = 1
137 xyzm(1,i_add) = bminma(4)
138 xyzm(2,i_add) = bminma(5)
139 xyzm(3,i_add) = bminma(6)
140 xyzm(4,i_add) = bminma(1)
141 xyzm(5,i_add) = bminma(2)
142 xyzm(6,i_add) = bminma(3)
143C boite de tri
144 i_mem = 0
145C
146 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.
147 . ifq>0.OR.num_imp>0.OR.itied/=0) THEN
148 isznsnr = nsnr
149 ELSE
150 isznsnr = 0
151 END IF
152
153 marge = tzinf - (gap+dgapload)
154 CALL i7tri(
155 1 add ,nsn ,renum ,nsnr ,isznsnr ,
156 2 irect ,x ,stf ,stfn ,xyzm ,
157 3 i_add ,nsv ,maxsiz ,ii_stok ,cand_n ,
158 4 cand_e,ncontact,noint ,tzinf ,maxbox ,
159 5 minbox,i_mem ,nb_n_b ,i_add_max,eshift ,
160 6 inacti,ifq ,mwag(ip0), cand_p ,ifpen ,
161 7 nrtm ,nsnrold,igap ,gap ,gap_s ,
162 8 gap_m ,gapmin ,gapmax ,marge ,curv_max ,
163 9 nin ,gap_s_l,gap_m_l,intth, drad ,itied ,
164 a cand_f ,kremnod ,remnod ,flagremnode,dgapload,
165 b intheat, idt_therm, nodadt_therm)
166
167
168
169 234 CONTINUE
170c WRITE(6,*) "IMEM=",I_MEM
171C
172C I_MEM = 1 ==> PAS ASSEZ DE MEMOIRE PILE
173C I_MEM = 2 ==> PAS ASSEZ DE MEMOIRE CANDIDATS
174C I_MEM = 3 ==> TROP NIVEAUX PILE
175 IF (i_mem /= 0) RETURN
176
177C
178 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine i7tri(bpe, pe, bpn, pn, add, irect, x, nb_nc, nb_ec, xyzm, i_add, nsv, i_amax, xmax, ymax, zmax, maxsiz, i_stok, i_mem, nb_n_b, cand_n, cand_e, nsn, noint, tzinf, maxbox, minbox, stf, stfn, j_stok, multimp, istf, itab, gap, gap_s, gap_m, igap, gapmin, gapmax, marge, gap_s_l, gap_m_l, id, titr, ix1, ix2, ix3, ix4, nsvg, prov_n, prov_e, n11, n12, n13, pene, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, x0, y0, z0, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, stif)
Definition i7tri.F:58

◆ i7buce_vox()

subroutine i7buce_vox ( x,
integer, dimension(4,*) irect,
integer, dimension(*) nsv,
integer inacti,
cand_p,
integer nmn,
integer, intent(in) nrtm,
integer nsn,
integer, dimension(*) cand_e,
integer, dimension(*) cand_n,
gap,
integer noint,
integer ii_stok,
integer ncontact,
bminma,
tzinf,
maxbox,
minbox,
integer, dimension(*) mwag,
curv_max,
integer nb_n_b,
integer eshift,
integer ild,
integer ifq,
integer, dimension(*) ifpen,
stfn,
integer nin,
stf,
integer igap,
gap_s,
integer nsnr,
integer ncont,
integer, dimension(*) renum,
integer nsnrold,
gap_m,
gapmin,
gapmax,
curv_max_max,
integer num_imp,
gap_s_l,
gap_m_l,
integer intth,
integer itask,
bgapsmx,
integer i_mem,
integer, dimension(*) kremnod,
integer, dimension(*) remnod,
integer, dimension(*) itab,
integer flagremnode,
intent(in) drad,
integer itied,
cand_f,
intent(in) dgapload,
integer, intent(inout) remote_s_node,
integer, dimension(nsnr), intent(inout) list_remote_s_node,
integer, intent(in) total_nb_nrtm,
integer, intent(in) intheat,
integer, intent(in) idt_therm,
integer, intent(in) nodadt_therm )
Parameters
[in]nrtmnumber of segments per threads
[in]total_nb_nrtmtotal number of segments

Definition at line 194 of file i7buce.F.

207C============================================================================
208C M o d u l e s
209C-----------------------------------------------
210 USE tri7box
211 USE message_mod
212C-----------------------------------------------
213C I m p l i c i t T y p e s
214C-----------------------------------------------
215#include "implicit_f.inc"
216#include "comlock.inc"
217C-----------------------------------------------
218C C o m m o n B l o c k s
219C-----------------------------------------------
220#include "units_c.inc"
221#include "warn_c.inc"
222#include "com01_c.inc"
223C-----------------------------------------------
224C D u m m y A r g u m e n t s
225C-----------------------------------------------
226 INTEGER NMN,NSN, NOINT,IDT,INACTI,IFQ, NIN, NSNR, NSNROLD
227 INTEGER, INTENT(in) :: NRTM !< number of segments per threads
228 INTEGER, INTENT(in) :: TOTAL_NB_NRTM !< total number of segments
229 INTEGER IRECT(4,*),NSV(*),MWAG(*), RENUM(*),NUM_IMP, ITASK
230 INTEGER CAND_E(*),CAND_N(*),IFPEN(*),KREMNOD(*),REMNOD(*),ITAB(*)
231 INTEGER NCONTACT,ESHIFT,ILD,NB_N_B, IGAP, NCONT,INTTH,I_MEM,
232 * II_STOK, FLAGREMNODE, ITIED
233 INTEGER, INTENT(inout) :: REMOTE_S_NODE
234 INTEGER, INTENT(in) :: INTHEAT
235 INTEGER, INTENT(in) :: IDT_THERM
236 INTEGER, INTENT(in) :: NODADT_THERM
237 INTEGER, DIMENSION(NSNR), INTENT(inout) :: LIST_REMOTE_S_NODE
238C REAL
239 my_real
240 . gap,tzinf,maxbox,minbox,curv_max_max,
241 . gapmin, gapmax, bminma(12),curv_max(nrtm),bgapsmx
242 my_real , INTENT(IN) :: drad,dgapload
243 my_real
244 . x(3,*), cand_p(*), stfn(*),
245 . stf(*), gap_s(*), gap_m(*),
246 . gap_s_l(*), gap_m_l(*), cand_f(*)
247C-----------------------------------------------
248C L o c a l V a r i a b l e s
249C-----------------------------------------------
250 INTEGER I, J, IP0, IP1,
251 . LOC_PROC, N, ISZNSNR,
252 . NSNFIOLD(NSPMD)
253C REAL
254 my_real
255 . xyzm(6,2), marge, aaa
256C-----------------------------------------------
257C PROV
258C-----------------------------------------------
259cc INTEGER INIVOXEL, VOXEL(LVOXEL),NBX,NBY,NBZ
260c INTEGER INIVOXEL, VOXEL(1),NBX,NBY,NBZ
261cc SAVE INIVOXEL, VOXEL
262cc DATA INIVOXEL /1/
263 INTEGER NBX,NBY,NBZ
264 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
265
266C-----------------------------------------------
267C S o u r c e L i n e s
268C-----------------------------------------------
269C
270C----- TRI PAR BOITES DES ELEMENTS ET DES NOEUDS
271C
272C-----------------------------------------------
273C SI ON A PAS ASSEZ DE MEMOIRE POUR LES PILES ON RECOMMENCE LE TRI
274C EN INCREMENTANT LE NB_N_B (NOMBRE DE NOEUDS PAR BOITE FINIE)
275C POINTEUR NOM TAILLE
276C P0........ NSN + 3 [+ NSNROLD dans le cas SPMD]
277C P1........Elt Bas Pile NRTM
278C P2........Elt PILE 2*NRTM
279
280C
281 ip0 = 1
282 ip1 = ip0 + nsn + nsnrold + 3
283C
284C-----INITIALISATION
285
286C----- BORNES DU DOMAINE DEJA CALCULEES
287C
288 xyzm(1,1) = bminma(4)
289 xyzm(2,1) = bminma(5)
290 xyzm(3,1) = bminma(6)
291 xyzm(4,1) = bminma(1)
292 xyzm(5,1) = bminma(2)
293 xyzm(6,1) = bminma(3)
294C boite de tri
295 xyzm(1,2) = bminma(10)
296 xyzm(2,2) = bminma(11)
297 xyzm(3,2) = bminma(12)
298 xyzm(4,2) = bminma(7)
299 xyzm(5,2) = bminma(8)
300 xyzm(6,2) = bminma(9)
301 i_mem = 0
302C
303 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.
304 . ifq>0.OR.num_imp>0.OR.itied/=0) THEN
305 isznsnr = nsnr
306 ELSE
307 isznsnr = 0
308 END IF
309C
310C-----DEBUT DE LA PHASE DE TRI
311C
312 marge = tzinf-max(gap+dgapload,drad) ! il s agit bien de la marge
313
314c AAA = SQRT(NMN /
315c . ((BMINMA(1)-BMINMA(4))*(BMINMA(2)-BMINMA(5))
316c . +(BMINMA(2)-BMINMA(5))*(BMINMA(3)-BMINMA(6))
317c . +(BMINMA(3)-BMINMA(6))*(BMINMA(1)-BMINMA(4))))
318c
319c AAA = 0.75*AAA
320c
321c NBX = NINT(AAA*(BMINMA(1)-BMINMA(4)))
322c NBY = NINT(AAA*(BMINMA(2)-BMINMA(5)))
323c NBZ = NINT(AAA*(BMINMA(3)-BMINMA(6)))
324C
325C Work on the reduce box
326
327 IF( nmn /= 0 ) THEN
328 aaa = sqrt(nmn /
329 . ((bminma(7)-bminma(10))*(bminma(8)-bminma(11))
330 . +(bminma(8)-bminma(11))*(bminma(9)-bminma(12))
331 . +(bminma(9)-bminma(12))*(bminma(7)-bminma(10))))
332 ELSE
333 aaa = 0
334 ENDIF
335
336 aaa = 0.75*aaa
337
338 nbx = nint(aaa*(bminma(7)-bminma(10)))
339 nby = nint(aaa*(bminma(8)-bminma(11)))
340 nbz = nint(aaa*(bminma(9)-bminma(12)))
341C
342 nbx = max(nbx,1)
343 nby = max(nby,1)
344 nbz = max(nbz,1)
345
346 nbx8=nbx
347 nby8=nby
348 nbz8=nbz
349 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
350 lvoxel8 = lvoxel
351
352 IF(res8 > lvoxel8) THEN
353 aaa = lvoxel
354 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
355 aaa = aaa**(third)
356 nbx = int((nbx+2)*aaa)-2
357 nby = int((nby+2)*aaa)-2
358 nbz = int((nbz+2)*aaa)-2
359 nbx = max(nbx,1)
360 nby = max(nby,1)
361 nbz = max(nbz,1)
362 ENDIF
363
364 nbx8=nbx
365 nby8=nby
366 nbz8=nbz
367 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
368
369 IF(res8 > lvoxel8) THEN
370 nbx = min(100,max(nbx8,1))
371 nby = min(100,max(nby8,1))
372 nbz = min(100,max(nbz8,1))
373 ENDIF
374
375C initialisation complete de VOXEL
376C (en // SMP il y a possibilite de redondance de traitement mais no pb)
377 DO i=inivoxel,(nbx+2)*(nby+2)*(nbz+2)
378 voxel1(i)=0
379 ENDDO
380 inivoxel = max(inivoxel,(nbx+2)*(nby+2)*(nbz+2)+1)
381 CALL i7trivox(
382 1 nsn ,renum ,nsnr ,isznsnr ,i_mem ,
383 2 irect ,x ,stf ,stfn ,xyzm ,
384 3 nsv ,ii_stok ,cand_n ,eshift ,cand_e ,
385 4 ncontact,noint ,tzinf ,gap_s_l ,gap_m_l ,
386 5 voxel1 ,nbx ,nby ,nbz ,intth ,
387 6 inacti ,ifq ,mwag(ip0),cand_p ,ifpen ,
388 7 nrtm ,nsnrold ,igap ,gap ,gap_s ,
389 8 gap_m ,gapmin ,gapmax ,marge ,curv_max,
390 9 nin ,itask ,bgapsmx ,kremnod ,remnod ,
391 a itab ,flagremnode,drad ,itied ,cand_f ,
392 b dgapload,remote_s_node,list_remote_s_node,
393 c total_nb_nrtm,intheat,idt_therm,nodadt_therm)
394
395 234 CONTINUE
396
397C
398C I_MEM = 1 ==> PAS ASSEZ DE MEMOIRE PILE
399C I_MEM = 2 ==> PAS ASSEZ DE MEMOIRE CANDIDATS
400C I_MEM = 3 ==> TROP NIVEAUX PILE
401 IF (i_mem ==2) RETURN
402 IF(i_mem==1)THEN
403 nb_n_b = nb_n_b + 1
404 IF ( nb_n_b > ncont) THEN
405 CALL ancmsg(msgid=85,anmode=aninfo,
406 . i1=noint)
407 CALL arret(2)
408 ENDIF
409 ild = 1
410 ELSEIF(i_mem==2) THEN
411 IF(debug(1)>=1) THEN
412 iwarn = iwarn+1
413#include "lockon.inc"
414 WRITE(istdo,*)' **WARNING INTERFACE/MEMORY'
415 WRITE(iout,*)' **WARNING INTERFACE NB:',noint
416 WRITE(iout,*)' TOO MANY POSSIBLE IMPACTS'
417 WRITE(iout,*)' SIZE OF INFLUENCE ZONE IS'
418 WRITE(iout,*)' MULTIPLIED BY 0.75'
419#include "lockoff.inc"
420 ENDIF
421 RETURN
422 tzinf = three_over_4*tzinf
423C taille de boite non diminuee
424C MINBOX= THREE_OVER_4*MINBOX
425C MAXBOX= THREE_OVER_4*MAXBOX
426 IF( tzinf<=max(gap+dgapload,drad) ) THEN
427 CALL ancmsg(msgid=98,anmode=aninfo,
428 . i1=noint,c1='(I7BUCE)')
429 CALL arret(2)
430 ENDIF
431 ild = 1
432 ELSEIF(i_mem==3)THEN
433 nb_n_b = nb_n_b + 1
434 IF ( nb_n_b > ncont) THEN
435 CALL ancmsg(msgid=100,anmode=aninfo,
436 . i1=noint)
437 CALL arret(2)
438 ENDIF
439 ild = 1
440 ENDIF
441C
442 RETURN
subroutine i7trivox(nsn, renum, nsnr, isznsnr, i_mem, irect, x, stf, stfn, xyzm, nsv, ii_stok, cand_n, eshift, cand_e, mulnsn, noint, tzinf, gap_s_l, gap_m_l, voxel, nbx, nby, nbz, intth, inacti, ifq, cand_a, cand_p, ifpen, nrtm, nsnrold, igap, gap, gap_s, gap_m, gapmin, gapmax, marge, curv_max, nin, itask, bgapsmx, kremnod, remnod, itab, flagremnode, drad, itied, cand_f, dgapload, remote_s_node, list_remote_s_node, total_nb_nrtm, intheat, idt_therm, nodadt_therm)
Definition i7trivox.F:50
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
integer, dimension(lvoxel) voxel1
Definition tri7box.F:53
integer inivoxel
Definition tri7box.F:53
integer lvoxel
Definition tri7box.F:51
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