46
47
48
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
55
56
57
58#include "implicit_f.inc"
59
60
61
62 TYPE (MAT_ELEM_) ,INTENT(INOUT), TARGET :: MAT_ELEM
63
64
65
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 ::
71 my_real ,
DIMENSION(:) ,
ALLOCATABLE :: rbuf
72 INTEGER :: OLDFORMAT,ISUB
73
74
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) )
85
86
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
118 nfixr = 9
119 lenr = nfixr*nummat
120 ALLOCATE (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
138 DO imat = 1,nummat
141 mat_elem%MAT_PARAM(imat)%TITLE(i:i) = char(name(i))
142 END DO
143 END DO
144
145
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
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))
167 END IF
168 END DO
169
170
171 DO imat = 1,nummat
172 IF (mat_elem%MAT_PARAM(imat)%IVISC > 0) THEN
174 END IF
175 END DO
176
177
178
179 DO imat = 1,nummat
180 CALL read_thermparam(mat_elem%MAT_PARAM(imat)%THERM)
181 END DO
182
183
184
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
191 END DO
192 END IF
193 END DO
194
195
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
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
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
225 ALLOCATE (ibuf(21) )
226 ALLOCATE (rbuf(21) )
227 DO imat = 1,nummat
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
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
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
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
265
266
267
268 DO imat = 1,nummat
269 CALL read_ale_rezoning_param(mat_elem%MAT_PARAM(imat)%REZON)
270 END DO
271
272
273 RETURN
integer, parameter nchartitle
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)