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 stfe(i)=two*stfa*stfb/max(zero,stfa+stfb)
74 ELSE
75 stfe(i)=max(stfa,stfb)
76 END IF
77 END DO
78C
79 bgapemx=zero
80 DO i=1,nedge
81
82 gapa=zero
83 gapb=zero
84
85 a=ledge(1,i)
86 IF(a/=0) gapa=gap_m(a)
87 b=ledge(3,i)
88 IF(b/=0) gapb=gap_m(b)
89 gape(i)=max(gapa,gapb)
90
91 bgapemx = max(bgapemx,gape(i)) ! BGAPEMX overall the model
92
93 END DO
94
95 bgapemx_l=zero
96 IF(igap==3)THEN
97 ALLOCATE(tagslav(numnod))
98 tagslav(1:numnod) = 0
99 DO i=1,nsn
100 tagslav(nsv(i)) = i
101 ENDDO
102 DO i=1,nedge
103 n1=ledge(5,i)
104 n2=ledge(6,i) ! 4-node segment
105 gap_e_l(i)=min(gap_s_l(tagslav(n1)),gap_s_l(tagslav(n2))) ! O-----------------O
106 ! Edge1 Edge2
107
108 bgapemx_l = max(bgapemx_l,gap_e_l(i)) ! BGAPEMX_L overall the model
109 END DO
110 DEALLOCATE(tagslav)
111 END IF
112
113 IF(intfric > 0) THEN
114 DO i=1,nedge
115 iprta=0
116 iprtb=0
117
118 iprtga=0
119 iprtgb=0
120
121 a=ledge(1,i)
122 IF(a/=0) iprtga=ipartsm(a)
123 IF(a/=0) iprta=ipartfricm(a)
124
125 b=ledge(3,i)
126 IF(b/=0) iprtgb=ipartsm(b)
127 IF(b/=0) iprtb=ipartfricm(b)
128
129 IF(iprta == iprtb) THEN
130 ipartfric_e(i) = iprta
131 ELSE
132 IF(iprtga > iprtgb ) THEN ! bigger part id is taken
133 ipartfric_e(i) = iprta
134 ELSE
135 ipartfric_e(i) = iprtb
136 ENDIF
137 ENDIF
138 END DO
139 ENDIF
140C
141 RETURN
142 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