OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i10buce.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!|| i10buce ../engine/source/interfaces/intsort/i10buce.F
25!||--- called by ------------------------------------------------------
26!|| i10main_tri ../engine/source/interfaces/intsort/i10main_tri.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../engine/source/output/message/message.f
29!|| arret ../engine/source/system/arret.F
30!|| i10tri ../engine/source/interfaces/intsort/i10tri.F
31!||--- uses -----------------------------------------------------
32!|| message_mod ../engine/share/message_module/message_mod.F
33!||====================================================================
34 SUBROUTINE i10buce(
35 1 X ,IRECT ,NSV ,NMN ,NRTM ,
36 2 NSN ,NCONT ,CAND_E ,CAND_N ,GAP ,
37 3 NOINT ,II_STOK ,TZINF ,MAXBOX ,MINBOX ,
38 4 NB_N_B ,ESHIFT ,BMINMA ,MWAG ,ILD ,
39 7 NCONTACT,NSNROLD ,STFN ,NIN ,IGAP ,
40 8 GAP_S ,NSNR ,RENUM ,STF ,GAP_M ,
41 9 GAPMIN ,GAPMAX ,I_MEM ,INTHEAT, IDT_THERM, NODADT_THERM)
42C============================================================================
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 C o m m o n B l o c k s
54C-----------------------------------------------
55#include "units_c.inc"
56#include "warn_c.inc"
57#include "com01_c.inc"
58C-----------------------------------------------
59C D u m m y A r g u m e n t s
60C-----------------------------------------------
61 INTEGER NMN, NRTM, NSN, NOINT, NIN, IGAP, NSNR, NSNROLD
62 INTEGER IRECT(4,*),NSV(*),MWAG(*)
63 INTEGER CAND_E(*),CAND_N(*),RENUM(*)
64 INTEGER ILD,NB_N_B,ESHIFT,NCONTACT,NCONT,I_MEM,II_STOK
65 INTEGER ,INTENT(IN) :: INTHEAT
66 INTEGER, INTENT(IN) :: IDT_THERM
67 INTEGER, INTENT(IN) :: NODADT_THERM
68C REAL
70 . gap,tzinf,maxbox,minbox,gapmin, gapmax, bminma(6)
72 . x(3,*),stfn(*), gap_s(*), stf(*), gap_m(*)
73C-----------------------------------------------
74C L o c a l V a r i a b l e s
75C-----------------------------------------------
76 INTEGER I_ADD_MAX
77 PARAMETER (I_ADD_MAX = 1001)
78 INTEGER I_ADD, IP0, IP1, MAXSIZ,
79 . ADD(2,I_ADD_MAX)
80C REAL
81 my_real
82 . XYZM(6,I_ADD_MAX-1),MARGE
83C-----------------------------------------------
84C S o u r c e L i n e s
85C-----------------------------------------------
86C
87C----- sorting by boxes of elements and nodes
88C
89C-----------------------------------------------
90C if we don't have enough memory for the stacks we restart the sorting
91C by incrementing nb_n_b (number of nodes per finished box)
92C
93C POINTEUR NOM TAILLE
94C P0........CAND_A:address of N in CAND_N NSN + 3[+ NSNROLD in the SPMD case]
95C P1........Elt Bas Pile NRTM
96C P2........Elt PILE 2*NRTM
97C P21.......BPN NSN
98C P22.......PN NSN
99C P31.......ADDI 2*I_ADD_MAX
100 maxsiz = 3*(nrtm+100)
101 ip0 = 1
102 ip1 = ip0 + nsn + nsnrold + 3
103C
104C
105C-----initialization of addresses and x,y,z
106C
107C ADDE ADDN X Y Z
108C 1 1 XMIN YMIN ZMIN
109C 1 1 XMAX YMAX ZMAX
110C
111 add(1,1) = 0
112 add(2,1) = 0
113 add(1,2) = 0
114 add(2,2) = 0
115 i_add = 1
116 xyzm(1,i_add) = bminma(4)
117 xyzm(2,i_add) = bminma(5)
118 xyzm(3,i_add) = bminma(6)
119 xyzm(4,i_add) = bminma(1)
120 xyzm(5,i_add) = bminma(2)
121 xyzm(6,i_add) = bminma(3)
122 i_mem = 0
123C
124C
125C-----beginning of the sorting phase
126C
127C SEPARER B ET N EN TWO
128 marge = tzinf-gap ! it is indeed the margin
129 CALL i10tri(
130 1 add ,nsn ,renum ,nsnr ,nrtm ,
131 2 irect ,x ,xyzm ,igap ,gap ,
132 3 i_add ,nsv ,maxsiz ,ii_stok ,cand_n ,
133 4 cand_e ,ncontact,noint ,tzinf ,maxbox ,
134 5 minbox ,i_mem ,nb_n_b ,i_add_max,mwag(ip0),
135 6 eshift ,nsnrold ,stf ,stfn ,gap_s ,
136 7 gap_m ,gapmin ,gapmax ,marge ,nin ,
137 8 intheat, idt_therm, nodadt_therm)
138C---------------------------------
139C I_MEM = 1 ==> PAS ASSEZ DE MEMOIRE PILE
140C I_MEM = 2 ==> PAS ASSEZ DE MEMOIRE CANDIDATES
141C I_MEM = 3 ==> TROP NIVEAUX PILE
142 IF (i_mem == 2) RETURN
143 IF(i_mem==1)THEN
144 nb_n_b = nb_n_b + 1
145 IF ( nb_n_b > ncont) THEN
146 CALL ancmsg(msgid=85,anmode=aninfo,
147 . i1=noint)
148 CALL arret(2)
149 ENDIF
150 ild = 1
151 ELSEIF(i_mem==2) THEN
152 IF(debug(1)>=1) THEN
153 iwarn = iwarn+1
154#include "lockon.inc"
155 WRITE(istdo,*)' **WARNING INTERFACE/MEMORY'
156 WRITE(iout,*)' **WARNING INTERFACE NB:',noint
157 WRITE(iout,*)' TOO MANY POSSIBLE IMPACTS'
158 WRITE(iout,*)' SIZE OF INFLUENCE ZONE IS'
159 WRITE(iout,*)' MULTIPLIED BY 0.75'
160#include "lockoff.inc"
161 ENDIF
162 tzinf = three_over_4*tzinf
163C do not decrease the box size
164C MINBOX= THREE_OVER_4*MINBOX
165C MAXBOX= THREE_OVER_4*MAXBOX
166 IF( tzinf<=gap ) THEN
167 CALL ancmsg(msgid=85,anmode=aninfo,
168 . i1=noint)
169 CALL arret(2)
170 ENDIF
171 ild = 1
172 ELSEIF(i_mem==3)THEN
173 nb_n_b = nb_n_b + 1
174 IF ( nb_n_b > ncont) THEN
175 CALL ancmsg(msgid=90,anmode=aninfo,
176 . i1=noint)
177 CALL arret(2)
178 ENDIF
179 ild = 1
180 ENDIF
181C
182 RETURN
183 END
#define my_real
Definition cppsort.cpp:32
subroutine i10buce(x, irect, nsv, nmn, nrtm, nsn, ncont, cand_e, cand_n, gap, noint, ii_stok, tzinf, maxbox, minbox, nb_n_b, eshift, bminma, mwag, ild, ncontact, nsnrold, stfn, nin, igap, gap_s, nsnr, renum, stf, gap_m, gapmin, gapmax, i_mem, intheat, idt_therm, nodadt_therm)
Definition i10buce.F:42
subroutine i10tri(add, nsn, renum, nsnr, nrtm, irect, x, xyzm, igap, gap, i_add, nsv, maxsiz, ii_stok, cand_n, cand_e, nsn4, noint, tzinf, maxbox, minbox, i_mem, nb_n_b, i_add_max, cand_a, eshift, nsnrold, stf, stfn, gap_s, gap_m, gapmin, gapmax, marge, nin, intheat, idt_therm, nodadt_therm)
Definition i10tri.F:43
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:895
subroutine arret(nn)
Definition arret.F:86