47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
70 USE matparam_def_mod
73 USE format_mod , ONLY : fmw_5i
74
75
76
77#include "implicit_f.inc"
78
79
80
81#include "units_c.inc"
82#include "param_c.inc"
83
84
85
86 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
87 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
88 my_real,
DIMENSION(100) ,
INTENT(INOUT) :: parmat
89 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
90 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
91 INTEGER, INTENT(INOUT) :: NFUNC,NUPARAM,NUVAR,IMATVIS
92 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
93 INTEGER,INTENT(IN) :: MAT_ID,MAXFUNC,MAXUPARAM
94 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
95 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
96 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
97
98
99
100 INTEGER I,J,MFUNC,IFLAG,KSMSTR
101 INTEGER ITOTAL,IUNLOAD,IFN,NPCURVE,KCOMPAIR
102 INTEGER IFLOAD(5),IFUNLOAD(5)
103 INTEGER KDECAY,KRECOVER,IFL(5),IFUNL(5)
104
106 my_real :: beta,hyster,ratedamp,graddamp,theta
107 my_real :: p0,relaxp,maxpres,phi,gamma
108 my_real :: funload,runload,exponas,exponbs
110 my_real :: efinal,epsfin,lamda,viscosity,tolerance,pscale
111 my_real :: gama0,fac,fac_p,rho0,rhor, fscal_tab(5), eps_tab(5)
112 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
113
114
115
116
117 is_encrypted = .false.
118 is_available = .false.
119 iunload=0
120 nfunc=2
121 nuvar=31+1+1
122 gamma = seven_over_5
123 nuparam=33
124 uparam(1)=nuparam
125 imatvis=1
126
128
129 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
131
132 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'MAT_NU' ,vt ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_NUt' ,vc ,is_available, lsubmodel, unitab)
135 CALL hm_get_floatv(
'MAT_RV' ,rv ,is_available, lsubmodel, unitab)
136 CALL hm_get_intv (
'MAT_IFLAG' ,iflag ,is_available,lsubmodel)
137 CALL hm_get_intv (
'ITOTAL' ,itotal,is_available,lsubmodel)
138
139
140
141
142
143
144
145
146
147
148
149
150 CALL hm_get_floatv(
'MAT_RELX' ,beta ,is_available, lsubmodel, unitab)
151 CALL hm_get_floatv(
'MAT_HYST' ,hyster ,is_available, lsubmodel, unitab)
152 CALL hm_get_floatv(
'DAMP1' ,ratedamp ,is_available, lsubmodel, unitab)
153 CALL hm_get_intv (
'Gflag' ,krecover ,is_available,lsubmodel)
154 CALL hm_get_intv (
'Vflag' ,kdecay ,is_available,lsubmodel)
155 CALL hm_get_floatv(
'MAT_Theta' ,theta ,is_available, lsubmodel, unitab)
156
157
158
159
160
161
162
163
164
165 CALL hm_get_intv (
'MAT_Kair' ,kcompair ,is_available,lsubmodel)
166 CALL hm_get_intv (
'FUN_A4' ,npcurve ,is_available,lsubmodel)
167 CALL hm_get_floatv(
'MAT_PScale' ,pscale ,is_available, lsubmodel, unitab)
168
169
170
171
172
173
174 CALL hm_get_floatv(
'MAT_P0' ,p0 ,is_available, lsubmodel, unitab)
175 CALL hm_get_floatv(
'MAT_PR' ,relaxp ,is_available, lsubmodel, unitab)
176 CALL hm_get_floatv(
'MAT_PMAX' ,maxpres ,is_available, lsubmodel, unitab)
177 CALL hm_get_floatv(
'MAT_POROS',phi ,is_available, lsubmodel, unitab)
178
179
180
181
182
183
184
186 CALL hm_get_floatv(
'MAT_ALPHA6' ,funload ,is_available, lsubmodel, unitab)
187 CALL hm_get_floatv(
'MAT_EPSF2' ,runload ,is_available, lsubmodel, unitab)
188 CALL hm_get_floatv(
'MAT_EXP1' ,exponas ,is_available, lsubmodel, unitab)
189 CALL hm_get_floatv(
'MAT_EXP2' ,exponbs ,is_available, lsubmodel, unitab)
190
191 !* funload = unloading scale factor
192
193
194
195
196
197 CALL hm_get_intv (
'NFUNC' ,mfunc ,is_available,lsubmodel)
198 CALL hm_get_floatv(
'MAT_CUTOFF' ,tensioncut ,is_available,lsubmodel, unitab)
199 CALL hm_get_intv (
'MAT_Iinsta' ,ksmstr ,is_available,lsubmodel)
200
201
202
203
204
205
206 CALL hm_get_floatv(
'MAT_Efinal' ,efinal ,is_available, lsubmodel, unitab)
207 CALL hm_get_floatv(
'MAT_Epsfinal',epsfin ,is_available, lsubmodel, unitab)
208 CALL hm_get_floatv(
'MAT_Lamda' ,lamda ,is_available, lsubmodel, unitab)
209 CALL hm_get_floatv(
'MAT_MaxVisc' ,viscosity ,is_available, lsubmodel, unitab)
210 CALL hm_get_floatv(
'MAT_Tol' ,tolerance ,is_available, lsubmodel, unitab)
211
212
213
214
215
216
218
219
220
221 IF (rhor == zero) rhor=rho0
222 pm(1) = rhor
223 pm(89)= rho0
224
225
226 IF (pscale == zero) pscale = one
227
228 IF( vt <= zero) vt =em20
229 IF( vt >=half ) vt =zep499
230 IF( vc >=half ) vc =zep499
231 IF( itotal > 3 ) itotal = 0
232 IF( beta <= zero) beta =em20
233 IF( hyster <= zero) hyster =one
234 IF( ratedamp <= zero) ratedamp = half
235 IF( krecover <= 0 ) krecover =0
236 IF( krecover > 2 ) krecover =0
237 IF( kdecay <= 0 ) kdecay =0
238 IF( kdecay > 2 ) kdecay =0
239 IF( theta <= zero) theta =zep67
240 IF( relaxp <= zero) THEN
241 relaxp= em20
242 ENDIF
243 IF( maxpres <= zero) THEN
244 maxpres= infinity
245 ENDIF
246 IF( funload<=zero) funload = one
247 IF( exponas==zero) exponas = one
248 IF( exponbs==zero) exponbs = one
249 IF( mfunc>5 ) mfunc=5
250 IF( tensioncut<=zero) THEN
251 tensioncut =infinity
252 ENDIF
253 IF(epsfin<=zero.OR.epsfin>zero) epsfin=one
254 IF( lamda<=zero) lamda =one
255 IF( tolerance <=zero) tolerance = one
256 IF( viscosity<=zero) THEN
257 viscosity =infinity
258 ENDIF
259 IF (mfunc < 1) THEN
261 . msgtype=msgerror,
262 . anmode=aninfo_blind_1,
263 . i1=mat_id,
264 . c1=titr)
265 ENDIF
266
267 IF (efinal<=e) efinal = e
268
269
270 uparam(2)=e
271 uparam(3)=vt
272 uparam(4)=vc
273 uparam(5)=rv
274 uparam(6)=iflag
275 uparam(7)=itotal
276
277 uparam(8)=beta
278 uparam(9)=hyster
279 uparam(10)=ratedamp
280 uparam(11)=krecover
281 uparam(12)=kdecay
282 uparam(13)=theta
283
284 uparam(14)=kcompair
285 uparam(15)=p0
286 uparam(16)=gamma
287 uparam(17)=relaxp
288 uparam(18)=maxpres
289 uparam(19)=phi
290
291 uparam(20)=iunload
292 uparam(21)=funload
293 uparam(22)=0.
294 uparam(23)=exponas
295 uparam(24)=exponbs
296
297 uparam(25)=mfunc
298 uparam(26)=ksmstr
299 uparam(27)=tensioncut
300
301 uparam(28)=efinal
302 uparam(29)=epsfin
303 uparam(30)=lamda
304 uparam(31)=viscosity
305 uparam(32)=tolerance
306 uparam(33)=pscale
307
308
309
310
311 DO i=1,mfunc
316 ENDDO
317
318 DO i=1,mfunc
319 uparam(nuparam+ i) = fscal_tab(i)
320 uparam(nuparam+mfunc+i) = eps_tab(i)
321 ENDDO
322 DO i=1,mfunc
323 IF(uparam(nuparam+i)<=0.) uparam(nuparam
324 uparam(nuparam+i) = uparam(nuparam+i)
325 uparam(nuparam+mfunc+i) = uparam(nuparam+mfunc+i)
326 ENDDO
327 runload =
max(runload,uparam(nuparam+mfunc+1))
328 runload =
min(runload,uparam(nuparam+mfunc+mfunc))
329 uparam(22)=runload
330 nuparam=nuparam+mfunc*2
331
332 DO j=1,mfunc
333 ifunc(j)=ifload(j)
334 IF (ifload(j) == 0)THEN
336 . msgtype=msgerror,
337 . anmode=aninfo,
338 . i1=mat_id,
339 . c1=titr,
340 . i2=mfunc)
341 EXIT
342 ENDIF
343 IF(ifunload(j)<=0)ifunload(j)=ifload(1)
344 ifunc(j+mfunc)=ifunload(j)
345 ENDDO
346
347 parmat(1)=e
348 parmat(2)=e
350 parmat(3)=nu
351
352
353 IF(npcurve==0)THEN
354 parmat(16) = 2
355 parmat(17) = (one-two*nu)/(one-nu)
356 ELSE
357 parmat(16) = 0
358 parmat(17) = zero
359 END IF
360
361 nfunc=2*mfunc+2
362 ifunc(nfunc-1)=iunload
363 ifunc(nfunc)=npcurve
364
365 mtag%G_EPSD = 1
366 mtag%L_EPSD = 1
367
369 IF (nu > 0.49) THEN
371 ELSE
373 END IF
375
378
379 WRITE(iout,1001) trim(titr),mat_id,38
380 WRITE(iout,1000)
381
382 IF(is_encrypted)THEN
383 WRITE(iout,7000)
384 ELSE
385 WRITE(iout,1002)rho0
386 WRITE(iout,1003)e,vt,vc,rv,iflag,itotal
387 WRITE(iout,1100)beta,hyster,ratedamp,krecover,kdecay,theta
388 WRITE(iout,1200)kcompair,npcurve,p0,relaxp,maxpres,phi
389 WRITE(iout,1300)iunload,funload,runload,exponas,exponbs
390 WRITE(iout,1400)mfunc,ksmstr,tensioncut
391 WRITE(iout,1500)efinal,epsfin,lamda,viscosity,tolerance
392 WRITE(iout,'(5X,''SCALE FACTORS : '')')
393 WRITE(iout,'(1P5G20.13)') (uparam(nuparam-mfunc*2+i),i=1,mfunc)
394 WRITE(iout,'(5X,''STRAIN RATES : '')')
395 WRITE(iout,'(1P5G20.13)') (uparam(nuparam-mfunc+i),i=1,mfunc)
396 WRITE(iout,'(5X,''LOADING CURVES : '')')
397 WRITE(iout,fmt=fmw_5i) (ifunc(j),j=1,mfunc)
398 WRITE(iout,'(5X,''UNLOADING CURVES : '')')
399 WRITE(iout,fmt=fmw_5i) (ifunc(j),j=1+mfunc,mfunc*2)
400 WRITE(iout,*)
401 ENDIF
402 RETURN
403 7000 FORMAT
404 & (5x,55h strain rate dependent interpolation
for foam material,/
405 & ,5x,55h -----------------------------------------------------,//
406 & ,5x, 'CONFIDENTIAL DATA'//)
407 1000 FORMAT
408 & (5x,55h strain rate dependent interpolation
for foam material,/
409 & ,5x,55h -----------------------------------------------------,//)
410 1001 FORMAT(/
411 & 5x,a,/,
412 & 5x, 'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
413 & 5x, 'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
414 1002 FORMAT(
415 & 5x, 'INITIAL DENSITY. . . . . . . . . . . . =',1pg20.13/)
416 1003 FORMAT
417 & (5x, 'INITIAL ELASTIC MODULUS . . . . . . . .=',1pg20.13/
418 & ,5x, 'POISSON''S RATIO IN TENSION. . . . . . =',1pg20.13/
419 & ,5x, 'POISSON''S RATIO IN COMPRESSION. . . . =',1pg20.13/
420 & ,5x, 'EXPONENT FOR POISSON''S RATIO UPDATE. .=',1pg20.13/
421 & ,5x, 'ANALYSIS FLAG . . . . . . . . . . . . .=',i10/
422 & ,5x, 'FORMULATION (2,3=INCREMENTAL;0,1=TOTAL)=',i10//)
423 1100 FORMAT
424 & (5x, 'BETA. . . . . . . . . . . . . . . . . .=',1pg20.13/
425 & ,5x, 'HYSTERYSIS COEFFICIENT. . . . . . . . .=',1pg20.13/
426 & ,5x, 'DAMPING COEFFICIENT ON STRAIN RATE. . .=',1pg20.13/
427 & ,5x, 'RECOVERY FLAG ON UNLOADING. . . . . . .=',i10/
428 & ,5x, 'HYSTERYSES MODEl. . . . . . . . . . . .=',i10/
429 & ,5x, 'THETA (INCREMENTAL INTEGRATION) . . . .=',1pg20.13//)
430
431 1200 FORMAT
432 & (5x, 'AIR PRESSURE COMPUTATION FLAG . . . . .=',i10/
433 & ,5x, 'AIR PRESSURE FUNCTION NUMBER. . . . . .=',i10/
434 & ,5x, 'atmospheric pressure. . . . . . . . . .=',1PG20.13/
435 & ,5X, 'relaxation PARAMETER. . . . . . . . . .=',1PG20.13/
436 & ,5X, 'maximum pressure. . . . . . . . . . . .=',1PG20.13/
437 & ,5X, 'porosity. . . . . . . . . . . . . . . .=',1PG20.13//)
438
439 1300 FORMAT
440 & (5X, 'unloading FUNCTION number . . . . . . .=',I10/
441 & ,5X, 'factor
for unloading function . . . . .=
',1PG20.13/
442 & ,5X, 'unloading rate. . . . . . . . . . . . .=',1PG20.13/
443 & ,5X, 'exponent
for stress interpolation a . .=
',1PG20.13/
444 & ,5X, 'exponent
for stress interpolation b . .=
',1PG20.13//)
445
446 1400 FORMAT
447 & (5X, 'number of functions defining rate dependency =',I10/
448 & ,5X, 'material stablisation flag . . . . . . . . . =',I10/
449 & ,5X, 'tension cut-off stress. . . . . . . . .=',1PG20.13//)
450
451 1500 FORMAT
452 & (5X, 'module at infinity. . . . . . . . . . . .=',1PG20.13/
453 & ,5X, 'epsfin. . . . . . . . . . . . . . . . . .=',1PG20.13/
454 & ,5X, 'lamda . . . . . . . . . . . . . . . . . .=',1PG20.13/
455 & ,5X, 'viscosity_max. . . . . . . . . . . . . .=',1PG20.13/
456 & ,5X, 'tolerance
for principal direction update =
',1PG20.13//)
457
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_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
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
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)