41
42
43
44
45
46
47 USE fail_param_mod
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "units_c.inc"
61
62
63
64 INTEGER ,INTENT(IN) :: FAIL_ID
65 INTEGER ,INTENT(IN) :: MAT_ID
66 INTEGER ,INTENT(IN) :: IRUPT
67 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
68 TYPE (SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
69 INTEGER ,INTENT(INOUT) :: IXFEM
70 TYPE (FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
71 TYPE (FAIL_TAG_) ,INTENT(INOUT) :: FAIL_TAG
72
73
74
75 INTEGER :: IFAIL_SH,IMARGIN,IENG
76 INTEGER ,PARAMETER :: NFUNC = 2
77 INTEGER ,DIMENSION(NFUNC) :: IFUNC
78 my_real :: rani,dadv,fact_margin,fact_loosemetal,pthkf,fcut,
alpha
79
80 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
81
82 is_encrypted = .false.
83 is_available = .false.
84
85
86
88
89
90
91 fact_margin = em01
92 fact_loosemetal = zep02
93
94
95 CALL hm_get_intv (
'fct_ID' ,ifunc(1) ,is_available,lsubmodel)
96 CALL hm_get_intv (
'Ifail_sh' ,ifail_sh ,is_available,lsubmodel)
97 CALL hm_get_intv (
'I_marg' ,imargin ,is_available,lsubmodel)
98 CALL hm_get_intv (
'fct_IDadv' ,ifunc(2) ,is_available,lsubmodel)
99 CALL hm_get_floatv (
'Rani' ,rani ,is_available,lsubmodel,unitab)
100 CALL hm_get_floatv (
'Dadv' ,dadv ,is_available,lsubmodel,unitab)
101 CALL hm_get_intv (
'Istrain' ,ieng ,is_available,lsubmodel)
102 CALL hm_get_intv (
'Ixfem' ,ixfem ,is_available,lsubmodel)
103
104 IF (imargin == 0) imargin = 1
105 IF (imargin > 1) THEN
106
107 CALL hm_get_floatv (
'Factor_Marginal' ,fact_margin ,is_available,lsubmodel,unitab)
108 CALL hm_get_floatv (
'Factor_Loosemetal',fact_loosemetal,is_available,lsubmodel,unitab)
109 ENDIF
110 IF (ieng > 1) THEN
111
112 CALL hm_get_floatv (
'FCUT' ,fcut ,is_available,lsubmodel,unitab)
114 ELSE
115 fcut = zero
117 ENDIF
118
119 IF (ifunc(1) == 0)
CALL ancmsg(msgid=2001,msgtype=msgerror,anmode=aninfo_blind,
120 . i1=mat_id )
121
124 IF (fcut == zero) fcut = 10000.0d0*unitab%FAC_T_WORK
125 IF (
alpha > zero) fcut = zero
126 IF (ifail_sh == 0) ifail_sh = 1
127 IF (rani == 0) rani = one
128 IF (dadv ==zero) THEN
129 IF (ifunc(2) == 0) THEN
130 dadv = half
131 ELSE
132 dadv = one
133 ENDIF
134 ENDIF
135 IF (ixfem /= 1 .AND. ixfem /= 2) ixfem = 0
136
137 IF (ifail_sh == 1) THEN
138 pthkf = em06
139 ELSEIF (ifail_sh == 2) THEN
140 pthkf = one
141 ELSEIF (ifail_sh == 3) THEN
142 pthkf = em06
143 ELSEIF (ifail_sh == 4) THEN
144 pthkf = em06
145 ENDIF
146
147 fail%KEYWORD = 'FLD'
148 fail%IRUPT = irupt
149 fail%FAIL_ID = fail_id
150 fail%NUPARAM = 6
151 fail%NIPARAM = 3
152 fail%NUVAR = 3
153 fail%NFUNC = nfunc
154 fail%NTABLE = 0
155 IF (ieng == 2) THEN
156 fail%NMOD = 3
157 ELSE
158 fail%NMOD = 2
159 ENDIF
160 fail%PTHK = pthkf
161
162 ALLOCATE (fail%UPARAM(fail%NUPARAM))
163 ALLOCATE (fail%IPARAM(fail%NIPARAM))
164 ALLOCATE (fail%IFUNC (fail%NFUNC))
165 ALLOCATE (fail%TABLE (fail%NTABLE))
166 ALLOCATE (fail%MODE (fail%NMOD))
167
168 fail%IFUNC(1:nfunc) = ifunc(1:nfunc)
169
170 fail%UPARAM(1) = fact_margin
171 fail%UPARAM(2) = dadv
172 fail%UPARAM(3) = rani
173 fail%UPARAM(4) = fact_loosemetal
174 fail%UPARAM(5) = fcut
175 fail%UPARAM(6) =
alpha
176
177 fail%IPARAM(1) = ifail_sh
178 fail%IPARAM(2) = imargin
179 fail%IPARAM(3) = ieng
180
181 fail%MODE(1) = "FLDF Damage factor"
182 fail%MODE(2) = "FLDZ Failure zone factor"
183 IF (ieng == 2) THEN
184 fail%MODE(3) = "Incremental Strains ratio Beta"
185 ENDIF
186 fail_tag%LF_DAMMX = 1 + fail%NMOD
187 fail_tag%LF_DAM = 1
188 fail_tag%LF_INDX = 1
189
190
191 IF (is_encrypted) THEN
192 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
193 ELSE
194 IF (ixfem == 0)THEN
195 WRITE(iout, 1000)
196 WRITE(iout, 1100) ifunc(1),rani,imargin,fact_margin,fact_loosemetal
197 WRITE(iout, 1600) ieng
198 IF (ieng > 1)
WRITE(iout, 1800) fcut,
alpha
199 IF (ifail_sh == 1) THEN
200 WRITE(iout, 1700)
201 ELSEIF (ifail_sh == 2) THEN
202 WRITE(iout, 1710)
203 ELSEIF (ifail_sh == 3) THEN
204 WRITE(iout, 1720)
205 ELSEIF (ifail_sh == 4) THEN
206 WRITE(iout, 1730)
207 ENDIF
208 ELSE
209 WRITE(iout, 1010)
210 WRITE(iout, 1110) ifunc(1),ifunc(2),dadv,rani,
211 & imargin,fact_margin,fact_loosemetal
212 WRITE(iout, 1600) ieng
213 IF (ieng > 1)
WRITE(iout, 1800) fcut,
alpha
214 WRITE(iout, 1400)
215 END IF
216 ENDIF
217
218 1000 FORMAT(
219 & 5x,'-----------------------------------------------------',/,
220 & 5x,' FAILURE CRITERION : FORMING LIMIT DIAGRAM ',/,
221 & 5x,'-----------------------------------------------------',/)
222 1100 FORMAT(
223 & 5x,'FORMING LIMIT DIAGRAM FUNCTION ID . . . . . . . . . =',i10/,
224 & 5x,'AVERAGE ANISOTROPY FACTOR (RANI). . . . . . . . . . =',1pg20.13/,
225 & 5x,'MARGINAL VALUE FLAG (I_MARG). . . . . . . . . . . . =',i10/,
226 & 5x,'FACTOR MARGINAL . . . . . . . . . . . . . . . . . . =',1pg20.13/,
227 & 5x,'FACTOR LOOSEMETAL . . . . . . . . . . . . . . . . . =',1pg20.13//)
228 1600 FORMAT(
229 & 5x,'INPUT/FORMULATION FLAG (ISTRAIN). . . . . . . . . . =',i10/,
230 & 5x,' = 0: TRUE STRAIN (CLASSIC) INPUT ',/,
231 & 5x,' = 1: ENGINEERING STRAIN INPUT FLAG ',/,
232 & 5x,' = 2: NON-LINEAR PATH FORMULATION ',/)
233 1700 FORMAT(
234 & 5x,' SHELL ELEMENT DELETION AFTER FAILURE',//)
235 1710 FORMAT(
236 & 5x,' STRESS TENSOR IN SHELL LAYER SET TO ZERO AFTER FAILURE',//)
237 1720 FORMAT(
238 & 5x,' ELEMENT IS DELETED ONLY WHEN MEMBRANE FAILS',//)
239 1730 FORMAT(
240 & 5x,' SHELL FAILURE IS DEACTIVATED',//)
241 1400 FORMAT(
242 & 5x,' SHELL ELEMENT CRACKING AFTER FAILURE',//)
243 1800 FORMAT(
244 & 5x,'STRAIN RATIO FILTERING FREQUENCY (FCUT) . . . . . . =',1pg20.13/,
245 & 5x,'strain ratio filtering weight(
alpha) . . . . . . . =
',1PG20.13//)
246 1010 FORMAT(
247 & 5X,'-----------------------------------------------------',/,
248 & 5X,' failure criterion : xfem forming limit diagram ',/,
249 & 5X,'-----------------------------------------------------',/)
250 1110 FORMAT(
251 & 5X,'forming limit diagram
FUNCTION id . . . . . . . . . =
',I10/,
252 & 5X,'crack advancement limit diagram function
id . . . . =
',I10/,
253 & 5X,'scale factor
for crack advancement (DADV) . . . . . =
',1PG20.13/,
254 & 5X,'average anisotropy factor (RANI). . . . . . . . . . =',1PG20.13/,
255 & 5X,'marginal value flag (I_MARG). . . . . . . . . . . . =',I10/,
256 & 5X,'factor marginal . . . . . . . . . . . . . . . . . . =',1PG20.13/,
257 & 5X,'factor loosemetal . . . . . . . . . . . . . . . . . =',1PG20.13//)
258
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
for(i8=*sizetab-1;i8 >=0;i8--)
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)