39
40
41
42
43
44
45
46 USE fail_param_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59
60
61
62 INTEGER ,INTENT(IN) :: FAIL_ID
63 INTEGER ,INTENT(IN) :: MAT_ID
64 INTEGER ,INTENT(IN) :: UNIT_ID
65 INTEGER ,INTENT(IN) :: IRUPT
66 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
67 TYPE (SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
68 TYPE (FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
69 TYPE (FAIL_TAG_) ,INTENT(INOUT) :: FAIL_TAG
70
71
72
73 INTEGER :: IFUNN,IFUNT,IFAIL,IFAILS,IFAILE,ISOLID,NFAIL,ISYM,IUNIT,IFLAGUNIT
74 my_real :: maxdn,maxdt,expn,expt,facn,fact,ascale,maxei,maxen,maxet,nn,nt,
75 . dtime,dsoft,areascale, unit_t
76
77 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
78
79 is_encrypted = .false.
80 is_available = .false.
81
82
83
85
86
87
88
89 CALL hm_get_floatv (
'Epsilon_maxN',maxdn ,is_available,lsubmodel,unitab)
90 CALL hm_get_floatv (
'Exponent_N' ,expn ,is_available,lsubmodel,unitab)
91 CALL hm_get_floatv (
'Alpha_N' ,facn ,is_available,lsubmodel,unitab)
92 CALL hm_get_intv (
'R_fct_ID_N' ,ifunn ,is_available,lsubmodel)
93 CALL hm_get_intv (
'Ifail' ,ifail ,is_available,lsubmodel)
94 CALL hm_get_intv (
'Ifail_so' ,isolid,is_available,lsubmodel)
95 CALL hm_get_intv (
'ISYM' ,isym ,is_available,lsubmodel)
96
97 CALL hm_get_floatv (
'Epsilon_maxT',maxdt ,is_available,lsubmodel,unitab)
98 CALL hm_get_floatv (
'Exponent_T' ,expt ,is_available,lsubmodel,unitab)
99 CALL hm_get_floatv (
'Alpha_T' ,fact ,is_available,lsubmodel,unitab)
100 CALL hm_get_intv (
'R_fct_ID_T' ,ifunt ,is_available,lsubmodel)
101
102 CALL hm_get_floatv (
'EI_max' ,maxei ,is_available,lsubmodel,unitab)
103 CALL hm_get_floatv (
'EN_max' ,maxen ,is_available,lsubmodel,unitab)
104 CALL hm_get_floatv (
'ET_max' ,maxet ,is_available,lsubmodel,unitab)
105 CALL hm_get_floatv (
'N_n' ,nn ,is_available,lsubmodel,unitab)
106 CALL hm_get_floatv (
'N_t' ,nt ,is_available,lsubmodel,unitab)
107
108 CALL hm_get_floatv (
'T_max' ,dtime ,is_available,lsubmodel,unitab)
109 CALL hm_get_floatv (
'N_soft' ,dsoft ,is_available,lsubmodel,unitab)
110 CALL hm_get_floatv (
'AREA_scale' ,areascale ,is_available,lsubmodel,unitab)
111
112 nfail = 1
113 IF (isolid == 0) THEN
114 isolid = 1
115 ELSE IF (isolid == 2) THEN
116 nfail = 4
117 END IF
118 IF (maxdn == zero) maxdn = infinity
119 IF (maxdt == zero) maxdt = infinity
120 IF (maxei == zero) maxei = infinity
121 IF (maxen == zero) maxen = infinity
122 IF (maxet == zero) maxet = infinity
123 IF (facn == zero) facn = one
124 IF (fact == zero) fact = one
125 IF (expn == zero) expn = one
126 IF (expt == zero) expt = one
127 IF (nn == zero) nn = one
128 IF (nt == zero) nt = one
129
130
131
132
133
134
135
136
137
138 ifails = 0
139 ifaile = 0
140 IF (maxdn < infinity .OR. maxdt < infinity) ifails = ifail + 1
141 IF (maxei < infinity) ifaile = ifaile + 1
142 IF (maxen < infinity .OR. maxet < infinity) ifaile = ifaile + 2
143
144 IF (unit_id > 0) THEN
145 unit_t = unitab%FAC_T(unit_id)
146 ELSE
147 unit_t = one
148 ENDIF
149 ascale = one / unit_t
150
151 fail%KEYWORD = 'CONNECT'
152 fail%IRUPT = irupt
153 fail%FAIL_ID = fail_id
154 fail%NUPARAM = 19
155 fail%NIPARAM = 0
156 fail%NUVAR = 8
157 fail%NFUNC = 2
158 fail%NTABLE = 0
159 fail%NMOD = 7
160
161 ALLOCATE (fail%UPARAM(fail%NUPARAM))
162 ALLOCATE (fail%IPARAM(fail%NIPARAM))
163 ALLOCATE (fail%IFUNC (fail%NFUNC))
164 ALLOCATE (fail%TABLE (fail%NTABLE))
165
166
167 fail_tag%LF_DAMMX = fail_tag%LF_DAMMX + fail%NMOD
168 ALLOCATE (fail%MODE(fail%NMOD))
169 fail%MODE(1) = "Normal direction displ. damage"
170 fail%MODE(2) = "Shear plane displ. damage"
171 fail%MODE(3) = "Displacement based damage"
172 fail%MODE(4) = "Normal direction ener. damage"
173 fail%MODE(5) = "Shear plane ener. damage"
174 fail%MODE(6) = "Total energy damage"
175 fail%MODE(7) = "Energy based damage"
176
177 fail%UPARAM(1) = maxdn
178 fail%UPARAM(2) = maxdt
179 fail%UPARAM(3) = expn
180 fail%UPARAM(4) = expt
181 fail%UPARAM(5) = facn
182 fail%UPARAM(6) = fact
183 fail%UPARAM(7) = ascale
184 fail%UPARAM(8) = ifails
185 fail%UPARAM(9) = ifaile
186 fail%UPARAM(10) = nfail
187 fail%UPARAM(11) = maxei
188 fail%UPARAM(12) = maxen
189 fail%UPARAM(13) = maxet
190 fail%UPARAM(14) = nn
191 fail%UPARAM(15) = nt
192 fail%UPARAM(16) = dtime
193 fail%UPARAM(17) = dsoft
194 fail%UPARAM(18) = isym
195 fail%UPARAM(19) = areascale
196
197 fail%IFUNC(1) = ifunn
198 fail%IFUNC(2) = ifunt
199
200 IF (is_encrypted) THEN
201 WRITE(iout, 1000)
202 ELSE
203 WRITE(iout, 1100) maxdn,maxdt,expn,expt,ifail,isolid,isym,
204 . ifunn,ifunt,facn,fact,
205 . maxei,maxen,maxet,nn,nt,dtime,dsoft,areascale
206 ENDIF
207
208 RETURN
209 1000 FORMAT(
210 & 5x,' CRYPTED DATA IN FAILURE MODEL '/,
211 & 5x,' ----------------------------- '/)
212 1100 FORMAT(
213 & 5x,' SOLID CONNECTION RUPTURE MODEL ',/
214 & 5x,' ------------------------------ ',/
215 & 5x,'Max deformation in normal direction . . . . . . . =',e16.9/
216 & 5x,'Max deformation in tangent direction . . . . . . . =',e16.9/
217 & 5x,'Deformation exponent in normal direction . . . . . =',e16.9/
218 & 5x,'Deformation exponent in tangent direction. . . . . =',e16.9/
219 & 5x,'Multi-directional rupture flag . . =',i10/
220 & 5x,'Integration point rupture flag . . =',i10/
221 & 5x,'Rupture deactivation flag in compression . . =',i10/
222 & 5x,'Strain rate scale function in normal direction . . =',i10/
223 & 5x,'Strain rate scale function in tangent direction. . =',i10/
224 & 5x,'Function scale factor in normal direction . . . . =',e16.9/
225 & 5x,'Function scale factor in tangent direction . . . . =',e16.9/
226 & 5x,'Maximum total internal energy . . . . . . . . . =',e16.9/
227 & 5x,'Maximum energy in normal direction . . . . . =',e16.9/
228 & 5x,'Maximum energy in tangent direction . . . . . =',e16.9/
229 & 5x,'Energy exponent in normal direction . . . . . =',e16.9/
230 & 5x,'Energy exponent in tangent direction . . . . . =',e16.9/
231 & 5x,'Damage duration parameter . . . . . . . . . . =',e16.9/
232 & 5x,'Damage softening parameter . . . . . . . . . . =',e16.9/
233 & 5x,'Element deformation parameter . . . . . . . . . . =',e16.9/)
234
235 RETURN
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)