OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat60.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_mat60 (uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_id, titr, mtag, lsubmodel, pm, ipm, matparam)

Function/Subroutine Documentation

◆ hm_read_mat60()

subroutine hm_read_mat60 ( dimension(maxuparam), intent(inout) uparam,
integer, intent(inout) maxuparam,
integer, intent(inout) nuparam,
integer, intent(inout) israte,
integer, intent(inout) imatvis,
integer, intent(inout) nuvar,
integer, dimension(maxfunc), intent(inout) ifunc,
integer, intent(inout) maxfunc,
integer, intent(inout) nfunc,
dimension(100), intent(inout) parmat,
type (unit_type_), intent(in) unitab,
integer, intent(in) mat_id,
character(len=nchartitle), intent(in) titr,
type(mlaw_tag_), intent(inout) mtag,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel,
dimension(npropm), intent(inout) pm,
integer, dimension(npropmi), intent(inout) ipm,
type(matparam_struct_), intent(inout) matparam )

Definition at line 39 of file hm_read_mat60.F.

43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C READ MAT LAW60 WITH HM READER
47C
48C DUMMY ARGUMENTS DESCRIPTION:
49C ===================
50C
51C NAME DESCRIPTION
52C
53C PM MATERIAL ARRAY(REAL)
54C UNITAB UNITS ARRAY
55C ID MATERIAL ID(INTEGER)
56C TITR MATERIAL TITLE
57C LSUBMODEL SUBMODEL STRUCTURE
58C
59C-----------------------------------------------
60C M o d u l e s
61C-----------------------------------------------
62 USE unitab_mod
63 USE elbuftag_mod
64 USE message_mod
65 USE submodel_mod
66 USE matparam_def_mod
68C-----------------------------------------------
69C I m p l i c i t T y p e s
70C-----------------------------------------------
71#include "implicit_f.inc"
72C-----------------------------------------------
73C C o m m o n B l o c k s
74C-----------------------------------------------
75#include "units_c.inc"
76#include "param_c.inc"
77C-----------------------------------------------
78C D u m m y A r g u m e n t s
79C-----------------------------------------------
80 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
81 my_real, INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
82 INTEGER, INTENT(INOUT) :: IPM(NPROPMI),ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM, NUVAR,IMATVIS
83 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
84 INTEGER,INTENT(IN) :: MAT_ID
85 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
86 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
87 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
88C-----------------------------------------------
89C L o c a l V a r i a b l e s
90C-----------------------------------------------
91 my_real
92 . e,nu,g,c1,epsmax,epsr1,epsr2,fisokin,rate(11),yfac(11),
93 . pscale,fac_l,fac_t,fac_m,fac_c,escale,einf,ce,asrate
94 INTEGER NRATE,J,I,IU,IFUNCE,ISRATE_LOC,MFUNC,OPTE,IPFUN
95 my_real :: rho0, rhor, pscale_unit
96 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
97C-----------------------------------------------
98C S o u r c e L i n e s
99C-----------------------------------------------
100 is_encrypted = .false.
101 is_available = .false.
102 israte = 1
103 imatvis = 0
104 mtag%G_EPSD = 1
105 mtag%L_EPSD = 1
106 mtag%G_PLA = 1
107 mtag%L_PLA = 1
108
109 !---READING
110 CALL hm_option_is_encrypted(is_encrypted)
111 !line+1
112 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
114 !line-2
115 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_EPS' ,epsmax ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('MAT_EPST1' ,epsr1 ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv('mat_epst2' ,EPSR2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
120 !line-3
121 CALL HM_GET_INTV('nfunc' ,NRATE ,IS_AVAILABLE, LSUBMODEL)
122 CALL HM_GET_INTV('fsmooth' ,ISRATE_LOC ,IS_AVAILABLE, LSUBMODEL)
123 CALL HM_GET_FLOATV('mat_hard' ,FISOKIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
124 CALL HM_GET_FLOATV('fcut' ,ASRATE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
125 !line-4
126 CALL HM_GET_INTV('xr_fun' ,IPFUN ,IS_AVAILABLE, LSUBMODEL)
127 CALL HM_GET_INTV('fct_id_k' ,IFUNCE ,IS_AVAILABLE, LSUBMODEL)
128 CALL HM_GET_FLOATV('mat_fscale' ,PSCALE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129 CALL HM_GET_FLOATV('e_r' ,EINF ,IS_AVAILABLE, LSUBMODEL, UNITAB)
130 CALL HM_GET_FLOATV('mat_c1' ,CE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 !remaining lines
132 CALL HM_GET_INTV('fun_a1' ,IFUNC(1) ,IS_AVAILABLE, LSUBMODEL)
133 CALL HM_GET_INTV('fun_b1' ,IFUNC(2) ,IS_AVAILABLE, LSUBMODEL)
134 CALL HM_GET_INTV('fun_a2' ,IFUNC(3) ,IS_AVAILABLE, LSUBMODEL)
135 CALL HM_GET_INTV('fun_b2' ,IFUNC(4) ,IS_AVAILABLE, LSUBMODEL)
136 CALL HM_GET_INTV('fun_a3' ,IFUNC(5) ,IS_AVAILABLE, LSUBMODEL)
137 CALL HM_GET_INTV('fun_b3' ,IFUNC(6) ,IS_AVAILABLE, LSUBMODEL)
138 CALL HM_GET_INTV('fun_a4' ,IFUNC(7) ,IS_AVAILABLE, LSUBMODEL)
139 CALL HM_GET_INTV('fun_b4' ,IFUNC(8) ,IS_AVAILABLE, LSUBMODEL)
140 CALL HM_GET_INTV('fun_a5' ,IFUNC(9) ,IS_AVAILABLE, LSUBMODEL)
141 CALL HM_GET_INTV('fun_b5' ,IFUNC(10) ,IS_AVAILABLE, LSUBMODEL)
142
143 CALL HM_GET_FLOATV('mat_alpha1' ,YFAC(1) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
144 CALL HM_GET_FLOATV('mat_alpha2' ,YFAC(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
145 CALL HM_GET_FLOATV('mat_alpha3' ,YFAC(3) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
146 CALL HM_GET_FLOATV('mat_alpha4' ,YFAC(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
147 CALL HM_GET_FLOATV('mat_alpha5' ,YFAC(5) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
148 CALL HM_GET_FLOATV('mat_alpha6' ,YFAC(6) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
149 CALL HM_GET_FLOATV('mat_alpha7' ,YFAC(7) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
150 CALL HM_GET_FLOATV('mat_alpha8' ,YFAC(8) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
151 CALL HM_GET_FLOATV('mat_alpha9' ,YFAC(9) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
152 CALL HM_GET_FLOATV('mat_alpha0' ,YFAC(10) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
153
154 CALL HM_GET_FLOATV('mat_epsr1' ,RATE(1) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
155 CALL HM_GET_FLOATV('mat_epsr2' ,RATE(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
156 CALL HM_GET_FLOATV('mat_epsr3' ,RATE(3) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
157 CALL HM_GET_FLOATV('mat_epsr4' ,RATE(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
158 CALL HM_GET_FLOATV('mat_epsr5' ,RATE(5) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
159 CALL HM_GET_FLOATV('mat_epsr6' ,RATE(6) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
160 CALL HM_GET_FLOATV('mat_epsr7' ,RATE(7) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
161 CALL HM_GET_FLOATV('mat_epsr8' ,RATE(8) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
162 CALL HM_GET_FLOATV('mat_epsr9' ,RATE(9) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
163 CALL HM_GET_FLOATV('mat_epsr10' ,RATE(10) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
164 !units
165 CALL HM_GET_FLOATV_DIM('mat_fscale' ,PSCALE_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
166
167C=======================================================================
168
169
170 !---CHECK PARAMETERS
171.AND. IF((EPSR1 /= ZERO)(EPSR2 /= ZERO))THEN
172 IF(EPSR1 >= EPSR2)THEN
173 CALL ANCMSG(MSGID=480,
174 . MSGTYPE=MSGERROR,
175 . ANMODE=ANINFO_BLIND_1,
176 . I1=MAT_ID,
177 . C1=TITR)
178 ENDIF
179 ENDIF
180
181 IF(NRATE > 10)THEN
182 CALL ANCMSG(MSGID=215,
183 . MSGTYPE=MSGERROR,
184 . ANMODE=ANINFO,
185 . I1=60,
186 . I2=MAT_ID,
187 . C1=TITR)
188 ELSEIF(NRATE < 4)THEN
189 CALL ANCMSG(MSGID=529,
190 . MSGTYPE=MSGERROR,
191 . ANMODE=ANINFO,
192 . I1=MAT_ID,
193 . C1=TITR,
194 . I2=NRATE)
195 ENDIF
196
197 IF (IPFUN == 0) THEN
198 PSCALE = ZERO
199 ELSEIF (PSCALE == ZERO) THEN
200 PSCALE = ONE*PSCALE_UNIT
201 ELSE
202 PSCALE = ONE/PSCALE
203 ENDIF
204
205 IF(NRATE == 5)THEN !CFG file is forcing NRATE=5 whenever there is less than 5 functions
206 DO I=5,2,-1
207 IF(IFUNC(I) == 0)THEN
208 NRATE=NRATE-1
209 ELSE
210 EXIT
211 ENDIF
212 ENDDO
213 ENDIF
214
215 DO I=1,NRATE-1
216 IF(RATE(I) >= RATE(I+1))THEN
217 CALL ANCMSG(MSGID=478,
218 . MSGTYPE=MSGERROR,
219 . ANMODE=ANINFO_BLIND_1,
220 . I1=MAT_ID,
221 . C1=TITR)
222 EXIT
223 ENDIF
224 ENDDO
225
226 DO I=1,NRATE
227 IF(YFAC(I) == ZERO) YFAC(I)=ONE*PSCALE_UNIT
228 ENDDO
229
230 DO I=1,NRATE
231 IF(IFUNC(I) == 0)THEN
232 CALL ANCMSG(MSGID=126,
233 . MSGTYPE=MSGERROR,
234 . ANMODE=ANINFO_BLIND_1,
235 . I1=MAT_ID,
236 . C1=TITR,
237 . I2=IFUNC(I))
238 ENDIF
239 ENDDO
240
241.AND. IF(NRATE > 1 ISRATE_LOC == 0) THEN
242 CALL ANCMSG(MSGID=1220,
243 . MSGTYPE=MSGWARNING,
244 . ANMODE=ANINFO_BLIND_1,
245 . I1=MAT_ID,
246 . C1=TITR)
247 ENDIF
248
249 IF(NRATE == 1)THEN
250 MFUNC=2
251 IFUNC(2)=IFUNC(1)
252 RATE(1) =ZERO
253 RATE(2) =ONE
254 YFAC(2) =YFAC(1)
255 ELSEIF(RATE(1) == ZERO)THEN
256 MFUNC=NRATE
257 ELSE
258 MFUNC=NRATE+1
259 DO J=NRATE,1,-1
260 IFUNC(J+1)=IFUNC(J)
261 RATE(J+1) =RATE(J)
262 YFAC(J+1) =YFAC(J)
263 ENDDO
264 RATE(1)=ZERO
265 ENDIF
266C
267 !---DEFAULTS VALUES
268 IF(RHOR == ZERO)RHOR=RHO0
269 PM(1) =RHOR
270 PM(89)=RHO0
271
272 !---STORAGE
273 UPARAM(1)=MFUNC
274 UPARAM(2)=E
275 UPARAM(3)=E/(ONE-NU*NU)
276 UPARAM(4)=NU*UPARAM(3)
277 G = HALF*E/(1.+NU)
278 UPARAM(5)=G
279 UPARAM(6)=NU
280
281 DO J=1,MFUNC
282 UPARAM(6+J)=RATE(J)
283 ENDDO
284
285 DO J=1,MFUNC
286 UPARAM(6+MFUNC+J)=YFAC(J)
287 ENDDO
288
289 IF(EPSR1 == ZERO)EPSR1=INFINITY
290 IF(EPSR2 == ZERO)EPSR2=TWO*INFINITY
291 UPARAM(6+2*MFUNC+1)=EPSMAX
292 UPARAM(6+2*MFUNC+2)=EPSR1
293 UPARAM(6+2*MFUNC+3)=EPSR2
294 UPARAM(6+2*MFUNC+4)=TWO*G
295 UPARAM(6+2*MFUNC+5)=THREE*G
296 C1=E/THREE/(ONE-TWO*NU)
297 UPARAM(6+2*MFUNC+6)=C1
298 UPARAM(6+2*MFUNC+7)=C1 + FOUR*G/THREE ! ssp
299 UPARAM(6+2*MFUNC+8)=FISOKIN
300 NFUNC = MFUNC + 1
301 IFUNC(NFUNC) = IPFUN
302 IU = 15 + 2*MFUNC
303 IF (IPFUN == 0) THEN
304 UPARAM(IU) = 0
305 ELSE
306 UPARAM(IU) = NFUNC
307 ENDIF
308 IU = IU+1
309 UPARAM(IU) = PSCALE
310C
311c --------------
312 OPTE = 0
313 IF (IFUNCE > 0 )OPTE = 1
314 NFUNC = NFUNC + 1
315 IFUNC(NFUNC)= IFUNCE
316 UPARAM(IU+1) = NFUNC
317 UPARAM(IU+2) = OPTE
318 UPARAM(IU+3) = EINF
319 UPARAM(IU+4) = CE
320 IU=IU+4
321c
322 NUPARAM = IU
323c------------------
324
325 PARMAT(1) = C1
326 PARMAT(2) = E
327 PARMAT(3) = NU
328 PARMAT(4) = ISRATE_LOC
329 IF(ASRATE == ZERO)ASRATE=INFINITY
330 PARMAT(5) = ASRATE
331c------------------------------------
332C Formulation for solid elements time step computation.
333 PARMAT(16) = 2
334 PARMAT(17) = TWO*G/(C1+FOUR_OVER_3*G) ! == (1-2*nu)/(1-nu)
335C
336 NUVAR = 5 + MFUNC
337c
338 ! Properties compatibility
339 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
340 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
341C
342 !---LISTING OUTPUT---!
343 WRITE(IOUT,1001) TRIM(TITR),MAT_ID,60
344 WRITE(IOUT,1000)
345 IF(IS_ENCRYPTED)THEN
346 WRITE(IOUT,'(5x,a,//)')'confidential data'
347 ELSE
348 WRITE(IOUT,1002) RHO0
349 WRITE(IOUT,1100) E,NU,EPSMAX,EPSR1,EPSR2,FISOKIN,ISRATE_LOC,ASRATE
350 WRITE(IOUT,1200)(IFUNC(J),YFAC(J),RATE(J),J=1,MFUNC)
351 WRITE(IOUT,1300) IPFUN,PSCALE, IFUNCE,EINF,CE
352 WRITE(IOUT,*)' '
353 ENDIF
354
355
356 RETURN
357 1000 FORMAT(
358 & 5X,40H TABULATED ELASTIC PLASTIC LAW ,/,
359 & 5X,40H ----------------------------- ,//)
360 1001 FORMAT(
361 & 5X,A,/,
362 & 5X,'material number . . . . . . . . . . . . =',I10/,
363 & 5X,'material law. . . . . . . . . . . . . . =',I10/)
364 1002 FORMAT(
365 & 5X,'initial density . . . . . . . . . . . . =',1PG20.13/)
366 1100 FORMAT(
367 & 5X,'young''s modulus. . . . . . . . . . . .=',1PG20.13/
368 & 5X,'poisson''s ratio. . . . . . . . . . . .=',1PG20.13/
369 & 5X,'maximum plastic strain . . . . . . . ..=',1PG20.13/
370 & 5X,'tension failure strain 1 . . . . . . ..=',1PG20.13/
371 & 5X,'tension failure strain 2 . . . . . . ..=',1PG20.13/
372 & 5X,'iso-kinematic hardenning factor. . . ..=',1PG20.13/
373 & 5X,'smooth strain rate option. . . . . . ..=',I10/
374 & 5X,'strain rate cutting frequency . . . . .=',1PG20.13/)
375 1200 FORMAT(
376 & 5X,'yield stress FUNCTION number. . . . . .=',I10/
377 & 5X,'yield scale factor. . . . . . . . . . .=',1PG20.13/
378 & 5X,'strain rate . . . . . . . . . . . . . .=',1PG20.13)
379 1300 FORMAT(
380 & 5X,'pressure dependent yield function . . .=',I10/
381 & 5X,'pressure scale factor. . . . . . . . . =',1PG20.13/
382 & 5X,'young modulus scale factor function . . .=',I10/
383 & 5X,'young modulus einf . . . . . . . . . . . =',1PG20.13/
384 & 5X,'parameter ce . . . . . . . . . . . . . . =',1PG20.13)
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle