From: "Nasser M. Abbasi" <nma@12000.org>
Subject: Lapack Ada binding matrices/vectors issue, how to best to resolve?
Date: Wed, 11 Jul 2012 19:38:53 -0500
Date: 2012-07-11T19:38:53-05:00 [thread overview]
Message-ID: <jtl6av$frs$1@speranza.aioe.org> (raw)
The Ada lapack binding defines its own Matrix types. However, it
does not define operators (multiply, add, etc.. ) to work on these
types similar to Ada's Real Vectors and Matrices in the
Ada.Numerics.Real_Arrays package
http://www.ada-auth.org/standards/12rm/html/RM-G-3-1.html
What this means, is that one can't even multiply a number by the
matrix if the Matrix is Fortran_Real_Matrix like one can with
Real_Matrix. Here is a simple example
---------------------------
with Interfaces.Fortran; use Interfaces.Fortran;
with Ada.Numerics.Real_Arrays; use Ada.Numerics.Real_Arrays;
with labase; use labase; -- LAPACK binding
procedure foo3 is
A1 : constant Fortran_Real_Matrix(1..2,1..2):=
12.0*((12.0, 6.0),(-12.0, 6.0)); -- ERROR
A2 : constant Real_Matrix(1..2,1..2) :=
12.0*((12.0, 6.0),(-12.0, 6.0)); -- OK
begin
null;
end foo3;
--------------------
>gnatmake -gnat2012 -I/lapada/ada foo2.adb -largs -lblas
gcc -c -gnat2012 -I/lapada/ada foo2.adb
foo2.adb:24:20: expected type "Fortran_Real_Matrix" defined at labase.ads:94
foo2.adb:24:20: found type "Interfaces.Fortran.Complex"
gnatmake: "foo2.adb" compilation error
>
I tried to do conversion of the Fortran_Real_Matrix to
Real_Matrix but the compiler does not like it as it is
aggregate.
So, this means this binding as it stands is too limited to
use as is.
What would be a good way to fix this whole issue? Make a
pacakge similar to Numerics.Generic_Real_Arrays for
the Fortran_Real_Matrix so that all the operators '*','+', etc..
are available now for this Matrix type?
The Ada lapack package with's :
with Ada.Numerics.Generic_Complex_Types;
with Interfaces.Fortran; use Interfaces.Fortran;
Then it defines many types, such as
----------------------
type Fortran_Integer_Matrix is array (Fortran_Integer range <>,
Fortran_Integer range <>)
of Fortran_Integer;
pragma Convention (Fortran, Fortran_Integer_Matrix);
etc..
----------------------
But it does NOT define operators to work on these types like
the Ada package Ada.Numerics.Real_Arrays does:
-------------------------------
function "*" (Left : Real'Base; Right : Real_Matrix)
return Real_Matrix;
---------------------------
I was thinking of just copying all these functions as the above to the
Lapack package and edit things and change all the Real_Matrix to
Fortran_Real_Matrix etc.. but this seems like not the right way
to do this.
The main Lapack package is lapada/ada/labase.ads in
the tar file
ftp://ftp.cs.kuleuven.be/pub/Ada-Belgium/mirrors/gnu-ada/OLD/contrib/lapack-ada/
Any suggestion how to resolve this from experts will be great as I am
a newbie in Ada.
--Nasser
next reply other threads:[~2012-07-12 0:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-12 0:38 Nasser M. Abbasi [this message]
2012-07-12 0:45 ` Lapack Ada binding matrices/vectors issue, how to best to resolve? Nasser M. Abbasi
2012-07-12 12:35 ` Georg Bauhaus
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox