39 . FAIL ,MAT_ID ,FAIL_ID ,IRUPT ,
40 . TITR ,LSUBMODEL,UNITAB )
55#include "implicit_f.inc"
63 INTEGER ,
INTENT(IN) :: FAIL_ID
64 INTEGER ,
INTENT(IN) :: MAT_ID
65 INTEGER ,
INTENT(IN) :: IRUPT
66 CHARACTER ,
INTENT(IN) :: TITR*500
67 TYPE() ,
INTENT(IN) :: UNITAB
69 TYPE(fail_param_) ,
INTENT(INOUT) :: FAIL
74 my_real dam_sf,max_dam,n_val,softexp
75 my_real ref_len,ref_siz_unit,reg_scale
76 my_real eps_bicomp,eps_comp,eps_cisail,eps_tens,
77 . eps_plane,eps_bitrac,epfmin,epf_comp,
78 . epf_shear,epf_tens,epf_plstrn,epf_biax
79 my_real triax,lodep,cos3theta,epsfail
80 DOUBLE PRECISION :: EPF(6),MAT(6,6)
81 INTEGER ICARD,IFORM,DINIT,,REG_FUNC,INFO,IPIV(6),I,FAILIP
82 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED,NEGATIVE
84 is_encrypted = .false.
94 CALL hm_get_intv (
'ICARD' ,icard ,is_available,lsubmodel)
95 IF (icard <= 0) icard = 1
98 CALL hm_get_intv (
'FAILIP' ,failip ,is_available,lsubmodel)
108 CALL hm_get_floatv (
'EPF_COMP' ,epf_comp ,is_available,lsubmodel,unitab)
109 CALL hm_get_floatv (
'EPF_SHEAR' ,epf_shear ,is_available,lsubmodel,unitab)
110 CALL hm_get_floatv (
'EPF_TENS' ,epf_tens ,is_available,lsubmodel,unitab)
111 CALL hm_get_floatv (
'EPF_PLSTRN',epf_plstrn,is_available,lsubmodel,unitab)
112 CALL hm_get_floatv (
'EPF_BIAX' ,epf_biax ,is_available,lsubmodel,unitab)
115 CALL hm_get_intv (
'DINIT' ,dinit ,is_available,lsubmodel)
116 CALL hm_get_floatv (
'DAM_SF' ,dam_sf ,is_available,lsubmodel,unitab)
117 CALL hm_get_floatv (
'MAX_DAM' ,max_dam ,is_available,lsubmodel,unitab)
119 CALL hm_get_intv (
'INST' ,inst ,is_available,lsubmodel)
120 CALL hm_get_intv (
'IFORM' ,iform ,is_available,lsubmodel)
121 CALL hm_get_floatv (
'N_VAL' ,n_val ,is_available,lsubmodel,unitab)
122 CALL hm_get_floatv (
'SOFTEXP' ,softexp ,is_available,lsubmodel,unitab)
124 CALL hm_get_intv (
'REG_FUNC' ,reg_func,is_available,lsubmodel)
125 CALL hm_get_floatv (
'REF_LEN' ,ref_len ,is_available,lsubmodel,unitab)
126 IF (reg_func > 0 .AND. ref_len == zero)
THEN
128 ref_len = one*ref_siz_unit
130 CALL hm_get_floatv (
'REG_SCALE',reg_scale,is_available,lsubmodel,unitab)
131 IF (reg_func > 0 .AND. reg_scale == zero) reg_scale = one
149 mat(1,3) = -18.0d0/pi
150 mat(1,4) = two/sqrt(three)
152 mat(1,6) = -18.0d0/(pi*sqrt(three))
176 mat(5,2) = one/sqrt(three)
187 mat(6,6) = -two_third
190#ifndef WITHOUT_LINALG
191 CALL dgesv(6, 1, mat, 6, ipiv, epf, 6, info)
193 WRITE(6,*)
"Error: Blas/Lapack required"
209 IF (iform <= 0) iform = 1
212 dam_sf =
max(dam_sf,zero)
213 IF (dam_sf == zero) dam_sf = one
215 IF (max_dam == zero) max_dam = one
216 max_dam =
min(max_dam,one)
217 max_dam =
max(max_dam,zero)
219 IF(inst==1 .AND. n_val==zero)
THEN
223 IF (softexp == zero) softexp = one
224 softexp =
max(em06,softexp)
226 epfmin =
max(zero,epfmin)
231 cos3theta = -half*twenty7*triax*(triax**2 - third)
232 IF (cos3theta < -one ) cos3theta = -one
233 IF (cos3theta > one ) cos3theta = one
234 lodep = one - two*acos(cos3theta)/pi
235 epsfail = c1 + c2*triax + c3*lodep + c4*(triax**2) +
236 . c5*(lodep**2) + c6*triax*lodep
237 IF (epsfail <= epfmin)
THEN
241 triax = triax + (two*two_third)/ep03
244 CALL ancmsg(msgid=2091, msgtype=msgwarning, anmode=aninfo_blind_1,
250 IF (failip == 0) failip = 1
254 fail%KEYWORD =
'SYAZWAN'
256 fail%FAIL_ID = fail_id
264 ALLOCATE (fail%UPARAM(fail%NUPARAM))
265 ALLOCATE (fail%IPARAM(fail%NIPARAM))
266 ALLOCATE (fail%IFUNC (fail%NFUNC))
267 ALLOCATE (fail%TABLE (fail%NTABLE))
269 fail%IFUNC(1) = reg_func
277 fail%UPARAM(7) = iform
278 fail%UPARAM(8) = dinit
279 fail%UPARAM(9) = dam_sf
280 fail%UPARAM(10) = max_dam
281 fail%UPARAM(11) = inst
282 fail%UPARAM(12) = n_val
283 fail%UPARAM(13) = softexp
284 fail%UPARAM(14) = ref_len
285 fail%UPARAM(15) = reg_scale
286 fail%UPARAM(16) = epfmin
287 fail%UPARAM(17) = failip
291 IF (is_encrypted)
THEN
292 WRITE(iout,
'(5X,A,//)')
'CONFIDENTIAL DATA'
296 WRITE(iout,1100) epf_comp,epf_shear,epf_tens,
297 . epf_plstrn,epf_biax,
300 WRITE(iout,1200) c1,c2,c3,c4,c5,c6
302 WRITE(iout,1300) epfmin,failip
303 WRITE(iout,1400) dinit,dam_sf,max_dam
304 WRITE(iout,1500) inst,iform,n_val,softexp
305 IF (reg_func > 0)
THEN
306 WRITE(iout,1600) reg_func,ref_len,reg_scale
312 & 5x,
' --------------------------------------------------------',/,
313 & 5x,
' SYAZWAN FAILURE CRITERION ',/,
314 & 5x,
' --------------------------------------------------------',/)
316 & 5x,
'PLAST. STRAIN AT FAILURE IN UNIAXIAL COMP . . . . . . . =',1pg20.13/
317 & 5x,
'PLAST. STRAIN AT FAILURE IN SHEAR . . . . . . . . . . . =',1pg20.13/
318 & 5x,
'PLAST. STRAIN AT FAILURE IN UNIAXIAL TENS . . . . . . . =',1pg20.13/
319 & 5x,
'PLAST. STRAIN AT FAILURE IN PLANE STRAIN. . . . . . . . =',1pg20
320 & 5x,
'PLAST. STRAIN AT FAILURE IN BIAXIAL TENS. . . . . . . . =',1pg20
322 & 5x,
'CORRESPONDING C PARAMETERS: '
323 & 5x,
'1ST FAILURE PARAMETER (C1). . . . . . . . . . . . . . . =',1pg20.13/
324 & 5x,
'2ND FAILURE PARAMETER (C2). . . . . . . . . . . . . . . =',1pg20.13/
325 & 5x,
'3RD FAILURE PARAMETER (C3). . . . . . . . . . . . . . . =',1pg20.13/
326 & 5x,
'4TH FAILURE PARAMETER (C4). . . . . . . . . . . . . . . =',1pg20.13/
327 & 5x,
'5TH FAILURE PARAMETER (C5). . . . . . . . . . . . . . . =',1pg20.13/
328 & 5x,
'6TH FAILURE PARAMETER (C6). . . . . . . . . . . . . . . =',1pg20.13/)
330 & 5x,
'1ST FAILURE PARAMETER (C1). . . . . . . . . . . . . . . =',1pg20.13/
331 & 5x,
'2ND FAILURE PARAMETER (C2). . . . . . . . . . . . . . . =',1pg20.13/
332 & 5x,
'3RD FAILURE PARAMETER (C3). . . . . . . . . . . . . . . =',1pg20.13/
333 & 5x,'4th failure parameter(c4). . . . . . . . . . . . . . . =
',1PG20.13/
334 & 5X,'5th failure parameter(c5). . . . . . . . . . . . . . . =
',1PG20.13/
335 & 5X,'6th failure parameter(c6). . . . . . . . . . . . . . . =
',1PG20.13/)
337 & 5X,'minimum plastic strain at
',1PG20.13/
338 & 5X,'num. of failed intg. pts. prior to solid elm. deletion. =
',I10/)
340 & 5X,'damage variable initialization flag(dinit) . . . . . . =
',I10/,
341 & 5X,' dinit = 0: no damage initialization
',/,
342 & 5X,' dinit = 1: damage initialization from strain tensor
',/,
343 & 5X,'damage initialization scale factor. . . . . . . . . . . =
',1PG20.13/
344 & 5X,'damage initialization maximal
VALUE . . . . . . . . . . =
',1PG20.13/)
346 & 5X,'instability flag(inst) . . . . . . . . . . . . . . . . =
',I10/,
347 & 5X,' inst = 0: no necking instability
',/,
348 & 5X,' inst = 1: necking instability activated
',/,
349 & 5X,'instability formulation flag(iform) . . . . . . . . . =
',I10/,
350 & 5X,' iform = 1: incremental formulation(default)
',/,
351 & 5X,' iform = 2: direct formulation
',/,
352 & 5X,"HOLLOMON's law n
VALUE . . . . . . . . . . . . . . . . =
",1PG20.13/
353 & 5X,'STRESS SOFTENING EXPONENT (SOFTEXP) . . . . . . . . . . =',1PG20.13/)
355 & 5X,'ELEMENT SIZE SCALING FUNCTION ID . . . . . . . . . . . .=',I10/
356 & 5X,' REFERENCE ELEMENT SIZE . . . . . . . . . . . . . . .=',1PG20.13/
357 & 5X,' SCALE FACTOR . . . . . . . . . . . . . . . . . . . .=',1PG20.13/)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)