44 . MAXFUNC ,NFUNC , PARMAT ,UNITAB ,MAT_ID ,
45 . MTAG ,TITR , LSUBMODEL,PM ,IMATVIS ,
73 USE format_mod ,
ONLY : fmw_5i
77#include "implicit_f.inc"
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
94CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
96 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
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)
105 my_real :: e,vt,vc,rv, nu
106 my_real :: beta,hyster,ratedamp,graddamp,theta
107 my_real :: p0,relaxp,maxpres,phi,gamma
108 my_real :: funload,runload,exponas,exponbs
109 my_real :: tensioncut
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
117 is_encrypted = .false.
118 is_available = .false.
129 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
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)
150 CALL hm_get_floatv(
'MAT_RELX' ,beta ,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)
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)
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)
185 CALL hm_get_intv (
'FUN_B4' ,iunload ,is_available,lsubmodel)
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)
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 !* MFUNC = MAX. NO. OF FUNCTIONS
201 !* KSMSTR = SMALL STRAIN FLAG
202 !* TENSIONCUT = MAX. TENSILE STRESS
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 !* EFINAL = FINAL MODULUS
212 !* EPSFIN = STRAIN AT FINAL MODULUS
213 !* LAMDA = INTERPOLATION CONSTANT
214 !* VISCOSITY = CONST. VISCOSITY USED FOR TIMESTEP ONLY
215 !* TOLERANCE = TOLERANCE ON PRINCIPLE DIRECTION UPDATE
217 CALL HM_GET_FLOATV_DIM('mat_e
' ,FAC_P, IS_AVAILABLE, LSUBMODEL, UNITAB)
221 IF (RHOR == ZERO) RHOR=RHO0
226 IF (PSCALE == ZERO) PSCALE = ONE
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
243 IF( MAXPRES <= ZERO) THEN
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
253.OR.
IF(EPSFIN<=ZEROEPSFIN>ZERO) EPSFIN=ONE
254 IF( LAMDA<=ZERO) LAMDA =ONE
255 IF( TOLERANCE <=ZERO) TOLERANCE = ONE
256 IF( VISCOSITY<=ZERO) THEN
260 CALL ANCMSG(MSGID=992,
262 . ANMODE=ANINFO_BLIND_1,
267 IF (EFINAL<=E) EFINAL = E
268 !PSCALE = PSCALE * FAC_C
269 !FUNLOAD = FUNLOAD * FAC_C
299 UPARAM(27)=TENSIONCUT
312 CALL HM_GET_INT_ARRAY_INDEX ('funct_id_load
' ,IFLOAD(I) ,I ,IS_AVAILABLE, LSUBMODEL)
313 CALL HM_GET_INT_ARRAY_INDEX ('funct_id_unload
',IFUNLOAD(I) ,I ,IS_AVAILABLE, LSUBMODEL)
314 CALL HM_GET_FLOAT_ARRAY_INDEX('fscale_i
' ,FSCAL_TAB(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
315 CALL HM_GET_FLOAT_ARRAY_INDEX('epsilon_i
' ,EPS_TAB(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
319 UPARAM(NUPARAM+ I) = FSCAL_TAB(I)
320 UPARAM(NUPARAM+MFUNC+I) = EPS_TAB(I)
323 IF(UPARAM(NUPARAM+I)<=0.) UPARAM(NUPARAM+I)=ONE
324 UPARAM(NUPARAM+I) = UPARAM(NUPARAM+I) !* FAC_C
325 UPARAM(NUPARAM+MFUNC+I) = UPARAM(NUPARAM+MFUNC+I) !/ FAC_T
327 RUNLOAD = MAX(RUNLOAD,UPARAM(NUPARAM+MFUNC+1))
328 RUNLOAD = MIN(RUNLOAD,UPARAM(NUPARAM+MFUNC+MFUNC))
330 NUPARAM=NUPARAM+MFUNC*2
334 IF (IFLOAD(J) == 0)THEN
335 CALL ANCMSG(MSGID=1039,
343 IF(IFUNLOAD(J)<=0)IFUNLOAD(J)=IFLOAD(1)
344 IFUNC(J+MFUNC)=IFUNLOAD(J)
355 PARMAT(17) = (ONE-TWO*NU)/(ONE-NU)
362 IFUNC(NFUNC-1)=IUNLOAD
368 CALL INIT_MAT_KEYWORD(MATPARAM,"TOTAL")
370 CALL INIT_MAT_KEYWORD(MATPARAM,"INCOMPRESSIBLE")
372 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
374 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
375 ! Properties compatibility
376 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
377 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
379 WRITE(IOUT,1001) TRIM(TITR),MAT_ID,38
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)
404 & (5X,55H STRAIN RATE DEPENDENT INTERPOLATION FOR FOAM MATERIAL,/
405 & ,5X,55H -----------------------------------------------------,//
406 & ,5X, 'confidential data
'//)
408 & (5X,55H STRAIN RATE DEPENDENT INTERPOLATION FOR FOAM MATERIAL,/
409 & ,5X,55H -----------------------------------------------------,//)
412 & 5X, 'material number. . . . . . . . . . . . =
',I10/,
413 & 5X, 'material law . . . . . . . . . . . . . =',i10/)
415 & 5x, 'initial density. . . . . . . . . . . . =
',1PG20.13/)
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//)
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//)
432 & (5X, 'air pressure
',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//)
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//)
447 & (5x,
'NUMBER OF FUNCTIONS DEFINING RATE DEPENDENCY =',i10/
448 & ,5x,
'MATERIAL STABLISATION FLAG . . . . . . . . . =',i10/
449 & ,5x,
'TENSION CUT-OFF STRESS. . . . . . . . .=',1pg20.13//)
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//)