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 :: 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 . 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_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)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle