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