38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
64
65
66
67
68
69
70#include "implicit_f.inc"
71
72
73
74#include "analyse_name.inc"
75
76
77
78#include "scr17_c.inc"
79#include "scr23_c.inc"
80#include "com04_c.inc"
81#include "units_c.inc"
82#include "param_c.inc"
83
84
85
86
87 TYPE(GROUP_),INTENT(IN)::IGRNOD(NGRNOD)
88 INTEGER,INTENT(IN)::ITAB(*)
89 INTEGER,INTENT(IN)::ITABM1(*)
90 INTEGER,INTENT(IN)::IPART(LIPART1,*)
91 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
92 INTEGER,INTENT(IN)::IPM(,*)
93 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
94
95 INTEGER,INTENT(OUT)::KXX(NIXX,*)
96 INTEGER,INTENT(OUT)::IXX(*)
97 INTEGER,INTENT(OUT)::IPARTX(*)
98
99
100
101 INTEGER I, I1, I2,,N,ID,IDS,J,STAT,MID,IAD,NNOD,IGS
102 INTEGER INDEX_PART
103 INTEGER TABIDS(NUMELX)
104 CHARACTER MESS*40
106 . bid
107 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_XELEM,IDEX,IDGU
108
109
110
111 INTEGER NODGRNR5
112 DATA mess /'MULTI-PURPOSE ELEMENTS DEFINITION '/
113
114
115
116
117 ALLOCATE (sub_xelem(numelx),stat=stat)
118 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
119 . msgtype=msgerror,
120 . c1='SUB_XELEM')
121 sub_xelem(1:numelx) = 0
122 ALLOCATE (idex(numelx),stat=stat)
123 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
124 . msgtype=msgerror,
125 . c1='IDEX')
126 idex(1:numelx) = 0
127 ALLOCATE (idgu(numelx),stat=stat)
128 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
129 . msgtype=msgerror,
130 . c1='IDGU')
131 idgu(1:numelx) = 0
132 index_part = 1
133
134
135
136 CALL cpp_xelem_read(idex,idgu,ipartx,sub_xelem)
137
138 iad =1
139 DO n=1,numelx
140
141
142
143
144 IF( ipart(4,index_part) /= ipartx(n) )THEN
145 DO j=1,npart
146 IF(ipart(4,j)== ipartx(n) ) index_part = j
147 ENDDO
148 ENDIF
149 IF(ipart(4,index_part) /= ipartx(n)) THEN
151 . msgtype=msgerror,
152 . anmode=aninfo_blind_1,
153 . c1='XELEM',
154 . i1=ipartx(n),
155 . i2=ipartx(n),
156 . prmod=msg_cumu)
157 ENDIF
158 ipartx(n) = index_part
159
160
161 kxx(1,n) =ipart(1,index_part)
162 kxx(2,n) =ipart(2,index_part)
163 kxx(4,n) =iad
164
165 kxx(5,n)=idex(n)
166
167 nnod =
nodgrnr5(idgu(n) ,igs ,ixx(iad),igrnod ,
168 . itabm1 ,mess )
169
170 IF (igs/=0.AND.igrnod(igs)%SORTED/=1) THEN
172 . msgtype=msgerror,
173 . anmode=aninfo_blind_1,
174 . i1=kxx(5,n),
175 . i2=igrnod(igs)%ID)
176 ENDIF
177 IF (nnod < 1) THEN
179 . msgtype=msgerror,
180 . anmode=aninfo_blind_1,
181 . i1=kxx(5,n),
182 . i2=nnod)
183 ENDIF
184
185 CALL anodset(ixx(iad), check_2n)
186 CALL anodset(ixx(iad+nnod-1), check_2n)
187 DO 10 i=2,nnod-2
188 CALL anodset(ixx(iad+i), check_used)
189 10 CONTINUE
190 kxx(3,n)=nnod
191 IF (nnod>maxnx) maxnx=nnod
192 isumnx =isumnx+nnod
193
194 iad =iad+nnod
195 ENDDO
196
198 . msgtype=msgerror,
199 . anmode=aninfo_blind_1,
200 . prmod=msg_print)
201
202
203
204 DO i=1,numelx
205 tabids(i)= kxx(nixx,i)
206 ENDDO
207 CALL udouble(tabids,1,numelx,mess,0,bid)
208
209
210
211 i1=1
212 i2=min0(50,numelx)
213
214 90 WRITE (iout,300)
215 DO 100 i=i1,i2
216 mid=ipm(1,kxx(1,i))
217 pid=igeo(1,kxx(2,i))
218 WRITE (iout,'(4(I10,1X))') i,kxx(nixx,i),mid,pid
219 WRITE (iout,'(10(I10,1X))')
220 . (itab(ixx(iad)),iad=kxx(4,i),kxx(4,i)+kxx(3,i)-1)
221 WRITE (iout,'(A)') 'END OF ELEMENT TRACEBACK'
222
223 100 CONTINUE
224 IF(i2==numelx)GOTO 200
225 i1=i1+50
226 i2=min0(i2+50,numelx)
227 GOTO 90
228
229 200 CONTINUE
230
231 300 FORMAT(/' MULTI-PURPOSE ELEMENTS'/
232 + ' ----------------------'/
233 + ' LOC-EL GLO-EL MATER GEOM'/
234 + ' NODES LIST')
235 RETURN
void anodset(int *id, int *type)
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)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)