IMPLEMENTATION MODULE LibDBlasL2F77;
(*------------------------------------------------------------------------*)
(* Schnittstell zu Level 2 Blas FORTRAN77 Subroutinen. *)
(* Interface to level 2 Blas FORTRAN77 subroutines. *)
(*------------------------------------------------------------------------*)
(* Letzte Veraenderung *)
(* *)
(* 11.09.17, MRi: Erstellen der ersten Version mit dgemv, zgemv *)
(*------------------------------------------------------------------------*)
(* Offene Punkte *)
(* *)
(* - Testen *)
(*------------------------------------------------------------------------*)
(* Implementation : Michael Riedl *)
(* Licence : GNU Lesser General Public License (LGPL) *)
(*------------------------------------------------------------------------*)
(* $Id: LibDBlasL2F77.mod,v 1.1 2018/09/12 13:20:49 mriedl Exp mriedl $ *)
FROM LibDBlasL1F77 IMPORT CHAR1,INTEGER4,REAL8,COMPLEX16;
FROM LibDBlasLxF77 IMPORT dgemv_,zgemv_;
IMPORT LibDBlasM2;
PROCEDURE dgemv( Trans : CHAR1;
M,N : INTEGER4;
Alpha : REAL8;
VAR A : ARRAY OF ARRAY OF REAL8;
lda : INTEGER4;
VAR X : ARRAY OF REAL8;
IncX : INTEGER4;
Beta : REAL8;
VAR Y : ARRAY OF REAL8;
IncY : INTEGER4);
(*---------------------------------------------------------------*)
(* Aufruf der Fortran Version von BLAS2 subroutine dgemv *)
(*---------------------------------------------------------------*)
BEGIN
lda:=HIGH(A[0]) + 1;
IF (CAP(Trans) = "N") THEN
Trans := "T";
ELSIF (CAP(Trans) = "T") THEN
Trans := "N";
END;
dgemv_(Trans,N,M,Alpha,A[0][0],lda,X[0],IncX,Beta,Y[0],IncY);
END dgemv;
PROCEDURE zgemv( Trans : CHAR1;
M,N : INTEGER4;
Alpha : COMPLEX16;
VAR A : ARRAY OF ARRAY OF COMPLEX16;
lda : INTEGER4;
VAR X : ARRAY OF COMPLEX16;
IncX : INTEGER4;
Beta : COMPLEX16;
VAR Y : ARRAY OF COMPLEX16;
IncY : INTEGER4);
(*---------------------------------------------------------------*)
(* Aufruf der Fortran Version von BLAS2 subroutine dgemv *)
(*---------------------------------------------------------------*)
BEGIN
lda := HIGH(A[0]) + 1;
IF (CAP(Trans) = "N") THEN
Trans := "T";
ELSIF (CAP(Trans) = "T") THEN
Trans := "N";
ELSIF (CAP(Trans) = "C") THEN
(* Dieser Fall laesst sich nicht abbilden ohne zweimale *)
(* die Matrix A zu durchlaufen, daher wird die Modula-2 *)
(* Implementation von zgemv direkt aufgerufen *)
LibDBlasM2.zgemv(Trans,M,N,Alpha,A,lda,X,IncX,Beta,Y,IncY);
RETURN;
END;
zgemv_(Trans,N,M,Alpha,A[0][0],lda,X[0],IncX,Beta,Y[0],IncY);
END zgemv;
END LibDBlasL2F77.