44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 USE my_alloc_mod
72 USE matparam_def_mod
74 use element_mod , only : nixs
75
76
77
78#include "implicit_f.inc"
79
80
81
82#include "vect01_c.inc"
83#include "com04_c.inc"
84#include "param_c.inc"
85#include "sms_c.inc"
86#include "r2r_c.inc"
87#include "sphcom.inc"
88#include "boltpr_c.inc"
89
90
91
92 INTEGER IXS(NIXS,NUMELS),ISEL(*),(16,*),IPARTS(*),
93 . EADD(*),ITR1(*),INDEX(*),ITRI(8,*),
94 . ND, ISOLNOD(*), CEP(*),
95 . XEP(*),IXS10(6,*),IXS20(12,*),IXS16(8,*),
96 . NOD2ELS(*), ISOLOFF(*),
97 . TAGPRT_SMS(*), SPH2SOL(*),
98 . SOL2SPH(2,*),SOL2SPH_TYP(*),IFLAG_BPRELOAD(*)
99 INTEGER,INTENT(IN) :: IPM(NPROPMI,NUMMAT)
100 INTEGER,INTENT(INOUT) :: IGEO(NPROPGI,NUMGEO)
101 INTEGER, INTENT(IN) :: DAMP_RANGE_PART(NPART)
102 my_real,
INTENT(IN) :: pm(npropm,nummat), geo(npropg,numgeo)
103 my_real,
INTENT(INOUT) :: rnoise(nperturb,numels)
104
105 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC
106 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
107 TYPE (CLUSTER_) ,DIMENSION(NCLUSTER) :: CLUSTERS
108 TYPE(MATPARAM_STRUCT_) , TARGET, DIMENSION(NUMMAT),INTENT(IN) :: MAT_PARAM
109 INTEGER,INTENT(INOUT) :: TRIMAT
110
111
112
113 INTEGER
114 . I,J,K,L,IL,MLN, NG, ISSN, NPN, NN, N, MID, PID ,IREP,
115 . II,II0,JJ0,II1,JJ1,II2,JJ2,,II3,JJ3,II4,JJ4,II5,JJ5,
116 . II6,JJ6,JHBE,ISO,IGT,IINT,MODE,IEOS,IVISC,IVISC0,TSHELL,
117 . IPLAST, IALEL,MT,NFAIL,NFAIL0,ITET4,ICPRE,ICSTR,IRB ,
118 . NLAY,NPTR,NPTS,NPTT,IMAT,INUM_R2R(1+R2R_SIU*NUMELS),
119 . NSPHDIR,IPARTSPH,NUVAR,ISVIS,IBOLTP,ITET10,NLOC_FAIL,
120 . IPERT,STAT
121 INTEGER WORK(70000)
123 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
124 INTEGER ID, JALE_FROM_MAT, JALE_FROM_PROP
125 CHARACTER(LEN=NCHARTITLE) :: TITR
126 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX2
127 INTEGER :: CLUSTER_TYP,CLUSTER_NEL
128 INTEGER, DIMENSION(:), ALLOCATABLE :: SAVE_CLUSTER
129 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xnum_rnoise
130
131
132
133
134
135
136 CALL my_alloc(index2,numels)
137
138 IF (nperturb > 0) THEN
139 ALLOCATE(xnum_rnoise(nperturb,numels),stat=stat)
140 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
141 . msgtype=msgerror,
142 . c1='XNUM_RNOISE')
143 ENDIF
144
145 DO i=1,numels
147 eadd(i)=1
148 itri(5,i)=i
149 index(i)=i
150 inum(1,i)=iparts(i)
151 inum(2,i)=ixs(1,i)
152 inum(3,i)=ixs(2,i)
153 inum(4,i)=ixs(3,i)
154 inum(5,i)=ixs(4,i)
155 inum(6,i)=ixs(5,i)
156 inum(7,i)=ixs(6,i)
157 inum(8,i)=ixs(7,i)
158 inum(9,i)=ixs(8,i)
159 inum(10,i)=ixs(9,i)
160 inum(11,i)=ixs(10,i)
161 inum(12,i)=ixs(11,i)
162 inum(13,i)=isolnod(i)
163 IF (nsubdom>0) inum_r2r(i) =
tag_elsf(i)
164 IF (nperturb > 0) THEN
165 DO ipert = 1, nperturb
166 xnum_rnoise(ipert,i) = rnoise(ipert,i)
167 ENDDO
168 ENDIF
169 ENDDO
170 IF(nsphsol /= 0)THEN
171 DO i=1,numels8
172 inum(14,i)=sol2sph(1,i)
173 inum(15,i)=sol2sph(2,i)
174 inum(16,i)=sol2sph_typ(i)
175 ENDDO
176 END IF
177
178 DO i=1,numels
179 xep(i)=cep(i)
180 ENDDO
181
182 DO i = 1, numels
183 ii = i
184 npn = 1
185 jhbe= 1
186 jpor=0
187 mid = ixs(1,ii)
188 mln = nint(pm(19,abs(mid)))
189 IF(mln == 51)trimat=4
190 IF (mid < 0) THEN
191 IF (mln==6.AND.jpor/=2) mln=17
192 IF (mln==46) mln=47
193 mid = iabs(mid)
194 ENDIF
195 IF (mln == 36 .or. mln == 47) THEN
196 nuvar = ipm(8,mid)
197 ELSE
198 nuvar = 0
199 ENDIF
200 pid= ixs(10,ii)
201 iso= isolnod(ii)
202 iplast= 1
203 icpre = 0
204 icstr = 0
205 irep = 0
206 istrain = 0
207 nfail0 = mat_param(mid)%NFAIL
208 nloc_fail = mat_param(mid)%NLOC
209 ieos = 0
210 ivisc0 = 0
211 nlay = 1
212 tshell = 0
213 isvis = 0
214 IF (pid/=0) THEN
215 npn = igeo(4,pid)
216 issn = iabs(igeo(5,pid))
217 irep = igeo(6,pid)
218 jhbe = igeo(10,pid)
219 igt = igeo(11,pid)
220 istrain = igeo(12,pid)
221 icpre = iabs(igeo(13,pid))
222 icstr = igeo(14,pid)
223 iint = igeo(15,pid)
224 jcvt = iabs(igeo(16,pid))
225 itet4 = igeo(20,pid)
226 itet10 = igeo(50,pid)
227 IF (igt == 22) THEN
228 nlay = igeo(30,pid)
229 DO il=1,nlay
230 imat = igeo(100+il,pid)
231 nfail0 =
max(nfail0,mat_param(imat)%NFAIL)
232 IF (mat_param(imat)%IVISC > 0) ivisc0 = 1
233 ENDDO
234 ELSEIF (mat_param(mid)%IVISC > 0) THEN
235 ivisc0 = 1
236 ENDIF
237
238 igeo(34,pid) = ivisc0
239
240 IF (igt /= 15) iplast = igeo(9,pid)
241 IF (igt==15) jpor=2*nint(geo(28,pid))
242 jclos=0
243 IF (geo(130,pid)>0.) jclos=1
244
245 IF (geo(16,pid)/=zero.OR.geo(17,pid)/=zero) isvis=1
246 ENDIF
247 IF((jhbe == 14 .OR. jhbe == 222).AND.iso==8) numels8a=numels8a+1
248 IF (jhbe == 12) jhbe = 4
249 IF (jhbe==2) jhbe = 0
250
251 jale_from_mat = nint(pm(72,mid))
252 jale_from_prop = igeo(62,pid)
253 jale =
max(jale_from_mat, jale_from_prop)
254 jlag=0
255 IF(jale == 0 .AND. mln /= 18)jlag=1
256 jeul=0
257 IF(jale==2)THEN
258 jale=0
259 jeul=1
260 ELSEIF(jale == 3) THEN
261 jlag = 1
262 jale = 1
263 ENDIF
264 IF(mln/=50)jtur=nint(pm(70,mid))
265 jthe=nint(pm(71,mid))
266 IF (jlag==0 .AND. pid/=0) issn=4
267
268
269
270
271 irb = isoloff(i)
272
273 jsms=0
274 IF(isms/=0)THEN
275 IF(idtgrs/=0)THEN
276 IF(tagprt_sms(iparts(ii))/=0)jsms=1
277 ELSE
278 jsms=1
279 END IF
280 END IF
281 ieos = ipm(4,mid)
282
283 nsphdir =igeo(37,pid)
284 ipartsph=igeo(38,pid)
285 igeo(35,pid) = isvis
286
287 iboltp = 0
288 IF(npreload > 0)THEN
289 iboltp = iflag_bpreload(ii)
290 ENDIF
291
292
293
294
295
296 IF(iso==16)iso=21
297
300
301 itri(1,i)=iso+jsms+igt
302
303
304 itri(2,i)=ipartsph
305
306
316 itri(3,i)=mln+jhbe+issn+jale+jlag+jeul+jtur+jthe+jpor+irb
317
318
322 icstr =icstr/100+2*mod(icstr/10,10)+4*mod(icstr,10)
330 itri(4,i)=jclos+npn+iplast+icpre+icstr+irep+iint+jcvt+istrain
331 . +itet4+nfail
332
333 itri(5,i)=mid
334
335 itri(6,i)=pid
336
344
345 itri(7,i)=ieos+ivisc+nuvar+isvis+iboltp+itet10+nloc_fail
346
347 itri(8,i )= damp_range_part(iparts(ii))
348 ENDDO
349
350 mode=0
351 CALL my_orders( mode, work, itri, index, numels , 8)
352
353 DO i=1,numels
354 iparts(i) =inum(1,index(i))
355 isolnod(i)=inum(13,index(i))
356 IF (nsubdom>0)
tag_elsf(i)=inum_r2r(index(i))
357 IF (nperturb > 0) THEN
358 DO ipert = 1, nperturb
359 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
360 ENDDO
361 ENDIF
362 ENDDO
363
364 DO i=1,numels
365 cep(i)=xep(index(i))
367 ENDDO
368
369 DO k=1,11
370 DO i=1,numels
371 ixs(k,i)=inum(k+1,index(i))
372 ENDDO
373 ENDDO
374
375
376
377 DO i = 1, numels
378 inum(3,i) = isoloff(i)
379 END DO
380
381 DO i = 1, numels
382 isoloff(i) = inum(3,index(i))
383 END DO
384
385
386
387 IF (npreload > 0) THEN
388 DO i = 1, numels
389 inum(4,i) = iflag_bpreload(i)
390 END DO
391
392 DO i = 1, numels
393 iflag_bpreload(i) = inum(4,index(i))
394 END DO
395 ENDIF
396
397
398 IF (numels10+numels20+numels16 > 0) THEN
399 DO i = 1, numels10
400 ii = i + numels8
401 inum(1,ii)=ixs10(1,i)
402 inum(2,ii)=ixs10(2,i)
403 inum(3,ii)=ixs10(3,i)
404 inum(4,ii)=ixs10(4,i)
405 inum(5,ii)=ixs10(5,i)
406 inum(6,ii)=ixs10(6,i)
407 ENDDO
408
409 DO i = 1, numels10
410 ii = i + numels8
411 ixs10(1,i)=inum(1,index(ii))
412 ixs10(2,i)=inum(2,index(ii))
413 ixs10(3,i)=inum(3,index(ii))
414 ixs10(4,i)=inum(4,index(ii))
415 ixs10(5,i)=inum(5,index(ii))
416 ixs10(6,i)=inum(6,index(ii))
417 ENDDO
418
419 DO i = 1, numels20
420 ii = i + numels8 + numels10
421 inum(1,ii) =ixs20(1,i)
422 inum(2,ii) =ixs20(2,i)
423 inum(3,ii) =ixs20(3,i)
424 inum(4,ii) =ixs20(4,i)
425 inum(5,ii) =ixs20(5,i)
426 inum(6,ii) =ixs20(6,i)
427 inum(7,ii) =ixs20(7,i)
428 inum(8,ii) =ixs20(8,i)
429 inum(9,ii) =ixs20(9,i)
430 inum(10,ii)=ixs20(10,i)
431 inum(11,ii)=ixs20(11,i)
432 inum(12,ii)=ixs20(12,i)
433 ENDDO
434
435 DO i = 1, numels20
436 ii = i + numels8 + numels10
437 ixs20(1,i)=inum(1,index(ii))
438 ixs20(2,i)=inum(2,index(ii))
439 ixs20(3,i)=inum(3,index(ii))
440 ixs20(4,i)=inum(4,index(ii))
441 ixs20(5,i)=inum(5,index(ii))
442 ixs20(6,i)=inum(6,index(ii))
443 ixs20(7,i)=inum(7,index(ii
444 ixs20(8,i)=inum(8,index(ii))
445 ixs20(9,i)=inum(9,index(ii))
446 ixs20(10,i)=inum(10,index(ii))
447 ixs20(11,i)=inum(11,index(ii))
448 ixs20(12,i)=inum(12,index(ii))
449 ENDDO
450
451 DO i = 1, numels16
452 ii = i + numels8 + numels10 + numels20
453 inum(1,ii) =ixs16(1,i)
454 inum(2,ii) =ixs16(2,i)
455 inum(3,ii) =ixs16(3,i)
456 inum(4,ii) =ixs16(4,i)
457 inum(5,ii) =ixs16(5,i)
458 inum(6,ii) =ixs16(6,i)
459 inum(7,ii) =ixs16(7,i)
460 inum(8,ii) =ixs16(8,i)
461 ENDDO
462
463 DO i = 1, numels16
464 ii = i + numels8 + numels10 + numels20
465 ixs16(1,i)=inum(1,index(ii))
466 ixs16(2,i)=inum(2,index(ii))
467 ixs16(3,i)=inum(3,index(ii))
468 ixs16(4,i)=inum(4,index(ii))
469 ixs16(5,i)=inum(5,index(ii))
470 ixs16(6,i)=inum(6,index(ii))
471 ixs16(7,i)=inum(7,index(ii))
472 ixs16(8,i)=inum(8,index(ii))
473 ENDDO
474
475 ENDIF
476
477
478
479 DO i=1,numels
480 itr1(index(i))=i
481 ENDDO
482
483
484
485 DO i=1,nsurf
486 nn=igrsurf(i)%NSEG
487 DO j=1,nn
488 IF (igrsurf(i)%ELTYP(j) == 1)
489 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
490 ENDDO
491 ENDDO
492
493
494
495 DO i=1,ngrbric
496 nn=igrbric(i)%NENTITY
497 DO j=1,nn
498 igrbric(i)%ENTITY(j) = itr1(igrbric(i)%ENTITY(j))
499 ENDDO
500 ENDDO
501
502
503
504 IF(nsphsol /= 0)THEN
505 DO i=1,numsph
506 IF(sph2sol(i) /= 0)sph2sol(i)=itr1(sph2sol(i))
507 ENDDO
508
509
510 DO i=1,numels8
511 sol2sph(1,i)=inum(14,index(i))
512 sol2sph(2,i)=inum(15,index(i))
513 sol2sph_typ(i)=inum(16,index(i))
514 END DO
515 END IF
516
517
518
519 DO i=1,8*numels+6*numels10+12*numels20+8*numels16
520 IF(nod2els(i) /= 0)nod2els(i)=itr1(nod2els(i))
521 END DO
522
523
524
525 DO i=1,ncluster
526 cluster_typ = clusters(i)%TYPE
527 IF(cluster_typ==1) THEN
528 cluster_nel = clusters(i)%NEL
529 ALLOCATE( save_cluster( cluster_nel ) )
530 save_cluster( 1:cluster_nel ) = clusters(i)%ELEM( 1:cluster_nel )
531 DO j=1,cluster_nel
532 clusters(i)%ELEM(j) = itr1( save_cluster( j ) )
533 ENDDO
534 DEALLOCATE( save_cluster )
535 ENDIF
536 ENDDO
537
538
539
540
541
542 nd=1
543 DO i=2,numels
544 ii0=itri(1,index(i))
545 jj0=itri(1,index(i-1))
546 ii=itri(2,index(i))
547 jj=itri(2,index(i-1))
548 ii1=itri(3,index(i))
549 jj1=itri(3,index(i-1))
550 ii2=itri(4,index(i))
551 jj2=itri(4,index(i-1))
552 ii3=itri(5,index(i))
553 jj3=itri(5,index(i-1))
554 ii4=itri(6,index(i))
555 jj4=itri(6,index(i-1))
556 ii5=itri(7,index(i))
557 jj5=itri(7,index(i-1))
558 ii6=itri(8,index(i))
559 jj6=itri(8,index(i-1))
560 IF(ii0/=jj0.OR.ii/=jj.OR.ii1/=jj1.OR.ii2/=jj2.OR.
561 . ii5/=jj5.OR.ii3/=jj3.OR.ii4/=jj4.OR.
562 . ii6/=jj6) THEN
563 nd=nd+1
564 eadd(nd)=i
565 ENDIF
566 ENDDO
567 eadd(nd+1) = numels+1
568 DEALLOCATE(index2)
569
570 IF (nperturb > 0) THEN
571 IF (ALLOCATED(xnum_rnoise)) DEALLOCATE(xnum_rnoise)
572 ENDIF
573
574 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
integer, parameter nchartitle
integer, dimension(:), allocatable tag_elsf
type(reorder_struct_) permutation
int my_shiftr(int *a, int *n)
int my_shiftl(int *a, int *n)
int my_and(int *a, int *b)
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)