OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat52.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_mat52 ../starter/source/materials/mat/mat052/hm_read_mat52.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_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
32!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
33!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
34!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
35!||--- uses -----------------------------------------------------
36!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
37!|| message_mod ../starter/share/message_module/message_mod.F
38!|| submodel_mod ../starter/share/modules1/submodel_mod.F
39!||====================================================================
40 SUBROUTINE hm_read_mat52(
41 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,MFUNC ,
42 . MAXFUNC ,IFUNC ,MTAG ,PARMAT ,UNITAB ,
43 . PM ,LSUBMODEL,ISRAT ,MAT_ID ,TITR ,
44 . ITABLE ,MAXTABL ,NTABLE ,MATPARAM )
45C-----------------------------------------------
46C M o d u l e s
47C-----------------------------------------------
48 USE unitab_mod
49 USE elbuftag_mod
50 USE message_mod
51 USE submodel_mod
52 USE matparam_def_mod
54C-----------------------------------------------
55C ROUTINE DESCRIPTION :
56C ===================
57C READ MAT LAW50 WITH HM READER
58C-----------------------------------------------
59C DUMMY ARGUMENTS DESCRIPTION:
60C ===================
61C UNITAB UNITS ARRAY
62C MAT_ID MATERIAL ID(INTEGER)
63C TITR MATERIAL TITLE
64C LSUBMODEL SUBMODEL STRUCTURE
65C-----------------------------------------------
66C I m p l i c i t T y p e s
67C-----------------------------------------------
68#include "implicit_f.inc"
69C-----------------------------------------------
70C C o m m o n B l o c k s
71C-----------------------------------------------
72#include "units_c.inc"
73#include "param_c.inc"
74C-----------------------------------------------
75C D u m m y A r g u m e n t s
76C-----------------------------------------------
77 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
78 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC,MAXTABL
79 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
80 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
81 INTEGER, INTENT(INOUT) :: ISRAT ,NTABLE,ITABLE(MAXTABL)
82 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR
83 INTEGER, INTENT(INOUT) :: MFUNC
84 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
85 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
86 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
87 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
88 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
89 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
90C-----------------------------------------------
91C L o c a l V a r i a b l e s
92C-----------------------------------------------
93 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
94 my_real
95 . E, NU, YEILD, ET,CSD, VISP, Q1, Q2, Q3, SN, EPSN,
96 . F1,FN,FC, FF, FU,FI,G,C1,N,FAC_L,FAC_T,FAC_M,FAC_C,
97 . r,xfac,yfac,rho0,rhor,fcut
98 INTEGER NRATE,J,I,NFUNC, IFLAG,IYIELDTAB,ITAB, ISRATE
99C=======================================================================
100 IS_ENCRYPTED = .false.
101 is_available = .false.
102 israt = 1 !IPM(3)
103 iyieldtab = 0
104 ntable = 0
105 itable(1) = 0
106 xfac = zero
107 yfac = zero
108
109 CALL hm_option_is_encrypted(is_encrypted)
110
111 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
113
114 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
115 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
116 CALL hm_get_intv ('MAT_Iflag' ,iflag ,is_available,lsubmodel)
117 CALL hm_get_intv ('Fsmooth' ,israte ,is_available,lsubmodel)
118 CALL hm_get_floatv('Fcut' ,fcut ,is_available, lsubmodel, unitab)
119 CALL hm_get_intv ('MAT_Iyield' ,iyieldtab ,is_available,lsubmodel)
120
121 CALL hm_get_floatv('MAT_A' ,yeild ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv('MAT_B' ,et ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv('MAT_N' ,n ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv('MAT_C' ,csd ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv('MAT_PC' ,visp ,is_available, lsubmodel, unitab)
126
127 CALL hm_get_floatv('MAT_q1' ,q1 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('MAT_q2' ,q2 ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv('MAT_q3' ,q3 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv('MAT_S_N' ,sn ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv('MAT_EPS_N' ,epsn ,is_available, lsubmodel, unitab)
132
133 CALL hm_get_floatv('MAT_f_I' ,fi ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv('MAT_f_N' ,fn ,is_available, lsubmodel, unitab)
135 CALL hm_get_floatv('MAT_f_C' ,fc ,is_available, lsubmodel, unitab)
136 CALL hm_get_floatv('MAT_f_F' ,ff ,is_available, lsubmodel, unitab)
137
138
139 IF(iyieldtab > 0) THEN
140 CALL hm_get_int_array_index ('MAT_Tab_ID' ,itable(1) ,i ,is_available, lsubmodel)
141 CALL hm_get_float_array_index('MAT_XFAC' ,xfac ,i ,is_available, lsubmodel, unitab)
142 CALL hm_get_float_array_index('MAT_YFAC' ,yfac ,i ,is_available, lsubmodel, unitab)
143 ENDIF
144 IF (rhor == zero) rhor=rho0
145 pm(1) = rhor
146 pm(89)= rho0
147
148 g = half*e/(1.+nu)
149 c1 = e / three / (one - two*nu)
150 IF( csd > zero .AND. visp > zero .AND. fcut == zero) THEN
151 CALL ancmsg(msgid=1220,
152 . msgtype=msgwarning,
153 . anmode=aninfo_blind_1,
154 . i1=mat_id,
155 . c1=titr)
156 ENDIF
157 IF (fcut == zero) fcut = infinity
158 israte = 1
159 IF(itable(1) /= 0) ntable = 1
160 IF(xfac == zero) xfac = one
161 IF(yfac == zero) yfac = one
162C.....
163C check of the parameters compatibility FI<Fc<FF
164C
165 IF(ff < fc .OR. ff < fi .OR. fc < fi ) THEN
166 CALL ancmsg(msgid=1745,
167 . msgtype=msgerror,
168 . anmode=aninfo_blind_1,
169 . i1=mat_id,
170 . c1=titr)
171 ENDIF
172
173
174
175 uparam(1)=e
176 uparam(2)=nu
177 uparam(3)= yeild
178 uparam(4)= et
179 uparam(5)= n
180 IF(csd == zero) csd = infinity
181 uparam(6)= csd
182 IF(visp == zero)visp=one
183 visp=1/visp
184 uparam(7)=visp
185 uparam(8)=q1
186 uparam(9)=q2
187 uparam(10)=q3
188 uparam(11)=sn
189 uparam(12)=epsn
190 uparam(13)=fi
191 uparam(14)=fn
192 uparam(15)=fc
193 uparam(16)=ff
194 IF(q1 == zero)q1=em20
195 fu=one/q1
196 uparam(17)=fu
197 uparam(18)=iflag
198 uparam(19) = israte
199 uparam(20) = fcut
200 IF(ntable == 1) uparam(21) = 1
201 uparam(22) = xfac
202 uparam(23) = yfac
203
204C
205 parmat(1) = c1
206 parmat(2) = e
207 parmat(3) = nu
208 parmat(4) = israte
209 parmat(5) = fcut
210 nuparam = 23
211 nfunc = 0
212 nuvar = 2
213C Formulation for solid elements time step computation.
214 parmat(16) = 2
215 parmat(17) = (one - two*nu)/(one + nu)
216C
217 mtag%G_PLA = 1
218 mtag%L_PLA = 1
219 mtag%G_EPSD = 1
220 mtag%L_EPSD = 1
221C
222 ! Tag for damage output
223 ! -> Number of output modes (stored in DMG(NEL,I), I>1)
224 matparam%NMOD = 4
225 ! Total number of damage outputs
226 ! -> DMG(NEL,1) = Global damage output
227 ! -> DMG(NEL,2:NMOD+1) = Damage modes output
228 mtag%G_DMG = 1 + matparam%NMOD
229 mtag%L_DMG = 1 + matparam%NMOD
230 ! -> Modes allocation and definition
231 ALLOCATE(matparam%MODE(matparam%NMOD))
232 matparam%MODE(1) = "Void growth volume fraction fg"
233 matparam%MODE(2) = "Nucleation volume fraction fn"
234 matparam%MODE(3) = "Total void volume fraction ft"
235 matparam%MODE(4) = "Effective void volume fraction f*"
236C
237 ! MATPARAM keywords
238 CALL init_mat_keyword(matparam,"HOOK")
239 ! Properties compatibility
240 CALL init_mat_keyword(matparam,"SHELL_ISOTROPIC")
241 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
242C
243 WRITE(iout,1001) trim(titr),mat_id,52
244 WRITE(iout,1000)
245
246 IF(is_encrypted)THEN
247 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
248 ELSE
249 WRITE(iout,1002) rho0
250 WRITE(iout,1100) e,nu,yeild, et, n,csd, visp,sn,epsn, q1,q2,q3,fi,fn,fc, ff, fu,israte,fcut, iflag
251 IF( iyieldtab > 0) THEN
252 write(iout,1200)itable(1),yfac,xfac
253 ENDIF
254
255 ENDIF
256C---
257 RETURN
258 1000 FORMAT(
259 &5x,30h tabulated gurson law ,/,
260 &5x,30h -------------------- ,//)
261 1001 FORMAT(/
262 &5x,a,/,
263 &5x,'MATERIAL NUMBER. . . . . . . . . . . . . . . . . =',i10/,
264 &5x,'MATERIAL LAW . . . . . . . . . . . . . . . . . . =',i10/)
265 1002 FORMAT(
266 &5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . =',1pg20.13/)
267 1100 FORMAT(
268 &5x,'YOUNG''S MODULUS. . . . . . . . . . . . . . . . =',1pg20.13,/
269 &5x,'POISSON''S RATIO. . . . . . . . . . . . . . . . =',1pg20.13,/
270 &5x,'YIELD STRESS. . . . . . . . . . . . . . . . . . =',1pg20.13,/
271 &5x,'TANGENT MODULUS . . . . . . . . . . . . . . . . =',1pg20.13,/
272 &5x,'HARDENING EXPONENT. . . . . . . . . . . . . . . =',1pg20.13,/
273 &5x,'coefficient of the cowper-symond .. . . . . . . =',1PG20.13,/
274 &5X,'strain rate exponent in cowper-symond law . . . =',1PG20.13,/
275 &5X,'gaussian standard deviation. . . . . . . . . . =',1PG20.13,/
276 &5X,'nuclueted effective plastic strain . . . . . . =',1PG20.13,/
277 &5x,'material parameters :',/
278 &10x, 'q1. . . . . . . . . . . . . . . . . . . . . =',1PG20.13,/
279 &10x, 'q2. . . . . . . . . . . . . . . . . . . . . . =',1PG20.13,/
280 &10x, 'q3. . . . . . . . . . . . . . . . . . . . . . =',1PG20.13,/
281 &5x,'initial void volume fraction . . . . . . . . . =',1PG20.13,/
282 &5x,'nuclueted void volume fraction . . . . . . . . =',1PG20.13,/
283 &5x,'critical void volume fraction at coalescence. . =',1PG20.13,/
284 &5x,'critical void volume fraction at ductile fracture=',1PG20.13,/
285 &5x,'VALUE of the coelescence VALUE. . . . . . . . . =',1PG20.13,/
286 &5X,'smooth strain rate option. . . . . . . . . . . =',I10/
287 &5X,'strain rate cutting frequency. . . . . . . . . =',1PG20.13/
288 &5x,'the choice of viscoplastic flow. . . . . . . . . =',I10)
289C
290 1200 FORMAT(
291 & 5X,'yield table id . . . . . . . . .. . . . . . . . =',I10/
292 & 5X,'yield scale factor . . . . . . . . . . . . . . =',1PG20.13/
293 & 5X,'plastic strain scale factor . . . . . . .. . =',1PG20.13)
294
295 END
296
297
298
299
end diagonal values have been computed in the(sparse) matrix id.SOL
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_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat52(uparam, maxuparam, nuparam, nuvar, mfunc, maxfunc, ifunc, mtag, parmat, unitab, pm, lsubmodel, israt, mat_id, titr, itable, maxtabl, ntable, matparam)
subroutine init_mat_keyword(matparam, keyword)
initmumps id
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
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)
Definition tabulated.F:32