a/LibDBlas.mod b/LibDBlas.mod
...
...
34
  (*                die entsprechenden Routinen in LibDBlasM2               *)
34
  (*                die entsprechenden Routinen in LibDBlasM2               *)
35
  (* 20.06.18, MRi: Erstellen der erstern uebersetzbaren Version von        *)
35
  (* 20.06.18, MRi: Erstellen der erstern uebersetzbaren Version von        *)
36
  (*                dznrm2,zdotc,zscal,zaxpy,zswap,zdrot                    *)
36
  (*                dznrm2,zdotc,zscal,zaxpy,zswap,zdrot                    *)
37
  (* 21.06.18, MRi: Korrekturen in dznrm2 und zdotc                         *)
37
  (* 21.06.18, MRi: Korrekturen in dznrm2 und zdotc                         *)
38
  (* 11.09.18, MRi: Hinzufuegen von zcopy und zgemv (definition)            *)
38
  (* 11.09.18, MRi: Hinzufuegen von zcopy und zgemv (definition)            *)
39
  (* 30.09.18, MRi: Hinzufuegen von zdotu                                   *)
39
  (*------------------------------------------------------------------------*)
40
  (*------------------------------------------------------------------------*)
40
  (* Testroutinen                                                           *)
41
  (* Testroutinen                                                           *)
41
  (*                                                                        *)
42
  (*                                                                        *)
42
  (* - zgemm in TstCmplxMaMul                                               *)
43
  (* - zgemm in TstCmplxMaMul                                               *)
43
  (*------------------------------------------------------------------------*)
44
  (*------------------------------------------------------------------------*)
...
...
627
          INC(ix,IncX); INC(iy,IncY);
628
          INC(ix,IncX); INC(iy,IncY);
628
        END;
629
        END;
629
      END;
630
      END;
630
END zcopy;
631
END zcopy;
631
632
633
PROCEDURE zdotu(    N    : INTEGER;
634
                VAR X    : (* ARRAY OF *) CFLOAT;
635
                    IncX : INTEGER;
636
                VAR Y    : (* ARRAY OF *) CFLOAT;
637
                    IncY : INTEGER) : CFLOAT;
638
639
          CONST veclen = 4;
640
641
          VAR   dtemp     : CFLOAT;
642
                i,ix,iy,m : INTEGER;
643
                XX,YY     : PZVEKTOR;
644
BEGIN
645
      IF (N <= 0) THEN RETURN zero; END;
646
647
      XX:=SYSTEM.CAST(PZVEKTOR,SYSTEM.ADR(X));
648
      YY:=SYSTEM.CAST(PZVEKTOR,SYSTEM.ADR(Y));
649
650
      dtemp := zero;
651
      IF (IncX = 1) AND (IncY = 1) THEN
652
        (* code for both increments equal to 1 *)
653
        m := N MOD veclen;
654
        IF (m # 0) THEN
655
          FOR i:=0 TO m-1 DO (* clean-up loop *)
656
            dtemp:=dtemp + XX^[i]*YY^[i];
657
          END;
658
          IF (N < veclen) THEN RETURN dtemp; END;
659
        END;
660
        (* i := m - veclen; *)
661
        FOR i:=m TO N-1 BY veclen DO
662
          dtemp:=dtemp + XX^[i+0]*YY^[i+0] + XX^[i+1]*YY^[i+1] +
663
                         XX^[i+2]*YY^[i+2] + XX^[i+3]*YY^[i+3];
664
        END;
665
      ELSE
666
        (* code for unequal increments or equal increments not equal to 1 *)
667
        ix := 0; IF (IncX < 0) THEN ix := (1-N)*IncX; END;
668
        iy := 0; IF (IncY < 0) THEN iy := (1-N)*IncY; END;
669
        FOR i:=1 TO N DO
670
          dtemp:=dtemp + XX^[ix]*YY^[iy];
671
          INC(ix,IncX); INC(iy,IncY);
672
        END;
673
      END;
674
      RETURN dtemp;
675
END zdotu;
676
632
PROCEDURE zdotc(    N    : INTEGER;
677
PROCEDURE zdotc(    N    : INTEGER;
633
                VAR X    : (* ARRAY OF *) CFLOAT;
678
                VAR X    : (* ARRAY OF *) CFLOAT;
634
                    IncX : INTEGER;
679
                    IncX : INTEGER;
635
                VAR Y    : (* ARRAY OF *) CFLOAT;
680
                VAR Y    : (* ARRAY OF *) CFLOAT;
636
                    IncY : INTEGER) : CFLOAT;
681
                    IncY : INTEGER) : CFLOAT;