42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
65 USE matparam_def_mod
68
69
70
71#include "implicit_f.inc"
72
73
74
75#include "units_c.inc"
76#include "param_c.inc"
77
78
79
80 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
81 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
82 my_real,
DIMENSION(100) ,
INTENT(INOUT) :: parmat
83 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
84
85 INTEGER, INTENT(INOUT) :: MFUNC,NUPARAM,NUVAR,IMATVIS
86 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
87 INTEGER,INTENT(IN) :: ID,MAXFUNC,MAXUPARAM
88 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
89 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
90 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
91
92
93
94 INTEGER :: NBMAT, MAT_ID
95 INTEGER :: I,J,NRATE,NPS,OPTE,IFUNCE,ILAW,NFUNC,IFORM
96 my_real :: rho0, rhor,e,nu,g,mu,rbulk, c1,
97 . c10,c01,c20,c11,c02 ,tauref_unit,
98 . c30, c21,c12,c03,sb,d1,d2,d3,a,expc,expm,ksi,tauref
99 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
100
101
102
103 is_encrypted = .false.
104 is_available = .false.
105
106
107
109
110 imatvis = 1
111 ilaw = 95
112 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'Refer_Rho',rhor ,is_available, lsubmodel, unitab)
114
115
116
117
118
119 c10 = zero
120 c01 = zero
121 c20 = zero
122 c11 = zero
123 c02 = zero
124 c30 = zero
125 c21 = zero
126 c12 = zero
127 c03 = zero
128 d1 = zero
129 d2 = zero
130 d3 = zero
131 nu = zero
132 tauref = zero
133 a = zero
134 iform = 0
135
136 CALL hm_get_floatv(
'MAT_C_10' ,c10 ,is_available, lsubmodel, unitab)
137 CALL hm_get_floatv(
'MAT_C_01' ,c01 ,is_available, lsubmodel, unitab)
138 CALL hm_get_floatv(
'MAT_C_20' ,c20 ,is_available, lsubmodel, unitab)
139 CALL hm_get_floatv(
'MAT_C_11' ,c11 ,is_available, lsubmodel, unitab)
140 CALL hm_get_floatv(
'MAT_C_02' ,c02 ,is_available, lsubmodel, unitab)
141
142 CALL hm_get_floatv(
'MAT_C_30' ,c30 ,is_available, lsubmodel, unitab)
143 CALL hm_get_floatv(
'MAT_C_21' ,c21 ,is_available, lsubmodel, unitab)
144 CALL hm_get_floatv(
'MAT_C_12' ,c12 ,is_available, lsubmodel, unitab)
145 CALL hm_get_floatv(
'MAT_C_03' ,c03 ,is_available, lsubmodel, unitab)
146 CALL hm_get_floatv(
'MAT_Sb' ,sb ,is_available, lsubmodel, unitab)
147
148
149 CALL hm_get_floatv(
'MAT_D_1' ,d1 ,is_available, lsubmodel, unitab)
150 CALL hm_get_floatv(
'MAT_D_2' ,d2 ,is_available, lsubmodel, unitab)
151 CALL hm_get_floatv(
'MAT_D_3' ,d3 ,is_available, lsubmodel, unitab)
152 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
153 CALL hm_get_intv (
'IFORM' ,iform ,is_available,lsubmodel)
154
155
156 CALL hm_get_floatv(
'MLAW95_A' ,a ,is_available, lsubmodel, unitab)
157 CALL hm_get_floatv(
'MLAW95_C' ,expc ,is_available, lsubmodel, unitab)
158 CALL hm_get_floatv(
'MLAW95_M' ,expm ,is_available, lsubmodel, unitab)
160 CALL hm_get_floatv(
'MAT_TAU_REF' ,tauref ,is_available, lsubmodel, unitab)
161
162
163
164 nuvar = 10
165 nuparam = 23
166
167 IF(d2 /= zero ) d2 = one/d2
168 IF(d3 /= zero ) d3 = one/d3
169 IF(iform== 0 )iform = 1
170
171 IF(tauref == zero) THEN
172 CALL hm_get_floatv_dim(
'MAT_TAU_REF' ,tauref_unit ,is_available, lsubmodel, unitab)
173 tauref = one * tauref_unit
174 ENDIF
175
176
177 g = two * (c10 + c01) *(sb + one)
178 IF(d1 /= zero) THEN
179 d1 = one/d1
180 rbulk= two*d1 *(one+sb)
181 nu = (three*rbulk -two*g)/(three*rbulk + g)/two
182 e = nine*rbulk*g/(three*rbulk + g)
183 ELSEIF(nu /=zero)THEN
184 d2 = zero
185 d3 = zero
186 e = two*g*(one + nu)
187 rbulk = two_third*g*(one + nu)/(one-two*nu)
188 d1 = rbulk / two
189 ELSE
190 d2 = zero
191 d3 = zero
192 nu= 0.495
193 rbulk = two_third*g*(one + nu)/(one-two*nu)
194 d1 = rbulk / two
195 e = two*g*(one + nu)
196 ENDIF
197
198 uparam(19) = g
199 uparam(20) = rbulk
200
201 IF(expm == zero)expm = one
202 IF(expc == zero)expc = -0.700000000
203 IF(ksi == zero)ksi = em02
204
205 uparam(1) = c10
206 uparam(2) = c01
207 uparam(3) = c20
208 uparam(4) = c11
209 uparam(5) = c02
210 uparam(6) = c30
211 uparam(7) = c21
212 uparam(8) = c12
213 uparam(9) = c03
214 uparam(11) = d1
215 uparam(12) = d2
216 uparam(13) = d3
217 uparam(14) = sb
218 uparam(15) = a
219 uparam(16) = expc
220 uparam(17) = expm
221 uparam(18) = ksi
222 uparam(22) = tauref
223 uparam(23) = iform
224
225
226
227
228 IF (rhor == zero) rhor=rho0
229 pm(1) = rhor
230 pm(89)= rho0
231 parmat(1) = rbulk
232 parmat(2) = e
233 parmat(3) = nu
234
235 pm(100) = rbulk
236
240
242
243 WRITE(iout,1001) trim(titr),
id,95
244 WRITE(iout,1000)
245 IF (is_encrypted)THEN
246 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
247 ELSE
248 WRITE(iout,1002)rho0
249 WRITE(iout,1100)c10,c01,c20,c11,c02,
250 . c30, c21,c12,c03,d1,d2,d3 ,nu,iform
251 WRITE(iout,1300)a,expc,expm,ksi ,sb ,tauref
252 WRITE(iout,1200)g,rbulk, nu
253 ENDIF
254
255 1000 FORMAT(
256 & 5x,' BERGSTROM BOYCE MATERIAL : ',/,
257 & 5x,' -------------------------- ',/)
258 1001 FORMAT(/
259 & 5x,a,/,
260 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . =',i10/,
261 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . =',i10/)
262 1002 FORMAT(
263 & 5x,'INITIAL DENSITY . . . . . . . . . . . . .=',1pg20.13/)
264 1100 FORMAT(
265 & 5x,'c10 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
266 & 5X,'c01 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
267 & 5X,'c20 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
268 & 5X,'c11 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
269 & 5X,'c02 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
270 & 5X,'c30 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
271 & 5X,'c21 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
272 & 5X,'c12 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
273 & 5X,'c03 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
274 & 5X,'1/d1 . . . . . . . . . . . . . . . . . .=',1PG20.13/
275 & 5X,'1/d2 . . . . . . . . . . . . . . . . . .=',1PG20.13/
276 & 5X,'1/d3 . . . . . . . . . . . . . . . . . .=',1PG20.13/
277 & 5X,'poisson coefficient . . . . . . . . . . .=',1PG20.13//
278 & 5X,'incompressibility formulation flag iform. . . =',I2/,
279 & 5X,' iform = 1: standard strain energy density (default)',/,
280 & 5X,' iform = 2: modified strain energy density ',/)
281 1300 FORMAT(
282 & 5X,'parameters
for the effective creep strain rate:
',/,
283 & 5X,'a. . . . . . . . . . . . . . . . . . . . =',1PG20.13/
284 & 5X,'exponent c . . . . . . . . . . . . . . . =',1PG20.13/
285 & 5X,'exponent m . . . . . . . . . . . . . . . =',1PG20.13/
286 & 5X,'xi . . . . . . . . . . . . . . . . . . . =',1PG20.13//
287 & 5X,'factor s of chain b. . . . . . . . . . . =',1PG20.13/
288 & 5X,'reference stress
for chain b . . . . . . =
',1PG20.13)
289 1200 FORMAT(
290 & 5X,'initial shear modulus . . . . . . . . . =',1PG20.13/
291 & 5X,'initial bulk modulus. . . . . . . . . . =',1PG20.13/
292 & 5X,'poisson ratio. . . . . . . . . . . . . . =',1PG20.13//)
293
294 RETURN
end diagonal values have been computed in the(sparse) matrix id.SOL
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 init_mat_keyword(matparam, keyword)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle