OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat65.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_mat65 ../starter/source/materials/mat/mat065/hm_read_mat65.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_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
32!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
33!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
34!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
35!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
36!||--- uses -----------------------------------------------------
37!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.f
38!|| message_mod ../starter/share/message_module/message_mod.f
39!|| submodel_mod ../starter/share/modules1/submodel_mod.F
40!||====================================================================
41 SUBROUTINE hm_read_mat65(
42 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NFUNC ,
43 . MAXFUNC ,IFUNC ,MTAG ,PARMAT ,UNITAB ,
44 . PM ,LSUBMODEL,ISRATE ,MAT_ID ,TITR ,
45 . MATPARAM )
46C-----------------------------------------------
47C M o d u l e s
48C-----------------------------------------------
49 USE unitab_mod
50 USE elbuftag_mod
51 USE message_mod
52 USE submodel_mod
53 USE matparam_def_mod
55C-----------------------------------------------
56C ROUTINE DESCRIPTION :
57C ===================
58C READ MAT LAW50 WITH HM READER
59C-----------------------------------------------
60C DUMMY ARGUMENTS DESCRIPTION:
61C ===================
62C UNITAB UNITS ARRAY
63C MAT_ID MATERIAL ID(INTEGER)
64C TITR MATERIAL TITLE
65C LSUBMODEL SUBMODEL STRUCTURE
66C-----------------------------------------------
67C I m p l i c i t T y p e s
68C-----------------------------------------------
69#include "implicit_f.inc"
70C-----------------------------------------------
71C C o m m o n B l o c k s
72C-----------------------------------------------
73#include "units_c.inc"
74#include "param_c.inc"
75C-----------------------------------------------
76C D u m m y A r g u m e n t s
77C-----------------------------------------------
78 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
79 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
80 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
81 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
82 INTEGER, INTENT(INOUT) :: ISRATE
83 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC
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 INTEGER :: I,ILAW,NRATE,ISRAT
95 my_real :: RHO0,RHOR,E,NU,G,C1,EPSMAX,FCUT,PRESS_SCALE
96 INTEGER ,DIMENSION(MAXFUNC) :: FUN_LOAD,FUN_UNLOAD
97 my_real ,DIMENSION(MAXFUNC) :: yfac,rate
98C=======================================================================
99 is_encrypted = .false.
100 is_available = .false.
101 ilaw = 65
102c
103 CALL hm_option_is_encrypted(is_encrypted)
104c
105 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
107c
108 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_EPS' ,epsmax ,is_available, lsubmodel, unitab)
111c
112 CALL hm_get_intv ('NRATEP' ,nrate ,is_available,lsubmodel)
113 CALL hm_get_intv ('Fsmooth' ,israt ,is_available,lsubmodel)
114 CALL hm_get_floatv('Fcut' ,fcut ,is_available, lsubmodel, unitab)
115c
116 CALL hm_get_floatv_dim('MAT_E',press_scale,is_available,lsubmodel,unitab)
117c
118 DO i=1,nrate
119 CALL hm_get_int_array_index('FUN_LOAD' ,fun_load(i) ,i,is_available,lsubmodel)
120 CALL hm_get_int_array_index('FUN_UNLOAD',fun_unload(i),i,is_available,lsubmodel)
121 CALL hm_get_float_array_index('SCALE_LOAD',yfac(i) ,i,is_available,lsubmodel,unitab)
122 CALL hm_get_float_array_index('STRAINRATE_LOAD',rate(i),i,is_available,lsubmodel,unitab)
123 ENDDO
124c
125c--------------------------------------------------
126 nuparam = nrate*3 + 14
127 nuvar = nrate*4 + 8
128 nfunc = nrate*2
129c--------------------------------------------------
130 ifunc(1:nrate) = fun_load(1:nrate)
131 ifunc(nrate+1:nfunc) = fun_unload(1:nrate)
132c--------------------------------------------------
133c Warning / Error messages
134c--------------------------------------------------
135 DO i=1,nfunc
136 IF (ifunc(i) == 0) THEN
137 CALL ancmsg(msgid=126,
138 . msgtype=msgerror,
139 . anmode=aninfo_blind_1,
140 . i1=mat_id,
141 . c1=titr,
142 . i2=ifunc(i))
143 ENDIF
144 ENDDO
145c
146 IF (nrate > 1 .AND. israt == 0) THEN
147 CALL ancmsg(msgid=1220,
148 . msgtype=msgwarning,
149 . anmode=aninfo_blind_1,
150 . i1=mat_id,
151 . c1=titr)
152 ENDIF
153c
154 IF (nrate > 1) THEN
155 DO i=2,nrate
156 IF (rate(i) < rate(i-1)) THEN
157 CALL ancmsg(msgid=478,
158 . msgtype=msgerror,
159 . anmode=aninfo_blind_1,
160 . i1=mat_id,
161 . c1=titr)
162 EXIT
163 ENDIF
164 ENDDO
165 ENDIF
166c
167c--------------------------------------------------
168c Default values
169c--------------------------------------------------
170 DO i=1,nrate
171 IF (yfac(i) == zero) yfac(i) = one*press_scale
172 ENDDO
173c
174 IF (epsmax == zero) epsmax = ep20
175c--------------------------------------------------
176 c1 = third*e/(one - two*nu)
177 g = half*e/(one+nu)
178 israte = max(israte,israt)
179c---------------------------
180 uparam(1) = nrate
181 uparam(2) = e
182 uparam(3) = g
183 uparam(4) = nu
184 uparam(5) = one/(one - nu*nu)
185 uparam(6) = nu*uparam(5)
186 uparam(7) = g*two
187 uparam(8) = g*three
188 uparam(9) = c1
189 uparam(10)= c1 + g*four*third
190 uparam(11)= epsmax
191 DO i=1,nrate
192 uparam(14+i)=rate(i)
193 uparam(14+i+nrate)=yfac(i)
194 uparam(14+i+nrate*2)=ep20
195 ENDDO
196c-----------------
197 parmat(1) = c1
198 parmat(2) = e
199 parmat(3) = nu
200 parmat(4) = israt
201 parmat(5) = fcut
202c
203 parmat(16) = 2
204 parmat(17) = (one - two*nu)/(one - nu) ! == TWO*G/(C1+FOUR_OVER_3*G)
205c-----------------
206 pm(1) = rhor
207 pm(89) = rho0
208 pm(100)= c1
209c-----------------
210c Element buffer variable allocation
211c-----------------
212 mtag%G_PLA = 1
213 mtag%L_PLA = 1
214c-----------------
215 ! Properties compatibility
216 CALL init_mat_keyword(matparam,"SHELL_ISOTROPIC")
217 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
218c--------------------------------------------------
219c Starter output
220c--------------------------------------------------
221 WRITE(iout,1000) trim(titr),mat_id,65
222 WRITE(iout,1100)
223 IF (is_encrypted) THEN
224 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
225 ELSE
226 WRITE(iout,1200) rho0
227 WRITE(iout,1300) e,nu,epsmax,israte,fcut
228 DO i=1,nrate
229 WRITE(iout,1400) fun_load(i),fun_unload(i),yfac(i),rate(i)
230 ENDDO
231 WRITE(iout,*)' '
232 ENDIF
233c-----------------------------------------------------------------------
234 1000 FORMAT(/
235 & 5x,a,/,
236 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . .=',i10/,
237 & 5x,'MATERIAL LAW . . . . . . . . . . . . . .=',i10/)
238 1100 FORMAT
239 &(5x,'MATERIAL MODEL : TABULATED ELASTIC PLASTIC (LAW65) ',/,
240 & 5x,'---------------------------------------------------',/)
241 1200 FORMAT(
242 & 5x,'INITIAL DENSITY. . . . . . . . . . . . .=',1pg20.13/)
243 1300 FORMAT(
244 & 5x,'YOUNG''S MODULUS . . . . . . . . . . . .=',1pg20.13/
245 & 5x,'POISSON''S RATIO . . . . . . . . . . . .=',1pg20.13/
246 & 5x,'MAXIMUM PLASTIC STRAIN . . . . . . . . =',1pg20.13/
247 & 5x,'SMOOTH STRAIN RATE OPTION . . . . . . . =',i10/
248 & 5x,'STRAIN RATE CUTTING FREQUENCY . . . . . =',1pg20.13/)
249 1400 FORMAT(
250 & 5x,'LOAD STRESS FUNCTION NUMBER . . . . . =',i10/
251 & 5x,'UNLOAD STRESS FUNCTION NUMBER . . . . . =',i10/
252 & 7x,'YIELD SCALE FACTOR. . . . . . . . . . . =',1pg20.13/
253 & 7x,'STRAIN RATE . . . . . . . . . . . . . . =',1pg20.13)
254c-----------------------------------------------------------------------
255 RETURN
256 END
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_floatv_dim(name, dim_fac, 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_mat65(uparam, maxuparam, nuparam, nuvar, nfunc, maxfunc, ifunc, mtag, parmat, unitab, pm, lsubmodel, israte, mat_id, titr, matparam)
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
program starter
Definition starter.F:39