OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat66.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_mat66 ../starter/source/materials/mat/mat066/hm_read_mat66.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_float_array_index ../starter/source/devtools/hm_reader/hm_get_float_array_index.F
30!|| hm_get_float_array_index_dim ../starter/source/devtools/hm_reader/hm_get_float_array_index_dim.F
31!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.f
32!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
33!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
34!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
35!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
36!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
37!||--- uses -----------------------------------------------------
38!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
39!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
40!|| message_mod ../starter/share/message_module/message_mod.F
41!|| submodel_mod ../starter/share/modules1/submodel_mod.f
42!||====================================================================
43 SUBROUTINE hm_read_mat66(UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,IFUNC ,
44 . MAXFUNC ,MFUNC , PARMAT ,UNITAB ,ID ,
45 . MTAG ,TITR , LSUBMODEL,PM ,MATPARAM )
46C-----------------------------------------------
47C D e s c r i p t i o n
48C-----------------------------------------------
49C
50C DUMMY ARGUMENTS DESCRIPTION:
51C ===================
52C
53C NAME DESCRIPTION
54C
55C IPM MATERIAL ARRAY(INTEGER)
56C PM MATERIAL ARRAY(REAL)
57C UNITAB UNITS ARRAY
58C ID MATERIAL ID(INTEGER)
59C TITR MATERIAL TITLE
60C LSUBMODEL SUBMODEL STRUCTURE
61C
62C-----------------------------------------------
63C M o d u l e s
64C-----------------------------------------------
65 USE unitab_mod
66 USE elbuftag_mod
67 USE message_mod
68 USE submodel_mod
69 USE matparam_def_mod
72C-----------------------------------------------
73C I m p l i c i t T y p e s
74C-----------------------------------------------
75#include "implicit_f.inc"
76C-----------------------------------------------
77C C o m m o n B l o c k s
78C-----------------------------------------------
79#include "units_c.inc"
80#include "param_c.inc"
81C-----------------------------------------------
82C D u m m y A r g u m e n t s
83C-----------------------------------------------
84 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
85 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
86 my_real, DIMENSION(100) ,INTENT(INOUT) :: parmat
87 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
88 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
89 INTEGER, INTENT(INOUT) :: MFUNC,NUPARAM,NUVAR
90 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
91 INTEGER,INTENT(IN) :: ID,MAXFUNC,MAXUPARAM
92 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
93 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
94 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
95C-----------------------------------------------
96C L o c a l V a r i a b l e s
97C-----------------------------------------------
98 INTEGER :: NBMAT, MAT_ID ! Number of declared materials
99 INTEGER :: I,J,IU,NC,NT,VP,ILAW,ISRATE,IRATE
100 my_real :: e,ec,nu,g,cp,epsp0,sigy,rho0,rhor,
101 . fisokin,yfac_unit,fcut,pc,pt,c1,rpct
102 my_real :: rate(maxfunc+1),yfac(maxfunc+1)
103 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
104C-----------------------------------------------
105C S o u r c e L i n e s
106C-----------------------------------------------
107 rate(1) = 0
108 is_encrypted = .false.
109 is_available = .false.
110 ilaw = 66
111C initialization
112 nc = 0
113 nt = 0
114 epsp0 = ep20
115 cp = one
116 vp = 0
117 sigy = zero
118C--------------------------------------------------
119C EXTRACT DATA (IS OPTION CRYPTED)
120C--------------------------------------------------
121 CALL hm_option_is_encrypted(is_encrypted)
122C-----------------------------------------------
123Card1
124 CALL hm_get_floatv('mat_rho' ,RHO0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
125 CALL HM_GET_FLOATV('refer_rho' ,RHOR ,IS_AVAILABLE, LSUBMODEL, UNITAB)
126C-----------------------------------------------
127Card2
128 CALL HM_GET_FLOATV('mat_e' ,E ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129 CALL HM_GET_FLOATV('mat_nu' ,NU ,IS_AVAILABLE, LSUBMODEL, UNITAB)
130 CALL HM_GET_FLOATV('mat_hard' ,FISOKIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 CALL HM_GET_FLOATV('mat_asrate' ,FCUT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
132 CALL HM_GET_INTV ('fsmooth' ,ISRATE ,IS_AVAILABLE,LSUBMODEL)
133 CALL HM_GET_INTV ('israte' ,IRATE ,IS_AVAILABLE,LSUBMODEL)
134C-----------------------------------------------
135Card3
136 CALL HM_GET_FLOATV('mat_pc' ,PC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
137 CALL HM_GET_FLOATV('mat_pt' ,PT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
138 CALL HM_GET_FLOATV('mat_ec' ,EC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
139 CALL HM_GET_FLOATV('mat_rpct' ,RPCT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
140C-----------------------------------------------
141C!!
142 IF(IRATE == 0) IRATE = 1
143Card3
144 IF(IRATE < = 3) THEN
145 CALL HM_GET_INTV ('fun_a1' ,IFUNC(1) ,IS_AVAILABLE,LSUBMODEL)
146 CALL HM_GET_INTV ('fun_a2' ,IFUNC(2) ,IS_AVAILABLE,LSUBMODEL)
147 CALL HM_GET_FLOATV('fscale11' ,YFAC(1) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
148 CALL HM_GET_FLOATV('fscale22' ,YFAC(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
149 MFUNC = 2
150C unit
151 CALL HM_GET_FLOATV_DIM('fscale11' ,YFAC_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
152 RATE(1) = ZERO
153 IF(YFAC(1) == ZERO) YFAC(1)= YFAC_UNIT
154 CALL HM_GET_FLOATV_DIM('fscale22' ,YFAC_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
155 IF(YFAC(2) == ZERO) YFAC(2)= YFAC_UNIT
156 RATE(2) = ZERO
157 ENDIF
158C
159 IF(IRATE < = 2) THEN
160 CALL HM_GET_FLOATV('epsilon_0' ,EPSP0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
161 CALL HM_GET_FLOATV('mat_c0' ,CP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
162 CALL HM_GET_FLOATV('sigma_r' ,SIGY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
163 CALL HM_GET_INTV ('vp' ,VP ,IS_AVAILABLE,LSUBMODEL)
164C
165.AND. IF(EPSP0 == ZERO CP == ZERO)EPSP0 = EP20
166 IF(EPSP0 == ZERO) EPSP0 = ONE !!!
167
168C
169 ELSEIF(IRATE == 3) THEN
170 CALL HM_GET_INTV ('fun_b1' ,IFUNC(3) ,IS_AVAILABLE,LSUBMODEL)
171 CALL HM_GET_INTV ('fun_b2' ,IFUNC(4) ,IS_AVAILABLE,LSUBMODEL)
172 CALL HM_GET_FLOATV('fscale33' ,YFAC(3) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
173 CALL HM_GET_FLOATV('fscale12' ,YFAC(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
174 MFUNC = 4
175 DO I=1,MFUNC
176 RATE(I) = ZERO
177 ENDDO
178C unit
179 CALL HM_GET_FLOATV_DIM('fscale33' ,YFAC_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
180 IF(YFAC(3) == ZERO) YFAC(3)= YFAC_UNIT
181 CALL HM_GET_FLOATV_DIM('fscale12' ,YFAC_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
182 IF(YFAC(4) == ZERO) YFAC(4)= YFAC_UNIT
183
184 ELSEIF(IRATE == 4) THEN
185 CALL HM_GET_INTV ('nfunc' ,NC ,IS_AVAILABLE,LSUBMODEL)
186 CALL HM_GET_INTV ('tfunc' ,NT ,IS_AVAILABLE,LSUBMODEL)
187 DO I= 1,NC
188 CALL HM_GET_INT_ARRAY_INDEX('abg_ipt' ,IFUNC(I) ,I,IS_AVAILABLE, LSUBMODEL)
189 CALL HM_GET_FLOAT_ARRAY_INDEX('fp1' ,YFAC(I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
190 CALL HM_GET_FLOAT_ARRAY_INDEX('k_a1' ,RATE(I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
191C
192 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('fp1' ,YFAC_UNIT ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
193 IF(YFAC(I) == ZERO) YFAC(I) = YFAC_UNIT
194 ENDDO
195C
196 IF (NC == 1) THEN
197 NC = NC +1
198 IFUNC(2) = IFUNC(1)
199 RATE(1) = ZERO
200 RATE(2) = ONE
201 YFAC(2) = YFAC(1)
202 ELSEIF(RATE(1) /= ZERO)THEN
203 NC = NC + 1
204 DO J=NC,1,-1
205 IFUNC(J+1)=IFUNC(J)
206 RATE(J+1) =RATE(J)
207 YFAC(J+1) =YFAC(J)
208 ENDDO
209 RATE(1)=ZERO
210 ENDIF
211
212 DO I= 1,NT
213 CALL HM_GET_INT_ARRAY_INDEX('abg_ipdel',IFUNC(NC + I) ,I,IS_AVAILABLE, LSUBMODEL)
214 CALL HM_GET_FLOAT_ARRAY_INDEX('fp2' ,YFAC(NC + I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
215 CALL HM_GET_FLOAT_ARRAY_INDEX('k_b1' ,RATE(NC + I) ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
216C unity
217 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('fp2' ,YFAC_UNIT ,I,IS_AVAILABLE, LSUBMODEL, UNITAB)
218 IF(YFAC(NC + I) == ZERO) YFAC(NC + I) = YFAC_UNIT
219 ENDDO
220 IF (NT == 1) THEN
221 NT = NT +1
222 IFUNC(NC + 2) = IFUNC(NC + 1)
223 RATE(NC + 2) = ONE
224 RATE(NC + 1) = ZERO
225 YFAC(NC + 2) = YFAC(NC + 1)
226 ELSEIF(RATE(NC + 1) /= ZERO)THEN
227 NT = NT + 1
228 DO J=NT,1,-1
229 IFUNC(NC + J + 1) = IFUNC(NC + J)
230 RATE(NC + J + 1) = RATE(NC + J)
231 YFAC(NC + J + 1) = YFAC(NC + J)
232 ENDDO
233 RATE(NC + 1)=ZERO
234 ENDIF
235 MFUNC = NC + NT
236c
237 DO I=1,NC-1
238 IF(RATE(I) > RATE(I+1))THEN
239 CALL ANCMSG(MSGID=478,
240 . MSGTYPE=MSGERROR,
241 . ANMODE=ANINFO_BLIND_1,
242 . I1=ID,
243 . C1=TITR)
244 GOTO 100
245 ENDIF
246 ENDDO
247 100 CONTINUE
248
249 DO I=1,NT-1
250 IF(RATE(NC+I) >= RATE(NC+I+1))THEN
251 CALL ANCMSG(MSGID=478,
252 . MSGTYPE=MSGERROR,
253 . ANMODE=ANINFO_BLIND_1,
254 . I1=ID,
255 . C1=TITR)
256 GOTO 200
257 ENDIF
258 ENDDO
259 200 CONTINUE
260c-----
261 ENDIF ! IRATE
262c
263c-----------------------------------------------------------------------
264c
265 RHOR=RHO0
266 IF(RHOR==ZERO)RHOR=RHO0
267 PM(1) =RHOR
268 PM(89)=RHO0
269C
270 DO I=1,MFUNC
271 IF(IFUNC(I) == 0)THEN
272 CALL ANCMSG(MSGID=126,
273 . MSGTYPE=MSGERROR,
274 . ANMODE=ANINFO,
275 . I1=ID,
276 . C1=TITR,
277 . I2=IFUNC(I))
278 ENDIF
279 ENDDO
280C
281 IF(NU == HALF)NU=ZEP499
282.AND. IF(CP == ZERO IRATE == 1) CP = ONE
283 IF(IRATE == 1 ) CP = ONE/CP
284 G = HALF*E/( ONE + NU)
285C
286c-----------------------------------------------------------------------
287 UPARAM(1) = IRATE
288 UPARAM(2) = E
289 UPARAM(3) = E/(ONE - NU*NU)
290 UPARAM(4) = NU*UPARAM(3)
291 UPARAM(5) = G
292 UPARAM(6) = NU
293 UPARAM(7) = PC
294 UPARAM(8) = PT
295 UPARAM(9) = EPSP0
296 UPARAM(10) = CP
297 UPARAM(11) = NC
298 UPARAM(12) = NT
299 UPARAM(13) = FISOKIN
300 DO I= 1,MFUNC
301 UPARAM(13+I) = YFAC(I)
302 UPARAM(13+I+MFUNC) = RATE(I)
303 ENDDO
304C
305 UPARAM(14 + 2*MFUNC) = SIGY
306 UPARAM(15 + 2*MFUNC) = VP
307 UPARAM(16 + 2*MFUNC) = EC
308 UPARAM(17 + 2*MFUNC) = RPCT
309 NUPARAM = 17 + 2*MFUNC
310c
311 C1=E/THREE/(ONE - TWO*NU)
312C
313 PARMAT(1) = C1
314 PARMAT(2) = E
315 PARMAT(3) = NU
316 PARMAT(4) = ISRATE
317 PARMAT(5) = FCUT
318C
319 NUVAR = 7 + MFUNC
320C-----------------------
321 MTAG%G_EPSD = 1
322 MTAG%L_EPSD = 1
323 MTAG%G_PLA = 1
324 MTAG%L_PLA = 1
325C-----------------------
326 ! Properties compatibility
327 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
328 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
329 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
330C ----------------
331C
332 WRITE(IOUT,1001) TRIM(TITR),ID,ILAW
333 WRITE(IOUT,1000)
334 IF(IS_ENCRYPTED)THEN
335 WRITE(IOUT,'(5x,a,//)')'confidential data'
336 ELSE
337 WRITE(IOUT,1002) RHO0
338 WRITE(IOUT,1100) E,EC,NU,PC,PT,RPCT,FISOKIN,ISRATE,FCUT
339 WRITE(IOUT,1200) IRATE
340 IF(IRATE <= 2) THEN
341 WRITE(IOUT,1300) IFUNC(1),YFAC(1)
342 write(IOUT,1400) IFUNC(2),YFAC(2)
343 write(IOUT,1500) EPSP0
344 IF (IRATE == 1) THEN
345 WRITE(IOUT,1510) CP
346 ELSE
347 WRITE(IOUT,1520) CP
348 ENDIF
349 write(IOUT,1530) VP,SIGY
350 ELSEIF(IRATE == 3) THEN
351 WRITE(IOUT,1300) IFUNC(1),YFAC(1)
352 write(IOUT,1400) IFUNC(2),YFAC(2)
353 write(IOUT,1600) IFUNC(3),YFAC(3)
354 WRITE(IOUT,1700) IFUNC(4),YFAC(4)
355 ELSE
356 DO I=1,NC
357 WRITE(IOUT,2000) IFUNC(I),YFAC(I),RATE(I)
358 ENDDO
359 DO I=1,NT
360 WRITE(IOUT,3000) IFUNC(I+NC),YFAC(I+NC),RATE(I+NC)
361 ENDDO
362 ENDIF
363 ENDIF
364C
365c-----------------------------------------------------------------
366 1000 FORMAT(
367 & 5X,' tabulated tension-compression plastic law ',/,
368 & 5X,' ----------------------------- ' ,//)
369 1001 FORMAT(/
370 & 5X,A,/,
371 & 5X,'material number. . . . . . . . . . . . =',I10/,
372 & 5X,'material law . . . . . . . . . . . . . =',I10/)
373 1002 FORMAT(
374 & 5X,'initial density. . . . . . . . . . . . =',1PG20.13/)
375 1100 FORMAT(
376 & 5X,'young''s modulus. . . . . . . . . . . . .=',1PG20.13/
377 & 5X,'young''s modulus in compression . . . . .=',1PG20.13/
378 & 5X,'poisson''s ratio. . . . . . . . . . . . .=',1PG20.13/
379 & 5X,'compression mean stress. . . . . . . . .=',1PG20.13/
380 & 5X,'traction mean stress . . . . . . . . . .=',1PG20.13/
381 & 5X,'fraction of mean stresses . . . . . . . .=',1PG20.13/
382 & 5X,'iso-kinematic hardenning factor . . . . .=',1PG20.13/
383 & 5X,'smooth strain rate option . . . . . . . .=',I10/
384 & 5X,'strain rate cutting frequency . . . . . .=',1PG20.13/)
385 1200 FORMAT(
386 & 5X,'strain rate formulation option . . . . .=', I10/)
387 1300 FORMAT(
388 & 5X,'compression yield stress FUNCTION number.=',I10/
389 & 5X,'yield scale factor. . . . . . . . . . . .=',1PG20.13)
390 1400 FORMAT(
391 & 5X,'traction yield stress function number . .=',i10/
392 & 5x,'YIELD SCALE FACTOR. . . . . . . . . . . .=',1pg20.13)
393 1500 FORMAT(
394 & 5x,'REFERENCE STRAIN RATE . . . . . . . . . .=',1pg20.13)
395 1510 FORMAT(
396 & 5x,'STRAIN RATE PARAMETER 1/C . . . . . . . .=',1pg20.13)
397 1520 FORMAT(
398 & 5x,'STRAIN RATE PARAMETER C . . . . . . . . .=',1pg20.13)
399 1530 FORMAT(
400 & 5x,'OPTIONAL STRAIN RATE EFFECT : . . . . . .=',i10/,
401 & 5x,' 0 : STRAIN RATE EFFECT IS ACTIVATED ',/,
402 & 5x,' 1 : VISCPLASTIC OPTION IS ACTIVATED ',/,
403 & 5x,'OPTIONAL INITIAL YIELD STRESS . . . . . .=',1pg20.13/)
404 1600 FORMAT(
405 & 5x,
406 . 'COMPRESSION STRAIN RATE SCALING EFFECT FUNCTION NUMBER .=',i10/
407 & 5x,'SCALE FACTOR. . . . . . . . . . . . . . .=',1pg20.13)
408
409 1700 FORMAT(
410 & 5x,
411 . 'TRACTION STRAIN RATE SCALING EFFECT FUNCTION NUMBER . . .=',i10/
412 & 5x,'SCALE FACTOR. . . . . . . . . . . . . . .=',1pg20.13)
413 2000 FORMAT(
414 & 5x,'COMPRESSION YIELD STRESS FUNCTION NUMBER.=',i10/
415 & 5x,' YIELD SCALE FACTOR. . . . . .=',1pg20.13/
416 & 5x,'STRAIN RATE. . . . . . . . . .=',1pg20.13)
417 3000 FORMAT(
418 & 5x,'TRACTION YIELD STRESS FUNCTION NUMBER . .=',i10/
419 & 5x,'YIELD SCALE FACTOR. . . . . . . . . . . .=',1pg20.13/
420 & 5x,'STRAIN RATE . . . . . . . . . . . . . . .=',1pg20.13)
421c-----------------------------------------------------------------
422 RETURN
423 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat66(uparam, maxuparam, nuparam, nuvar, ifunc, maxfunc, mfunc, parmat, unitab, id, mtag, titr, lsubmodel, pm, matparam)
integer, parameter nchartitle
program starter
Definition starter.F:39
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)
Definition tabulated.F:32