OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m15cplrc.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!|| m15cplrc ../engine/source/materials/mat/mat015/m15cplrc.F
25!||--- called by ------------------------------------------------------
26!|| sigeps15c ../engine/source/materials/mat/mat015/sigeps15c.F
27!||====================================================================
28 SUBROUTINE m15cplrc(NEL ,PM ,WPLA ,
29 2 IMATLY ,DAMT ,SHF ,NGL ,SIGE ,
30 3 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX,
31 4 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX,
32 5 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX,
33 6 EPSD_PG,EPSD ,ISRATE ,ASRATE ,TSAIWU )
34C-----------------------------------------------
35C I m p l i c i t T y p e s
36C-----------------------------------------------
37#include "implicit_f.inc"
38C-----------------------------------------------
39C G l o b a l P a r a m e t e r s
40C-----------------------------------------------
41#include "mvsiz_p.inc"
42
43C-----------------------------------------------
44C C o m m o n B l o c k s
45C-----------------------------------------------
46#include "com08_c.inc"
47#include "param_c.inc"
48C-----------------------------------------------
49C D u m m y A r g u m e n t s
50C-----------------------------------------------
51 INTEGER NGL(MVSIZ)
52 INTEGER NEL, ISRATE
53C REAL
54 my_real
55 . PM(NPROPM,*),WPLA(*),DAMT(NEL,2),SHF(*),
56 . sige(mvsiz,5),
57 . depsxx(mvsiz),depsyy(mvsiz),depsxy(mvsiz),depsyz(mvsiz),
58 . depszx(mvsiz),
59 . sigoxx(nel),sigoyy(nel),
60 . sigoxy(nel),sigoyz(nel),sigozx(nel),
61 . signxx(nel),signyy(nel),signxy(nel),
62 . signyz(nel),signzx(nel),tsaiwu(nel)
63 my_real, DIMENSION(NEL), INTENT(IN) :: epsd_pg ! global element strain rate
64 my_real, DIMENSION(NEL), INTENT(INOUT) :: epsd ! lbuf%epsd
65 my_real, INTENT(IN) :: asrate
66C-----------------------------------------------
67C L o c a l V a r i a b l e s
68C-----------------------------------------------
69 INTEGER I, IMATLY
70 INTEGER ICC(MVSIZ)
71 my_real
72 . DP1(MVSIZ), DP2(MVSIZ), DP3(MVSIZ),CB(MVSIZ),CN(MVSIZ),
73 . E11(MVSIZ), E22(MVSIZ), NU12(MVSIZ), NU21(MVSIZ),
74 . g12(mvsiz), g23(mvsiz), g31(mvsiz), fmax(mvsiz),
75 . s1(mvsiz), s2(mvsiz), s3(mvsiz), s4(mvsiz), s5(mvsiz),
76 . ds1(mvsiz), ds2(mvsiz), ds3(mvsiz), de(mvsiz),
77 . de1(mvsiz), de2(mvsiz), wvec(mvsiz), t1(mvsiz),
78 . t2(mvsiz), t3(mvsiz),lamda(mvsiz), coef(mvsiz),
79 . a11(mvsiz), a12(mvsiz), a22(mvsiz),
80 . so1(mvsiz), so2(mvsiz), so3(mvsiz),wplamx(mvsiz),
81 . cc(mvsiz),epdr(mvsiz), fyld(mvsiz),
82 . f1(mvsiz), f2(mvsiz), f12(mvsiz), f11(mvsiz), f22(mvsiz),
83 . f33(mvsiz),wplaref(mvsiz),beta(mvsiz),
84 . scale, cnn, scale1, scale2
85C=======================================================================
86 DO i=1,nel
87 de(i) =pm(44,imatly)
88 e11(i) =pm(33,imatly)
89 e22(i) =pm(34,imatly)
90 nu12(i) =pm(35,imatly)
91 nu21(i) =pm(36,imatly)
92 g12(i) =pm(37,imatly)
93 g23(i) =pm(38,imatly)
94 g31(i) =pm(39,imatly)
95 f1(i) =pm(54,imatly)
96 f2(i) =pm(55,imatly)
97 f11(i) =pm(56,imatly)
98 f22(i) =pm(57,imatly)
99 f33(i) =pm(58,imatly)
100 f12(i) =pm(59,imatly)
101 wplamx(i) =pm(41,imatly)
102 wplaref(i)=pm(68,imatly)
103 cb(i) =pm(46,imatly)
104 cn(i) =pm(47,imatly)
105 fmax(i) =pm(49,imatly)
106 cc(i) =pm(50,imatly)
107 epdr(i) =pm(51,imatly)
108 icc(i) =nint(pm(53,imatly))
109 IF (tt == zero) damt(i,1)=one
110 IF (tt == zero) damt(i,2)=one
111 ENDDO
112C-------------------------------------------------------------------
113C reduction of sig based on the criterion wpla_old >= wplamx
114C-------------------------------------------------------------------
115C-------------------------------------------------------------------
116C DEFORMATIONS ELASTIQUES
117C-----------------------------
118 DO i=1,nel
119 de1(i)=one
120 de2(i)=one
121 scale =one
122 IF (damt(i,2) < one) THEN
123 nu12(i)=em20
124 nu21(i)=em20
125 ENDIF
126 s1(i) = sigoxx(i)/de1(i)-nu12(i)*sigoyy(i)*scale
127 s2(i) = sigoyy(i)/de2(i)-nu21(i)*sigoxx(i)*scale
128 s1(i) = s1(i)/e11(i)
129 s2(i) = s2(i)/e22(i)
130 s3(i) = sigoxy(i)/de1(i)/de2(i)/g12(i)
131 s4(i) = sigoyz(i)/max(de2(i)*g23(i)*shf(i),em30)
132 s5(i) = sigozx(i)/max(de1(i)*g31(i)*shf(i),em30)
133 ENDDO
134C
135 DO i=1,nel
136 s1(i)=s1(i)+depsxx(i)
137 s2(i)=s2(i)+depsyy(i)
138 s3(i)=s3(i)+depsxy(i)
139 s4(i)=s4(i)+depsyz(i)
140 s5(i)=s5(i)+depszx(i)
141 ENDDO
142C
143 DO i=1,nel
144 de1(i)=one
145 de2(i)=one
146 scale1=one
147 scale2 = one-nu12(i)*nu21(i)*scale1
148 IF (damt(i,2) < one) THEN
149 e22(i)=em20
150 nu12(i)=em20
151 nu21(i)=em20
152 ENDIF
153 a11(i) = e11(i)*de1(i)/scale2
154 a22(i) = e22(i)*de2(i)/scale2
155 a12(i) = nu21(i)*a11(i)*scale1
156 ENDDO
157C-----------------------------
158C ELASTIC STRESSES
159C-----------------------------
160 DO i=1,nel
161 t1(i) = a11(i)*s1(i)+a12(i)*s2(i)
162 t2(i) = a12(i)*s1(i)+a22(i)*s2(i)
163 t3(i) = de1(i)*de2(i)*g12(i)*s3(i)
164 signyz(i)= de2(i)*g23(i)*shf(i)*s4(i)
165 signzx(i)= de1(i)*g31(i)*shf(i)*s5(i)
166 ENDDO
167C-------------------------------------------------------------------
168C STRAIN RATE
169C-------------------------------------------------------------------
170 DO i=1,nel
171 IF (israte == 0) THEN
172 epsd(i) = max(abs(depsxx(i)),abs(depsyy(i)),abs(depsxy(i)),
173 . abs(depsyz(i)),abs(depszx(i))) / max(dt1,em20)
174 ELSE
175 epsd(i) = asrate*epsd_pg(i) + (one-asrate)*epsd(i)
176 END IF
177 IF (epsd(i) > epdr(i)) THEN
178 epsd(i)=log(epsd(i)/epdr(i))
179 ELSE
180 epsd(i)=zero
181 ENDIF
182 coef(i)=zero
183 ENDDO
184C
185 DO i=1,nel
186 epsd(i) = one + cc(i) * epsd(i)
187 fyld(i) = (one+cb(i)*wpla(i)**cn(i))*epsd(i)
188 IF (icc(i) == 1 .OR. icc(i) == 3) THEN
189 fmax(i) = fmax(i)*epsd(i)
190 ENDIF
191 IF (icc(i) == 3 .OR. icc(i) == 4) THEN
192 wplamx(i) = wplamx(i)*epsd(i)
193 ENDIF
194 fyld(i)= min(fmax(i),fyld(i))
195 ENDDO
196C-------------------------------------------------------------------
197C PLASTICITE
198C-------------------------------------------------------------------
199 DO i=1,nel
200 wvec(i)=f1(i) *t1(i) + f2(i) *t2(i) +
201 . f11(i)*t1(i)*t1(i) + f22(i)*t2(i)*t2(i) +
202 . f33(i)*t3(i)*t3(i) + two*f12(i)*t1(i)*t2(i)
203 tsaiwu(i) = max(min(wvec(i)/fyld(i),one),tsaiwu(i))
204 ENDDO
205C
206 DO i=1,nel
207 cnn=cn(i)-one
208 wvec(i)=zero
209 IF (wpla(i) > zero .AND. fyld(i) < fmax(i))
210 . wvec(i)=epsd(i)*wpla(i)**cnn
211 ENDDO
212C
213 DO i=1,nel
214 beta(i) = one
215 so1(i)=beta(i)*sigoxx(i)
216 so2(i)=beta(i)*sigoyy(i)
217 so3(i)=beta(i)*sigoxy(i)
218 ENDDO
219C
220 DO i=1,nel
221 dp1(i)=f1(i)+2*f11(i)*so1(i)+2*f12(i)*so2(i)
222 dp2(i)=f2(i)+2*f22(i)*so2(i)+2*f12(i)*so1(i)
223 dp3(i)=2*f33(i)*so3(i)
224 ENDDO
225C
226 DO i=1,nel
227 ds1(i)=t1(i)-so1(i)
228 ds2(i)=t2(i)-so2(i)
229 ds3(i)=t3(i)-so3(i)
230 ENDDO
231C
232 DO i=1,nel
233 lamda(i)=(dp1(i)*ds1(i)+dp2(i)*ds2(i)+dp3(i)*ds3(i))*coef(i)
234 IF (lamda(i) == zero) cycle
235 lamda(i)=lamda(i)*coef(i)/
236 . (dp1(i)*(a11(i)*dp1(i)+a12(i)*dp2(i))+
237 . dp2(i)*(a12(i)*dp1(i)+a22(i)*dp2(i))+
238 . two*dp3(i)*g12(i)*de1(i)*de2(i)*dp3(i) +
239 . (so1(i)*dp1(i)+so2(i)*dp2(i)+2.*so3(i)*dp3(i))
240 . *cn(i)*cb(i)*wvec(i))
241 ENDDO
242C
243 DO i=1,nel
244 dp1(i)=lamda(i)*dp1(i)
245 dp2(i)=lamda(i)*dp2(i)
246 dp3(i)=lamda(i)*dp3(i)
247 ENDDO
248C
249 DO i=1,nel
250 t1(i)=t1(i)-a11(i)*dp1(i)-a12(i)*dp2(i)
251 t2(i)=t2(i)-a12(i)*dp1(i)-a22(i)*dp2(i)
252 t3(i)=t3(i)-g12(i)*de1(i)*de2(i)*dp3(i)*two
253 ENDDO
254C
255 DO i=1,nel
256 wpla(i)=wpla(i)+half*(dp1(i)*(t1(i)+so1(i))+
257 . dp2(i)*(t2(i)+so2(i))+
258 . two*dp3(i)*(t3(i)+so3(i)))
259 wpla(i)= max(wpla(i),zero) / wplaref(i)
260 ENDDO
261C
262 DO i=1,nel
263 signxx(i)=t1(i)
264 signyy(i)=t2(i)
265 signxy(i)=t3(i)
266 ENDDO
267C-------------------
268C PLASTICITY END
269C-------------------
270 DO i=1,nel
271 sige(i,1)=signxx(i)
272 sige(i,2)=signyy(i)
273 sige(i,3)=signxy(i)
274 sige(i,4)=signyz(i)
275 sige(i,5)=signzx(i)
276 ENDDO
277!---
278 RETURN
279 END
subroutine m15cplrc(nel, pm, wpla, imatly, damt, shf, ngl, sige, depsxx, depsyy, depsxy, depsyz, depszx, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, epsd_pg, epsd, israte, asrate, tsaiwu)
Definition m15cplrc.F:34
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21