OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat83.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_mat83 ../starter/source/materials/mat/mat083/hm_read_mat83.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_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
31!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
32!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
33!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
34!||--- uses -----------------------------------------------------
35!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
36!|| message_mod ../starter/share/message_module/message_mod.F
37!|| submodel_mod ../starter/share/modules1/submodel_mod.F
38!||====================================================================
39 SUBROUTINE hm_read_mat83(UPARAM ,MAXUPARAM ,NUPARAM ,MTAG ,PM ,
40 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC ,PARMAT ,
41 . UNITAB ,MAT_ID ,TITR ,ISRATE ,LSUBMODEL,
42 . MATPARAM)
43C-----------------------------------------------
44C ROUTINE DESCRIPTION :
45C ===================
46C READ MAT LAW83 WITH HM READER
47C-----------------------------------------------
48C DUMMY ARGUMENTS DESCRIPTION:
49C ===================
50C
51C NAME DESCRIPTION
52C
53C IPM MATERIAL ARRAY(INTEGER)
54C PM MATERIAL ARRAY(REAL)
55C UNITAB UNITS ARRAY
56C ID MATERIAL ID(INTEGER)
57C TITR MATERIAL TITLE
58C LSUBMODEL SUBMODEL STRUCTURE
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 "param_c.inc"
76#include "units_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(INOUT) :: IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM,NUVAR,ISRATE
82 INTEGER, INTENT(IN) :: MAT_ID
83 my_real, INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(NSUBMOD)
86 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
87 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
88C-----------------------------------------------
89C L o c a l V a r i a b l e s
90C-----------------------------------------------
91 INTEGER :: I,J,NRATE,IFILTR,IDYIELD,IFUNN,IFUNT,
92 . RHOFLAG,ICOMP,IPLAS,VP,ILAW
93 my_real :: YOUNGT,YOUNGC,G,YOUNG,FCUT,XFAC,YFAC,XSCALE,RN,RS,BETA,ALPHA,
94 . a1,a2,aa,e0,emax,epsmax,rho0,rhor,yfac_unit,
95 . xfac_unit,xscale_unit,rn_unit,rs_unit
96 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
97!=======================================================================
98 ILAW = 83
99!
100 is_encrypted = .false.
101 is_available = .false.
102!
103 CALL hm_option_is_encrypted(is_encrypted)
104card1
105 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
107card2
108 CALL hm_get_floatv('MAT_E' ,youngt ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv('MAT_G' ,g ,is_available, lsubmodel, unitab)
110 CALL hm_get_intv ('MAT_IMASS' ,rhoflag ,is_available, lsubmodel)
111 CALL hm_get_intv ('COMP_OPT' ,icomp ,is_available, lsubmodel)
112 CALL hm_get_floatv('MAT_ECOMP' ,youngc ,is_available, lsubmodel, unitab)
113card3
114 CALL hm_get_intv ('FUN_A1' ,idyield ,is_available ,lsubmodel)
115 CALL hm_get_floatv('FScale11' ,yfac ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv('FScale22' ,xfac ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_ALPHA' ,alpha ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('MAT_Beta' ,beta ,is_available, lsubmodel, unitab)
119card4
120 CALL hm_get_floatv('MAT_R00' ,rn ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv('MAT_R45' ,rs ,is_available, lsubmodel, unitab)
122 CALL hm_get_intv ('Fsmooth' ,israte ,is_available ,lsubmodel)
123 CALL hm_get_floatv('Fcut' ,fcut ,is_available, lsubmodel, unitab)
124card5
125 CALL hm_get_intv ('FUN_A2' ,ifunn ,is_available ,lsubmodel)
126 CALL hm_get_intv ('FUN_A3' ,ifunt ,is_available ,lsubmodel)
127 CALL hm_get_floatv('FScale33' ,xscale ,is_available, lsubmodel, unitab)
128c-------------------------------------------------------------------------------------
129 CALL hm_get_floatv_dim('FScale11' ,yfac_unit ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv_dim('FScale22' ,xfac_unit ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv_dim('FScale33' ,xscale_unit ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv_dim('MAT_R00' ,rn_unit ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv_dim('MAT_R45' ,rs_unit ,is_available, lsubmodel, unitab)
134c-------------------------------------------------------------------------------------
135 IF (rhor == zero) rhor=rho0
136 pm(1) = rhor
137 pm(89)= rho0
138!
139 IF (xfac == zero) xfac = one*xfac_unit
140 IF (beta == zero) beta = two
141 IF (rn == zero) rn = one*rn_unit
142 IF (rs == zero) rs = one*rs_unit
143 iplas = 0 ! hidden
144 IF (iplas == 0) iplas = 2
145 IF (israte == 0) THEN
146 vp = 0
147 ELSE
148 vp = 1
149 israte = 1
150 END IF
151 IF (fcut == zero) fcut = 10000.0d0*unitab%FAC_T_WORK
152C---
153 nfunc = 3
154 ifunc(1) = ifunn
155 ifunc(2) = ifunt
156 ifunc(3) = idyield
157C---
158 IF (ifunc(3) == 0) THEN
159 CALL ancmsg(msgid=126, msgtype=msgerror, anmode=aninfo_blind_1,
160 . i1=mat_id,
161 . c1=titr,
162 . i2=ifunc(3))
163 ENDIF
164
165 IF (yfac == zero) yfac = one*yfac_unit
166 IF (xscale == zero) xscale = one*xscale_unit
167 IF( g == zero) g = youngt
168 IF (youngc == zero) youngc = youngt
169 IF (icomp /= 1) icomp = 0
170 young = max(youngt,youngc)
171 alpha = min(alpha, one)
172C----------------
173 uparam(1) = youngt
174 uparam(2) = alpha
175 uparam(3) = beta
176 uparam(4) = yfac
177 uparam(5) = xscale
178 uparam(6) = rn
179 uparam(7) = rs
180 uparam(8) = xfac
181 uparam(9) = rhoflag
182 uparam(10)= iplas
183 uparam(11) = g
184 uparam(12) = icomp
185 uparam(13) = youngc
186 uparam(14) = vp ! total or plastic strain rate flag
187C----------------
188 nuparam = 14
189 nuvar = 1
190C----------------
191 parmat(1) = young/three
192 parmat(2) = young
193 parmat(5) = fcut
194C Formulation for solid elements time step computation.
195 parmat(16) = 2
196 parmat(17) = one ! (ONE - TWO*NU)/(ONE - NU), NU=0
197!
198 mtag%G_GAMA = 9
199 mtag%G_EPSD = 1
200 mtag%G_PLA = 1 !global
201 mtag%L_EPE = 3
202 mtag%L_PLA = 1
203 mtag%L_EPSD = 1
204 mtag%L_DMG = 1
205 mtag%G_DMG = 1
206c-----------------
207 ! MATPARAM keywords
208 CALL init_mat_keyword(matparam,"HOOK")
209 ! Properties compatibility
210 CALL init_mat_keyword(matparam,"SOLID_COHESIVE")
211C----------------
212 WRITE(iout,1100) trim(titr),mat_id,83
213 WRITE(iout,1000)
214 IF (is_encrypted) THEN
215 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
216 ELSE
217 WRITE(iout,1200) rho0
218 WRITE(iout,1300) youngt,youngc,g,icomp,rhoflag,idyield,yfac,xfac,alpha,beta
219 WRITE(iout,1400)ifunn,ifunt,xscale,rn,rs,israte,fcut
220 IF (vp ==0) THEN
221 WRITE(iout,1500)
222 ELSE
223 WRITE(iout,1600)
224 END IF
225 ENDIF
226C-----------
227 RETURN
228C-----------
229 1000 FORMAT(
230 & 5x,' CONNECTION MATERIAL LAW 83 ',/,
231 & 5x,' -------------------------- ',/)
232 1100 FORMAT(/
233 & 5x,a,/,
234 & 5x,'MATERIAL NUMBER . . . . . . . . . . . . . . . . . .=',i10/,
235 & 5x,'MATERIAL LAW. . . . . . . . . . . . . . . . . . . .=',i10/)
236 1200 FORMAT(
237 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . . .=',1pg20.13)
238 1300 FORMAT(
239 & 5x,'YOUNG MODULUS PER THICKNESS UNIT IN TENSION . . . .=',1pg20.13/,
240 & 5x,'YOUNG MODULUS PER THICKNESS UNIT IN COMPRESSION . .=',1pg20.13/,
241 & 5x,'SHEAR MODULUS PER THICKNESS UNIT . . . . . . . . .=',1pg20.13/,
242 & 5x,'COMPRESSION BEHAVIOR (FLAG) . . . . . . . . . . . .=',i10/,
243 & 5x,' = 0 => ELASTO-PLASTIC '/,
244 & 5x,' = 1 => LINEAR ELASTIC '/,
245 & 5x,'DENSITY UNIT FLAG . . . . . . . . . . . . . . . . .=',i10/,
246 & 5x,' = 0 => VOLUME DENSITY '/,
247 & 5x,' = 1 => surface density '/,
248 & 5X,'yield stress FUNCTION . . . . . . . . . . . . . . .=',I10/,
249 & 5X,'scale factor for yield function . . . . . . . . . .=',1PG20.13/,
250 & 5X,'scale factor for yield function abscissa . . . . .=',1PG20.13/,
251 & 5X,'parameter alpha in yield function . . . . . . . . .=',1PG20.13/,
252 & 5X,'parameter beta in yield function . . . . . . . . .=',1PG20.13)
253 1400 FORMAT(
254 & 5X,'strain rate function in normal direction. . . . . .=',I10/,
255 & 5X,'strain rate function in tangent direction . . . . .=',I10/,
256 & 5X,'scale factor for strain rate in function . . . . .=',1PG20.13/,
257 & 5X,'rn variable . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
258 & 5X,'rs variable . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
259 & 5X,'strain rate filtering flag . . . . . . . . . . . .=',I10/,
260 & 5X,'cut freq for strain rate filtering . . . . . . . .=',1PG20.13)
261 1500 FORMAT(5X,'using total strain rate',/)
262 1600 FORMAT(5X,'using plastic strain rate',/)
263C--------
264 END
#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 hm_read_mat83(uparam, maxuparam, nuparam, mtag, pm, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, mat_id, titr, israte, lsubmodel, matparam)
subroutine init_mat_keyword(matparam, keyword)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
for(i8=*sizetab-1;i8 >=0;i8--)
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