45
46
47
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "scr03_c.inc"
61#include "scr17_c.inc"
62#include "com04_c.inc"
63#include "units_c.inc"
64
65
66
67 INTEGER ITABM1(*),IPART(LIPART1,*),IPARTC(*),IPARTG(*),IPARTS(*)
68 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),IXS(NIXS,*)
69 INTEGER IDDLEVEL,ITAB(NUMNOD),TAGXREF(*),(*)
71 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*)
72 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
73
74
75
76 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGELC,TAGELTG,TAGELS
77 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGNOD
78 INTEGER I,(8),IE,J,IN,ID,IP,IR,NN,PARTID,UID,ITYP
79 INTEGER SUB_ID,MM, NEL
80 CHARACTER(LEN=NCHARLINE) :: TITLE
81 CHARACTER(LEN=NCHARKEY) :: KEY1,KEY
82 CHARACTER MESS*40
83 LOGICAL :: IS_AVAILABLE
84 DATA mess/'EREF ELEMENT REFERENCE GEOMETRY'/
85
86
87
88 INTEGER USR2SYS,R2R_SYS,NINTRI
89
90
91 ALLOCATE(tagelc(numelc),tageltg(numeltg),tagels(numels8),
tagnod(numnod))
92
93 is_available = .false.
94
95 IF(nxref == 0 .AND. irefsta == 0) THEN
96 DO ie=1,numelc
97 DO in = 1,4
98 nn = ixc(in+1,ie)
99 DO j = 1,3
100 xrefc(in,j,ie) = x(j,nn)
101 ENDDO
102 ENDDO
103 ENDDO
104 DO ie=1,numeltg
105 DO in = 1,3
106 nn = ixtg(in+1,ie)
107 DO j = 1,3
108 xreftg(in,j,ie) = x(j,nn)
109 ENDDO
110 ENDDO
111 ENDDO
112 DO ie=1,numels8
113 DO in = 1,8
114 nn = ixs(in+1,ie)
115 DO j = 1,3
116 xrefs(in,j,ie) = x(j,nn)
117 ENDDO
118 ENDDO
119 ENDDO
120 ENDIF
121
122 IF(iddlevel == 0) WRITE(iout,1000)
123 nitrs = 100
125
127
128 DO ir=1,neref
129
131 . unit_id = uid,
132 . submodel_id = sub_id,
133 . option_titr = title,
134 . keyword1 = key1,
135 . keyword2 = key)
136
137 CALL hm_get_intv(
'component',partid,is_available,lsubmodel)
138
139 IF (key1(1:4) == 'EREF')THEN
140 IF(iddlevel == 0) WRITE(iout,1001) title,partid
141 ip = 0
142 DO i = 1,npart
143 IF (ipart(4,i) == partid) ip = i
144 ENDDO
145
146 tagelc(1:numelc) = 0
147 tageltg(1:numeltg)= 0
148 tagels(1:numels8) = 0
149 ityp = 0
150
151 DO ie=1,numelc
152 IF (ip == ipartc(ie).OR.ip==0) THEN
153 tagelc(ie) = 1
154 ityp = 1
155 ENDIF
156 ENDDO
157 DO ie=1,numeltg
158 IF (ip == ipartg(ie).OR.ip==0) THEN
159 tageltg(ie) = 1
160 ityp = 1
161 ENDIF
162 ENDDO
163 IF (ityp == 0) THEN
164 DO ie=1,numels8
165 IF (ip == iparts(ie).OR.ip==0) THEN
166 tagels(ie) = 1
167 ityp = 2
168 ENDIF
169 ENDDO
170 ENDIF
171
172 SELECT CASE (ityp)
173 CASE (1)
174 IF(key(1:5)=='SHELL') THEN
175 IF(iddlevel == 0.AND.ipri >= 5) WRITE(iout,'(9X,A7,4(9X,A2))') 'ELEM-ID','N1','N2','N3''N4'
176 CALL hm_get_intv(
'table_count',nel,is_available,lsubmodel)
177
178 DO i=1,nel
179
185
187 IF(
id > 0 .AND. ie == 0)
THEN
189 . msgtype=msgerror,
190 . anmode=aninfo,
192 ELSEIF (
id > 0 .AND. tagelc(ie) == 1)
THEN
193 DO in=1,4
195 mm = ixc(in+1,ie)
197 xrefc(in,1,ie) = x(1,nn)
198 xrefc(in,2,ie) = x(2,nn)
199 xrefc(in,3,ie) = x(3,nn)
200 ENDDO
201 IF(iddlevel == 0.AND.ipri >= 5)
WRITE(iout,
'(5X,5(1X,I10))')
id,(ix(in),in=1,4)
202 ENDIF
203 ENDDO
204 IF(iddlevel == 0.AND.ipri < 5) WRITE(iout,1010) nel
205
206 ELSEIF(key(1:4)=='SH3N') THEN
207 IF(iddlevel == 0.AND.ipri >= 5) WRITE(iout,'(9X,A7,4(9X,A2))') 'ELEM-ID','N1','N2','N3'
208 CALL hm_get_intv(
'table_count',nel,is_available,lsubmodel)
209
210 DO i=1,nel
211
216
217 ie=
nintri(
id,ixtg,nixtg,numeltg,nixtg)
218 IF(
id > 0 .AND. ie == 0)
THEN
220 . msgtype=msgerror,
221 . anmode=aninfo,
222 . c1=
'TRIANGLE',i1=
id)
223 ELSEIF (
id > 0 .AND. tageltg(ie) == 1)
THEN
224 DO in=1,3
226 mm = ixtg(in+1,ie)
228 xreftg(in,1,ie) = x(1,nn)
229 xreftg(in,2,ie) = x(2,nn)
230 xreftg(in,3,ie) = x(3,nn)
231 ENDDO
232 IF(iddlevel == 0.AND.ipri >= 5)
WRITE(iout,
'(5X,4(1X,I10))')
id,(ix(in),in=1,3)
233 ENDIF
234 ENDDO
235 IF(iddlevel == 0.AND.ipri < 5) WRITE(iout,1020) nel
236 ENDIF
237
238 CASE (2)
239 IF(key(1:5)=='BRICK') THEN
240
241 IF(iddlevel == 0.AND.ipri >= 5)WRITE(iout,'(9X,A7,8(9X,A2))')'ELEM-ID','N1','N2','N3','N4','N5','N6','N7','N8'
242 CALL hm_get_intv(
'table_count',nel,is_available,lsubmodel)
243
244 DO i=1,nel
245
255
257 IF(
id > 0 .AND. ie == 0)
THEN
259 . msgtype=msgerror,
260 . anmode=aninfo,
262 ELSEIF (
id > 0 .AND. tagels(ie) == 1)
THEN
263 DO in=1,8
265 mm = ixs(in+1,ie)
267 xrefs(in,1,ie) = x(1,nn)
268 xrefs(in,2,ie) = x(2,nn)
269 xrefs(in,3,ie) = x(3,nn)
270 ENDDO
271 IF(iddlevel == 0.AND.ipri >= 5)
WRITE(iout,
'(5X,9(1X,I10))')
id,(ix(in),in=1,8)
272 ENDIF
273 ENDDO
274 IF(iddlevel == 0.AND.ipri < 5) WRITE(iout,1030) nel
275 ELSEIF(key(1:6)=='TETRA4') THEN
276 IF(iddlevel == 0.AND.ipri >= 5) WRITE(iout,'(9X,A7,4(9X,A2))') 'ELEM-ID','N1','N2','N3','N4'
277 CALL hm_get_intv(
'table_count',nel,is_available,lsubmodel)
278
279 DO i=1,nel
280
286
287 ix(2)=ix(1)
288 ix(4)=ix(3)
289 ix(8)=ix(5)
290 ix(7)=ix(6)
292
293 IF(
id > 0 .AND. ie == 0)
THEN
295 . msgtype=msgerror,
296 . anmode=aninfo,
298 ELSEIF (
id > 0 .AND. tagels(ie) == 1)
THEN
299 DO in=1,8
301 mm = ixs(in+1,ie)
303 xrefs(in,1,ie) = x(1,nn)
304 xrefs(in,2,ie) = x(2,nn)
305 xrefs(in,3,ie) = x(3,nn)
306 ENDDO
307 IF(iddlevel == 0.AND.ipri >= 5)
WRITE(iout,
'(5X,5(1X,I10))')
id,ix(1),ix(3),ix(6),ix(5)
308 ENDIF
309 ENDDO
310 IF(iddlevel == 0.AND.ipri < 5) WRITE(iout,1040) nel
311 ENDIF
312 END SELECT
313
314 ENDIF
315 ENDDO
316
317
318
319
320
321 IF(iddlevel == 1) THEN
322
323 ELSE
324 IF( nxref /= 0) THEN
325 DO in=1,numnod
327 IF(tagxref(in) == 1) THEN
328 CALL ancmsg(msgid=1098,msgtype=msgerror,anmode=aninfo, i1=itab(in))
329 ENDIF
330 ENDDO
331 ENDIF
332 IF( irefsta /= 0) THEN
333 DO in=1,numnod
335 IF(tagrefsta(in) == 1) THEN
336 CALL ancmsg(msgid=1099,msgtype=msgerror,anmode=aninfo,i1=itab(in))
337 ENDIF
338 ENDDO
339 ENDIF
340 ENDIF
341
342 DEALLOCATE(tagelc,tageltg,tagels,
tagnod)
343 RETURN
344 1000 FORMAT(//
345 & 5x,' REFERENCE STATE (EREF) ',/
346 & 5x,' ---------------------- ' )
347 1001 FORMAT(/
348 & 5x, a ,/
349 & 5x,'PART ID . . . . . . . . . . . . =',i10)
350 1010 FORMAT(
351 & 5x,'NUMBER OF 4-NODES SHELL . . . . =',i10)
352 1020 FORMAT(
353 & 5x,'NUMBER OF 3-NODES SHELL . . . . =',i10)
354 1030 FORMAT(
355 & 5x,'NUMBER OF 8-NODES BRICK . . . . =',i10)
356 1040 FORMAT(
357 & 5x,'NUMBER OF 4-NODES TETRA . . . . =',i10)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
integer function nintri(iext, antn, m, n, m1)
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)
integer function usr2sys(iu, itabm1, mess, id)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)