OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_changchang_s.F File Reference
#include "implicit_f.inc"
#include "units_c.inc"
#include "comlock.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine fail_changchang_s (nel, nuparam, nuvar, uparam, uvar, time, ip, ilay, npg, ngl, dmg_scale, dfmax, off, loff, noff, signxx, signyy, signzz, signxy, signzx, tdele, lf_dammx)

Function/Subroutine Documentation

◆ fail_changchang_s()

subroutine fail_changchang_s ( integer, intent(in) nel,
integer, intent(in) nuparam,
integer, intent(in) nuvar,
intent(in) uparam,
intent(inout) uvar,
intent(in) time,
integer, intent(in) ip,
integer, intent(in) ilay,
integer, intent(in) npg,
integer, dimension(nel), intent(in) ngl,
intent(inout) dmg_scale,
intent(inout) dfmax,
intent(inout) off,
intent(inout) loff,
integer, dimension(nel), intent(inout) noff,
intent(in) signxx,
intent(in) signyy,
intent(in) signzz,
intent(in) signxy,
intent(in) signzx,
intent(inout) tdele,
integer, intent(in) lf_dammx )

Definition at line 30 of file fail_changchang_s.F.

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 I N P U T A r g u m e n t s
47C-----------------------------------------------
48 INTEGER,INTENT(IN) :: NEL,NUPARAM,NUVAR,IP,ILAY,NPG,LF_DAMMX
49 INTEGER,DIMENSION(NEL),INTENT(IN) :: NGL
50 my_real,INTENT(IN) :: time
51 my_real,DIMENSION(NEL),INTENT(IN) ::
52 . signxx,signyy,signzz,signxy,signzx
53 my_real,DIMENSION(NUPARAM) ,INTENT(IN) :: uparam
54C-----------------------------------------------
55C I N P U T O U T P U T A r g u m e n t s
56C-----------------------------------------------
57 INTEGER,DIMENSION(NEL),INTENT(INOUT) :: NOFF
58 my_real,DIMENSION(NEL),INTENT(INOUT) :: tdele,
59 . dmg_scale,loff,off
60 my_real,DIMENSION(NEL,LF_DAMMX),INTENT(INOUT) :: dfmax
61 my_real,DIMENSION(NEL,NUVAR),INTENT(INOUT) :: uvar
62C-----------------------------------------------
63C L o c a l V a r i a b l e s
64C-----------------------------------------------
65 INTEGER :: I,J,NINDX,NINDX0,FAILIP
66 INTEGER, DIMENSION(NEL) :: INDX,INDX0
67 my_real :: sigt1,sigt2,sigt12,sigc1,sigc2,beta,tmax,
68 . damft,damfc,dammt1,dammc1,dammt2,dammc2,dammx
69C---------------------------------------------------------------
70 !=======================================================================
71 ! - INITIALISATION OF COMPUTATION ON TIME STEP
72 !=======================================================================
73 ! Recovering failure criterion parameters
74 sigt1 = uparam(1) ! -> Longitudinal tensile strength
75 sigt2 = uparam(2) ! -> Transversal tensile strength
76 sigt12 = uparam(3) ! -> Shear strength
77 sigc1 = uparam(4) ! -> Longitudinal compressive strength
78 sigc2 = uparam(5) ! -> Transversal compressive strength
79 beta = uparam(6) ! -> Shear coupling factor
80 tmax = uparam(7) ! -> Relaxation time
81 failip = int(uparam(9)) ! -> Number of failed integration points prior to solid deletion
82 failip = min(failip,npg)
83c
84 !====================================================================
85 ! - COMPUTATION OF THE DAMAGE VARIABLE EVOLUTION
86 !====================================================================
87 ! Initialization of element failure index
88 nindx = 0
89 nindx0 = 0
90 indx = 0
91 indx0 = 0
92c
93 ! Loop over the elements
94 DO i = 1,nel
95c
96 ! If damage has not been reached yet
97 IF (dfmax(i,1) < one) THEN
98c
99 ! Fiber damage in direction 1
100 IF (signxx(i) > zero) THEN
101 damft = (signxx(i)/sigt1)**2
102 . + beta*(signxy(i)/sigt12)**2
103 . + beta*(signzx(i)/sigt12)**2
104 damfc = zero
105 dfmax(i,2) = max(damft,dfmax(i,2))
106 dfmax(i,2) = min(dfmax(i,2),one)
107 ELSE
108 damfc = (signxx(i)/sigc1)**2
109 damft = zero
110 dfmax(i,3) = max(damfc,dfmax(i,3))
111 dfmax(i,3) = min(dfmax(i,3),one)
112 ENDIF
113c
114 ! Matrix damage in direction 2
115 IF (signyy(i) > zero) THEN
116 dammt1 = (signyy(i)/sigt2)**2
117 . + (signxy(i)/sigt12)**2
118 dammc1 = zero
119 dfmax(i,4) = max(dammt1,dfmax(i,4))
120 dfmax(i,4) = min(dfmax(i,4),one)
121 ELSE
122 dammc1 = (signyy(i)/(two*sigt12))**2
123 . + (signxy(i)/sigt12)**2
124 . + signyy(i)*((sigc2/(two*sigt12))**2 - one)/sigc2
125 dammt1 = zero
126 dfmax(i,5) = max(dammc1,dfmax(i,5))
127 dfmax(i,5) = min(dfmax(i,5),one)
128 ENDIF
129c
130 ! Matrix damage in direction 3
131 IF (signzz(i) > zero) THEN
132 dammt2 = (signzz(i)/sigt2)**2
133 . + (signzx(i)/sigt12)**2
134 dammc2 = zero
135 dfmax(i,4) = max(dammt2,dfmax(i,4))
136 dfmax(i,4) = min(dfmax(i,4),one)
137 ELSE
138 dammc2 = (signzz(i)/(two*sigt12))**2
139 . + (signzx(i)/sigt12)**2
140 . + signzz(i)*((sigc2/(two*sigt12))**2 - one)/sigc2
141 dammt2 = zero
142 dfmax(i,5) = max(dammc2,dfmax(i,5))
143 dfmax(i,5) = min(dfmax(i,5),one)
144 ENDIF
145c
146 ! Damage variable update
147 dammx = max(damft,damfc,dammc1,dammt1,dammc2,dammt2)
148 dfmax(i,1) = min(one,max(dammx,dfmax(i,1)))
149 IF (dfmax(i,1) >= one) THEN
150 nindx = nindx+1
151 indx(nindx) = i
152 uvar(i,1) = time
153 ENDIF
154 ENDIF
155c
156 ! Stress relaxation in case of damage reached
157 IF ((uvar(i,1) > zero).AND.(loff(i) /= zero).AND.(off(i) /= zero)) THEN
158 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
159 IF (dmg_scale(i) < em02) THEN
160 loff(i) = zero
161 tdele(i) = time
162 dmg_scale(i) = zero
163 noff(i) = noff(i) + 1
164 IF (noff(i) >= failip) THEN
165 off(i) = zero
166 nindx0 = nindx0 + 1
167 indx0(nindx0) = i
168 ENDIF
169 ENDIF
170 ENDIF
171c
172 ENDDO
173c
174 !====================================================================
175 ! - PRINTOUT DATA ABOUT FAILED ELEMENTS
176 !====================================================================
177 IF(nindx > 0)THEN
178 DO j=1,nindx
179 i = indx(j)
180#include "lockon.inc"
181 WRITE(iout, 1000) ngl(i),ip,ilay
182 WRITE(istdo,1100) ngl(i),ip,ilay,time
183#include "lockoff.inc"
184 END DO
185 ENDIF
186C
187 IF(nindx0 > 0)THEN
188 DO j=1,nindx0
189 i = indx0(j)
190#include "lockon.inc"
191 WRITE(iout, 1200) ngl(i),time
192 WRITE(istdo,1200) ngl(i),time
193#include "lockoff.inc"
194 END DO
195 ENDIF
196C--------------------------------------------
197 1000 FORMAT(1x,'FAILURE (CHANG) OF SOLID ELEMENT ',i10,1x,
198 .',GAUSS PT',i5,1x,',LAYER',i5)
199 1100 FORMAT(1x,'FAILURE (CHANG) OF SOLID ELEMENT ',i10,1x,
200 .',GAUSS PT',i5,1x,',LAYER',i5,1x,'AT TIME :',1pe20.13)
201 1200 FORMAT(1x,'-- RUPTURE OF SOLID ELEMENT : ',i10,1x,
202 .'AT TIME :',1pe20.13)
203C--------------------------------------------
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21