OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i10mainf.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!|| i10mainf ../engine/source/interfaces/int10/i10mainf.F
25!||--- called by ------------------------------------------------------
26!|| intfop2 ../engine/source/interfaces/interf/intfop2.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../engine/source/output/message/message.F
29!|| arret ../engine/source/system/arret.F
30!|| i10dst3 ../engine/source/interfaces/int10/i10dst3.F
31!|| i10for3 ../engine/source/interfaces/int10/i10for3.F
32!|| i7cdcor3 ../engine/source/interfaces/int07/i7cdcor3.F
33!|| i7cor3 ../engine/source/interfaces/int07/i7cor3.F
34!|| sum_6_float_sens ../engine/source/system/parit.F
35!||--- uses -----------------------------------------------------
36!|| h3d_mod ../engine/share/modules/h3d_mod.F
37!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
38!|| message_mod ../engine/share/message_module/message_mod.f
39!|| output_mod ../common_source/modules/output/output_mod.F90
40!||====================================================================
41 SUBROUTINE i10mainf(output, IPARI ,X ,A ,
42 2 ICODT ,FSAV ,V ,MS ,DT2T ,
43 3 NELTST ,ITYPTST,ITAB ,STIFN ,FSKYI ,
44 4 ISKY ,FCONT ,LINDMAX,
45 5 JTASK ,NB_JLT ,NB_JLT_NEW ,NB_STOK_N ,
46 6 NISKYFI,NSTRF ,SECFCUM,VISCN ,NIN ,FSAVSUB,
47 9 NUM_IMP,NS_IMP ,NE_IMP ,IND_IMP,FNCONT ,
48 A FTCONT ,MSKYI_SMS ,ISKYI_SMS ,NODNX_SMS,
49 B ICONTACT,INTBUF_TAB,FBSAV6,ISENSINT,DIMFB,
50 C H3D_DATA,NODADT_THERM )
51C============================================================================
52C this routine is called by : INTFOP2(/interf/intfop2.F)
53C----------------------------------------------------------------------------
54C cette routine appelle : I7CDCOR3(int7/i7cdcor3.F)
55C I7COR3(int7/i7cor3.F)
56C I10DST3(int10/i10dst3.F)
57C I10FOR3(int10/i10for3.F)
58C============================================================================
59C-----------------------------------------------
60C M o d u l e s
61C-----------------------------------------------
62 use output_mod
63 USE intbufdef_mod
64 USE h3d_mod
65 USE message_mod
66C-----------------------------------------------
67C I m p l i c i t T y p e s
68C-----------------------------------------------
69#include "implicit_f.inc"
70C-----------------------------------------------
71C G l o b a l P a r a m e t e r s
72C-----------------------------------------------
73#include "mvsiz_p.inc"
74C-----------------------------------------------
75C C o m m o n B l o c k s
76C-----------------------------------------------
77#include "com04_c.inc"
78#include "com08_c.inc"
79#include "param_c.inc"
80#include "warn_c.inc"
81#include "parit_c.inc"
82#include "task_c.inc"
83#include "impl1_c.inc"
84C-----------------------------------------------
85C D u m m y A r g u m e n t s
86C-----------------------------------------------
87 type(output_), intent(inout) :: output
88 INTEGER NELTST,ITYPTST,NSTRF(*),
89 . NISKYFI,NIN,LINDMAX
90 INTEGER IPARI(*), ICODT(*), ITAB(*),
91 . ISKY(*), ISKYI_SMS(*), NODNX_SMS(*),
92 . ICONTACT(*), ISENSINT(*),DIMFB
93 INTEGER ,INTENT(IN) :: NODADT_THERM
94C Interface Statistics
95 INTEGER NB_JLT,NB_JLT_NEW,NB_STOK_N,JTASK
96 INTEGER NUM_IMP,NS_IMP(*),NE_IMP(*),IND_IMP(*)
97C REAL
98 my_real dt2t,
99 . x(*), a(3,*), fsav(*), v(3,*),
100 . ms(*),stifn(*),fskyi(lskyi,4),fcont(*),
101 . secfcum(7,numnod,nsect),
102 . viscn(*), fsavsub(*), fncont(3,*), ftcont(3,*),
103 . mskyi_sms(*)
104
105 DOUBLE PRECISION FBSAV6(12,6,DIMFB)
106
107 TYPE(intbuf_struct_) INTBUF_TAB
108 TYPE(H3D_DATABASE) :: H3D_DATA
109C-----------------------------------------------
110C L o c a l V a r i a b l e s
111C-----------------------------------------------
112 INTEGER IDUM,
113 . I, J, H, NOINT, ISECIN, I_STOK,
114 . igap, jlt_new, jlt , nft, itied, igsti, nisub, iadm,
115 . nb_loc,i_stok_loc,debut, ierror
116 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
117 . nsvg(mvsiz), cand_n_n(mvsiz),cand_e_n(mvsiz),
118 . cn_loc(mvsiz),ce_loc(mvsiz),
119 . index2(lindmax),ibid,sfsavparit
120 INTEGER NSMS(MVSIZ)
121C REAL
122 my_real
123 . startt, gap, stopt,
124 . visc, stiglo, gapmin, kmin, kmax, gapmax,
125 . rbid
126C-----------------------------------------------
127C REAL
128 my_real
129 . nx1(mvsiz), nx2(mvsiz), nx3(mvsiz), nx4(mvsiz),
130 . ny1(mvsiz), ny2(mvsiz), ny3(mvsiz), ny4(mvsiz),
131 . nz1(mvsiz), nz2(mvsiz), nz3(mvsiz), nz4(mvsiz),
132 . lb1(mvsiz), lb2(mvsiz), lb3(mvsiz), lb4(mvsiz),
133 . lc1(mvsiz), lc2(mvsiz), lc3(mvsiz), lc4(mvsiz),
134 . p1(mvsiz), p2(mvsiz), p3(mvsiz), p4(mvsiz),
135 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
136 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
137 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
138 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
139 .
140 .
141 . gapv(mvsiz),
142 . vxi(mvsiz),vyi(mvsiz),vzi(mvsiz),msi(mvsiz)
143
144 my_real, DIMENSION(:,:,:), ALLOCATABLE :: fsavparit
145 INTEGER :: NTY,NSN
146C
147 IDUM = 0
148 nsn =ipari(5)
149 nty =ipari(7)
150 noint =ipari(15)
151 igap =ipari(21)
152 isecin=ipari(28)
153 igsti =ipari(34)
154 nisub =ipari(36)
155C
156 stiglo=-intbuf_tab%STFAC(1)
157 startt=intbuf_tab%VARIABLES(3)
158 stopt =intbuf_tab%VARIABLES(11)
159 IF(startt>tt) RETURN
160 IF(tt>stopt) RETURN
161C
162 itied =nint(intbuf_tab%VARIABLES(1))
163 gap =intbuf_tab%VARIABLES(2)
164 gapmin=intbuf_tab%VARIABLES(13)
165 visc =intbuf_tab%VARIABLES(14)
166 gapmax=intbuf_tab%VARIABLES(16)
167 kmin =intbuf_tab%VARIABLES(17)
168 kmax =intbuf_tab%VARIABLES(18)
169 iadm=ipari(44)
170C
171 rbid = zero
172 ibid = 0
173 IF(nty==10)THEN
174C
175 i_stok = intbuf_tab%I_STOK(1)
176 IF (impl_s==1) THEN
177 num_imp = 0
178 visc =zero
179 ENDIF
180C this part is executed in // after the calculation of the forces of the elements.
181C static decoupage
182 nb_loc = i_stok / nthread
183 IF (jtask==nthread) THEN
184 i_stok_loc = i_stok-nb_loc*(nthread-1)
185 ELSE
186 i_stok_loc = nb_loc
187 ENDIF
188 debut = (jtask-1)*nb_loc
189 i_stok = 0
190C recalculation of istok
191 DO i = debut+1, debut+i_stok_loc
192 IF(intbuf_tab%CAND_N(i)<0) THEN
193 i_stok = i_stok + 1
194 index2(i_stok) = i
195C inbuf == cand_n
196 intbuf_tab%CAND_N(i) = -intbuf_tab%CAND_N(i)
197 ELSEIF(itied/=0.AND.intbuf_tab%CAND_F(6*(i-1)+1)/=0.) THEN
198 i_stok = i_stok + 1
199 index2(i_stok) = i
200 ELSE
201C reset of cand_f of 1, 2, 3
202 intbuf_tab%CAND_F(6*(i-1)+1) = zero
203 intbuf_tab%CAND_F(6*(i-1)+2) = zero
204 intbuf_tab%CAND_F(6*(i-1)+3) = zero
205 ENDIF
206 ENDDO
207 IF (debug(3)>=1) THEN
208 nb_jlt = nb_jlt + i_stok_loc
209 nb_stok_n = nb_stok_n + i_stok
210 ENDIF
211C
212 sfsavparit = 0
213 DO i=1,nisub+1
214 IF(isensint(i)/=0) THEN
215 sfsavparit = sfsavparit + 1
216 ENDIF
217 ENDDO
218 IF (sfsavparit /= 0) THEN
219 ALLOCATE(fsavparit(nisub+1,11,i_stok),stat=ierror)
220 IF(ierror/=0) THEN
221 CALL ancmsg(msgid=19,anmode=aninfo,
222 . c1='(/INTER/TYPE10)')
223 CALL arret(2)
224 ENDIF
225 DO j=1,i_stok
226 DO i=1,11
227 DO h=1,nisub+1
228 fsavparit(h,i,j) = zero
229 ENDDO
230 ENDDO
231 ENDDO
232 ELSE
233 ALLOCATE(fsavparit(0,0,0),stat=ierror)
234 IF(ierror/=0) THEN
235 CALL ancmsg(msgid=19,anmode=aninfo,
236 . c1='(/INTER/TYPE10)')
237 CALL arret(2)
238 ENDIF
239 ENDIF
240c
241 DO nft = 0 , i_stok - 1 , nvsiz
242 jlt = min( nvsiz, i_stok - nft )
243C preparation CANDIDATES retenus
244 CALL i7cdcor3(
245 1 jlt,index2(nft+1),intbuf_tab%CAND_E,intbuf_tab%CAND_N,cand_e_n,
246 2 cand_n_n)
247 CALL i7cor3(
248 1 jlt ,x ,intbuf_tab%IRECTM,intbuf_tab%NSV,cand_e_n,
249 2 cand_n_n ,intbuf_tab%STFM,intbuf_tab%STFNS,x1 ,x2 ,
250 3 x3 ,x4 ,y1 ,y2 ,y3 ,
251 4 y4 ,z1 ,z2 ,z3 ,z4 ,
252 5 xi ,yi ,zi ,stif ,ix1 ,
253 6 ix2 ,ix3 ,ix4 ,nsvg ,igap ,
254 7 gap ,intbuf_tab%GAP_S,intbuf_tab%GAP_M,gapv,
255 9 ms ,vxi ,vyi ,
256 a vzi ,msi ,nsn ,v ,idum ,
257 b idum ,nty ,nin ,igsti ,kmin ,
258 c kmax ,gapmax ,gapmin ,iadm ,rbid ,
259 d rbid ,rbid ,rbid ,ibid ,rbid ,
260 e rbid ,rbid ,rbid ,ibid ,rbid ,
261 f ibid ,nodnx_sms ,nsms ,rbid ,rbid ,
262 g ibid ,ibid ,ibid ,ibid ,ibid ,
263 h ibid ,ibid ,rbid ,ibid ,rbid )
264 jlt_new = 0
265 CALL i10dst3(
266 1 jlt ,cand_n_n,cand_e_n,cn_loc,ce_loc ,
267 2 x1 ,x2 ,x3 ,x4 ,y1 ,
268 3 y2 ,y3 ,y4 ,z1 ,z2 ,
269 4 z3 ,z4 ,xi ,yi ,zi ,
270 5 nx1 ,nx2 ,nx3 ,nx4 ,ny1 ,
271 6 ny2 ,ny3 ,ny4 ,nz1 ,nz2 ,
272 7 nz3 ,nz4 ,lb1 ,lb2 ,lb3 ,
273 8 lb4 ,lc1 ,lc2 ,lc3 ,lc4 ,
274 9 p1 ,p2 ,p3 ,p4 ,ix1 ,
275 a ix2 ,ix3 ,ix4 ,nsvg ,stif ,
276 b jlt_new,gapv,intbuf_tab%CAND_F,index2(nft+1),itied,
277 c vxi ,vyi ,vzi ,msi ,nsms )
278 jlt = jlt_new
279 IF(jlt_new/=0) THEN
280 ipari(29) = 1
281 IF (debug(3)>=1)
282 . nb_jlt_new = nb_jlt_new + jlt_new
283C WRITE(6,*) 'IMPACT ==> CALL I10FOR3'
284 CALL i10for3(output,
285 1 jlt ,a ,ms ,v ,fsav ,
286 2 intbuf_tab%CAND_F,stifn,stif ,fskyi ,isky ,
287 3 itied ,visc ,x1 ,x2 ,x3 ,
288 4 x4 ,y1 ,y2 ,y3 ,y4 ,
289 5 z1 ,z2 ,z3 ,z4 ,nsvg ,
290 6 nx1 ,nx2 ,nx3 ,nx4 ,ny1 ,
291 7 ny2 ,ny3 ,ny4 ,nz1 ,nz2 ,
292 8 nz3 ,nz4 ,lb1 ,lb2 ,lb3 ,
293 9 lb4 ,lc1 ,lc2 ,lc3 ,lc4 ,
294 a p1 ,p2 ,p3 ,p4 ,fcont ,
295 b ix1 ,ix2 ,ix3 ,ix4 ,gapv ,
296 c index2(nft+1),niskyfi ,isecin ,nstrf ,secfcum ,
297 d noint ,viscn ,vxi ,vyi ,vzi ,
298 e msi ,nin ,nisub ,intbuf_tab%LISUB,intbuf_tab%ADDSUBS,
299 f intbuf_tab%ADDSUBM,intbuf_tab%LISUBS,intbuf_tab%LISUBM,cn_loc,ce_loc,
300 g fsavsub ,fncont ,ftcont ,mskyi_sms ,iskyi_sms ,
301 h nsms ,xi ,yi ,zi ,icontact,
302 i dt2t ,neltst ,ityptst ,jtask ,isensint,
303 j fsavparit ,nft ,h3d_data,nodadt_therm)
304 ENDIF
305 IF(impl_s==1) THEN
306 DO i = 1 ,jlt_new
307 ns_imp(i+num_imp)=cn_loc(i)
308 ne_imp(i+num_imp)=ce_loc(i)
309 ind_imp(i+num_imp)=index2(i+nft)
310 ENDDO
311 num_imp=num_imp+jlt_new
312 ENDIF
313 ENDDO
314c
315 IF (sfsavparit /= 0)THEN
316 CALL sum_6_float_sens(fsavparit, nisub+1, 11, i_stok,1,i_stok,
317 . fbsav6, 12, 6, dimfb, isensint )
318 ENDIF
319 IF (ALLOCATED(fsavparit)) DEALLOCATE (fsavparit)
320C
321 ENDIF
322C
323 RETURN
324 END
#define my_real
Definition cppsort.cpp:32
subroutine i10dst3(jlt, cand_n, cand_e, cn_loc, ce_loc, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, nx1, nx2, nx3, nx4, ny1, ny2, ny3, ny4, nz1, nz2, nz3, nz4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, p1, p2, p3, p4, ix1, ix2, ix3, ix4, nsvg, stif, jlt_new, gapv, cand_f, index, itied, vxi, vyi, vzi, msi, nsms)
Definition i10dst3.F:41
subroutine i10for3(output, jlt, a, ms, v, fsav, cand_f, stifn, stif, fskyi, isky, itied, visc, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, nsvg, nx1, nx2, nx3, nx4, ny1, ny2, ny3, ny4, nz1, nz2, nz3, nz4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, p1, p2, p3, p4, fcont, ix1, ix2, ix3, ix4, gapv, index, niskyfi, isecin, nstrf, secfcum, noint, viscn, vxi, vyi, vzi, msi, nin, nisub, lisub, addsubs, addsubm, lisubs, lisubm, cn_loc, ce_loc, fsavsub, fncont, ftcont, mskyi_sms, iskyi_sms, nsms, xi, yi, zi, icontact, dt2t, neltst, ityptst, jtask, isensint, fsavparit, nft, h3d_data, nodadt_therm)
Definition i10for3.F:58
subroutine i10mainf(output, ipari, x, a, icodt, fsav, v, ms, dt2t, neltst, ityptst, itab, stifn, fskyi, isky, fcont, lindmax, jtask, nb_jlt, nb_jlt_new, nb_stok_n, niskyfi, nstrf, secfcum, viscn, nin, fsavsub, num_imp, ns_imp, ne_imp, ind_imp, fncont, ftcont, mskyi_sms, iskyi_sms, nodnx_sms, icontact, intbuf_tab, fbsav6, isensint, dimfb, h3d_data, nodadt_therm)
Definition i10mainf.F:51
subroutine i7cdcor3(jlt, index, cand_e, cand_n, cand_e_n, cand_n_n)
Definition i7cdcor3.F:38
#define min(a, b)
Definition macros.h:20
subroutine sum_6_float_sens(f, a, b, c, jft, jlt, f6, d, e, g, isensint)
Definition parit.F:540
subroutine i7cor3(x, irect, nsv, cand_e, cand_n, stf, stfn, gapv, igap, gap, gap_s, gap_m, istf, gapmin, gapmax, gap_s_l, gap_m_l, drad, ix1, ix2, ix3, ix4, nsvg, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, stif, dgapload, last)
Definition i7cor3.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