OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_changchang_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_changchang_c ../engine/source/materials/fail/changchang/fail_changchang_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!||====================================================================
30 1 NEL ,NUPARAM ,NUVAR ,UPARAM ,UVAR ,
31 2 TIME ,TIMESTEP ,IPG ,ILAY ,IPT ,
32 3 NGL ,DMG_FLAG ,DMG_SCALE ,DFMAX ,TDEL ,
33 4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
34 5 OFF ,FOFF ,LF_DAMMX )
35C-----------------------------------------------
36C chang-chang failure model
37C-----------------------------------------------
38C I m p l i c i t T y p e s
39C-----------------------------------------------
40#include "implicit_f.inc"
41C-----------------------------------------------
42C G l o b a l P a r a m e t e r s
43C-----------------------------------------------
44#include "units_c.inc"
45#include "comlock.inc"
46C---------+---------+---+---+--------------------------------------------
47C VAR | SIZE |TYP| RW| DEFINITION
48C---------+---------+---+---+--------------------------------------------
49C NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
50C NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
51C UPARAM | NUPARAM | F | R | USER MATERIAL PARAMETER ARRAY
52C NUVAR | 1 | I | R | NUMBER OF USER ELEMENT VARIABLES
53C UVAR |NEL*NUVAR| F |R/W| USER ELEMENT VARIABLE ARRAY
54C---------+---------+---+---+--------------------------------------------
55C TIME | 1 | F | R | CURRENT TIME
56C---------+---------+---+---+--------------------------------------------
57C SIGNXX | NEL | F | W | NEW ELASTO PLASTIC STRESS XX
58C SIGNYY | NEL | F | W | NEW ELASTO PLASTIC STRESS YY
59C ... | | | |
60C---------+---------+---+---+--------------------------------------------
61C OFF | NEL | F | R | DELETED ELEMENT FLAG (=1. ON, =0. OFF)
62C FOFF | NEL | I |R/W| DELETED INTEGRATION POINT FLAG (=1 ON, =0 OFF)
63C DFMAX | NEL | F |R/W| MAX DAMAGE FACTOR
64C TDEL | NEL | F | W | FAILURE TIME
65C DMG_FLAG| 1 | I | W | STRESS REDUCTION FLAG DUE TO DAMAGE
66C DMG_SCALE| NEL | F | W | STRESS REDUCTION FACTOR
67C---------+---------+---+---+--------------------------------------------
68C NGL ELEMENT ID
69C IPG CURRENT GAUSS POINT (in plane)
70C ILAY CURRENT LAYER
71C IPT CURRENT INTEGRATION POINT IN THE LAYER
72C---------+---------+---+---+--------------------------------------------
73C I N P U T A r g u m e n t s
74C-----------------------------------------------
75 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT,LF_DAMMX
76 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
77 my_real ,INTENT(IN) :: TIME
78 my_real ,DIMENSION(NEL) ,INTENT(IN) :: OFF,TIMESTEP,
79 . SIGNXX,SIGNYY,SIGNXY,SIGNYZ,SIGNZX
80 my_real,DIMENSION(NUPARAM) ,INTENT(IN) :: uparam
81C-----------------------------------------------
82C I N P U T O U T P U T A r g u m e n t s
83C-----------------------------------------------
84 INTEGER ,INTENT(OUT) ::DMG_FLAG
85 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
86 my_real ,DIMENSION(NEL,LF_DAMMX), INTENT(INOUT) :: DFMAX
87 my_real ,DIMENSION(NEL) ,INTENT(OUT) :: TDEL,DMG_SCALE
88 my_real ,DIMENSION(NEL,NUVAR) ,INTENT(INOUT) :: UVAR
89C-----------------------------------------------
90C L o c a l V a r i a b l e s
91C-----------------------------------------------
92 INTEGER :: I,J,NINDX,IFAIL_SH,IDEL_FM,IDEL_F
93 INTEGER ,DIMENSION(NEL) :: INDX
94 my_real :: SIGT1,SIGT2,SIGT12,SIGC1,SIGC2,BETA,TMAX,
95 . DAMFT,DAMFC,DAMMT,DAMMC,DAMMX
96C=======================================================================
97 sigt1 = uparam(1)
98 sigt2 = uparam(2)
99 sigt12= uparam(3)
100 sigc1 = uparam(4)
101 sigc2 = uparam(5)
102 beta = uparam(6)
103 tmax = uparam(7)
104 ifail_sh = int(uparam(8))
105c-----------------
106 dmg_flag = 1
107 idel_f = 0
108 idel_fm = 0
109 IF (ifail_sh == 1) THEN ! matrix or fiber failure
110 idel_fm = 1
111 ELSEIF (ifail_sh == 2) THEN ! matrix or fiber failure
112 idel_fm = 1
113 ELSEIF (ifail_sh == 3) THEN ! fiber only failure
114 idel_f = 1
115 ELSEIF (ifail_sh == 4) THEN ! fiber only failure
116 idel_f = 1
117 END IF
118c-----------------
119 nindx = 0
120c-----------------------------------------------------------------
121c failure when matrix or fiber is broken ( flag 1 et 2)
122c-----------------------------------------------------------------
123 IF (idel_fm == 1) THEN
124C
125 DO i=1,nel
126 IF (off(i) == one .and. foff(i) == 1) THEN
127c
128 IF (uvar(i,1) == zero) THEN
129c check fiber damage
130 IF (signxx(i) > zero) THEN
131 damft = (signxx(i)/sigt1)**2 + beta*(signxy(i)/sigt12)**2
132 damfc = zero
133 dfmax(i,2) = max(damft,dfmax(i,2))
134 dfmax(i,2) = min(dfmax(i,2),one)
135 ELSE
136 damfc = (signxx(i)/sigc1)**2
137 damft = zero
138 dfmax(i,3) = max(damfc,dfmax(i,3))
139 dfmax(i,3) = min(dfmax(i,3),one)
140 ENDIF
141c
142c check matrix damage
143 IF (signyy(i) > zero) THEN
144 dammt = (signyy(i)/sigt2)**2
145 . + (signxy(i)/sigt12)**2
146 dammc = zero
147 dfmax(i,4) = max(dammt,dfmax(i,4))
148 dfmax(i,4) = min(dfmax(i,4),one)
149 ELSE
150 dammc = (signyy(i)/(two*sigt12))**2
151 . + (signxy(i)/sigt12)**2
152 . + signyy(i)*((sigc2/(two*sigt12))**2 - one)/sigc2
153 dammt = zero
154 dfmax(i,5) = max(dammc,dfmax(i,5))
155 dfmax(i,5) = min(dfmax(i,5),one)
156 ENDIF
157 dammx = max(damft,damfc,dammc,dammt)
158 dfmax(i,1) = min(one,dammx)
159 IF (dammx >= one) THEN
160 uvar(i,1) = time
161 nindx = nindx+1
162 indx(nindx) = i
163 ENDIF
164 ENDIF
165c
166 IF (uvar(i,1) > zero) THEN
167 dfmax(i,1) = one
168 dmg_scale(i) = exp(-(time + timestep(i) - uvar(i,1))/tmax)
169c
170 IF (dmg_scale(i) < em02) THEN
171 foff(i) = 0
172 tdel(i) = time
173 dmg_scale(i) = zero
174 ENDIF
175 ENDIF
176c
177 ELSEIF (foff(i) == 0) THEN
178 dmg_scale(i) = zero
179 ENDIF
180 ENDDO
181 ENDIF
182c-----------------------------------------------------------------
183c failure only on fiber criteria ( flag 3 et 4)
184c-----------------------------------------------------------------
185 IF (idel_f == 1) THEN
186C
187 DO i=1,nel
188 IF (off(i) == one .and. foff(i) == 1) THEN
189c
190 IF (uvar(i,1) == zero) THEN
191c check fiber damage only
192 IF (signxx(i) > zero) THEN
193 damft = (signxx(i)/sigt1)**2
194 . + beta*(signxy(i)/sigt12)**2
195 damfc = zero
196 dfmax(i,2) = max(damft,dfmax(i,2))
197 dfmax(i,2) = min(dfmax(i,2),one)
198 ELSE
199 damfc = (signxx(i)/sigc1)**2
200 damft = zero
201 dfmax(i,3) = max(damfc,dfmax(i,3))
202 dfmax(i,3) = min(dfmax(i,3),one)
203 ENDIF
204 dammx = max(damft,damfc)
205 dfmax(i,1) = min(one,dammx)
206 IF (dammx >= one) uvar(i,1) = time
207 ENDIF
208c
209 IF (uvar(i,1) > zero) THEN
210 dfmax(i,1) = one
211 dmg_scale(i) = exp(-(time + timestep(i) - uvar(i,1))/tmax)
212c
213 IF (dmg_scale(i) < em02) THEN
214 nindx = nindx+1
215 indx(nindx) = i
216 foff(i) = 0
217 tdel(i) = time
218 dmg_scale(i) = zero
219 ENDIF
220 ENDIF
221 ELSEIF (foff(i) == 0) THEN
222 dmg_scale(i) = zero
223 ENDIF
224 ENDDO
225c
226 ENDIF
227c------------------------
228 IF (nindx > 0) THEN
229 DO j=1,nindx
230 i = indx(j)
231#include "lockon.inc"
232 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
233 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
234#include "lockoff.inc"
235 END DO
236 END IF
237c------------------------
238 2000 FORMAT(1x,'FAILURE (CHANG) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
239 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3)
240 2100 FORMAT(1x,'FAILURE (CHANG) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
241 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
242c------------------------
243 RETURN
244 END
subroutine fail_changchang_c(nel, nuparam, nuvar, uparam, uvar, time, timestep, ipg, ilay, ipt, ngl, dmg_flag, dmg_scale, dfmax, tdel, signxx, signyy, signxy, signyz, signzx, off, foff, lf_dammx)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine usermat_shell(timers, elbuf_str, mat_elem, jft, jlt, nel, pm, for, mom, gstr, thk, eint, off, dir_a, dir_b, mat, area, exx, eyy, exy, exz, eyz, kxx, kyy, kxy, geo, thk_ly, pid, tf, npf, mtn, dt1c, dm, bufmat, ssp, rho, viscmx, ipla, iofc, indx, ngl, thkly, matly, zcfac, ng, shf, gs, sigy, thk0, epsd_pg, posly, igeo, ipm, failwave, fwave_el, ifailure, aldt, tempel, die, r11, r12, r13, r21, r22, r23, r31, r32, r33, table, ixfem, elcrkini, dir1_crk, dir2_crk, iparg, jhbe, ismstr, jthe, tensx, ir, is, nlay, npt, ixlay, ixel, ithk, f_def, ishplyxfem, itask, pm_stack, isubstack, stack, alpe, ply_exx, ply_eyy, ply_exy, ply_exz, ply_eyz, ply_f, varnl, nloc_dmg, nlay_max, laynpt_max, dt)