OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_hc_dsse_c.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!|| fail_hc_dsse_c ../engine/source/materials/fail/hc_dsse/fail_hc_dsse_c.F
25!||--- called by ------------------------------------------------------
26!|| mulawc ../engine/source/materials/mat_share/mulawc.f90
27!|| usermat_shell ../engine/source/materials/mat_share/usermat_shell.F
28!||====================================================================
29 SUBROUTINE fail_hc_dsse_c(
30 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
31 2 TIME ,NGL ,IPT ,ILAY ,IPTT ,
32 3 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
33 4 DPLA ,OFF ,FOFF ,
34 5 DFMAX ,TDEL ,UEL ,NPTOT ,
35 6 FLD_IDX ,DAM ,PLA )
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C-----------------------------------------------
41C G l o b a l P a r a m e t e r s
42C-----------------------------------------------
43#include "units_c.inc"
44#include "comlock.inc"
45C!---------+--------+---+---+-------------------------------------------
46C! VAR | SIZE |TYP| RW| DEFINITION
47C!---------+--------+---+---+-------------------------------------------
48C! NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
49C! NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
50C! NUVAR | 1 | I | R | NUMBER OF USER ELEMENT VARIABLES
51C!---------+--------+---+---+-------------------------------------------
52C! NFUNC | 1 | I | R | NUMBER FUNCTION USED FOR THIS USER LAW
53C! IFUNC | NFUNC | I | R | FUNCTION INDEX
54C! NPF | * | I | R | FUNCTION ARRAY
55C! NPT0 | 1 | I | R | NUMBER OF LAYERS OR INTEGRATION POINTS
56C! IPT CURRENT INTEGRATION POINT IN THE LAYER (FOR OUTPUT ONLY)
57C! TF | * | F | R | FUNCTION ARRAY
58C! NGL | NEL | I | R | ELEMENT NUMBER
59C! IPG | | | | CURRENT GAUSS POINT (in plane)
60C! ILAY | | | | CURRENT LAYER
61C! FOFF | NEL | I |R/W| DELETED INTEGRATION POINT FLAG (=1 ON, =0 OFF)
62C! DFMAX | NEL | F |R/W| MAX DAMAGE FACTOR
63C! TDEL | NEL | F | W | FAILURE TIME
64C!---------+--------+---+---+-------------------------------------------
65C! TIME | 1 | F | R | CURRENT TIME
66C! TIMESTEP| 1 | F | R | CURRENT TIME STEP
67C! UPARAM | NUPARAM| F | R | USER MATERIAL PARAMETER ARRAY
68C! EPSPXX | NEL | F | R | STRAIN RATE XX
69C! EPSPYY | NEL | F | R | STRAIN RATE YY
70C! ... | | | |
71C! EPSXX | NEL | F | R | STRAIN XX
72C! EPSYY | NEL | F | R | STRAIN YY
73C!---------+--------+---+---+-------------------------------------------
74C! SIGNXX | NEL | F |R/W| NEW ELASTO PLASTIC STRESS XX
75C! SIGNYY | NEL | F |R/W| NEW ELASTO PLASTIC STRESS YY
76C! ... | | | |
77C!---------+--------+---+---+-------------------------------------------
78C! PLA | NEL | F | R | PLASTIC STRAIN
79C! DPLA | NEL | F | R | INCREMENTAL PLASTIC STRAIN
80C! EPSP | NEL | F | R | EQUIVALENT STRAIN RATE
81C! UVAR |NEL*NUVAR| F|R/W| USER ELEMENT VARIABLE ARRAY
82C! OFF | NEL | F |R/W| DELETED ELEMENT FLAG (=1. ON, =0. OFF)
83C!---------+--------+--+--+-------------------------------------------
84C! I N P U T A r g u m e n t s
85C!-----------------------------------------------
86 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,ILAY,IPT,NPTOT,IPTT
87 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
88 my_real ,DIMENSION(NUPARAM), INTENT(IN) :: UPARAM
89 my_real ,DIMENSION(NEL), INTENT(IN) :: DPLA,PLA
90c! my_real OFF(NEL), UEL(NEL)
91C
92C-----------------------------------------------
93C I N P U T O U T P U T A r g u m e n t s
94C-----------------------------------------------
95 INTEGER ,DIMENSION(NEL), INTENT(INOUT) :: FOFF,FLD_IDX
96 my_real, INTENT(IN) :: TIME
97 my_real ,DIMENSION(NEL), INTENT(IN) :: SIGNXX,SIGNYY,SIGNXY,SIGNYZ,SIGNZX
98 my_real ,DIMENSION(NEL), INTENT(INOUT) :: DFMAX, UEL,OFF,DAM
99 my_real ,DIMENSION(NEL), INTENT(OUT) :: TDEL
100 my_real, DIMENSION(NEL,NUVAR), INTENT(INOUT) :: UVAR
101C-----------------------------------------------
102C VARIABLES FOR FUNCTION INTERPOLATION
103C-----------------------------------------------
104C L o c a l V a r i a b l e s
105C-----------------------------------------------
106 INTEGER :: I,J,K,N,NINDX,IFAIL_SH
107 INTEGER, DIMENSION(NEL) :: INDX , CONDITION1, CONDITION2,CONDITION3
108C-----------------------------------------------
109 my_real AFRAC,BFRAC,CFRAC,NFRAC,INST,P_THICKFAIL
110 my_real SIGM,SIGVM,ETA,XI
111 my_real LODE,DAM1,DAM2,F1,F2,F3,EPSF
112 my_real ghc, g1, g2, g3, dsse
113C-----------------------------------------------
114 g1 = zero
115 g2 = zero
116 epsf = zero
117 dsse = zero
118
119 afrac = uparam(1)
120 bfrac = uparam(2)
121 cfrac = uparam(3)
122 nfrac = uparam(4)
123 inst = uparam(5)
124 ifail_sh = uparam(7)
125 condition1(1:nel) = 0
126 condition2(1:nel) = 0
127 condition3(1:nel) = 0
128 nindx = 0
129c-----------------------------
130C USER VARIABLES INITIALIZATION
131C-----------------------------------------------
132 DO i =1,nel
133
134 dam1 = dfmax(i)
135 dam2 = uvar(i,2)
136 IF (fld_idx(i) == 0) fld_idx(i) = 1
137
138 IF (dpla(i) > zero .and. off(i) == one .and. dam1 < one) THEN
139 sigm = (signxx(i)+ signyy(i))*third
140 sigvm = sqrt((signxx(i)**2)+(signyy(i)**2)-(signxx(i)*signyy(i))+(3*signxy(i)**2))
141 eta = sigm / max(em10,sigvm)
142
143 xi = -27.0*0.5*eta*(eta**2 - third)
144 IF (xi < -one) xi =-one
145 IF (xi > one) xi = one
146
147 lode = one - two*acos(xi)/pi
148
149 f1 = two/three*cos((one -lode)*pi/six)
150 f2 = two/three*cos((three+lode)*pi/six)
151 f3 =-two/three*cos((one +lode)*pi/six)
152
153 ghc= (half*((f1-f2)**afrac
154 . +(f2-f3)**afrac
155 . +(f1-f3)**afrac))**(one/afrac)
156 . +cfrac*(two*eta+f1+f3)
157
158 IF (eta < -third) THEN
159 epsf = 100.00
160 ghc = -one
161 ELSEIF(eta < two_third)THEN
162 ghc= (half*(max(f1-f2,zero)**afrac
163 . +max(f2-f3,zero)**afrac
164 . +max(f1-f3,zero)**afrac))**(one/afrac)
165 . +cfrac*(two*eta+f1+f3)
166 epsf = bfrac*((one+cfrac)/ghc)**(1.0/nfrac)
167 IF (eta > third .and. dam2 < one) THEN
168 g1 = three/two*eta+sqrt(third+em20-0.75*(eta**2))
169 g2 = three/two*eta-sqrt(third+em20-0.75*(eta**2))
170 g3 = (half*((max(zero,(g1-g2)))**inst+g1**inst+
171 . (max(zero,g2))**inst))**(one/inst)
172 dsse = bfrac * g3**(-100)
173 dam2 = dam2 + dpla(i)/max(em6,dsse)
174 uvar(i,2) = dam2
175 ENDIF
176 ELSE
177 eta = two_third
178 f1 = one/three
179 f2 = one/three
180 f3 = -two/three
181
182 ghc= (half*(max(f1-f2,zero)**afrac
183 . +max(f2-f3,zero)**afrac
184 . +max(f1-f3,zero)**afrac))**(one/afrac)
185 . +cfrac*(two*eta+f1+f3)
186
187 epsf = bfrac*(one+cfrac)**(one/nfrac)
188 . * ((half*(max(f1-f2,zero)**afrac
189 . +max(f2-f3,zero)**afrac
190 . +max(f1-f3,zero)**afrac))**(one/afrac)
191 . + cfrac*(two*eta+f1+f3))**(-one/nfrac)
192
193
194 ENDIF
195
196 dam1 = dam1 + dpla(i)/max(em6,epsf)
197 dfmax(i) = min(one,dam1)
198 IF ((dam1 >= one).AND.(ifail_sh < 3)) THEN ! failure of integrateion points
199 nindx = nindx + 1
200 indx(nindx) = i
201 foff(i) = 0
202 uel(i) = zero
203 tdel(i) = time
204 condition1(nindx) = ipt
205 ENDIF
206
207 IF (dam2 >= one .AND. uvar(i,1) == zero .AND. foff(i) == 1 .AND. ifail_sh < 3)THEN
208 uvar(i,1) = one
209 uel(i) = uel(i) + one
210 IF (int(uel(i)+1e-6) == nptot) THEN ! rupture due localized necking !!!
211 nindx = nindx + 1
212 indx(nindx) = i
213 tdel(i)= time
214 off(i) = zero
215 condition2(nindx) = 1
216 condition3(nindx) = 1
217 ENDIF
218 ENDIF
219
220 ! Index
221 dam(i) = min(pla(i)/max(em6,epsf),one)
222
223 ! Zone contour
224 ! -> Below HC and DSSE failure curves
225 IF (((eta < third) .AND.(dam1<one)).OR.
226 . ((eta >= third).AND.(dam2<one))) THEN
227 fld_idx(i) = 1
228 ! -> Between HC and DSSE failure curves
229 ELSEIF ((eta >= third).AND.(dam2>=one).AND.(dam1<one)) THEN
230 fld_idx(i) = 2
231 ! -> Above all curves
232 ELSEIF (dam1 >= one) THEN
233 fld_idx(i) = 3
234 ENDIF
235
236 ENDIF
237 ENDDO
238C!
239c------------------------
240 IF (nindx > 0) THEN
241 DO j=1,nindx
242 i = indx(j)
243#include "lockon.inc"
244 IF(condition1(j) >= 1) THEN
245 WRITE(iout, 2000) ngl(i),condition1(j),time
246 WRITE(istdo,2000) ngl(i),condition1(j),time
247 ENDIF
248 IF(condition3(j)==1) THEN
249 WRITE(istdo,3000) ngl(i)
250 WRITE(iout, 3000) ngl(i)
251 ENDIF
252 IF(condition2(j)==1) THEN
253 WRITE(istdo,2200) ngl(i), time
254 WRITE(iout, 2200) ngl(i), time
255 ENDIF
256#include "lockoff.inc"
257 END DO
258 END IF ! NINDX
259c------------------------
260C---------Damage for output 0 < DFMAX < 1 --------------------
261 2000 FORMAT(1x,'FOR SHELL ELEMENT (HC-DSSE)',i10,1x,'LAYER',i3,':',/,
262 . 1x,'STRESS TENSOR SET TO ZERO',1x,'AT TIME :',1pe12.4)
263
264 2200 FORMAT(1x,' *** RUPTURE OF SHELL ELEMENT (HC-DSSE)',i10,1x,
265 . ' AT TIME :',1pe12.4)
266 3000 FORMAT(1x,'FOR SHELL ELEMENT (HC-DSSE)',i10,
267 . 1x,'INSTABILITY REACHED.')
268c------------------------
269c! 2000 FORMAT(1X,'FAILURE (BIQUAD) OF SHELL ELEMENT ',I10,1X,',GAUSS PT',I2,1X,',LAYER',I3,
270c! . 1X,',INTEGRATION PT',I3)
271c! 2100 FORMAT(1X,'FAILURE (BIQUAD) OF SHELL ELEMENT ',I10,1X,',GAUSS PT',I2,1X,',LAYER',I3,
272c! . 1X,',INTEGRATION PT',I3,1X,'AT TIME :',1PE12.4)
273c------------------------
274C!
275 RETURN
276 END
subroutine fail_hc_dsse_c(nel, nuparam, nuvar, uparam, uvar, time, ngl, ipt, ilay, iptt, signxx, signyy, signxy, signyz, signzx, dpla, off, foff, dfmax, tdel, uel, nptot, fld_idx, dam, pla)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21