41
42
43
44
45
46
47 USE fail_param_mod
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "units_c.inc"
60
61
62
63 INTEGER ,INTENT(IN) :: FAIL_ID
64 INTEGER ,INTENT(IN) :: MAT_ID
65 INTEGER ,INTENT(IN) :: UNIT_ID
66 INTEGER ,INTENT(IN) :: IRUPT
67 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
68 TYPE (SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
69 TYPE (FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
70
71
72
73 INTEGER :: ISHELL,ISOLID,IRFUN,FUNC_ID,FUNC_ID2,S_FLAG,STRDEF,FAILIP
74 my_real :: rf1,rf2,epsp1,epsp2,scale_el,pthkf,
75 . el_ref,scale_temp,fscal_unit,unit_t
76 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
77
78 is_encrypted = .false.
79 is_available = .false.
80
81
83
84
85 scale_el = zero
86 scale_temp= zero
87 el_ref = zero
88 func_id = 0
89 func_id2 = 0
90 IF (unit_id > 0) THEN
91 unit_t = unitab%FAC_T(unit_id)
92 ELSE
93 unit_t = one
94 ENDIF
95
96
97
98 CALL hm_get_floatv (
'Epsilon_t1',rf1 ,is_available,lsubmodel,unitab)
99 CALL hm_get_floatv (
'Epsilon_t2',rf2 ,is_available,lsubmodel,unitab)
100 CALL hm_get_intv (
'fct_ID' ,irfun ,is_available,lsubmodel)
101 CALL hm_get_floatv (
'Epsilon_f1',epsp1 ,is_available,lsubmodel,unitab)
102 CALL hm_get_floatv (
'Epsilon_f2',epsp2 ,is_available,lsubmodel,unitab)
103 CALL hm_get_intv (
'S_Flag' ,s_flag,is_available,lsubmodel)
104 CALL hm_get_intv (
'FAILIP' ,failip ,is_available,lsubmodel)
105 IF (failip == 0) failip = 1
106
107 IF (s_flag == 2 .or. s_flag == 3 .or. s_flag == 12 .or. s_flag == 13 .or.
108 . s_flag == 22 .or. s_flag == 23) THEN
109 CALL hm_get_intv (
'fct_IDel' ,func_id ,is_available,lsubmodel)
110 CALL hm_get_floatv (
'Fscale_el',scale_el,is_available,lsubmodel,unitab)
111 CALL hm_get_floatv (
'EI_ref' ,el_ref ,is_available,lsubmodel,unitab)
112
113 CALL hm_get_intv (
'fct_IDt' ,func_id2 ,is_available,lsubmodel)
114 CALL hm_get_floatv (
'FscaleT',scale_temp,is_available,lsubmodel,unitab)
115
116
118 IF (scale_el == zero) scale_el = one*fscal_unit
119
121 IF (el_ref == zero) el_ref = one *fscal_unit
122 ENDIF
123
124 IF (s_flag == 0) s_flag = 1
125 IF (s_flag == 11 .or. s_flag == 12 .or. s_flag == 13) THEN
126 s_flag = s_flag - 10
127 strdef = 2
128 ELSEIF (s_flag == 21 .or. s_flag == 22 .or. s_flag == 23) THEN
129 s_flag = s_flag - 20
130 strdef = 3
131 ELSE
132 strdef = 1
133 END IF
134
135 IF (scale_temp == zero) scale_temp = one
136 IF (scale_el == zero) scale_el = one
137 IF (el_ref == zero) el_ref = one
138 IF (rf1 <= zero) rf1 = ep20
139 IF (rf2 <= zero) rf2 = two*ep20
140
141 IF (rf1 > rf2) THEN
142 CALL ancmsg(msgid=617, msgtype=msgerror, anmode=aninfo_blind_1,
143 . i1=mat_id)
144 ENDIF
145 pthkf = em06
146
147 fail%KEYWORD = 'TENS_STRAIN'
148 fail%IRUPT = irupt
149 fail%FAIL_ID = fail_id
150 fail%NUPARAM = 11
151 fail%NIPARAM = 0
152 fail%NUVAR = 2
153 fail%NFUNC = 3
154 fail%NTABLE = 0
155 fail%NMOD = 0
156 fail%PTHK = pthkf
157
158 ALLOCATE (fail%UPARAM(fail%NUPARAM))
159 ALLOCATE (fail%IPARAM(fail%NIPARAM))
160 ALLOCATE (fail%IFUNC (fail%NFUNC))
161 ALLOCATE (fail%TABLE (fail%NTABLE
162
163 fail%UPARAM(1) = rf1
164 fail%UPARAM(2) = rf2
165 fail%UPARAM(3) = epsp1
166 fail%UPARAM(4) = epsp2
167 fail%UPARAM(5) = scale_el
168 fail%UPARAM(6) = el_ref
169 fail%UPARAM(7) = scale_temp
170 fail%UPARAM(8) = s_flag
171 fail%UPARAM(9) = unit_t
172 fail%UPARAM(10)= strdef
173 fail%UPARAM(11)= failip
174
175 fail%IFUNC(1) = irfun
176 fail%IFUNC(2) = func_id
177 fail%IFUNC(3) = func_id2
178
179 IF(is_encrypted)THEN
180 WRITE(iout, 1000)
181 ELSE
182 WRITE(iout, 1100) rf1,rf2,irfun,strdef,failip
183 IF (epsp1 > zero .OR. epsp2 > zero) THEN
184 WRITE(iout, 2000)epsp1,epsp2
185 ENDIF
186 IF (s_flag == 2) WRITE(iout, 2900)
187 IF (s_flag == 3) WRITE(iout, 2950)
188 WRITE(iout, 3000) func_id,scale_el,el_ref,func_id2,scale_temp
189 IF (fail_id > zero) THEN
190 WRITE(iout, 4000) fail_id
191 ENDIF
192 ENDIF
193 RETURN
194
195 1000 FORMAT(
196 & 5x,40h crypted DATA in failure model /,
197 & 5x,40h ----------------------------- /)
198 1100 FORMAT(
199 & 5x,40h tension strain failure model /,
200 & 5x,40h ------------------------ /,
201 & 5x,'MAXIMUM TENSION STRAIN 1. . . . . . . . . . . . . . . . =',e12.4/
202 & 5x,'MAXIMUM TENSION STRAIN 2. . . . . . . . . . . . . . . . =',e12.4/
203 & 5x,'MAXIMUM STRAINS SCALING FUNCTION. . . . . . . . . . . . =',i10/
204 & 5x,'FAILURE STRAIN INPUT TYPE . . . . . . . . . . . . . . . =',i10/
205 & 5x,' =1 (STRAIN MEASURE DEFINED IN PROPERTY) ',/
206 & 5x,' =2 (ENGINEERING STRAIN) . . . . . . . . ',/
207 & 5x,' =3 (TRUE STRAIN). . . . . . . . . . . . ',/
208 & 5x,'NUMBER OF FAILED INTG. POINTS PRIOR TO ELEM DELETION .=',i10/)
209 2000 FORMAT(
210 & 5x,'MAXIMUM FIRST PRINCIPAL STRAIN FOR ELEMENT DELETION . . =',e12.4/
211 & 5x,'MAXIMUM SECOND PRINCIPAL STRAIN FOR ELEMENT DELETION. . =',e12.4/)
212 2900 FORMAT(
213 & 5x,'EQUIVALENT STRAIN METHOD USED '/)
214 2950 FORMAT(
215 & 5x,'FIRST PRINCIPAL STRAIN METHOD USED '/)
216 3000 FORMAT(
217 & 5x,'ELEMENT LENGTH REGULARIZATION USED: ',/
218 & 5x,'REGULARIZATION FUNCTION . . . . . . . . . . . . . . . . =',i10/
219 & 5x,'EL SCALING FACTOR . . . . . . . . . . . . . . . . . . . =',e12.4/
220 & 5x,'REFERENCE ELEMENT LENGTH. . . . . . . . . . . . . . . . =',e12.4/
221 & 5x,'TEMPERATURE FUNCTION. . . . . . . . . . . . . . . . . . =',i10/
222 & 5x,'TEMP SCALING FACTOR . . . . . . . . . . . . . . . . . . =',e12.4/)
223 4000 FORMAT(
224 & 5x,'FAIL_ID . . . . . . . . . . . . . . . . . . . . . . . . =',i10/)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
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)