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.AND. IF ((EL_REF == ZERO)(IFUNC(2) > 0)) THEN
129 CALL HM_GET_FLOATV_DIM('el_ref' ,EL_REF_UNIT,IS_AVAILABLE, LSUBMODEL, UNITAB)
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, RATIO
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_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
for(i8=*sizetab-1;i8 >=0;i8--)