38
39
40
41 USE elbufdef_mod
44 USE matparam_def_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52 INTEGER, INTENT(IN) :: IPARG(NPARG,NGROUP),N2D,
53 . IPM(NPROPMI,NUMMAT),IGEO(NPROPGI,NUMGEO),
54 . ,NPARG,,NPROPGI,
55 . (NIXP,NUMELP),
56 . IXR(NIXR,NUMELR)
57
58TYPE(ELBUF_STRUCT_),DIMENSION(NGROUP),INTENT(IN) :: ELBUF_STR
59 TYPE(MATPARAM_STRUCT_), DIMENSION(NUMMAT), INTENT(IN) :: MAT_PARAM
60
61
62
63 INTEGER :: NG,IGTYP,PID,PROP_ID,NLAY,IL,IMAT,ILAW,IEOS,MAT_ID,K,ITY,ISNOD,NFT,,MLW
64 LOGICAL :: COMPAT_ELEM,COMPAT_PROP,COMPAT_EOS,COMPAT_VISC
65 CHARACTER (LEN = 10) :: ELTYP
66 pid = -huge(pid)
67 imat = -huge(imat)
68
69
70
71
72
73 DO ng = 1,ngroup
74
75
76 ity = iparg(5,ng)
77 igtyp = elbuf_str(ng)%IGTYP
78 nlay = elbuf_str(ng)%NLAY
79 mlw = iparg(1,ng)
80
81
82
83
84 IF (nlay > 0) THEN
85
86
87 DO il = 1,nlay
88
89
90 pid = iparg(62,ng)
91 prop_id = igeo(1,pid)
92
93
94 imat = elbuf_str(ng)%BUFLY(il)%IMAT
95 ilaw = elbuf_str(ng)%BUFLY(il)%ILAW
96 ieos = mat_param(imat)%IEOS
97 ivisc = mat_param(imat)%IVISC
98 mat_id = ipm(1,imat)
99
100
101
102
103 compat_elem = .true.
104 compat_eos = .true.
105 compat_visc = .true.
106
107 SELECT CASE (ity)
108
109
110
111 CASE (1)
112 IF (mat_param(imat)%PROP_SOLID == 0) compat_elem = .false.
113 isnod = iparg(28,ng)
114 IF (isnod == 4) THEN
115 eltyp = 'TETRA4'
116 ELSEIF (isnod == 6) THEN
117 eltyp = 'PENTA6'
118 ELSEIF (isnod == 10) THEN
119 eltyp = 'TETRA10'
120 ELSEIF (isnod == 16) THEN
121 eltyp = 'SHEL16'
122 ELSEIF (isnod == 20) THEN
123 eltyp = 'BRIC20'
124 ELSE
125 eltyp = 'BRICK'
126 ENDIF
127
128
129
130 CASE (2)
131 IF (mat_param(imat)%PROP_SOLID == 0) compat_elem = .false.
132 eltyp = 'QUAD'
133
134
135
136
137 CASE (3)
138 IF (mat_param(imat)%PROP_SHELL == 0) compat_elem = .false.
139 eltyp = 'SHELL'
140
141 CASE (7,8)
142 IF (n2d > 0) THEN
143 IF (mlw /= 151) compat_elem = .false.
144 eltyp = 'TRIA'
145 ELSE
146 IF (mat_param(imat)%PROP_SHELL == 0) compat_elem = .false.
147 eltyp = 'SH3N'
148 ENDIF
149
150
151
152 CASE (5)
153 IF (mat_param(imat)%PROP_BEAM == 0) compat_elem = .false.
154 eltyp = 'BEAM'
155
156
157
158 CASE (51)
159 IF (mat_param(imat)%PROP_SPH == 0) compat_elem = .false.
160 eltyp = 'SPH'
161 END SELECT
162
163
164
165
166
167 compat_prop = .true.
168 SELECT CASE (igtyp)
169
170
171
172
173 CASE (1)
174 IF (mat_param(imat)%PROP_SHELL /= 1 .AND.
175 . mat_param(imat)%PROP_SHELL /= 5) compat_prop = .false.
176 ! orthotropic shells property
177 CASE (9)
178 IF (mat_param(imat)%PROP_SHELL /= 1 .AND.
179 . mat_param(imat)%PROP_SHELL /= 2 .AND.
180 . mat_param(imat)%PROP_SHELL /= 5) compat_prop = .false.
181
182 CASE (10,11,17,19,51,52)
183 IF (mat_param(imat)%PROP_SHELL /= 1 .AND.
184 . mat_param(imat)%PROP_SHELL /= 2 .AND.
185 . mat_param(imat)%PROP_SHELL /= 3 .AND.
186 . mat_param(imat)%PROP_SHELL /= 4 .AND.
187 . mat_param(imat)%PROP_SHELL /= 5) compat_prop = .false.
188
189 CASE (16)
190 IF (mat_param(imat)%PROP_SHELL /= 4 .AND.
191 . mat_param(imat)%PROP_SHELL /= 5) compat_prop = .false.
192
193
194
195
196 CASE (14,20)
197 IF (mat_param(imat)%PROP_SOLID /= 1 .AND.
198 . mat_param(imat)%PROP_SOLID /= 5 .AND.
199 . mat_param(imat)%PROP_SOLID /= 6) compat_prop = .false.
200
201 CASE (6,21)
202 IF (mat_param(imat)%PROP_SOLID /= 1 .AND.
203 . mat_param(imat)%PROP_SOLID /= 2 .AND.
204 . mat_param(imat)%PROP_SOLID /= 6) compat_prop = .false.
205
206 CASE (22)
207 IF (mat_param(imat)%PROP_SOLID /= 1 .AND.
208 . mat_param(imat)%PROP_SOLID /= 2 .AND.
209 . mat_param(imat)%PROP_SOLID /= 3 .AND.
210 . mat_param(imat)%PROP_SOLID /= 6) compat_prop = .false.
211
212 CASE (43)
213 IF (mat_param(imat)%PROP_SOLID /= 4 .AND.
214 . mat_param(imat)%PROP_SOLID /= 6) compat_prop = .false.
215
216 CASE (15)
217 IF (mat_param(imat)%PROP_SOLID /= 5) compat_prop = .false.
218
219
220
221
222 CASE (18)
223 IF (mat_param(imat)%PROP_BEAM /= 2 .AND.
224 . mat_param(imat)%PROP_BEAM /= 3) compat_prop = .false
225
226
227
228
229 CASE (34)
230 IF (mat_param(imat)%PROP_SPH /= 1) compat_prop = .false.
231 END SELECT
232
233
234
235
236 IF (ieos > 0 .and. mat_param(imat)%COMPATIBILITY_EOS == 0) THEN
237 compat_eos = .false.
238 END IF
239
240
241
242
243 IF (ivisc > 0 .AND. mat_param(imat)%COMPATIBILITY_VISC == 1 .AND.
244 . (mat_param(imat)%PROP_SHELL == 2 .OR.
245 . mat_param(imat)%PROP_SHELL == 3 .OR.
246 . mat_param(imat)%PROP_SHELL == 4 ).AND.
247 . ilaw /= 25 ) THEN
248 compat_visc = .false.
249 END IF
250
251
252
253
254
255
256 IF (.NOT. compat_elem) THEN
258 . msgtype=msgerror,
259 . anmode=aninfo_blind_1,
260 . c1=eltyp,
261 . i1=mat_id,
262 . i2=ilaw,
263 . prmod=msg_cumu)
264
265 ELSEIF ((compat_elem).AND.(.NOT. compat_prop)) THEN
267 . msgtype=msgerror,
268 . anmode=aninfo_blind_1,
269 . i1=prop_id,
270 . i2=igtyp,
271 . i3=mat_id,
272 . i4=ilaw,
273 . prmod=msg_cumu)
274 ENDIF
275
276 IF (.NOT. compat_eos) THEN
278 . msgtype=msgerror,
279 . anmode=aninfo,
280 . i1=mat_id,
281 . c1=' ',i2=ilaw,
282 . prmod=msg_cumu)
283 ENDIF
284
285 IF (.NOT. compat_visc) THEN
287 . msgtype=msgerror,
288 . anmode=aninfo_blind_1,
289 . i1=prop_id,
290 . i2=igtyp,
291 . i3=mat_id,
292 . i4=ilaw,
293 . prmod=msg_cumu)
294 ENDIF
295
296 ENDDO
297
298
299
300
301 ELSE
302
303
304 nft = iparg(3,ng)
305
306
307
308
309 compat_elem = .true.
310 SELECT CASE (ity)
311
312
313
314 CASE (4)
315 imat = ixt(1,nft+1)
316 pid = ixt(4,nft+1)
317 IF (mat_param(imat)%PROP_TRUSS == 0) compat_elem = .false.
318 eltyp = 'TRUSS'
319
320
321
322 CASE (5)
323 imat = ixp(1,nft+1)
324 pid = ixp(5,nft+1)
325 IF (mat_param(imat)%PROP_BEAM == 0) compat_elem = .false.
326 eltyp = 'BEAM'
327
328
329
330 CASE (6)
331 imat = ixr(5,nft+1)
332 pid = ixr(1,nft+1)
333 IF (imat > 0) THEN
334 IF (mat_param(imat)%PROP_SPRING == 0) compat_elem = .false.
335 ENDIF
336 eltyp = 'SPRING'
337
338
339
340 CASE (100)
341 imat = kxx(1,nft+1)
342 pid = kxx(2,nft+1)
343 eltyp = 'XELEM'
344 END SELECT
345
346
347
348
349
350 compat_prop = .true.
351 SELECT CASE (igtyp)
352
353
354
355
356 CASE (2)
357 IF (mat_param(imat)%PROP_TRUSS /= 1) compat_prop = .false.
358
359
360
361
362 CASE (3)
363 IF (mat_param(imat)%PROP_BEAM /= 1 .AND.
364 . mat_param(imat)%PROP_BEAM /= 3) compat_prop = .false.
365
366
367
368
369 CASE (36)
370 IF (imat > 0) THEN
371 IF (mat_param(imat)%PROP_SPRING /= 1 .AND.
372 . mat_param(imat)%PROP_SPRING /= 3) compat_prop = .false.
373 ENDIF
374
375 CASE (23)
376 IF (mat_param(imat)%PROP_SPRING /= 2 .AND.
377 . mat_param(imat)%PROP_SPRING /= 3) compat_prop = .false.
378
379
380
381 CASE DEFAULT
382 compat_elem = .true.
383 END SELECT
384
385
386 prop_id = igeo(1,pid)
387 IF (imat > 0) THEN
388 mat_id = ipm(1,imat)
389 ilaw = ipm(2,imat)
390 ELSE
391 mat_id = 0
392 ilaw = 0
393 ENDIF
394
395
396
397
398
399 IF (.NOT. compat_elem) THEN
401 . msgtype=msgerror,
402 . anmode=aninfo_blind_1,
403 . c1=eltyp,
404 . i1=mat_id,
405 . i2=ilaw,
406 . prmod=msg_cumu)
407
408 ELSE IF ((compat_elem).AND.(.NOT. compat_prop)) THEN
410 . msgtype=msgerror,
411 . anmode=aninfo_blind_1,
412 . i1=prop_id,
413 . i2=igtyp,
414 . i3=mat_id,
415 . i4=ilaw,
416 . prmod=msg_cumu)
417 ENDIF
418
419 ENDIF
420
421 ENDDO
422
423
424
425
427 . msgtype=msgerror,
428 . anmode=aninfo_blind_1,
429 . prmod=msg_print)
431 . msgtype=msgerror,
432 . anmode=aninfo_blind_1,
433 . prmod=msg_print)
435 . msgtype=msgerror,
436 . anmode=aninfo_blind_1,
437 . prmod=msg_print)
439 . msgtype=msgerror,
440 . anmode=aninfo_blind_1,
441 . prmod=msg_print)
442
443
444
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)