OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat59.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_mat59 ../starter/source/materials/mat/mat059/hm_read_mat59.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_float_array_index_dim ../starter/source/devtools/hm_reader/hm_get_float_array_index_dim.F
31!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
32!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
33!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
34!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.f
35!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
36!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
37!||--- uses -----------------------------------------------------
38!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
39!|| message_mod ../starter/share/message_module/message_mod.F
40!|| submodel_mod ../starter/share/modules1/submodel_mod.F
41!||====================================================================
42 SUBROUTINE hm_read_mat59(UPARAM ,MAXUPARAM,NUPARAM ,ISRATE , IMATVIS ,
43 . NUVAR ,IFUNC ,MAXFUNC ,NFUNC , PARMAT ,
44 . UNITAB ,ID ,TITR ,MTAG , LSUBMODEL,
45 . PM ,MATPARAM )
46C-----------------------------------------------
47C D e s c r i p t i o n
48C-----------------------------------------------
49C READ MAT LAW151 WITH HM READER ( TO BE COMPLETED )
50C
51C DUMMY ARGUMENTS DESCRIPTION:
52C ===================
53C
54C NAME DESCRIPTION
55C
56C IPM MATERIAL ARRAY(INTEGER)
57C PM MATERIAL ARRAY(REAL)
58C UNITAB UNITS ARRAY
59C ID MATERIAL ID(INTEGER)
60C TITR MATERIAL TITLE
61C LSUBMODEL SUBMODEL STRUCTURE
62C
63C-----------------------------------------------
64C M o d u l e s
65C-----------------------------------------------
66 USE unitab_mod
67 USE elbuftag_mod
68 USE message_mod
69 USE submodel_mod
70 USE matparam_def_mod
72C-----------------------------------------------
73C I m p l i c i t T y p e s
74C-----------------------------------------------
75#include "implicit_f.inc"
76C-----------------------------------------------
77C C o m m o n B l o c k s
78C-----------------------------------------------
79#include "units_c.inc"
80#include "param_c.inc"
81C-----------------------------------------------
82C D u m m y A r g u m e n t s
83C-----------------------------------------------
84 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
85 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
86 my_real, DIMENSION(100) ,INTENT(INOUT) :: PARMAT
87 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
88 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
89 INTEGER, INTENT(INOUT) :: ISRATE,IMATVIS,NFUNC,MAXFUNC,MAXUPARAM,NUPARAM,NUVAR
90 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
91 INTEGER,INTENT(IN) :: ID
92 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
93 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(NSUBMOD)
94 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
95C-----------------------------------------------
96C L o c a l V a r i a b l e s
97C-----------------------------------------------
98 INTEGER :: NBMAT ! Number of declared materials
99 INTEGER :: I,J
100 INTEGER :: RHOFLAG,ICOMP,NRATE,IFILTR,IFUNN(MAXFUNC),IFUNT(MAXFUNC)
101 my_real :: rho0, rhor,e,g,ecomp,fcut,rate0,yfac(maxfunc)
102 my_real :: rate(maxfunc),nu,fcut_unit,yfac_unit(maxfunc),rate_unit(maxfunc)
103 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
104C-----------------------------------------------
105C S o u r c e L i n e s
106C-----------------------------------------------
107 is_encrypted = .false.
108 is_available = .false.
109
110 CALL hm_option_is_encrypted(is_encrypted)
111
112 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv('Refer_Rho',rhor ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv('mat_e' ,E ,IS_AVAILABLE, LSUBMODEL, UNITAB)
115 CALL HM_GET_FLOATV('mat_g0' ,G ,IS_AVAILABLE, LSUBMODEL, UNITAB)
116 CALL HM_GET_INTV ('mat_imass',RHOFLAG ,IS_AVAILABLE, LSUBMODEL)
117 CALL HM_GET_INTV ('comp_opt' ,ICOMP ,IS_AVAILABLE, LSUBMODEL)
118 CALL HM_GET_FLOATV('ecomp' ,ECOMP ,IS_AVAILABLE, LSUBMODEL, UNITAB)
119 CALL HM_GET_INTV ('nfunc' ,NRATE ,IS_AVAILABLE, LSUBMODEL)
120 CALL HM_GET_INTV ('fsmooth' ,IFILTR ,IS_AVAILABLE, LSUBMODEL)
121 CALL HM_GET_FLOATV('fcut' ,FCUT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
122 CALL HM_GET_FLOATV_DIM('fcut' ,FCUT_UNIT,IS_AVAILABLE, LSUBMODEL, UNITAB)
123
124 DO I=1,NRATE
125 CALL HM_GET_INT_ARRAY_INDEX ('abg_ipt' ,IFUNN(I) ,I ,IS_AVAILABLE, LSUBMODEL)
126 CALL HM_GET_INT_ARRAY_INDEX ('abg_ipdel',IFUNT(I) ,I ,IS_AVAILABLE, LSUBMODEL)
127 CALL HM_GET_FLOAT_ARRAY_INDEX('fp1' ,RATE(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
128 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('fp1' ,RATE_UNIT(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129 CALL HM_GET_FLOAT_ARRAY_INDEX('fp2' ,YFAC(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
130 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('fp2' ,YFAC_UNIT(I) ,I ,IS_AVAILABLE, LSUBMODEL, UNITAB)
131 ENDDO
132
133.OR. IF (ICOMP /= 1 ECOMP <= 0) THEN
134 ECOMP = E
135 ENDIF
136 IF (ICOMP /= 1) ICOMP = 0
137
138 IF (FCUT == ZERO) FCUT = ONE * FCUT_UNIT
139
140 NFUNC = NRATE*2
141 DO I=1,NRATE
142 J = (I-1)*2
143 IFUNC(J+1) = IFUNN(I)
144 IFUNC(J+2) = IFUNT(I)
145 ENDDO
146C---
147 DO I=1,NFUNC
148 IF (IFUNC(I) == 0) THEN
149 CALL ANCMSG(MSGID=126,
150 . MSGTYPE=MSGERROR,
151 . ANMODE=ANINFO_BLIND_1,
152 . I1=ID,
153 . C1=TITR,
154 . I2=IFUNC(I))
155 ENDIF
156 ENDDO
157.AND. IF(NRATE > 1 IFILTR == 0) THEN
158 CALL ANCMSG(MSGID=1220,
159 . MSGTYPE=MSGWARNING,
160 . ANMODE=ANINFO_BLIND_1,
161 . I1=ID,
162 . C1=TITR)
163 ENDIF
164 DO I=1,NRATE
165 IF (YFAC(I) == ZERO) YFAC(I) = ONE * YFAC_UNIT(I)
166 ENDDO
167 RATE0 = RATE(1)
168 DO I=2,NRATE
169 IF (RATE(I) < RATE0) THEN
170c error
171 ENDIF
172 RATE0 = RATE(I)
173 ENDDO
174C----------------
175 IF (RHOR == ZERO) RHOR=RHO0
176 PM(1) = RHOR
177 PM(89)= RHO0
178C----------------
179 UPARAM(1)=E
180 UPARAM(2)=G
181 UPARAM(3)=NRATE
182 UPARAM(4)=IFILTR
183 UPARAM(5)=FCUT
184 UPARAM(6)=ECOMP*ICOMP
185 UPARAM(7)=RHOFLAG
186 DO I=1,NRATE
187 UPARAM(7+I)=YFAC(I)
188 UPARAM(7+NRATE+I)=RATE(I)
189 ENDDO
190C----------------
191 NUPARAM = 7 + NRATE*2
192 NUVAR = 0
193C----------------
194 PARMAT(1) = E/THREE
195 PARMAT(2) = MAX(E,G)
196 PARMAT(5) = FCUT
197C----------------
198C Formulation for solid elements time step computation.
199!! G= HALF*E/(ONE + NU)
200!! RBULK = THIRD*E/(ONE - TWO*NU)
201 NU = HALF*E/G - ONE
202 PARMAT(16) = 2
203 PARMAT(17) = (ONE - TWO*NU)/(ONE - NU)
204C-----------
205 ISRATE = 1
206 MTAG%G_GAMA=9
207 MTAG%G_EPSD=1
208 MTAG%G_EINS=2
209 MTAG%L_EPE =3
210 MTAG%L_PLA =2
211C-----------------------
212 ! MATPARAM keyword
213 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
214c
215 ! Properties compatibility
216 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_COHESIVE")
217C-----------------------
218 WRITE(IOUT,1010) TRIM(TITR),ID,59
219 WRITE(IOUT,1000)
220 IF (IS_ENCRYPTED)THEN
221 WRITE(IOUT,'(5x,a,//)')'confidential data'
222 ELSE
223 WRITE(IOUT,1100)RHO0
224 WRITE(IOUT,1002) E,ECOMP,G,ICOMP,RHOFLAG,NRATE
225 IF (NRATE > 0) THEN
226 WRITE(IOUT,1001)IFILTR,FCUT
227 WRITE(IOUT,1200)(RATE(J),IFUNN(J),IFUNT(J),YFAC(J),J=1,NRATE)
228 ENDIF
229 ENDIF
230C-----------
231 RETURN
232C-----------
233 1000 FORMAT(
234 & 5X,40H CONNECTION MATERIAL LAW 59 ,/,
235 & 5X,40H -------------------------- ,//)
236 1010 FORMAT(/
237 & 5X,A,/,
238 & 5X,'material number. . . . . . . . . . . . . . . . .=',I10/,
239 & 5X,'material law . . . . . . . . . . . . . . . . . .=',I10/)
240 1002 FORMAT(
241 & 5X,'young modulus per thickness unit in tension =',1PG20.13/,
242 & 5X,'young modulus per thickness unit in compression =',1PG20.13/,
243 & 5X,'shear modulus per thickness unit . . . . =',1PG20.13/,
244 & 5X,'linear behaviour in compression(flag) . . . . .=',I10/,
245 & 5X,'density unit flag . . . . . . . . . . . . . . =',I10/,
246 & 5X,' = 0 => volume density '/,
247 & 5X,' = 1 => surface density '/,
248 & 5X,'number of yield(strain rate) functions . =',I10/)
249 1001 FORMAT(
250 & 5X,'strain rate filtering flag . . . . . . . . . =',I10/,
251 & 5X,'cut freq for strain rate filtering . . . . . =',1PG20.13/)
252 1100 FORMAT(
253 & 5X,'initial density . . . . . . . . . . . . . . . . =',1PG20.13/)
254 1200 FORMAT(
255 & 5X,'strain rate . . . . . . . . . . . . . . =',1PG20.13/,
256 &10X,'yield stress FUNCTION in normal direction . =',I10/,
257 &10X,'yield stress function in tangent direction . =',I10/,
258 &10X,'scale factor. . . . . . . . . . . . . . =',1PG20.13)
259C--------
260
261 END SUBROUTINE HM_READ_MAT59
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_mat59(uparam, maxuparam, nuparam, israte, imatvis, nuvar, ifunc, maxfunc, nfunc, parmat, unitab, id, titr, mtag, lsubmodel, pm, matparam)
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
program starter
Definition starter.F:39