OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat62.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_mat62 ../starter/source/materials/mat/mat062/hm_read_mat62.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_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!|| message_mod ../starter/share/message_module/message_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE hm_read_mat62(
39 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NFUNC ,
40 . PARMAT ,UNITAB ,PM ,MAT_ID ,TITR ,
41 . IMATVIS ,LSUBMODEL,MATPARAM )
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE unitab_mod
46 USE message_mod
47 USE submodel_mod
48 USE matparam_def_mod
50C-----------------------------------------------
51C ROUTINE DESCRIPTION :
52C ===================
53C READ MAT LAW62 (VISC_HYP)
54C-----------------------------------------------
55C DUMMY ARGUMENTS DESCRIPTION:
56C ===================
57C UNITAB UNITS ARRAY
58C ID MATERIAL ID(INTEGER)
59C TITR MATERIAL TITLE
60C LSUBMODEL SUBMODEL STRUCTURE
61C-----------------------------------------------
62C I m p l i c i t T y p e s
63C-----------------------------------------------
64#include "implicit_f.inc"
65C-----------------------------------------------
66C C o m m o n B l o c k s
67C-----------------------------------------------
68#include "units_c.inc"
69#include "param_c.inc"
70C-----------------------------------------------
71C D u m m y A r g u m e n t s
72C-----------------------------------------------
73 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
74 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM
75 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
76 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
77 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,IMATVIS
78 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
79 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
80 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
81 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
82C-----------------------------------------------
83C L o c a l V a r i a b l e s
84C-----------------------------------------------
85 INTEGER :: J,NORDER,NVISC,FLAG_VISC,IVISC,ILAW,ITAG,
86 . FLAG_RIGIDITY
87 my_real :: RHO0,RHOR,GAMMAINF,NUG,SUM,GS,P,VISCMAX,BULK
88 my_real, DIMENSION(100) :: mu,al,gama,taux,nu,beta
89 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
90C=======================================================================
91 is_encrypted = .false.
92 is_available = .false.
93 ilaw = 62
94c
95C--------------------------------------------------
96C check crypting
97C--------------------------------------------------
98c
99 CALL hm_option_is_encrypted(is_encrypted)
100c
101C--------------------------------------------------
102C Read DATA
103C--------------------------------------------------
104 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
106c
107 CALL hm_get_floatv('MAT_NU' ,nug ,is_available, lsubmodel, unitab)
108 CALL hm_get_intv ('ORDER' ,norder ,is_available,lsubmodel)
109 CALL hm_get_intv ('Order2' ,nvisc ,is_available,lsubmodel)
110 CALL hm_get_floatv('MU' ,viscmax ,is_available, lsubmodel, unitab)
111 CALL hm_get_intv ('Vflag' ,flag_visc ,is_available,lsubmodel)
112 CALL hm_get_intv ('Rflag' ,flag_rigidity ,is_available,lsubmodel)
113c
114 IF (norder > 0) THEN
115 DO j=1,norder
116 CALL hm_get_float_array_index('Mu_arr' ,mu(j),j,is_available,lsubmodel,unitab)
117 ENDDO
118 DO j=1,norder
119 CALL hm_get_float_array_index('Alpha_arr',al(j),j,is_available,lsubmodel,unitab)
120 ENDDO
121 ELSE
122 CALL ancmsg(msgid=559,
123 . msgtype=msgerror,
124 . anmode=aninfo_blind_1,
125 . i1=mat_id,
126 . c1=titr)
127 ENDIF
128c
129 IF (nvisc > 0) THEN
130 DO j=1,nvisc
131 CALL hm_get_float_array_index('Gamma_arr',gama(j),j,is_available,lsubmodel,unitab)
132 ENDDO
133 DO j=1,nvisc
134 CALL hm_get_float_array_index('tau_arr' ,TAUX(J),J,IS_AVAILABLE,LSUBMODEL,UNITAB)
135 ENDDO
136 ENDIF
137 ITAG = 0
138 IF (NORDER > 0) THEN
139 DO J=1,NORDER
140 CALL HM_GET_FLOAT_ARRAY_INDEX('nu_arr' ,NU(J),J,IS_AVAILABLE,LSUBMODEL,UNITAB)
141 IF(NU(J) /= ZERO) ITAG = 1
142 IF (NU(J) >= HALF) NU(J) = ZEP499
143 ENDDO
144 ENDIF
145c--------------------------------------------------
146c CHECK VALUES
147c--------------------------------------------------
148 IF (RHOR == ZERO) RHOR = RHO0
149c
150 DO J=1,NORDER
151 IF (AL(J) == ZERO) AL(J) = ONE
152 ENDDO
153c
154 GAMMAINF = ONE
155 SUM = ZERO
156 IF (NVISC > 0) THEN
157 DO J=1,NVISC
158 IF (TAUX(J) <= ZERO) TAUX(J) = EP20
159.OR. IF (GAMA(J) > ONE GAMA(J) < ZERO) THEN
160 CALL ANCMSG(MSGID=560,
161 . MSGTYPE=MSGERROR,
162 . ANMODE=ANINFO_BLIND_1,
163 . I1=MAT_ID,
164 . C1=TITR,
165 . R1=GAMA(J))
166 ENDIF
167 SUM = SUM + GAMA(J)
168 ENDDO
169 GAMMAINF = ONE - SUM
170 IF(GAMMAINF <= ZERO ) THEN
171 CALL ANCMSG(MSGID=2084,
172 . MSGTYPE=MSGERROR,
173 . ANMODE=ANINFO_BLIND_1,
174 . I1=MAT_ID,
175 . C1=TITR,
176 . R1=GAMMAINF)
177 ENDIF
178 ENDIF
179 IF (NUG >= HALF) NUG = ZEP499
180 IF (VISCMAX == ZERO) VISCMAX=EP20
181 !
182.AND. IF(NVISC > 0 FLAG_RIGIDITY == 2)THEN
183 DO J=1,NORDER
184 MU(J)= MU(J)/ GAMMAINF
185 ENDDO
186 ENDIF
187c
188 GS = ZERO
189 DO J=1,NORDER
190 GS = GS + MU(J)
191 ENDDO
192 IF (GS < ZERO) THEN
193 CALL ANCMSG(MSGID=846,
194 . MSGTYPE=MSGERROR,
195 . ANMODE=ANINFO,
196 . I1=MAT_ID,
197 . C1=TITR)
198 ENDIF
199 IF(ITAG == 1) THEN
200 BULK = ZERO
201 DO J=1,NORDER
202 BETA(J) = NU(J)/(ONE - TWO*NU(J))
203 BULK = BULK + TWO*MU(J)*(THIRD + BETA(J))
204 ENDDO
205 NUG = HALF*(THREE*BULK - TWO*GS)/(THREE*BULK+ GS)
206 ELSE
207 BETA(1:NORDER) = NUG/(ONE - TWO*NUG)
208 BULK = TWO_THIRD*GS*(ONE + NUG)/MAX(EM20,(ONE - TWO*NUG))
209 ENDIF
210C
211 IF (NVISC > 0) THEN
212 IVISC = 1
213 IF (FLAG_VISC == 1) IVISC = 2
214 ELSE
215 IVISC = 0
216 ENDIF
217 FLAG_VISC = MIN(FLAG_VISC, 2)
218c---------------------
219 UPARAM(1) = NUG
220 UPARAM(2) = NORDER
221 UPARAM(3) = NVISC
222 UPARAM(4) = GAMMAINF
223 UPARAM(5) = BULK
224 UPARAM(6) = VISCMAX
225 DO J=1,NORDER
226 UPARAM(6 + J ) = MU(J)
227 UPARAM(6 + NORDER + J) = AL(J)
228 ENDDO
229 IF (NVISC > 0) THEN
230 DO J= 1,NVISC
231 UPARAM(6 + NORDER*2 + J) = GAMA(J)
232 UPARAM(6 + NORDER*2 + NVISC + J) = TAUX(J)
233 ENDDO
234 ENDIF
235 NUPARAM = 6 + 2*NORDER + 2*NVISC + 1
236 UPARAM(NUPARAM) = IVISC
237 !! adding beta_i
238 DO J=1,NORDER
239 UPARAM(NUPARAM + J ) = BETA(J)
240 ENDDO
241 NUPARAM = NUPARAM + NORDER
242c---------------------
243 GS = GS*TWO
244 PARMAT(1) = BULK
245 PARMAT(2) = GS*(ONE + NUG)
246 PARMAT(3) = NUG
247 PARMAT(16) = 2 ! Formulation for solid elements time step computation.
248 PARMAT(17) = GS/(BULK + TWO_THIRD*GS)
249c-----------------
250 PM(1) = RHOR
251 PM(89) = RHO0
252c---------------------
253 NFUNC = 0
254 NUVAR = 6 + 6*NVISC
255c
256c NUVAR : pour savegarder H et S (integration convolutive)
257c + pressure viscosity NUVAR = 9 + 3*NVISC*2 (a developpe en cas de besoin),
258c---------------------
259 IF (NVISC > 0) THEN
260 IMATVIS = 3
261 ELSE
262 IMATVIS = 1
263 ENDIF
264c-----------------
265 CALL INIT_MAT_KEYWORD(MATPARAM,"TOTAL")
266 IF (NUG > 0.49) THEN
267 CALL INIT_MAT_KEYWORD(MATPARAM,"INCOMPRESSIBLE")
268 ELSE
269 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
270 END IF
271 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
272 ! Properties compatibility
273 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
274 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
275c-----------------
276 WRITE(IOUT,1100) TRIM(TITR),MAT_ID,62
277 WRITE(IOUT,1000)
278 IF(IVISC > 0 ) THEN
279 SELECT CASE (FLAG_RIGIDITY)
280 CASE (0,1)
281 FLAG_RIGIDITY = 1
282 WRITE(IOUT,1010)FLAG_RIGIDITY
283 CASE (2)
284 WRITE(IOUT,1020)FLAG_RIGIDITY
285 END SELECT
286 ENDIF
287 IF (IS_ENCRYPTED) THEN
288 WRITE(IOUT,'(5x,a,//)')'confidential data'
289 ELSE
290 WRITE(IOUT,1200) RHO0
291
292 WRITE(IOUT,1300) NUG,GS*HALF,VISCMAX,NORDER
293 WRITE(IOUT,1400) (MU(J),AL(J),NU(J),J=1,NORDER)
294 IF (IVISC > 0) THEN
295 WRITE(IOUT,1500) NVISC
296 IF (NVISC /= ZERO) WRITE(IOUT,1600)(GAMA(J),TAUX(J),J=1,NVISC)
297 WRITE(IOUT,1700) FLAG_VISC
298 ENDIF
299 ENDIF
300C-----------------
301 RETURN
302C-----------------
303 1000 FORMAT
304 & (5X,'material model : visco hyperelastic',/,
305 & 5X,'-----------------------------------',/)
306 1100 FORMAT(/
307 & 5X,A,/,
308 & 5X,'material number . . . . . . . . . . . .=',I10/,
309 & 5X,'material law. . . . . . . . . . . . . .=',I10/)
310 1200 FORMAT(
311 & 5X,'initial density . . . . . . . . . . . .=',1PG20.13/)
312 1300 FORMAT
313 &(5X,'equivalent poisson ratio . . . . . . .=',E12.4/
314 &,5X,'initial shear modulus . . . . . . . . .=',E12.4/
315 & 5X,'maximum viscosity. . . . .. . . . . . .=',E12.4//
316 &,5X,'order of strain energy. . . . . . . . .=',I8)
317 1400 FORMAT(
318 & 7X,'material parameter(mu). . . . . . . . =',E12.4/
319 & 7X,'material parameter(alpha) . . . . . . =',E12.4/
320 & 7X,'material parameter(nu) . . . . . . . =',E12.4/)
321 1500 FORMAT(//
322 & 5X,'order of maxwell model . . . . . . . . =',I8 )
323 1600 FORMAT(
324 & 7X,'stiffness ratio. . . . . . . . . . .. .=',E12.4/
325 & 7X,'relaxation time . . . . . . . . . . . =',E12.4)
326 1700 FORMAT(/
327 & 5X,'viscous stress formulation . . . . . . =',I8 /
328 &10X,' 0 : viscous stress is deviatoric ' , /
329 &10X,' 1 : viscous stress is spherical and deviatoric' )
330 1010 FORMAT(/
331 & 5X,'long-term rigidity flag . . . . . =',I8 /
332 & 5X,'initial elastic modulus is the instantaneous rigidity ' , / )
333 1020 FORMAT(/
334 & 5X,'long-term rigidity flag . . . . . =',I8 /
335 & 5X,' initial elastic modulus is the long-term rigidity. ',/
336 & 5X,' the mu VALUE are updated ' , / )
337C-----------------
338 RETURN
339 END
end diagonal values have been computed in the(sparse) matrix id.SOL
#define alpha
Definition eval.h:35
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_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat62(uparam, maxuparam, nuparam, nuvar, nfunc, parmat, unitab, pm, mat_id, titr, imatvis, lsubmodel, matparam)
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