OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i11trivox1.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!|| i11trivox1 ../starter/source/interfaces/inter3d1/i11trivox1.F
25!||--- called by ------------------------------------------------------
26!|| i11buc_vox1 ../starter/source/interfaces/inter3d1/i11buc1.F
27!||--- calls -----------------------------------------------------
28!|| i11resetvoxel1 ../starter/source/interfaces/inter3d1/i11trivox1.F
29!|| i11sto_vox1 ../starter/source/interfaces/inter3d1/i11sto.f
30!|| ireallocate ../starter/share/modules1/realloc_mod.F
31!||--- uses -----------------------------------------------------
32!|| realloc_mod ../starter/share/modules1/realloc_mod.F
33!|| tri11 ../starter/share/modules1/tri11_mod.F
34!|| tri7box ../starter/share/modules1/tri7box.F
35!||====================================================================
36 SUBROUTINE i11trivox1(
37 1 IRECTS, IRECTM , X , NRTM ,
38 2 XYZM , II_STOK, CAND_S, CAND_M ,NSN ,
39 3 NOINT , TZINF , I_MEM , ADDCM , IADFIN ,
40 5 CHAINE, NRTS , ITAB , MULTIMP,
41 6 IAUTO , VOXEL , NBX , NBY ,NBZ ,
42 7 GAPMIN, DRAD , MARGE , GAP_S , GAP_M ,
43 8 GAP_S_L,GAP_M_L,IGAP ,FLAGREMNODE,KREMNODE,
44 3 REMNODE,DGAPLOAD)
45C============================================================================
46C M o d u l e s
47C-----------------------------------------------
48 USE realloc_mod
49 USE tri7box
50 USE tri11
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-----------------------------------------------
60C C o m m o n B l o c k s
61C-----------------------------------------------
62#include "param_c.inc"
63C-----------------------------------------------
64C M e s s a g e P a s s i n g
65C-----------------------------------------------
66!-----------------------------------------------
67! SUBROUTINE AIM
68! ==============
69! VOXEL SEARCH to find couple (edge,edge) with penetration among all possible couples defined by secnd and main side.
70! Temporary found candidate are written in Temporary array PROV_S and PROV_M in order to optimise OpenMP performances.
71! There is no order.
72! PROV_S(i),PROV_M(i) : is a potential candidate couple because edges are geometrically near each other.
73! I11STO subroutine will compute if penetration is positive and if couple was not already stoked, in this case, candidate is stoked in CAND(S(i), CAND_M(i)
74!
75C-----------------------------------------------
76C D u m m y A r g u m e n t s
77C
78C NOM DESCRIPTION E/S
79C
80C ADD(2,*) TABLEAU DES ADRESSES E/S
81C 1.........ADRESSES NOEUDS
82C 2.........ADRESSES ELEMENTS
83C ZYZM(6,*) TABLEAU DES XYZMIN E/S
84C 1.........XMIN BOITE
85C 2.........YMIN BOITE
86C 3.........ZMIN BOITE
87C 4.........XMAX BOITE
88C 5.........YMAX BOITE
89C 6.........ZMAX BOITE
90C IRECTM(2,*) TABLEAU DES CONEC E
91C 1.........NODE 1 main EDGE
92C 2.........NODE 2 main EDGE
93C IRECTS(2,*) TABLEAU DES CONEC E
94C 1.........NODE 1 SECND EDGE
95C 2.........NODE 2 SECND EDGE
96C X(3,*) COORDONNEES NODALES E
97C II_STOK niveau de stockage des couples
98C candidats impact E/S
99C CAND_S boites resultats noeuds
100C CAND_M adresses des boites resultat elements
101C NOINT NUMERO USER DE L'INTERFACE
102C TZINF TAILLE ZONE INFLUENCE
103C VOXEL(*,*,*) VOXEL PARTIONNEMENT DE l'ESPACE (NBX+2,NBY+2,NBZ+2)
104C Stocke dans chaque voxel les edge secnd.
105C En pratique designe la premier arrete d'une liste chainee
106C MAX_ADD adresse maximum pour les tableaux chaines
107C NSN NSN TAILLE MAX ADMISE MAINTENANT POUR LES
108C COUPLES NOEUDS,ELT CANDIDATS
109C-----------------------------------------------
110C D u m m y A r g u m e n t s
111C-----------------------------------------------
112 INTEGER ::
113 . NRTM,NRTS,MULTIMP,IADFIN,IGAP,
114 . NSN,NOINT,ITAB(*),NBX,NBY,NBZ,IAUTO,
115 . IRECTS(2,NRTS),IRECTM(2,NRTM),FLAGREMNODE
116 INTEGER ITASK
117 INTEGER, INTENT(INOUT) ::
118 . CAND_S(*),CAND_M(*),ADDCM(*),CHAINE(2,*),
119 . VOXEL(1:NBX+2,1:NBY+2,1:NBZ+2), I_MEM,II_STOK,
120 . kremnode(*),remnode(*)
121 my_real
122 . ,INTENT(IN) ::
123 . x(3,*),xyzm(6,*),
124 . gapmin, drad, marge, tzinf, dgapload,
125 . gap_s(*), gap_m(*), gap_s_l(*), gap_m_l(*)
126C-----------------------------------------------
127C L o c a l V a r i a b l e s
128C-----------------------------------------------
129 INTEGER
130 . I,J,SS1,SS2,IBUG,
131 . N1,N2,MM1,MM2, iN1, iN2, iM1, iM2, K,L,
132 . PROV_S(2*MVSIZ),PROV_M(2*MVSIZ), !tableau provisoire de candidats envoye a I11STOK
133 . IX1,IY1,IZ1,IX2,IY2,IZ2,
134 . IX,IY,IZ, FIRST_ADD,
135 . I_STOK, I_STOK_BAK, IEDG,
136 . PREV_ADD, CHAIN_ADD, CURRENT_ADD, !pour le balayage des tableaux chaines
137 . nedg, deja , max_add ,ii_stok0, m
138 my_real
139 . xx1, xx2,
140 . xmin, xmax,ymin, ymax,zmin, zmax,
141 . yy1,yy2,zz1,zz2,
142 . aaa, dd,
143 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb
144 my_real, dimension(:), ALLOCATABLE :: xmax_edgs, xmin_edgs, ymax_edgs, ymin_edgs, zmax_edgs, zmin_edgs
145 my_real, dimension(:), ALLOCATABLE :: xmax_edgm, xmin_edgm, ymax_edgm, ymin_edgm, zmax_edgm, zmin_edgm
146 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGREMLINE
147C-----------------------------------------------C
148 ALLOCATE(XMAX_EDGS(NRTS), XMIN_EDGS(NRTS), YMAX_EDGS(NRTS))
149 ALLOCATE(YMIN_EDGS(NRTS), ZMAX_EDGS(NRTS), ZMIN_EDGS(NRTS))
150 ALLOCATE(XMAX_EDGM(NRTM), XMIN_EDGM(NRTM), YMAX_EDGM(NRTM))
151 ALLOCATE(YMIN_EDGM(NRTM), ZMAX_EDGM(NRTM), ZMIN_EDGM(NRTM))
152C--- IREMGAP - array for tag of deactivated lines
153 IF(flagremnode==2)THEN
154 ALLOCATE(tagremline(nrts))
155 tagremline(1:nrts) = 0
156 ENDIF
157C
158 aaa = zero
159 !ATTENTION A POPTIONMISER POUR NE PAS FAIRE ONE RAZ COMPLET SI NRTS ==0
160 min_ix=nbx+2
161 min_iy=nby+2
162 min_iz=nbz+2
163 max_ix=1
164 max_iy=1
165 max_iz=1
166
167 !---------------------------------------------------------!
168 ! Allocation des tableaux chaines !
169 !---------------------------------------------------------!
170 max_add = max(1,4*(nrts))
171 ALLOCATE(lchain_elem(1:max_add))
172 ALLOCATE(lchain_next(1:max_add))
173 ALLOCATE(lchain_last(1:max_add))
174
175
176 IF(nrtm==0.OR.nrts==0)THEN
177 !ne pas reinitiliser tout le voxel s'il n'y a pas de candidat
178 min_ix=1
179 min_iy=1
180 min_iz=1
181 END IF
182
183 !---------------------------------------------------------!
184 ! recuperation des bornes du domaine !
185 !---------------------------------------------------------!
186 xmin = xyzm(1,1)
187 ymin = xyzm(2,1)
188 zmin = xyzm(3,1)
189 xmax = xyzm(4,1)
190 ymax = xyzm(5,1)
191 zmax = xyzm(6,1)
192c dev future: xminb plus grand que xmin...
193 xminb = xmin
194 yminb = ymin
195 zminb = zmin
196 xmaxb = xmax
197 ymaxb = ymax
198 zmaxb = zmax
199
200C=======================================================================
201C 1 Pour chaque edge, on marque les voxels occupes.
202C Le nombre d edge dans un voxels etant variable, on
203C utilise un tableau chaine.
204C Ces voxels representent le voisinage de l edge.
205C On cherchera ensuite toutes les entites interfacees
206C dans ce voisinage.
207C=======================================================================
208
209 current_add=1 ! premiere adresse
210
211 DO i = 1,nrts !si besoin on peut inverser Main/Secnd
212
213c IF(STFS(I)==ZERO)CYCLE !on ne retient pas les facettes detruites
214
215 !-------------------------------------------!
216 ! Nodes ID for edge (N1,N2) !
217 !-------------------------------------------!
218 n1=irects(1,i)
219 n2=irects(2,i)
220 !-------------------------------------------!
221 ! Coordinates of the two nodes !
222 ! +Optimisation // recherche les noeuds !
223 !compris dans xmin xmax des elements du proc!
224 !-------------------------------------------!
225 xx1=x(1,n1)
226 xx2=x(1,n2)
227 xmax_edgs(i)=max(xx1,xx2); IF(xmax_edgs(i) < xmin) cycle
228 xmin_edgs(i)=min(xx1,xx2); IF(xmin_edgs(i) > xmax) cycle
229 yy1=x(2,n1)
230 yy2=x(2,n2)
231 ymax_edgs(i)=max(yy1,yy2); IF(ymax_edgs(i) < ymin) cycle
232 ymin_edgs(i)=min(yy1,yy2); IF(ymin_edgs(i) > ymax) cycle
233 zz1=x(3,n1)
234 zz2=x(3,n2)
235 zmax_edgs(i)=max(zz1,zz2); IF(zmax_edgs(i) < zmin) cycle
236 zmin_edgs(i)=min(zz1,zz2); IF(zmin_edgs(i) > zmax) cycle
237
238 !-------------------------------------------!
239 ! VOXEL OCCUPIED BY THE EDGE !
240 !-------------------------------------------!
241 !Voxel_lower_left_bound for this edge
242 ix1=int(nbx*(xmin_edgs(i)-xminb)/(xmaxb-xminb))
243 iy1=int(nby*(ymin_edgs(i)-yminb)/(ymaxb-yminb))
244 iz1=int(nbz*(zmin_edgs(i)-zminb)/(zmaxb-zminb))
245 ix1=max(1,2+min(nbx,ix1))
246 iy1=max(1,2+min(nby,iy1))
247 iz1=max(1,2+min(nbz,iz1))
248 !Voxel_upper_right_bound for this edge
249 ix2=int(nbx*(xmax_edgs(i)-xminb)/(xmaxb-xminb))
250 iy2=int(nby*(ymax_edgs(i)-yminb)/(ymaxb-yminb))
251 iz2=int(nbz*(zmax_edgs(i)-zminb)/(zmaxb-zminb))
252 ix2=max(1,2+min(nbx,ix2))
253 iy2=max(1,2+min(nby,iy2))
254 iz2=max(1,2+min(nbz,iz2))
255
256 !pour reset des voxel
257 min_ix = min(min_ix,ix1)
258 min_iy = min(min_iy,iy1)
259 min_iz = min(min_iz,iz1)
260 max_ix = max(max_ix,ix2)
261 max_iy = max(max_iy,iy2)
262 max_iz = max(max_iz,iz2)
263
264 !----------------------------------------------!
265 ! EDGE STORAGE FOR EACH VOXEL (CHAINED ARRAY) !
266 !----------------------------------------------!
267C
268C VOXEL(i,j,k) LCHAIN_LAST(FIRST)
269C +-----------+------------+
270C | =>FIRST | =>LAST |
271C +--+--------+--+---------+
272C | |
273C | |
274C | |
275C | | LCHAIN_ELEM(*) LCHAIN_NEXT(*)
276C | | +------------+-----------+
277C +-------------->| edge_id | iadd 3 | 1:FIRST --+
278C | +------------+-----------+ |
279C | | | | 2 |
280C | +------------+-----------+ |
281C | | edge_id | iadd 4 | 3 <-------+
282C | +------------+-----------+ |
283C | | edge_id | iadd 6 | 4 <-------+
284C | +------------+-----------+ |
285C | | | | 5 |
286C | +------------+-----------+ |
287C +-->| edge_id | 0 | 6:LAST <--+
288C +------------+-----------+
289C | | | MAX_ADD
290C +------------+-----------+
291C
292 !Pour tous les voxels qu'occupe la brique
293 DO iz = iz1,iz2
294 DO iy = iy1,iy2
295 DO ix = ix1,ix2
296
297 first_add = voxel(ix,iy,iz)
298
299 IF(first_add == 0)THEN
300 !voxel encore vide
301 voxel(ix,iy,iz) = current_add ! adresse dans le tableau chaine de la premiere eddge trouvee occupant le voxel
302 lchain_last(current_add) = current_add ! dernier=adresse pour l edge courante
303 lchain_elem(current_add) = i ! edge ID
304 lchain_next(current_add) = 0 ! pas de suivant car dernier de la liste !
305 ELSE
306 !voxel contenant deja une edge
307 prev_add = lchain_last(first_add) ! devient l'avant-dernier
308 lchain_last(first_add) = current_add ! maj du dernier
309 lchain_elem(current_add) = i ! edge ID
310 lchain_next(prev_add) = current_add ! maj du suivant 0 -> CURRENT_ADD
311 lchain_next(current_add) = 0 ! pas de suivant car dernier de la liste
312 ENDIF
313
314 current_add = current_add+1
315
316 IF( current_add>=max_add)THEN
317 !OPTIMISATION : suprresion du deallocate/GOTO debut.
318 !REALLOCATE SI PAS ASSEZ DE PLACE : inutile de recommencer de 1 a MAX_ADD-1, on poursuit de MAX_ADD a 2*MAX_ADD
319 max_add = 2 * max_add
320 !print *, "reallocate"
324 ENDIF
325
326 ENDDO !IX
327 ENDDO !IY
328 ENDDO !IZ
329
330 ENDDO !DO I=1,NRTS
331
332
333C=======================================================================
334C 3 A partir des voxels occupes par une edge main, on est en
335C mesure de connaitre toutes les edges escalves dans ce voisinage.
336C Ce qui permet de creer des couples cancidats pour le contact
337C Si la penetration est positive.
338C=======================================================================
339 nedg = 0
340 i_stok = 0
341
342 DO iedg=1,nrtm
343
344 aaa = zero !MARGE
345
346 !-------------------------------------------!
347 ! (N1,N2) is the current main edge !
348 !-------------------------------------------!
349 n1 = irectm(1,iedg)
350 n2 = irectm(2,iedg)
351 mm1 = itab(n1)
352 mm2 = itab(n2)
353
354 !-------------------------------------------!
355 ! X-coordinates of the four nodes !
356 !-------------------------------------------!
357 xx1=x(1,n1)
358 xx2=x(1,n2)
359 xmax_edgm(iedg)=max(xx1,xx2)+tzinf
360 xmin_edgm(iedg)=min(xx1,xx2)-tzinf
361 yy1=x(2,n1)
362 yy2=x(2,n2)
363 ymax_edgm(iedg)=max(yy1,yy2)+tzinf
364 ymin_edgm(iedg)=min(yy1,yy2)-tzinf
365 zz1=x(3,n1)
366 zz2=x(3,n2)
367 zmax_edgm(iedg)=max(zz1,zz2)+tzinf
368 zmin_edgm(iedg)=min(zz1,zz2)-tzinf
369
370 !-------------------------------------------!
371 ! VOXEL OCCUPIED BY THE BRICK !
372 !-------------------------------------------!
373 !Voxel_lower_left_bound for this element---+
374 ix1=int(nbx*(xmin_edgm(iedg)-aaa-xminb)/(xmaxb-xminb))
375 iy1=int(nby*(ymin_edgm(iedg)-aaa-yminb)/(ymaxb-yminb))
376 iz1=int(nbz*(zmin_edgm(iedg)-aaa-zminb)/(zmaxb-zminb))
377 ix1=max(1,2+min(nbx,ix1))
378 iy1=max(1,2+min(nby,iy1))
379 iz1=max(1,2+min(nbz,iz1))
380 !Voxel_upper_right_bound for this element---+
381 ix2=int(nbx*(xmax_edgm(iedg)+aaa-xminb)/(xmaxb-xminb))
382 iy2=int(nby*(ymax_edgm(iedg)+aaa-yminb)/(ymaxb-yminb))
383 iz2=int(nbz*(zmax_edgm(iedg)+aaa-zminb)/(zmaxb-zminb))
384 ix2=max(1,2+min(nbx,ix2))
385 iy2=max(1,2+min(nby,iy2))
386 iz2=max(1,2+min(nbz,iz2))
387
388 deja = 0 ! l edge n est pas encore candidate.
389 i_stok_bak = i_stok
390
391C--- IREMGAP - tag of deactivated lines
392 IF(flagremnode==2)THEN
393 k = kremnode(iedg)
394 l = kremnode(iedg+1)-1
395 DO m=k,l
396 tagremline(remnode(m)) = 1
397 ENDDO
398 ENDIF
399C
400 !on parcours a nouveau les edges secnd dans le voisinage de l edge main iedg
401 !ON CONSTITUE ICI ONE COUPLE
402
403 DO iz = iz1,iz2
404 DO iy = iy1,iy2
405 DO ix = ix1,ix2
406
407 chain_add = voxel(ix,iy,iz) ! adresse dans le tableau chaine de la premiere edge stoquee dans le voxel
408 DO WHILE(chain_add /= 0) ! BOUCLE SUR LES EDGES DU VOXEL COURANT
409 i = lchain_elem(chain_add) ! numeros des edge_id balayes dans le voxel courant
410
411 !secnd edge nodes, exclure couples avec noeud commun
412 ss1=itab(irects(1,i))
413 ss2=itab(irects(2,i))
414
415 IF( (ss1==mm1).OR.(ss1==mm2).OR.
416 . (ss2==mm1).OR.(ss2==mm2) )THEN
417 chain_add = lchain_next(chain_add)
418 cycle
419 END IF
420
421 !unicite des couples
422 IF(iauto==1 .AND. mm1<ss1 )THEN
423 chain_add = lchain_next(chain_add)
424 cycle
425 END IF
426
427C IREMPGAP - Tagged lines are removed
428 IF(flagremnode==2)THEN
429 IF(tagremline(i)==1) THEN
430 chain_add = lchain_next(chain_add)
431 cycle
432 ENDIF
433 ENDIF
434
435 i_stok = i_stok + 1 !on dispose d'un candidat
436 prov_s(i_stok) = i !edge secnd
437 prov_m(i_stok) = iedg !edge main
438
439 !print *, "candidat:", IEDG, I
440 IF(deja==0) nedg = nedg + 1 !nombre d edges candidate au calcul de contact (debug)
441 deja=1 !l edge main IEDG fait l'objet d'une ecriture de candidat. On compte les edges main faisant l'objet dun couple candidate : on ne doit plus incrementer NEDG pour les autres edge secnd testees.
442 chain_add = lchain_next(chain_add)
443C-----------------------------------------------------
444 IF(i_stok>=nvsiz)THEN
445 CALL i11sto_vox1(
446 1 nvsiz,irects,irectm,x ,ii_stok ,
447 2 cand_s,cand_m,nsn ,noint ,marge ,
448 3 i_mem ,prov_s,prov_m,multimp,addcm ,
449 4 chaine,iadfin,gapmin,drad ,igap ,
450 5 gap_s ,gap_m ,gap_s_l,gap_m_l,dgapload)
451
452 IF(i_mem==2) THEN
453 ii_stok=zero
454 GOTO 1000
455 END if!(I_MEM==2)
456 i_stok = i_stok-nvsiz
457 DO j=1,i_stok
458 prov_s(j) = prov_s(j+nvsiz)
459 prov_m(j) = prov_m(j+nvsiz)
460 ENDDO
461 ENDIF
462C-----------------------------------------------------
463
464 ENDDO !NEXT WHILE(CHAIN_ADD /= 0)
465 ENDDO !NEXT IZ
466 ENDDO !NEXT IY
467 ENDDO !NEXT IZ
468
469C--- IREMGAP - clean of tagremline
470 IF(flagremnode==2)THEN
471 k = kremnode(iedg)
472 l = kremnode(iedg+1)-1
473 DO m=k,l
474 tagremline(remnode(m)) = 0
475 ENDDO
476 ENDIF
477
478 ENDDO !NEXT IEDG
479
480
481C-------------------------------------------------------------------------
482C FIN DU TRI
483C-------------------------------------------------------------------------
484
485 IF(i_stok/=0)CALL i11sto_vox1(
486 1 i_stok,irects,irectm,x ,ii_stok,
487 2 cand_s,cand_m,nsn ,noint ,marge ,
488 3 i_mem ,prov_s,prov_m,multimp,addcm ,
489 4 chaine,iadfin,gapmin,drad ,igap ,
490 5 gap_s ,gap_m ,gap_s_l,gap_m_l,dgapload)
491
492
493c WRITE(6,*) __FILE__,__LINE__,I_STOK,II_STOK
494C=======================================================================
495C 4 remise a zero des noeuds dans les boites et desallocation
496C=======================================================================
497
498 1000 CONTINUE
499
500
501
502 ! peut etre otpimisee : ne pas reinitialiser tout le tableau (plusieurs solutions possibles)
503 !! VOXEL( MIN_IX:MAX_IX, MIN_IY:MAX_IY, MIN_IZ:MAX_IZ ) = 0
504
505 CALL i11resetvoxel1(
506 1 (/min_ix, min_iy, min_iz/),
507 . (/max_ix, max_iy, max_iz/),
508 2 nbx, nby, nbz, voxel )
509
510 DEALLOCATE(lchain_next)
511 DEALLOCATE(lchain_elem)
512 DEALLOCATE(lchain_last)
513 IF(flagremnode==2) DEALLOCATE(tagremline)
514
515 DEALLOCATE(xmax_edgs, xmin_edgs, ymax_edgs)
516 DEALLOCATE(ymin_edgs, zmax_edgs, zmin_edgs)
517 DEALLOCATE(xmax_edgm, xmin_edgm, ymax_edgm)
518 DEALLOCATE(ymin_edgm, zmax_edgm, zmin_edgm)
519
520 RETURN
521 END
522
523
524
525!||====================================================================
526!|| i11resetvoxel1 ../starter/source/interfaces/inter3d1/i11trivox1.F
527!||--- called by ------------------------------------------------------
528!|| i11trivox1 ../starter/source/interfaces/inter3d1/i11trivox1.F
529!||--- uses -----------------------------------------------------
530!|| tri7box ../starter/share/modules1/tri7box.F
531!||====================================================================
532 SUBROUTINE i11resetvoxel1(
533 1 tMIN, tMAX ,
534 2 NBX , NBY , NBZ, VOXEL)
535C============================================================================
536C M o d u l e s
537C-----------------------------------------------
538 USE tri7box
539C-----------------------------------------------
540C I m p l i c i t T y p e s
541C-----------------------------------------------
542#include "implicit_f.inc"
543C-----------------------------------------------
544C D u m m y A r g u m e n t s
545C-----------------------------------------------
546 INTEGER, intent(in) :: tMIN(3), tMAX(3),
547 . NBX, NBY, NBZ
548
549 INTEGER, INTENT(INOUT) ::
550 . VOXEL(1:NBX+2,1:NBY+2,1:NBZ+2)
551C-----------------------------------------------
552C L o c a l V a r i a b l e s
553C-----------------------------------------------
554 INTEGER I,J,K,Z_FIRST,Z_LAST,SIZE
555C-----------------------------------------------
556C S o u r c e L i n e s
557C--------------------------------------------
558
559 SIZE = tmax(3) - tmin(3) +1
560 z_first = tmin(3)
561 z_last = SIZE + tmin(3)-1
562
563 DO k= z_first , z_last
564 DO j= tmin(2),tmax(2)
565 DO i= tmin(1),tmax(1)
566 voxel(i,j,k) = 0
567 END DO
568 END DO
569 END DO
570
571 RETURN
572
573 END
#define my_real
Definition cppsort.cpp:32
if(complex_arithmetic) id
subroutine i11trivox1(irects, irectm, x, nrtm, xyzm, ii_stok, cand_s, cand_m, nsn, noint, tzinf, i_mem, addcm, iadfin, chaine, nrts, itab, multimp, iauto, voxel, nbx, nby, nbz, gapmin, drad, marge, gap_s, gap_m, gap_s_l, gap_m_l, igap, flagremnode, kremnode, remnode, dgapload)
Definition i11trivox1.F:45
subroutine i11resetvoxel1(tmin, tmax, nbx, nby, nbz, voxel)
Definition i11trivox1.F:535
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:272
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
integer function, dimension(:), pointer ireallocate(ptr, new_size)
Definition realloc_mod.F:39
integer, dimension(:), pointer lchain_elem
Definition tri11_mod.F:37
integer max_iz
Definition tri11_mod.F:33
integer min_ix
Definition tri11_mod.F:33
integer, dimension(:), pointer lchain_last
Definition tri11_mod.F:39
integer min_iz
Definition tri11_mod.F:33
integer min_iy
Definition tri11_mod.F:33
integer, dimension(:), pointer lchain_next
Definition tri11_mod.F:38
integer max_iy
Definition tri11_mod.F:33
integer max_ix
Definition tri11_mod.F:33
int main(int argc, char *argv[])
subroutine i11sto(j_stok, irects, irectm, x, ii_stok, cand_n, cand_e, nsn, noint, tzinf, i_mem, prov_n, prov_e, multimp, addcm, chaine, iadfin)
Definition i11sto.F:137
subroutine i11sto_vox1(j_stok, irects, irectm, x, ii_stok, cand_n, cand_e, nsn, noint, marge, i_mem, prov_n, prov_e, multimp, addcm, chaine, iadfin, gapmin, drad, igap, gap_s, gap_m, gap_s_l, gap_m_l, dgapload)
Definition i11sto.F:36
program starter
Definition starter.F:39