237
238
239
242 use element_mod , only : nixc,nixtg
243
244
245
246#include "implicit_f.inc"
247
248
249
250#include "param_c.inc"
251#include "com04_c.inc"
252#include "scr17_c.inc"
253#include "remesh_c.inc"
254
255
256
257 INTEGER IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
258 . IXC(NIXC,*), IXTG(NIXTG,*),ITAB(*),ITABM1(*),
259 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*),
260 . IPADMESH(KIPADMESH,*)
261 my_real x(3,*), padmesh(kpadmesh,*)
262
263
264
265 INTEGER ID,NP,J10(10),
266 . N,IP,I,J,NLEV,NI,NJ,NK,NL,NN,
267 . K,L,P,Q,QQ,STAT,
268 . LEVEL,NUMELC_LEV,NUMELTG_LEV,
269 . NUMELC_OLD,NUMELTG_OLD,
270 . NUMELC_OLD_OLD,NUMELTG_OLD_OLD,
271 . NUMELC_NEW,NUMELTG_NEW,NUMNOD_NEW,
272 . INILEV
273 INTEGER, DIMENSION(:),ALLOCATABLE ::
274 . KNOD2SH, NOD2SH
275 INTEGER, DIMENSION(:,:),ALLOCATABLE :: TAG
277 . angl,xa,xb
278 CHARACTER MESS*40
279 CHARACTER(LEN=NCHARTITLE) :: TITR
280 CHARACTER(LEN=NCHARKEY) :: KEY
281
282 DATA mess /'OPTIONS FOR ADAPTIVE MESHING DEFINITION '/
283
284 IF(iadmstat /= 0)RETURN
285
286
287 numnod_new =numnod0
288 numelc_old =0
289 numelc_new =numelc0
290 numeltg_old=0
291 numeltg_new=numeltg0
292
293 DO 100 level=1,levelmax
294 numelc_old_old=numelc_old
295 numelc_old =numelc_new
296 numeltg_old_old=numeltg_old
297 numeltg_old =numeltg_new
298
299 numelc_lev =numelc_old-numelc_old_old
300 numeltg_lev=numeltg_old-numeltg_old_old
301
302
303
304 ALLOCATE(knod2sh(0:numnod_new),stat=stat)
305 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
306 . msgtype=msgerror,
307 . c1='KNOD2SH')
308
309 knod2sh=0
310 DO n=numelc_old_old+1,numelc_old
311 DO i=1,4
312 ni=ixc(i+1,n)
313 knod2sh(ni)=knod2sh(ni)+1
314 END DO
315 END DO
316
317 DO n=numeltg_old_old+1,numeltg_old
318 DO i=1,3
319 ni=ixtg(i+1,n)
320 knod2sh(ni)=knod2sh(ni)+1
321 END DO
322 END DO
323
324 DO n=2,numnod_new
325 knod2sh(n)=knod2sh(n)+knod2sh(n-1)
326 END DO
327
328 ALLOCATE(nod2sh(4*numelc_lev+3*numeltg_lev),stat=stat)
329 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
330 . msgtype=msgerror,
331 . c1='NOD2SH')
332
333 DO n=1,numelc_lev
334 nn=numelc_old_old+n
335 DO i=1,4
336 ni=ixc(i+1,nn)-1
337 knod2sh(ni)=knod2sh(ni)+1
338 nod2sh(knod2sh(ni))=n
339 END DO
340 END DO
341
342 DO n=1,numeltg_lev
343 nn=numeltg_old_old+n
344 DO i=1,3
345 ni=ixtg(i+1,nn)-1
346 knod2sh(ni)=knod2sh(ni)+1
347 nod2sh(knod2sh(ni))=numelc_lev+n
348 END DO
349 END DO
350
351 DO n=numnod_new,1,-1
352 knod2sh(n)=knod2sh(n-1)
353 END DO
354 knod2sh(0)=0
355
356
357 ALLOCATE(tag(5,numelc_lev+numeltg_lev),stat=stat)
358 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
359 . msgtype=msgerror,
360 . c1='TAG')
361 tag=0
362
363 DO n=1,numelc_lev
364 nn=numelc_old_old+n
365 ip =ipartc(nn)
366 nlev=ipart(10,ip)
367 IF(nlev<level) cycle
368 DO i=1,4
369 IF(tag(i,n)==0)THEN
370 ni=ixc(i+1,nn)
371 nj=ixc(mod(i,4)+2,nn)
372
373 numnod_new=numnod_new+1
374 tag(i,n)=numnod_new
375 DO j=1,3
376 x(j,numnod_new)=half*(x(j,ni)+x(j,nj))
377 END DO
378 DO k=knod2sh(ni-1)+1,knod2sh(ni)
379 p=nod2sh(k)
380 IF(p/=n)THEN
381 DO l=knod2sh(nj-1)+1,knod2sh(nj)
382 q=nod2sh(l)
383 IF(q==p)THEN
384 IF(q<=numelc_lev)THEN
385 qq=numelc_old_old+q
386 DO j=1,4
387 nk=ixc(j+1,qq)
388 nl=ixc(mod(j,4)+2,qq)
389
390 IF((nk==ni.AND.
nl==nj).OR.
391 . (
nl==ni.AND.nk==nj))
THEN
392 tag(j,q)=numnod_new
393 END IF
394 END DO
395 ELSE
396 qq=numeltg_old_old+q-numelc_lev
397 DO j=1,3
398 nk=ixtg(j+1,qq)
399 nl=ixtg(mod(j,3)+2,qq)
400
401 IF((nk==ni.AND.
nl==nj).OR.
402 . (
nl==ni.AND.nk==nj))
THEN
403 tag(j,q)=numnod_new
404 END IF
405 END DO
406 END IF
407 END IF
408 END DO
409 END IF
410 END DO
411 END IF
412 END DO
413 END DO
414
415 DO n=1,numelc_lev
416 nn=numelc_old_old+n
417 ip =ipartc(nn)
418 nlev=ipart(10,ip)
419 IF(nlev<level) cycle
420 numnod_new=numnod_new+1
421 tag(5,n)=numnod_new
422 ni=tag(1,n)
423 nj=tag(3,n)
424 nk=tag(2,n)
426 DO j=1,3
427 xa=half*(x(j,ni)+x(j,nj))
428 xb=half*(x(j,nk)+x(j,
nl))
429 x(j,numnod_new)=half*(xa+xb)
430 END DO
431 END DO
432
433 DO n=1,numeltg_lev
434 nn=numeltg_old_old+n
435 ip =iparttg(nn)
436 nlev=ipart(10,ip)
437 IF(nlev<level) cycle
438 DO i=1,3
439 IF(tag(i,n+numelc_lev)==0)THEN
440 ni=ixtg(i+1,nn)
441 nj=ixtg(mod(i,3)+2,nn)
442
443 numnod_new=numnod_new+1
444 tag(i,n+numelc_lev)=numnod_new
445 DO j=1,3
446 x(j,numnod_new)=half*(x(j,ni)+x(j,nj))
447 END DO
448 DO k=knod2sh(ni-1)+1,knod2sh(ni)
449 p=nod2sh(k)
450 IF(p/=n+numelc)THEN
451 DO l=knod2sh(nj-1)+1,knod2sh(nj)
452 q=nod2sh(l)
453 IF(q==p)THEN
454 IF(q<=numelc_lev)THEN
455 qq=numelc_old_old+q
456 DO j=1,4
457 nk=ixc(j+1,qq)
458 nl=ixc(mod(j,4)+2,qq)
459
460 IF((nk==ni.AND.
nl==nj).OR.
461 . (
nl==ni.AND.nk==nj))
THEN
462 tag(j,q)=numnod_new
463 END IF
464 END DO
465 ELSE
466 qq=numeltg_old_old+q-numelc_lev
467 DO j=1,3
468 nk=ixtg(j+1,qq)
469 nl=ixtg(mod(j,3)+2,qq)
470
471 IF((nk==ni.AND.
nl==nj).OR.
472 . (
nl==ni.AND.nk==nj))
THEN
473 tag(j,q)=numnod_new
474 END IF
475 END DO
476 END IF
477 END IF
478 END DO
479 END IF
480 END DO
481 END IF
482 END DO
483 END DO
484
485 numelc_new=numelc_old
486 DO n=1,numelc_lev
487 nn=numelc_old_old+n
488 ip =ipartc(nn)
489 nlev=ipart(10,ip)
490 IF(nlev<level) cycle
491
492 DO j=1,nixc
493 DO i=1,4
494 ixc(j,numelc_new+i)=ixc(j,nn)
495 END DO
496 END DO
497
498 numelc_new=numelc_new+1
499 ixc(2,numelc_new)=ixc(2,nn)
500 ixc(3,numelc_new)=tag(1,n)
501 ixc(4,numelc_new)=tag(5,n)
502 ixc(5,numelc_new)=tag(4,n)
503 ipartc(numelc_new)=ip
504
505 sh4tree(1,numelc_new)=nn
506 sh4tree(2,nn)=numelc_new
507
508
509
510 sh4tree(3,numelc_new)=-(level+1)
511
512 numelc_new=numelc_new+1
513 ixc(2,numelc_new)=tag(1,n)
514 ixc(3,numelc_new)=ixc(3,nn)
515 ixc(4,numelc_new)=tag(2,n)
516 ixc(5,numelc_new)=tag(5,n)
517 ipartc(numelc_new)=ip
518
519 sh4tree(1,numelc_new)=nn
520 sh4tree(3,numelc_new)=-(level+1)
521
522 numelc_new=numelc_new+1
523 ixc(2,numelc_new)=tag(5,n)
524 ixc(3,numelc_new)=tag(2,n)
525 ixc(4,numelc_new)=ixc(4,nn)
526 ixc(5,numelc_new)=tag(3,n)
527 ipartc(numelc_new)=ip
528
529 sh4tree(1,numelc_new)=nn
530 sh4tree(3,numelc_new)=-(level+1)
531
532 numelc_new=numelc_new+1
533 ixc(2,numelc_new)=tag(4,n)
534 ixc(3,numelc_new)=tag(5,n)
535 ixc(4,numelc_new)=tag(3,n)
536 ixc(5,numelc_new)=ixc(5,nn)
537 ipartc(numelc_new)=ip
538
539 sh4tree(1,numelc_new)=nn
540 sh4tree(3,numelc_new)=-(level+1)
541 END DO
542
543 numeltg_new=numeltg_old
544 DO n=1,numeltg_lev
545 nn=numeltg_old_old+n
546 ip =iparttg(nn)
547 nlev=ipart(10,ip)
548 IF(nlev<level) cycle
549
550 DO j=1,nixtg
551 DO i=1,4
552 ixtg(j,numeltg_new+i)=ixtg(j,nn)
553 END DO
554 END DO
555
556 numeltg_new=numeltg_new+1
557 ixtg(2,numeltg_new)= ixtg(2,nn)
558 ixtg(3,numeltg_new)= tag(1,n+numelc_lev)
559 ixtg(4,numeltg_new)= tag(3,n+numelc_lev)
560 iparttg(numeltg_new)=ip
561
562 sh3tree(1,numeltg_new)=nn
563 sh3tree(2,nn)=numeltg_new
564 sh3tree(3,numeltg_new)=-(level+1)
565
566 numeltg_new=numeltg_new+1
567 ixtg(2,numeltg_new)= tag(1,n+numelc_lev)
568 ixtg(3,numeltg_new)= ixtg(3,nn)
569 ixtg(4,numeltg_new)= tag(2,n+numelc_lev)
570 iparttg(numeltg_new)=ip
571
572 sh3tree(1,numeltg_new)=nn
573 sh3tree(3,numeltg_new)=-(level+1)
574
575 numeltg_new=numeltg_new+1
576 ixtg(2,numeltg_new)= tag(3,n+numelc_lev)
577 ixtg(3,numeltg_new)= tag(2,n+numelc_lev)
578 ixtg(4,numeltg_new)= ixtg(4,nn)
579 iparttg(numeltg_new)=ip
580
581 sh3tree(1,numeltg_new)=nn
582 sh3tree(3,numeltg_new)=-(level+1)
583
584 numeltg_new=numeltg_new+1
585 ixtg(2,numeltg_new)= tag(2,n+numelc_lev)
586 ixtg(3,numeltg_new)= tag(3,n+numelc_lev)
587 ixtg(4,numeltg_new)= tag(1,n+numelc_lev)
588 iparttg(numeltg_new)=ip
589
590 sh3tree(1,numeltg_new)=nn
591 sh3tree(3,numeltg_new)=-(level+1)
592 END DO
593
594
595 DEALLOCATE(tag)
596 DEALLOCATE(nod2sh)
597 DEALLOCATE(knod2sh)
598 100 CONTINUE
599
600
601
602 DO n=1,numelc0
604 END DO
605
606 DO n=1,numeltg0
608 END DO
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713 numnod=numnod_new
714
715
716 CALL constit(itab,itabm1,numnod)
717 RETURN
718
recursive subroutine identson4(level, nn, ixc, sh4tree)
recursive subroutine identson3(level, nn, ixtg, sh3tree)
subroutine constit(itab, itabm1, numnod)
integer, parameter nchartitle
integer, parameter ncharkey
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)
character *2 function nl()