OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat23.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_mat23 ../starter/source/materials/mat/mat023/hm_read_mat23.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_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_mat23(
39 . UPARAM ,MAXUPARAM ,NUPARAM ,NUVAR ,IFUNC ,
40 . MAXFUNC ,NFUNC ,PARMAT ,IMATVIS ,IFORM ,
41 . UNITAB ,ID ,TITR ,LSUBMODEL,MTAG ,
42 . PM ,IPM ,ISRATE ,MATPARAM )
43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C ROUTINE DESCRIPTION :
47C ===================
48C READ MAT LAW02 WITH HM READER
49C-----------------------------------------------
50C DUMMY ARGUMENTS DESCRIPTION:
51C ===================
52C UNITAB UNITS ARRAY
53C ID MATERIAL ID(INTEGER)
54C TITR MATERIAL TITLE
55C LSUBMODEL SUBMODEL STRUCTURE
56C
57C IFORM 0 (PLAS_JOHNSON) 1 (PLAS_ZERILLI) 2 (PLAS_PREDEF)
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 INTEGER, INTENT(IN) :: ID,MAXUPARAM,MAXFUNC,IFORM
82 INTEGER, INTENT(INOUT) :: IPM(NPROPMI),IMATVIS,ISRATE
83 my_real, INTENT(INOUT) :: PM(NPROPM)
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
86 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC
87 INTEGER, DIMENSION(MAXFUNC), INTENT(INOUT) :: IFUNC
88 my_real, DIMENSION(MAXUPARAM), INTENT(INOUT) :: uparam
89 my_real, INTENT(INOUT) :: parmat(*)
90 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
91 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
92C-----------------------------------------------
93C L o c a l V a r i a b l e s
94C-----------------------------------------------
95 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
96 INTEGER :: ICC,ISRAT1,IFLAG,MFLAG,ILAW
97 my_real :: RHOR,RHO0
98 my_real
99 . young, anu, ca, cb, cn, epsm, sigm, cc, eps0, epsl, el, g,
100 . e0, c0, c1, e1mn2, en1n2, sdsp, hl, yldl
101 CHARACTER PREDEF*16
102C-----------------------------------------------
103C S o u r c e L i n e s
104C-----------------------------------------------
105 is_encrypted = .false.
106 is_available = .false.
107 rhor = zero
108 nuvar = 0
109 nuparam = 0
110 nfunc = 0
111 ilaw = 23
112C
113 CALL hm_option_is_encrypted(is_encrypted)
114C
115 !line-1
116 CALL hm_get_floatv('mat_rho' ,RHO0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
117!! CALL HM_GET_FLOATV('refer_rho',RHOR ,IS_AVAILABLE, LSUBMODEL, UNITAB)
118 !line-2
119 CALL HM_GET_FLOATV('mat_e' ,YOUNG ,IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('mat_nu' ,ANU ,IS_AVAILABLE, LSUBMODEL, UNITAB)
121 !line-3
122 CALL HM_GET_FLOATV('mat_sigy' ,CA ,IS_AVAILABLE, LSUBMODEL, UNITAB)
123 CALL HM_GET_FLOATV('mat_beta' ,CB ,IS_AVAILABLE, LSUBMODEL, UNITAB)
124 CALL HM_GET_FLOATV('mat_hard' ,CN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
125 CALL HM_GET_FLOATV('mat_eps' ,EPSM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
126 CALL HM_GET_FLOATV('mat_sig' ,SIGM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
127
128 !line-4
129 CALL HM_GET_FLOATV('mat_src' ,CC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
130 CALL HM_GET_FLOATV('mat_srp' ,EPS0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 CALL HM_GET_INTV ('strflag' ,ICC ,IS_AVAILABLE, LSUBMODEL)
132 !line-5
133 CALL HM_GET_FLOATV('mat_damage' ,EPSL ,IS_AVAILABLE, LSUBMODEL, UNITAB)
134 CALL HM_GET_FLOATV('mat_etan' ,EL ,IS_AVAILABLE, LSUBMODEL, UNITAB)
135C
136 IF(RHOR == ZERO)RHOR = RHO0
137 PM(1) = RHOR
138 PM(89)= RHO0
139C
140 IF(ANU == HALF) ANU=ZEP499
141 IF(EPSL == ZERO) EPSL=ZEP15
142 IF(CN == ZERO) CN = ONE
143 IF(EPSM == ZERO) EPSM = EP30
144 IF(SIGM == ZERO) SIGM = EP30
145 IF(CC == ZERO) EPS0 = ONE
146 G=YOUNG/(TWO*(ONE + ANU))
147 E0=ZERO
148 C0=ZERO
149 C1=YOUNG/(THREE*(ONE - TWO*ANU))
150 E1MN2=YOUNG/(ONE - ANU**2)
151 EN1N2=ANU*E1MN2
152 SDSP =SQRT(YOUNG/MAX(PM(1),EM20))
153 HL =YOUNG * EL / MAX(EM20,YOUNG-EL)
154 YLDL = CA+CB*EXP(CN*LOG(EPSL))
155 YLDL = MIN(YLDL,SIGM)
156C
157 PM(20)=YOUNG
158 PM(21)=ANU
159 PM(22)=G
160 PM(23)=E0
161 PM(24)=E1MN2
162 PM(25)=EN1N2
163 PM(26)=FIVE_OVER_6
164 PM(27)=SDSP
165 PM(28)=ONE/YOUNG
166 PM(29)=-ANU*PM(28)
167 PM(30)=ONE/G
168 PM(31)=C0
169 PM(32)=C1
170 PM(38)=CA
171 PM(39)=CB
172 PM(40)=CN
173 PM(41)=EPSM
174 PM(42)=SIGM
175 PM(43)=CC
176 PM(44)=EPS0
177 PM(45)=EPSL
178 PM(46)=HL
179 PM(47)=YLDL
180 PM(48)=EL
181 PM(49)=ICC
182C-----------
183C Formulation for solid elements time step computation.
184 IPM(252)= 2
185 PM(105) = TWO*G/(C1+FOUR_OVER_3*G) ! =(1-2*Nu)/(1-Nu)
186C
187 WRITE(IOUT,1010) TRIM(TITR),ID,ILAW
188 WRITE(IOUT,1000)
189 IF(IS_ENCRYPTED)THEN
190 WRITE(IOUT,'(5x,a,//)')'confidential data'
191 ELSE
192 WRITE(IOUT,1020)RHO0
193 WRITE(IOUT,1300)YOUNG,ANU,G
194 WRITE(IOUT,1400)CA,CB,CN,EPSM,SIGM
195 WRITE(IOUT,1600)CC,EPS0,ICC
196 WRITE(IOUT,1800)EPSL,EL
197 ENDIF
198C
199 IF(CN>ONE) THEN
200 CALL ANCMSG(MSGID=213,
201 . MSGTYPE=MSGERROR,
202 . ANMODE=ANINFO,
203 . I1=23,
204 . I2=ID,
205 . C1=TITR)
206 ENDIF
207 IF(EPS0==ZERO) THEN
208 CALL ANCMSG(MSGID=298,
209 . MSGTYPE=MSGERROR,
210 . ANMODE=ANINFO,
211 . I1=23,
212 . I2=ID,
213 . C1=TITR)
214 ENDIF
215.OR..OR. IF(EL>ZEROEL<=-YOUNGEL<=-THREE*G) THEN
216 CALL ANCMSG(MSGID=308,
217 . MSGTYPE=MSGERROR,
218 . ANMODE=ANINFO,
219 . I1=ID,
220 . C1=TITR)
221 ENDIF
222C
223C---- Definition of internal variables (Elementary storage)
224c
225 MTAG%G_EPSD = 1
226 MTAG%G_PLA = 1
227c
228 MTAG%L_EPSD = 1
229 MTAG%L_PLA = 1
230c
231 ! MATPARAM keywords
232 CALL INIT_MAT_KEYWORD(MATPARAM,"ELASTO_PLASTIC")
233c
234 ! Properties compatibility
235 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
236 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
237c
238c-------------------
239 RETURN
240c-------------------
241 1000 FORMAT(
242 & 5X,' elastic plastic + damage law ',/,
243 & 5X,' ---------------------------- ',//)
244 1010 FORMAT(/
245 & 5X,A,/,
246 & 5X,'material number. . . . . . . . . . . . . .=',I10/,
247 & 5X,'material law . . . . . . . . . . . . . . .=',I10/)
248 1020 FORMAT(
249 & 5X,'initial density. . . . . . . . . . . . . .=',1PG20.13/)
250 1300 FORMAT(
251 & 5X,'young''s modulus . . . . . . . . . . . .=',1PG20.13/,
252 & 5X,'poisson''s ratio . . . . . . . . . . . .=',1PG20.13/,
253 & 5X,'shear modulus . . . . . . . . . . . . .=',1PG20.13//)
254 1400 FORMAT(
255 & 5X,'yield coefficient ca. . . . . . . . . .=',1PG20.13/,
256 & 5X,'yield coefficient cb. . . . . . . . . .=',1PG20.13/,
257 & 5X,'yield coefficient cn. . . . . . . . . .=',1PG20.13/,
258 & 5X,'eps-max . . . . . . . . . . . . . . . .=',1PG20.13/,
259 & 5X,'sig-max . . . . . . . . . . . . . . . .=',1PG20.13//)
260 1600 FORMAT(
261 & 5X,'strain rate coefficient cc. . . . . . .=',1PG20.13/,
262 & 5X,'reference strain rate . . . . . . . . .=',1PG20.13/,
263 & 5X,'flag for strain rate on sig-max . . . .=',I10//)
264 1800 FORMAT(
265 & 5X,'damage strain limit . . . . . . . . . .=',1PG20.13/,
266 & 5X,'damage tangent modulus el . . . . . . .=',1PG20.13//)
267c-------------------
268 RETURN
269 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat23(uparam, maxuparam, nuparam, nuvar, ifunc, maxfunc, nfunc, parmat, imatvis, iform, unitab, id, titr, lsubmodel, mtag, pm, ipm, israte, matparam)
#define max(a, b)
Definition macros.h:21
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle