OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sigeps02c.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!|| sigeps02c ../engine/source/materials/mat/mat002/sigeps02c.F
25!||--- called by ------------------------------------------------------
26!|| mulawc ../engine/source/materials/mat_share/mulawc.F90
27!||--- calls -----------------------------------------------------
28!|| m2cplr ../engine/source/materials/mat/mat002/m2cplr.F
29!||--- uses -----------------------------------------------------
30!|| matparam_def_mod ../common_source/modules/mat_elem/matparam_def_mod.F90
31!||====================================================================
32 SUBROUTINE sigeps02c(mat_param ,
33 . NEL ,EINT ,THK ,TEMPEL ,FHEAT ,
34 . OFF ,SIGY ,DT1 ,IPLA ,SIGKSI ,
35 . VOL ,GS ,THKLYL ,ETSE ,G_IMP ,
36 . DPLA ,TSTAR ,JTHE ,HARDM ,EPCHK ,
37 . NPTT ,PLA ,OFF_OLD ,LOFF ,IOFF_DUCT,
38 . SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
39 . SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
40 . DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
41 . EPSPXX ,EPSPYY ,EPSPXY ,EPSD_PG ,EPSD ,
42 . ASRATE ,SIGBAKXX ,SIGBAKYY ,SIGBAKXY ,
43 . INLOC ,DPLANL )
44!-----------------------------------------------
45! m o d u l e s
46!-----------------------------------------------
47 use matparam_def_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C G l o b a l P a r a m e t e r s
54C-----------------------------------------------
55#include "mvsiz_p.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 INTEGER ,INTENT(IN) :: NEL,IPLA,JTHE,NPTT,INLOC
60 INTEGER IOFF_DUCT(*)
61 my_real ,INTENT(IN) :: ASRATE
62 my_real ,INTENT(IN) :: DT1
63 my_real ,DIMENSION(NEL) ,INTENT(IN) :: LOFF
64 my_real ,DIMENSION(NEL) ,INTENT(IN) :: EPSD_PG
65 my_real ,DIMENSION(NEL) ,INTENT(IN) :: EPSPXX,EPSPYY,EPSPXY
66 my_real ,DIMENSION(NEL) :: OFF,SIGY,VOL,GS,THK,TSTAR,DPLA,PLA,THKLYL,DPLANL
67 my_real :: EINT(NEL,2),SIGKSI(MVSIZ,5)
68 my_real, DIMENSION(MVSIZ) ,INTENT(IN) :: DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX
69 my_real, DIMENSION(MVSIZ) ,INTENT(INOUT) :: HARDM,G_IMP,EPCHK,OFF_OLD,ETSE
70 my_real, DIMENSION(NEL) ,INTENT(IN) :: sigoxx,sigoyy,sigoxy,sigoyz,sigozx
71 my_real, DIMENSION(NEL) ,INTENT(INOUT) :: sigbakxx,sigbakyy,sigbakxy
72 my_real, DIMENSION(NEL) ,INTENT(INOUT) :: signxx,signyy,signxy,signyz,signzx
73 my_real, DIMENSION(NEL) ,INTENT(INOUT) :: tempel
74 my_real, DIMENSION(NEL) ,INTENT(INOUT) :: fheat
75 my_real, DIMENSION(NEL) ,INTENT(INOUT) :: epsd
76 type (matparam_struct_) ,intent(in) :: mat_param
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER :: I,ICC,IFORM,ISRATE,VP
81 my_real :: epmx,ca,cb,cn,cc,m_exp,young,g,a11,a12,nu,rhocp,tref,tmelt
82 my_real :: dav,deve1,deve2,deve3,deve4,z3,z4,fisokin,epdr,ymax
83 my_real :: yld(mvsiz),epsdot(mvsiz),ezz(mvsiz)
84!=======================================================================
85 ! Variable initialization
86 ezz(1:mvsiz) = zero
87!---
88 ! Recover material law parameters
89!---
90 iform = mat_param%iparam(1)
91 icc = mat_param%iparam(2)
92 vp = mat_param%iparam(3)
93 israte = mat_param%iparam(4)
94!
95 young = mat_param%young
96 g = mat_param%shear
97 nu = mat_param%nu
98 a11 = young / (one - nu**2)
99 a12 = a11 *nu
100!
101 ca = mat_param%uparam(1) ! pm(38)
102 cb = mat_param%uparam(2) ! pm(39)
103 cn = mat_param%uparam(3) ! pm(40)
104 epmx = mat_param%uparam(4) ! pm(41)
105 ymax = mat_param%uparam(5) ! pm(41)
106 cc = mat_param%uparam(6) ! pm(43)
107 epdr = mat_param%uparam(7) ! pm(44)
108 epdr = max(epdr*dt1, em20)
109 fisokin= mat_param%uparam(8) ! pm(55)
110
111 tref = mat_param%therm%tref
112 tmelt = mat_param%therm%tmelt
113 rhocp = mat_param%therm%rhocp
114!
115 IF (iform == 1) THEN ! Zerilli
116 z3 = mat_param%uparam(10)
117 z4 = mat_param%uparam(11)
118 m_exp = one
119 ELSE ! Johnson-Cook
120 z3 = zero
121 z4 = zero
122 m_exp = mat_param%uparam(10)
123 DO i=1,nel
124 tstar(i) = max( zero, (tempel(i)-tref)/(tmelt-tref) )
125 ENDDO
126 END IF
127!
128 ! Specific strain rate computation
129 ! -> Plastic strain rate
130 ! Old filtered value already stored in EPSD
131!
132 IF (vp == 1) THEN
133 DO i=1,nel
134 epsdot(i) = epsd(i)*dt1
135 ENDDO
136 ! -> Total strain rate
137 ELSEIF (vp == 2) THEN
138 DO i=1,nel
139 epsd(i) = asrate*epsd_pg(i) + (one-asrate)*epsd(i)
140 epsdot(i) = epsd(i) * dt1
141! EPSDOT(I) = EPSPDT(I)
142! EPSD(I) = EPSPDT(I)/MAX(DT1,EM20)
143 ENDDO
144 ! -> Deviatoric strain rate
145 ELSEIF (vp == 3) THEN
146 DO i=1,nel
147 dav = (epspxx(i)+epspyy(i))*third
148 deve1 = epspxx(i) - dav
149 deve2 = epspyy(i) - dav
150 deve3 = - dav
151 deve4 = half*epspxy(i)
152 epsdot(i) = half*(deve1**2 + deve2**2 + deve3**2) + deve4**2
153 epsdot(i) = sqrt(three*epsdot(i))/three_half
154 IF (israte > 0) THEN
155 epsdot(i) = asrate*epsdot(i) + (one - asrate)*epsd(i)
156 ENDIF
157 epsd(i) = epsdot(i)
158 epsdot(i) = epsdot(i)*dt1
159 ENDDO
160 ENDIF
161!----------------------------
162! CONTRAINTES PLASTIQUEMENT ADMISSIBLES
163!----------------------------
164 CALL m2cplr(nel ,ezz ,off_old ,pla ,
165 2 ipla ,tempel ,z3 ,z4 ,m_exp ,
166 3 iform ,etse ,gs ,epsdot ,vp ,
167 4 israte ,yld ,g ,a11 ,a12 ,
168 5 nu ,ca ,cb ,cn ,ymax ,
169 6 epchk ,young ,cc ,epdr ,icc ,
170 7 dpla ,tstar ,fisokin ,g_imp ,sigksi ,
171 8 hardm ,depsxx ,depsyy ,depsxy ,
172 9 depsyz ,depszx ,signxx ,signyy ,signxy ,
173 a signyz ,signzx ,sigbakxx,sigbakyy,sigbakxy,
174 b sigoxx ,sigoyy ,sigoxy ,sigoyz ,sigozx )
175!
176!--------------------------------------------
177! UPDATE AND FILTER PLASTIC STRAIN RATE
178!--------------------------------------------
179 IF (vp == 1) THEN
180 DO i=1,nel
181 epsdot(i) = dpla(i)/max(em20,dt1)
182 epsd(i) = asrate*epsdot(i) + (one - asrate)*epsd(i)
183 ENDDO
184 ENDIF
185!--------------------------------------------
186 DO i=1,nel
187 sigy(i) = sigy(i) + yld(i)/nptt
188 ENDDO
189!----------------------------
190! Ductile rupture test
191!----------------------------
192 DO i=1,nel
193 IF (off(i) == off_old(i) .and. off(i) > zero) THEN
194 IF (off(i) == one .and. epchk(i) >= epmx) THEN
195 off(i)= four_over_5
196 ioff_duct(i) = 1 ! start of progressive rupture
197 ELSE IF (off(i) < one ) THEN
198 off(i) = off(i)*four_over_5
199 ENDIF
200 ENDIF
201 ENDDO
202c------------------------------------
203! thickness update:
204c------------------------------------
205 DO i=1,nel
206 IF (inloc > 0) THEN
207 IF (loff(i) == one) THEN
208 ezz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young
209 ezz(i) = ezz(i) - max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/yld(i)
210 ENDIF
211 ELSE
212 ezz(i) = -(depsxx(i)+depsyy(i))*nu-(one - two*nu)*ezz(i)
213 ezz(i) = ezz(i)/(one-nu)
214 ENDIF
215 thk(i) = thk(i) + ezz(i) * thklyl(i)*off(i)
216 ENDDO
217C-----------------
218C TEMPERATURE
219C-----------------
220 IF (jthe /= 0) THEN
221 ! heat increment due to plastic work for /heat/mat
222 DO i=1,nel
223 fheat(i) = fheat(i) + sigy(i)*dpla(i)*vol(i) * mat_param%THERM%EFRAC
224 ENDDO
225 ELSEIF (rhocp > zero) THEN ! adiabatic conditions => temp is updated locally
226 DO i=1,nel
227 tempel(i) = tempel(i) + sigy(i)*dpla(i) / rhocp
228 ! internal energy incremented later in parent subroutine (mmain)
229 ! with total energy deformation which already includes plastic work
230 ENDDO
231 END IF
232c-----------
233 RETURN
234 END
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:274
subroutine m2cplr(nel, ezz, off, pla, ipla, temp, c3, c4, m_exp, iform, etse, gs, epsp, vp, israte, yld, g, a1, a2, nu, ca0, cb0, cn, ymax0, epchk, young, cc, epdr, icc, dpla, tstar, fisokin, gama_imp, signor, hardm, depsxx, depsyy, depsxy, depsyz, depszx, signxx, signyy, signxy, signyz, signzx, sigbakxx, sigbakyy, sigbakxy, sigoxx, sigoyy, sigoxy, sigoyz, sigozx)
Definition m2cplr.F:39
#define max(a, b)
Definition macros.h:21
subroutine sigeps02c(mat_param, nel, eint, thk, tempel, fheat, off, sigy, dt1, ipla, sigksi, vol, gs, thklyl, etse, g_imp, dpla, tstar, jthe, hardm, epchk, nptt, pla, off_old, loff, ioff_duct, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, depsxx, depsyy, depsxy, depsyz, depszx, epspxx, epspyy, epspxy, epsd_pg, epsd, asrate, sigbakxx, sigbakyy, sigbakxy, inloc, dplanl)
Definition sigeps02c.F:44