45
46
47
48 USE my_alloc_mod
51 USE multi_fvm_mod
55 USE matparam_def_mod
57 use element_mod , only : nixtg
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77#include "implicit_f.inc"
78
79
80
81#include "com04_c.inc"
82#include "com01_c.inc"
83#include "com_xfem1.inc"
84#include "param_c.inc"
85#include "vect01_c.inc"
86#include "remesh_c.inc"
87#include "sms_c.inc"
88#include "scr17_c.inc"
89#include "drape_c.inc"
90
91
92
93 integer
94 . ixtg(nixtg,*),isel(*),inum(10,*),nd,icnod(*),ixtg1(4,*),
95 . eadd(*), itr1(*), index(*), itri(7,*),iparttg(*),
96 . cep(*), xep(*),
97 . itrioff(*),
98 . igeo(npropgi,*),ipm(npropmi,*), ipart(lipart1,*),
99 . sh3tree(ksh3tree,*), nod2eltg(*), sh3trim(*),
100 . tagprt_sms(*),iworksh(3,*)
101 INTEGER , DIMENSION(NUMELTG) , INTENT(INOUT):: PTSH3N
102
104 . pm(npropm,*), geo(npropg,*), xnum(*), thk(*), rnoise(nperturb,*),
105 . sh3ang(*)
106
107 TYPE (STACK_PLY) :: STACK
108 TYPE(MULTI_FVM_STRUCT) :: MULTI_FVM
109 TYPE (DRAPE_) , TARGET :: DRAPE(NUMELC_DRAPE + NUMELTG_DRAPE)
110 TYPE (DRAPEG_) :: DRAPEG
111 TYPE (DRAPE_) ,DIMENSION(:) ,ALLOCATABLE :: XNUM_DRAPE
112 TYPE (DRAPEG_) ,ALLOCATABLE ::
113 TYPE (DRAPE_PLY_) ,POINTER :: DRAPE_PLY
114 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT),INTENT(IN) :: MAT_PARAM
115
116 TYPE (GROUP_) , DIMENSION(NGRSH3N) :: IGRSH3N
117 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
118
119
120
121 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ISTOR
122 INTEGER WORK(70000)
123 INTEGER I, K, MLN, ISSN, NPN,NN,ICO,ID,
124 . MID, PID,
125 . J, ITHK,
126 . IPLA, II1, JJ1, II2, JJ2, II, JJ,
127 . IGTYP, II3, JJ3,
128 . MSKMLN, MSKNPN, MSKISN, MODE,ICSEN,IFAIL,NFAIL,
129 . MSKIST, MSKIPL, MSKITH, MSKMID,MSKPID,MSKIRP,MSKTYP,IREP,
130 . II0,JJ0,ILEV,PRT,IADM,MSKIRB,IRB, II4, JJ4,
131 . IXFEM,IWARNHB,IPT,IMATLY,IPID,ISH3N,
132 . INUM_WORKC(3,NUMELTG),II5,JJ5,ISUBSTACK,IPPID,
133 . NB_LAW58,IPMAT,IPERT,STAT,NSLICE,KK,NPT_DRP,
134 . IEL, IEL0
136 . angle(numeltg)
137 CHARACTER(LEN=NCHARTITLE)::TITR
138
139 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX2, INUM_PTSH3N
140
142 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
143 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xnum_rnoise
144
145
146 DATA mskmln /o'00777000000'/
147 DATA msktyp /o'00000777000'/
148 DATA mskisn /o'00000000700'/
149 DATA mskist /o'00000000070'/
150 DATA mskipl /o'00000000007'/
151
152 DATA mskith /o'10000000000'/
153 DATA mskirp /o'07000000000'/
154 DATA msknpn /o'00777000000'/
155 DATA mskirb /o'00000000007'/
156
157 DATA mskmid /o'07777777777'/
158
159 DATA mskpid /o'07777777777'/
160
161
162
163
164
165 iwarnhb=0
166 IF(nadmesh/=0)THEN
167 ALLOCATE( istor(ksh3tree+1,numeltg) )
168 ELSE
169 ALLOCATE( istor(0,0) )
170 ENDIF
172 ALLOCATE(xnum_drape(numeltg))
173 ALLOCATE(xnum_drapeg%INDX(numeltg))
174 xnum_drapeg%INDX = 0
175 DO i =1, numeltg
176 iel = drapeg%INDX(numelc + i)
177 IF(iel == 0) cycle
178 npt_drp = drape(iel)%NPLY_DRAPE
179 npt = drape(iel)%NPLY
180 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
181 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
182 xnum_drape(i)%INDX_PLY= 0
183 DO j = 1,npt_drp
184 nslice = drape(iel)%DRAPE_PLY(j)%NSLICE
185 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE(nslice,2))
186 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE(nslice,2))
187 xnum_drape(i)%DRAPE_PLY(j)%RDRAPE = 0
188 xnum_drape(i)%DRAPE_PLY(j)%IDRAPE = 0
189 ENDDO
190 ENDDO
191 ELSE
192 ALLOCATE( xnum_drape(0) )
193 ENDIF
194 IF(abs(isigi) == 3 .OR. abs(isigi) == 4 .OR. abs(isigi) == 5) THEN
195 ALLOCATE(inum_ptsh3n(numeltg))
196 inum_ptsh3n = 0
197 ELSE
198 ALLOCATE(inum_ptsh3n(0))
199 ENDIF
200
201
202
203
204
205 IF (nperturb > 0) THEN
206 ALLOCATE(xnum_rnoise(nperturb,numeltg),stat=stat)
207 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
208 . msgtype=msgerror,
209 . c1='XNUM_RNOISE')
210 ENDIF
211
212 CALL my_alloc(index2,numeltg)
213
215 DO i=1,numeltg
217 eadd(i)=1
218 itri(7,i)=i
219 index(i)=i
220 inum(1,i)=iparttg(i)
221 inum(2,i)=itrioff(i)
222 xnum(i) = thk(i)
223 inum(3,i)=ixtg(1,i)
224 inum(4,i)=ixtg(2,i)
225 inum(5,i)=ixtg(3,i)
226 inum(6,i)=ixtg(4,i)
227 inum(7,i)=ixtg(5,i)
228 inum(8,i)=ixtg(6,i)
229 inum(9,i)=icnod(i)
230 inum(10,i)=ixtg(1,i)
231 inum_workc(1,i) = iworksh(1,numelc + i)
232 inum_workc(2,i) = iworksh(2,numelc + i)
233 inum_workc(3,i) = iworksh(3,numelc + i)
234 IF (nperturb > 0) THEN
235 DO ipert = 1, nperturb
236 xnum_rnoise(ipert,i) = rnoise(ipert,i)
237 ENDDO
238 ENDIF
239 angle(i)=sh3ang(i)
240
241 iel = drapeg%INDX(numelc + i)
242 xnum_drapeg%INDX(i) = iel
243 IF(iel == 0) cycle
244 npt = drape(iel)%NPLY
245 xnum_drape(i)%NPLY = npt
246 xnum_drape(i)%INDX_PLY(1:npt) = drape(iel)%INDX_PLY(1:npt)
247 npt = drape(iel)%NPLY_DRAPE
248 xnum_drape(i)%NPLY_DRAPE = npt
249 xnum_drape(i)%THICK = drape(iel)%THICK
250 DO jj = 1, npt
251 drape_ply => drape(iel)%DRAPE_PLY(jj)
252 nslice = drape_ply%NSLICE
253 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
254 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
255 DO kk = 1,nslice
256 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk
257 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE(kk,2)
258 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
259 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE(kk,2)
260 ENDDO
261 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
262 ENDDO
263 DEALLOCATE(drape(iel)%DRAPE_PLY)
264 DEALLOCATE(drape(iel)%INDX_PLY)
265 ENDDO
266 ELSE
267 DO i=1,numeltg
269 eadd(i)=1
270 itri(7,i)=i
271 index(i)=i
272 inum(1,i)=iparttg(i)
273 inum(2,i)=itrioff(i)
274 xnum(i) = thk(i)
275 inum(3,i)=ixtg(1,i)
276 inum(4,i)=ixtg(2,i)
277 inum(5,i)=ixtg(3,i)
278 inum(6,i)=ixtg(4,i)
279 inum(7,i)=ixtg(5,i)
280 inum(8,i)=ixtg(6,i)
281 inum(9,i)=icnod(i)
282 inum(10,i)=ixtg(1,i)
283 inum_workc(1,i) = iworksh(1,numelc + i)
284 inum_workc(2,i) = iworksh(2,numelc + i)
285 inum_workc(3,i) = iworksh(3,numelc + i)
286 IF (nperturb > 0) THEN
287 DO ipert = 1, nperturb
288 xnum_rnoise(ipert,i) = rnoise(ipert,i)
289 ENDDO
290 ENDIF
291 angle(i)=sh3ang(i)
292 ENDDO
293 ENDIF
294
295 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)THEN
296 inum_ptsh3n(1:numeltg) = ptsh3n(1:numeltg)
297 ENDIF
298 IF(nadmesh/=0)THEN
299 DO k=1,ksh3tree
300 DO i=1,numeltg
301 istor(k,i)=sh3tree(k,i)
302 ENDDO
303 ENDDO
304 IF(lsh3trim/=0)THEN
305 DO i=1,numeltg
306 istor(ksh3tree+1,i)=sh3trim(i)
307 ENDDO
308 END IF
309 END IF
310
311 DO i=1,numeltg
312 xep(i)=cep(i)
313 ENDDO
314
315 DO 100 i = 1, numeltg
316 ii = i
317
318 IF(nadmesh==0)THEN
319 itri(1,i)=0
320 ELSE
321
322
323 prt = iparttg(ii)
324 iadm= ipart(10,prt)
325 IF(iadm==0)THEN
326
327 itri(1,i)=0
328 ELSE
329 ilev=sh3tree(3,i)
330 IF(ilev<0)ilev=-ilev-1
331 itri(1,i)=ilev+1
332 END IF
333 END IF
334
335 mid= ixtg(1,ii)
336 pid= ixtg(5,ii)
337 mln = nint(pm(19,mid))
338
339 jthe = nint(pm(71,mid))
340 igtyp = igeo(11,pid)
341 npn = igeo(4,pid)
342 ish3n = igeo(18,pid)
343 ixfem = 0
344 nfail = mat_param(mid)%NFAIL
345 ifail = 0
346
347 IF (igtyp == 11) THEN
348 DO ipt = 1, npn
349 imatly = igeo(100+ipt,pid)
350 nfail =
max(nfail, mat_param(imatly)%NFAIL)
351 ENDDO
352 IF (icrack3d > 0) ixfem = mat_param(mid)%IXFEM
353 ELSEIF (igtyp == 17) THEN
354 npn = iworksh(1,numelc + ii)
355 isubstack =iworksh(3,numelc + ii)
356 ippid = 2
357 DO ipt = 1, npn
358 ipid = stack%IGEO(ippid+ipt,isubstack)
359 imatly = igeo(101, ipid)
360 nfail =
max(nfail, mat_param(imatly)%NFAIL)
361 ENDDO
362 ELSEIF (igtyp == 51 ) THEN
363
364
365
366 nb_law58 = 0
367 npn = iworksh(1,numelc + ii)
368 isubstack =iworksh(3,numelc + ii)
369 ippid = 2
370 DO ipt = 1, npn
371 ipid = stack%IGEO(ippid+ipt,isubstack)
372 imatly = igeo(101, ipid)
373 nfail =
max(nfail, mat_param(imatly)%NFAIL)
374
375 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
376 ENDDO
377
378 IF (nb_law58 == npn) THEN
379 irep = 2
380 ELSEIF (nb_law58 > 0) THEN
381 irep = irep + 3
382 ENDIF
383 ELSEIF ( igtyp == 52 ) THEN
384
385
386
387 nb_law58 = 0
388 npn = iworksh(1,numelc + ii)
389 isubstack =iworksh(3,numelc + ii)
390 ippid = 2
391 ipmat = ippid + npn
392 DO ipt = 1, npn
393 ipid = stack%IGEO(ippid + ipt,isubstack)
394 imatly = stack%IGEO(ipmat + ipt,isubstack)
395 nfail =
max(nfail, mat_param(imatly)%NFAIL)
396
397 IF (nint(pm(19,imatly)) == 58) nb_law58
398 ENDDO
399
400 IF (nb_law58 == npn) THEN
401 irep = 2
402 ELSEIF (nb_law58 > 0) THEN
403 irep = irep + 3
404 ENDIF
405
406 ELSE
407 IF(icrack3d > 0)THEN
408
409 ixfem = mat_param(mid)%IXFEM
410 IF (ixfem == 1) THEN
411 ixfem = 2
412 icrack3d = ixfem
413 ENDIF
414 END IF
415 ENDIF
416 IF (nfail > 0) ifail = 1
417
418
419 iexpan = ipm(218, mid)
420 ico = icnod(ii)
421 IF(ish3n>3.AND.ish3n<=29)THEN
423 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
425 . msgtype=msgwarning,
426 . anmode=aninfo_blind_2,
428 . c1=titr,
429 . i2=ish3n,
430 . i3=ixtg(nixtg,ii))
431 iwarnhb=iwarnhb+1
432 ish3n=2
433 ENDIF
434 ithk = nint(geo(35,pid))
435 ipla = nint(geo(39,pid))
436 irep = igeo(6,pid)
437 icsen= igeo(3,pid)
438 IF (icsen > 0) icsen=1
439
440 IF(npn==0.AND.(mln==36.OR.mln==86))THEN
441 IF(ipla==0) ipla=1
442 IF(ipla==2) ipla=0
443 ELSEIF(npn==0.AND.mln==2)THEN
444 IF(ipla==2) ipla=0
445 ELSE
446 IF(ipla==2) ipla=0
447 IF(ipla==3) ipla=2
448 ENDIF
449 IF(ithk==2)THEN
450 ithk = 0
451 ELSEIF(mln==32)THEN
452 ithk = 1
453 ENDIF
454 istrain = nint(geo(11,pid))
455 IF(mln==19.OR.mln>=25.OR.mln==15)istrain = 1
456 issn = nint(geo(3,pid))
457
458
459
460
461 irb = itrioff(i)
462
463
464 jsms = 0
465 IF(isms/=0)THEN
466 IF(idtgrs/=0)THEN
467 IF(tagprt_sms(iparttg(ii))/=0)jsms=1
468 ELSE
469 jsms=1
470 END IF
471 END IF
472
473 itri(2,i) = jsms
474
475
476
477
478
481
484
485
487 itri(3,i)=ipla+istrain+issn+igtyp+mln+ico
488
489
490
491
501
502 itri(4,i)=ithk+irep+npn+icsen+ish3n+jthe+irb+ifail+ixfem
503
504
505 itri(5,i)=mid
506
507
508 itri(6,i)=pid
509
510 itri(7,i) = iworksh(2,numelc + i)
511 100 CONTINUE
512
513 mode=0
514 CALL my_orders( mode, work, itri, index, numeltg , 7)
515
516 DO i=1,numeltg
517 iparttg(i)=inum(1,index(i))
518 thk(i) =xnum(index(i))
519 itrioff(i)=inum(2,index(i))
520 icnod(i) = inum(9,index(i))
521 ENDDO
522
523 DO i=1,numeltg
524 cep(i)=xep(index(i))
526 ENDDO
527
528 DO k=1,nixtg
529 DO i=1,numeltg
530 ixtg(k,i)=inum(k+2,index(i))
531 ENDDO
532 ENDDO
533
534
536 iel = drapeg%NUMSH4
537 DO i=1,numeltg
538 iworksh(1,numelc + i)= inum_workc(1,index(i))
539 iworksh(2,numelc + i)= inum_workc(2,index(i))
540 iworksh(3,numelc + i)= inum_workc(3,index(i))
541 IF (nperturb > 0) THEN
542 DO ipert = 1, nperturb
543 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
544 ENDDO
545 ENDIF
546 sh3ang(i)=angle(index(i))
547 !
548 iel0 = xnum_drapeg%INDX(index(i))
549 drapeg%INDX(numelc + i)= 0
550 IF(iel0 == 0) cycle
551 iel = iel + 1
552 npt = xnum_drape(index(i))%NPLY
553 drape(iel)%NPLY = npt
554 drapeg%INDX(numelc + i)= iel
555 ALLOCATE(drape(iel)%INDX_PLY(npt))
556 drape(iel)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
557 npt = xnum_drape(index(i))%NPLY_DRAPE
558 drape(iel)%NPLY_DRAPE= npt
559 drape(iel)%THICK = xnum_drape(index(i))%THICK
560 ALLOCATE(drape(iel)%DRAPE_PLY(npt))
561 DO jj = 1, npt
562 drape_ply => drape(iel)%DRAPE_PLY(jj)
563 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
564 drape_ply%NSLICE = nslice
565 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
566 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
567 drape_ply%IDRAPE = 0
568 drape_ply%RDRAPE = zero
569 DO kk = 1,nslice
570 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
571 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
572 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
573 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
574 ENDDO
575 ENDDO
576 ENDDO
577 ELSE
578 DO i=1,numeltg
579 iworksh(1,numelc + i)= inum_workc(1,index(i))
580 iworksh(2,numelc + i)= inum_workc(2,index(i))
581 iworksh(3,numelc + i)= inum_workc(3,index(i))
582 IF (nperturb > 0) THEN
583 DO ipert = 1, nperturb
584 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
585 ENDDO
586 ENDIF
587 sh3ang(i)=angle(index(i))
588 ENDDO
589 ENDIF
590 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)THEN
591 DO i=1,numeltg
592 ptsh3n(i) = inum_ptsh3n(index(i))
593 ENDDO
594 ENDIF
595 IF(nadmesh/=0)THEN
596 DO k=1,ksh3tree
597 DO i=1,numeltg
598 sh3tree(k,i)=istor(k,index(i))
599 ENDDO
600 ENDDO
601 IF(lsh3trim/=0)THEN
602 DO i=1,numeltg
603 sh3trim(i)=istor(ksh3tree+1,index(i))
604 ENDDO
605 END IF
606 END IF
607
608
609
610
611 DO i=1,numeltg
612 itr1(index(i))=i
613 ENDDO
614
615
616 IF(nadmesh/=0)THEN
617 DO i=1,numeltg
618 IF(sh3tree(1,i)/=0)
619 . sh3tree(1,i)=itr1(sh3tree(1,i))
620 IF(sh3tree(2,i)/=0)
621 . sh3tree(2,i)=itr1(sh3tree(2,i))
622 ENDDO
623 END IF
624
625
626
627 DO i=1,nsurf
628 nn=igrsurf(i)%NSEG
629 DO j=1,nn
630 IF(igrsurf(i)%ELTYP(j) == 7)
631 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
632 ENDDO
633 ENDDO
634
635
636
637 DO i=1,ngrsh3n
638 nn=igrsh3n(i)%NENTITY
639 DO j=1,nn
640 igrsh3n(i)%ENTITY(j) = itr1(igrsh3n(i)%ENTITY(j))
641 ENDDO
642 ENDDO
643
644
645
646 DO i=1,3*numeltg
647 IF(nod2eltg(i) /= 0)nod2eltg(i)=itr1(nod2eltg(i))
648 END DO
649
650
651
652 nd=1
653 DO i=2,numeltg
654 ii0=itri(1,index(i))
655 jj0=itri(1,index(i-1))
656 ii =itri(2,index(i))
657 jj =itri(2,index(i-1))
658 ii1=itri(3,index(i))
659 jj1=itri(3,index(i-1))
660 ii2=itri(4,index(i))
661 jj2=itri(4,index(i-1))
662 ii3=itri(5,index(i))
663 jj3=itri(5,index(i-1))
664 ii4=itri(6,index(i))
665 jj4=itri(6,index(i-1))
666
667 ii5=itri(7,index(i))
668 jj5=itri(7,index(i-1))
669 IF (ii0/=jj0.OR.
670 . ii/=jj.OR.
671 . ii1/=jj1.OR.
672 . ii2/=jj2.OR.
673 . ii3/=jj3.OR.
674 . ii4/=jj4.OR.
675 . ii5 /= jj5) THEN
676 nd=nd+1
677 eadd(nd)=i
678 ENDIF
679 ENDDO
680 eadd(nd+1) = numeltg+1
681 DO i=1,numeltg
682 IF(iwarnhb/=0)THEN
683 pid = ixtg(nixtg-1,i)
685 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
687 . msgtype=msgwarning,
688 . anmode=aninfo,
690 . c1=titr)
691 iwarn=iwarn-1
692 ENDIF
693 ENDDO
694
695 IF (nperturb > 0) THEN
696 IF (ALLOCATED(xnum_rnoise)) DEALLOCATE(xnum_rnoise)
697 ENDIF
699 DO i =1, numeltg
700 iel0 = xnum_drapeg%INDX(i)
701 IF(iel0 == 0) cycle
702 npt_drp = xnum_drape(i)%NPLY_DRAPE
703 DO j = 1,npt_drp
704 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
705 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
706 ENDDO
707 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
708 ENDDO
709 DEALLOCATE(xnum_drape,xnum_drapeg%INDX)
710 ELSE
711 DEALLOCATE( xnum_drape)
712 ENDIF
713
714 DEALLOCATE(index2)
715 DEALLOCATE( istor )
716 IF(ALLOCATED(inum_ptsh3n))DEALLOCATE(inum_ptsh3n)
717 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
integer, parameter nchartitle
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)