OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat28.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_mat28 ../starter/source/materials/mat/mat028/hm_read_mat28.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
29!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
30!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.f
31!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
32!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.f
33!||--- uses -----------------------------------------------------
34!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
35!|| message_mod ../starter/share/message_module/message_mod.f
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE hm_read_mat28(UPARAM ,MAXUPARAM,NUPARAM ,ISRATE , IMATVIS ,
39 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT ,
40 . UNITAB ,MAT_ID ,TITR ,MTAG , LSUBMODEL,
41 . PM ,MATPARAM )
42C-----------------------------------------------
43C D e s c r i p t i o n
44C-----------------------------------------------
45C READ MAT LAW28 WITH HM READER ( TO BE COMPLETED )
46C
47C DUMMY ARGUMENTS DESCRIPTION:
48C ===================
49C
50C NAME DESCRIPTION
51C
52C IPM MATERIAL ARRAY(INTEGER)
53C PM MATERIAL ARRAY(REAL)
54C UNITAB UNITS ARRAY
55C MAT_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, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
82 my_real, DIMENSION(100) ,INTENT(INOUT) :: PARMAT
83 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
84 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
85 INTEGER, INTENT(INOUT) :: ISRATE,IMATVIS,NFUNC,MAXFUNC,MAXUPARAM,NUPARAM,NUVAR
86 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
87 INTEGER,INTENT(IN) :: MAT_ID
88 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
89 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
90 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
91C-----------------------------------------------
92C L o c a l V a r i a b l e s
93C-----------------------------------------------
94 my_real
95 . e11,e22,e33,g12,g23,g31,emx11,emx22,emx33,emx12,emx23,emx31,
96 . fac1,fac2,fac3,fac4,fac5,fac6,dmin,dmax
97 INTEGER I11,I22,I33,I12,I23,I31,IF1,IF2,IMAT
98 my_real :: RHOR,RHO0,FAC_UNIT
99 LOGICAL :: IS_ENCRYPTED,IS_AVAILABLE
100C-----------------------------------------------
101C S o u r c e L i n e s
102C-----------------------------------------------
103 is_encrypted = .false.
104 is_available = .false.
105 israte=0
106 imatvis= 0
107 imat = 28
108
109
110 CALL hm_option_is_encrypted(is_encrypted)
111
112 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
114
115 CALL hm_get_floatv('MAT_EA' ,e11 ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv('MAT_EB' ,e22 ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_EC' ,e33 ,is_available, lsubmodel, unitab)
118
119 CALL hm_get_floatv('MAT_GAB' ,g12 ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv('MAT_GBC' ,g23 ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv('MAT_GCA' ,g31 ,is_available, lsubmodel, unitab)
122
123 CALL hm_get_intv ('FUN_A1' ,i11 ,is_available, lsubmodel)
124 CALL hm_get_intv ('FUN_B1' ,i22 ,is_available, lsubmodel)
125 CALL hm_get_intv ('FUN_A2' ,i33 ,is_available, lsubmodel)
126 CALL hm_get_intv ('Gflag' ,if1 ,is_available, lsubmodel)
127 CALL hm_get_floatv('FScale11' ,fac1 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('FScale22' ,fac2 ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv('FScale33' ,fac3 ,is_available, lsubmodel, unitab)
130
131 CALL hm_get_floatv('MAT_EPSR1' ,emx11 ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv('MAT_EPSR2' ,emx22 ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv('MAT_EPSR3' ,emx33 ,is_available, lsubmodel, unitab)
134
135 CALL hm_get_intv ('fun_a3' ,I12 ,IS_AVAILABLE, LSUBMODEL)
136 CALL HM_GET_INTV ('fun_b3' ,I23 ,IS_AVAILABLE, LSUBMODEL)
137 CALL HM_GET_INTV ('fun_a4' ,I31 ,IS_AVAILABLE, LSUBMODEL)
138 CALL HM_GET_INTV ('vflag' ,IF2 ,IS_AVAILABLE, LSUBMODEL)
139 CALL HM_GET_FLOATV('fscale12' ,FAC4 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
140 CALL HM_GET_FLOATV('fscale23' ,FAC5 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
141 CALL HM_GET_FLOATV('fscale13' ,FAC6 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
142
143 CALL HM_GET_FLOATV('mat_epsr4' ,EMX12 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
144 CALL HM_GET_FLOATV('mat_epsr5' ,EMX23 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
145 CALL HM_GET_FLOATV('mat_epsr6' ,EMX31 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
146
147 CALL HM_GET_FLOATV_DIM('fscale11' ,FAC_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
148
149
150C -------------------------
151 IF (FAC1 == ZERO) FAC1 = ONE * FAC_UNIT
152 IF (FAC2 == ZERO) FAC2 = ONE * FAC_UNIT
153 IF (FAC3 == ZERO) FAC3 = ONE * FAC_UNIT
154 IF (FAC4 == ZERO) FAC4 = ONE * FAC_UNIT
155 IF (FAC5 == ZERO) FAC5 = ONE * FAC_UNIT
156 IF (FAC6 == ZERO) FAC6 = ONE * FAC_UNIT
157 UPARAM(1)=E11
158 UPARAM(2)=E22
159 UPARAM(3)=E33
160 UPARAM(4)=G12
161 UPARAM(5)=G23
162 UPARAM(6)=G31
163 UPARAM(7)=IF1
164 UPARAM(8)=IF2
165 UPARAM(9) =EMX11
166 UPARAM(10)=EMX22
167 UPARAM(11)=EMX33
168 UPARAM(12)=EMX12
169 UPARAM(13)=EMX23
170 UPARAM(14)=EMX31
171 IF(UPARAM(9) ==ZERO)UPARAM(9) =INFINITY
172 IF(UPARAM(10)==ZERO)UPARAM(10)=INFINITY
173 IF(UPARAM(11)==ZERO)UPARAM(11)=INFINITY
174 IF(UPARAM(12)==ZERO)UPARAM(12)=INFINITY
175 IF(UPARAM(13)==ZERO)UPARAM(13)=INFINITY
176 IF(UPARAM(14)==ZERO)UPARAM(14)=INFINITY
177 UPARAM(15)=FAC1
178 UPARAM(16)=FAC2
179 UPARAM(17)=FAC3
180 UPARAM(18)=FAC4
181 UPARAM(19)=FAC5
182 UPARAM(20)=FAC6
183 NUPARAM = 20
184C
185 PARMAT(1) = MAX(E11,E22,E33,G12,G23,G31)
186C
187 IFUNC(1)=I11
188 IFUNC(2)=I22
189 IFUNC(3)=I33
190 IFUNC(4)=I12
191 IFUNC(5)=I23
192 IFUNC(6)=I31
193 NFUNC = 6
194C
195 NUVAR = 6
196CCC Formulation for solid elements time step computation.
197 DMIN = MIN(E11*E22, E22*E33,E11*E33)
198 DMAX = MAX(E11,E22,E33)
199 PARMAT(16) = 1
200 PARMAT(17) = DMIN/DMAX/DMAX
201
202 MTAG%G_PLA = 1
203 MTAG%L_PLA = 1
204c
205 ! MATPARAM keywords
206 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
207 CALL INIT_MAT_KEYWORD(MATPARAM,"ORTHOTROPIC")
208c
209 ! Properties compatibility
210 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ORTHOTROPIC")
211 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
212c
213 IF(RHOR==ZERO)RHOR=RHO0
214 PM(01)=RHOR
215 PM(89)=RHO0
216c--------------------------------------------------
217 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
218 CALL INIT_MAT_KEYWORD(MATPARAM,"SMALL_STRAIN")
219c--------------------------------------------------
220 WRITE(IOUT,1001) TRIM(TITR),MAT_ID,IMAT
221 WRITE(IOUT,1000)
222
223 IF(IS_ENCRYPTED)THEN
224 WRITE(IOUT,'(5x,a,//)')'confidential data'
225 ELSE
226 WRITE(IOUT,1002) RHO0
227 WRITE(IOUT,1100)E11,E22,E33,G12,G23,G31,I11,I22,I33,I12,I23,I31,FAC1,FAC2,FAC3,FAC4,FAC5,FAC6
228 IF(IF1+IF2/=0)WRITE(IOUT,1200)IF1,IF2
229 IF(EMX11+EMX22+EMX33+EMX12+EMX23+EMX31/=0)WRITE(IOUT,1300)EMX11,EMX22,EMX33,EMX12,EMX23,EMX31
230 ENDIF
231C
232 RETURN
233 1000 FORMAT(
234 & 5X,40H HONEYCOMB LAW ,/,
235 & 5X,40H ------------- ,//)
236 1001 FORMAT(/
237 & 5X,A,/,
238 & 5X,'material number . . . . . . . . . . . .=',I10/,
239 & 5X,'material law. . . . . . . . . . . . . .=',I10/)
240 1002 FORMAT(
241 & 5X,'initial density . . . . . . . . . . . .=',1PG20.13/)
242 1100 FORMAT(
243 & 5X,'e11 . . . . . . . . . . . . . . . . . .=',1PG20.13/
244 & 5X,'e22 . . . . . . . . . . . . . . . . . .=',1PG20.13/
245 & 5X,'e33 . . . . . . . . . . . . . . . . . .=',1PG20.13/
246 & 5X,'g12 . . . . . . . . . . . . . . . . . .=',1PG20.13/
247 & 5X,'g23 . . . . . . . . . . . . . . . . . .=',1PG20.13/
248 & 5X,'g31 . . . . . . . . . . . . . . . . . .=',1PG20.13/
249 & 5X,'yield stress 11 FUNCTION number . . . .=',I10/
250 & 5X,'yield stress 22 function number . . . .=',I10/
251 & 5X,'yield stress 33 function number . . . .=',I10/
252 & 5X,'yield stress 12 function number . . . .=',I10/
253 & 5X,'yield stress 23 function number . . . .=',I10/
254 & 5X,'yield stress 31 function number . . . .=',I10/
255 & 5X,'stress 11 function scale factor . . . .=',1PG20.13/
256 & 5X,'stress 22 function scale factor . . . .=',1PG20.13/
257 & 5X,'stress 33 function scale factor . . . .=',1PG20.13/
258 & 5X,'stress 12 function scale factor . . . .=',1PG20.13/
259 & 5X,'stress 23 function scale factor . . . .=',1PG20.13/
260 & 5X,'stress 31 function scale factor . . . .=',1PG20.13/)
261 1200 FORMAT(
262 & 5X,'yield function 11,22,33 flag . . . . .=',I10/
263 & 5X,'yield function 12,23,31 flag . . . . .=',I10/)
264 1300 FORMAT(
265 & 5X,'tension failure strain 11 . . . . . . .=',1PG20.13/
266 & 5X,'tension failure strain 22 . . . . . . .=',1PG20.13/
267 & 5X,'tension failure strain 33 . . . . . . .=',1PG20.13/
268 & 5X,'shear failure strain 12 . . . . . . . .=',1PG20.13/
269 & 5X,'shear failure strain 23 . . . . . . . .=',1PG20.13/
270 & 5X,'shear failure strain 31 . . . . . . . .=',1PG20.13//)
271
272
273 END
274
275
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_mat28(uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_id, titr, mtag, lsubmodel, pm, matparam)
subroutine init_mat_keyword(matparam, keyword)
integer, parameter nchartitle
program starter
Definition starter.F:39