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,G,GT,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 IF (((c1 /= zero).OR.(e1 /= zero)).AND.(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_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
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)
subroutine init_mat_keyword(matparam, keyword)
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
program starter
Definition starter.F:39