OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat69.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_mat69 ../starter/source/materials/mat/mat069/hm_read_mat69.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_mat69(UPARAM ,MAXUPARAM,NUPARAM ,ISRATE , IMATVIS,
40 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT,
41 . UNITAB ,ID ,TITR ,MTAG , LSUBMODEL,
42 . PM ,MATPARAM )
43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C READ MAT LAW59 WITH HM READER ( TO BE COMPLETED )
47C
48C DUMMY ARGUMENTS DESCRIPTION:
49C ===================
50C
51C NAME DESCRIPTION
52C
53C PM MATERIAL ARRAY(REAL)
54C UNITAB UNITS ARRAY
55C ID MATERIAL ID(INTEGER)
56C TITR MATERIAL TITLE
57C LSUBMODEL SUBMODEL STRUCTURE
58C
59C-----------------------------------------------
60C M o d u l e s
61C-----------------------------------------------
62 USE unitab_mod
63 USE elbuftag_mod
64 USE message_mod
65 USE submodel_mod
66 USE matparam_def_mod
68C-----------------------------------------------
69C I m p l i c i t T y p e s
70C-----------------------------------------------
71#include "implicit_f.inc"
72C-----------------------------------------------
73C C o m m o n B l o c k s
74C-----------------------------------------------
75#include "units_c.inc"
76#include "param_c.inc"
77C-----------------------------------------------
78C D u m m y A r g u m e n t s
79C-----------------------------------------------
80 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
81 my_real, INTENT(INOUT) :: PM(NPROPM),PARMAT(100),UPARAM(MAXUPARAM)
82 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM, NUVAR
83 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
84 INTEGER,INTENT(IN) :: ID
85 INTEGER,INTENT(INOUT) :: IMATVIS
86 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
87 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
88 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
89C-----------------------------------------------
90C L o c a l V a r i a b l e s
91C-----------------------------------------------
92 INTEGER I,BULK_FNCT,NTABLE_,NMUAL,LAWID,ILAW
93 my_real MU(5),AL(5),RHO0,RHOR
94 my_real BULK,TENSCUT,GS,NU,FSCAL,ZEP495,FSCAL_UNIT
95 INTEGER ICHECK, NSTART
96 my_real errtol
97 INTEGER IDUMMY
98 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
99C-----------------------------------------------
100C S o u r c e L i n e s
101C-----------------------------------------------
102 is_encrypted = .false.
103 is_available = .false.
104 idummy = 0
105 nstart = 0
106 errtol = zero
107 ilaw = 69
108 imatvis = 1
109
110 CALL hm_option_is_encrypted(is_encrypted)
111
112 !line-1
113 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
115 !line-2
116 CALL hm_get_intv('MAT_Iflag' ,lawid ,is_available, lsubmodel)
117 CALL hm_get_intv('FUN_A1' ,bulk_fnct ,is_available, lsubmodel)
118 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv('MAT_FScale' ,fscal ,is_available, lsubmodel, unitab)
120 CALL hm_get_intv('NIP' ,nmual ,is_available, lsubmodel)
121 CALL hm_get_intv('Gflag' ,icheck ,is_available, lsubmodel)
122 !-line3
123 CALL hm_get_intv ('FUN_B1' ,ntable_ ,is_available, lsubmodel)
124
125 !units
126 CALL hm_get_floatv_dim('MAT_FScale' ,fscal_unit ,is_available, lsubmodel, unitab)
127
128C-----------------------------------------------
129 nuparam = 21
130 nfunc = 2
131 nuvar = 9
132C-----------------------------------------------
133 zep495 = zep4 + nine*em02 + five*em03
134 IF(icheck == 0 ) icheck = -3
135 IF(nstart == 0 ) nstart = 100
136 IF(errtol == zero ) errtol = fiveem3
137 IF(nmual == 0 ) nmual = 2
138 IF(fscal == zero ) fscal = one*fscal_unit
139 IF(lawid == 0 ) lawid = -1
140 IF(lawid == -1) THEN
141 icheck = -3
142 nstart = 100
143 errtol = fiveem3
144 nmual = 2
145 ENDIF
146 IF (ntable_ == 0) THEN
147 CALL ancmsg(msgid=894,
148 . msgtype=msgerror,
149 . anmode=aninfo,
150 . i1=id,
151 . c1=titr)
152 ENDIF
153 IF (lawid == 0) lawid = 1
154 IF (lawid /= 1 .AND. lawid /= 2 .AND. lawid /= -1 ) THEN ! New flag (automatic fitting)
155 CALL ancmsg(msgid=882,
156 . msgtype=msgerror,
157 . anmode=aninfo,
158 . i1=id,
159 . c1=titr,i2=lawid)
160 ENDIF
161
162 tenscut = ep20
163 DO i=1,5
164 mu(i)=ten*fscal_unit !pressure
165 al(i)=ten*fscal_unit !pressure
166 ENDDO
167 gs = zero
168 IF (lawid == 1) THEN
169 DO i=1,5
170 gs = gs + mu(i)*al(i)
171 ENDDO
172 ELSEIF (lawid == 2) THEN
173 DO i=1,2
174 gs = gs + mu(i)*al(i)
175 ENDDO
176 ENDIF
177C---
178 IF (nu == zero ) nu = zep495
179 bulk = gs*(one+nu)/max(em20,three*(one-two*nu))
180 ifunc(1) = bulk_fnct
181 ifunc(2) = ntable_
182 parmat(1)= gs
183 parmat(2)= gs*(one+nu)
184 parmat(3)= nu
185 parmat(6)= bulk
186 mu = gs/two
187C---
188 IF (rhor == zero) rhor=rho0
189 pm(1) = rhor
190 pm(2) = gs
191 pm(89) = rho0
192 pm(100)= bulk
193
194 uparam(1) = mu(1)
195 uparam(2) = mu(2)
196 uparam(3) = mu(3)
197 uparam(4) = mu(4)
198 uparam(5) = mu(5)
199 uparam(6) = al(1)
200 uparam(7) = al(2)
201 uparam(8) = al(3)
202 uparam(9) = al(4)
203 uparam(10)= al(5)
204 uparam(11)= bulk
205 uparam(12)= tenscut
206 uparam(13)= lawid
207 uparam(14)= nu
208 uparam(15)= fscal
209 uparam(17)= gs
210 uparam(18)= nmual
211 uparam(19)= icheck
212 uparam(20)= nstart
213 uparam(21) = zero
214 IF(is_encrypted)uparam(21)= one
215c-----------------
216 CALL init_mat_keyword(matparam,"INCOMPRESSIBLE")
217 CALL init_mat_keyword(matparam,"total")
218 CALL INIT_MAT_KEYWORD(MATPARAM,"hook")
219 ! Properties compatibility
220 CALL INIT_MAT_KEYWORD(MATPARAM,"shell_isotropic")
221 CALL INIT_MAT_KEYWORD(MATPARAM,"solid_isotropic")
222c-----------------
223 WRITE(IOUT,1100) TRIM(TITR),ID,69
224 WRITE(IOUT,1000)
225 IF(IS_ENCRYPTED)THEN
226 WRITE(IOUT,'(5X,A,//)')'CONFIDENTIAL DATA'
227 ELSE
228 WRITE(IOUT,1200) RHO0
229 IF (NTABLE_ /= 0) THEN
230 WRITE(IOUT,'(5X,A,//)')'HYPERELASTIC MATERIAL CONSTANTS WILL BE DETERMINED BY NONLINEAR LEAST SQUARE FITTING '
231 WRITE(IOUT,1300) NU,LAWID,BULK_FNCT,FSCAL,NMUAL,ICHECK
232 ENDIF
233 ENDIF
234C-----
235 RETURN
236C---------------------------------------------------------------
237 1000 FORMAT
238 & (5X,29H TABULATED HYPER-ELASTIC LAW,/,
239 & 5X,29H ---------------------------,//)
240 1100 FORMAT(/
241 & 5X,A,/,
242 & 5X,'MATERIAL NUMBER . . . . . . . . . . . .=',I10/,
243 & 5X,'MATERIAL LAW. . . . . . . . . . . . . .=',I10/)
244 1200 FORMAT(
245 & 5X,'INITIAL DENSITY . . . . . . . . . . . .=',1PG20.13/)
246 1300 FORMAT
247 &(5X,'POISSON RATIO . . . . . . . . . . . . .=',1PG20.13/
248 &,5X,'LAW TYPE. . . . . . . . . . . . . . . .=',I10/
249 &,5X,'BULK FUNCTION ID. . . . . . . . . . . .=',I10/
250 &,5X,'SCALE FACTOR FOR BULK FUNCTION. . . . .=',1PG20.13/
251 &,5X,'FIT ORDER . . . . . . . . . . . . . . .=',I10/
252 &,5X,'ICHECK = ', I10//)
253C---------------------------------------------------------------
254 END SUBROUTINE HM_READ_MAT69
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_mat69(uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, id, titr, mtag, lsubmodel, pm, matparam)
subroutine init_mat_keyword(matparam, keyword)
#define max(a, b)
Definition macros.h:21
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