OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat82.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_mat82 ../starter/source/materials/mat/mat082/hm_read_mat82.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_mat82(
39 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,IFUNC ,
40 . MAXFUNC ,NFUNC ,PARMAT ,IMATVIS ,UNITAB ,
41 . MAt_ID ,TITR ,LSUBMODEL,PM ,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 LAW82 WITH HM READER
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,MAXFUNC
75 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
76 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
77 INTEGER, INTENT(INOUT) :: IMATVIS,NUPARAM,NUVAR,NFUNC
78 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
79 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
80 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
81 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
82 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
83C-----------------------------------------------
84C L o c a l V a r i a b l e s
85C-----------------------------------------------
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87 my_real
88 . MU(100),AL(100),NU,NU0,RHO0,
89 . gs,p,d(100),zep495,rhor
90 INTEGER I,NORDRE,ILAW,COUNT
91C=======================================================================
92 IS_ENCRYPTED = .false.
93 is_available = .false.
94 imatvis = 1
95 ilaw = 82
96 zep495 = zep4 + nine*em02 + five*em03
97 nfunc = 0
98
99 CALL hm_option_is_encrypted(is_encrypted)
100
101 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
102 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
103
104 CALL hm_get_floatv('MAT_NU' ,nu0 ,is_available, lsubmodel, unitab)
105 CALL hm_get_intv('ORDER' ,nordre ,is_available,lsubmodel)
106
107 DO i=1,nordre
108 CALL hm_get_float_array_index('Mu_arr' ,mu(i) ,i,is_available, lsubmodel, unitab)
109 CALL hm_get_float_array_index('Alpha_arr' ,al(i) ,i,is_available, lsubmodel, unitab)
110 CALL hm_get_float_array_index('Gamma_arr' ,d(i) ,i,is_available, lsubmodel, unitab)
111 ENDDO
112!---------------------------------------------------------------------------------------
113 count = 0
114 DO i=1,nordre
115 IF (mu(i) /= zero .and. al(i) /= zero) THEN
116 count = count + 1 !< count first non zero Ogden parameters from the input lines
117 ELSE
118 EXIT
119 END IF
120 ENDDO
121 nordre = count
122!
123 IF(nordre == 0)THEN
124 CALL ancmsg(msgid=559, msgtype=msgerror, anmode=aninfo_blind_1,
125 . i1=mat_id, c1=titr)
126 ENDIF
127C
128 gs = zero
129 DO i=1,nordre
130 gs = gs + mu(i)
131 ENDDO
132C
133 IF (gs < zero) THEN
134 CALL ancmsg(msgid=846, msgtype=msgerror, anmode=aninfo,
135 . i1=mat_id, c1=titr)
136 ENDIF
137C ...
138 IF(nu0 == half) nu0= zep495
139 IF(nu0 == zero ) THEN
140 IF( d(1) > zero) THEN
141 p=two/d(1)
142 nu = one/(six*p + two*gs)
143 nu = (three*p - two*gs)*nu
144 IF(nu == half) nu= zep499
145 d(1) = three*(one - two*nu)/gs/(one + nu)
146 p = two/d(1)
147 ELSE
148 nu = zep495
149 d(1) = three*(one - two*nu)/gs/(one + nu)
150 p = two/d(1)
151 ENDIF
152 ELSE
153 nu = nu0
154 d(1) = three*(one - two*nu)/gs/(one + nu)
155 p = two/d(1)
156 ENDIF
157C
158 uparam(1) = nordre
159 DO i=1,nordre
160 uparam(1 + i ) = mu(i)
161 uparam(1 + nordre + i) = al(i)
162 uparam(1 + 2*nordre + i) = d(i)
163 ENDDO
164 nuparam = 1 + 3*nordre
165 nuvar = 1
166 parmat(1) = p
167 parmat(2) = two*gs*(one + nu)
168 parmat(3) = nu
169 parmat(6) = p
170C
171 IF(rhor==zero)rhor=rho0
172 pm(1) =rhor
173 pm(89)=rho0
174c-----------------
175 CALL init_mat_keyword(matparam,"INCOMPRESSIBLE")
176 CALL init_mat_keyword(matparam,"TOTAL")
177 CALL init_mat_keyword(matparam,"HOOK")
178 ! Properties compatibility
179 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
180 CALL init_mat_keyword(matparam,"SHELL_ISOTROPIC")
181c-----------------
182 WRITE(iout,1010) trim(titr),mat_id,ilaw
183 WRITE(iout,1000)
184 IF(is_encrypted)THEN
185 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
186 ELSE
187 WRITE(iout,1020)rho0
188 WRITE(iout,1100)nordre,nu,gs
189 IF (nordre >= 1) WRITE(iout,1201) mu(1) ,al(1) ,d(1)
190 IF (nordre >= 2) WRITE(iout,1202) mu(2) ,al(2) ,d(2)
191 IF (nordre >= 3) WRITE(iout,1203) mu(3) ,al(3) ,d(3)
192 IF (nordre >= 4) WRITE(iout,1204) mu(4) ,al(4) ,d(4)
193 IF (nordre >= 5) WRITE(iout,1205) mu(5) ,al(5) ,d(5)
194 IF (nordre >= 6) WRITE(iout,1206) mu(6) ,al(6) ,d(6)
195 IF (nordre >= 7) WRITE(iout,1207) mu(7) ,al(7) ,d(7)
196 IF (nordre >= 8) WRITE(iout,1208) mu(8) ,al(8) ,d(8)
197 IF (nordre >= 9) WRITE(iout,1209) mu(9) ,al(9) ,d(9)
198 IF (nordre ==10) WRITE(iout,1210) mu(10),al(10),d(10)
199 ENDIF
200c-----------------------------------------------------------------------
201 1000 FORMAT
202 & (5x, 'OGDEN HYPERELASIC LAW' ,/,
203 & 5x, ' ---------------',//)
204 1010 FORMAT(/
205 & 5x,a,/,
206 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . .=',i10/,
207 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . .=',i10/)
208 1020 FORMAT(
209 & 5x,'INITIAL DENSITY. . . . . . . . . . . . . .=',1pg20.13/)
210 1100 FORMAT
211 & (5x,'ORDER OF STRAIN ENERGY . . . . . . . . . .=',i10/
212 & 5x,'POISSON RATIO. . . . . . . . . . . . . . .=',1pg20.13/
213 & 5x,'INITIAL SHEAR MODULUS. . . . . . . . . . .=',e12.4/)
214 1201 FORMAT(
215 & 5x,'MATERIAL PARAMETER (MU1). . . . . . . . . .=',1pg20.13/
216 & 5x,'MATERIAL PARAMETER (ALPHA1) . . . . . . . .=',1pg20.13/
217 & 5x,'MATERIAL PARAMETER (D1) . . . . . . . . . .=',1pg20.13)
218 1202 FORMAT(
219 & 5x,'MATERIAL PARAMETER (MU2). . . . . . . . . .=',1pg20.13/
220 & 5x,'MATERIAL PARAMETER (ALPHA2) . . . . . . . .=',1pg20.13/
221 & 5x,'MATERIAL PARAMETER (D2) . . . . . . . . . .=',1pg20.13)
222 1203 FORMAT(
223 & 5x,'MATERIAL PARAMETER (MU3). . . . . . . . . .=',1pg20.13/
224 & 5x,'MATERIAL PARAMETER (ALPHA3) . . . . . . . .=',1pg20.13/
225 & 5x,'MATERIAL PARAMETER (D3) . . . . . . . . . .=',1pg20.13)
226 1204 FORMAT(
227 & 5x,'MATERIAL PARAMETER (MU4). . . . . . . . . .=',1pg20.13/
228 & 5x,'MATERIAL PARAMETER (ALPHA4) . . . . . . . .=',1pg20.13/
229 & 5x,'MATERIAL PARAMETER (D4) . . . . . . . . . .=',1pg20.13)
230 1205 FORMAT(
231 & 5x,'MATERIAL PARAMETER (MU5). . . . . . . . . .=',1pg20.13/
232 & 5x,'MATERIAL PARAMETER (ALPHA5) . . . . . . . .=',1pg20.13/
233 & 5x,'MATERIAL PARAMETER (D5) . . . . . . . . . .=',1pg20.13)
234 1206 FORMAT(
235 & 5x,'MATERIAL PARAMETER (MU6). . . . . . . . . .=',1pg20.13/
236 & 5x,'MATERIAL PARAMETER (ALPHA6) . . . . . . . .=',1pg20.13/
237 & 5x,'MATERIAL PARAMETER (D6) . . . . . . . . . .=',1pg20.13)
238 1207 FORMAT(
239 & 5x,'MATERIAL PARAMETER (MU7). . . . . . . . . .=',1pg20.13/
240 & 5x,'MATERIAL PARAMETER (ALPHA7) . . . . . . . .=',1pg20.13/
241 & 5x,'MATERIAL PARAMETER (D7) . . . . . . . . . .=',1pg20.13)
242 1208 FORMAT(
243 & 5x,'MATERIAL PARAMETER (MU8). . . . . . . . . .=',1pg20.13/
244 & 5x,'MATERIAL PARAMETER (ALPHA8) . . . . . . . .=',1pg20.13/
245 & 5x,'MATERIAL PARAMETER (D8) . . . . . . . . . .=',1pg20.13)
246 1209 FORMAT(
247 & 5x,'MATERIAL PARAMETER (MU9). . . . . . . . . .=',1pg20.13/
248 & 5x,'MATERIAL PARAMETER (ALPHA9) . . . . . . . .=',1pg20.13/
249 & 5x,'MATERIAL PARAMETER (D9) . . . . . . . . . .=',1pg20.13)
250 1210 FORMAT(
251 & 5x,'MATERIAL PARAMETER (MU10) . . . . . . . . .=',1pg20.13/
252 & 5x,'MATERIAL PARAMETER (ALPHA10). . . . . . . .=',1pg20.13/
253 & 5x,'MATERIAL PARAMETER (D10). . . . . . . . . .=',1pg20.13)
254c-----------------------------------------------------------------------
255 RETURN
256 END
257
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_mat82(uparam, maxuparam, nuparam, nuvar, ifunc, maxfunc, nfunc, parmat, imatvis, unitab, mat_id, titr, lsubmodel, pm, 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:895
program starter
Definition starter.F:39