OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat35.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_mat35 ../starter/source/materials/mat/mat035/hm_read_mat35.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_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
30!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
31!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
32!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
33!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
34!||--- uses -----------------------------------------------------
35!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
36!|| message_mod ../starter/share/message_module/message_mod.F
37!|| submodel_mod ../starter/share/modules1/submodel_mod.F
38!||====================================================================
39 SUBROUTINE hm_read_mat35(
40 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,IFUNC ,
41 . MAXFUNC ,NFUNC ,PARMAT ,UNITAB ,PM ,
42 . ISRATE ,ID ,TITR ,LSUBMODEL,IMATVIS ,
43 . MTAG ,MATPARAM )
44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE unitab_mod
48 USE message_mod
49 USE submodel_mod
50 USE elbuftag_mod
51 USE matparam_def_mod
53C-----------------------------------------------
54C ROUTINE DESCRIPTION :
55C ===================
56C READ MAT LAW35 (FOAM_VISC) WITH HM READER
57C-----------------------------------------------
58C DUMMY ARGUMENTS DESCRIPTION:
59C ===================
60C UNITAB UNITS ARRAY
61C ID MATERIAL ID(INTEGER)
62C TITR MATERIAL TITLE
63C LSUBMODEL SUBMODEL STRUCTURE
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71#include "units_c.inc"
72#include "param_c.inc"
73C-----------------------------------------------
74C D u m m y A r g u m e n t s
75C-----------------------------------------------
76 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
77 INTEGER, INTENT(IN) :: ID,MAXUPARAM,MAXFUNC
78 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
79 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
80 INTEGER, INTENT(INOUT) :: IMATVIS
81 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,ISRATE
82 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
83 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
84 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
85 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
86 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
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 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
92 INTEGER :: FCT_ID,IFLAG,ILAW
93 my_real :: RHO0,RHOR,E,E1,E2,ET,POISSON,POISSONT,RELVEXP,MU,LAMBDA,
94 . C1,C2,C3,PMIN,P0,PHI,GAMA0,BULK,FSCAL,FSCAL_UNIT,ASRATE
95C=======================================================================
96 is_encrypted = .false.
97 is_available = .false.
98 imatvis = 1
99 ilaw = 35
100 israte = 0
101c
102c------------------------------------------------------------------------------
103 CALL hm_option_is_encrypted(is_encrypted)
104c
105 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
107c
108 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv('MAT_NU' ,poisson ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_E1' ,e1 ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv('mat_e2' ,E2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
112 CALL HM_GET_FLOATV('mat_n' ,RELVEXP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
113c
114 CALL HM_GET_FLOATV('mat_co1' ,C1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
115 CALL HM_GET_FLOATV('mat_co2' ,C2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
116 CALL HM_GET_FLOATV('mat_co3' ,C3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
117 CALL HM_GET_INTV ('itype' ,IFLAG ,IS_AVAILABLE, LSUBMODEL)
118 CALL HM_GET_FLOATV('mat_pc' ,PMIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
119c
120 CALL HM_GET_INTV ('fun_a1' ,FCT_ID ,IS_AVAILABLE, LSUBMODEL)
121 CALL HM_GET_FLOATV('ifscale' ,FSCAL ,IS_AVAILABLE, LSUBMODEL, UNITAB)
122 CALL HM_GET_INTV ('fsmooth' ,ISRATE ,IS_AVAILABLE, LSUBMODEL)
123 CALL HM_GET_FLOATV('fcut' ,ASRATE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
124c
125 CALL HM_GET_FLOATV('mat_etan' ,ET ,IS_AVAILABLE, LSUBMODEL, UNITAB)
126 CALL HM_GET_FLOATV('mat_nut' ,POISSONT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
127 CALL HM_GET_FLOATV('mat_eta2' ,MU ,IS_AVAILABLE, LSUBMODEL, UNITAB)
128 CALL HM_GET_FLOATV('mat_eta1' ,LAMBDA ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129c
130 CALL HM_GET_FLOATV('mat_p0' ,P0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 CALL HM_GET_FLOATV('mat_phi' ,PHI ,IS_AVAILABLE, LSUBMODEL, UNITAB)
132 CALL HM_GET_FLOATV('mat_gama0' ,GAMA0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
133c
134c------------------------------------------------------------------------------
135c
136 CALL HM_GET_FLOATV_DIM('ifscale' ,FSCAL_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
137 IF (FSCAL == ZERO) FSCAL = ONE*FSCAL_UNIT
138c
139 IF (MU <= ZERO) MU = EP20
140 IF (PMIN == ZERO) PMIN =-EP20
141 IF (PMIN > ZERO) PMIN =-PMIN
142 BULK = THIRD*E/(ONE - TWO*POISSON)
143C
144 !----------------------------------------------------------
145 ! Filtering frequency
146 IF (ASRATE /= ZERO) THEN
147 ! If a filtering frequency is given by the user
148 ISRATE = 1
149 ELSE
150 ! If no filtering frequency is given but the flag is activated
151 IF (ISRATE /= 0) THEN
152 ASRATE = 10000.0D0*UNITAB%FAC_T_WORK
153 ! If no filtering frequency and no flag is activated => no filtering
154 ELSE
155 ASRATE = ZERO
156 ENDIF
157 ENDIF
158 !----------------------------------------------------------
159 ! Checking filtering and strain-rate dependency
160.OR..AND. IF (((C1 /= ZERO)(E1 /= ZERO))(ISRATE == 0)) THEN
161 CALL ANCMSG(MSGID=1220,
162 . MSGTYPE=MSGWARNING,
163 . ANMODE=ANINFO_BLIND_1,
164 . I1=ID,
165 . C1=TITR)
166 ENDIF
167C
168c-----------------
169 UPARAM(1) = E
170 UPARAM(2) = POISSON
171 UPARAM(3) = E1
172 UPARAM(4) = E2
173 UPARAM(5) = ET
174 UPARAM(6) = POISSONT
175 UPARAM(7) = MU
176 UPARAM(8) = LAMBDA
177 UPARAM(9) = P0
178 UPARAM(10) = PHI
179 UPARAM(11) = GAMA0
180 UPARAM(12) = C1
181 UPARAM(13) = C2
182 UPARAM(14) = C3
183 UPARAM(15) = IFLAG
184 UPARAM(16) = PMIN
185 UPARAM(17) = RELVEXP
186 UPARAM(18) = FSCAL
187 UPARAM(19) = 0
188c-----------------
189 IFUNC(1) = FCT_ID
190c-----------------
191 PARMAT(1) = E
192 PARMAT(2) = E
193 PARMAT(3) = POISSON
194 PARMAT(4) = ISRATE
195 PARMAT(5) = ASRATE
196 PARMAT(16) = 2
197 PARMAT(17) = (ONE - TWO*POISSON)/(ONE - POISSON)
198c-----------------
199 MTAG%L_EPSD = 1
200 MTAG%G_EPSD = 1
201c-----------------
202 PM(1) = RHOR
203 PM(89) = RHO0
204 PM(100)= E
205c-----------------
206 NUPARAM = 19
207 NFUNC = 1
208 IF (ISRATE == 0) THEN
209 NUVAR = 3
210 ELSE
211 NUVAR = 4
212 ENDIF
213c-----------------
214 ! MATPARAM keywords
215 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
216c
217 ! Properties compatibility
218 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
219 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
220 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
221c-----------------
222 WRITE(IOUT,1100) TRIM(TITR),ID,35
223 WRITE(IOUT,1000)
224
225 IF (IS_ENCRYPTED) THEN
226 WRITE(IOUT,'(5x,a,//)')'confidential data'
227 ELSE
228 WRITE(IOUT,1200) RHO0,RHOR
229 WRITE(IOUT,1300) E,POISSON,E1,E2,RELVEXP,C1,C2,C3,FCT_ID,FSCAL,
230 . IFLAG,PMIN,ET,POISSONT,MU,LAMBDA,P0,PHI,GAMA0
231 WRITE(IOUT,1500) ISRATE,ASRATE
232 ENDIF
233C-----------------
234 RETURN
235C-----------------
236 1000 FORMAT
237 & (5X,24H ELASTIC WITH VISCOSITY,/,
238 & 5X,24H ----------------------,//)
239 1100 FORMAT(/
240 & 5X,A,/,
241 & 5X, 'material number . . . . . . . . . . . .=',I10/,
242 & 5X, 'material law. . . . . . . . . . . . . .=',I10/)
243 1200 FORMAT(
244 & 5X, 'initial density . . . . . . . . . . . .=',1PG20.13/)
245 1300 FORMAT
246 & (5X, 'young''s modulus. . . . . . . . . . . .=',1PG20.13/
247 & ,5X, 'poisson''s ratio. . . . . . . . . . . .=',1PG20.13/
248 & ,5X, 'e1. . . . . . . . . . . . . . . . . . .=',1PG20.13/
249 & ,5X, 'e2. . . . . . . . . . . . . . . . . . .=',1PG20.13/
250 & ,5X, 'exponent on relative volume . . . . . .=',1PG20.13//
251 & ,5X, 'c1. . . . . . . . . . . . . . . . . . .=',1PG20.13/
252 & ,5X, 'c2. . . . . . . . . . . . . . . . . . .=',1PG20.13/
253 & ,5X, 'c3. . . . . . . . . . . . . . . . . . .=',1PG20.13//
254 & ,5X, 'FUNCTION number for pressure. . . . . .=',I10/
255 & ,5X, 'pressure function scale factor. . . . .=',1PG20.13//
256 & ,5X, 'flag for open cell foam formulation . .=',I10/
257 & ,5X, 'cut off pressure in tension . . . . . .=',1PG20.13//
258 & ,5X, 'et. . . . . . . . . . . . . . . . . . .=',1PG20.13/
259 & ,5X, 'poisson''s ratio (TANGENT). . . . . . .=',1PG20.13/
260 & ,5X, 'viscosity coefficient (IN PURE SHEAR) .=',1PG20.13/
261 & ,5X, 'viscosity coefficient (VOLUMETRIC). . .=',1PG20.13//
262 & ,5X, 'initial pressure. . . . . . . . . . . .=',1PG20.13/
263 & ,5X, 'porosity. . . . . . . . . . . . . . . .=',1PG20.13/
264 & ,5X, 'initial volumetric strain. . . .. . . .=',1PG20.13/)
265 1500 FORMAT
266 & (5X, 'strain rate filtering flag . . . . . .=',I10/
267 & ,5X, 'strain rate cutting frequency . . . . .=',1PG20.13)
268C-----------------
269 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat35(uparam, maxuparam, nuparam, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, pm, israte, id, titr, lsubmodel, imatvis, mtag, matparam)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle