OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i25sti_edg.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!|| i25sti_edg ../starter/source/interfaces/inter3d1/i25sti_edg.F
25!||--- called by ------------------------------------------------------
26!|| inint3 ../starter/source/interfaces/inter3d1/inint3.F
27!||--- uses -----------------------------------------------------
28!||====================================================================
29 SUBROUTINE i25sti_edg(
30 1 NEDGE ,LEDGE ,STFE ,STFM ,IGAP ,
31 2 GAPE ,GAP_E_L ,GAP_M ,GAP_M_L ,GAP_S_L ,
32 3 BGAPEMX ,INTFRIC ,IPARTFRIC_E,IPARTFRICM,IPARTSM ,
33 4 BGAPEMX_L,NSN ,NSV )
34C-----------------------------------------------
35 USE intbuf_fric_mod
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C-----------------------------------------------
41C C o m m o n B l o c k s
42C-----------------------------------------------
43#include "param_c.inc"
44#include "com04_c.inc"
45C-----------------------------------------------
46C D u m m y A r g u m e n t s
47C-----------------------------------------------
48 INTEGER NEDGE,IGAP,INTFRIC,
49 . LEDGE(NLEDGE,*),IPARTFRIC_E(*) ,IPARTFRICM(*), IPARTSM(*)
50 INTEGER , INTENT(IN) :: NSN
51 INTEGER , INTENT(IN) :: NSV(NSN)
53 . stfe(*), gape(*), gap_e_l(*), stfm(*), gap_m(*), gap_m_l(*), gap_s_l(*), bgapemx,
54 . bgapemx_l
55C-----------------------------------------------
56C L o c a l V a r i a b l e s
57C-----------------------------------------------
58 INTEGER I, A, B, N1, N2, IPRTA, IPRTB, IPRTGA, IPRTGB
59 my_real
60 . STFA,STFB,GAPA,GAPB
61 INTEGER, DIMENSION(:),ALLOCATABLE :: TAGSLAV
62C-----------------------------------------------
63 DO i=1,nedge
64
65 stfa=zero
66 stfb=zero
67
68 a=ledge(1,i)
69 IF(a/=0) stfa=stfm(a)
70 b=ledge(3,i)
71 IF(b/=0) stfb=stfm(b)
72 IF(stfa/=zero.AND.stfb/=zero)THEN
73 IF(stfa + stfb < zero) THEN
74 stfe(i)= zero
75 ELSE
76 stfe(i)=two*stfa*stfb/max(zero,stfa+stfb)
77 END IF
78 ELSE
79 stfe(i)=max(stfa,stfb)
80 END IF
81 END DO
82C
83 bgapemx=zero
84 DO i=1,nedge
85
86 gapa=zero
87 gapb=zero
88
89 a=ledge(1,i)
90 IF(a/=0) gapa=gap_m(a)
91 b=ledge(3,i)
92 IF(b/=0) gapb=gap_m(b)
93 gape(i)=max(gapa,gapb)
94
95 bgapemx = max(bgapemx,gape(i)) ! BGAPEMX overall the model
96
97 END DO
98
99 bgapemx_l=zero
100 IF(igap==3)THEN
101 ALLOCATE(tagslav(numnod))
102 tagslav(1:numnod) = 0
103 DO i=1,nsn
104 tagslav(nsv(i)) = i
105 ENDDO
106 DO i=1,nedge
107 n1=ledge(5,i)
108 n2=ledge(6,i) ! 4-node segment
109 gap_e_l(i)=min(gap_s_l(tagslav(n1)),gap_s_l(tagslav(n2))) ! O-----------------O
110 ! Edge1 Edge2
111
112 bgapemx_l = max(bgapemx_l,gap_e_l(i)) ! BGAPEMX_L overall the model
113 END DO
114 DEALLOCATE(tagslav)
115 END IF
116
117 IF(intfric > 0) THEN
118 DO i=1,nedge
119 iprta=0
120 iprtb=0
121
122 iprtga=0
123 iprtgb=0
124
125 a=ledge(1,i)
126 IF(a/=0) iprtga=ipartsm(a)
127 IF(a/=0) iprta=ipartfricm(a)
128
129 b=ledge(3,i)
130 IF(b/=0) iprtgb=ipartsm(b)
131 IF(b/=0) iprtb=ipartfricm(b)
132
133 IF(iprta == iprtb) THEN
134 ipartfric_e(i) = iprta
135 ELSE
136 IF(iprtga > iprtgb ) THEN ! bigger part id is taken
137 ipartfric_e(i) = iprta
138 ELSE
139 ipartfric_e(i) = iprtb
140 ENDIF
141 ENDIF
142 END DO
143 ENDIF
144C
145 RETURN
146 END
#define my_real
Definition cppsort.cpp:32
subroutine i25sti_edg(nedge, ledge, stfe, stfm, igap, gape, gap_e_l, gap_m, gap_m_l, gap_s_l, bgapemx, intfric, ipartfric_e, ipartfricm, ipartsm, bgapemx_l, nsn, nsv)
Definition i25sti_edg.F:34
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21