40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
63 USE matparam_def_mod
65
66
67
68#include "implicit_f.inc"
69
70
71
72#include "units_c.inc"
73#include "param_c.inc"
74
75
76
77 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
78 my_real,
INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
79 INTEGER, INTENT(INOUT) :: IPM(NPROPMI),ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM
80TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
81 INTEGER,INTENT(IN) :: MAT_ID
82 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
83 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
84 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
85
86
87
88 INTEGER ID,IDAM,ILAW
89 my_real e,nu,g,mu,rbulk,c10,c20,c30,d1,d2,d3
90 CHARACTER(LEN=NCHARFIELD) :: STRING
92 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
93
94
95
96 is_encrypted = .false.
97 is_available = .false.
98 idam = 0
99 israte = 0
100 imatvis = 1
101 nuvar = 0
102 ilaw = 94
103
105
106 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
107
108
109
110
111
112
113 CALL hm_get_floatv(
'LAW94_C01' ,c10 ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv(
'LAW94_C02' ,c20 ,is_available, lsubmodel, unitab
115 CALL hm_get_floatv(
'LAW94_C03' ,c30 ,is_available, lsubmodel, unitab)
116
117 CALL hm_get_floatv(
'LAW94_D1' ,d1 ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'LAW94_D2' ,d2 ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'LAW94_D3' ,d3 ,is_available, lsubmodel, unitab)
120
121 rhor=zero
122
123 pm(1) =rhor
124 pm(89)=rho0
125
126
127
128
129
130
131
132
133
134
135
136
137 g = zero
138 rbulk = zero
139 e = zero
140
141 IF(d2 /= zero ) d2 = one/d2
142 IF(d3 /= zero ) d3 = one/d3
143
144 g = two*c10
145 IF(d1 == zero) THEN
146 d2 = zero
147 d3 = zero
148 nu = 0.495
149 rbulk = two_third*g*(one + nu)/(one-two*nu)
150 d1 = rbulk / two
151 e = two*g*(one + nu)
152 ELSE
153 d1 = one/d1
154 rbulk= two*d1
155 nu = (three*rbulk -two*g)/(three*rbulk + g)/two
156 e = nine*rbulk*g/(three*rbulk + g)
157 ENDIF
158
159 uparam(1) = g
160 uparam(2) = rbulk
161 uparam(3) = nu
162 uparam(4) = c10
163 uparam(5) = c20
164 uparam(6) = c30
165 uparam(7) = d1
166 uparam(8) = d2
167 uparam(9) = d3
168
169
170 nuparam = 9
171 IF(nuparam>maxuparam)THEN
172 WRITE(iout,*)' ** ERROR : NUPARAM GT MAXUPARAM'
173 WRITE(iout,*)' NUPARAM =',nuparam,
174 . ' MAXUPARAM =',maxuparam
175 ENDIF
176
177 parmat(1) = rbulk
178 parmat(2) = e
179 parmat(3) = nu
180
181
182 parmat(16) = 2
183 parmat(17) = two*g/(rbulk + four_over_3*g)
184
185 imatvis = 1
186 pm(100) = rbulk
187
191
193
194
195
196 WRITE(iout,1010) trim(titr),mat_id,94
197 WRITE(iout,1000)
198 IF(is_encrypted)THEN
199 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
200 ELSE
201 WRITE(iout,1020)rho0
202
203
204
205
206
207
208
209!
210
211
212 WRITE(iout,1100)c10,c20,c30,d1,d2,d3
213 WRITE(iout,1200)g,rbulk, nu
214
215 ENDIF
216
217 1000 FORMAT(
218 & 5x,' YEOH LAW ',/,
219 & 5x,' ---------- ',//)
220 1010 FORMAT(/
221 & 5x,a,/,
222 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . =',i10/,
223 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . =',i10/)
224 1020 FORMAT(
225 & 5x,'INITIAL DENSITY . . . . . . . . . . . . .=',1pg20.13/)
226 1100 FORMAT(
227 & 5x,'C10 . . . . . . . . . . . . . . . . . . .=',1pg20.13/
228 & 5x,'c20 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
229 & 5X,'c30 . . . . . . . . . . . . . . . . . . .=',1PG20.13/
230 & 5X,'1/d1 . . . . . . . . . . . . . . . . . .=',1PG20.13/
231 & 5X,'1/d2 . . . . . . . . . . . . . . . . . .=',1PG20.13/
232 & 5X,'1/d3 . . . . . . . . . . . . . . . . . .=',1PG20.13)
233 1200 FORMAT(
234 & 5X,'initial shear modulus . . . . . . . . . .=',1PG20.13/
235 & 5X,'bulk modulus. . . . . . . . . . . . . . .=',1PG20.13/
236 & 5X,'poisson ratio . . . . . . . . . . . . . .=',1PG20.13/)
237 1300 FORMAT(
238 & 5X,'uniaxial DATA test curve. . . . . . . . .=',I10/
239 & 5X,'poisson ratio . . . . . . . . . . . . . .=',1PG20.13///)
240 1310 FORMAT(
241 & 5X,'equibiaxial DATA test curve . . . . . . .=',I10/
242 & 5X,'poisson ratio . . . . . . . . . . . . . .=',1PG20.13///)
243 1320 FORMAT(
244 & 5X,'planar DATA test curve. . . . . . . . . .=',I10/
245 & 5X,'poisson ratio . . . . . . . . . . . . . .=',1PG20.13///)
246
247 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine init_mat_keyword(matparam, keyword)
integer, parameter nchartitle
integer, parameter ncharfield