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