37
38! m o d u l e s
39
40 use newman_raju_mod
41
42
43
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "units_c.inc"
52#include "comlock.inc"
53
54 INTEGER NEL,NUPARAM,NUVAR,IPT,NINDXF
56
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
61
62
63
64 INTEGER I,J,IDEB,NINDX
65 INTEGER ,DIMENSION(NEL) :: INDX
66
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
70
71
72
73
74
75
76
77
78
79
80 exp_n = uparam(1)
81 k_ic = uparam(6)
82 k_th = uparam(7)
83 v0 = uparam(8)
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)
90
91
92
93 fac_lenm = ep06 * fac_l
94 fac_mpa = em6 * fac_m / (fac_l * fac_t**2)
95 vm = v0 * fac_l / fac_t
96 kcm = k_ic * sqrt(fac_l)
97 ktm = k_th * sqrt(fac_l)
98
100 nindx = 0
101
102 dsig_ini = 2.0
103 xdamp = 25.0
104 exp_m = one / (one + xdamp)
105 fac_pi0 = zero
106 fac_pi2 = half
107
108 DO i = 1,nel
109 IF (off(i) == one .and. uvar(i,15) == zeroTHEN
110 v_a = zero
111 v_c = zero
112
113
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
119
120
121 dsig_n = (sig_cos - uvar(i,21)) /
max(timestep,em20)
122 dsig_n = dsig_n * fac_mpa / fac_t
123
124 uvar(i,21) = sig_cos
125 IF (dsig_n > dsig_ini) THEN
126 sig_cos = sig_cos * (dsig_ini/abs(dsig_n))**exp_m
127 END IF
128
129
130
131 sig_cosw = sig_cos - sig_ini
132 sig_cosw =
max(zero , sig_cosw)
133
134
135
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)
140
141
142 IF (k1_a >= kcm) THEN
143 tdel(i) = time
144 nindx = nindx + 1
145 nindxf = nindxf+ 1
146 indx(nindx) = i
147 indxf(nindxf) = i ! tag to save crack direction
148 uvar(i
149 END IF
150
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
153
154
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
159
160
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
164 nindx = nindx + 1
165 nindxf = nindxf+ 1
166 indx(nindx) = i
167 indxf(nindxf) = i
168 uvar(i,15) = one
169 END IF
170
171 END IF
172 END DO
173
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
183
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)
188
189 RETURN