OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat38.F File Reference
#include "implicit_f.inc"
#include "units_c.inc"
#include "param_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_mat38 (uparam, maxuparam, nuparam, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_id, mtag, titr, lsubmodel, pm, imatvis, matparam)

Function/Subroutine Documentation

◆ hm_read_mat38()

subroutine hm_read_mat38 ( intent(inout) uparam,
integer, intent(in) maxuparam,
integer, intent(inout) nuparam,
integer, intent(inout) nuvar,
integer, dimension(maxfunc), intent(inout) ifunc,
integer, intent(in) maxfunc,
integer, intent(inout) nfunc,
intent(inout) parmat,
type (unit_type_), intent(in) unitab,
integer, intent(in) mat_id,
type(mlaw_tag_), intent(inout) mtag,
character(len=nchartitle), intent(in) titr,
type(submodel_data), dimension(*), intent(in) lsubmodel,
intent(inout) pm,
integer, intent(inout) imatvis,
type(matparam_struct_), intent(inout) matparam )

Definition at line 43 of file hm_read_mat38.F.

47C-----------------------------------------------
48C D e s c r i p t i o n
49C-----------------------------------------------
50C
51C DUMMY ARGUMENTS DESCRIPTION:
52C ===================
53C
54C NAME DESCRIPTION
55C
56C IPM MATERIAL ARRAY(INTEGER)
57C PM MATERIAL ARRAY(REAL)
58C UNITAB UNITS ARRAY
59C MAT_ID MATERIAL ID(INTEGER)
60C TITR MATERIAL TITLE
61C LSUBMODEL SUBMODEL STRUCTURE
62C
63C-----------------------------------------------
64C M o d u l e s
65C-----------------------------------------------
66 USE unitab_mod
67 USE elbuftag_mod
68 USE message_mod
69 USE submodel_mod
70 USE matparam_def_mod
73 USE format_mod , ONLY : fmw_5i
74C-----------------------------------------------
75C I m p l i c i t T y p e s
76C-----------------------------------------------
77#include "implicit_f.inc"
78C-----------------------------------------------
79C C o m m o n B l o c k s
80C-----------------------------------------------
81#include "units_c.inc"
82#include "param_c.inc"
83C-----------------------------------------------
84C D u m m y A r g u m e n t s
85C-----------------------------------------------
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
97C-----------------------------------------------
98C L o c a l V a r i a b l e s
99C-----------------------------------------------
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
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
113
114C-----------------------------------------------
115C S o u r c e L i n e s
116C-----------------------------------------------
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
127 CALL hm_option_is_encrypted(is_encrypted)
128!LINE-1
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!LINE-2
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 !* E = INITIAL MODULUS USED FOR INTERFACE AND TIMESTEP COMPUTATION
139 !* VT = MAXIMUM POISSON'S RATIO IN TENSION
140 !* VC = MAXIMUM POISSON'S RATIO IN COMPRESSION
141 !* RV = EXPONENT FOR POISSON'S RATIO COMPUTATION
142 !* IFLAG = FLAG FOR ANALYSIS FORMULATION TYPE
143 !* = 0 ; PRINCIPAL STRESSES
144 !* = 1 ; OCTAHEDRAL STRESSES
145 !* ITOTAL = FLAG FOR INCREMENTAL FORMULATION
146 !* = 0,1 ; TOTAL
147 !* = 2,3 ; INCREMENTAL!
148!LINE-3
149 !* DECAY, HYSTERESIS AND DAMPING
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 !* BETA = RELAXATION RATE FOR UNLOADING
157 !* HYSTER = HYSTERESIS COEFFICIENT FOR UNLOADING
158 !* RATEDAMP = DAMPING FACTOR ON STRAIN RATE
159 !* KRECOVER = RECOVERY FLAG ON UNLOADING FOR HYSTERESIS
160 !* KDECAY = HYSTRESIS TYPE
161 !* THETA = INTEGRATION COEFFICIENT FOR INSTANTANEOUS MODULE
162
163!LINE-4
164 !* AIR PRESSURE
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 !* KCOMPAIR = FLAG FOR AIR CONTENT COMPUTATION
169 !* = 0 NO AIR CONTENT
170 !* = 1 AIR CONTENT COMPUTATION ACTIVE
171 !* NPCURVE = PRESSURE CURVE NUMBER (P VS. RELATIVE VOLUME J)
172 !* PSCALE = SCALE FACTOR FOR PRESSURE CURVE
173!LINE-5
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 !* P0 = ATMOSPHERIC PRESSURE
179 !* MAXPRES = MAXIMUM AIR PRESSURE
180 !* PHI = POROSITY
181 !* PSCALE = PRESSURE FUNCTION SCALE FACTOR
182
183!LINE-6
184 !* UNLOADING AND INTERPOLATION DATA
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)
190 !* IUNLOAD = UNLOADING FUNCTION NUMBER
191 !* funload = unloading scale factor
192 !* RUNLOAD = UNLOADING RATE
193 !* EXPONAS = A EXPONENT FOR FUNCTION INTERPOLATION
194 !* EXPONBS = B EXPONENT FOR FUNCTION INTERPOLATION
195!LINE-7
196 !* MAX. NO FUNCTION. ETC.
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
203
204!LINE-8
205 !* STABILITY DATA
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
216!FOR DIMENSION ONLY
217 CALL hm_get_floatv_dim('MAT_E' ,fac_p, is_available, lsubmodel, unitab)
218
219
220C----------------
221 IF (rhor == zero) rhor=rho0
222 pm(1) = rhor
223 pm(89)= rho0
224C----------------
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
260 CALL ancmsg(msgid=992,
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 !PSCALE = PSCALE * FAC_C
269 !FUNLOAD = FUNLOAD * FAC_C
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!LAST-LINES
311 DO i=1,mfunc
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)
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+i)=one
324 uparam(nuparam+i) = uparam(nuparam+i) !* FAC_C
325 uparam(nuparam+mfunc+i) = uparam(nuparam+mfunc+i) !/ FAC_T
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
335 CALL ancmsg(msgid=1039,
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
346C-------to be consisting w/ dt in engine
347 parmat(1)=e
348 parmat(2)=e
349 nu = max(vc,vt)
350 parmat(3)=nu
351c------------------------------------
352C Formulation for solid elements time step computation.
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
364c
365 mtag%G_EPSD = 1
366 mtag%L_EPSD = 1
367c-----------------
368 CALL init_mat_keyword(matparam,"TOTAL")
369 IF (nu > 0.49) THEN
370 CALL init_mat_keyword(matparam,"INCOMPRESSIBLE")
371 ELSE
372 CALL init_mat_keyword(matparam,"COMPRESSIBLE")
373 END IF
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")
378c-----------------
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
#define my_real
Definition cppsort.cpp:32
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)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
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)
Definition message.F:889