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) :: IRUPT
65 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB
66 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
67 TYPE(FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
68
69
70
71 INTEGER :: NUM,DEN,ORDI,COMP_DIR,IDEL,NUPARAM,NUVAR,NFUNC
72 INTEGER ,PARAMETER :: NSIZE = 2
73 INTEGER ,DIMENSION(NSIZE) :: IFUNC
74 my_real :: vol_strain,max_comp_strain,ratio,el_ref,el_ref_unit
75 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
76
77
78
79 is_encrypted = .false.
80 is_available = .false.
81
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 CALL hm_get_intv (
'Fct_Ratio' ,ifunc(1) ,is_available,lsubmodel)
121 CALL hm_get_intv (
'NUM' ,num ,is_available,lsubmodel)
122 CALL hm_get_intv (
'DEN' ,den ,is_available,lsubmodel)
123 CALL hm_get_intv (
'ORDI' ,ordi ,is_available,lsubmodel)
124 IF (ordi == 0) ordi = 1
125 CALL hm_get_floatv (
'Vol_strain' ,vol_strain ,is_available,lsubmodel,unitab)
126 CALL hm_get_intv (
'Fct_Elsize' ,ifunc(2) ,is_available,lsubmodel)
127 CALL hm_get_floatv (
'EL_REF' ,el_ref ,is_available,lsubmodel,unitab)
128 IF ((el_ref == zero).AND.(ifunc(2) > 0)) THEN
130 el_ref = one*el_ref_unit
131 ENDIF
132
133
134
135 CALL hm_get_intv (
'Comp_dir' ,comp_dir ,is_available,lsubmodel)
136 CALL hm_get_intv (
'IDEL' ,idel ,is_available,lsubmodel)
137 CALL hm_get_floatv (
'Max_Comp_Strain',max_comp_strain ,is_available,lsubmodel,unitab)
138 IF (max_comp_strain == zero) max_comp_strain = infinity
139 CALL hm_get_floatv (
'Ratio' ,ratio ,is_available,lsubmodel,unitab)
140 IF (ratio == zero) ratio = one
141
142
143
144 nuparam = 9
145 IF (ifunc(2) > 0) THEN
146 nfunc = 2
147 nuvar = 1
148 ELSE
149 nfunc = 1
150 nuvar = 0
151 ENDIF
152
153
154
155 fail%KEYWORD = 'SAHRAEI'
156 fail%IRUPT = irupt
157 fail%FAIL_ID = fail_id
158 fail%NUPARAM = nuparam
159 fail%NIPARAM = 0
160 fail%NUVAR = nuvar
161 fail%NFUNC = nfunc
162 fail%NTABLE = 0
163 fail%NMOD = 0
164
165 ALLOCATE (fail%UPARAM(fail%NUPARAM))
166 ALLOCATE (fail%IPARAM(fail%NIPARAM))
167 ALLOCATE (fail%IFUNC (fail%NFUNC))
168 ALLOCATE (fail%TABLE (fail%NTABLE))
169
170 fail%IFUNC(1:nfunc) = ifunc(1:nfunc)
171
172 fail%UPARAM(1) = vol_strain
173 fail%UPARAM(2) = num
174 fail%UPARAM(3) = den
175 fail%UPARAM(4) = ordi
176 IF (comp_dir == zero) THEN
177 fail%UPARAM(5) = zero
178 ELSE
179 fail%UPARAM(5) = comp_dir
180 ENDIF
181 fail%UPARAM(6) = max_comp_strain
182 fail%UPARAM(7) = ratio
183 fail%UPARAM(8) = idel
184 fail%UPARAM(9) = el_ref
185
186
187
188 IF (is_encrypted) THEN
189 WRITE (iout,'(5X,A,//)') 'CONFIDENTIAL DATA'
190 ELSE
191 WRITE (iout, 1000) ifunc(1),vol_strain
192 WRITE (iout, 2000) num,den,ordi
193 IF (ifunc(2) > 0) THEN
194 WRITE (iout, 3000) ifunc(2),el_ref
195 ENDIF
196 IF (comp_dir /= zero) THEN
197 WRITE (iout, 4000) comp_dir, idel, max_comp_strain,
198 ENDIF
199 ENDIF
200
201
202
203 1000 FORMAT(
204 & 5x,' SAHRAEI LOCAL ELECTRIC BATTERY FAILURE ',/,
205 & 5x,' -------------------------------------- ',/,
206 & 5x,'STRAIN RATIO FUNCTION ID . . . . . . . . . . . . .=',i10/,
207 & 5x,'VOLUMETRIC STRAIN LIMIT. . . . . . . . . . . . . .=',1pg20.13/)
208 2000 FORMAT(
209 & 5x,'NUMERATOR FLAG FOR STRAIN RATIO. . . . . . . . . .=',i10/,
210 & 5x,'DENOMINATOR FLAG FOR STRAIN RATIO. . . . . . . . .=',i10/,
211 & 5x,'FAILURE ORDINATE FOR FAILURE LIMIT . . . . . . . .=',i10/)
212 3000 FORMAT(
213 & 5x,'ELEMENT SIZE REGULARIZATION FUNCTION ID. . . . . .=',i10/,
214 & 5x,'ELEMENT REFERENCE SIZE . . . . . . . . . . . . . .=',1pg20.13/)
215 4000 FORMAT(
216 & 5x,'NORMAL IN-PLANE COMPRESSION DIRECTION. . . . . . .=',i10/,
217 & 5x,'FLAG FOR ELEMENT DELETION IN COMPRESSION . . . . .=',i10/,
218 & 5x,'IN-PLANE COMPRESSION FAILURE STRAIN . . . . . . .=',1pg20.13/,
219 & 5x,'RATIO FOR IN-PLANE 2ND DIRECTION FAILURE STRAIN . =',1pg20.13/)
220
221 RETURN
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)