41
42
43
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "com01_c.inc"
69#include "com04_c.inc"
70#include "param_c.inc"
71#include "sms_c.inc"
72#include "units_c.inc"
73#include "vect01_c.inc"
74#include "r2r_c.inc"
75
76
77
78 INTEGER IDX,ND,ITR1(*), IGEO(NPROPGI,*),
79 . IXR(NIXR,*), IPARG(NPARG,*),EADD(*),IPARTR(*),
80 . DD_IAD(NSPMD+1,*),INUM(9,*),INDEX(*),CEP(*),
81 . IRESOFF(*),TAGPRT_SMS(*),NOD2EL1D(*),IPM(NPROPMI,*),R_SKEW(*)
82 INTEGER, INTENT(IN) :: PRINT_FLAG
83 INTEGER,INTENT(IN) :: NPRELOAD_A
84 INTEGER ,INTENT(INOUT), DIMENSION(NUMELR) :: ITAGPRLD_SPRING
86 . geo(npropg,*)
87
88 TYPE (GROUP_) , DIMENSION(NGRSPRI) :: IGRSPRING
89 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
90 TYPE (CLUSTER_) ,DIMENSION(NCLUSTER) :: CLUSTERS
91 TYPE(PREL1D_) ,DIMENSION(NPRELOAD_A) :: PRELOAD_A
92
93
94
95
96 INTEGER NGR1, NG, ISSN, MTNN, I, NE1, N,
97 . PID, NEL_PREC, II, P
98
99
100
101INTEGER :: CLUSTER_TYP,CLUSTER_NEL
102 INTEGER, DIMENSION(:), ALLOCATABLE :: SAVE_CLUSTER
103
104
105
106 ngr1 = ngroup + 1
107
108
109
110 idx=idx+nd*(nspmd+1)
111 CALL zeroin(1,nd*(nspmd+1),dd_iad(1,nspgroup+1))
112
113 nft = 0
114
115 DO n=1,nd
116 DO p=1,nspmd+1
117 dd_iad(p,nspgroup+n) = 0
118 END DO
119 ENDDO
120
121 DO n=1,nd
122 nel = eadd(n+1)-eadd(n)
123
124 DO i = 1, nel
125 index(i) = i
126 inum(1,i)=ipartr(nft+i)
127 inum(2,i)=ixr(1,nft+i)
128 inum(3,i)=ixr(2,nft+i)
129 inum(4,i)=ixr(3,nft+i)
130 inum(5,i)=ixr(4,nft+i)
131 inum(6,i)=ixr(5,nft+i)
132 inum(7,i)=ixr(6,nft+i)
133 inum(8,i)=iresoff(nft+i)
134 inum(9,i)=r_skew(nft+i)
135 ENDDO
136
137 mode=0
138 CALL my_orders( mode, work, cep(nft+1), index, nel , 1)
139 DO i = 1, nel
140 ipartr(i+nft)=inum(1,index(i))
141 ixr(1,i+nft)=inum(2,index(i))
142 ixr(2,i+nft)=inum(3,index(i))
143 ixr(3,i+nft)=inum(4,index(i))
144 ixr(4,i+nft)=inum(5,index(i))
145 ixr(5,i+nft)=inum(6,index(i))
146 ixr(6,i+nft)=inum(7,index(i))
147 iresoff(nft+i)=inum(8,index(i))
148 r_skew(nft+i)=inum(9,index(i
149 itr1(nft+index(i)) = nft+i
150 ENDDO
151
152 DO i=1,nel
153 inum(8,i)=itagprld_spring(nft+i)
154 ENDDO
155 DO i=1,nel
156 itagprld_spring(nft+i) =inum(8,index(i))
157 ENDDO
158
159 p = cep(nft+index(1))
160 nb = 1
161 DO i = 2, nel
162 IF (cep(nft+index(i))/=p) THEN
163 dd_iad(p+1,nspgroup+n) = nb
164 nb = 1
165 p = cep(nft+index(i))
166 ELSE
167 nb = nb + 1
168 ENDIF
169 ENDDO
170 dd_iad(p+1,nspgroup+n) = nb
171 DO p = 2, nspmd
172 dd_iad(p,nspgroup+n) = dd_iad(p,nspgroup+n)
173 . + dd_iad(p-1,nspgroup+n)
174 ENDDO
175 DO p = nspmd+1,2,-1
176 dd_iad(p,nspgroup+n) = dd_iad(p-1,nspgroup+n)+1
177 ENDDO
178 dd_iad(1,nspgroup+n) = 1
179
180
181
182 DO i = 1, nel
183 index(i) = cep(nft+index(i))
184 ENDDO
185 DO i = 1, nel
186 cep(nft+i) = index(i)
187 ENDDO
188 nft = nft + nel
189 ENDDO
190
191
192
193 DO i=1,nsurf
194 nn=igrsurf(i)%NSEG
195 DO j=1,nn
196 IF(igrsurf(i)%ELTYP(j) == 6)
197 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
198 ENDDO
199 ENDDO
200
201
202
203 DO i=1,ngrspri
204 nn=igrspring(i)%NENTITY
205 DO j=1,nn
206 igrspring(i)%ENTITY(j) = itr1(igrspring(i)%ENTITY(j))
207 ENDDO
208 ENDDO
209
210
211
212 itag = 0
213 DO i=1,2*numelt+2*numelp+3*numelr
214 IF(nod2el1d(i) /= 0 .AND. nod2el1d(i) > numelt+numelp)THEN
215 IF(itag(nod2el1d(i)) == 0) THEN
216 nod2el1d(i)=itr1(nod2el1d(i)-numelt-numelp)
217 nod2el1d(i)=nod2el1d(i)+numelt+numelp
218 itag(nod2el1d(i)) = 1
219 END IF
220 END IF
221 END DO
222
223
224
225 DO i=1,ncluster
226 cluster_typ = clusters(i)%TYPE
227 IF(cluster_typ==2.OR.cluster_typ==3) THEN
228 cluster_nel = clusters(i)%NEL
229 ALLOCATE( save_cluster( cluster_nel ) )
230 save_cluster( 1:cluster_nel ) = clusters(i)%ELEM( 1:cluster_nel )
231 DO j=1,cluster_nel
232 clusters(i)%ELEM(j) = itr1( save_cluster( j ) )
233 ENDDO
234 DEALLOCATE( save_cluster )
235 ENDIF
236 ENDDO
237
238
239
240
241 DO i=1,n_seatbelt
243 DO j=1,nn
245 ENDDO
246 ENDDO
247
248
249
250
251
252 DO 300 n=1,nd
253 nft = 0
254
255 DO p = 1, nspmd
256 ngp(p)=0
257 nel = dd_iad(p+1,nspgroup+n)-dd_iad(p,nspgroup+n)
258 IF (nel>0) THEN
259 nel_prec = dd_iad(p,nspgroup+n)-dd_iad(1,nspgroup+n)
260 ngp(p)=ngroup
261 ng = (nel-1)/nvsiz + 1
262 DO 220 i=1,ng
263
264 ngroup=ngroup+1
265 ii = eadd(n)+nft
266 pid= ixr(1,ii)
267
268 IF (nsubdom>0) ipartr2r = 1
269 mtnn = nint(geo(8,pid))
270 igtyp= igeo(11,pid)
271 issn=0
272 IF(geo(5,pid)/=0.)issn=1
273 IF(igtyp == 23) THEN
274 mid = ixr(5,ii)
275 mtnn = ipm(2,mid)
276 ENDIF
277 iprld = itagprld_spring(ii)
278
279 CALL zeroin(1,nparg,iparg(1,ngroup))
280
281 ne1 =
min( nvsiz, nel + nel_prec - nft)
282 iparg(1,ngroup) = mtnn
283 iparg(2,ngroup) = ne1
284 iparg(3,ngroup) = eadd(n)-1 + nft
285 iparg(4,ngroup) = lbufel+1
286
287 iparg(5,ngroup) = 6
288 iparg(9,ngroup) = issn
289
290 iparg(32,ngroup)= p-1
291 iparg(38,ngroup)= igtyp
292
293 IF (nsubdom>0) iparg(77,ngroup)= ipartr2r
294
295 jsms=0
296 IF(isms/=0)THEN
297 IF(idtgrs/=0)THEN
298 IF(tagprt_sms(ipartr(ii))/=0)jsms=1
299 ELSE
300 jsms=1
301 END IF
302 END IF
303 iparg(52,ngroup)=jsms
304
305 iparg(72,ngroup)= iprld
306
307 IF ( iprld>0 ) THEN
308 iparg(73,ngroup)= preload_a(iprld)%fun_id
309 iparg(74,ngroup)= preload_a(iprld)%sens_id
310 END IF
311
312 nft = nft + ne1
313 220 CONTINUE
314 ngp(p)=ngroup-ngp(p)
315 ENDIF
316 ENDDO
317
318 ngp(nspmd+1)=0
319 DO p = 1, nspmd
320 ngp(nspmd+1)=ngp(nspmd+1)+ngp(p)
321 dd_iad(p,nspgroup+n)=ngp(p)
322 END DO
323 dd_iad(nspmd+1,nspgroup+n)=ngp(nspmd+1)
324
325 300 CONTINUE
326
327 nspgroup = nspgroup + nd
328
329 IF(print_flag>6) THEN
330 WRITE(iout,1000)
331 WRITE(iout,1001)(n,igtyp,iparg(2,n),iparg(3,n)+1,iparg(5,n),n=ngr1,ngroup)
332 ENDIF
333
334 1000 FORMAT(/
335 + /6x,'3D - SPRING ELEMENT GROUPS'/
336 + 6x,'-------------------------'/
337 +' GROUP SPRING ELEMENT FIRST ELEMENT'/
338 +' TYPE NUMBER ELEMENT TYPE'/)
339 1001 FORMAT(5(1x,i10))
340
341 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
type(seatbelt_struct), dimension(:), allocatable seatbelt_tab
subroutine zeroin(n1, n2, ma)