OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fail_brokmann.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_brokmann (nel, nuparam, nuvar, time, timestep, uparam, ngl, signxx, signyy, signxy, uvar, off, ipt, nindxf, indxf, tdel)

Function/Subroutine Documentation

◆ fail_brokmann()

subroutine fail_brokmann ( integer nel,
integer nuparam,
integer nuvar,
time,
timestep,
intent(in) uparam,
integer, dimension(nel) ngl,
dimension(nel) signxx,
dimension(nel) signyy,
dimension(nel) signxy,
intent(inout) uvar,
dimension(nel) off,
integer ipt,
integer nindxf,
integer, dimension(nel) indxf,
dimension(nel) tdel )

Definition at line 32 of file fail_brokmann.F.

37!-----------------------------------------------
38! m o d u l e s
39!-----------------------------------------------
40 use newman_raju_mod
41C-----------------------------------------------
42c Test of Ch. Brokmann criterion in glass, taking account for initial
43c statistically distributed micro cracks
44C-----------------------------------------------
45C I m p l i c i t T y p e s
46C-----------------------------------------------
47#include "implicit_f.inc"
48C-----------------------------------------------
49C G l o b a l P a r a m e t e r s
50C-----------------------------------------------
51#include "units_c.inc"
52#include "comlock.inc"
53C---------+---------+---+---+--------------------------------------------
54 INTEGER NEL,NUPARAM,NUVAR,IPT,NINDXF
55 my_real time,timestep
56c
57 INTEGER, DIMENSION(NEL) :: NGL,INDXF
58 my_real, DIMENSION(NEL) :: signxx,signyy,signxy,off,tdel
59 my_real, DIMENSION(NUPARAM) ,INTENT(IN) :: uparam
60 my_real ,DIMENSION(NEL,NUVAR), INTENT(INOUT) :: uvar
61C-----------------------------------------------
62C L o c a l V a r i a b l e s
63C-----------------------------------------------
64 INTEGER I,J,IDEB,NINDX
65 INTEGER ,DIMENSION(NEL) :: INDX
66c
67 my_real :: alpha,alphai,exp_n,exp_m,k_ic,k_th,sig_ini,dsig_ini,xdamp,v0,
68 . da,dc,v_a,v_c,kcm,ktm,vm,sig_cos,sig_cosw,dsig_n,ya,yc,k1_a,k1_c,
69 . cr_ang,fac_m,fac_l,fac_t,fac_lenm,fac_mpa,fac_pi0,fac_pi2
70c--------------------------------------------------------------------
71c--- state variables for Ch.Brokmann extension
72c UVAR(15) = FAIL_B : Failure flag, set = 1 to allow Alter test
73c UVAR(16) = CR_LEN : Crack length
74c UVAR(17) = CR_DEPTH : Crack width
75c UVAR(18) = CR_ANG : Random crack angle
76c UVAR(19) = THK0 : Initial thickness of the shell (in micrometers)
77c UVAR(20) = ALDT0 : Initial width of the shell (in micrometers)
78c UVAR(21) = SIG_COS : Crack opening stress (saved for filtering)
79C=======================================================================
80 exp_n = uparam(1)
81 k_ic = uparam(6)
82 k_th = uparam(7)
83 v0 = uparam(8)
84 alpha = uparam(10)
85 ideb = nint(uparam(17))
86 sig_ini = uparam(30)
87 fac_m = uparam(33)
88 fac_l = uparam(34)
89 fac_t = uparam(35)
90c--------------------------------------------------
91c parameter initialization and unit_conversions
92c--------------------------------------------------
93 fac_lenm = ep06 * fac_l ! conversion to micrometers
94 fac_mpa = em6 * fac_m / (fac_l * fac_t**2) ! stress conversion to MPa
95 vm = v0 * fac_l / fac_t ! conversion to (m/s)
96 kcm = k_ic * sqrt(fac_l) ! conversion to [stress*sqrt(m)]
97 ktm = k_th * sqrt(fac_l) ! conversion to [stress*sqrt(m)]
98c-----------------------------------
99 alphai = one - alpha
100 nindx = 0
101c
102 dsig_ini = 2.0 ! [MPa/s]
103 xdamp = 25.0 ! hard coded damping exponent
104 exp_m = one / (one + xdamp)
105 fac_pi0 = zero
106 fac_pi2 = half
107c--------------------------------------------------------------------
108 DO i = 1,nel
109 IF (off(i) == one .and. uvar(i,15) == zero .and. uvar(i,16) > zero) THEN
110 v_a = zero
111 v_c = zero
112c
113c Crack openenig stress (stress rotated in crack direction)
114 cr_ang = uvar(i,18) * two
115 sig_cos = half*(signxx(i)+signyy(i))
116 . + cos(cr_ang) * half*(signxx(i)-signyy(i))
117 . + sin(cr_ang) * half*signxy(i)
118 sig_cos = sig_cos * alpha + uvar(i,21)*alphai ! filter using exp average
119c
120c take into account high stress rates
121 dsig_n = (sig_cos - uvar(i,21)) / max(timestep,em20)
122 dsig_n = dsig_n * fac_mpa / fac_t ! => (MPa/s)
123
124 uvar(i,21) = sig_cos ! Save Crack Opening Stress (COS)
125 IF (dsig_n > dsig_ini) THEN
126 sig_cos = sig_cos * (dsig_ini/abs(dsig_n))**exp_m
127 END IF
128c------------------------
129c Residual stress
130c------------------------
131 sig_cosw = sig_cos - sig_ini ! Subtracting initial surface stress
132 sig_cosw = max(zero , sig_cosw)
133c------------------------
134c Test criteria
135c------------------------
136 CALL newman_raju(uvar(i,17),uvar(i,16),uvar(i,19),uvar(i,20),fac_pi2,ya)
137 CALL newman_raju(uvar(i,17),uvar(i,16),uvar(i,19),uvar(i,20),fac_pi0,yc)
138 k1_a = ya * sig_cosw * sqrt(pi*uvar(i,16)*em6)
139 k1_c = yc * sig_cosw * sqrt(pi*uvar(i,17)*em6)
140c
141c Check rupture criterion #1
142 IF (k1_a >= kcm) THEN
143 tdel(i) = time ! tag to start damage
144 nindx = nindx + 1
145 nindxf = nindxf+ 1
146 indx(nindx) = i
147 indxf(nindxf) = i ! tag to save crack direction
148 uvar(i,15) = one ! set failure flag = 1
149 END IF
150c
151 IF (k1_a >= ktm .and. k1_a < kcm) v_a = v0*(k1_a/kcm)**exp_n
152 IF (k1_c >= ktm .and. k1_a < kcm) v_c = v0*(k1_c/kcm)**exp_n
153c
154c Crack growth
155 da = v_a * timestep * fac_lenm
156 dc = v_c * timestep * fac_lenm
157 uvar(i,16) = uvar(i,16) + da
158 uvar(i,17) = uvar(i,17) + dc
159c
160c Check rupture criterion #2
161 k1_a = ya * sig_cos * sqrt(pi*uvar(i,16)*em6)
162 IF (k1_a >= kcm .and. uvar(i,15) == zero) THEN
163 tdel(i) = time ! tag to start damage
164 nindx = nindx + 1
165 nindxf = nindxf+ 1
166 indx(nindx) = i
167 indxf(nindxf) = i ! tag to save crack direction
168 uvar(i,15) = one ! set failure flag = 1
169 END IF
170
171 END IF
172 END DO
173c-----------------------------------------------
174 IF (nindx > 0) THEN
175 DO j=1,nindx
176 i = indx(j)
177#include "lockon.inc"
178 WRITE(iout, 1000) ngl(i),ipt,time
179 WRITE(istdo,1100) ngl(i),ipt,time
180#include "lockoff.inc"
181 ENDDO
182 ENDIF
183c-----------------------------------------------
184 1000 FORMAT(1x, ' **** FAILURE due to Brokmann criterion : ELEMENT ',i10,
185 . ' INT POINT',i2,' AT TIME ',1pe12.4)
186 1100 FORMAT(1x, ' **** FAILURE due to Brokmann criterion : ELEMENT ',i10,
187 . ' INT POINT',i2,' AT TIME ',1pe12.4)
188c-----------
189 RETURN
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
#define max(a, b)
Definition macros.h:21