OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat44.F File Reference
#include "implicit_f.inc"
#include "units_c.inc"
#include "param_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_mat44 (uparam, maxuparam, nuparam, nuvar, nfunc, mtag, parmat, unitab, pm, lsubmodel, israte, mat_id, titr, ifunc, maxfunc, nvartmp, matparam)

Function/Subroutine Documentation

◆ hm_read_mat44()

subroutine hm_read_mat44 ( intent(inout) uparam,
integer, intent(in) maxuparam,
integer, intent(inout) nuparam,
integer, intent(inout) nuvar,
integer, intent(inout) nfunc,
type(mlaw_tag_), intent(inout) mtag,
intent(inout) parmat,
type (unit_type_), intent(in) unitab,
intent(inout) pm,
type(submodel_data), dimension(*), intent(in) lsubmodel,
integer, intent(inout) israte,
integer, intent(in) mat_id,
character(len=nchartitle), intent(in) titr,
integer, dimension(maxfunc), intent(inout) ifunc,
integer, intent(in) maxfunc,
integer, intent(inout) nvartmp,
type(matparam_struct_), intent(inout) matparam )

Definition at line 39 of file hm_read_mat44.F.

44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE unitab_mod
48 USE elbuftag_mod
49 USE message_mod
50 USE submodel_mod
51 USE matparam_def_mod
53C-----------------------------------------------
54C ROUTINE DESCRIPTION :
55C ===================
56C READ MAT LAW44 WITH HM READER
57C-----------------------------------------------
58C DUMMY ARGUMENTS DESCRIPTION:
59C ===================
60C UNITAB UNITS ARRAY
61C MAT_ID MATERIAL ID(INTEGER)
62C TITR MATERIAL TITLE
63C LSUBMODEL SUBMODEL STRUCTURE
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71#include "units_c.inc"
72#include "param_c.inc"
73C-----------------------------------------------
74C D u m m y A r g u m e n t s
75C-----------------------------------------------
76 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
77 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
78 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: pm
79 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
80 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC)
81 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,NVARTMP
82 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
83 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
84 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
85 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
86 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
87C-----------------------------------------------
88C L o c a l V a r i a b l e s
89C-----------------------------------------------
90 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
91 INTEGER :: ILAW,ICC,ISRAT,Ivflag
92 my_real :: rho0,rhor,e,nu,ca,cb,cn,g,a1,bulk,epsm,sigm,epsr1,epsr2,
93 . epsp_ref,fisokin,cp,cc,asrate,epsgm,yld_scale,yld_scale_unit
94C=======================================================================
95 is_encrypted = .false.
96 is_available = .false.
97 ilaw = 44
98c
99 CALL hm_option_is_encrypted(is_encrypted)
100c
101 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
102 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
103
104 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
106c
107 CALL hm_get_floatv('MAT_SIGY' ,ca ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv('MAT_B' ,cb ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv('MAT_N' ,cn ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_HARD' ,fisokin ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv('MAT_SIG' ,sigm ,is_available, lsubmodel, unitab)
112c
113 CALL hm_get_floatv('MAT_SRC' ,epsp_ref ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv('MAT_SRE' ,cp ,is_available, lsubmodel, unitab)
115 CALL hm_get_intv ('STRFLAG' ,icc ,is_available, lsubmodel)
116 CALL hm_get_intv ('Fsmooth' ,israt ,is_available, lsubmodel)
117 CALL hm_get_floatv('Fcut' ,asrate ,is_available, lsubmodel, unitab)
118 CALL hm_get_intv ('Vflag' ,ivflag ,is_available, lsubmodel)
119c
120 CALL hm_get_floatv('MAT_EPS' ,epsm ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv('MAT_ETA1' ,epsr1 ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv('MAT_ETA2' ,epsr2 ,is_available, lsubmodel, unitab)
123c
124 CALL hm_get_intv ('YLD_FUNC' ,ifunc(1) ,is_available, lsubmodel)
125 CALL hm_get_floatv('YLD_SCALE' ,yld_scale,is_available, lsubmodel, unitab)
126c--------------------------------------------------
127c default values
128c---------------------
129 IF (rhor == zero) rhor = rho0
130c
131 IF (nu < zero .OR. nu >= half) THEN
132 CALL ancmsg(msgid=49,
133 . msgtype=msgerror,
134 . anmode=aninfo_blind_2,
135 . r1=nu,
136 . i1=mat_id,
137 . c1=titr)
138 ENDIF
139 IF (epsp_ref == zero) THEN
140 cc = zero
141 ELSE
142 cc = one / epsp_ref
143 END IF
144 IF (cc > zero .AND. cp > zero .AND.
145 . israt == 0 .AND. asrate == zero .AND. ivflag /= 1) THEN
146 CALL ancmsg(msgid=1881,
147 . msgtype=msgwarning,
148 . anmode=aninfo_blind_1,
149 . i1=mat_id,
150 . c1=titr)
151 ENDIF
152 IF (epsr1 == zero) epsr1 = infinity
153 IF (epsr2 == zero) epsr2 = two*infinity
154 IF (epsm == zero) epsm = infinity
155 IF (sigm == zero) sigm = infinity
156 IF (icc == 0) icc = 1
157 IF (cp == zero) cp = one
158 cp = one / cp
159 IF (ivflag == 0) THEN
160 ivflag = 2
161 ENDIF
162 !----------------------------------------------------------
163 ! Filtering frequency
164 IF (ivflag == 1) THEN
165 ! If plastic strain is chosen, filtering by default
166 israt = 1
167 israte = max(israte,israt)
168 asrate = 10000.0d0*unitab%FAC_T_WORK
169 ELSE
170 IF (asrate /= zero) THEN
171 ! If a filtering frequency is given by the user
172 israt = 1
173 israte = max(israte,israt)
174 ELSE
175 ! If no filtering frequency is given but the flag is activated
176 IF (israt /= 0) THEN
177 israt = 1
178 israte = max(israte,israt)
179 asrate = 10000.0d0*unitab%FAC_T_WORK
180 ! If no filtering frequency and no flag is activated => no filtering
181 ELSE
182 israt = 0
183 israte = 0
184 asrate = zero
185 ENDIF
186 ENDIF
187 ENDIF
188 !---------------------------------------------------------
189 IF (cn /= zero .and. cb /= zero) THEN
190 epsgm = ((sigm - ca) / cb)**(one/cn)
191 ELSE
192 epsgm = infinity
193 ENDIF
194 IF (ifunc(1) == 0) THEN
195 yld_scale = zero
196 ELSEIF (yld_scale == zero) THEN
197 CALL hm_get_floatv_dim('YLD_SCALE' ,yld_scale_unit ,is_available, lsubmodel, unitab)
198 yld_scale = one * yld_scale_unit
199 ENDIF
200 ! If IFUNC > 0 and CA > 0 and Ivflag =/ 1
201 IF (((ifunc(1) > 0).AND.(ca /= zero)).AND.(ivflag /= 1)) THEN
202 CALL ancmsg(msgid=1880,
203 . msgtype=msgwarning,
204 . anmode=aninfo_blind_1,
205 . i1=mat_id,
206 . c1=titr)
207 ca = zero
208 ! IFUNC > 0 and CA > 0 can only be set with Ivflag = 1
209 ENDIF
210c-----------------
211 bulk = e / three / (one - two*nu)
212 a1 = e / (one-nu*nu)
213 g = e / two / (one + nu)
214c-----------------
215 nuparam = 24
216 IF (ifunc(1) > 0) THEN
217 nfunc = 1
218 nvartmp = 1
219 ELSE
220 nfunc = 0
221 nvartmp = 0
222 ENDIF
223 nuvar = 1
224c-----------------
225 uparam(1) = e
226 uparam(2) = nu
227 uparam(3) = ca
228 uparam(4) = sigm
229 uparam(5) = epsm
230 uparam(6) = epsr1
231 uparam(7) = epsr2
232 uparam(8) = cb
233 uparam(9) = cn
234 uparam(10) = icc
235 uparam(11) = cc
236 uparam(12) = cp
237 uparam(13) = israt
238 uparam(14) = asrate
239 uparam(15) = fisokin
240 uparam(16) = g
241 uparam(17) = two*g
242 uparam(18) = three*g
243 uparam(19) = bulk
244 uparam(20) = a1
245 uparam(21) = a1*nu
246 uparam(22) = epsgm
247 uparam(23) = ivflag
248 uparam(24) = yld_scale
249c-----------------
250 parmat(1) = bulk
251 parmat(2) = e
252 parmat(3) = nu
253 parmat(4) = israte
254 parmat(5) = asrate
255C Formulation for solid elements time step computation.
256 parmat(16) = 2
257 parmat(17) = two*g/(bulk+four_over_3*g) ! == (1-2*nu)/(1-nu)
258C
259c-----------------
260 pm(1) = rhor
261 pm(89) = rho0
262 pm(27) = sqrt(a1/rho0) ! sound speed estimation
263 pm(100)= bulk
264c-----------------
265c Element buffer variable allocation
266c-----------------
267 mtag%G_PLA = 1
268 mtag%L_PLA = 1
269 mtag%L_EPSD = 1
270 mtag%G_EPSD = 1
271 IF (fisokin > zero) THEN
272 mtag%L_SIGB = 3
273 ENDIF
274C
275 CALL init_mat_keyword(matparam,"ELASTO_PLASTIC")
276 CALL init_mat_keyword(matparam,"INCREMENTAL")
277 CALL init_mat_keyword(matparam,"LARGE_STRAIN")
278 ! Properties compatibility
279 CALL init_mat_keyword(matparam,"SHELL_ISOTROPIC")
280 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
281 CALL init_mat_keyword(matparam,"BEAM_ALL")
282 CALL init_mat_keyword(matparam,"TRUSS")
283C
284 ! Material compatibility with /EOS option
285 CALL init_mat_keyword(matparam,"EOS")
286c-----------------
287 WRITE(iout,1000) trim(titr),mat_id,44
288 WRITE(iout,1100)
289
290 IF (is_encrypted) THEN
291 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
292 ELSE
293 WRITE(iout,1200) rho0
294 WRITE(iout,1300)e,nu,ca,cb,cn,fisokin,sigm,
295 . epsp_ref,cp,icc,israte,asrate,ivflag,epsm,
296 . epsr1,epsr2,ifunc(1),yld_scale
297 ENDIF
298c-----------------------------------------------------------------------
299 1000 FORMAT(/
300 & 5x,a,/,
301 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
302 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
303 1100 FORMAT
304 &(5x,'MATERIAL MODEL : ELASTIC-PLASTIC (COWPER-SYMONDS)',/,
305 & 5x,'-------------------------------------------------',/)
306 1200 FORMAT(
307 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
308 1300 FORMAT(
309 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
310 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/
311 & 5x,'YIELD STRESS . . . . . . . . . . . . . =',1pg20.13/
312 & 5x,'HARDENING PARAMETER. . . . . . . . . . =',1pg20.13/
313 & 5x,'HARDENING EXPONENT . . . . . . . . . . =',1pg20.13/
314 & 5x,'ISO-KINEMATIC HARDENNING FACTOR. . . . =',1pg20.13/
315 & 5x,'MAXIMUM STRESS . . . . . . . . . . . . =',1pg20.13/
316 & 5x,'REFERENCE STRAIN RATE CC . . . . . . . =',1pg20.13/
317 & 5x,'STRAIN RATE EXPONENT (1/P) . . . . . . =',1pg20.13/
318 & 5x,'FLAG FOR STRAIN RATE ON SIG-MAX. . . . =',i10/
319 & 5x,'SMOOTH STRAIN RATE OPTION. . . . . . . =',i10/
320 & 5x,'STRAIN RATE CUTTING FREQUENCY. . . . . =',1pg20.13/
321 & 5x,'STRAIN RATE CHOICE FLAG . . . . . . . =',i10/
322 & 5x,' VP=1 EQUIVALENT PLASTIC STRAIN RATE'/
323 & 5x,' VP=2 TOTAL STRAIN RATE (DEFAULT)'/
324 & 5x,' VP=3 DEVIATORIC STRAIN RATE'/
325 & 5x,'FAILURE PLASTIC STRAIN . . . . . . . . =',1pg20.13/
326 & 5x,'TENSION FAILURE STRAIN 1 . . . . . . . =',1pg20.13/
327 & 5x,'TENSION FAILURE STRAIN 2 . . . . . . . =',1pg20.13/
328 & 5x,'YIELD FUNCTION IDENTIFIER . . . . . . =',i10/
329 & 5x,'YIELD FUNCTION SCALE FACTOR . . . . . =',1pg20.13/)
330c-----------------------------------------------------------------------
331 RETURN
#define my_real
Definition cppsort.cpp:32
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 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:889