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

Go to the source code of this file.

Functions/Subroutines

subroutine read_matparam (mat_elem)

Function/Subroutine Documentation

◆ read_matparam()

subroutine read_matparam ( type (mat_elem_), intent(inout), target mat_elem)

Definition at line 45 of file read_matparam.F.

46C-----------------------------------------------
47C M o d u l e s
48C-----------------------------------------------
49 USE message_mod
50 USE mat_elem_mod
52 USE read_eosparam_mod
53 use read_therpmaram_mod
54 use read_ale_rezoning_param_mod , only : read_ale_rezoning_param
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 TYPE (MAT_ELEM_) ,INTENT(INOUT), TARGET :: MAT_ELEM
63C-----------------------------------------------
64C L o c a l V a r i a b l e s
65C-----------------------------------------------
66 INTEGER :: I,IMAT,NUMMAT,NUMTABL,NUPARAM,NIPARAM,NFAIL
67 INTEGER :: IAD,NFIX,NFIXR,LEN,LENR,NMOD,MOD
68 INTEGER ,DIMENSION(NCHARTITLE) :: NAME
69 INTEGER ,DIMENSION(:) ,ALLOCATABLE :: IBUF
70 INTEGER :: NBSUBMAT
71 my_real ,DIMENSION(:) ,ALLOCATABLE :: rbuf
72 INTEGER :: OLDFORMAT,ISUB
73c=======================================================================
74c read MATPARAM data
75 nfix = 24
76 nummat = mat_elem%NUMMAT
77 ALLOCATE(mat_elem%MAT_PARAM(nummat))
78 DO imat=1,nummat
79 CALL mat_elem%MAT_PARAM(imat)%ZEROING
80 ENDDO
81
82 len = nfix*nummat
83 ALLOCATE (ibuf(len) )
84 CALL read_i_c(ibuf, len)
85
86 ! write integer parameters and flags
87 iad = 0
88 DO imat = 1,nummat
89 mat_elem%MAT_PARAM(imat)%ILAW = ibuf(iad+ 1)
90 mat_elem%MAT_PARAM(imat)%MAT_ID = ibuf(iad+ 2)
91 mat_elem%MAT_PARAM(imat)%NUPARAM = ibuf(iad+ 3)
92 mat_elem%MAT_PARAM(imat)%NIPARAM = ibuf(iad+ 4)
93 mat_elem%MAT_PARAM(imat)%NFUNC = ibuf(iad+ 5)
94 mat_elem%MAT_PARAM(imat)%NTABLE = ibuf(iad+ 6)
95 mat_elem%MAT_PARAM(imat)%NSUBMAT = ibuf(iad+ 7)
96 mat_elem%MAT_PARAM(imat)%NFAIL = ibuf(iad+ 8)
97 mat_elem%MAT_PARAM(imat)%IVISC = ibuf(iad+ 9)
98 mat_elem%MAT_PARAM(imat)%IEOS = ibuf(iad+10)
99 mat_elem%MAT_PARAM(imat)%ITHERM = ibuf(iad+11)
100 mat_elem%MAT_PARAM(imat)%IEXPAN = ibuf(iad+12)
101 mat_elem%MAT_PARAM(imat)%IALE = ibuf(iad+13)
102 mat_elem%MAT_PARAM(imat)%ITURB = ibuf(iad+14)
103 mat_elem%MAT_PARAM(imat)%HEAT_FLAG = ibuf(iad+15)
104 mat_elem%MAT_PARAM(imat)%COMPRESSIBILITY = ibuf(iad+16)
105 mat_elem%MAT_PARAM(imat)%SMSTR = ibuf(iad+17)
106 mat_elem%MAT_PARAM(imat)%STRAIN_FORMULATION = ibuf(iad+18)
107 mat_elem%MAT_PARAM(imat)%IPRES = ibuf(iad+19)
108 mat_elem%MAT_PARAM(imat)%ORTHOTROPY = ibuf(iad+20)
109 mat_elem%MAT_PARAM(imat)%NLOC = ibuf(iad+21)
110 mat_elem%MAT_PARAM(imat)%IFAILWAVE = ibuf(iad+22)
111 mat_elem%MAT_PARAM(imat)%IXFEM = ibuf(iad+23)
112 mat_elem%MAT_PARAM(imat)%NMOD = ibuf(iad+24)
113 iad = iad + nfix
114 END DO
115 DEALLOCATE( ibuf )
116
117 ! read real parameters
118 nfixr = 9
119 lenr = nfixr*nummat
120 ALLOCATE (rbuf(lenr) )
121 CALL read_db (rbuf ,lenr)
122 iad = 0
123 DO imat = 1,nummat
124 mat_elem%MAT_PARAM(imat)%RHO = rbuf(iad + 1)
125 mat_elem%MAT_PARAM(imat)%RHO0 = rbuf(iad + 2)
126 mat_elem%MAT_PARAM(imat)%YOUNG = rbuf(iad + 3)
127 mat_elem%MAT_PARAM(imat)%BULK = rbuf(iad + 4)
128 mat_elem%MAT_PARAM(imat)%SHEAR = rbuf(iad + 5)
129 mat_elem%MAT_PARAM(imat)%NU = rbuf(iad + 6)
130 mat_elem%MAT_PARAM(imat)%STIFF_CONTACT = rbuf(iad + 7)
131 mat_elem%MAT_PARAM(imat)%STIFF_HGLASS = rbuf(iad + 8)
132 mat_elem%MAT_PARAM(imat)%STIFF_TSTEP = rbuf(iad + 9)
133 iad = iad + nfixr
134 END DO
135 DEALLOCATE (rbuf)
136
137 ! read material title
138 DO imat = 1,nummat
139 CALL read_c_c(name,nchartitle)
140 DO i=1,nchartitle
141 mat_elem%MAT_PARAM(imat)%TITLE(i:i) = char(name(i))
142 END DO
143 END DO
144
145 ! read material parameter array
146 DO imat = 1,nummat
147 nuparam = mat_elem%MAT_PARAM(imat)%NUPARAM
148 niparam = mat_elem%MAT_PARAM(imat)%NIPARAM
149 ALLOCATE(mat_elem%MAT_PARAM(imat)%UPARAM(nuparam))
150 ALLOCATE(mat_elem%MAT_PARAM(imat)%IPARAM(niparam))
151 mat_elem%MAT_PARAM(imat)%UPARAM = zero
152 mat_elem%MAT_PARAM(imat)%IPARAM = 0
153 IF (nuparam > 0) THEN
154 CALL read_db(mat_elem%MAT_PARAM(imat)%UPARAM ,nuparam)
155 END IF
156 IF (niparam > 0) THEN
157 CALL read_i_c(mat_elem%MAT_PARAM(imat)%IPARAM ,niparam)
158 END IF
159 END DO
160
161 ! read material law tables
162 DO imat = 1,nummat
163 numtabl = mat_elem%MAT_PARAM(imat)%NTABLE
164 IF (numtabl > 0) THEN
165 ALLOCATE (mat_elem%MAT_PARAM(imat)%TABLE(numtabl))
166 CALL read_mat_table(mat_elem%MAT_PARAM(imat)%TABLE, numtabl)
167 END IF
168 END DO
169
170 ! read viscosity model parameters
171 DO imat = 1,nummat
172 IF (mat_elem%MAT_PARAM(imat)%IVISC > 0) THEN
173 CALL read_viscparam(mat_elem%MAT_PARAM(imat)%VISC)
174 END IF
175 END DO
176c
177c read thermal parameters
178c
179 DO imat = 1,nummat
180 CALL read_thermparam(mat_elem%MAT_PARAM(imat)%THERM)
181 END DO
182c
183c read parameters of failure models per material
184c
185 DO imat = 1,nummat
186 nfail = mat_elem%MAT_PARAM(imat)%NFAIL
187 IF (nfail > 0) THEN
188 ALLOCATE (mat_elem%MAT_PARAM(imat)%FAIL(nfail))
189 DO i = 1,nfail
190 CALL read_failparam(mat_elem%MAT_PARAM(imat)%FAIL(i))
191 END DO
192 END IF
193 END DO
194
195 ! read damage modes
196 DO imat = 1,nummat
197 nmod = mat_elem%MAT_PARAM(imat)%NMOD
198 IF (nmod > 0) THEN
199 ALLOCATE(mat_elem%MAT_PARAM(imat)%MODE(nmod))
200 DO mod = 1,nmod
201 CALL read_c_c(name,nchartitle)
202 DO i=1,nchartitle
203 mat_elem%MAT_PARAM(imat)%MODE(mod)(i:i) = char(name(i))
204 END DO
205 ENDDO
206 ELSE
207 ALLOCATE(mat_elem%MAT_PARAM(imat)%MODE(0))
208 ENDIF
209 ENDDO
210
211 ! read eos model parameters
212 DO imat = 1,nummat
213 mat_elem%MAT_PARAM(imat)%EOS%CV=zero
214 mat_elem%MAT_PARAM(imat)%EOS%CP=zero
215 mat_elem%MAT_PARAM(imat)%EOS%PSH=zero
216 mat_elem%MAT_PARAM(imat)%EOS%E0=zero
217 mat_elem%MAT_PARAM(imat)%EOS%P0=zero
218 mat_elem%MAT_PARAM(imat)%EOS%PMIN=zero
219 IF (mat_elem%MAT_PARAM(imat)%IEOS > 0) THEN
220 CALL read_eosparam(mat_elem%MAT_PARAM(imat)%EOS)
221 END IF
222 END DO
223
224 ! Read multimaterial buffer
225 ALLOCATE (ibuf(21) ) !< mex is 21 submaterials
226 ALLOCATE (rbuf(21) )
227 DO imat = 1,nummat
228 CALL read_i_c(ibuf, 2)
229 nbsubmat = ibuf(1)
230 oldformat = ibuf(2)
231 mat_elem%MAT_PARAM(imat)%MULTIMAT%NB = nbsubmat
232 mat_elem%MAT_PARAM(imat)%MULTIMAT%old_data_format = oldformat
233 IF(nbsubmat > 0)THEN
234 CALL read_i_c(ibuf, nbsubmat)
235 CALL read_db(rbuf, nbsubmat)
236 mat_elem%MAT_PARAM(imat)%MULTIMAT%mid = ibuf(1:nbsubmat)
237 mat_elem%MAT_PARAM(imat)%MULTIMAT%vfrac = rbuf(1:nbsubmat)
238 ALLOCATE (mat_elem%MAT_PARAM(imat)%MULTIMAT%pEOS(nbsubmat))
239 IF(oldformat == 1)THEN
240 !embedded EOS parameters
241 ALLOCATE (mat_elem%MAT_PARAM(imat)%MULTIMAT%EOS(nbsubmat))
242 DO i = 1,nbsubmat
243 CALL read_eosparam(mat_elem%MAT_PARAM(imat)%MULTIMAT%EOS(i))
244 mat_elem%MAT_PARAM(imat)%MULTIMAT%pEOS(i)%EOS => mat_elem%MAT_PARAM(imat)%MULTIMAT%EOS(i)
245 END DO
246 ELSE
247 ! pointers to user /EOS
248 DO i=1,nbsubmat
249 isub = mat_elem%MAT_PARAM(imat)%MULTIMAT%mid(i)
250 IF(isub>0)THEN
251 mat_elem%MAT_PARAM(imat)%MULTIMAT%pEOS(i)%EOS => mat_elem%MAT_PARAM(isub)%EOS
252 ELSE
253 NULLIFY(mat_elem%MAT_PARAM(imat)%MULTIMAT%pEOS(i)%EOS)
254 ENDIF
255 ENDDO
256 ENDIF
257 ENDIF
258 ENDDO
259 DEALLOCATE(ibuf)
260 DEALLOCATE(rbuf)
261
262
263
264 !ASSOCIATE MULTIMAT_EOS
265
266
267 ! read ALE rezoning parameters
268 DO imat = 1,nummat
269 CALL read_ale_rezoning_param(mat_elem%MAT_PARAM(imat)%REZON)
270 END DO
271
272c-----------
273 RETURN
#define my_real
Definition cppsort.cpp:32
integer, parameter nchartitle
subroutine read_db(a, n)
Definition read_db.F:90
subroutine read_failparam(fail)
subroutine read_mat_table(table, numtabl)
subroutine read_viscparam(visc)
void read_c_c(int *w, int *len)
void read_i_c(int *w, int *len)