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