OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat109.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_mat109 ../starter/source/materials/mat/mat109/hm_read_mat109.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!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE hm_read_mat109(UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NVARTMP ,
39 . ITABLE ,MAXTABL ,NTABL ,PARMAT ,UNITAB ,
40 . MAT_ID ,TITR ,RHO ,MTAG ,MATPARAM ,
41 . LSUBMODEL)
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE unitab_mod
46 USE elbuftag_mod
47 USE submodel_mod
48 USE matparam_def_mod
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "units_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER ,INTENT(IN) :: MAT_ID,MAXTABL,MAXUPARAM
63 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
64 my_real ,INTENT(INOUT) :: RHO
65 my_real ,DIMENSION(100) ,INTENT(INOUT) :: parmat
66 my_real ,DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
67 INTEGER ,DIMENSION(MAXTABL) ,INTENT(INOUT) :: ITABLE
68 INTEGER ,INTENT(INOUT) :: NTABL,NUPARAM,NUVAR,NVARTMP
69 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
70 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
71 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
72 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
73C-----------------------------------------------
74C L o c a l V a r i a b l e s
75C-----------------------------------------------
76 INTEGER :: ISMOOTH,ILAW,TAB_YLD,TAB_TEMP,TAB_ETA
77 my_real :: YOUNG,NU,G,LAME,BULK,A1,A2,CP,TREF,TINI,ETA,XRATE,
78 . XSCALE,YSCALE,YSCALE_UNIT,XSCALE_UNIT,FCUT
79 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
80C=======================================================================
81 is_encrypted = .false.
82 is_available = .false.
83 ilaw = 109
84C--------------------------------------------------
85 CALL hm_option_is_encrypted(is_encrypted)
86C-----------------------------------------------
87
88Card1
89 CALL hm_get_floatv('MAT_RHO' ,rho ,is_available, lsubmodel, unitab)
90Card2
91 CALL hm_get_floatv('MAT_E' ,young ,is_available, lsubmodel, unitab)
92 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
93c CALL HM_GET_INTV ('TAB_E' ,TAB_E ,IS_AVAILABLE,LSUBMODEL)
94Card3
95 CALL hm_get_floatv('MAT_SPHEAT' ,cp ,is_available, lsubmodel, unitab)
96 CALL hm_get_floatv('MAT_ETA' ,eta ,is_available, lsubmodel, unitab)
97 CALL hm_get_floatv('WPREF' ,tref ,is_available, lsubmodel, unitab)
98 CALL hm_get_floatv('T_Initial' ,tini ,is_available, lsubmodel, unitab)
99Card4
100 CALL hm_get_intv ('MAT_TAB_YLD' ,tab_yld ,is_available,lsubmodel)
101 CALL hm_get_intv ('MAT_TAB_TEMP' ,tab_temp ,is_available,lsubmodel)
102 CALL hm_get_floatv('MAT_Xscale' ,xscale ,is_available, lsubmodel, unitab)
103 CALL hm_get_floatv('MAT_Yscale' ,yscale ,is_available, lsubmodel, unitab)
104 CALL hm_get_intv ('MAT_Ismooth' ,ismooth ,is_available,lsubmodel)
105Card6
106 CALL hm_get_intv ('TAB_ETA' ,tab_eta ,is_available,lsubmodel)
107 CALL hm_get_floatv('MAT_Xrate' ,xrate ,is_available, lsubmodel, unitab)
108c------------------------
109c Elastic parameters
110c------------------------
111 g = half *young / (one + nu)
112 lame = two * g * nu /(one - two*nu)
113 bulk = third * young / (one - nu*two)
114c SOUNDSP = SQRT((BULK + FOUR_OVER_3*G)/RHO)
115c------------------------
116c Default input values
117c------------------------
118 IF (ismooth == 0) ismooth = 1
119 IF (tref == zero) tref = 293.0
120 IF (tini == zero) tini = tref
121 IF (yscale == zero) THEN
122 CALL hm_get_floatv_dim('MAT_Yscale' ,yscale_unit ,is_available, lsubmodel, unitab)
123 yscale = one * yscale_unit
124 ENDIF
125 IF (xscale == zero) THEN
126 CALL hm_get_floatv_dim('MAT_Xscale' ,xscale_unit ,is_available, lsubmodel, unitab)
127 xscale = one * xscale_unit
128 ENDIF
129 IF (xrate == zero) THEN
130 CALL hm_get_floatv_dim('MAT_XRATE' ,xscale_unit ,is_available, lsubmodel, unitab)
131 xrate = one * xscale_unit
132 ENDIF
133c-----------------------------------------------
134 a1 = young / (one - nu*nu)
135 a2 = a1 * nu
136 fcut = 10000.0d0*unitab%FAC_T_WORK
137c-----------------------------------------------
138 uparam(1) = young ! Young modulus
139 uparam(2) = nu ! Poisson ratio
140 uparam(3) = eta ! Thermal work coefficient
141 uparam(4) = tref ! Reference temperature
142 uparam(5) = tini ! Initial temperature
143 uparam(6) = ismooth ! table interpolation flag:
144 ! ISMOOTH = 1 => linear interpolation
145 ! ISMOOTH = 2 => logarythmic interpolation base 10
146 ! ISMOOTH = 3 => logarythmic interpolation base n
147 uparam(7) = one/xrate ! strain rate abscissa factor for eta function
148 uparam(8) = one/xscale ! strain rate abscissa factor for yld function
149 uparam(9) = yscale ! Yld function scale factor
150 uparam(10) = 0
151 uparam(11) = g ! Shear modulus
152 uparam(12) = g * two
153 uparam(13) = g * three
154 uparam(14) = bulk ! Bulk modulus
155 uparam(15) = lame ! Lame parameter
156 uparam(16) = a1
157 uparam(17) = a2
158 uparam(18) = nu / (one - nu) ! NNU
159 uparam(19) = (one - two*nu) / (one - nu) ! NNU1
160 uparam(20) = cp
161 uparam(21) = fcut*two*pi
162c----------------
163 parmat(1) = bulk
164 parmat(2) = young
165 parmat(3) = nu
166C Formulation for solid elements time step computation.
167 parmat(16) = 2
168 parmat(17) = two*g / (bulk + four_over_3*g)
169c----------------
170 mtag%G_EPSD = 1
171 mtag%L_EPSD = 1
172 mtag%G_PLA = 1
173 mtag%L_PLA = 1
174 mtag%G_TEMP = 1
175 mtag%L_TEMP = 1
176 mtag%G_SEQ = 1
177 mtag%L_SEQ = 1
178c----------------
179 ! activate heat source calculation in material
180 matparam%HEAT_FLAG = 1
181!
182 CALL init_mat_keyword(matparam ,"ELASTO_PLASTIC")
183 CALL init_mat_keyword(matparam ,"INCREMENTAL" )
184 CALL init_mat_keyword(matparam ,"LARGE_STRAIN" )
185 CALL init_mat_keyword(matparam ,"HOOK")
186 ! Material compatibility with /EOS option
187 CALL init_mat_keyword(matparam,"EOS")
188 ! Properties compatibility
189 CALL init_mat_keyword(matparam,"SHELL_ISOTROPIC")
190 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
191 CALL init_mat_keyword(matparam,"SPH")
192c----------------
193 nuparam = 21
194 nuvar = 0
195 ntabl = 3
196c
197 itable(1) = tab_yld ! Yield function table = f(epsp,epsdot)
198 itable(2) = tab_temp ! Temperature scale factor table = f(epsp,T)
199 itable(3) = tab_eta ! Taylor-Quinney scale factor table = f(epsp,epsdot,T)
200 IF (tab_temp > 0 .or. tab_eta > 0) THEN
201 nvartmp = 5
202 ELSE
203 nvartmp = 1
204 ENDIF
205c-----------------------
206 WRITE(iout,1001) trim(titr),mat_id,ilaw
207 WRITE(iout,1000)
208 IF (is_encrypted)THEN
209 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
210 ELSE
211 WRITE(iout,1100) rho
212 WRITE(iout,1200) young,nu
213 WRITE(iout,1300) tab_yld,ismooth,xscale,yscale
214 WRITE(iout,1400) tab_temp,tref,tab_eta,cp,tini,eta,xrate
215 ENDIF
216c-----------
217 RETURN
218c-----------
219 1000 FORMAT(/
220 & 5x,'-------------------------------------------------------',/
221 & 5x,' MATERIAL MODEL: TABULATED ELASTO-PLASTIC ',/,
222 & 5x,'-------------------------------------------------------',/)
223 1001 FORMAT(/
224 & 5x,a,/,
225 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . . . . . . . .=',i10/,
226 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . . . . . . . .=',i10/)
227 1100 FORMAT(/
228 & 5x,'INITIAL DENSITY. . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
229 1200 FORMAT(/
230 & 5x,'ELASTIC PARAMETERS: ',/,
231 & 5x,'------------------- ',/,
232 & 5x,'YOUNG MODULUS. . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
233 & 5x,"POISSON'S RATIO. . . . . . . . . . . . . . . . . . . .=",1pg20.13/)
234 1300 FORMAT(/
235 & 5x,'PLASTIC PARAMETERS: ',/,
236 & 5x,'------------------- ',/,
237 & 5x,'YIELD STRESS VS PL. STRAIN (VS STRAIN RATE) TABLE ID .=',i10/,
238 & 5x,'INTERPOLATION FLAG:. . . . . . . . . . . . . . . . . .=',i10/,
239 & 5x,' = 1: LINEAR INTERPOLATION (DEFAULT) ',/,
240 & 5x,' = 2: LOGARITHMIC INTERPOLATION BASE 10 ',/,
241 & 5x,' = 3: LOGARITHMIC INTERPOLATION BASE N ',/,
242 & 5x,'STRAIN RATE SCALE FACTOR . . . . . . . . . . . . . . .=',1pg20.13/
243 & 5x,'YIELD STRESS SCALE FACTOR. . . . . . . . . . . . . . .=',1pg20.13/)
244 1400 FORMAT(/
245 & 5x,'THERMAL PARAMETERS: ',/,
246 & 5x,'------------------- ',/,
247 & 5x,'YIELD STRESS TEMPERATURE DEPENDENCY TABLE ID . . . . .=',i10/
248 & 5x,'REFERENCE TEMPERATURE. . . . . . . . . . . . . . . . .=',1pg20.13/
249 & 5x,'HEAT FRACTION TABLE ID . . . . . . . . . . . . . . . .=',i10/
250 & 5x,'SPECIFIC HEAT COEFFICIENT. . . . . . . . . . . . . . .=',1pg20.13/
251 & 5x,'INITIAL TEMPERATURE. . . . . . . . . . . . . . . . . .=',1pg20.13/
252 & 5x,'TAYLOR-QUINNEY COEFFICIENT . . . . . . . . . . . . . .=',1pg20.13/
253 & 5x,'STRAIN RATE SCALE FACTOR FOR HEAT FRACTION . . . . . .=',1pg20.13/)
254 END SUBROUTINE hm_read_mat109
255!=======================================================================
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_mat109(uparam, maxuparam, nuparam, nuvar, nvartmp, itable, maxtabl, ntabl, parmat, unitab, mat_id, titr, rho, mtag, matparam, lsubmodel)
subroutine init_mat_keyword(matparam, keyword)
integer, parameter nchartitle