42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
65 USE matparam_def_mod
67
68
69
70#include "implicit_f.inc"
71
72
73
74#include "units_c.inc"
75#include "param_c.inc"
76
77
78
79 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
80 my_real,
INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
81 INTEGER, INTENT(INOUT) :: IPM(NPROPMI),ISRATE,IFUNC(MAXFUNC),NFUNC
82TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
83 INTEGER,INTENT(IN) :: MAT_ID
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
86 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
87
88
89
90 INTEGER ID,ITEST,IDAM
92 . e,nu,g,mu,lam,d,rbulk,scalefac,c(5),
93 . a1,a2,a3,a4,nu0 ,fac_unit
94 CHARACTER(LEN=NCHARFIELD) :: STRING
96 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
97
98
99
100 is_encrypted = .false.
101 is_available = .false.
102 idam = 0
103 israte = 0
104 imatvis = 1
105 nuvar = 0
106
108
109 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
110
111 CALL hm_get_floatv(
'MAT_MUE1' ,mu ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_D' ,d ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_Lamda' ,lam ,is_available, lsubmodel, unitab)
114
115 CALL hm_get_intv (
'Itype' ,itest ,is_available, lsubmodel)
116 CALL hm_get_intv (
'MAT_FCT_IDI' ,ifunc(1) ,is_available, lsubmodel)
117 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'MAT_FScale' ,scalefac ,is_available, lsubmodel, unitab)
119 IF(scalefac == zero)THEN
121 scalefac = one * fac_unit
122 ENDIF
123
124
125 rhor=zero
126
127 pm(1) =rhor
128 pm(89)=rho0
129
130
131 IF(itest == 0) itest = 1
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149 c(1) = half
150 c(2) = one/twenty
151 c(3) = eleven/1050.d00
152 c(4) = 19.d00/7000.d00
153 c(5) = 519.d00/673750.d00
154
155 IF(lam == zero) lam = seven
156 a1 = one/lam**2
157 a2 = a1**2
158 a3 = a1*a2
159 a4 = a2**2
160 g= mu*(one + three*a1/five + eighty19*a2/175.d00
161 . + 513.d00*a3/875.d00 + 42039.d00*a4/67375.d00)
162
163 nfunc= 0
164 rbulk = zero
165 IF(ifunc(1) /= 0) THEN
166 nfunc = 1
167 IF (nu == zero) nu= 0.495
168 ELSEIF(d == zero) THEN
169 nu = 0.495
170 rbulk = two_third*(one + nu)*g/(one - two*nu)
171 d = two/rbulk
172 ELSE
173 rbulk = two/d
174 ENDIF
175
176
177
178 e = nine*rbulk*g/
max(em20,(three*rbulk + g))
179 IF(ifunc(1) == 0 ) nu = (three*rbulk -two*g)/(three*rbulk + g)/two
180
181 uparam(1) = mu
182 uparam(2) = d
183 uparam(3) = lam
184 uparam(4) = g
185 uparam(5) = rbulk
186 uparam(6) = c(1)
187 uparam(7) = c(2)
188 uparam(8) = c(3)
189 uparam(9) = c(4)
190 uparam(10) = c(5)
191 uparam(11) = nu
192 uparam(12) = itest
193 uparam(14) = scalefac
194
195 nuparam = 14
196 IF(nuparam > maxuparam)THEN
197 WRITE(iout,*)' ** ERROR : NUPARAM GT MAXUPARAM'
198 WRITE(iout,*)' NUPARAM =',nuparam,
199 . ' maxuparam =',MAXUPARAM
200 ENDIF
201!
202 PARMAT(1) = RBULK
203 PARMAT(2) = E
204 PARMAT(3) = NU
205
206 MTAG%L_EPSA = 1 ! hyperelastic energy needed for mullins
207 IMATVIS = 1
208 PM(100) = RBULK
209
210 CALL INIT_MAT_KEYWORD(MATPARAM,"INCOMPRESSIBLE")
211 CALL INIT_MAT_KEYWORD(MATPARAM,"TOTAL")
212 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
213 ! Properties compatibility
214 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
215
216 !========== OUTPUT =============!
217 WRITE(IOUT,1001) TRIM(TITR),MAT_ID,92
218 WRITE(IOUT,1000)
219 IF(IS_ENCRYPTED)THEN
220 WRITE(IOUT,'(5x,a,//)')'confidential data'
221 ELSE
222 WRITE(IOUT,1002) RHO0
223 IF(IFUNC(1) > 0) THEN
224 IF(ITEST == 1) THEN
225 WRITE(IOUT,1200)IFUNC(1),SCALEFAC, NU
226 ELSEIF(ITEST == 2) THEN
227 WRITE(IOUT,1300)IFUNC(1),SCALEFAC, NU
228 ELSEIF(ITEST == 3) THEN
229 WRITE(IOUT,1400)IFUNC(1),SCALEFAC, NU
230 ENDIF
231 ELSE
232 WRITE(IOUT,1100)MU,D,LAM, NU
233 ENDIF
234 ENDIF
235
236
237 1000 FORMAT(
238 & 5X,' arruda-boyce law ',/,
239 & 5x,' ---------------- ',/)
240 1001 FORMAT(
241 & 5x,a,/,
242 & 5x,'MATERIAL NUMBER . . . . . . . . . . . . =',i10/,
243 & 5x,'MATERIAL LAW. . . . . . . . . . . . . . =',i10/)
244 1002 FORMAT(
245 & 5x,'INITIAL DENSITY . . . . . . . . . . . . =',1pg20.13/)
246 1100 FORMAT(
247 & 5x,'MU . . . . . . . . . . . . . . . . . . .=',1pg20.13/
248 & 5x,'D. . . . . . . . . . . . . . . . . . . .=',1pg20.13/
249 & 5x,'LAM. . . . . . . . . . . . . . . . . . .=',1pg20.13/
250 & 5x,'POISSON RATIO. . . . . . . . . . . . . .=',e12.4//)
251 1200 FORMAT(
252 & 5x,'UNIAXIAL DATA TEST CURVE . . . . . . .=',i10/
253 & 5x,'SCALE FACTOR FOR STRESS IN FUNCTION. . .=',1pg20.13/
254 & 5x,'POISSON RATIO. . . . . . . . . . . . . .=',e12.4///)
255 1300 FORMAT(
256 & 5x,'EQUIBIAXIAL DATA TEST CURVE. . . . . . .=',i10/
257 & 5x,'SCALE FACTOR FOR STRESS IN FUNCTION. . .=',1pg20.13/
258 & 5x,'POISSON RATIO. . . . . . . . . . . . . .=',e12.4///)
259 1400 FORMAT(
260 & 5x,'PLANAR DATA TEST CURVE . . . . . . . .=',i10/
261 & 5x,'SCALE FACTOR FOR STRESS IN FUNCTION. . .=',1pg20.13/
262 & 5x,'POISSON RATIO. . . . . . . . . . . . . .=',e12.4///)
263
264
265
266 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)
integer, parameter nchartitle
integer, parameter ncharfield