40
41
42
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "com01_c.inc"
67#include "com04_c.inc"
68#include "param_c.inc"
69#include "sms_c.inc"
70#include "units_c.inc"
71#include "vect01_c.inc"
72#include "r2r_c.inc"
73
74
75
76 INTEGER IDX,ND,ITR1(*),
77 . IXT(5,*), IPARG(NPARG,*),EADD(*),IPARTT(*),
78 . DD_IAD(NSPMD+1,*), INUM(7,*), INDEX(*), CEP(*),
79 . ITRUOFF(*),
80 . TAGPRT_SMS(*),NOD2EL1D(*)
81 INTEGER, INTENT(IN) :: PRINT_FLAG
82 INTEGER, INTENT(IN) :: NPRELOAD_A
83 INTEGER ,INTENT(INOUT), DIMENSION(NUMELT) ::ITAGPRLD_TRUSS
85 . pm(npropm,*), geo(npropg,*)
86
87 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
88 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
89 TYPE(PREL1D_) ,DIMENSION(NPRELOAD_A):: PRELOAD_A
90
91
92
93 INTEGER NGR1, NG, ISSN, MLN, I, NE1, N, NFIX,
94 . MID, PID, NEL_PREC, II, P, NEL,NB,
95 . MODE, WORK(70000),NN, J,
96 . ITAG(2*NUMELT+2*NUMELP+3*),
97 . NGP(NSPMD+1),IPARTR2R,IPRLD
98 DATA nfix/5/
99
100
101 ngr1 = ngroup + 1
102
103
104
105 idx = idx+nd*(nspmd+1)
106 CALL zeroin(1,nd*(nspmd+1),dd_iad
107
108 nft = 0
109
110 DO n=1,nd
111 DO p=1,nspmd+1
112 dd_iad(p,nspgroup+n) = 0
113 END DO
114 ENDDO
115
116 DO n=1,nd
117 nel = eadd(n+1)-eadd(n)
118
119 DO i = 1, nel
120 index(i) = i
121 inum(1,i)=ipartt(nft+i)
122 inum(2,i)=itruoff(nft+i)
123 inum(3,i)=ixt(1,nft+i)
124 inum(4,i)=ixt(2,nft+i)
125 inum(5,i)=ixt(3,nft+i)
126 inum(6,i)=ixt(4,nft+i)
127 inum(7,i)=ixt(5,nft+i)
128 ENDDO
129 mode=0
130 CALL my_orders( mode, work, cep(nft+1), index, nel , 1)
131 DO i = 1, nel
132 ipartt(i+nft)=inum(1,index(i))
133 itruoff(nft+i) = inum(2,index(i))
134 ixt(1,i+nft)=inum(3,index(i))
135 ixt(2,i+nft)=inum(4,index(i))
136 ixt(3,i+nft)=inum(5,index(i))
137 ixt(4,i+nft)=inum(6,index(i))
138 ixt(5,i+nft)=inum(7,index(i))
139 itr1(nft+index(i)) = nft+i
140 ENDDO
141
142
143 DO i=1,nel
144 inum(2,i) = itagprld_truss(nft+i)
145 ENDDO
146 DO i=1,nel
147 itagprld_truss(nft+i) = inum(2,index(i))
148 ENDDO
149
150 p = cep(nft+index(1))
151 nb = 1
152 DO i = 2, nel
153 IF (cep(nft+index(i))/=p) THEN
154 dd_iad(p+1,nspgroup+n) = nb
155 nb = 1
156 p = cep(nft+index(i))
157 ELSE
158 nb = nb + 1
159 ENDIF
160 ENDDO
161 dd_iad(p+1,nspgroup+n) = nb
162 DO p = 2, nspmd
163 dd_iad(p,nspgroup+n) = dd_iad(p,nspgroup+n)
164 . + dd_iad(p-1,nspgroup+n)
165 ENDDO
166 DO p = nspmd+1,2,-1
167 dd_iad(p,nspgroup+n) = dd_iad(p-1,nspgroup+n)+1
168 ENDDO
169 dd_iad(1,nspgroup+n) = 1
170
171
172
173 DO i = 1, nel
174 index(i) = cep(nft+index(i))
175 ENDDO
176 DO i = 1, nel
177 cep(nft+i) = index(i)
178 ENDDO
179 nft = nft + nel
180 ENDDO
181
182
183
184 DO i=1,nsurf
185 nn=igrsurf(i)%NSEG
186 DO j=1,nn
187 IF(igrsurf(i)%ELTYP(j) == 4)
188 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
189 ENDDO
190 ENDDO
191
192
193
194 DO i=1,ngrtrus
195 nn=igrtruss(i)%NENTITY
196 DO j=1,nn
197 igrtruss(i)%ENTITY(j) = itr1(igrtruss(i)%ENTITY(j))
198 ENDDO
199 ENDDO
200
201
202
203 itag = 0
204 DO i=1,2*numelt+2*numelp+3*numelr
205 IF(nod2el1d(i) /= 0 .AND. nod2el1d(i) <= numelt)THEN
206 IF(itag(nod2el1d(i)) == 0) THEN
207 nod2el1d(i)=itr1(nod2el1d(i))
208 itag(nod2el1d(i)) = 1
209 END IF
210 END IF
211 END DO
212
213
214
215
216
217
218 DO 300 n=1,nd
219 nft = 0
220
221 DO p = 1, nspmd
222 ngp(p)=0
223 nel = dd_iad(p+1,nspgroup+n)-dd_iad(p,nspgroup+n)
224 IF (nel>0) THEN
225 nel_prec = dd_iad(p,nspgroup+n)-dd_iad(1,nspgroup+n)
226 ngp(p)=ngroup
227 ng = (nel-1)/nvsiz + 1
228 DO 220 i=1,ng
229
230 ngroup=ngroup+1
231 ii = eadd(n)+nft
232 mid= ixt(1,ii)
233 mln= int(pm(19,mid))
234 pid= ixt(4,ii)
235 ipartr2r = 0
236 IF (nsubdom>0) ipartr2r =
tag_mat(mid)
237 issn=0
238 IF(geo(5,pid)/=0.)issn=1
239 iprld = itagprld_truss(ii)
240
241 CALL zeroin(1,nparg,iparg(1,ngroup))
242
243 ne1 =
min( nvsiz, nel + nel_prec - nft)
244 iparg(1,ngroup) = mln
245 iparg(2,ngroup) = ne1
246 iparg(3,ngroup) = eadd(n)-1 + nft
247 iparg(4,ngroup) = lbufel+1
248
249 iparg(5,ngroup) = 4
250 iparg(9,ngroup) = issn
251
252 iparg(32,ngroup)= p-1
253
254 iparg(72,ngroup)= iprld
255
256 IF ( iprld>0 ) THEN
257 iparg(73,ngroup)= preload_a(iprld)%fun_id
258 iparg(74,ngroup)= preload_a(iprld)%sens_id
259 END IF
260
261 IF (nsubdom>0) iparg(77,ngroup)= ipartr2r
262
263 jsms=0
264 IF(isms/=0)THEN
265 IF(idtgrs/=0)THEN
266 IF(tagprt_sms(ipartt(ii))/=0)jsms=1
267 ELSE
268 jsms=1
269 END IF
270 END IF
271 iparg(52,ngroup)=jsms
272
273 nft = nft + ne1
274 220 CONTINUE
275 ngp(p)=ngroup-ngp(p)
276 ENDIF
277 ENDDO
278
279 ngp(nspmd+1)=0
280 DO p = 1, nspmd
281 ngp(nspmd+1)=ngp(nspmd+1)+ngp(p)
282 dd_iad(p,nspgroup+n)=ngp(p)
283 END DO
284 dd_iad(nspmd+1,nspgroup+n)=ngp(nspmd+1)
285
286 300 CONTINUE
287
288 nspgroup = nspgroup + nd
289
290 IF(print_flag>6) THEN
291 WRITE(iout,1000)
292 WRITE(iout,1001)(n,iparg(1,n),iparg(2,n),iparg(3,n)+1,iparg(5,n),n=ngr1,ngroup)
293 ENDIF
294
295 1000 FORMAT(/
296 + /6x,'3D - TRUSS ELEMENT GROUPS'/
297 + 6x,'-------------------------'/
298 +' GROUP MATERIAL ELEMENT FIRST ELEMENT'/
299 +' LAW NUMBER ELEMENT TYPE'/)
300 1001 FORMAT(5(1x,i10))
301
302
303 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
integer, dimension(:), allocatable tag_mat
subroutine zeroin(n1, n2, ma)