-- --
-- B o d y --
-- --
--- Copyright (C) 2006, Free Software Foundation, Inc. --
+-- Copyright (C) 2006-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
--- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit does not by itself cause the resulting executable to be --
--- covered by the GNU General Public License. This exception does not --
--- however invalidate any other reasons why the executable file might be --
--- covered by the GNU Public License. --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
begin
if Left'Length (2) /= Right'Length (1) then
raise Constraint_Error with
- "incompatible dimensions in matrix-matrix multipication";
+ "incompatible dimensions in matrix-matrix multiplication";
end if;
gemm (Trans_A => No_Trans'Access,
end if;
for J in 1 .. N loop
- if Piv (J) /= J then
- Det := -Det * LU (J, J);
- else
- Det := Det * LU (J, J);
- end if;
+ Det := (if Piv (J) /= J then -Det * LU (J, J) else Det * LU (J, J));
end loop;
return Det;
Vectors : out Real_Matrix)
is
N : constant Natural := Length (A);
- E : Real_Vector (1 .. N);
Tau : Real_Vector (1 .. N);
L_Work : Real_Vector (1 .. 1);
Info : aliased Integer;
+ E : Real_Vector (1 .. N);
+ pragma Warnings (Off, E);
+
begin
if Values'Length /= N then
raise Constraint_Error with "wrong length for output vector";
Info => Info'Access);
declare
- Work : Real_Vector (1 .. Integer'Max (Integer (L_Work (1)), 2 * N));
+ Work : Real_Vector (1 .. Integer'Max (Integer (L_Work (1)), 2 * N));
+ pragma Warnings (Off, Work);
+
Comp_Z : aliased constant Character := 'V';
begin
Values : out Real_Vector)
is
N : constant Natural := Length (A);
- B : Real_Matrix (1 .. N, 1 .. N);
- E : Real_Vector (1 .. N);
- Tau : Real_Vector (1 .. N);
L_Work : Real_Vector (1 .. 1);
Info : aliased Integer;
+ B : Real_Matrix (1 .. N, 1 .. N);
+ Tau : Real_Vector (1 .. N);
+ E : Real_Vector (1 .. N);
+ pragma Warnings (Off, B);
+ pragma Warnings (Off, Tau);
+ pragma Warnings (Off, E);
+
begin
if Values'Length /= N then
raise Constraint_Error with "wrong length for output vector";
declare
Work : Real_Vector (1 .. Integer'Min (Integer (L_Work (1)), 4 * N));
+ pragma Warnings (Off, Work);
begin
-- Reduce matrix to tridiagonal form
declare
Work : Real_Vector (1 .. Integer (L_Work (1)));
+ pragma Warnings (Off, Work);
+
begin
-- Compute inverse from LU decomposition