42
43
44
48 USE matparam_def_mod
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "units_c.inc"
69#include "param_c.inc"
70
71
72
73 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
74 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM
75 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
76 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
77 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,IMATVIS
78 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
79 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
80 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
81 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
82
83
84
85 INTEGER :: J,NORDER,NVISC,FLAG_VISC,IVISC,ILAW,ITAG,
86 . FLAG_RIGIDITY
87 my_real :: rho0,rhor,gammainf,nug,sum,gs,p,viscmax,bulk
88 my_real,
DIMENSION(100) :: mu,al,gama,taux,nu,beta
89 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
90
91 is_encrypted = .false.
92 is_available = .false.
93 ilaw = 62
94
95
96
97
98
100
101
102
103
104 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
106
107 CALL hm_get_floatv(
'MAT_NU' ,nug ,is_available, lsubmodel, unitab)
108 CALL hm_get_intv (
'ORDER' ,norder ,is_available,lsubmodel)
109 CALL hm_get_intv (
'Order2' ,nvisc ,is_available,lsubmodel)
110 CALL hm_get_floatv(
'MU' ,viscmax ,is_available, lsubmodel, unitab)
111 CALL hm_get_intv (
'Vflag' ,flag_visc ,is_available,lsubmodel)
112 CALL hm_get_intv (
'Rflag' ,flag_rigidity ,is_available,lsubmodel)
113
114 IF (norder > 0) THEN
115 DO j=1,norder
117 ENDDO
118 DO j=1,norder
120 ENDDO
121 ELSE
123 . msgtype=msgerror,
124 . anmode=aninfo_blind_1,
125 . i1=mat_id,
126 . c1=titr)
127 ENDIF
128
129 IF (nvisc > 0) THEN
130 DO j=1,nvisc
132 ENDDO
133 DO j=1,nvisc
135 ENDDO
136 ENDIF
137 itag = 0
138 IF (norder > 0) THEN
139 DO j=1,norder
141 IF(nu(j) /= zero) itag = 1
142 IF (nu(j) >= half) nu(j) = zep499
143 ENDDO
144 ENDIF
145
146
147
148 IF (rhor == zero) rhor = rho0
149
150 DO j=1,norder
151 IF (al(j) == zero) al(j) = one
152 ENDDO
153
154 gammainf = one
155 sum = zero
156 IF (nvisc > 0) THEN
157 DO j=1,nvisc
158 IF (taux(j) <= zero) taux(j) = ep20
159 IF (gama(j) > one .OR. gama(j) < zero) THEN
161 . msgtype=msgerror,
162 . anmode=aninfo_blind_1,
163 . i1=mat_id,
164 . c1=titr,
165 . r1=gama(j))
166 ENDIF
167 sum = sum + gama(j)
168 ENDDO
169 gammainf = one - sum
170 IF(gammainf <= zero ) THEN
172 . msgtype=msgerror,
173 . anmode=aninfo_blind_1,
174 . i1=mat_id,
175 . c1=titr,
176 . r1=gammainf)
177 ENDIF
178 ENDIF
179 IF (nug >= half) nug = zep499
180 IF (viscmax == zero) viscmax=ep20
181
182 IF(nvisc > 0 .AND. flag_rigidity == 2)THEN
183 DO j=1,norder
184 mu(j)= mu(j)/ gammainf
185 ENDDO
186 ENDIF
187
188 gs = zero
189 DO j=1,norder
190 gs = gs + mu(j)
191 ENDDO
192 IF (gs < zero) THEN
194 . msgtype=msgerror,
195 . anmode=aninfo,
196 . i1=mat_id,
197 . c1=titr)
198 ENDIF
199 IF(itag == 1) THEN
200 bulk = zero
201 DO j=1,norder
202 beta(j) = nu(j)/(one - two*nu(j))
203 bulk = bulk + two*mu(j)*(third + beta(j))
204 ENDDO
205 nug = half*(three*bulk - two*gs)/(three*bulk+ gs)
206 ELSE
207 beta(1:norder) = nug/(one - two*nug)
208 bulk = two_third*gs*(one + nug)/
max(em20,(one - two*nug))
209 ENDIF
210
211 IF (nvisc > 0) THEN
212 ivisc = 1
213 IF (flag_visc == 1) ivisc = 2
214 ELSE
215 ivisc = 0
216 ENDIF
217 flag_visc =
min(flag_visc, 2)
218
219 uparam(1) = nug
220 uparam(2) = norder
221 uparam(3) = nvisc
222 uparam(4) = gammainf
223 uparam(5) = bulk
224 uparam(6) = viscmax
225 DO j=1,norder
226 uparam(6 + j ) = mu(j)
227 uparam(6 + norder + j) = al(j)
228 ENDDO
229 IF (nvisc > 0) THEN
230 DO j= 1,nvisc
231 uparam(6 + norder*2 + j) = gama(j)
232 uparam(6 + norder*2 + nvisc + j) = taux(j)
233 ENDDO
234 ENDIF
235 nuparam = 6 + 2*norder + 2*nvisc + 1
236 uparam(nuparam) = ivisc
237
238 DO j=1,norder
239 uparam(nuparam + j ) = beta(j)
240 ENDDO
241 nuparam = nuparam + norder
242
243 gs = gs*two
244 parmat(1) = bulk
245 parmat(2) = gs*(one + nug)
246 parmat(3) = nug
247 parmat(16) = 2
248 parmat(17) = gs/(bulk + two_third*gs)
249
250 pm(1) = rhor
251 pm(89) = rho0
252
253 nfunc = 0
254 nuvar = 6 + 6*nvisc
255
256
257
258
259 IF (nvisc > 0) THEN
260 imatvis = 3
261 ELSE
262 imatvis = 1
263 ENDIF
264
266 IF (nug > 0.49) THEN
268 ELSE
270 END IF
272
275
276 WRITE(iout,1100) trim(titr),mat_id,62
277 WRITE(iout,1000)
278 IF(ivisc > 0 ) THEN
279 SELECT CASE (flag_rigidity)
280 CASE (0,1)
281 flag_rigidity = 1
282 WRITE(iout,1010)flag_rigidity
283 CASE (2)
284 WRITE(iout,1020)flag_rigidity
285 END SELECT
286 ENDIF
287 IF (is_encrypted) THEN
288 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
289 ELSE
290 WRITE(iout,1200) rho0
291
292 WRITE(iout,1300) nug,gs*half,viscmax,norder
293 WRITE(iout,1400) (mu(j),al(j),nu(j),j=1,norder)
294 IF (ivisc > 0) THEN
295 WRITE(iout,1500) nvisc
296 IF (nvisc /= zero) WRITE(iout,1600)(gama(j),taux(j),j=1,nvisc)
297 WRITE(iout,1700) flag_visc
298 ENDIF
299 ENDIF
300
301 RETURN
302
303 1000 FORMAT
304 & (5x,'MATERIAL MODEL : VISCO HYPERELASTIC',/,
305 & 5x,'-----------------------------------',/)
306 1100 FORMAT(/
307 & 5x,a,/,
308 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
309 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
310 1200 FORMAT(
311 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
312 1300 FORMAT
313 &(5x,'EQUIVALENT POISSON RATIO . . . . . . .=',e12.4/
314 &,5x,'INITIAL SHEAR MODULUS . . . . . . . . .=',e12.4/
315 & 5x,'MAXIMUM VISCOSITY. . . . .. . . . . . .=',e12.4//
316 &,5x,'ORDER OF STRAIN ENERGY. . . . . . . . .=',i8)
317 1400 FORMAT(
318 & 7x,'MATERIAL PARAMETER (MU). . . . . . . . =',e12.4/
319 & 7x,'MATERIAL PARAMETER (ALPHA) . . . . . . =',e12.4/
320 & 7x,'MATERIAL PARAMETER (NU) . . . . . . . =',e12.4/)
321 1500 FORMAT(//
322 & 5x,'ORDER OF MAXWELL MODEL . . . . . . . . =',i8 )
323 1600 FORMAT(
324 & 7x,'STIFFNESS RATIO. . . . . . . . . . .. .=',e12.4/
325 & 7x,'RELAXATION TIME . . . . . . . . . . . =',e12.4)
326 1700 FORMAT(/
327 & 5x,'VISCOUS STRESS FORMULATION . . . . . . =',i8 /
328 &10x,' 0 : VISCOUS STRESS IS DEVIATORIC ' , /
329 &10x,' 1 : VISCOUS STRESS IS SPHERICAL AND DEVIATORIC' )
330 1010 FORMAT(/
331 & 5x,'LONG-TERM RIGIDITY FLAG . . . . . =',i8 /
332 & 5x,'INITIAL ELASTIC MODULUS IS THE INSTANTANEOUS RIGIDITY ' , / )
333 1020 FORMAT(/
334 & 5x,'LONG-TERM RIGIDITY FLAG . . . . . =',i8 /
335 & 5x,' INITIAL ELASTIC MODULUS IS THE LONG-TERM RIGIDITY. ',/
336 & 5x,' THE MU VALUE ARE UPDATED ' , / )
337
338 RETURN
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
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)
subroutine init_mat_keyword(matparam, keyword)
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)