583
584 IMPLICIT NONE
585 REAL(mps) :: dx
586 REAL(mps) :: dy
587 INTEGER(mpi) :: i
588 INTEGER(mpi) :: iga
589 INTEGER(mpi) :: igb
590 INTEGER(mpi) :: igc
591 INTEGER(mpi) :: j
592 INTEGER(mpi) :: lun
593 INTEGER(mpi) :: lunw
594 INTEGER(mpi) :: n
595 INTEGER(mpi) :: na
596 REAL(mps) :: wght
597 REAL(mps) :: x
598 REAL(mps) :: y
599 REAL(mps) :: y1
600
601
602
603
604
605 INTEGER(mpi), INTENT(IN) :: ig
606 INTEGER(mpi), INTENT(IN) :: ityp
607 CHARACTER (LEN=*), INTENT(IN) :: text
608 INTEGER(mpi), PARAMETER :: narr=1000
609 REAL(mps) :: array(2,narr)
610 REAL(mps) ::array4(4,narr/2)
611 REAL(mps) ::array1(narr+narr)
612 REAL(mps) ::four(4)
613 equivalence(array(1,1),array4(1,1),array1(1))
614 INTEGER(mpi), PARAMETER :: numgxy=10
615 INTEGER(mpi), PARAMETER :: nlimit=500
616 INTEGER(mpi) :: nstr(numgxy)
617 INTEGER(mpi) ::igtp(numgxy)
618 INTEGER(mpi) ::lvers(numgxy)
619 INTEGER(mpi) ::nst(3,numgxy)
620 REAL(mps) :: xyplws(10,numgxy)
621 INTEGER(mpi) :: jflc(5,numgxy)
622 INTEGER(mpi) ::kflc(5,numgxy)
623
624
625
626
627
628 CHARACTER (LEN=60):: gtext(numgxy)
629
630 LOGICAL:: start
631 SAVE
632 DATA start/.true./,lun/7/
633 DATA nstr/numgxy*0/
634
635 IF(start) THEN
636 start=.false.
638 DO i=1,numgxy
639 DO j=1,5
640 jflc(j,i)=0
641 kflc(j,i)=0
642 END DO
643 END DO
644 END IF
645
646 IF(ig < 1.OR.ig > numgxy) RETURN
647 IF(ityp < 1.OR.ityp > 5) RETURN
648 IF(nstr(ig) == 0) THEN
649 lvers(ig)=0
650 ELSE
651 lvers(ig)=lvers(ig)+1
652 END IF
653 nstr(ig)=1
654
655 IF(jflc(1,ig) /= 0) CALL stmarm(jflc(1,ig))
656 IF(kflc(1,ig) /= 0) CALL stmarm(kflc(1,ig))
657 igtp(ig)=ityp
658 gtext(ig)=text
659 DO j=1,5
660 jflc(j,ig)=0
661 END DO
662 jflc(5,ig)=nlimit
663 IF(ityp == 5) THEN
664 DO j=1,5
665 kflc(j,ig)=0
666 END DO
667 jflc(5,ig)=128
668 kflc(5,ig)=narr
669 nst(1,ig)=0
670 nst(2,ig)=0
671 nst(3,ig)=1
672 DO j=1,10
673 xyplws(j,ig)=0.0
674 END DO
675 END IF
676 RETURN
677
678 entry gmpxy(ig,x,y)
679 IF(ig < 1.OR.ig > numgxy) RETURN
680 IF(igtp(ig) < 1.OR.igtp(ig) > 3) RETURN
681 CALL stmapr(jflc(1,ig),x,y)
682 RETURN
683
684 entry gmpxyd(ig,x,y,dx,dy)
685 IF(ig < 1.OR.ig > numgxy) RETURN
686 IF(igtp(ig) /= 4) RETURN
687 four(1)=x
688 four(2)=y
689 four(3)=dx
690 four(4)=dy
691 CALL stmadp(jflc(1,ig),four)
692 RETURN
693
694 entry gmpms(ig,x,y)
695
696
697
698 IF(ig < 1.OR.ig > numgxy) RETURN
699 IF(igtp(ig) /= 5) RETURN
700
701 xyplws(10,ig)=x
702 IF(nst(1,ig) == 0) THEN
703 y1=y
704 nst(1,ig)=1
705 IF(kflc(3,ig) == 0) xyplws(9,ig)=x
706 ELSE
707 nst(1,ig)=0
708 CALL stmapr(kflc(1,ig),y1,y)
709 IF(kflc(3,ig) >= kflc(5,ig)) THEN
710 CALL stmacp(kflc(1,ig),array,n)
711 CALL stmarm(kflc(1,ig))
712 n=n+n
713 CALL rmesig(array,n,xyplws(2,ig),xyplws(4,ig))
714 nst(2,ig)=nst(2,ig)+1
715 IF(nst(2,ig) == 1) xyplws(7,ig)=xyplws(9,ig)
716 xyplws(8,ig)=x
717 xyplws(5,ig)=xyplws(5,ig)+xyplws(2,ig)
718 xyplws(6,ig)=xyplws(6,ig)+xyplws(4,ig)
719 IF(nst(2,ig) == nst(3,ig)) THEN
720 xyplws(1,ig)=0.5*(xyplws(7,ig)+xyplws(8,ig))
721 xyplws(2,ig)=xyplws(5,ig)/real(nst(3,ig),
mps)
722 xyplws(3,ig)=0.5*(xyplws(8,ig)-xyplws(7,ig))
723 xyplws(4,ig)=xyplws(6,ig)/real(nst(3,ig),
mps)
724 xyplws(5,ig)=0.0
725 xyplws(6,ig)=0.0
726 nst(2,ig)=0
727 CALL stmadp(jflc(1,ig),xyplws(1,ig))
728 IF(jflc(3,ig) >= jflc(5,ig)) THEN
729 CALL stmacp(jflc(1,ig),array4,n)
730 n=n/2
731 CALL stmarm(jflc(1,ig))
732 DO i=1,n,2
733 xyplws(7,ig)=array4(1,i )-array4(3, i)
734 xyplws(8,ig)=array4(1,i+1)+array4(3,i+1)
735 xyplws(1,ig)=0.5*(xyplws(7,ig)+xyplws(8,ig))
736 xyplws(2,ig)=0.5*(array4(2,i)+array4(2,i+1))
737 xyplws(3,ig)=0.5*(xyplws(8,ig)-xyplws(7,ig))
738 xyplws(4,ig)=0.5*(array4(4,i)+array4(4,i+1))
739 CALL stmadp(jflc(1,ig),xyplws(1,ig))
740 END DO
741 nst(3,ig)=nst(3,ig)+nst(3,ig)
742 END IF
743 END IF
744 END IF
745 END IF
746 RETURN
747
748 entry gmprnt(ig)
749 IF(ig == 0) THEN
750 iga=1
751 igb=numgxy
752 ELSE
753 IF(ig <= 0.OR.ig > numgxy) RETURN
754 iga=ig
755 igb=ig
756 END IF
757 DO igc=iga,igb
758
759 IF(igtp(igc) >= 1.AND.igtp(igc) <= 3) THEN
760 WRITE(*,*) ' '
761 WRITE(*,*) 'Store ',igc,': ',gtext(igc)
762 IF(jflc(4,igc) == 0) THEN
763 WRITE(*,*) ' stored n-tuples: ',jflc(3,igc)
764 ELSE
765 WRITE(*,*) ' stored n-tuples, not-stored n-tuples: ', &
766 jflc(3,igc),', ',jflc(4,igc)
767 END IF
768
769 CALL stmacp(jflc(1,igc),array,na)
770
771 DO n=1,na
772 WRITE(*,102) n, array(1,n),array(2,n)
773 END DO
774
775 ELSE IF(igtp(igc) == 4) THEN
776
777 WRITE(*,*) ' '
778 WRITE(*,*) 'Store ',igc,': ',gtext(igc)
779 IF(jflc(4,igc) == 0) THEN
780 WRITE(*,*) ' stored n-tuples: ',jflc(3,igc)
781 ELSE
782 WRITE(*,*) ' stored n-tuples, not-stored n-tuples: ', &
783 jflc(3,igc),', ',jflc(4,igc)
784 END IF
785
786 CALL stmacp(jflc(1,igc),array,na)
787 na=na/2
788
789 DO n=1,na
790 WRITE(*,102) n,(array4(j,n),j=1,4)
791 END DO
792
793 ELSE IF(igtp(igc) == 5) THEN
794
795 CALL stmacp(kflc(1,igc),array,n)
796 CALL stmarm(kflc(1,igc))
797 n=n+n
798 IF(nst(1,igc) == 1) THEN
799 n=n+1
800 array1(n)=y1
801 nst(1,igc)=0
802 END IF
803 IF(n /= 0) THEN
804 xyplws(7,igc)=xyplws( 9,igc)
805 xyplws(8,igc)=xyplws(10,igc)
806 CALL rmesig(array1,n,xyplws(2,igc),xyplws(4,igc))
807 wght=real(n,
mps)/real(nst(3,igc)*kflc(5,igc),
mps)
808 xyplws(5,igc)=xyplws(5,igc)+xyplws(2,igc)*wght
809 xyplws(6,igc)=xyplws(6,igc)+xyplws(4,igc)*wght
810 xyplws(2,igc)=xyplws(5,igc)/(real(nst(2,igc),
mps)+wght)
811 xyplws(4,igc)=xyplws(6,igc)/(real(nst(2,igc),
mps)+wght)
812 xyplws(1,igc)=0.5*(xyplws(7,igc)+xyplws(8,igc))
813 xyplws(3,igc)=0.5*(xyplws(8,igc)-xyplws(7,igc))
814 CALL stmadp(jflc(1,igc),xyplws(1,igc))
815 END IF
816
817 WRITE(*,*) ' '
818 WRITE(*,*) 'Store ',igc,': ',gtext(igc)
819 IF(jflc(4,igc) == 0) THEN
820 WRITE(*,*) ' stored n-tuples: ',jflc(3,igc)
821 ELSE
822 WRITE(*,*) ' stored n-tuples, not-stored n-tuples: ', &
823 jflc(3,igc),', ',jflc(4,igc)
824 END IF
825
826 CALL stmacp(jflc(1,igc),array,na)
827 na=na/2
828 DO n=1,na
829 WRITE(*,102) n,(array4(j,n),j=1,4)
830 END DO
831 END IF
832 END DO
833 RETURN
834
835 entry gmplun(lunw)
836 lun=lunw
837 RETURN
838
839 entry gmpwrt(ig)
840 IF(lun <= 0) RETURN
841 IF(ig == 0) THEN
842 iga=1
843 igb=numgxy
844 ELSE
845 IF(ig <= 0.OR.ig > numgxy) RETURN
846 iga=ig
847 igb=ig
848 END IF
849 DO igc=iga,igb
850 IF(igtp(igc) == 5) THEN
851
852 CALL stmacp(kflc(1,igc),array,n)
853 CALL stmarm(kflc(1,igc))
854 n=n+n
855 IF(nst(1,igc) == 1) THEN
856 n=n+1
857 array1(n)=y1
858 nst(1,igc)=0
859 END IF
860 IF(n /= 0) THEN
861 xyplws(7,igc)=xyplws( 9,igc)
862 xyplws(8,igc)=xyplws(10,igc)
863 CALL rmesig(array1,n,xyplws(2,igc),xyplws(4,igc))
864 wght=real(n,
mps)/real(nst(3,igc)*kflc(5,igc),
mps)
865 xyplws(5,igc)=xyplws(5,igc)+xyplws(2,igc)*wght
866 xyplws(6,igc)=xyplws(6,igc)+xyplws(4,igc)*wght
867 xyplws(2,igc)=xyplws(5,igc)/(real(nst(2,igc),
mps)+wght)
868 xyplws(4,igc)=xyplws(6,igc)/(real(nst(2,igc),
mps)+wght)
869 xyplws(1,igc)=0.5*(xyplws(7,igc)+xyplws(8,igc))
870 xyplws(3,igc)=0.5*(xyplws(8,igc)-xyplws(7,igc))
871 CALL stmadp(jflc(1,igc),xyplws(1,igc))
872 END IF
873
874 END IF
875 IF(jflc(3,igc)+jflc(4,igc) /= 0) THEN
876 WRITE(lun,204) ' '
877 WRITE(lun,201) igc,lvers(igc),igtp(igc)
878 WRITE(lun,204) gtext(igc)
879 WRITE(lun,203) jflc(3,igc)+jflc(4,igc)
880 CALL stmacp(jflc(1,igc),array,na)
881 IF(igtp(igc) >= 1.AND.igtp(igc) <= 3) THEN
882 WRITE(lun,204) 'x-y'
883 DO n=1,na
884 WRITE(lun,205) array(1,n),array(2,n)
885 END DO
886 ELSE IF(igtp(igc) == 4.OR.igtp(igc) == 5) THEN
887 WRITE(lun,204) 'x-y-dx-dy'
888 na=na/2
889 DO n=1,na
890 WRITE(lun,205) (array4(j,n),j=1,4)
891 END DO
892 END IF
893 WRITE(lun,204) 'end of xy-data'
894 END IF
895 END DO
896102 FORMAT(i12,4g15.7)
897
898
899
900
901
902
903201 FORMAT('XY-Data ',i4,10x,'version ',i4,10x,'type',i2)
904203 FORMAT(10x,'stored not-stored ',2i10)
905204 FORMAT(a)
906205 FORMAT(3x,4g15.7)
subroutine rmesig(x, n, xloc, xsca)