OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat77.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_mat77 ../starter/source/materials/mat/mat077/hm_read_mat77.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_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
31!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
32!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
33!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
34!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
35!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
36!||--- uses -----------------------------------------------------
37!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
38!|| message_mod ../starter/share/message_module/message_mod.F
39!|| submodel_mod ../starter/share/modules1/submodel_mod.f
40!||====================================================================
41 SUBROUTINE hm_read_mat77(
42 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NFUNC ,
43 . MAXFUNC ,IFUNC ,PARMAT ,MAT_ID ,PM ,
44 . ISRATE ,IMATVIS ,TITR ,UNITAB ,LSUBMODEL,
45 . MATPARAM ,JALE )
46C-----------------------------------------------
47C M o d u l e s
48C-----------------------------------------------
49 USE unitab_mod
50 USE elbuftag_mod
51 USE message_mod
52 USE matparam_def_mod
53 USE submodel_mod
55C-----------------------------------------------
56C ROUTINE DESCRIPTION :
57C ===================
58C READ MAT LAW77 WITH HM READER
59C this law is Ale law for air and foam is in lagrangian and is not activated thru ale option.
60C-----------------------------------------------
61C DUMMY ARGUMENTS DESCRIPTION:
62C ===================
63C UNITAB UNITS ARRAY
64C MAT_ID MATERIAL ID(INTEGER)
65C TITR MATERIAL TITLE
66C LSUBMODEL SUBMODEL STRUCTURE
67C-----------------------------------------------
68C I m p l i c i t T y p e s
69C-----------------------------------------------
70#include "implicit_f.inc"
71C-----------------------------------------------
72C C o m m o n B l o c k s
73C-----------------------------------------------
74#include "units_c.inc"
75#include "param_c.inc"
76C-----------------------------------------------
77C D u m m y A r g u m e n t s
78C-----------------------------------------------
79 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
80 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
81 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
82 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
83 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,ISRATE,IMATVIS,JALE
84 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
85 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
86 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
87 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
88 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
89C-----------------------------------------------
90C L o c a l V a r i a b l e s
91C-----------------------------------------------
92 INTEGER :: I,J,ILAW,NRATEN,NRATEP,LFUNC,IUNLOAD,IFUNCR,IFUNCK,
93 . IFLAG,NPAR_FOAM,ICLOS,INCGAS
94 my_real :: E,NU,G,RHOA,RHO0,RHOR,VISC,VISCV,EXPO,HYS,FRAC,
95 . FCUT, A1,A2,E0,EMAX,EPSMAX,P0,AA,BB,KK,TAUX,BULK,EINT0,
96 . gamma,pext,fp_ini,rhoext,eint_ext,fscal_unit
97 INTEGER ,DIMENSION(15) :: FLOAD,FUNLOAD
98 my_real ,DIMENSION(30) :: rate,yfac,rload,sload,runload,sunload
99 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
100C=======================================================================
101 is_encrypted = .false.
102 is_available = .false.
103c
104 ilaw = 77
105 imatvis = 2
106 jale = 3
107c------------------------------------------
108 CALL hm_option_is_encrypted(is_encrypted)
109c------------------------------------------
110c
111c foam input cards
112c
113 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
115c
116 CALL hm_get_floatv('MAT_E' ,e0 ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('E_Max' ,emax ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv('MAT_EPS' ,epsmax ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv('MAT_FP0' ,fp_ini ,is_available, lsubmodel, unitab)
121c
122 CALL hm_get_floatv('MAT_asrate' ,fcut ,is_available, lsubmodel, unitab)
123 CALL hm_get_intv ('ISRATE' ,israte ,is_available,lsubmodel)
124 CALL hm_get_intv ('NRATEP' ,nratep ,is_available,lsubmodel)
125 CALL hm_get_intv ('NRATEN' ,nraten ,is_available,lsubmodel)
126 CALL hm_get_intv ('MAT_Iflag' ,iunload ,is_available,lsubmodel)
127 CALL hm_get_floatv('MAT_SHAPE' ,expo ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('MAT_HYST' ,hys ,is_available, lsubmodel, unitab)
129c
130 IF (nratep > 0) THEN
131 DO i=1,nratep
132 CALL hm_get_int_array_index ('FUN_LOAD' ,fload(i),i,is_available,lsubmodel)
133 CALL hm_get_float_array_index('STRAINRATE_LOAD',rload(i),i,is_available,lsubmodel,unitab)
134 CALL hm_get_float_array_index('SCALE_LOAD' ,sload(i),i,is_available,lsubmodel,unitab)
135 ENDDO
136 ENDIF
137c
138 IF (nraten > 0) THEN
139 DO i=1,nraten
140 CALL hm_get_int_array_index ('FUN_UNLOAD' ,funload(i),i,is_available,lsubmodel)
141 CALL hm_get_float_array_index('STRAINRATE_UNLOAD',runload(i),i,is_available,lsubmodel,unitab)
142 CALL hm_get_float_array_index('SCALE_UNLOAD' ,sunload(i),i,is_available,lsubmodel,unitab)
143 ENDDO
144 ENDIF
145c
146c air input cards
147c
148 CALL hm_get_floatv('Lqud_Rho_g' ,rhoa ,is_available, lsubmodel, unitab)
149 CALL hm_get_floatv('MAT_P0' ,p0 ,is_available, lsubmodel, unitab)
150 CALL hm_get_floatv('GAMMA' ,gamma ,is_available, lsubmodel, unitab)
151 CALL hm_get_floatv('MAT_POROS' ,frac ,is_available, lsubmodel, unitab)
152c
153 CALL hm_get_floatv('Rho_Gas' ,rhoext ,is_available, lsubmodel, unitab)
154 CALL hm_get_floatv('PEXT' ,pext ,is_available, lsubmodel, unitab)
155 CALL hm_get_intv ('ISFLAG' ,iclos ,is_available,lsubmodel)
156 CALL hm_get_intv ('gflag' ,INCGAS ,IS_AVAILABLE,LSUBMODEL)
157c
158 CALL HM_GET_FLOATV('mat_alpha' ,AA ,IS_AVAILABLE, LSUBMODEL, UNITAB)
159 CALL HM_GET_FLOATV('mat_beta' ,BB ,IS_AVAILABLE, LSUBMODEL, UNITAB)
160 CALL HM_GET_FLOATV('tau_shear' ,TAUX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
161 CALL HM_GET_FLOATV('mat_k' ,KK ,IS_AVAILABLE, LSUBMODEL, UNITAB)
162c
163 CALL HM_GET_INTV ('fun_a1' ,IFUNCK ,IS_AVAILABLE,LSUBMODEL)
164 CALL HM_GET_INTV ('fun_b1' ,IFUNCR ,IS_AVAILABLE,LSUBMODEL)
165c
166 CALL HM_GET_FLOATV_DIM('scale_load',FSCAL_UNIT,IS_AVAILABLE,LSUBMODEL,UNITAB)
167c-----------------------------------------------------------------------
168c Check consistency of tabulated input data
169c-----------------------------------------------------------------------
170 IF (NRATEP == 0) THEN
171 CALL ANCMSG(MSGID=866,
172 . MSGTYPE=MSGERROR,
173 . ANMODE=ANINFO_BLIND,
174 . I1=MAT_ID,
175 . C1=TITR)
176 ENDIF
177.AND..OR. IF (NRATEN == 0 (IUNLOAD == 0 IUNLOAD == 1) ) THEN
178 CALL ANCMSG(MSGID=867,
179 . MSGTYPE=MSGERROR,
180 . ANMODE=ANINFO_BLIND,
181 . I1=MAT_ID,
182 . C1=TITR)
183 ENDIF
184
185c
186 DO I = 1, NRATEP
187 IF (SLOAD(I) == ZERO) SLOAD(I) = ONE*FSCAL_UNIT
188 IFUNC(I) = FLOAD(I)
189 RATE(I) = RLOAD(I)
190 YFAC(I) = SLOAD(I)
191 ENDDO
192 NFUNC = NRATEP + NRATEN
193 DO I = 1, NRATEN
194 J = NRATEP + I
195 IF (SUNLOAD(I) == ZERO) SUNLOAD(I) = ONE*FSCAL_UNIT
196 IFUNC(J) = FUNLOAD(I)
197 RATE(J) = RUNLOAD(I)
198 YFAC(J) = SUNLOAD(I)
199 ENDDO
200c
201 DO I=1,NFUNC
202 IF (IFUNC(I) == 0)THEN
203 CALL ANCMSG(MSGID=126,
204 . MSGTYPE=MSGERROR,
205 . ANMODE=ANINFO_BLIND_1,
206 . I1=MAT_ID,
207 . C1=TITR,
208 . I2=IFUNC(I))
209 ENDIF
210 ENDDO
211c---
212 IFUNC(NFUNC + 1) = IFUNCK
213 IFUNC(NFUNC + 2) = IFUNCR
214 NFUNC = NFUNC + 2
215c-----------------------------------------------------------------------
216c Default values
217c-----------------------------------------------------------------------
218 IF (EMAX == ZERO) EMAX = E0
219 IF (EPSMAX == ZERO) EPSMAX = ONE
220 IF (GAMMA == ZERO) GAMMA = ONEP4
221 IF (RHOEXT == 0) RHOEXT = RHOA
222 IF (EXPO == ZERO) EXPO = ONE
223 IF (HYS == ZERO) HYS = ONE
224 IF (IUNLOAD == 0) IUNLOAD = 1
225 ISRATE = 1 ! force strain rate computation
226 IF (FCUT == ZERO) FCUT = INFINITY
227c-----------------------------------------------------------------------
228 EINT0 = P0/(GAMMA - ONE)
229 EINT_EXT = PEXT/(GAMMA - ONE)
230 A1 = (EMAX-E0) / EPSMAX
231 G = HALF*E0 / (ONE + NU)
232 BULK = E0/THREE / (ONE - TWO*NU)
233 EINT0 = P0/(GAMMA - ONE)
234 EINT_EXT = PEXT/(GAMMA - ONE)
235c-----------------------------------------------------------------------
236 UPARAM(2) = E0
237 UPARAM(3) = A1
238 UPARAM(4) = EPSMAX
239 UPARAM(5) = G
240 UPARAM(6) = NU
241 UPARAM(7) = NRATEP
242 UPARAM(8) = NRATEN
243 DO I=1,NFUNC - 2
244 UPARAM(I + 8) = RATE(I)
245 UPARAM(I + 8 + NFUNC) = YFAC(I)
246 END DO
247 UPARAM(2*NFUNC + 9) = IUNLOAD
248 UPARAM(2*NFUNC + 10) = EXPO
249 UPARAM(2*NFUNC + 11) = HYS
250 UPARAM(2*NFUNC + 12) = EMAX
251 NPAR_FOAM = 13 + 2*NFUNC
252 UPARAM(NPAR_FOAM + 1) = RHOA
253 UPARAM(NPAR_FOAM + 2) = P0
254 UPARAM(NPAR_FOAM + 3) = GAMMA
255 UPARAM(NPAR_FOAM + 4) = FRAC
256 UPARAM(NPAR_FOAM + 5) = PEXT
257 UPARAM(NPAR_FOAM + 6) = FP_INI
258 UPARAM(NPAR_FOAM + 7) = EINT0
259 UPARAM(NPAR_FOAM + 8) = KK
260c-----------------------------------------------------------------------
261 NUPARAM = NPAR_FOAM + 8
262 NUVAR = 23
263c-----------------------------------------------------------------------
264
265 PARMAT(1) = BULK
266 PARMAT(2) = E0
267 PARMAT(3) = NU
268 PARMAT(4) = ISRATE
269 PARMAT(5) = FCUT
270 PARMAT(16) = 2 ! Formulation for solid elements time step computation
271 PARMAT(17) = (ONE - TWO*NU)/(ONE - NU)
272c
273 PM(192) = RHOA
274 PM(193) = FRAC
275 PM(194) = AA
276 PM(195) = BB
277 PM(196) = TAUX
278 PM(197) = KK
279 PM(198) = ICLOS
280 PM(199) = RHOEXT
281 PM(200) = EINT_EXT
282 PM(201) = INCGAS
283c--------------------------
284 PM(1) = RHOR
285 PM(89) = RHO0
286c----------------
287 IF (NU > 0.49) THEN
288 CALL INIT_MAT_KEYWORD(MATPARAM,"INCOMPRESSIBLE")
289 ELSE
290 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
291 ENDIF
292 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
293 ! Properties compatibility
294 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
295c--------------------------------------------------
296c Starter output
297c--------------------------------------------------
298 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,77
299 WRITE(IOUT,1100)
300 IF (IS_ENCRYPTED) THEN
301 WRITE(IOUT,'(5x,a,//)')'confidential data'
302 ELSE
303 WRITE(IOUT,1200) RHO0
304 WRITE(IOUT,1300) E0,NU,EMAX,EPSMAX,FP_INI
305 WRITE(IOUT,1400) FCUT,ISRATE,NRATEP,NRATEN,IUNLOAD,EXPO,HYS
306 WRITE(IOUT,1500)(IFUNC(J),RATE(J),YFAC(J),J=1,NRATEP)
307 WRITE(IOUT,1600)(IFUNC(J+NRATEP),RATE(J+NRATEP),YFAC(J+NRATEP),J=1,NRATEN)
308 WRITE(IOUT,2000)
309 WRITE(IOUT,2100) RHOA,P0,GAMMA,FRAC,IFUNCR
310 WRITE(IOUT,2200)
311 WRITE(IOUT,2300) RHOEXT,PEXT,ICLOS,INCGAS
312 WRITE(IOUT,3000)
313 WRITE(IOUT,3100) AA,BB,TAUX,KK,IFUNCK
314 ENDIF
315c-----------------------------------------------------------------------
316 1000 FORMAT(/
317 & 5X,A,/,
318 & 5X,'material number. . . . . . . . . . . . . . .=',I10/,
319 & 5X,'material law . . . . . . . . . . . . . . . .=',I10/)
320 1100 FORMAT
321 &(5X,'material : tabulated non-linear visco elastic(law77) ',/,
322 & 5X,'----------------------------------------------------- ',/)
323 1200 FORMAT(
324 & 5X,'initial density . . . . . . . . . . . . .=',1PG20.13/)
325 1300 FORMAT(
326 & 5X,'initial young''s modulus . . . . . . . . . .=',1PG20.13/,
327 & 5X,'poisson''s ratio . . . . . . . . . . . . . .=',1PG20.13/,
328 & 5X,'maximum young''s modulus . . . . . . . . . .=',1PG20.13/,
329 & 5X,'maximum strain . . . . . . . . . . . . . .=',1PG20.13/,
330 & 5X,'initial foam pressure. . . . . . . . . . . .=',1PG20.13/)
331 1400 FORMAT(
332 & 5X,'strain rate cutoff frequency . . . . . . . .=',1PG20.13/,
333 & 5X,'flag for strain rate . . . . . . . .=',I10/,
334 & 5X,'number of load stress functions . . . . . .=',I10/,
335 & 5X,'number of unload stress functions. . . . . .=',I10/,
336 & 5X,'choice of unloading formulation. . . . . . .=',I10/,
337 & 5X,'shape factor for unloading . . . . . . . . .=',1PG20.13/,
338 & 5X,'hysteretic unloading factor . . . . . . . .=',1PG20.13 )
339 1500 FORMAT(
340 & 5X,'load yield stress FUNCTION number. . . . . .=',I10/,
341 & 5X,'strain rate. . . . . . . . . . . . . . . . .=',1PG20.13/,
342 & 5X,'scale factor . . . . . . . . . . . . . . . .=',1PG20.13/)
343 1600 FORMAT(
344 & 5X,'unload yield stress function number. . . . .=',I10/,
345 & 5X,'strain rate. . . . . . . . . . . . . . . . .=',1PG20.13/,
346 & 5X,'scale factor . . . . . . . . . . . . . . . .=',1PG20.13/)
347 2000 FORMAT(
348 & 5X,' gas parameters' ,/,
349 & 5X,' -----------------',/)
350 2100 FORMAT(
351 & 5X,'density. . . . . . . . . . . . . . . . . . .=',1PG20.13/,
352 & 5X,'p0 . . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
353 & 5X,'gamma. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
354 & 5X,'initial gas fraction (R) . . . . . . . . . .=',1PG20.13/,
355 & 5X,'scale function for gas fraction r(V/V0). . .=',I10/)
356 2200 FORMAT(
357 & 5X,' external gas parameters' ,/,
358 & 5X,' -----------------------',/)
359 2300 FORMAT(
360 & 5X,'density. . . . . . . . . . . . . . . . . . .=',1PG20.13/,
361 & 5X,'pext. . . . . . . .. . . . . . . . . . . . .=',1PG20.13/,
362 & 5X,'flag for closed foam . . . . . . . . . . . .=',I10/
363 & 5X,'incomnig gas flag. . . . . . . . . . . . . .=',I10/ )
364 3000 FORMAT(
365 & 5X,' darcy parameters ',/,
366 & 5X,' -----------------',/)
367 3100 FORMAT(
368 & 5X,'a. . . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
369 & 5X,'beta . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
370 & 5X,'taux . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
371 & 5X,'initial permeability (K) . . . . . . . . . .=',1PG20.13/
372 & 5X,'scale function for permeability k(V/V0). . .=',I10/ )
373c-----------------------------------------------------------------------
374 RETURN
375 END
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_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 hm_read_mat77(uparam, maxuparam, nuparam, nuvar, nfunc, maxfunc, ifunc, parmat, mat_id, pm, israte, imatvis, titr, unitab, lsubmodel, matparam, jale)
for(i8=*sizetab-1;i8 >=0;i8--)
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