43 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT ,
44 . UNITAB ,MAT_ID ,TITR ,MTAG , LSUBMODEL,
74#include "implicit_f.inc"
83 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
84 my_real,
INTENT(INOUT) :: PM(NPROPM),PARMAT(100),UPARAM(MAXUPARAM)
85 INTEGER,
INTENT(INOUT) :: IPM(NPROPMI),ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM, NUVAR,IMATVIS
87 INTEGER,
INTENT(IN) :: MAT_ID
88 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
90 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
95 . k,nu,g,rate(maxfunc+1),visc, viscv,expo,hys,
96 . rho0,rhor,bulk,emax,fcut,a1,a2,aa,yfac(maxfunc+1),yfac_unl,
97 . shape,gs,e,zep495,yfac_unl_unit,yfac_unit
99 . j,i, ii,iunload,iflag,ietang,istif,i2017_2,
nl,ifunc0(maxfunc),
100 . ifunc_unload,itens,iunl_for,icase,iadd,ilaw
102 LOGICAL IS_AVAILABLE,IS_ENCRYPTED
106 is_encrypted = .false.
107 is_available = .false.
111 zep495 = zep4 + nine*em02 + five*em03
117 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'LAW88_Nu' , nu ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'LAW88_Fcut' , fcut ,is_available, lsubmodel, unitab)
123 CALL hm_get_intv(
'LAW88_Fsmooth', israte ,is_available, lsubmodel)
126 CALL hm_get_intv(
'LAW88_fct_IDunL' ,ifunc_unload ,is_available, lsubmodel)
127 CALL hm_get_floatv(
'LAW88_FscaleunL' ,yfac_unl ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'LAW88_Hys' ,hys ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'LAW88_Shape' ,shape ,is_available, lsubmodel, unitab)
130 CALL hm_get_intv(
'LAW88_Tension' ,itens ,is_available, lsubmodel)
132 IF(rhor==zero)rhor=rho0
139 . anmode=aninfo_blind,
147 CALL HM_GET_FLOAT_ARRAY_INDEX('law88_arr3
' ,RATE(I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
149 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('law88_arr2
' ,YFAC_UNIT ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
150 IF(YFAC(I) == ZERO) YFAC(I) = YFAC_UNIT
153 CALL HM_GET_FLOATV_DIM('law88_fscaleunl
' ,YFAC_UNL_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
155.AND.
IF(RATE(1) /= ZERO NL > 1) THEN
157 IFUNC(I+1) = IFUNC(I)
166 IF(RATE(I) < RATE(I-1) ) THEN
167 CALL ANCMSG(MSGID=478,
169 . ANMODE=ANINFO_BLIND_1,
180 IF(YFAC_UNL == ZERO) YFAC_UNL = YFAC_UNL_UNIT
181 IF(NL == 1) THEN ! no strain rate effect
182 IF(IFUNC_UNLOAD > 0 )THEN
184 IFUNC(NFUNC) = IFUNC_UNLOAD
185 YFAC(NFUNC) = YFAC_UNL
187 IUNL_FOR = 1 ! using unloading curve
188 ELSEIF(HYS /= ZERO) THEN
189 IUNL_FOR = 2 ! based on the energy
192 IUNL_FOR = 0 ! no unloading curve,
194 ELSE ! strain rate effect
195 IF(IFUNC_UNLOAD > 0) THEN
197 IFUNC(NFUNC) = IFUNC_UNLOAD
198 YFAC(NFUNC) = YFAC_UNL
200 IUNL_FOR = 1 ! using unloading curve
201 ELSEIF(HYS /= ZERO )THEN
202 IUNL_FOR = 3 ! based on the energy
204 ELSE ! using quasistatic curve for unloading
206 IFUNC(NFUNC) = IFUNC(1)
207 YFAC(NFUNC) = YFAC(1)
209 IUNL_FOR = 1 ! using unloading curve
213 IF(SHAPE == ZERO) SHAPE = ONE
214 IF(HYS == ZERO) HYS = ONE
215 IF(NU == ZERO) NU = ZEP495
216 GS = THREE_HALF*BULK*(ONE - TWO*NU)/(ONE + NU)
217 E = TWO*GS*(ONE + NU)
219 CALL ANCMSG(MSGID=828,
225.AND.
IF (FCUT == ZERO NL > 1 ) THEN
226 FCUT = EP03*UNITAB%FAC_T_WORK
242 UPARAM( NUPARAM + 2*I - 1) = RATE(I)
243 UPARAM( NUPARAM + 2*I ) = YFAC(I)
245 NUPARAM = NUPARAM + 2*NFUNC
246 UPARAM(NUPARAM + 1 : NUPARAM + 5) = ZERO
247 NUPARAM = NUPARAM + 5 ! used inside law88_upd.F but not used in engine
258 PARMAT(17) = TWO*GS/(BULK + FOUR_OVER_3*GS)
260 ! MTAG variable activation
264 CALL INIT_MAT_KEYWORD(MATPARAM,"INCOMPRESSIBLE")
265 CALL INIT_MAT_KEYWORD(MATPARAM,"TOTAL")
266 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
267 ! Properties compatibility
268 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
269 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
271 WRITE(IOUT,1010) TRIM(TITR),MAT_ID,88
274 WRITE(IOUT,'(5x,a,//)
')'confidential data'
277 WRITE(iout,1100)nu,bulk,itens,
nl-iadd
278 WRITE(iout,1200)(ifunc(i),yfac(i),rate(i),i=1+iadd,
nl)
279 WRITE(iout,1250) israte,fcut
280 IF(iunl_for == 1)
THEN
282 WRITE(iout,1300)ifunc(nfunc),yfac_unl
283 ELSEIF(iunl_for == 2 .or. iunl_for == 3)
THEN
284 write(iout,1400) hys, shape
286 WRITE(iout,1500) itens
292 & (5x,
'TABULATED OGDEN MATERIAL LAW-(LAW88)',/
293 & 5x,
'------------------------------------',//)
296 & 5x,
'MATERIAL NUMBER. . . . . . . . . . . . . .=',i10/,
297 'MATERIAL LAW . . . . . . . . . . . . . . .=',i10/)
299 & 5x,
'INITIAL DENSITY. . . . . . . . . . . . . .=',1pg20.13/)
301 &(5x,
'POISSON RATIO. . . . . . . . . . . . . . =',1pg20.13/
302 &,5x,
'BULK MODULUS. . . . . . . . . . . . . . . =',1pg20.13/
303 &,5x,
'STRAIN RATE EFFECT FLAG . .. . . . . . . ='
304 &,5x
'NUMBER OF LOADING FUNCTION . . .. . . . .='
306 & 5x,
'LOADING STRESS-STRAIN FUNCTION NUMBER. . .=',i10/
307 & 5x,
'STRESS SCALE FACTOR. . . . . . . . . . . .=',1pg20.13/
308 & 5x,
'STRAIN RATE . . . . . . . . . . . . . . . =',1pg20.13)
310 & 5x,
'STRAIN RATE FILTERING FLAG. . . . . . . . =',i10/
311 & 5x,
'STRAIN RATE FILTERING CUTOFF FREQUENCY. . =',1pg20.13/)
313 & 5x,
'UNLOADING STRESS-STRAIN FUNCTION NUMBER. .=',i10/
314 & 5x,
'STRESS SCALE FACTOR. . . . . . . . . . . .=',1pg20.13/)
316 &(5x,
'HYSTERETIC UNLOADING FACTOR. . . . . . . =',1pg20.13/
317 &,5x,
'SHAPE UNLOADING FACTOR. . . . . . . . . . =',1pg20.13//)
319 &(5x,
'ITENSION : PARAMETER FOR UNLOADING . . . .=',i10/)
subroutine hm_read_mat88(uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_id, titr, mtag, lsubmodel, pm, ipm, matparam)
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)