45
46
47
52 USE matparam_def_mod
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71#include "implicit_f.inc"
72
73
74
75#include "com01_c.inc"
76#include "com04_c.inc"
77#include "param_c.inc"
78#include "sms_c.inc"
79#include "units_c.inc"
80#include "vect01_c.inc"
81#include "scr17_c.inc"
82#include "r2r_c.inc"
83
84
85
86 INTEGER IDX,LB_MAX,ND
87 INTEGER ITR1(*),IXP(6,*),IPARG(NPARG,*),EADD(*),IPARTP(*),
88 . DD_IAD(NSPMD+1,*),CEP(*),INUM(9,*),INDEX(*),
89 . IPM(NPROPMI,*),IPOUOFF(*),
90 . TAGPRT_SMS(*),NOD2EL1D(*),IGEO(NPROPGI,*)
91 INTEGER, INTENT(IN) :: PRINT_FLAG
92 INTEGER, INTENT(IN) :: NPRELOAD_A
93 INTEGER ,INTENT(INOUT), DIMENSION(NUMELP) :: ITAGPRLD_BEAM
94 INTEGER ,INTENT(INOUT) :: IBEAM_VECTOR(NUMELP)
96 . pm(npropm,*), geo(npropg,*)
97 my_real ,
INTENT(INOUT) :: rbeam_vector(3,numelp)
98 my_real ,
INTENT(INOUT) :: xnum(3,numelp)
99 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT), INTENT(IN) :: MAT_PARAM
100
101 TYPE (GROUP_) , DIMENSION(NGRBEAM) :: IGRBEAM
102 TYPE () , DIMENSION(NSURF) :: IGRSURF
103 TYPE(PREL1D_) ,DIMENSION(NPRELOAD_A) :: PRELOAD_A
104
105
106
107 INTEGER NGR1, NG, ISSN, MLN, I, NE1, N, NFIX,
108 . MID, PID, NEL_PREC, II, P, NEL,NB,NIP,IGTYP,
109 . MODE,NN, J,
110 . ITAG(2*NUMELT+2*NUMELP+3*NUMELR),
111 . NGP(NSPMD+1),IPARTR2R,NUVAR,IE,ID1,IPRLD
112 INTEGER ID
113 CHARACTER(LEN=NCHARTITLE)::TITR,TITR1
114 INTEGER WORK(70000)
115 DATA nfix/13/
116
117 ngr1 = ngroup + 1
118
119
120
121 idx=idx+nd*(nspmd+1)
122 CALL zeroin(1,nd*(nspmd+1),dd_iad(1,nspgroup+1))
123
124 nft = 0
125
126 DO n=1,nd
127 DO p=1,nspmd+1
128 dd_iad(p,nspgroup+n) = 0
129 END DO
130 ENDDO
131
132 DO n=1,nd
133 nel = eadd(n+1)-eadd(n)
134 DO i = 1, nel
135 index(i) = i
136 inum(1,i)=ipartp(nft+i)
137 inum(2,i)=ixp(1,nft+i)
138 inum(3,i)=ixp(2,nft+i)
139 inum(4,i)=ixp(3,nft+i)
140 inum(5,i)=ixp(4,nft+i)
141 inum(6,i)=ixp(5,nft+i)
142 inum(7,i)=ixp(6,nft+i)
143 inum(8,i)=ipouoff(nft+i)
144 inum(9,i)=ibeam_vector(nft+i)
145 xnum(1:3,i)=rbeam_vector(1:3,nft+i)
146 ENDDO
147
148 mode=0
149 CALL my_orders( mode, work, cep(nft+1), index, nel , 1)
150 DO i = 1, nel
151 ipartp(i+nft)=inum(1,index(i))
152 ixp(1,i+nft)=inum(2,index(i))
153 ixp(2,i+nft)=inum(3,index(i))
154 ixp(3,i+nft)=inum(4,index(i))
155 ixp(4,i+nft)=inum(5,index(i))
156 ixp(5,i+nft)=inum(6,index(i))
157 ixp(6,i+nft)=inum(7,index(i))
158 ipouoff(nft+i)=inum(8,index(i))
159 ibeam_vector(nft+i)=inum(9,index(i))
160 rbeam_vector(1:3,nft+i)=xnum(1:3,index(i))
161 itr1(nft+index(i)) = nft+i
162 ENDDO
163
164 DO i=1,nel
165 inum(8,i) = itagprld_beam(nft+i)
166 ENDDO
167 DO i=1,nel
168 itagprld_beam(nft+i) = inum(8,index(i))
169 ENDDO
170
171 p = cep(nft+index(1))
172 nb = 1
173 DO i = 2, nel
174 IF (cep(nft+index(i))/=p) THEN
175 dd_iad(p+1,nspgroup+n) = nb
176 nb = 1
177 p = cep(nft+index(i))
178 ELSE
179 nb = nb + 1
180 ENDIF
181 ENDDO
182 dd_iad(p+1,nspgroup+n) = nb
183 DO p = 2, nspmd
184 dd_iad(p,nspgroup+n) = dd_iad(p,nspgroup+n)
185 . + dd_iad(p-1,nspgroup+n)
186 ENDDO
187 DO p = nspmd+1,2,-1
188 dd_iad(p,nspgroup+n) = dd_iad(p-1,nspgroup+n)+1
189 ENDDO
190 dd_iad(1,nspgroup+n) = 1
191
192
193
194 DO i = 1, nel
195 index(i) = cep(nft+index(i))
196 ENDDO
197 DO i = 1, nel
198 cep(nft+i) = index(i)
199 ENDDO
200 nft = nft + nel
201 ENDDO
202
203
204
205 DO i=1,nsurf
206 nn=igrsurf(i)%NSEG
207 DO j=1,nn
208 IF(igrsurf(i)%ELTYP(j) == 5)
209 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
210 ENDDO
211 ENDDO
212
213
214
215 DO i=1,ngrbeam
216 nn=igrbeam(i)%NENTITY
217 DO j=1,nn
218 igrbeam(i)%ENTITY(j) = itr1(igrbeam(i)%ENTITY(j))
219 ENDDO
220 ENDDO
221
222
223
224 itag = 0
225 DO i=1,2*numelt+2*numelp+3*numelr
226 IF(nod2el1d(i) /= 0 .AND. numelt < nod2el1d(i)
227 . .AND. nod2el1d(i) <= numelt+numelp)THEN
228 IF(itag(nod2el1d(i)) == 0) THEN
229 nod2el1d(i)=itr1(nod2el1d(i)-numelt)
230 nod2el1d(i)=nod2el1d(i)+numelt
231 itag(nod2el1d(i)) = 1
232 END IF
233 END IF
234 END DO
235
236
237
238
239
240 DO 300 n=1,nd
241 nft = 0
242
243 DO p = 1, nspmd
244 ngp(p)=0
245 nel = dd_iad(p+1,nspgroup+n)-dd_iad(p,nspgroup+n)
246 IF (nel>0) THEN
247 nel_prec = dd_iad(p,nspgroup+n)-dd_iad(1,nspgroup+n)
248 ngp(p)=ngroup
249 ng = (nel-1)/nvsiz + 1
250 DO i=1,ng
251
252 ngroup=ngroup+1
253 ii = eadd(n)+nft
254 mid= ixp(1,ii)
255 mln= int(pm(19,mid))
256 pid= ixp(5,ii)
257 ipartr2r = 0
258 IF (nsubdom>0) ipartr2r =
tag_mat(mid)
259 issn=0
260 IF(geo(5,pid)/=zero)issn=1
261 nip = 1
262 igtyp = igeo(11,pid)
263 IF (igtyp == 18) nip = igeo(3,pid)
264 CALL zeroin(1,nparg,iparg(1,ngroup))
265 iprld = itagprld_beam(ii)
266
267 ne1 =
min( nvsiz, nel + nel_prec - nft)
268
269 jthe = nint(pm(71,mid))
270
271
272 IF(igtyp == 3 .AND. mln == 34 ) THEN
274 id1= igeo(1,pid)
275 CALL fretitl2(titr1,igeo(npropgi-ltitr+1,pid),ltitr)
276 CALL fretitl2(titr,ipm(npropmi-ltitr+1,mid),ltitr)
277
279 . msgtype=msgerror,
280 . anmode=aninfo,
281 . i1=id1,
282 . c1=titr1,
284 . c2=titr)
285 ENDIF
286 !
287 nuvar = 0
288 DO j = 1,ne1
289 ie=j+eadd(n)+nft-1
290 nuvar =
max(nuvar,ipm(8,ixp(1,ie)))
291 END DO
292 iparg(46,ngroup) = nuvar
293
294 iparg(1,ngroup) = mln
295 iparg(2,ngroup) = ne1
296 iparg(3,ngroup) = eadd(n)-1 + nft
297 iparg(4,ngroup) = lbufel+1
298
299 iparg(5,ngroup) = 5
300 iparg(6,ngroup) = nip
301 iparg(9,ngroup) = nint(geo(3,pid))
302 iparg(13,ngroup) = jthe
303 iparg(38,ngroup) = igtyp
304
305 iparg(32,ngroup)= p-1
306
307 IF (nsubdom>0) iparg(77,ngroup)= ipartr2r
308
309 iparg(49,ngroup) = 0
310 IF(ipm(218,mid) > 0 .AND. mln /= 0 .AND. mln /=13) THEN
311 iparg(49,ngroup) = 1
312 ENDIF
313
314 IF (mat_param(mid)%NFAIL > 0) THEN
315 iparg(43,ngroup) = 1
316 ENDIF
317
318 iparg(62,ngroup) = pid
319
320 iparg(72,ngroup)= iprld
321
322 IF ( iprld>0 ) THEN
323 iparg(73,ngroup
324 iparg(74,ngroup)= preload_a(iprld)%sens_id
325 END IF
326
327 jsms=0
328 IF(isms/=0)THEN
329 IF(idtgrs/=0)THEN
330 IF(tagprt_sms(ipartp(ii))/=0)jsms=1
331 ELSE
332 jsms=1
333 END IF
334 END IF
335 iparg(52,ngroup)=jsms
336
337 nft = nft + ne1
338 END DO
339 ngp(p)=ngroup-ngp(p)
340 ENDIF
341 ENDDO
342
343 ngp(nspmd+1)=0
344 DO p = 1, nspmd
345 ngp(nspmd+1)=ngp(nspmd+1)+ngp(p)
346 dd_iad(p,nspgroup+n)=ngp(p)
347 END DO
348 dd_iad(nspmd+1,nspgroup+n)=ngp(nspmd+1)
349
350 300 CONTINUE
351
352 nspgroup = nspgroup + nd
353
354 IF(print_flag>6) THEN
355 WRITE(iout,1000)
356 WRITE(iout,1001)(n,iparg(1,n),iparg(2,n),iparg(3,n)+1,
357 + iparg(5,n),
358 + n=ngr1,ngroup)
359 ENDIF
360 1000 FORMAT(/
361 + /6x,'3D - BEAM ELEMENT GROUPS'/
362 + 6x,'-------------------------'/
363 +' GROUP MATERIAL ELEMENT FIRST ELEMENT'/
364 +' LAW NUMBER ELEMENT TYPE'/)
365 1001 FORMAT(5(1x,i10))
366
367
368 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
integer, parameter nchartitle
integer, dimension(:), allocatable tag_mat
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 zeroin(n1, n2, ma)