OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i11sti3.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!|| i11sti3 ../starter/source/interfaces/inter3d1/i11sti3.F
25!||--- called by ------------------------------------------------------
26!|| inint3 ../starter/source/interfaces/inter3d1/inint3.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| friction_parts_search ../starter/source/interfaces/inter3d1/i7sti3.F
30!|| get_u_geo ../starter/source/user_interface/uaccess.F
31!|| i11coq ../starter/source/interfaces/inter3d1/i11coq.F
32!|| i11fil ../starter/source/interfaces/inter3d1/i11coq.F
33!|| i11gmx3 ../starter/source/interfaces/inter3d1/i11gmx3.F
34!|| i11sol ../starter/source/interfaces/inter3d1/i11sol.F
35!|| my_exit ../starter/source/output/analyse/analyse.c
36!|| norma1 ../starter/source/interfaces/inter3d1/norma1.F
37!|| volint ../starter/source/interfaces/inter3d1/volint.F
38!||--- uses -----------------------------------------------------
39!|| message_mod ../starter/share/message_module/message_mod.F
40!|| r2r_mod ../starter/share/modules1/r2r_mod.F
41!||====================================================================
42 SUBROUTINE i11sti3(
43 1 X ,IRECT ,STF ,IXS ,PM ,
44 2 GEO ,NRT ,IXC ,NINTR ,SLSFAC ,
45 3 NTY ,GAPMAX ,NOINT ,GAP_SM ,
46 4 MS ,IXTG ,IXT ,IXP ,IXR ,
47 5 IGAP ,GAPMIN ,GAP0 ,GAPINF ,IPARTC ,
48 6 IPARTTG ,THK ,THK_PART ,PERCENT_SIZE ,GAP_L ,
49 7 NOD2EL1D ,KNOD2EL1D ,ITAB ,IXS10 ,ID,TITR ,
50 8 KXX ,IXX ,IGEO ,KNOD2ELS ,KNOD2ELC,
51 9 KNOD2ELTG,NOD2ELS ,NOD2ELC ,NOD2ELTG ,LELX ,
52 A FILLSOL ,INTTH ,DRAD ,AREA ,IELEC ,
53 B PM_STACK ,IWORKSH ,IT19 ,BGAPSMX ,INTFRIC ,
54 C IPARTS ,TAGPRT_FRIC,IPARTFRIC,INTBUF_FRIC_TAB,
55 D IPARTT ,IPARTP ,IPARTX ,IPARTR ,IREM_GAP)
56C-----------------------------------------------
57C D e s c r i p t i o n
58C-----------------------------------------------
59 !This subroutine is returning Stiffness for /INTER/TYPE contact interface:
60 ! stiffness of the shell if the segment belongs to a shell, stiffness of the solid if it belong to a solid
61 ! (except if the stiffness of the adjacent elem is 0)
62C-----------------------------------------------
63C P r e c o n d i t i o n s
64C-----------------------------------------------
65C NTY = 11 (IPARI(7))
66C-----------------------------------------------
67C M o d u l e s
68C-----------------------------------------------
69 USE message_mod
70 USE r2r_mod
71 USE intbuf_fric_mod
73 use element_mod , only :nixs,nixc,nixtg,nixt,nixp,nixr
74C-----------------------------------------------
75C I m p l i c i t T y p e s
76C-----------------------------------------------
77#include "implicit_f.inc"
78C-----------------------------------------------
79C C o m m o n B l o c k s
80C-----------------------------------------------
81#include "units_c.inc"
82#include "param_c.inc"
83#include "com01_c.inc"
84#include "com04_c.inc"
85#include "scr08_c.inc"
86#include "scr23_c.inc"
87#include "r2r_c.inc"
88C-----------------------------------------------
89C D u m m y A r g u m e n t s
90C-----------------------------------------------
91 INTEGER,INTENT(IN) :: NRT, NINTR, NTY, NOINT,IGAP,INTTH,INTFRIC,IREM_GAP
92 INTEGER,INTENT(IN) :: IRECT(2,*), IXS(NIXS,NUMELS), IXC(NIXC,NUMELC),
93 . IXTG(NIXTG,NUMELTG),IXT(NIXT,NUMELT),IXP(NIXP,NUMELP),IXR(NIXR,NUMELR),
94 . IPARTC(NUMELC), IPARTTG(NUMELTG),NOD2EL1D(*),KNOD2EL1D(*),ITAB(NUMNOD),
95 . IXS10(6,*),KXX(NIXX,*),IXX(*),IGEO(NPROPGI,NUMGEO),
96 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*),
97 . NOD2ELS(*), NOD2ELC(*), NOD2ELTG(*),IWORKSH(3,*),
98 . TAGPRT_FRIC(*),IPARTS(*),
99 . IPARTT(*) ,IPARTP(*) ,IPARTX(*) ,IPARTR(*)
100 INTEGER,INTENT(INOUT) :: IPARTFRIC(*),IELEC(*)
101 INTEGER,INTENT(IN) :: ID,IT19
102 my_real,INTENT(IN) :: X(3,NUMNOD), PM(NPROPM,NUMMAT), GEO(NPROPG,NUMGEO),
103 . MS(*),THK(*),THK_PART(*),
104 . lelx(*), fillsol(*),pm_stack(20,*)
105 my_real,INTENT(IN) :: slsfac,gap0,percent_size
106 my_real,INTENT(INOUT) :: gap_l(*),stf(*),gap_sm(*),area(*),drad,gapinf,gapmax,gapmin,bgapsmx
107 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
108 TYPE(INTBUF_FRIC_STRUCT_),INTENT(IN) :: INTBUF_FRIC_TAB(*)
109C-----------------------------------------------
110C L o c a l V a r i a b l e s
111C-----------------------------------------------
112 INTEGER NDX, I, INRT, NELS, MT, JJ, JJJ, NELC, J,
113 . mg, neltg,nelt,nelp,nelr,
114 . igtyp, ip,n1,n2,k,t,p,r,nelx,ipgmat,igmat,ie,
115 . jj1,jj2,iec,k1,k2,ipl,
116 . ie1(50,2),ie2(50,2),isubstack,ipg,n3,n4,n5,n6,n7,n8,icontr
117 my_real dxm, gapmx, gapmn, areass, vol, dx,gap1,gaps1,gaptmp,xl,
118 . sx1,sy1,sz1,sx2,sy2,sz2,sx3,sy3,sz3,
119 . x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8,
120 . xx1(4),xx2(4), xx3(4) ,face(6),
121 . n_1, n_2, n_3,dx1,xl2,bulk
122C-----------------------------------------------
123 my_real,EXTERNAL :: get_u_geo
124C-----------------------------------------------
125C S o u r c e L i n e s
126C-----------------------------------------------
127 dxm=zero
128 ndx=0
129 gaps1=zero
130 gapmx=ep30
131 gapmn=ep30
132 ipgmat = 700
133 IF(igap == 3)THEN
134 DO i=1,nrt
135 gap_l(i)=ep30
136 ENDDO
137 ENDIF
138
139 DO i=1,nrt
140 stf(i)=zero
141 gap_sm(i)=zero
142 inrt=i
143 CALL i11gmx3(x,irect,inrt,gapmx,xl2)
144C----------------------
145C Solids
146C----------------------
147 CALL i11sol(x,irect,ixs,nintr,nels,inrt,areass,noint,knod2els,nod2els,ixs10)
148 IF(nels /= 0) THEN
149 mt=ixs(1,nels)
150 mg=ixs(nixs-1,nels)
151 icontr = igeo(97,mg)
152 IF(mt > 0)THEN
153 DO jj=1,8
154 jjj=ixs(jj+1,nels)
155 xc(jj)=x(1,jjj)
156 yc(jj)=x(2,jjj)
157 zc(jj)=x(3,jjj)
158 ENDDO
159 CALL volint(vol)
160 IF (icontr==1 ) THEN
161 bulk = pm(107,mt)
162 ELSE
163 bulk = pm(32,mt)
164 END IF
165 IF(xl2 > 0.0)THEN
166 stf(i)=slsfac*fillsol(nels)*vol*bulk/xl2
167 ELSE
168 stf(i)=zero
169 ENDIF
170 ELSE
171 IF(nintr >= 0) THEN
172 CALL ancmsg(msgid=95,msgtype=msgwarning,anmode=aninfo_blind_2,
173 . i1=id,
174 . c1=titr,
175 . i2=ixs(nixs,nels),
176 . c2='SOLID',
177 . i3=i)
178 ENDIF
179 IF(nintr < 0) THEN
180 CALL ancmsg(msgid=96,msgtype=msgwarning,anmode=aninfo_blind_2,
181 . i1=id,
182 . c1=titr,
183 . i2=ixs(nixs,nels),
184 . c2='SOLID',
185 . i3=i)
186 ENDIF
187 ENDIF
188
189C -----Friction model ------
190 IF(intfric > 0) THEN
191 ip= iparts(nels)
192 ipg = tagprt_fric(ip)
193 IF(ipg > 0) THEN
195 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
196 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
197 ipartfric(inrt) = ipl
198 ENDIF
199 ENDIF
200C------------------------------------
201 ENDIF
202 CALL i11coq(irect ,ixc ,ixtg ,nintr ,nelc ,
203 . neltg ,inrt ,geo ,pm ,thk ,
204 . igeo ,knod2elc,knod2eltg,nod2elc,nod2eltg,
205 . pm_stack,iworksh)
206 IF(neltg /= 0) THEN
207 mt=ixtg(1,neltg)
208 mg=ixtg(5,neltg)
209 igtyp = igeo(11,mg)
210 ip = iparttg(neltg)
211 igmat = igeo(98,mg)
212 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
213 dx=thk_part(ip)
214 ELSEIF (thk(numelc+neltg) /= zero .AND. iintthick ==0)THEN
215 dx=thk(numelc+neltg)
216 ELSEIF(igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
217 dx=thk(numelc+neltg)
218 ELSE
219 dx=geo(1,mg)
220 ENDIF
221 gap_sm(i)=half*dx
222 gaps1=max(gaps1,gap_sm(i))
223 gapmn = min(gapmn,dx)
224 dxm=dxm+dx
225 ndx=ndx+1
226 IF(mt > 0)THEN
227 IF(igtyp == 11 .AND. igmat > 0) THEN
228 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
229 ELSEIF(igtyp == 52 .OR. ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0)) THEN
230 isubstack = iworksh(3,numelc+neltg)
231 stf(i)=slsfac*dx*pm_stack( 2 ,isubstack)
232 ELSE
233 stf(i)=slsfac*dx*pm(20,mt)
234 ENDIF
235 ELSE
236 IF(nintr >= 0) THEN
237 CALL ancmsg(msgid=95,msgtype=msgwarning,anmode=aninfo_blind_2,
238 . i1=id,
239 . c1=titr,
240 . i2=ixs(nixs,nels),
241 . c2='SOLID',
242 . i3=i)
243 ENDIF
244 IF(nintr < 0) THEN
245 CALL ancmsg(msgid=96,msgtype=msgwarning,anmode=aninfo_blind_2,
246 . i1=id,
247 . c1=titr,
248 . i2=ixs(nixs,nels),
249 . c2='SOLID',
250 . i3=i)
251 ENDIF
252
253 ENDIF
254
255C -----Friction model ------
256 IF(intfric > 0) THEN
257 ip= iparttg(neltg)
258 ipg = tagprt_fric(ip)
259 IF(ipg > 0) THEN
261 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
262 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
263 ipartfric(inrt) = ipl
264 ENDIF
265 ENDIF
266C------------------------------------
267
268 ELSEIF(nelc /= 0) THEN
269 mt=ixc(1,nelc)
270 mg=ixc(6,nelc)
271 igtyp = igeo(11,mg)
272 ip = ipartc(nelc)
273 igmat = igeo(98,mg)
274 IF (thk_part(ip) /= zero .AND. iintthick == 0) THEN
275 dx=thk_part(ip)
276 ELSEIF ( thk(nelc) /= zero .AND. iintthick == 0 ) THEN
277 dx=thk(nelc)
278 ELSEIF(igtyp ==17 .OR. igtyp == 51 .OR. igtyp == 52)THEN
279 dx=thk(nelc)
280 ELSE
281 dx=geo(1,mg)
282 ENDIF
283 gap_sm(i)=half*dx
284 gaps1=max(gaps1,gap_sm(i))
285 gapmn = min(gapmn,dx)
286 dxm=dxm+dx
287 ndx=ndx+1
288 IF(mt > 0)THEN
289 IF(igtyp == 11 .AND. igmat > 0) THEN
290 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
291 ELSEIF(igtyp == 52 .OR. ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0)) THEN
292 isubstack = iworksh(3,nelc)
293 stf(i)=slsfac*dx*pm_stack( 2 ,isubstack)
294 ELSE
295 stf(i)=slsfac*dx*pm(20,mt)
296 ENDIF
297 ELSE
298 IF(nintr >= 0) THEN
299 CALL ancmsg(msgid=95,msgtype=msgwarning,anmode=aninfo_blind_2,
300 . i1=id,
301 . c1=titr,
302 . i2=ixc(nixc,nelc),
303 . c2='SHELL',
304 . i3=i)
305 ENDIF
306 IF(nintr < 0) THEN
307 CALL ancmsg(msgid=96,msgtype=msgwarning, anmode=aninfo_blind_2,
308 . i1=id,
309 . c1=titr,
310 . i2=ixc(nixc,nelc),
311 . c2='SHELL',
312 . i3=i)
313 ENDIF
314 ENDIF
315
316C -----Friction model ------
317 IF(intfric > 0) THEN
318 ip= ipartc(nelc)
319
320 ipg = tagprt_fric(ip)
321 IF(ipg > 0) THEN
323 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
324 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
325 ipartfric(inrt) = ipl
326 ENDIF
327 ENDIF
328C------------------------------------
329 ENDIF
330 CALL i11fil(irect,ixt ,ixp,ixr,nintr,nelt ,
331 . nelp,nelr,nelx,inrt,nod2el1d,
332 . knod2el1d,kxx,ixx)
333 IF(nelt /= 0) THEN
334 mt=ixt(1,nelt)
335 mg=ixt(4,nelt)
336 ip = ipartt(nelt)
337 IF (thk_part(ip) > zero ) THEN
338 dx1=thk_part(ip)
339 ELSE
340 dx1=sqrt(geo(1,mg))
341 END IF
342 dx=sqrt(geo(1,mg))
343 gap_sm(i)=max(gap_sm(i),half*dx1)
344 gaps1=max(gaps1,gap_sm(i))
345 gapmn = min(gapmn,dx1)
346 dxm=dxm+dx
347 ndx=ndx+1
348 IF(mt > 0)THEN
349 stf(i)=slsfac*dx*pm(20,mt)
350 IF (nsubdom>0) stf(i)=slsfac*dx*pm_r2r(mt)
351 ELSE
352 IF(nintr >= 0) THEN
353 CALL ancmsg(msgid=95,msgtype=msgwarning,anmode=aninfo_blind_2,
354 . i1=id,
355 . c1=titr,
356 . i2=ixt(nixt,nelt),
357 . c2='TRUSS',
358 . i3=i)
359 ENDIF
360 IF(nintr < 0) THEN
361 CALL ancmsg(msgid=96,msgtype=msgwarning,anmode=aninfo_blind_2,
362 . i1=id,
363 . c1=titr,
364 . i2=ixt(nixt,nelt),
365 . c2='TRUSS',
366 . i3=i)
367 ENDIF
368 ENDIF
369C -----Friction model ------
370 IF(intfric > 0) THEN
371 ip= ipartt(nelt)
372 ipg = tagprt_fric(ip)
373 IF(ipg > 0) THEN
375 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
376 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
377 ipartfric(inrt) = ipl
378 ENDIF
379 ENDIF
380C------------------------------------
381 ELSEIF(nelp /= 0) THEN
382 mt=ixp(1,nelp)
383 mg=ixp(5,nelp)
384 ip = ipartp(nelp)
385 IF (thk_part(ip) > zero ) THEN
386 dx1=thk_part(ip)
387 ELSE
388 dx1=sqrt(geo(1,mg))
389 END IF
390 dx=sqrt(geo(1,mg))
391 gap_sm(i)=max(gap_sm(i),half*dx1)
392 gaps1=max(gaps1,gap_sm(i))
393 gapmn = min(gapmn,dx1)
394 dxm=dxm+dx
395 ndx=ndx+1
396 IF(mt > 0)THEN
397 stf(i)=slsfac*dx*pm(20,mt)
398 IF (nsubdom>0) stf(i)=slsfac*dx*pm_r2r(mt)
399 ELSE
400 IF(nintr >= 0) THEN
401 CALL ancmsg(msgid=95,msgtype=msgwarning,anmode=aninfo_blind_2,
402 . i1=id,
403 . c1=titr,
404 . i2=ixp(nixp,nelp),
405 . c2='BEAM',
406 . i3=i)
407 ENDIF
408 IF(nintr<0) THEN
409 CALL ancmsg(msgid=96,msgtype=msgwarning,anmode=aninfo_blind_2,
410 . i1=id,
411 . c1=titr,
412 . i2=ixp(nixp,nelp),
413 . c2='beam',
414 . I3=I)
415 ENDIF
416 ENDIF
417C -----Friction model ------
418 IF(INTFRIC > 0) THEN
419 IP= IPARTP(NELP)
420 IPG = TAGPRT_FRIC(IP)
421 IF(IPG > 0) THEN
422 CALL FRICTION_PARTS_SEARCH (
423 . IPG,INTBUF_FRIC_TAB(INTFRIC)%S_TABPARTS_FRIC,
424 . INTBUF_FRIC_TAB(INTFRIC)%TABPARTS_FRIC,IPL )
425 IPARTFRIC(INRT) = IPL
426 ENDIF
427 ENDIF
428C------------------------------------
429 ELSEIF(NELR /= 0) THEN
430 MG=IXR(1,NELR)
431 MT = IXR(5,NELR)
432 IP = IPARTR(NELR)
433 IF(IP > 0)THEN
434 IF (THK_PART(IP) > ZERO ) THEN
435 DX1=THK_PART(IP)
436 GAP_SM(I)=MAX(GAP_SM(I),HALF*DX1)
437 GAPS1=MAX(GAPS1,GAP_SM(I))
438 GAPMN = MIN(GAPMN,DX1)
439 END IF
440 ENDIF
441 IF(MG > 0)THEN
442 IGTYP=NINT(GEO(12,MG))
443.OR. IF(IGTYP==4IGTYP==12)THEN
444 STF(I)=SLSFAC*GEO(2,MG)
445.OR. ELSEIF(IGTYP==8IGTYP==13)THEN
446 STF(I)=SLSFAC*MAX(GEO(3,MG),GEO(10,MG),GEO(15,MG))
447 ELSEIF(IGTYP == 23)THEN
448 STF(I)=SLSFAC*MAX(PM(191,MT),PM(192,MT),PM(193,MT))
449 ELSEIF(IGTYP==25)THEN
450 STF(I)=SLSFAC*GEO(10,MG)
451 ELSEIF(IGTYP>=29)THEN
452 STF(I)=SLSFAC*GEO(3,MG)
453 ELSE
454 WRITE(6,'(a)') 'internal error 987'
455 CALL MY_EXIT(2)
456 ENDIF
457 ELSE
458 IF(NINTR >= 0) THEN
459 CALL ANCMSG(MSGID=95,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
460 . I1=ID,
461 . C1=TITR,
462 . I2=IXR(NIXR,NELR),
463 . C2='spring',
464 . I3=I)
465 ENDIF
466 IF(NINTR < 0) THEN
467 CALL ANCMSG(MSGID=96,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
468 . I1=ID,
469 . C1=TITR,
470 . I2=IXR(NIXR,NELR),
471 . C2='spring',
472 . I3=I)
473 ENDIF
474 ENDIF
475C -----Friction model ------
476 IF(INTFRIC > 0) THEN
477 IP= IPARTR(NELR)
478 IPG = TAGPRT_FRIC(IP)
479 IF(IPG > 0) THEN
480 CALL FRICTION_PARTS_SEARCH (
481 . IPG,INTBUF_FRIC_TAB(INTFRIC)%S_TABPARTS_FRIC,
482 . INTBUF_FRIC_TAB(INTFRIC)%TABPARTS_FRIC,IPL )
483 IPARTFRIC(INRT) = IPL
484 ENDIF
485 ENDIF
486C------------------------------------
487 ELSEIF(NELX /= 0) THEN
488 MG=KXX(2,NELX)
489 IF(MG>0)THEN
490 STF(I)=SLSFAC*GET_U_GEO(4,MG)*(KXX(3,NELX)-1)/LELX(NELX)
491 ELSE
492 IF(NINTR >= 0) THEN
493 CALL ANCMSG(MSGID=95,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
494 . I1=ID,
495 . C1=TITR,
496 . I2=KXX(NIXX,NELX),
497 . C2='xelem',
498 . I3=I)
499 ENDIF
500 IF(NINTR < 0) THEN
501 CALL ANCMSG(MSGID=96,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
502 . I1=ID,
503 . C1=TITR,
504 . I2=KXX(NIXX,NELX),
505 . C2='xelem',
506 . I3=I)
507 ENDIF
508 ENDIF
509C -----Friction model ------
510 IF(INTFRIC > 0) THEN
511 IP= IPARTX(NELX)
512 IPG = TAGPRT_FRIC(IP)
513 IF(IPG > 0) THEN
514 CALL FRICTION_PARTS_SEARCH (
515 . IPG,INTBUF_FRIC_TAB(INTFRIC)%S_TABPARTS_FRIC,
516 . INTBUF_FRIC_TAB(INTFRIC)%TABPARTS_FRIC,IPL )
517 IPARTFRIC(INRT) = IPL
518 ENDIF
519 ENDIF
520C------------------------------------
521 ENDIF
522
523 IF(NELS+NELC+NELTG+NELT+NELP+NELR+NUMELX==0.)THEN
524 IF(NINTR > 0) THEN
525 CALL ANCMSG(MSGID=481,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_2,
526 . I1=ID,
527 . C1=TITR,
528 . I2=I)
529 ENDIF
530 IF(NINTR < 0) THEN
531 CALL ANCMSG(MSGID=482,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_2,
532 . I1=ID,
533 . C1=TITR,
534 . I2=I)
535 ENDIF
536 ENDIF
537 ENDDO!I=1,NRT
538C---------------------------------------------
539C
540C Igap == 3
541C
542 IF(IGAP == 3)THEN
543 DO I=1,NRT
544 XL = EP30
545 N1=IRECT(1,I)
546 N2=IRECT(2,I)
547.AND. IF(N1 /= N2 N1 /= 0)
548 . XL=MIN(XL,SQRT((X(1,N1)-X(1,N2))**2+(X(2,N1)-X(2,N2))**2+
549 . (X(3,N1)-X(3,N2))**2))
550
551 DO J=1,2
552 N1=IRECT(J,I)
553 DO K=KNOD2EL1D(N1)+1,KNOD2EL1D(N1+1)
554.AND. IF (NOD2EL1D(K) <= NUMELT NOD2EL1D(K) /= ZERO) THEN
555 T = NOD2EL1D(K)
556 XL=MIN(XL,SQRT((X(1,IXT(2,T))-X(1,IXT(3,T)))**2+
557 . (X(2,IXT(2,T))-X(2,IXT(3,T)))**2+
558 . (X(3,IXT(2,T))-X(3,IXT(3,T)))**2))
559.AND. ELSEIF (NOD2EL1D(K) <= NUMELT+NUMELP NOD2EL1D(K) /= ZERO) THEN
560 P = NOD2EL1D(K) - NUMELT
561 XL=MIN(XL,SQRT((X(1,IXP(2,P))-X(1,IXP(3,P)))**2+
562 . (X(2,IXP(2,P))-X(2,IXP(3,P)))**2+
563 . (X(3,IXP(2,P))-X(3,IXP(3,P)))**2))
564.AND. ELSEIF (NOD2EL1D(K) <= NUMELT+NUMELP+NUMELR NOD2EL1D(K) /= ZERO) THEN
565 R = NOD2EL1D(K) - NUMELT - NUMELP
566 XL=MIN(XL,SQRT((X(1,IXR(2,R))-X(1,IXR(3,R)))**2+
567 . (X(2,IXR(2,R))-X(2,IXR(3,R)))**2+
568 . (X(3,IXR(2,R))-X(3,IXR(3,R)))**2))
569 ENDIF
570 ENDDO
571 ENDDO
572 DO J=1,2
573 GAP_L(I) = MIN(GAP_L(I),PERCENT_SIZE*XL)
574 ENDDO
575 ENDDO
576 ENDIF
577C---------------------------
578C GAP
579C---------------------------
580 GAPMX=SQRT(GAPMX)
581 IF(IGAP==0)THEN
582C---------------------------
583C GAP FIXE
584C---------------------------
585 IF(GAP0 > ZERO)THEN
586 GAP1 = GAP0
587 ELSE
588 IF(NDX/=0)THEN
589 GAP1 = MIN(HALF*GAPMX,DXM/NDX)
590 ELSE
591 GAP1 = EM01* GAPMX
592 ENDIF
593.AND. IF ((NINTR<0)(IT19==0)) WRITE(IOUT,1300)HALF*(GAPMIN+GAP1)
594 ENDIF
595
596 IF(NINTR < 0) GAP1 = HALF*(GAPMIN+GAP1)
597 GAPMIN = GAP1
598 GAPMAX = GAP1
599
600.AND. IF ((GAP1 > HALF*GAPMX) (IREM_GAP /= 2)) THEN
601 GAPTMP = HALF*GAPMX
602 CALL ANCMSG(MSGID=94,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
603 . I1=ID,
604 . C1=TITR,
605 . R1=GAP1,
606 . R2=GAPTMP)
607 ENDIF
608 ELSE
609C---------------------------
610C GAP VARIABLE
611C---------------------------
612 BGAPSMX = ZERO
613 IF(GAP0 > ZERO)THEN
614 GAP1 = GAP0
615 ELSE
616 IF(NDX /= 0)THEN
617 GAP1 = MIN(HALF*GAPMX,GAPMN)
618 ELSE
619 GAP1 = EM01 * GAPMX
620 ENDIF
621.AND. IF ((NINTR<0) (IT19==0)) WRITE(IOUT,1300)HALF*(GAPMIN+GAP1)
622 ENDIF
623C MIN GAP AND MAX OF VARIABLE GAPS
624 IF(NINTR>0)THEN
625 GAPMIN = GAP1
626 GAPMAX = GAPS1
627 ELSE
628 GAPMIN = HALF*(GAPMIN+GAP1)
629 GAPMAX = MAX(GAPMAX+GAPS1,GAPMIN)
630 BGAPSMX = MAX(BGAPSMX,GAPS1)
631 ENDIF
632
633.AND..AND. IF ((GAPMAX>HALF*GAPMX) (IGAP/=3) (IREM_GAP/=2))THEN
634 GAPTMP = HALF*GAPMX
635 CALL ANCMSG(MSGID=94,MSGTYPE=MSGWARNING,ANMODE=ANINFO_BLIND_2,
636 . I1=ID,
637 . C1=TITR,
638 . R1=GAPMAX,
639 . R2=GAPTMP)
640 ENDIF
641 ENDIF
642C---------------------------
643C STIF GLOBAL
644C---------------------------
645 IF(SLSFAC < ZERO)THEN
646 DO I=1,NRT
647 STF(I)=-SLSFAC
648 ENDDO
649 ENDIF
650C---------------------------------------------
651C
652C Calculation of the actual gap to use during the retri criterion
653C
654 IF(IGAP == 0) THEN
655 GAPINF=GAPMAX
656.OR. ELSEIF(IGAP==1 IGAP==2) THEN
657 DO I = 1, NRT
658 GAPINF = MIN(GAPINF,GAP_SM(I))
659 ENDDO
660 ELSEIF(IGAP==3) THEN
661 DO I = 1, NRT
662 GAPINF = MIN(GAPINF,MIN(GAP_SM(I),GAP_L(I)))
663 ENDDO
664 ENDIF
665
666 IF(INTTH /= 0)THEN
667 IF(DRAD == ZERO)THEN
668C by default Drad = max( sup des gaps , largeur des elts )
669 DRAD=MAX(GAP1,GAPMX)
670 ELSEIF(DRAD < GAP1)THEN
671C Drad > gap
672 DRAD=GAP1
673 END IF
674 WRITE(IOUT,2001)DRAD
675
676C Performance warning
677 IF(DRAD > GAPMX)THEN
678 CALL ANCMSG(MSGID=918, MSGTYPE=MSGWARNING, ANMODE=ANINFO_BLIND_2,
679 . I1=ID,
680 . C1=TITR,
681 . R1=DRAD ,
682 . R2=GAPMX,
683 . I2=ID)
684 END IF
685 END IF
686
687C second. surface--
688 IF(INTTH > 0 ) THEN
689.OR. IF(NELC /=0 NELTG /= 0) THEN
690 DO I=1,NRT
691 AREA(I) = ZERO
692 JJ1 = 0
693 DO J=KNOD2ELC(IRECT(1,I))+1,KNOD2ELC(IRECT(1,I)+1)
694 JJ1 = JJ1 +1
695 IE1(JJ1,1) = NOD2ELC(J)
696 IE1(JJ1,2) = 4
697 ENDDO
698 DO J= KNOD2ELTG(IRECT(1,I))+1,KNOD2ELTG(IRECT(1,I)+1)
699 JJ1 = JJ1 +1
700 IE1(JJ1,1) = NOD2ELTG(J)
701 IE1(JJ1,2) = 3
702 ENDDO
703 JJ2 = 0
704 DO J=KNOD2ELC(IRECT(2,I))+1,KNOD2ELC(IRECT(2,I)+1)
705 JJ2 = JJ2 +1
706 IE2(JJ2,1) = NOD2ELC(J)
707 IE2(JJ2,2) = 4
708 ENDDO
709 DO J= KNOD2ELTG(IRECT(2,I))+1,KNOD2ELTG(IRECT(2,I)+1)
710 JJ2 = JJ2 +1
711 IE2(JJ2,1) = NOD2ELTG(J)
712 IE2(JJ2,2) = 3
713 ENDDO
714 IEC = 0
715 DO J=1,JJ1
716 DO K=1,JJ2
717 IF(IE1(J,1) == IE2(K,1)) THEN
718 IE = IE1(J,1)
719 IEC = IEC +1
720 IF(IE1(J,2)==4) THEN
721 SX1 = X(1,IXC(4,IE)) - X(1,IXC(2,IE))
722 SY1 = X(2,IXC(4,IE)) - X(2,IXC(2,IE))
723 SZ1 = X(3,IXC(4,IE)) - X(3,IXC(2,IE))
724 SX2 = X(1,IXC(5,IE)) - X(1,IXC(3,IE))
725 SY2 = X(2,IXC(5,IE)) - X(2,IXC(3,IE))
726 SZ2 = X(3,IXC(5,IE)) - X(3,IXc(3,IE))
727 SX3 = SY1*SZ2 - SZ1*SY2
728 SY3 = SZ1*SX2 - SX1*SZ2
729 SZ3 = SX1*SY2 - SY1*SX2
730 AREA(I) = AREA(I)+ ONE_OVER_8*SQRT(SX3*SX3+SY3*SY3+SZ3*SZ3)
731 IELEC(I) = IXC(1,IE)
732 MG = IXC(6,IE)
733 ENDIF
734 IF(IE1(J,2) == 3) THEN
735 SX1 = X(1,IXTG(3,IE)) - X(1,IXTG(2,IE))
736 SY1 = X(2,IXTG(3,IE)) - X(2,IXTG(2,IE))
737 SZ1 = X(3,IXTG(3,IE)) - X(3,IXTG(2,IE))
738 SX2 = X(1,IXTG(4,IE)) - X(1,IXTG(2,IE))
739 SY2 = X(2,IXTG(4,IE)) - X(2,IXTG(2,IE))
740 SZ2 = X(3,IXTG(4,IE)) - X(3,IXTG(2,IE))
741 SX3 = SY1*SZ2 - SZ1*SY2
742 SY3 = SZ1*SX2 - SX1*SZ2
743 SZ3 = SX1*SY2 - SY1*SX2
744 AREA(I) = AREA(I) + ONE_OVER_6*SQRT(SX3*SX3+SY3*SY3+SZ3*SZ3)
745 IELEC(I) = IXTG(1,IE)
746 MG = IXTG(5,IE)
747 ENDIF
748 ENDIF
749 ENDDO
750 ENDDO
751 AREA(I) = HALF*SQRT(AREA(I))
752 IF(IEC == 1) THEN
753 DX=GEO(1,MG)
754 AREA(I) = AREA(I)+HALF*DX
755 ENDIF
756 ENDDO
757
758 ELSEIF(NELS /= 0) THEN
759 DO I=1,NRT
760 AREA(I) = ZERO
761 JJ1 = 0
762 DO J=KNOD2ELS(IRECT(1,I))+1,KNOD2ELS(IRECT(1,I)+1)
763 JJ1 = JJ1 +1
764 IE1(JJ1,1) = NOD2ELS(J)
765 ENDDO
766 JJ2 = 0
767 DO J=KNOD2ELS(IRECT(2,I))+1,KNOD2ELS(IRECT(2,I)+1)
768 JJ2 = JJ2 +1
769 IE2(JJ2,1) = NOD2ELS(J)
770 ENDDO
771 IEC = 0
772 DO J=1,JJ1
773 DO K=1,JJ2
774 IF(IE1(J,1) == IE2(K,1)) THEN
775 IE = IE1(J,1)
776 IEC= IEC +1
777 IELEC(I) = IXS(1,IE)
778
779 N1=IXS(2,IE)
780 N2=IXS(3,IE)
781 N3=IXS(4,IE)
782 N4=IXS(5,IE)
783 N5=IXS(6,IE)
784 N6=IXS(7,IE)
785 N7=IXS(8,IE)
786 N8=IXS(9,IE)
787
788 X1=X(1,N1)
789 Y1=X(2,N1)
790 Z1=X(3,N1)
791 X2=X(1,N2)
792 Y2=X(2,N2)
793 Z2=X(3,N2)
794 X3=X(1,N3)
795 Y3=X(2,N3)
796 Z3=X(3,N3)
797 X4=X(1,N4)
798 Y4=X(2,N4)
799 Z4=X(3,N4)
800 X5=X(1,N5)
801 Y5=X(2,N5)
802 Z5=X(3,N5)
803 X6=X(1,N6)
804 Y6=X(2,N6)
805 Z6=X(3,N6)
806 X7=X(1,N7)
807 Y7=X(2,N7)
808 Z7=X(3,N7)
809 X8=X(1,N8)
810 Y8=X(2,N8)
811 Z8=X(3,N8)
812
813c face 1234
814 XX1(1)=X1
815 XX2(1)=Y1
816 XX3(1)=Z1
817 XX1(2)=X2
818 XX2(2)=Y2
819 XX3(2)=Z2
820 XX1(3)=X3
821 XX2(3)=Y3
822 XX3(3)=Z3
823 XX1(4)=X4
824 XX2(4)=Y4
825 XX3(4)=Z4
826 CALL NORMA1(N_1,N_2,N_3,FACE(1),XX1,XX2,XX3)
827 IF( N4/=N3
828.AND. . N3/=N2
829.AND. . N2/=N1
830.AND. . N1/=N4)THEN
831 FACE(1) = FOURTH*FACE(1)
832 ELSE
833 FACE(1) = THIRD*FACE(1)
834 ENDIF
835c face 5678
836 XX1(1)=X5
837 XX2(1)=Y5
838 XX3(1)=Z5
839 XX1(2)=X6
840 XX2(2)=Y6
841 XX3(2)=Z6
842 XX1(3)=X7
843 XX2(3)=Y7
844 XX3(3)=Z7
845 XX1(4)=X8
846 XX2(4)=Y8
847 XX3(4)=Z8
848 CALL NORMA1(N_1,N_2,N_3,FACE(2),XX1,XX2,XX3)
849 IF( N8/=N7
850.AND. . N7/=N6
851.AND. . N6/=N5
852.AND. . N5/=N8)THEN
853 FACE(2) = FOURTH*FACE(2)
854 ELSE
855 FACE(2) = THIRD*FACE(2)
856 ENDIF
857c face 2376
858 XX1(1)=X2
859 XX2(1)=Y2
860 XX3(1)=Z2
861 XX1(2)=X3
862 XX2(2)=Y3
863 XX3(2)=Z3
864 XX1(3)=X7
865 XX2(3)=Y7
866 XX3(3)=Z7
867 XX1(4)=X6
868 XX2(4)=Y6
869 XX3(4)=Z6
870 CALL NORMA1(N_1,N_2,N_3,FACE(3),XX1,XX2,XX3)
871 IF( N6/=N7
872.AND. . N7/=N3
873.AND. . N3/=N2
874.AND. . N2/=N6)THEN
875 FACE(3) = FOURTH*FACE(3)
876 ELSE
877 FACE(3) = THIRD*FACE(3)
878 ENDIF
879c face 1485
880 XX1(1)=X1
881 XX2(1)=Y1
882 XX3(1)=Z1
883 XX1(2)=X4
884 XX2(2)=Y4
885 XX3(2)=Z4
886 XX1(3)=X8
887 XX2(3)=Y8
888 XX3(3)=Z8
889 XX1(4)=X5
890 XX2(4)=Y5
891 XX3(4)=Z5
892 CALL NORMA1(N_1,N_2,N_3,FACE(4),XX1,XX2,XX3)
893 IF( N5/=N8
894.AND. . N8/=N4
895.AND. . N4/=N1
896.AND. . N1/=N5)THEN
897 FACE(4) = FOURTH*FACE(4)
898 ELSE
899 FACE(4) = THIRD*FACE(4)
900 ENDIF
901c face 1265
902 XX1(1)=X1
903 XX2(1)=Y1
904 XX3(1)=Z1
905 XX1(2)=X2
906 XX2(2)=Y2
907 XX3(2)=Z2
908 XX1(3)=X6
909 XX2(3)=Y6
910 XX3(3)=Z6
911 XX1(4)=X5
912 XX2(4)=Y5
913 XX3(4)=Z5
914 CALL NORMA1(N_1,N_2,N_3,FACE(5),XX1,XX2,XX3)
915 IF( N5/=N6
916.AND. . N6/=N2
917.AND. . N2/=N1
918.AND. . N1/=N5)THEN
919 FACE(5) = FOURTH*FACE(5)
920 ELSE
921 FACE(5) = THIRD*FACE(5)
922 ENDIF
923c face 4378
924 XX1(1)=X4
925 XX2(1)=Y4
926 XX3(1)=Z4
927 XX1(2)=X3
928 XX2(2)=Y3
929 XX3(2)=Z3
930 XX1(3)=X7
931 XX2(3)=Y7
932 XX3(3)=Z7
933 XX1(4)=X8
934 XX2(4)=Y8
935 XX3(4)=Z8
936 CALL NORMA1(N_1,N_2,N_3,FACE(6),XX1,XX2,XX3)
937 IF( N8/=N7
938.AND. . N7/=N3
939.AND. . N3/=N4
940.AND. . N4/=N8)THEN
941 FACE(6) = FOURTH*FACE(6)
942 ELSE
943 FACE(6) = THIRD*FACE(6)
944 ENDIF
945C----
946 DO K1=1,8
947 N1 = IXS(K1+1,IE)
948.AND. IF (N1 == IRECT(1,I)N2 == IRECT(2,I)) THEN
949 DO K2=1,8
950 N2 = IXS(K2+1,IE)
951.AND. IF (K1 == 1 K2 == 2) THEN
952 AREA(I) = AREA(I) + (FACE(1)+FACE(5))
953.AND. ELSEIF (K1 == 1 K2 == 4) THEN
954 AREA(I) = AREA(I) + (FACE(1)+FACE(4))
955.AND. ELSEIF (K1 == 1 K2 == 5) THEN
956 AREA(I) = AREA(I) + (FACE(4)+FACE(5))
957.AND. ELSEIF (K1 == 2 K2 == 3) THEN
958 AREA(I) = AREA(I) + (FACE(1)+FACE(3))
959.AND. ELSEIF (K1 == 2 K2 == 6) THEN
960 AREA(I) = AREA(I) + (FACE(5)+FACE(3))
961.AND. ELSEIF (K1 == 3 K2 == 4) THEN
962 AREA(I) = AREA(I) + (FACE(1)+FACE(6))
963.AND. ELSEIF (K1 == 3 K2 == 7) THEN
964 AREA(I) = AREA(I) + (FACE(3)+FACE(6))
965.AND. ELSEIF (K1 == 4 K2 == 1) THEN
966 AREA(I) = AREA(I) + (FACE(1)+FACE(4))
967.AND. ELSEIF (K1 == 4 K2 == 8) THEN
968 AREA(I) = AREA(I) + (FACE(6)+FACE(4))
969.AND. ELSEIF (K1 == 5 K2 == 6) THEN
970 AREA(I) = AREA(I) + (FACE(2)+FACE(5))
971.AND. ELSEIF (K1 == 6 K2 == 7) THEN
972 AREA(I) = AREA(I) + (FACE(2)+FACE(5))
973.AND. ELSEIF (K1 == 7 K2 == 8) THEN
974 AREA(I) = AREA(I) + (FACE(2)+FACE(6))
975.AND. ELSEIF (K1 == 8 K2 == 5) THEN
976 AREA(I) = AREA(I) + (FACE(2)+FACE(4))
977 ENDIF
978 ENDDO
979 ENDIF
980 ENDDO
981 ENDIF
982 ENDDO
983 ENDDO
984 ENDDO
985 ELSEIF(NELP /= 0) THEN
986 DO I=1,NRT
987 AREA(I) = ZERO
988 JJ1 = 0
989 DO J=KNOD2EL1D(IRECT(1,I))+1,KNOD2EL1D(IRECT(1,I)+1)
990 IE = NOD2EL1D(J)
991 JJ1 = JJ1+1
992 MG = IXP(5,IE)
993 DX = SQRT(GEO(1,MG))
994 AREA(I) = AREA(I)+DX
995 IELEC(I) = IXP(1,IE)
996 ENDDO
997 DO J=KNOD2EL1D(IRECT(2,I))+1,KNOD2EL1D(IRECT(2,I)+1)
998 IE = NOD2EL1D(J)
999 JJ1 = JJ1+1
1000 MG = IXP(5,IE)
1001 DX = SQRT(GEO(1,MG))
1002 AREA(I) = AREA(I)+DX
1003 ENDDO
1004 AREA(I) = SQRT(AREA(I)/JJ1)
1005 ENDDO
1006 ELSEIF(NELT /= 0) THEN
1007 DO I=1,NRT
1008 AREA(I) = ZERO
1009 JJ1 = 0
1010 DO J=KNOD2EL1D(IRECT(1,I))+1,KNOD2EL1D(IRECT(1,I)+1)
1011 IE = NOD2EL1D(J)
1012 JJ1 = JJ1+1
1013 MG=IXT(4,IE)
1014 DX=SQRT(GEO(1,MG))
1015 AREA(I) = AREA(I)+DX
1016 IELEC(I) = IXT(1,IE)
1017 ENDDO
1018 DO J=KNOD2EL1D(IRECT(2,I))+1,KNOD2EL1D(IRECT(2,I)+1)
1019 IE = NOD2EL1D(J)
1020 JJ1 = JJ1+1
1021 MG = IXT(4,IE)
1022 DX = SQRT(GEO(1,MG))
1023 AREA(I) = AREA(I)+DX
1024 ENDDO
1025 AREA(I) = SQRT(AREA(I)/JJ1)
1026 ENDDO
1027 ENDIF
1028
1029 ENDIF
1030
1031C----------------------------------
1032 RETURN
1033C----------------------------------
1034
1035 1300 FORMAT(2X,'computed gap = ',1PG20.13)
1036 2001 FORMAT(2X,'maximum distance for radiation computation = ',1PG20.13)
1037
1038 END SUBROUTINE I11STI3
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine i11coq(irect, ixc, ixtg, nint, nel, neltg, is, geo, pm, thk, igeo, knod2elc, knod2eltg, nod2elc, nod2eltg, pm_stack, iworksh)
Definition i11coq.F:35
subroutine i11fil(irect, ixt, ixp, ixr, nint, nelt, nelp, nelr, nelx, is, nod2el1d, knod2el1d, kxx, ixx)
Definition i11coq.F:168
subroutine i11gmx3(x, irect, i, gapmax, xl2)
Definition i11gmx3.F:32
subroutine i11sol(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ixs10)
Definition i11sol.F:33
subroutine i11sti3(x, irect, stf, ixs, pm, geo, nrt, ixc, nintr, slsfac, nty, gapmax, noint, gap_sm, ms, ixtg, ixt, ixp, ixr, igap, gapmin, gap0, gapinf, ipartc, iparttg, thk, thk_part, percent_size, gap_l, nod2el1d, knod2el1d, itab, ixs10, id, titr, kxx, ixx, igeo, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, lelx, fillsol, intth, drad, area, ielec, pm_stack, iworksh, it19, bgapsmx, intfric, iparts, tagprt_fric, ipartfric, intbuf_fric_tab, ipartt, ipartp, ipartx, ipartr, irem_gap)
Definition i11sti3.F:56
subroutine friction_parts_search(ip, npartsfric, partsfric, ipl)
Definition i7sti3.F:1268
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
subroutine radiation(ibcr, fradia, npc, tf, x, temp, nsensor, sensor_tab, fthe, iad, fthesky, python, glob_therm)
Definition radiation.F:38
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 volint(vol)
Definition volint.F:38