44
45
46
52 use element_mod , only : nixs,nixc,nixtg
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(),TAGXREF(*),TAGREFSTA(*)
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,IX(8),IE,J,IN,,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, 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
212 CALL HM_GET_INT_ARRAY_INDEX('elems_table_elem',ID,I,IS_AVAILABLE,LSUBMODEL)
213 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n1',IX(1),I,IS_AVAILABLE,LSUBMODEL)
214 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n2',IX(2),I,IS_AVAILABLE,LSUBMODEL)
215 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n3',IX(3),I,IS_AVAILABLE,LSUBMODEL)
216
217 IE=NINTRI(ID,IXTG,NIXTG,NUMELTG,NIXTG)
218.AND. IF(ID > 0 IE == 0) THEN
219 CALL ANCMSG(MSGID=1011,
220 . MSGTYPE=MSGERROR,
221 . ANMODE=ANINFO,
222 . C1='triangle',I1=ID)
223.AND. ELSEIF (ID > 0 TAGELTG(IE) == 1) THEN
224 DO IN=1,3
225 NN = USR2SYS(IX(IN),ITABM1,MESS,ID)
226 MM = IXTG(IN+1,IE)
227 TAGNOD(MM) = 1
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.AND. IF(IDDLEVEL == 0IPRI >= 5) WRITE(IOUT,'(5x,4(1x,i10))') ID,(IX(IN),IN=1,3)
233 ENDIF
234 ENDDO
235.AND. IF(IDDLEVEL == 0IPRI < 5) WRITE(IOUT,1020) NEL
236 ENDIF
237
238 CASE (2)
239 IF(KEY(1:5)=='brick') THEN
240
241.AND. IF(IDDLEVEL == 0IPRI >= 5)WRITE(IOUT,'(9x,a7,8(9x,a2))')'elem','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
246 CALL HM_GET_INT_ARRAY_INDEX('elems_table_elem',ID,I,IS_AVAILABLE,LSUBMODEL)
247 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n1',IX(1),I,IS_AVAILABLE,LSUBMODEL)
248 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n2',IX(2),I,IS_AVAILABLE,LSUBMODEL)
249 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n3',IX(3),I,IS_AVAILABLE,LSUBMODEL)
250 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n4',IX(4),I,IS_AVAILABLE,LSUBMODEL)
251 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n5',IX(5),I,IS_AVAILABLE,LSUBMODEL)
252 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n6',IX(6),I,IS_AVAILABLE,LSUBMODEL)
253 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n7',IX(7),I,IS_AVAILABLE,LSUBMODEL)
254 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n8',IX(8),I,IS_AVAILABLE,LSUBMODEL)
255
256 IE=NINTRI(ID,IXS,NIXS,NUMELS8,NIXS)
257.AND. IF(ID > 0 IE == 0) THEN
258 CALL ANCMSG(MSGID=1011,
259 . MSGTYPE=MSGERROR,
260 . ANMODE=ANINFO,
261 . C1='solid',I1=ID)
262.AND. ELSEIF (ID > 0 TAGELS(IE) == 1) THEN
263 DO IN=1,8
264 NN = USR2SYS(IX(IN),ITABM1,MESS,ID)
265 MM = IXS(IN+1,IE)
266 TAGNOD(MM) = 1
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.AND. IF(IDDLEVEL == 0IPRI >= 5) WRITE(IOUT,'(5x,9(1x,i10))') ID,(IX(IN),IN=1,8)
272 ENDIF
273 ENDDO
274.AND. IF(IDDLEVEL == 0IPRI < 5) WRITE(IOUT,1030) NEL
275 ELSEIF(KEY(1:6)=='tetra4') THEN
276.AND.
IF(IDDLEVEL == 0IPRI >= 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
281 CALL HM_GET_INT_ARRAY_INDEX('elems_table_elem',ID,I,IS_AVAILABLE,LSUBMODEL)
282 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n1',IX(1),I,IS_AVAILABLE,LSUBMODEL)
283 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n2',IX(3),I,IS_AVAILABLE,LSUBMODEL)
284 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n3',IX(6),I,IS_AVAILABLE,LSUBMODEL)
285 CALL HM_GET_INT_ARRAY_INDEX('elems_table_n4',IX(5),I,IS_AVAILABLE,LSUBMODEL)
286
287 IX(2)=IX(1)
288 IX(4)=IX(3)
289 IX(8)=IX(5)
290 IX(7)=IX(6)
291 IE=NINTRI(ID,IXS,NIXS,NUMELS8,NIXS)
292
293.AND. IF(ID > 0 IE == 0) THEN
294 CALL ANCMSG(MSGID=1011,
295 . MSGTYPE=MSGERROR,
296 . ANMODE=ANINFO,
297 . C1='tetra4',I1=ID)
298.AND. ELSEIF (ID > 0 TAGELS(IE) == 1) THEN
299 DO IN=1,8
300 NN = USR2SYS(IX(IN),ITABM1,MESS,ID)
301 MM = IXS(IN+1,IE)
302 TAGNOD(MM) = 1
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.AND. IF(IDDLEVEL == 0IPRI >= 5) WRITE(IOUT,'(5x,5(1x,i10))') ID,IX(1),IX(3),IX(6),IX(5)
308 ENDIF
309 ENDDO
310.AND. IF(IDDLEVEL == 0IPRI < 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
326 IF(TAGNOD(IN) == 0) CYCLE
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
334 IF(TAGNOD(IN) == 0) CYCLE
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)