Child: [28b809] (diff)

Download this file

LibDBlasL2F77.mod    80 lines (71 with data), 3.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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,DOUBLEPRECISION,DOUBLECOMPLEX;
FROM LibDBlasLxF77 IMPORT dgemv_,zgemv_;
IMPORT LibDBlasM2;
PROCEDURE dgemv( Trans : CHAR1;
M,N : INTEGER4;
Alpha : DOUBLEPRECISION;
VAR A : ARRAY OF ARRAY OF DOUBLEPRECISION;
lda : INTEGER4;
VAR X : ARRAY OF DOUBLEPRECISION;
IncX : INTEGER4;
Beta : DOUBLEPRECISION;
VAR Y : ARRAY OF DOUBLEPRECISION;
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 : DOUBLECOMPLEX;
VAR A : ARRAY OF ARRAY OF DOUBLECOMPLEX;
lda : INTEGER4;
VAR X : ARRAY OF DOUBLECOMPLEX;
IncX : INTEGER4;
Beta : DOUBLECOMPLEX;
VAR Y : ARRAY OF DOUBLECOMPLEX;
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.