diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,19 @@
+0.15.0.0
+--------
+
+- Data.Packed.Foreign (additional FFI helpers)
+
+- NFData instance of Matrix
+
+- Unidimensional root finding
+
+- In Numeric.LinearAlgebra.Util:
+    pairwise2D, rowOuters, null1, null1sym, size, unitary, mt, (¦), (?), (¿)
+
+- diagBlock
+
+- meanCov moved to Container
+
 0.14.1.0
 --------
 
diff --git a/Config.hs b/Config.hs
--- a/Config.hs
+++ b/Config.hs
@@ -20,6 +20,7 @@
 import System.Exit
 import System.Environment
 import System.Directory(createDirectoryIfMissing)
+import System.FilePath((</>))
 import Data.List(isPrefixOf, intercalate)
 import Distribution.Simple.LocalBuildInfo
 import Distribution.Simple.Configure
@@ -38,61 +39,60 @@
        , "blas gslcblas gfortran"        -- Arch Linux with normal blas and lapack
        ]
 
+-- location of test program
+testProgLoc bInfo = buildDir bInfo </> "dummy.c"
+testOutLoc bInfo = buildDir bInfo </> "dummy"
+
+-- write test program
+writeTestProg bInfo contents = writeFile (testProgLoc bInfo) contents
+
+-- compile, discarding error messages
+compile cmd = do
+    let processRecord = (shell $ join cmd) { std_out = CreatePipe
+                                           , std_err = CreatePipe }
+    ( _, _, _, h) <- createProcess processRecord
+    waitForProcess h
+
+-- command to compile the test program
+compileCmd bInfo buildInfo = [ "gcc "
+                             , (join $ ccOptions buildInfo)  
+                             , (join $ cppOptions buildInfo) 
+                             , (join $ map ("-I"++) $ includeDirs buildInfo) 
+                             , testProgLoc bInfo
+                             , "-o"
+                             , testOutLoc bInfo 
+                             , (join $ map ("-L"++) $ extraLibDirs buildInfo) 
+                             ]
+ 
 -- compile a simple program with symbols from GSL and LAPACK with the given libs
-testprog bInfo buildInfo libs fmks =
-    "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){dgemm_(); zgesvd_(); gsl_sf_gamma(5);}\""
-                     ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
-                     ++ (join $ ccOptions buildInfo) ++ " "
-                     ++ (join $ cppOptions buildInfo) ++ " "
-                     ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
-                     ++ (buildDir bInfo) ++ "/dummy.c -o "
-                     ++ (buildDir bInfo) ++ "/dummy "
-                     ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " "
-                     ++ (prepend "-l" $ libs) ++ " "
-                     ++ (prepend "-framework " fmks) ++ " > /dev/null 2> /dev/null"
+testprog bInfo buildInfo libs fmks = do
+    writeTestProg bInfo "#include <gsl/gsl_sf_gamma.h>\nint main(){dgemm_(); zgesvd_(); gsl_sf_gamma(5);}"
+    compile $ compileCmd bInfo 
+                         buildInfo 
+                            ++ [ (prepend "-l" $ libs)
+                               , (prepend "-framework " fmks) ] 
 
 join = intercalate " "
 prepend x = unwords . map (x++) . words
 
-check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` system (testprog bInfo buildInfo libs fmks)
+check bInfo buildInfo libs fmks = (ExitSuccess ==) `fmap` testprog bInfo buildInfo libs fmks
 
 -- simple test for GSL
-gsl bInfo buildInfo = "echo \"#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}\""
-           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc "
-           ++ (join $ ccOptions buildInfo) ++ " "
-           ++ (join $ cppOptions buildInfo) ++ " "
-           ++ (join $ map ("-I"++) $ includeDirs buildInfo) ++ " " 
-           ++ (buildDir bInfo) ++ "/dummy.c -o "
-           ++ (buildDir bInfo) ++ "/dummy "
-           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
-           ++ " > /dev/null 2> /dev/null"
+gsl bInfo buildInfo = do
+    writeTestProg bInfo "#include <gsl/gsl_sf_gamma.h>\nint main(){gsl_sf_gamma(5);}"
+    compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
 
 -- test for gsl >= 1.12
-gsl112 bInfo buildInfo =
-    "echo \"#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}\""
-           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " 
-           ++ (buildDir bInfo) ++ "/dummy.c "
-           ++ (join $ ccOptions buildInfo) ++ " "
-           ++ (join $ cppOptions buildInfo) ++ " "
-           ++ (join $ map ("-I"++) $ includeDirs buildInfo)
-           ++" -o " ++ (buildDir bInfo) ++ "/dummy "
-           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
-           ++ " > /dev/null 2> /dev/null"
+gsl112 bInfo buildInfo = do
+    writeTestProg bInfo "#include <gsl/gsl_sf_exp.h>\nint main(){gsl_sf_exprel_n_CF_e(1,1,0);}"
+    compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
 
 -- test for odeiv2
-gslodeiv2 bInfo buildInfo =
-    "echo \"#include <gsl/gsl_odeiv2.h>\nint main(){return 0;}\""
-           ++" > " ++ (buildDir bInfo) ++ "/dummy.c; gcc " 
-           ++ (buildDir bInfo) ++ "/dummy.c "
-           ++ (join $ ccOptions buildInfo) ++ " "
-           ++ (join $ cppOptions buildInfo) ++ " "
-           ++ (join $ map ("-I"++) $ includeDirs buildInfo)
-           ++" -o " ++ (buildDir bInfo) ++ "/dummy "
-           ++ (join $ map ("-L"++) $ extraLibDirs buildInfo) ++ " -lgsl -lgslcblas"
-           ++ " > /dev/null 2> /dev/null"
-
+gslodeiv2 bInfo buildInfo = do
+    writeTestProg bInfo "#include <gsl/gsl_odeiv2.h>\nint main(){return 0;}"
+    compile $ compileCmd bInfo buildInfo ++ ["-lgsl", "-lgslcblas"]
 
-checkCommand c = (ExitSuccess ==) `fmap` system c
+checkCommand c = (ExitSuccess ==) `fmap` c
 
 -- test different configurations until the first one works
 try _ _ _ _ [] = return Nothing
diff --git a/THANKS.md b/THANKS.md
--- a/THANKS.md
+++ b/THANKS.md
@@ -107,11 +107,22 @@
 
 - Daniel Fischer reported some Haddock markup errors.
 
-- Danny Chan added support for integration over infinite intervals.
+- Danny Chan added support for integration over infinite intervals, and fixed
+  Configure.hs using platform independent functions.
 
 - Clark Gaebel removed superfluous thread safety.
 
 - Jeffrey Burdges reported a glpk link problem on OS/X
 
 - Jian Zhang reported the Windows installation problem due to new ODE interface.
+
+- Mihaly Barasz and Ben Gamari fixed mapMatrix* and mapMatrixWithIndex
+
+- Takano Akio fixed off-by-one errors in gsl-aux.c producing segfaults.
+
+- Alex Lang implemented uniRoot and uniRootJ for one-dimensional root-finding.
+
+- Mike Ledger contributed alternative FFI helpers for matrix interoperation with C
+
+- Stephen J. Barr suggested flipping argument order in the double integral example
 
diff --git a/examples/integrate.hs b/examples/integrate.hs
--- a/examples/integrate.hs
+++ b/examples/integrate.hs
@@ -4,14 +4,21 @@
 quad f a b = fst $ integrateQAGS 1E-9 100 f a b  
 
 -- A multiple integral can be easily defined using partial application
-quad2 f a b g1 g2 = quad h a b
-    where h x = quad (f x) (g1 x) (g2 x)
+quad2 f y1 y2 g1 g2 = quad h y1 y2
+  where
+    h y = quad (flip f y) (g1 y) (g2 y)
 
 volSphere r = 8 * quad2 (\x y -> sqrt (r*r-x*x-y*y)) 
                         0 r (const 0) (\x->sqrt (r*r-x*x))
 
+-- wikipedia example
+exw = quad2 f 7 10 (const 11) (const 14)
+  where
+    f x y = x**2 + 4*y
+
 main = do
     print $ quad (\x -> 4/(x^2+1)) 0 1
     print pi
     print $ volSphere 2.5
     print $ 4/3*pi*2.5**3
+    print $ exw
diff --git a/hmatrix.cabal b/hmatrix.cabal
--- a/hmatrix.cabal
+++ b/hmatrix.cabal
@@ -1,5 +1,5 @@
 Name:               hmatrix
-Version:            0.14.1.0
+Version:            0.15.0.0
 License:            GPL
 License-file:       LICENSE
 Author:             Alberto Ruiz
@@ -21,7 +21,7 @@
                     .
                     - "Numeric.LinearAlgebra": everything + instances of standard Haskell numeric classes
 Category:           Math
-tested-with:        GHC ==7.4
+tested-with:        GHC ==7.6
 
 cabal-version:      >=1.8
 
@@ -55,7 +55,6 @@
                     examples/multiply.hs
 
 extra-source-files: lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h,
-                    lib/Numeric/LinearAlgebra/LAPACK/clapack.h
                     lib/Numeric/GSL/gsl-ode.c
 
 flag dd
@@ -89,7 +88,8 @@
                         storable-complex,
                         process, random,
                         vector >= 0.8,
-                        binary
+                        binary,
+                        deepseq
 
     Extensions:         ForeignFunctionInterface,
                         CPP
@@ -98,6 +98,7 @@
     Exposed-modules:    Data.Packed,
                         Data.Packed.Vector,
                         Data.Packed.Matrix,
+                        Data.Packed.Foreign,
                         Numeric.GSL.Differentiation,
                         Numeric.GSL.Integration,
                         Numeric.GSL.Fourier,
@@ -134,7 +135,7 @@
     C-sources:          lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c,
                         lib/Numeric/GSL/gsl-aux.c
 
-    cpp-options:        -DVECTOR -DBINARY
+    cpp-options:        -DBINARY
 
  -- ghc-prof-options:   -auto
 
diff --git a/lib/Data/Packed/Foreign.hs b/lib/Data/Packed/Foreign.hs
new file mode 100644
--- /dev/null
+++ b/lib/Data/Packed/Foreign.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE MagicHash, UnboxedTuples #-}
+-- | FFI and hmatrix helpers.
+--
+-- Sample usage, to upload a perspective matrix to a shader.
+--
+-- @ glUniformMatrix4fv 0 1 (fromIntegral gl_TRUE) \`appMatrix\` perspective 0.01 100 (pi\/2) (4\/3) 
+-- @
+--
+module Data.Packed.Foreign 
+    ( app
+    , appVector, appVectorLen
+    , appMatrix, appMatrixLen, appMatrixRaw, appMatrixRawLen
+    , unsafeMatrixToVector, unsafeMatrixToForeignPtr
+    ) where
+import Data.Packed.Internal
+import qualified Data.Vector.Storable as S
+import Foreign (Ptr, ForeignPtr, Storable)
+import Foreign.C.Types (CInt)
+import GHC.Base (IO(..), realWorld#)
+
+{-# INLINE unsafeInlinePerformIO #-}
+-- | If we use unsafePerformIO, it may not get inlined, so in a function that returns IO (which are all safe uses of app* in this module), there would be
+-- unecessary calls to unsafePerformIO or its internals.
+unsafeInlinePerformIO :: IO a -> a
+unsafeInlinePerformIO (IO f) = case f realWorld# of
+    (# _, x #) -> x
+
+{-# INLINE app #-}
+-- | Only useful since it is left associated with a precedence of 1, unlike 'Prelude.$', which is right associative.
+-- e.g.
+--
+-- @
+-- someFunction
+--     \`appMatrixLen\` m
+--     \`appVectorLen\` v
+--     \`app\` other
+--     \`app\` arguments
+--     \`app\` go here
+-- @
+--
+-- One could also write:
+--
+-- @
+-- (someFunction 
+--     \`appMatrixLen\` m
+--     \`appVectorLen\` v) 
+--     other 
+--     arguments 
+--     (go here)
+-- @
+--
+app :: (a -> b) -> a -> b
+app f = f
+
+{-# INLINE appVector #-}
+appVector :: Storable a => (Ptr a -> b) -> Vector a -> b
+appVector f x = unsafeInlinePerformIO (S.unsafeWith x (return . f))
+
+{-# INLINE appVectorLen #-}
+appVectorLen :: Storable a => (CInt -> Ptr a -> b) -> Vector a -> b
+appVectorLen f x = unsafeInlinePerformIO (S.unsafeWith x (return . f (fromIntegral (S.length x))))
+
+{-# INLINE appMatrix #-}
+appMatrix :: Element a => (Ptr a -> b) -> Matrix a -> b
+appMatrix f x = unsafeInlinePerformIO (S.unsafeWith (flatten x) (return . f))
+
+{-# INLINE appMatrixLen #-}
+appMatrixLen :: Element a => (CInt -> CInt -> Ptr a -> b) -> Matrix a -> b
+appMatrixLen f x = unsafeInlinePerformIO (S.unsafeWith (flatten x) (return . f r c))
+  where
+    r = fromIntegral (rows x)
+    c = fromIntegral (cols x)
+
+{-# INLINE appMatrixRaw #-}
+appMatrixRaw :: Storable a => (Ptr a -> b) -> Matrix a -> b
+appMatrixRaw f x = unsafeInlinePerformIO (S.unsafeWith (xdat x) (return . f))
+
+{-# INLINE appMatrixRawLen #-}
+appMatrixRawLen :: Element a => (CInt -> CInt -> Ptr a -> b) -> Matrix a -> b
+appMatrixRawLen f x = unsafeInlinePerformIO (S.unsafeWith (xdat x) (return . f r c))
+  where
+    r = fromIntegral (rows x)
+    c = fromIntegral (cols x)
+
+infixl 1 `app`
+infixl 1 `appVector`
+infixl 1 `appMatrix`
+infixl 1 `appMatrixRaw`
+
+{-# INLINE unsafeMatrixToVector #-}
+-- | This will disregard the order of the matrix, and simply return it as-is. 
+-- If the order of the matrix is RowMajor, this function is identical to 'flatten'.
+unsafeMatrixToVector :: Matrix a -> Vector a
+unsafeMatrixToVector = xdat
+
+{-# INLINE unsafeMatrixToForeignPtr #-}
+unsafeMatrixToForeignPtr :: Storable a => Matrix a -> (ForeignPtr a, Int)
+unsafeMatrixToForeignPtr m = S.unsafeToForeignPtr0 (xdat m)
+
diff --git a/lib/Data/Packed/Internal/Matrix.hs b/lib/Data/Packed/Internal/Matrix.hs
--- a/lib/Data/Packed/Internal/Matrix.hs
+++ b/lib/Data/Packed/Internal/Matrix.hs
@@ -47,6 +47,7 @@
 import Foreign.C.Types
 import Foreign.C.String(newCString)
 import System.IO.Unsafe(unsafePerformIO)
+import Control.DeepSeq
 
 -----------------------------------------------------------------
 
@@ -131,12 +132,10 @@
         let m g = do
             g (fi (rows a)) (fi (cols a)) p
         f m
-
-{- | Creates a vector by concatenation of rows
-
-@\> flatten ('ident' 3)
-9 |> [1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0]@
--}
+-- | Creates a vector by concatenation of rows. If the matrix is ColumnMajor, this operation requires a transpose.
+--
+-- @\> flatten ('ident' 3)
+-- 9 |> [1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0]@
 flatten :: Element t => Matrix t -> Vector t
 flatten = xdat . cmat
 
@@ -458,4 +457,14 @@
 size m = (rows m, cols m)
 
 shSize m = "(" ++ show (rows m) ++"><"++ show (cols m)++")"
+
+----------------------------------------------------------------------
+
+instance (Storable t, NFData t) => NFData (Matrix t)
+  where
+    rnf m | d > 0     = rnf (v @> 0)
+          | otherwise = ()
+      where
+        d = dim v
+        v = xdat m
 
diff --git a/lib/Data/Packed/Internal/Vector.hs b/lib/Data/Packed/Internal/Vector.hs
--- a/lib/Data/Packed/Internal/Vector.hs
+++ b/lib/Data/Packed/Internal/Vector.hs
@@ -55,49 +55,18 @@
 import GHC.IOBase hiding (liftIO)
 #endif
 
-#ifdef VECTOR
 import qualified Data.Vector.Storable as Vector
 import Data.Vector.Storable(Vector,
                             unsafeToForeignPtr,
                             unsafeFromForeignPtr,
                             unsafeWith)
-#else
-import Foreign.ForeignPtr(withForeignPtr)
-#endif
 
-#ifdef VECTOR
 
 -- | Number of elements
 dim :: (Storable t) => Vector t -> Int
 dim = Vector.length
 
-#else
 
--- | One-dimensional array of objects stored in a contiguous memory block.
-data Vector t =
-    V { ioff :: {-# UNPACK #-} !Int              -- ^ offset of first element
-      , idim :: {-# UNPACK #-} !Int              -- ^ number of elements
-      , fptr :: {-# UNPACK #-} !(ForeignPtr t)   -- ^ foreign pointer to the memory block
-      }
-
-unsafeToForeignPtr :: Storable a => Vector a -> (ForeignPtr a, Int, Int)
-unsafeToForeignPtr v = (fptr v, ioff v, idim v)
-
--- | Same convention as in Roman Leshchinskiy's vector package.
-unsafeFromForeignPtr :: Storable a => ForeignPtr a -> Int -> Int -> Vector a
-unsafeFromForeignPtr fp i n | n > 0 = V {ioff = i, idim = n, fptr = fp}
-                            | otherwise = error "unsafeFromForeignPtr with dim < 1"
-
-unsafeWith (V i _ fp) m = withForeignPtr fp $ \p -> m (p `advancePtr` i)
-{-# INLINE unsafeWith #-}
-
--- | Number of elements
-dim :: (Storable t) => Vector t -> Int
-dim = idim
-
-#endif
-
-
 -- C-Haskell vector adapter
 -- vec :: Adapt (CInt -> Ptr t -> r) (Vector t) r
 vec :: (Storable t) => Vector t -> (((CInt -> Ptr t -> t1) -> t1) -> IO b) -> IO b
@@ -204,36 +173,8 @@
                         -> Int       -- ^ number of elements to extract
                         -> Vector t  -- ^ source
                         -> Vector t  -- ^ result
-
-#ifdef VECTOR
-
 subVector = Vector.slice
 
-{-
-subVector k l v
-    | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
-    | otherwise = unsafeFromForeignPtr fp (i+k) l
-  where
-    (fp, i, n) = unsafeToForeignPtr v
--}
-
-#else
-
-subVector k l v@V{idim = n, ioff = i}
-    | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
-    | otherwise = v {idim = l, ioff = i+k}
-
-{-
-subVectorCopy k l (v@V {idim=n})
-    | k<0 || k >= n || k+l > n || l < 0 = error "subVector out of range"
-    | otherwise = unsafePerformIO $ do
-        r <- createVector l
-        let f _ s _ d = copyArray d (advancePtr s k) l >> return 0
-        app2 f vec v vec r "subVector"
-        return r
--}
-
-#endif
 
 {- | Reads a vector position:
 
diff --git a/lib/Data/Packed/Matrix.hs b/lib/Data/Packed/Matrix.hs
--- a/lib/Data/Packed/Matrix.hs
+++ b/lib/Data/Packed/Matrix.hs
@@ -30,7 +30,7 @@
     (@@>),
     asRow, asColumn,
     fromRows, toRows, fromColumns, toColumns,
-    fromBlocks, toBlocks, toBlocksEvery,
+    fromBlocks, diagBlock, toBlocks, toBlocksEvery,
     repmat,
     flipud, fliprl,
     subMatrix, takeRows, dropRows, takeColumns, dropColumns,
@@ -46,7 +46,7 @@
 
 import Data.List(transpose,intersperse)
 import Foreign.Storable(Storable)
-import Control.Arrow((***))
+import Control.Monad(liftM)
 
 -------------------------------------------------------------------
 
@@ -156,9 +156,21 @@
         x = m@@>(0,0)
     g _ _ = error "inconsistent dimensions in fromBlocks"
 
------------------------------------------------------------
 
--- | Reverse rows 
+--------------------------------------------------------------------------------
+
+-- | create a block diagonal matrix
+diagBlock :: (Element t, Num t) => [Matrix t] -> Matrix t
+diagBlock ms = fromBlocks $ zipWith f ms [0..]
+  where
+    f m k = take n $ replicate k z ++ m : repeat z
+    n = length ms
+    z = (1><1) [0]
+
+--------------------------------------------------------------------------------
+
+
+-- | Reverse rows
 flipud :: Element t => Matrix t -> Matrix t
 flipud m = fromRows . reverse . toRows $ m
 
@@ -273,7 +285,7 @@
 buildMatrix :: Element a => Int -> Int -> ((Int, Int) -> a) -> Matrix a
 buildMatrix rc cc f =
     fromLists $ map (map f)
-    	$ map (\ ri -> map (\ ci -> (ri, ci)) [0 .. (cc - 1)]) [0 .. (rc - 1)]
+        $ map (\ ri -> map (\ ci -> (ri, ci)) [0 .. (cc - 1)]) [0 .. (rc - 1)]
 
 -----------------------------------------------------
 
@@ -284,7 +296,7 @@
           c = c1-c0+1
 
 
--- | rearranges the rows of a matrix according to the order given in a list of integers. 
+-- | rearranges the rows of a matrix according to the order given in a list of integers.
 extractRows :: Element t => [Int] -> Matrix t -> Matrix t
 extractRows l m = fromRows $ extract (toRows m) l
     where extract l' is = [l'!!i |i<-is]
@@ -352,9 +364,13 @@
 
 -------------------------------------------------------------------
 
-mk c g = \k v -> g ((fromIntegral *** fromIntegral) (divMod k c)) v 
+-- Given a column number and a function taking matrix indexes, returns
+-- a function which takes vector indexes (that can be used on the
+-- flattened matrix).
+mk :: Int -> ((Int, Int) -> t) -> (Int -> t)
+mk c g = \k -> g (divMod k c)
 
-{- | 
+{- |
 
 @ghci> mapMatrixWithIndexM_ (\\(i,j) v -> printf \"m[%.0f,%.0f] = %.f\\n\" i j v :: IO()) ((2><3)[1 :: Double ..])
 m[0,0] = 1
@@ -365,10 +381,9 @@
 m[1,2] = 6@
 -}
 mapMatrixWithIndexM_
-  :: (Element a, Num a,
-      Functor f, Monad f) =>
-      ((a, a) -> a -> f ()) -> Matrix a -> f ()
-mapMatrixWithIndexM_ g m = mapVectorWithIndexM_ (mk c g) . flatten $ m 
+  :: (Element a, Num a, Monad m) =>
+      ((Int, Int) -> a -> m ()) -> Matrix a -> m ()
+mapMatrixWithIndexM_ g m = mapVectorWithIndexM_ (mk c g) . flatten $ m
   where
     c = cols m
 
@@ -381,11 +396,9 @@
  ,  20.0,  21.0, 122.0 ]@
 -}
 mapMatrixWithIndexM
-  :: (Foreign.Storable.Storable t, 
-      Element a, Num a,
-      Functor f, Monad f) =>
-      ((a, a) -> a -> f t) -> Matrix a -> f (Matrix t)
-mapMatrixWithIndexM g m = fmap (reshape c) . mapVectorWithIndexM (mk c g) . flatten $ m 
+  :: (Element a, Storable b, Monad m) =>
+      ((Int, Int) -> a -> m b) -> Matrix a -> m (Matrix b)
+mapMatrixWithIndexM g m = liftM (reshape c) . mapVectorWithIndexM (mk c g) . flatten $ m 
     where
       c = cols m
 
@@ -396,11 +409,12 @@
  ,  10.0, 111.0,  12.0
  ,  20.0,  21.0, 122.0 ]@
  -}
-mapMatrixWithIndex :: (Foreign.Storable.Storable t, 
-      Element a, Num a) =>
-      ((a, a) -> a -> t) -> Matrix a -> Matrix t
-mapMatrixWithIndex g = head . mapMatrixWithIndexM (\a b -> [g a b])
+mapMatrixWithIndex
+  :: (Element a, Storable b) =>
+      ((Int, Int) -> a -> b) -> Matrix a -> Matrix b
+mapMatrixWithIndex g m = reshape c . mapVectorWithIndex (mk c g) . flatten $ m
+    where
+      c = cols m
 
 mapMatrix :: (Storable a, Storable b) => (a -> b) -> Matrix a -> Matrix b
 mapMatrix f = liftMatrix (mapVector f)
-
diff --git a/lib/Data/Packed/Random.hs b/lib/Data/Packed/Random.hs
--- a/lib/Data/Packed/Random.hs
+++ b/lib/Data/Packed/Random.hs
@@ -12,11 +12,11 @@
 -----------------------------------------------------------------------------
 
 module Data.Packed.Random (
+    Seed,
     RandDist(..),
     randomVector,
     gaussianSample,
-    uniformSample,
-    meanCov,
+    uniformSample
 ) where
 
 import Numeric.GSL.Vector
@@ -25,9 +25,11 @@
 import Numeric.LinearAlgebra.Algorithms
 
 
+type Seed = Int
+
 -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate
 -- Gaussian distribution.
-gaussianSample :: Int -- ^ seed
+gaussianSample :: Seed
                -> Int -- ^ number of rows
                -> Vector Double -- ^ mean vector
                -> Matrix Double -- ^ covariance matrix
@@ -40,7 +42,7 @@
 
 -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate
 -- uniform distribution.
-uniformSample :: Int -- ^ seed
+uniformSample :: Seed
                -> Int -- ^ number of rows
                -> [(Double,Double)] -- ^ ranges for each column
                -> Matrix Double -- ^ result
@@ -53,14 +55,3 @@
     am = konst 1 n `outer` a
     m = fromColumns (zipWith scale cs dat) `add` am
 
------------- utilities -------------------------------
-
--- | Compute mean vector and covariance matrix of the rows of a matrix.
-meanCov :: Matrix Double -> (Vector Double, Matrix Double)
-meanCov x = (med,cov) where
-    r    = rows x
-    k    = 1 / fromIntegral r
-    med  = konst k r `vXm` x
-    meds = konst 1 r `outer` med
-    xc   = x `sub` meds
-    cov  = scale (recip (fromIntegral (r-1))) (trans xc `mXm` xc)
diff --git a/lib/Numeric/Container.hs b/lib/Numeric/Container.hs
--- a/lib/Numeric/Container.hs
+++ b/lib/Numeric/Container.hs
@@ -132,3 +132,14 @@
     (<\>) = linearSolveSVD
 
 --------------------------------------------------------
+
+-- | Compute mean vector and covariance matrix of the rows of a matrix.
+meanCov :: Matrix Double -> (Vector Double, Matrix Double)
+meanCov x = (med,cov) where
+    r    = rows x
+    k    = 1 / fromIntegral r
+    med  = konst k r `vXm` x
+    meds = konst 1 r `outer` med
+    xc   = x `sub` meds
+    cov  = scale (recip (fromIntegral (r-1))) (trans xc `mXm` xc)
+
diff --git a/lib/Numeric/GSL/Internal.hs b/lib/Numeric/GSL/Internal.hs
--- a/lib/Numeric/GSL/Internal.hs
+++ b/lib/Numeric/GSL/Internal.hs
@@ -36,6 +36,9 @@
 foreign import ccall safe "wrapper"
     mkDoubleVecVecfun :: (Double -> TVV) -> IO (FunPtr (Double -> TVV))
 
+foreign import ccall safe "wrapper"
+    mkDoublefun :: (Double -> Double) -> IO (FunPtr (Double -> Double))
+
 aux_vTov :: (Vector Double -> Vector Double) -> TVV
 aux_vTov f n p nr r = g where
     v = f x
diff --git a/lib/Numeric/GSL/Root.hs b/lib/Numeric/GSL/Root.hs
--- a/lib/Numeric/GSL/Root.hs
+++ b/lib/Numeric/GSL/Root.hs
@@ -45,6 +45,8 @@
 -----------------------------------------------------------------------------
 
 module Numeric.GSL.Root (
+    uniRoot, UniRootMethod(..),
+    uniRootJ, UniRootMethodJ(..),
     root, RootMethod(..),
     rootJ, RootMethodJ(..),
 ) where
@@ -58,6 +60,68 @@
 
 -------------------------------------------------------------------------
 
+data UniRootMethod = Bisection
+                   | FalsePos
+                   | Brent
+                   deriving (Enum, Eq, Show, Bounded)
+
+uniRoot :: UniRootMethod
+        -> Double
+        -> Int
+        -> (Double -> Double)
+        -> Double
+        -> Double
+        -> (Double, Matrix Double)
+uniRoot method epsrel maxit fun xl xu = uniRootGen (fi (fromEnum method)) fun xl xu epsrel maxit
+
+uniRootGen m f xl xu epsrel maxit = unsafePerformIO $ do
+    fp <- mkDoublefun f
+    rawpath <- createMIO maxit 4
+                         (c_root m fp epsrel (fi maxit) xl xu)
+                         "root"
+    let it = round (rawpath @@> (maxit-1,0))
+        path = takeRows it rawpath
+        [sol] = toLists $ dropRows (it-1) path
+    freeHaskellFunPtr fp
+    return (sol !! 1, path)
+
+foreign import ccall safe "root"
+    c_root:: CInt -> FunPtr (Double -> Double) -> Double -> CInt -> Double -> Double -> TM
+
+-------------------------------------------------------------------------
+data UniRootMethodJ = UNewton
+                    | Secant
+                    | Steffenson
+                    deriving (Enum, Eq, Show, Bounded)
+
+uniRootJ :: UniRootMethodJ
+        -> Double
+        -> Int
+        -> (Double -> Double)
+        -> (Double -> Double)
+        -> Double
+        -> (Double, Matrix Double)
+uniRootJ method epsrel maxit fun dfun x = uniRootJGen (fi (fromEnum method)) fun
+    dfun x epsrel maxit
+
+uniRootJGen m f df x epsrel maxit = unsafePerformIO $ do
+    fp <- mkDoublefun f
+    dfp <- mkDoublefun df
+    rawpath <- createMIO maxit 2
+                         (c_rootj m fp dfp epsrel (fi maxit) x)
+                         "rootj"
+    let it = round (rawpath @@> (maxit-1,0))
+        path = takeRows it rawpath
+        [sol] = toLists $ dropRows (it-1) path
+    freeHaskellFunPtr fp
+    return (sol !! 1, path)
+
+foreign import ccall safe "rootj"
+    c_rootj :: CInt -> FunPtr (Double -> Double) -> FunPtr (Double -> Double)
+            -> Double -> CInt -> Double -> TM
+
+-------------------------------------------------------------------------
+
 data RootMethod = Hybrids
                 | Hybrid
                 | DNewton
@@ -82,8 +146,8 @@
     fp <- mkVecVecfun (aux_vTov (checkdim1 n . fromList . f . toList))
     rawpath <- vec xiv $ \xiv' ->
                    createMIO maxit (2*n+1)
-                         (c_root m fp epsabs (fi maxit) // xiv')
-                         "root"
+                         (c_multiroot m fp epsabs (fi maxit) // xiv')
+                         "multiroot"
     let it = round (rawpath @@> (maxit-1,0))
         path = takeRows it rawpath
         [sol] = toLists $ dropRows (it-1) path
@@ -91,8 +155,8 @@
     return (take n $ drop 1 sol, path)
 
 
-foreign import ccall safe "root"
-    c_root:: CInt -> FunPtr TVV -> Double -> CInt -> TVM
+foreign import ccall safe "multiroot"
+    c_multiroot:: CInt -> FunPtr TVV -> Double -> CInt -> TVM
 
 -------------------------------------------------------------------------
 
@@ -120,8 +184,8 @@
     jp <- mkVecMatfun (aux_vTom (checkdim2 n . fromLists . jac . toList))
     rawpath <- vec xiv $ \xiv' ->
                    createMIO maxit (2*n+1)
-                         (c_rootj m fp jp epsabs (fi maxit) // xiv')
-                         "root"
+                         (c_multirootj m fp jp epsabs (fi maxit) // xiv')
+                         "multiroot"
     let it = round (rawpath @@> (maxit-1,0))
         path = takeRows it rawpath
         [sol] = toLists $ dropRows (it-1) path
@@ -129,9 +193,8 @@
     freeHaskellFunPtr jp
     return (take n $ drop 1 sol, path)
 
-
-foreign import ccall safe "rootj"
-    c_rootj:: CInt -> FunPtr TVV -> FunPtr TVM -> Double -> CInt -> TVM
+foreign import ccall safe "multirootj"
+    c_multirootj:: CInt -> FunPtr TVV -> FunPtr TVM -> Double -> CInt -> TVM
 
 -------------------------------------------------------
 
diff --git a/lib/Numeric/GSL/gsl-aux.c b/lib/Numeric/GSL/gsl-aux.c
--- a/lib/Numeric/GSL/gsl-aux.c
+++ b/lib/Numeric/GSL/gsl-aux.c
@@ -32,6 +32,7 @@
 #include <gsl/gsl_complex_math.h>
 #include <gsl/gsl_rng.h>
 #include <gsl/gsl_randist.h>
+#include <gsl/gsl_roots.h>
 #include <gsl/gsl_multifit_nlin.h>
 #include <string.h>
 #include <stdio.h>
@@ -937,7 +938,7 @@
         iter++;
         if (status) break;
         status = gsl_multimin_test_size (size, tolsize);
-    } while (status == GSL_CONTINUE && iter <= maxit);
+    } while (status == GSL_CONTINUE && iter < maxit);
     int i,j;
     for (i=iter; i<solr; i++) {
         solp[i*solc+0] = iter;
@@ -1033,7 +1034,7 @@
         iter++;
         if (status) break;
         status = gsl_multimin_test_gradient (s->gradient, tolgrad);
-    } while (status == GSL_CONTINUE && iter <= maxit);
+    } while (status == GSL_CONTINUE && iter < maxit);
     int i,j;
     for (i=iter; i<solr; i++) {
         solp[i*solc+0] = iter;
@@ -1047,9 +1048,144 @@
 
 //---------------------------------------------------------------
 
+double only_f_aux_root(double x, void *pars) {
+    double (*f)(double) = (double (*)(double)) pars;
+    return f(x);
+}
+
+int root(int method, double f(double),
+         double epsrel, int maxit,
+         double xl, double xu, RMAT(sol)) {
+    REQUIRES(solr == maxit && solc == 4,BAD_SIZE);
+    DEBUGMSG("root_only_f");
+    gsl_function my_func;
+    // extract function from pars
+    my_func.function = only_f_aux_root;
+    my_func.params = f;
+    size_t iter = 0;
+    int status;
+    const gsl_root_fsolver_type *T;
+    gsl_root_fsolver *s;
+    // Starting point
+    switch(method) {
+        case 0 : {T = gsl_root_fsolver_bisection; printf("7\n"); break; }
+        case 1 : {T = gsl_root_fsolver_falsepos; break; }
+        case 2 : {T = gsl_root_fsolver_brent; break; }
+        default: ERROR(BAD_CODE);
+    }
+    s = gsl_root_fsolver_alloc (T);
+    gsl_root_fsolver_set (s, &my_func, xl, xu);
+    do {
+           double best, current_lo, current_hi;
+           status = gsl_root_fsolver_iterate (s);
+           best = gsl_root_fsolver_root (s);
+           current_lo = gsl_root_fsolver_x_lower (s);
+           current_hi = gsl_root_fsolver_x_upper (s);
+           solp[iter*solc] = iter + 1;
+           solp[iter*solc+1] = best;
+           solp[iter*solc+2] = current_lo;
+           solp[iter*solc+3] = current_hi;
+           iter++;
+           if (status)   /* check if solver is stuck */
+             break;
+
+           status =
+               gsl_root_test_interval (current_lo, current_hi, 0, epsrel);
+        }
+        while (status == GSL_CONTINUE && iter < maxit);
+    int i;
+    for (i=iter; i<solr; i++) {
+        solp[i*solc+0] = iter;
+        solp[i*solc+1]=0.;
+        solp[i*solc+2]=0.;
+        solp[i*solc+3]=0.;
+    }
+    gsl_root_fsolver_free(s);
+    OK
+}
+
+typedef struct {
+    double (*f)(double);
+    double (*jf)(double);
+} uniTfjf;
+
+double f_aux_uni(double x, void *pars) {
+    uniTfjf * fjf = ((uniTfjf*) pars);
+    return (fjf->f)(x);
+}
+
+double jf_aux_uni(double x, void * pars) {
+    uniTfjf * fjf = ((uniTfjf*) pars);
+    return (fjf->jf)(x);
+}
+
+void fjf_aux_uni(double x, void * pars, double * f, double * g) {
+    *f = f_aux_uni(x,pars);
+    *g = jf_aux_uni(x,pars);
+}
+
+int rootj(int method, double f(double),
+          double df(double),
+         double epsrel, int maxit,
+         double x, RMAT(sol)) {
+    REQUIRES(solr == maxit && solc == 2,BAD_SIZE);
+    DEBUGMSG("root_fjf");
+    gsl_function_fdf my_func;
+    // extract function from pars
+    my_func.f = f_aux_uni;
+    my_func.df = jf_aux_uni;
+    my_func.fdf = fjf_aux_uni;
+    uniTfjf stfjf;
+    stfjf.f = f;
+    stfjf.jf = df;
+    my_func.params = &stfjf;
+    size_t iter = 0;
+    int status;
+    const gsl_root_fdfsolver_type *T;
+    gsl_root_fdfsolver *s;
+    // Starting point
+    switch(method) {
+        case 0 : {T = gsl_root_fdfsolver_newton;; break; }
+        case 1 : {T = gsl_root_fdfsolver_secant; break; }
+        case 2 : {T = gsl_root_fdfsolver_steffenson; break; }
+        default: ERROR(BAD_CODE);
+    }
+    s = gsl_root_fdfsolver_alloc (T);
+
+    gsl_root_fdfsolver_set (s, &my_func, x);
+
+    do {
+           double x0;
+           status = gsl_root_fdfsolver_iterate (s);
+           x0 = x;
+           x = gsl_root_fdfsolver_root(s);
+           solp[iter*solc+0] = iter+1;
+           solp[iter*solc+1] = x;
+
+           iter++;
+           if (status)   /* check if solver is stuck */
+             break;
+
+           status =
+               gsl_root_test_delta (x, x0, 0, epsrel);
+        }
+        while (status == GSL_CONTINUE && iter < maxit);
+
+    int i;
+    for (i=iter; i<solr; i++) {
+        solp[i*solc+0] = iter;
+        solp[i*solc+1]=0.;
+    }
+    gsl_root_fdfsolver_free(s);
+    OK
+}
+
+
+//---------------------------------------------------------------
+
 typedef void TrawfunV(int, double*, int, double*);
 
-int only_f_aux_root(const gsl_vector*x, void *pars, gsl_vector*y) {
+int only_f_aux_multiroot(const gsl_vector*x, void *pars, gsl_vector*y) {
     TrawfunV * f = (TrawfunV*) pars;
     double* p = (double*)calloc(x->size,sizeof(double));
     double* q = (double*)calloc(y->size,sizeof(double));
@@ -1066,14 +1202,14 @@
     return 0; //hmmm
 }
 
-int root(int method, void f(int, double*, int, double*),
+int multiroot(int method, void f(int, double*, int, double*),
          double epsabs, int maxit,
          KRVEC(xi), RMAT(sol)) {
     REQUIRES(solr == maxit && solc == 1+2*xin,BAD_SIZE);
     DEBUGMSG("root_only_f");
     gsl_multiroot_function my_func;
     // extract function from pars
-    my_func.f = only_f_aux_root;
+    my_func.f = only_f_aux_multiroot;
     my_func.n = xin;
     my_func.params = f;
     size_t iter = 0;
@@ -1112,7 +1248,7 @@
            status =
              gsl_multiroot_test_residual (s->f, epsabs);
         }
-        while (status == GSL_CONTINUE && iter <= maxit);
+        while (status == GSL_CONTINUE && iter < maxit);
 
     int i,j;
     for (i=iter; i<solr; i++) {
@@ -1175,7 +1311,7 @@
     return 0;
 }
 
-int rootj(int method, int f(int, double*, int, double*),
+int multirootj(int method, int f(int, double*, int, double*),
                       int jac(int, double*, int, int, double*),
          double epsabs, int maxit,
          KRVEC(xi), RMAT(sol)) {
@@ -1228,7 +1364,7 @@
            status =
              gsl_multiroot_test_residual (s->f, epsabs);
         }
-        while (status == GSL_CONTINUE && iter <= maxit);
+        while (status == GSL_CONTINUE && iter < maxit);
 
     int i,j;
     for (i=iter; i<solr; i++) {
@@ -1293,7 +1429,7 @@
 
            status = gsl_multifit_test_delta (s->dx, s->x, epsabs, epsrel);
         }
-        while (status == GSL_CONTINUE && iter <= maxit);
+        while (status == GSL_CONTINUE && iter < maxit);
 
     int i,j;
     for (i=iter; i<solr; i++) {
diff --git a/lib/Numeric/LinearAlgebra/LAPACK.hs b/lib/Numeric/LinearAlgebra/LAPACK.hs
--- a/lib/Numeric/LinearAlgebra/LAPACK.hs
+++ b/lib/Numeric/LinearAlgebra/LAPACK.hs
@@ -211,10 +211,10 @@
 
 -----------------------------------------------------------------------------
 
-foreign import ccall unsafe "LAPACK/lapack-aux.h eig_l_R" dgeev :: TMMCVM
-foreign import ccall unsafe "LAPACK/lapack-aux.h eig_l_C" zgeev :: TCMCMCVCM
-foreign import ccall unsafe "LAPACK/lapack-aux.h eig_l_S" dsyev :: CInt -> TMVM
-foreign import ccall unsafe "LAPACK/lapack-aux.h eig_l_H" zheev :: CInt -> TCMVCM
+foreign import ccall unsafe "eig_l_R" dgeev :: TMMCVM
+foreign import ccall unsafe "eig_l_C" zgeev :: TCMCMCVCM
+foreign import ccall unsafe "eig_l_S" dsyev :: CInt -> TMVM
+foreign import ccall unsafe "eig_l_H" zheev :: CInt -> TCMVCM
 
 eigAux f st m = unsafePerformIO $ do
         l <- createVector r
@@ -359,10 +359,10 @@
 cholSolveC a b = linearSolveSQAux zpotrs "cholSolveC" (fmat a) (fmat b)
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h linearSolveLSR_l" dgels :: TMMM
-foreign import ccall unsafe "LAPACK/lapack-aux.h linearSolveLSC_l" zgels :: TCMCMCM
-foreign import ccall unsafe "LAPACK/lapack-aux.h linearSolveSVDR_l" dgelss :: Double -> TMMM
-foreign import ccall unsafe "LAPACK/lapack-aux.h linearSolveSVDC_l" zgelss :: Double -> TCMCMCM
+foreign import ccall unsafe "linearSolveLSR_l" dgels :: TMMM
+foreign import ccall unsafe "linearSolveLSC_l" zgels :: TCMCMCM
+foreign import ccall unsafe "linearSolveSVDR_l" dgelss :: Double -> TMMM
+foreign import ccall unsafe "linearSolveSVDC_l" zgelss :: Double -> TCMCMCM
 
 linearSolveAux f st a b = unsafePerformIO $ do
     r <- createMatrix ColumnMajor (max m n) nrhs
@@ -401,8 +401,8 @@
 linearSolveSVDC Nothing a b = linearSolveSVDC (Just (-1)) (fmat a) (fmat b)
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h chol_l_H" zpotrf :: TCMCM
-foreign import ccall unsafe "LAPACK/lapack-aux.h chol_l_S" dpotrf :: TMM
+foreign import ccall unsafe "chol_l_H" zpotrf :: TCMCM
+foreign import ccall unsafe "chol_l_S" dpotrf :: TMM
 
 cholAux f st a = do
     r <- createMatrix ColumnMajor n n
@@ -427,8 +427,8 @@
 mbCholS =  unsafePerformIO . mbCatch . cholAux dpotrf "cholS" . fmat
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h qr_l_R" dgeqr2 :: TMVM
-foreign import ccall unsafe "LAPACK/lapack-aux.h qr_l_C" zgeqr2 :: TCMCVCM
+foreign import ccall unsafe "qr_l_R" dgeqr2 :: TMVM
+foreign import ccall unsafe "qr_l_C" zgeqr2 :: TCMCVCM
 
 -- | QR factorization of a real matrix, using LAPACK's /dgeqr2/.
 qrR :: Matrix Double -> (Matrix Double, Vector Double)
@@ -448,8 +448,8 @@
         mn = min m n
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h hess_l_R" dgehrd :: TMVM
-foreign import ccall unsafe "LAPACK/lapack-aux.h hess_l_C" zgehrd :: TCMCVCM
+foreign import ccall unsafe "hess_l_R" dgehrd :: TMVM
+foreign import ccall unsafe "hess_l_C" zgehrd :: TCMCVCM
 
 -- | Hessenberg factorization of a square real matrix, using LAPACK's /dgehrd/.
 hessR :: Matrix Double -> (Matrix Double, Vector Double)
@@ -469,8 +469,8 @@
         mn = min m n
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h schur_l_R" dgees :: TMMM
-foreign import ccall unsafe "LAPACK/lapack-aux.h schur_l_C" zgees :: TCMCMCM
+foreign import ccall unsafe "schur_l_R" dgees :: TMMM
+foreign import ccall unsafe "schur_l_C" zgees :: TCMCMCM
 
 -- | Schur factorization of a square real matrix, using LAPACK's /dgees/.
 schurR :: Matrix Double -> (Matrix Double, Matrix Double)
@@ -488,8 +488,8 @@
   where n = rows a
 
 -----------------------------------------------------------------------------------
-foreign import ccall unsafe "LAPACK/lapack-aux.h lu_l_R" dgetrf :: TMVM
-foreign import ccall unsafe "LAPACK/lapack-aux.h lu_l_C" zgetrf :: TCMVCM
+foreign import ccall unsafe "lu_l_R" dgetrf :: TMVM
+foreign import ccall unsafe "lu_l_C" zgetrf :: TCMVCM
 
 -- | LU factorization of a general real matrix, using LAPACK's /dgetrf/.
 luR :: Matrix Double -> (Matrix Double, [Int])
@@ -511,8 +511,8 @@
 type TW a = CInt -> PD -> a
 type TQ a = CInt -> CInt -> PC -> a
 
-foreign import ccall unsafe "LAPACK/lapack-aux.h luS_l_R" dgetrs :: TMVMM
-foreign import ccall unsafe "LAPACK/lapack-aux.h luS_l_C" zgetrs :: TQ (TW (TQ (TQ (IO CInt))))
+foreign import ccall unsafe "luS_l_R" dgetrs :: TMVMM
+foreign import ccall unsafe "luS_l_C" zgetrs :: TQ (TW (TQ (TQ (IO CInt))))
 
 -- | Solve a real linear system from a precomputed LU decomposition ('luR'), using LAPACK's /dgetrs/.
 lusR :: Matrix Double -> [Int] -> Matrix Double -> Matrix Double
@@ -533,3 +533,4 @@
         n = rows b
         m = cols b
         piv' = fromList (map (fromIntegral.succ) piv) :: Vector Double
+
diff --git a/lib/Numeric/LinearAlgebra/LAPACK/clapack.h b/lib/Numeric/LinearAlgebra/LAPACK/clapack.h
deleted file mode 100644
--- a/lib/Numeric/LinearAlgebra/LAPACK/clapack.h
+++ /dev/null
@@ -1,5079 +0,0 @@
-#ifndef __CLAPACK_H
-#define __CLAPACK_H
- 
-/* Subroutine */ int cbdsqr_(char *uplo, integer *n, integer *ncvt, integer *
-	nru, integer *ncc, real *d__, real *e, complex *vt, integer *ldvt, 
-	complex *u, integer *ldu, complex *c__, integer *ldc, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cgbbrd_(char *vect, integer *m, integer *n, integer *ncc,
-	 integer *kl, integer *ku, complex *ab, integer *ldab, real *d__, 
-	real *e, complex *q, integer *ldq, complex *pt, integer *ldpt, 
-	complex *c__, integer *ldc, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgbcon_(char *norm, integer *n, integer *kl, integer *ku,
-	 complex *ab, integer *ldab, integer *ipiv, real *anorm, real *rcond, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgbequ_(integer *m, integer *n, integer *kl, integer *ku,
-	 complex *ab, integer *ldab, real *r__, real *c__, real *rowcnd, real 
-	*colcnd, real *amax, integer *info);
- 
-/* Subroutine */ int cgbrfs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, complex *ab, integer *ldab, complex *afb, integer *
-	ldafb, integer *ipiv, complex *b, integer *ldb, complex *x, integer *
-	ldx, real *ferr, real *berr, complex *work, real *rwork, integer *
-	info);
- 
-/* Subroutine */ int cgbsv_(integer *n, integer *kl, integer *ku, integer *
-	nrhs, complex *ab, integer *ldab, integer *ipiv, complex *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int cgbsvx_(char *fact, char *trans, integer *n, integer *kl,
-	 integer *ku, integer *nrhs, complex *ab, integer *ldab, complex *afb,
-	 integer *ldafb, integer *ipiv, char *equed, real *r__, real *c__, 
-	complex *b, integer *ldb, complex *x, integer *ldx, real *rcond, real 
-	*ferr, real *berr, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgbtf2_(integer *m, integer *n, integer *kl, integer *ku,
-	 complex *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int cgbtrf_(integer *m, integer *n, integer *kl, integer *ku,
-	 complex *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int cgbtrs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, complex *ab, integer *ldab, integer *ipiv, complex 
-	*b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cgebak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, real *scale, integer *m, complex *v, integer *ldv, 
-	integer *info);
- 
-/* Subroutine */ int cgebal_(char *job, integer *n, complex *a, integer *lda, 
-	integer *ilo, integer *ihi, real *scale, integer *info);
- 
-/* Subroutine */ int cgebd2_(integer *m, integer *n, complex *a, integer *lda,
-	 real *d__, real *e, complex *tauq, complex *taup, complex *work, 
-	integer *info);
- 
-/* Subroutine */ int cgebrd_(integer *m, integer *n, complex *a, integer *lda,
-	 real *d__, real *e, complex *tauq, complex *taup, complex *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int cgecon_(char *norm, integer *n, complex *a, integer *lda,
-	 real *anorm, real *rcond, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgeequ_(integer *m, integer *n, complex *a, integer *lda,
-	 real *r__, real *c__, real *rowcnd, real *colcnd, real *amax, 
-	integer *info);
- 
-/* Subroutine */ int cgees_(char *jobvs, char *sort, L_fp select, integer *n, 
-	complex *a, integer *lda, integer *sdim, complex *w, complex *vs, 
-	integer *ldvs, complex *work, integer *lwork, real *rwork, logical *
-	bwork, integer *info);
- 
-/* Subroutine */ int cgeesx_(char *jobvs, char *sort, L_fp select, char *
-	sense, integer *n, complex *a, integer *lda, integer *sdim, complex *
-	w, complex *vs, integer *ldvs, real *rconde, real *rcondv, complex *
-	work, integer *lwork, real *rwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int cgeev_(char *jobvl, char *jobvr, integer *n, complex *a, 
-	integer *lda, complex *w, complex *vl, integer *ldvl, complex *vr, 
-	integer *ldvr, complex *work, integer *lwork, real *rwork, integer *
-	info);
- 
-/* Subroutine */ int cgeevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, complex *a, integer *lda, complex *w, complex *vl, 
-	integer *ldvl, complex *vr, integer *ldvr, integer *ilo, integer *ihi,
-	 real *scale, real *abnrm, real *rconde, real *rcondv, complex *work, 
-	integer *lwork, real *rwork, integer *info);
- 
-/* Subroutine */ int cgegs_(char *jobvsl, char *jobvsr, integer *n, complex *
-	a, integer *lda, complex *b, integer *ldb, complex *alpha, complex *
-	beta, complex *vsl, integer *ldvsl, complex *vsr, integer *ldvsr, 
-	complex *work, integer *lwork, real *rwork, integer *info);
- 
-/* Subroutine */ int cgegv_(char *jobvl, char *jobvr, integer *n, complex *a, 
-	integer *lda, complex *b, integer *ldb, complex *alpha, complex *beta,
-	 complex *vl, integer *ldvl, complex *vr, integer *ldvr, complex *
-	work, integer *lwork, real *rwork, integer *info);
- 
-/* Subroutine */ int cgehd2_(integer *n, integer *ilo, integer *ihi, complex *
-	a, integer *lda, complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cgehrd_(integer *n, integer *ilo, integer *ihi, complex *
-	a, integer *lda, complex *tau, complex *work, integer *lwork, integer 
-	*info);
- 
-/* Subroutine */ int cgelq2_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cgelqf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgels_(char *trans, integer *m, integer *n, integer *
-	nrhs, complex *a, integer *lda, complex *b, integer *ldb, complex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgelsx_(integer *m, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *b, integer *ldb, integer *jpvt, real *rcond,
-	 integer *rank, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgelsy_(integer *m, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *b, integer *ldb, integer *jpvt, real *rcond,
-	 integer *rank, complex *work, integer *lwork, real *rwork, integer *
-	info);
- 
-/* Subroutine */ int cgeql2_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cgeqlf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgeqp3_(integer *m, integer *n, complex *a, integer *lda,
-	 integer *jpvt, complex *tau, complex *work, integer *lwork, real *
-	rwork, integer *info);
- 
-/* Subroutine */ int cgeqpf_(integer *m, integer *n, complex *a, integer *lda,
-	 integer *jpvt, complex *tau, complex *work, real *rwork, integer *
-	info);
- 
-/* Subroutine */ int cgeqr2_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cgeqrf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgerfs_(char *trans, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *af, integer *ldaf, integer *ipiv, complex *
-	b, integer *ldb, complex *x, integer *ldx, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgerq2_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cgerqf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgesc2_(integer *n, complex *a, integer *lda, complex *
-	rhs, integer *ipiv, integer *jpiv, real *scale);
- 
-/* Subroutine */ int cgesv_(integer *n, integer *nrhs, complex *a, integer *
-	lda, integer *ipiv, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cgesvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, complex *a, integer *lda, complex *af, integer *ldaf, integer *
-	ipiv, char *equed, real *r__, real *c__, complex *b, integer *ldb, 
-	complex *x, integer *ldx, real *rcond, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgetc2_(integer *n, complex *a, integer *lda, integer *
-	ipiv, integer *jpiv, integer *info);
- 
-/* Subroutine */ int cgetf2_(integer *m, integer *n, complex *a, integer *lda,
-	 integer *ipiv, integer *info);
- 
-/* Subroutine */ int cgetrf_(integer *m, integer *n, complex *a, integer *lda,
-	 integer *ipiv, integer *info);
- 
-/* Subroutine */ int cgetri_(integer *n, complex *a, integer *lda, integer *
-	ipiv, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgetrs_(char *trans, integer *n, integer *nrhs, complex *
-	a, integer *lda, integer *ipiv, complex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int cggbak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, real *lscale, real *rscale, integer *m, complex *v, 
-	integer *ldv, integer *info);
- 
-/* Subroutine */ int cggbal_(char *job, integer *n, complex *a, integer *lda, 
-	complex *b, integer *ldb, integer *ilo, integer *ihi, real *lscale, 
-	real *rscale, real *work, integer *info);
- 
-/* Subroutine */ int cgges_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	selctg, integer *n, complex *a, integer *lda, complex *b, integer *
-	ldb, integer *sdim, complex *alpha, complex *beta, complex *vsl, 
-	integer *ldvsl, complex *vsr, integer *ldvsr, complex *work, integer *
-	lwork, real *rwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int cggesx_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	selctg, char *sense, integer *n, complex *a, integer *lda, complex *b,
-	 integer *ldb, integer *sdim, complex *alpha, complex *beta, complex *
-	vsl, integer *ldvsl, complex *vsr, integer *ldvsr, real *rconde, real 
-	*rcondv, complex *work, integer *lwork, real *rwork, integer *iwork, 
-	integer *liwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int cggev_(char *jobvl, char *jobvr, integer *n, complex *a, 
-	integer *lda, complex *b, integer *ldb, complex *alpha, complex *beta,
-	 complex *vl, integer *ldvl, complex *vr, integer *ldvr, complex *
-	work, integer *lwork, real *rwork, integer *info);
- 
-/* Subroutine */ int cggevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, complex *a, integer *lda, complex *b, integer *ldb,
-	 complex *alpha, complex *beta, complex *vl, integer *ldvl, complex *
-	vr, integer *ldvr, integer *ilo, integer *ihi, real *lscale, real *
-	rscale, real *abnrm, real *bbnrm, real *rconde, real *rcondv, complex 
-	*work, integer *lwork, real *rwork, integer *iwork, logical *bwork, 
-	integer *info);
- 
-/* Subroutine */ int cggglm_(integer *n, integer *m, integer *p, complex *a, 
-	integer *lda, complex *b, integer *ldb, complex *d__, complex *x, 
-	complex *y, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cgghrd_(char *compq, char *compz, integer *n, integer *
-	ilo, integer *ihi, complex *a, integer *lda, complex *b, integer *ldb,
-	 complex *q, integer *ldq, complex *z__, integer *ldz, integer *info);
- 
-/* Subroutine */ int cgglse_(integer *m, integer *n, integer *p, complex *a, 
-	integer *lda, complex *b, integer *ldb, complex *c__, complex *d__, 
-	complex *x, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cggqrf_(integer *n, integer *m, integer *p, complex *a, 
-	integer *lda, complex *taua, complex *b, integer *ldb, complex *taub, 
-	complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cggrqf_(integer *m, integer *p, integer *n, complex *a, 
-	integer *lda, complex *taua, complex *b, integer *ldb, complex *taub, 
-	complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cggsvd_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *n, integer *p, integer *k, integer *l, complex *a, integer *
-	lda, complex *b, integer *ldb, real *alpha, real *beta, complex *u, 
-	integer *ldu, complex *v, integer *ldv, complex *q, integer *ldq, 
-	complex *work, real *rwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int cggsvp_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, complex *a, integer *lda, complex *b, integer 
-	*ldb, real *tola, real *tolb, integer *k, integer *l, complex *u, 
-	integer *ldu, complex *v, integer *ldv, complex *q, integer *ldq, 
-	integer *iwork, real *rwork, complex *tau, complex *work, integer *
-	info);
- 
-/* Subroutine */ int cgtcon_(char *norm, integer *n, complex *dl, complex *
-	d__, complex *du, complex *du2, integer *ipiv, real *anorm, real *
-	rcond, complex *work, integer *info);
- 
-/* Subroutine */ int cgtrfs_(char *trans, integer *n, integer *nrhs, complex *
-	dl, complex *d__, complex *du, complex *dlf, complex *df, complex *
-	duf, complex *du2, integer *ipiv, complex *b, integer *ldb, complex *
-	x, integer *ldx, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cgtsv_(integer *n, integer *nrhs, complex *dl, complex *
-	d__, complex *du, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cgtsvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, complex *dl, complex *d__, complex *du, complex *dlf, complex *
-	df, complex *duf, complex *du2, integer *ipiv, complex *b, integer *
-	ldb, complex *x, integer *ldx, real *rcond, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cgttrf_(integer *n, complex *dl, complex *d__, complex *
-	du, complex *du2, integer *ipiv, integer *info);
- 
-/* Subroutine */ int cgttrs_(char *trans, integer *n, integer *nrhs, complex *
-	dl, complex *d__, complex *du, complex *du2, integer *ipiv, complex *
-	b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cgtts2_(integer *itrans, integer *n, integer *nrhs, 
-	complex *dl, complex *d__, complex *du, complex *du2, integer *ipiv, 
-	complex *b, integer *ldb);
- 
-/* Subroutine */ int chbev_(char *jobz, char *uplo, integer *n, integer *kd, 
-	complex *ab, integer *ldab, real *w, complex *z__, integer *ldz, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int chbevd_(char *jobz, char *uplo, integer *n, integer *kd, 
-	complex *ab, integer *ldab, real *w, complex *z__, integer *ldz, 
-	complex *work, integer *lwork, real *rwork, integer *lrwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int chbevx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *kd, complex *ab, integer *ldab, complex *q, integer *ldq, 
-	real *vl, real *vu, integer *il, integer *iu, real *abstol, integer *
-	m, real *w, complex *z__, integer *ldz, complex *work, real *rwork, 
-	integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int chbgst_(char *vect, char *uplo, integer *n, integer *ka, 
-	integer *kb, complex *ab, integer *ldab, complex *bb, integer *ldbb, 
-	complex *x, integer *ldx, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int chbgv_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, complex *ab, integer *ldab, complex *bb, integer *ldbb, 
-	real *w, complex *z__, integer *ldz, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int chbgvx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *ka, integer *kb, complex *ab, integer *ldab, complex *bb, 
-	integer *ldbb, complex *q, integer *ldq, real *vl, real *vu, integer *
-	il, integer *iu, real *abstol, integer *m, real *w, complex *z__, 
-	integer *ldz, complex *work, real *rwork, integer *iwork, integer *
-	ifail, integer *info);
- 
-/* Subroutine */ int chbtrd_(char *vect, char *uplo, integer *n, integer *kd, 
-	complex *ab, integer *ldab, real *d__, real *e, complex *q, integer *
-	ldq, complex *work, integer *info);
- 
-/* Subroutine */ int checon_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, real *anorm, real *rcond, complex *work, integer *
-	info);
- 
-/* Subroutine */ int cheev_(char *jobz, char *uplo, integer *n, complex *a, 
-	integer *lda, real *w, complex *work, integer *lwork, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cheevd_(char *jobz, char *uplo, integer *n, complex *a, 
-	integer *lda, real *w, complex *work, integer *lwork, real *rwork, 
-	integer *lrwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int cheevr_(char *jobz, char *range, char *uplo, integer *n, 
-	complex *a, integer *lda, real *vl, real *vu, integer *il, integer *
-	iu, real *abstol, integer *m, real *w, complex *z__, integer *ldz, 
-	integer *isuppz, complex *work, integer *lwork, real *rwork, integer *
-	lrwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int cheevx_(char *jobz, char *range, char *uplo, integer *n, 
-	complex *a, integer *lda, real *vl, real *vu, integer *il, integer *
-	iu, real *abstol, integer *m, real *w, complex *z__, integer *ldz, 
-	complex *work, integer *lwork, real *rwork, integer *iwork, integer *
-	ifail, integer *info);
- 
-/* Subroutine */ int chegs2_(integer *itype, char *uplo, integer *n, complex *
-	a, integer *lda, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int chegst_(integer *itype, char *uplo, integer *n, complex *
-	a, integer *lda, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int chegv_(integer *itype, char *jobz, char *uplo, integer *
-	n, complex *a, integer *lda, complex *b, integer *ldb, real *w, 
-	complex *work, integer *lwork, real *rwork, integer *info);
- 
-/* Subroutine */ int chegvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, complex *a, integer *lda, complex *b, integer *ldb, real *w, 
-	complex *work, integer *lwork, real *rwork, integer *lrwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int chegvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, complex *a, integer *lda, complex *b, integer *ldb, 
-	real *vl, real *vu, integer *il, integer *iu, real *abstol, integer *
-	m, real *w, complex *z__, integer *ldz, complex *work, integer *lwork,
-	 real *rwork, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int cherfs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *af, integer *ldaf, integer *ipiv, complex *
-	b, integer *ldb, complex *x, integer *ldx, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int chesv_(char *uplo, integer *n, integer *nrhs, complex *a,
-	 integer *lda, integer *ipiv, complex *b, integer *ldb, complex *work,
-	 integer *lwork, integer *info);
- 
-/* Subroutine */ int chesvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *a, integer *lda, complex *af, integer *ldaf, integer *
-	ipiv, complex *b, integer *ldb, complex *x, integer *ldx, real *rcond,
-	 real *ferr, real *berr, complex *work, integer *lwork, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int chetf2_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, integer *info);
- 
-/* Subroutine */ int chetrd_(char *uplo, integer *n, complex *a, integer *lda,
-	 real *d__, real *e, complex *tau, complex *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int chetrf_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int chetri_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, complex *work, integer *info);
- 
-/* Subroutine */ int chetrs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, integer *ipiv, complex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int chgeqz_(char *job, char *compq, char *compz, integer *n, 
-	integer *ilo, integer *ihi, complex *a, integer *lda, complex *b, 
-	integer *ldb, complex *alpha, complex *beta, complex *q, integer *ldq,
-	 complex *z__, integer *ldz, complex *work, integer *lwork, real *
-	rwork, integer *info);
- 
-/* Subroutine */ int chpcon_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, real *anorm, real *rcond, complex *work, integer *info);
- 
-/* Subroutine */ int chpev_(char *jobz, char *uplo, integer *n, complex *ap, 
-	real *w, complex *z__, integer *ldz, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int chpevd_(char *jobz, char *uplo, integer *n, complex *ap, 
-	real *w, complex *z__, integer *ldz, complex *work, integer *lwork, 
-	real *rwork, integer *lrwork, integer *iwork, integer *liwork, 
-	integer *info);
- 
-/* Subroutine */ int chpevx_(char *jobz, char *range, char *uplo, integer *n, 
-	complex *ap, real *vl, real *vu, integer *il, integer *iu, real *
-	abstol, integer *m, real *w, complex *z__, integer *ldz, complex *
-	work, real *rwork, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int chpgst_(integer *itype, char *uplo, integer *n, complex *
-	ap, complex *bp, integer *info);
- 
-/* Subroutine */ int chpgv_(integer *itype, char *jobz, char *uplo, integer *
-	n, complex *ap, complex *bp, real *w, complex *z__, integer *ldz, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int chpgvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, complex *ap, complex *bp, real *w, complex *z__, integer *ldz, 
-	complex *work, integer *lwork, real *rwork, integer *lrwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int chpgvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, complex *ap, complex *bp, real *vl, real *vu, 
-	integer *il, integer *iu, real *abstol, integer *m, real *w, complex *
-	z__, integer *ldz, complex *work, real *rwork, integer *iwork, 
-	integer *ifail, integer *info);
- 
-/* Subroutine */ int chprfs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, complex *afp, integer *ipiv, complex *b, integer *ldb, complex *x,
-	 integer *ldx, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int chpsv_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, integer *ipiv, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int chpsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *ap, complex *afp, integer *ipiv, complex *b, integer *
-	ldb, complex *x, integer *ldx, real *rcond, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int chptrd_(char *uplo, integer *n, complex *ap, real *d__, 
-	real *e, complex *tau, integer *info);
- 
-/* Subroutine */ int chptrf_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, integer *info);
- 
-/* Subroutine */ int chptri_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, complex *work, integer *info);
- 
-/* Subroutine */ int chptrs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, integer *ipiv, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int chsein_(char *side, char *eigsrc, char *initv, logical *
-	select, integer *n, complex *h__, integer *ldh, complex *w, complex *
-	vl, integer *ldvl, complex *vr, integer *ldvr, integer *mm, integer *
-	m, complex *work, real *rwork, integer *ifaill, integer *ifailr, 
-	integer *info);
- 
-/* Subroutine */ int chseqr_(char *job, char *compz, integer *n, integer *ilo,
-	 integer *ihi, complex *h__, integer *ldh, complex *w, complex *z__, 
-	integer *ldz, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int clabrd_(integer *m, integer *n, integer *nb, complex *a, 
-	integer *lda, real *d__, real *e, complex *tauq, complex *taup, 
-	complex *x, integer *ldx, complex *y, integer *ldy);
- 
-/* Subroutine */ int clacgv_(integer *n, complex *x, integer *incx);
- 
-/* Subroutine */ int clacon_(integer *n, complex *v, complex *x, real *est, 
-	integer *kase);
- 
-/* Subroutine */ int clacp2_(char *uplo, integer *m, integer *n, real *a, 
-	integer *lda, complex *b, integer *ldb);
- 
-/* Subroutine */ int clacpy_(char *uplo, integer *m, integer *n, complex *a, 
-	integer *lda, complex *b, integer *ldb);
- 
-/* Subroutine */ int clacrm_(integer *m, integer *n, complex *a, integer *lda,
-	 real *b, integer *ldb, complex *c__, integer *ldc, real *rwork);
- 
-/* Subroutine */ int clacrt_(integer *n, complex *cx, integer *incx, complex *
-	cy, integer *incy, complex *c__, complex *s);
- 
-/* Subroutine */ int claed0_(integer *qsiz, integer *n, real *d__, real *e, 
-	complex *q, integer *ldq, complex *qstore, integer *ldqs, real *rwork,
-	 integer *iwork, integer *info);
- 
-/* Subroutine */ int claed7_(integer *n, integer *cutpnt, integer *qsiz, 
-	integer *tlvls, integer *curlvl, integer *curpbm, real *d__, complex *
-	q, integer *ldq, real *rho, integer *indxq, real *qstore, integer *
-	qptr, integer *prmptr, integer *perm, integer *givptr, integer *
-	givcol, real *givnum, complex *work, real *rwork, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int claed8_(integer *k, integer *n, integer *qsiz, complex *
-	q, integer *ldq, real *d__, real *rho, integer *cutpnt, real *z__, 
-	real *dlamda, complex *q2, integer *ldq2, real *w, integer *indxp, 
-	integer *indx, integer *indxq, integer *perm, integer *givptr, 
-	integer *givcol, real *givnum, integer *info);
- 
-/* Subroutine */ int claein_(logical *rightv, logical *noinit, integer *n, 
-	complex *h__, integer *ldh, complex *w, complex *v, complex *b, 
-	integer *ldb, real *rwork, real *eps3, real *smlnum, integer *info);
- 
-/* Subroutine */ int claesy_(complex *a, complex *b, complex *c__, complex *
-	rt1, complex *rt2, complex *evscal, complex *cs1, complex *sn1);
- 
-/* Subroutine */ int claev2_(complex *a, complex *b, complex *c__, real *rt1, 
-	real *rt2, real *cs1, complex *sn1);
- 
-/* Subroutine */ int clags2_(logical *upper, real *a1, complex *a2, real *a3, 
-	real *b1, complex *b2, real *b3, real *csu, complex *snu, real *csv, 
-	complex *snv, real *csq, complex *snq);
- 
-/* Subroutine */ int clagtm_(char *trans, integer *n, integer *nrhs, real *
-	alpha, complex *dl, complex *d__, complex *du, complex *x, integer *
-	ldx, real *beta, complex *b, integer *ldb);
- 
-/* Subroutine */ int clahef_(char *uplo, integer *n, integer *nb, integer *kb,
-	 complex *a, integer *lda, integer *ipiv, complex *w, integer *ldw, 
-	integer *info);
- 
-/* Subroutine */ int clahqr_(logical *wantt, logical *wantz, integer *n, 
-	integer *ilo, integer *ihi, complex *h__, integer *ldh, complex *w, 
-	integer *iloz, integer *ihiz, complex *z__, integer *ldz, integer *
-	info);
- 
-/* Subroutine */ int clahrd_(integer *n, integer *k, integer *nb, complex *a, 
-	integer *lda, complex *tau, complex *t, integer *ldt, complex *y, 
-	integer *ldy);
- 
-/* Subroutine */ int claic1_(integer *job, integer *j, complex *x, real *sest,
-	 complex *w, complex *gamma, real *sestpr, complex *s, complex *c__);
- 
-/* Subroutine */ int clals0_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *nrhs, complex *b, integer *ldb, complex *bx, 
-	integer *ldbx, integer *perm, integer *givptr, integer *givcol, 
-	integer *ldgcol, real *givnum, integer *ldgnum, real *poles, real *
-	difl, real *difr, real *z__, integer *k, real *c__, real *s, real *
-	rwork, integer *info);
- 
-/* Subroutine */ int clalsa_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *nrhs, complex *b, integer *ldb, complex *bx, integer *ldbx, 
-	real *u, integer *ldu, real *vt, integer *k, real *difl, real *difr, 
-	real *z__, real *poles, integer *givptr, integer *givcol, integer *
-	ldgcol, integer *perm, real *givnum, real *c__, real *s, real *rwork, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int clapll_(integer *n, complex *x, integer *incx, complex *
-	y, integer *incy, real *ssmin);
- 
-/* Subroutine */ int clapmt_(logical *forwrd, integer *m, integer *n, complex 
-	*x, integer *ldx, integer *k);
- 
-/* Subroutine */ int claqgb_(integer *m, integer *n, integer *kl, integer *ku,
-	 complex *ab, integer *ldab, real *r__, real *c__, real *rowcnd, real 
-	*colcnd, real *amax, char *equed);
- 
-/* Subroutine */ int claqge_(integer *m, integer *n, complex *a, integer *lda,
-	 real *r__, real *c__, real *rowcnd, real *colcnd, real *amax, char *
-	equed);
- 
-/* Subroutine */ int claqhb_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int claqhe_(char *uplo, integer *n, complex *a, integer *lda,
-	 real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int claqhp_(char *uplo, integer *n, complex *ap, real *s, 
-	real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int claqp2_(integer *m, integer *n, integer *offset, complex 
-	*a, integer *lda, integer *jpvt, complex *tau, real *vn1, real *vn2, 
-	complex *work);
- 
-/* Subroutine */ int claqps_(integer *m, integer *n, integer *offset, integer 
-	*nb, integer *kb, complex *a, integer *lda, integer *jpvt, complex *
-	tau, real *vn1, real *vn2, complex *auxv, complex *f, integer *ldf);
- 
-/* Subroutine */ int claqsb_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int claqsp_(char *uplo, integer *n, complex *ap, real *s, 
-	real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int claqsy_(char *uplo, integer *n, complex *a, integer *lda,
-	 real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int clar1v_(integer *n, integer *b1, integer *bn, real *
-	sigma, real *d__, real *l, real *ld, real *lld, real *gersch, complex 
-	*z__, real *ztz, real *mingma, integer *r__, integer *isuppz, real *
-	work);
- 
-/* Subroutine */ int clar2v_(integer *n, complex *x, complex *y, complex *z__,
-	 integer *incx, real *c__, complex *s, integer *incc);
- 
-/* Subroutine */ int clarcm_(integer *m, integer *n, real *a, integer *lda, 
-	complex *b, integer *ldb, complex *c__, integer *ldc, real *rwork);
- 
-/* Subroutine */ int clarf_(char *side, integer *m, integer *n, complex *v, 
-	integer *incv, complex *tau, complex *c__, integer *ldc, complex *
-	work);
- 
-/* Subroutine */ int clarfb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, complex *v, integer *ldv, 
-	complex *t, integer *ldt, complex *c__, integer *ldc, complex *work, 
-	integer *ldwork);
- 
-/* Subroutine */ int clarfg_(integer *n, complex *alpha, complex *x, integer *
-	incx, complex *tau);
- 
-/* Subroutine */ int clarft_(char *direct, char *storev, integer *n, integer *
-	k, complex *v, integer *ldv, complex *tau, complex *t, integer *ldt);
- 
-/* Subroutine */ int clarfx_(char *side, integer *m, integer *n, complex *v, 
-	complex *tau, complex *c__, integer *ldc, complex *work);
- 
-/* Subroutine */ int clargv_(integer *n, complex *x, integer *incx, complex *
-	y, integer *incy, real *c__, integer *incc);
- 
-/* Subroutine */ int clarnv_(integer *idist, integer *iseed, integer *n, 
-	complex *x);
- 
-/* Subroutine */ int clarrv_(integer *n, real *d__, real *l, integer *isplit, 
-	integer *m, real *w, integer *iblock, real *gersch, real *tol, 
-	complex *z__, integer *ldz, integer *isuppz, real *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int clartg_(complex *f, complex *g, real *cs, complex *sn, 
-	complex *r__);
- 
-/* Subroutine */ int clartv_(integer *n, complex *x, integer *incx, complex *
-	y, integer *incy, real *c__, complex *s, integer *incc);
- 
-/* Subroutine */ int clarz_(char *side, integer *m, integer *n, integer *l, 
-	complex *v, integer *incv, complex *tau, complex *c__, integer *ldc, 
-	complex *work);
- 
-/* Subroutine */ int clarzb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, integer *l, complex *v, 
-	integer *ldv, complex *t, integer *ldt, complex *c__, integer *ldc, 
-	complex *work, integer *ldwork);
- 
-/* Subroutine */ int clarzt_(char *direct, char *storev, integer *n, integer *
-	k, complex *v, integer *ldv, complex *tau, complex *t, integer *ldt);
- 
-/* Subroutine */ int clascl_(char *type__, integer *kl, integer *ku, real *
-	cfrom, real *cto, integer *m, integer *n, complex *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int claset_(char *uplo, integer *m, integer *n, complex *
-	alpha, complex *beta, complex *a, integer *lda);
- 
-/* Subroutine */ int clasr_(char *side, char *pivot, char *direct, integer *m,
-	 integer *n, real *c__, real *s, complex *a, integer *lda);
- 
-/* Subroutine */ int classq_(integer *n, complex *x, integer *incx, real *
-	scale, real *sumsq);
- 
-/* Subroutine */ int claswp_(integer *n, complex *a, integer *lda, integer *
-	k1, integer *k2, integer *ipiv, integer *incx);
- 
-/* Subroutine */ int clasyf_(char *uplo, integer *n, integer *nb, integer *kb,
-	 complex *a, integer *lda, integer *ipiv, complex *w, integer *ldw, 
-	integer *info);
- 
-/* Subroutine */ int clatbs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, integer *kd, complex *ab, integer *ldab, complex *
-	x, real *scale, real *cnorm, integer *info);
- 
-/* Subroutine */ int clatdf_(integer *ijob, integer *n, complex *z__, integer 
-	*ldz, complex *rhs, real *rdsum, real *rdscal, integer *ipiv, integer 
-	*jpiv);
- 
-/* Subroutine */ int clatps_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, complex *ap, complex *x, real *scale, real *cnorm,
-	 integer *info);
- 
-/* Subroutine */ int clatrd_(char *uplo, integer *n, integer *nb, complex *a, 
-	integer *lda, real *e, complex *tau, complex *w, integer *ldw);
- 
-/* Subroutine */ int clatrs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, complex *a, integer *lda, complex *x, real *scale,
-	 real *cnorm, integer *info);
- 
-/* Subroutine */ int clatrz_(integer *m, integer *n, integer *l, complex *a, 
-	integer *lda, complex *tau, complex *work);
- 
-/* Subroutine */ int clatzm_(char *side, integer *m, integer *n, complex *v, 
-	integer *incv, complex *tau, complex *c1, complex *c2, integer *ldc, 
-	complex *work);
- 
-/* Subroutine */ int clauu2_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *info);
- 
-/* Subroutine */ int clauum_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *info);
- 
-/* Subroutine */ int cpbcon_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, real *anorm, real *rcond, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cpbequ_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, real *s, real *scond, real *amax, integer *info);
- 
-/* Subroutine */ int cpbrfs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, complex *ab, integer *ldab, complex *afb, integer *ldafb, 
-	complex *b, integer *ldb, complex *x, integer *ldx, real *ferr, real *
-	berr, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cpbstf_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, integer *info);
- 
-/* Subroutine */ int cpbsv_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, complex *ab, integer *ldab, complex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int cpbsvx_(char *fact, char *uplo, integer *n, integer *kd, 
-	integer *nrhs, complex *ab, integer *ldab, complex *afb, integer *
-	ldafb, char *equed, real *s, complex *b, integer *ldb, complex *x, 
-	integer *ldx, real *rcond, real *ferr, real *berr, complex *work, 
-	real *rwork, integer *info);
- 
-/* Subroutine */ int cpbtf2_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, integer *info);
- 
-/* Subroutine */ int cpbtrf_(char *uplo, integer *n, integer *kd, complex *ab,
-	 integer *ldab, integer *info);
- 
-/* Subroutine */ int cpbtrs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, complex *ab, integer *ldab, complex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int cpocon_(char *uplo, integer *n, complex *a, integer *lda,
-	 real *anorm, real *rcond, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cpoequ_(integer *n, complex *a, integer *lda, real *s, 
-	real *scond, real *amax, integer *info);
- 
-/* Subroutine */ int cporfs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *af, integer *ldaf, complex *b, integer *ldb,
-	 complex *x, integer *ldx, real *ferr, real *berr, complex *work, 
-	real *rwork, integer *info);
- 
-/* Subroutine */ int cposv_(char *uplo, integer *n, integer *nrhs, complex *a,
-	 integer *lda, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cposvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *a, integer *lda, complex *af, integer *ldaf, char *
-	equed, real *s, complex *b, integer *ldb, complex *x, integer *ldx, 
-	real *rcond, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cpotf2_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *info);
- 
-/* Subroutine */ int cpotrf_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *info);
- 
-/* Subroutine */ int cpotri_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *info);
- 
-/* Subroutine */ int cpotrs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cppcon_(char *uplo, integer *n, complex *ap, real *anorm,
-	 real *rcond, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cppequ_(char *uplo, integer *n, complex *ap, real *s, 
-	real *scond, real *amax, integer *info);
- 
-/* Subroutine */ int cpprfs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, complex *afp, complex *b, integer *ldb, complex *x, integer *ldx, 
-	real *ferr, real *berr, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cppsv_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cppsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *ap, complex *afp, char *equed, real *s, complex *b, 
-	integer *ldb, complex *x, integer *ldx, real *rcond, real *ferr, real 
-	*berr, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int cpptrf_(char *uplo, integer *n, complex *ap, integer *
-	info);
- 
-/* Subroutine */ int cpptri_(char *uplo, integer *n, complex *ap, integer *
-	info);
- 
-/* Subroutine */ int cpptrs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cptcon_(integer *n, real *d__, complex *e, real *anorm, 
-	real *rcond, real *rwork, integer *info);
- 
-/* Subroutine */ int cptrfs_(char *uplo, integer *n, integer *nrhs, real *d__,
-	 complex *e, real *df, complex *ef, complex *b, integer *ldb, complex 
-	*x, integer *ldx, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cptsv_(integer *n, integer *nrhs, real *d__, complex *e, 
-	complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cptsvx_(char *fact, integer *n, integer *nrhs, real *d__,
-	 complex *e, real *df, complex *ef, complex *b, integer *ldb, complex 
-	*x, integer *ldx, real *rcond, real *ferr, real *berr, complex *work, 
-	real *rwork, integer *info);
- 
-/* Subroutine */ int cpttrf_(integer *n, real *d__, complex *e, integer *info);
- 
-/* Subroutine */ int cpttrs_(char *uplo, integer *n, integer *nrhs, real *d__,
-	 complex *e, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cptts2_(integer *iuplo, integer *n, integer *nrhs, real *
-	d__, complex *e, complex *b, integer *ldb);
- 
-/* Subroutine */ int crot_(integer *n, complex *cx, integer *incx, complex *
-	cy, integer *incy, real *c__, complex *s);
- 
-/* Subroutine */ int cspcon_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, real *anorm, real *rcond, complex *work, integer *info);
- 
-/* Subroutine */ int cspmv_(char *uplo, integer *n, complex *alpha, complex *
-	ap, complex *x, integer *incx, complex *beta, complex *y, integer *
-	incy);
- 
-/* Subroutine */ int cspr_(char *uplo, integer *n, complex *alpha, complex *x,
-	 integer *incx, complex *ap);
- 
-/* Subroutine */ int csprfs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, complex *afp, integer *ipiv, complex *b, integer *ldb, complex *x,
-	 integer *ldx, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int cspsv_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, integer *ipiv, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int cspsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *ap, complex *afp, integer *ipiv, complex *b, integer *
-	ldb, complex *x, integer *ldx, real *rcond, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int csptrf_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, integer *info);
- 
-/* Subroutine */ int csptri_(char *uplo, integer *n, complex *ap, integer *
-	ipiv, complex *work, integer *info);
- 
-/* Subroutine */ int csptrs_(char *uplo, integer *n, integer *nrhs, complex *
-	ap, integer *ipiv, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int csrot_(integer *n, complex *cx, integer *incx, complex *
-	cy, integer *incy, real *c__, real *s);
- 
-/* Subroutine */ int csrscl_(integer *n, real *sa, complex *sx, integer *incx);
- 
-/* Subroutine */ int cstedc_(char *compz, integer *n, real *d__, real *e, 
-	complex *z__, integer *ldz, complex *work, integer *lwork, real *
-	rwork, integer *lrwork, integer *iwork, integer *liwork, integer *
-	info);
- 
-/* Subroutine */ int cstein_(integer *n, real *d__, real *e, integer *m, real 
-	*w, integer *iblock, integer *isplit, complex *z__, integer *ldz, 
-	real *work, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int csteqr_(char *compz, integer *n, real *d__, real *e, 
-	complex *z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int csycon_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, real *anorm, real *rcond, complex *work, integer *
-	info);
- 
-/* Subroutine */ int csymv_(char *uplo, integer *n, complex *alpha, complex *
-	a, integer *lda, complex *x, integer *incx, complex *beta, complex *y,
-	 integer *incy);
- 
-/* Subroutine */ int csyr_(char *uplo, integer *n, complex *alpha, complex *x,
-	 integer *incx, complex *a, integer *lda);
- 
-/* Subroutine */ int csyrfs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, complex *af, integer *ldaf, integer *ipiv, complex *
-	b, integer *ldb, complex *x, integer *ldx, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int csysv_(char *uplo, integer *n, integer *nrhs, complex *a,
-	 integer *lda, integer *ipiv, complex *b, integer *ldb, complex *work,
-	 integer *lwork, integer *info);
- 
-/* Subroutine */ int csysvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, complex *a, integer *lda, complex *af, integer *ldaf, integer *
-	ipiv, complex *b, integer *ldb, complex *x, integer *ldx, real *rcond,
-	 real *ferr, real *berr, complex *work, integer *lwork, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int csytf2_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, integer *info);
- 
-/* Subroutine */ int csytrf_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int csytri_(char *uplo, integer *n, complex *a, integer *lda,
-	 integer *ipiv, complex *work, integer *info);
- 
-/* Subroutine */ int csytrs_(char *uplo, integer *n, integer *nrhs, complex *
-	a, integer *lda, integer *ipiv, complex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int ctbcon_(char *norm, char *uplo, char *diag, integer *n, 
-	integer *kd, complex *ab, integer *ldab, real *rcond, complex *work, 
-	real *rwork, integer *info);
- 
-/* Subroutine */ int ctbrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, complex *ab, integer *ldab, complex *b, 
-	integer *ldb, complex *x, integer *ldx, real *ferr, real *berr, 
-	complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int ctbtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, complex *ab, integer *ldab, complex *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int ctgevc_(char *side, char *howmny, logical *select, 
-	integer *n, complex *a, integer *lda, complex *b, integer *ldb, 
-	complex *vl, integer *ldvl, complex *vr, integer *ldvr, integer *mm, 
-	integer *m, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int ctgex2_(logical *wantq, logical *wantz, integer *n, 
-	complex *a, integer *lda, complex *b, integer *ldb, complex *q, 
-	integer *ldq, complex *z__, integer *ldz, integer *j1, integer *info);
- 
-/* Subroutine */ int ctgexc_(logical *wantq, logical *wantz, integer *n, 
-	complex *a, integer *lda, complex *b, integer *ldb, complex *q, 
-	integer *ldq, complex *z__, integer *ldz, integer *ifst, integer *
-	ilst, integer *info);
- 
-/* Subroutine */ int ctgsen_(integer *ijob, logical *wantq, logical *wantz, 
-	logical *select, integer *n, complex *a, integer *lda, complex *b, 
-	integer *ldb, complex *alpha, complex *beta, complex *q, integer *ldq,
-	 complex *z__, integer *ldz, integer *m, real *pl, real *pr, real *
-	dif, complex *work, integer *lwork, integer *iwork, integer *liwork, 
-	integer *info);
- 
-/* Subroutine */ int ctgsja_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, integer *k, integer *l, complex *a, integer *
-	lda, complex *b, integer *ldb, real *tola, real *tolb, real *alpha, 
-	real *beta, complex *u, integer *ldu, complex *v, integer *ldv, 
-	complex *q, integer *ldq, complex *work, integer *ncycle, integer *
-	info);
- 
-/* Subroutine */ int ctgsna_(char *job, char *howmny, logical *select, 
-	integer *n, complex *a, integer *lda, complex *b, integer *ldb, 
-	complex *vl, integer *ldvl, complex *vr, integer *ldvr, real *s, real 
-	*dif, integer *mm, integer *m, complex *work, integer *lwork, integer 
-	*iwork, integer *info);
- 
-/* Subroutine */ int ctgsy2_(char *trans, integer *ijob, integer *m, integer *
-	n, complex *a, integer *lda, complex *b, integer *ldb, complex *c__, 
-	integer *ldc, complex *d__, integer *ldd, complex *e, integer *lde, 
-	complex *f, integer *ldf, real *scale, real *rdsum, real *rdscal, 
-	integer *info);
- 
-/* Subroutine */ int ctgsyl_(char *trans, integer *ijob, integer *m, integer *
-	n, complex *a, integer *lda, complex *b, integer *ldb, complex *c__, 
-	integer *ldc, complex *d__, integer *ldd, complex *e, integer *lde, 
-	complex *f, integer *ldf, real *scale, real *dif, complex *work, 
-	integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int ctpcon_(char *norm, char *uplo, char *diag, integer *n, 
-	complex *ap, real *rcond, complex *work, real *rwork, integer *info);
- 
-/* Subroutine */ int ctprfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, complex *ap, complex *b, integer *ldb, complex *x, 
-	integer *ldx, real *ferr, real *berr, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int ctptri_(char *uplo, char *diag, integer *n, complex *ap, 
-	integer *info);
- 
-/* Subroutine */ int ctptrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, complex *ap, complex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int ctrcon_(char *norm, char *uplo, char *diag, integer *n, 
-	complex *a, integer *lda, real *rcond, complex *work, real *rwork, 
-	integer *info);
- 
-/* Subroutine */ int ctrevc_(char *side, char *howmny, logical *select, 
-	integer *n, complex *t, integer *ldt, complex *vl, integer *ldvl, 
-	complex *vr, integer *ldvr, integer *mm, integer *m, complex *work, 
-	real *rwork, integer *info);
- 
-/* Subroutine */ int ctrexc_(char *compq, integer *n, complex *t, integer *
-	ldt, complex *q, integer *ldq, integer *ifst, integer *ilst, integer *
-	info);
- 
-/* Subroutine */ int ctrrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, complex *a, integer *lda, complex *b, integer *ldb, 
-	complex *x, integer *ldx, real *ferr, real *berr, complex *work, real 
-	*rwork, integer *info);
- 
-/* Subroutine */ int ctrsen_(char *job, char *compq, logical *select, integer 
-	*n, complex *t, integer *ldt, complex *q, integer *ldq, complex *w, 
-	integer *m, real *s, real *sep, complex *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int ctrsna_(char *job, char *howmny, logical *select, 
-	integer *n, complex *t, integer *ldt, complex *vl, integer *ldvl, 
-	complex *vr, integer *ldvr, real *s, real *sep, integer *mm, integer *
-	m, complex *work, integer *ldwork, real *rwork, integer *info);
- 
-/* Subroutine */ int ctrsyl_(char *trana, char *tranb, integer *isgn, integer 
-	*m, integer *n, complex *a, integer *lda, complex *b, integer *ldb, 
-	complex *c__, integer *ldc, real *scale, integer *info);
- 
-/* Subroutine */ int ctrti2_(char *uplo, char *diag, integer *n, complex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int ctrtri_(char *uplo, char *diag, integer *n, complex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int ctrtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, complex *a, integer *lda, complex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int ctzrqf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, integer *info);
- 
-/* Subroutine */ int ctzrzf_(integer *m, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cung2l_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cung2r_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cungbr_(char *vect, integer *m, integer *n, integer *k, 
-	complex *a, integer *lda, complex *tau, complex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int cunghr_(integer *n, integer *ilo, integer *ihi, complex *
-	a, integer *lda, complex *tau, complex *work, integer *lwork, integer 
-	*info);
- 
-/* Subroutine */ int cungl2_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cunglq_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cungql_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cungqr_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cungr2_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *info);
- 
-/* Subroutine */ int cungrq_(integer *m, integer *n, integer *k, complex *a, 
-	integer *lda, complex *tau, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cungtr_(char *uplo, integer *n, complex *a, integer *lda,
-	 complex *tau, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cunm2l_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *info);
- 
-/* Subroutine */ int cunm2r_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *info);
- 
-/* Subroutine */ int cunmbr_(char *vect, char *side, char *trans, integer *m, 
-	integer *n, integer *k, complex *a, integer *lda, complex *tau, 
-	complex *c__, integer *ldc, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cunmhr_(char *side, char *trans, integer *m, integer *n, 
-	integer *ilo, integer *ihi, complex *a, integer *lda, complex *tau, 
-	complex *c__, integer *ldc, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cunml2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *info);
- 
-/* Subroutine */ int cunmlq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cunmql_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cunmqr_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cunmr2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *info);
- 
-/* Subroutine */ int cunmr3_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, complex *a, integer *lda, complex *tau, 
-	complex *c__, integer *ldc, complex *work, integer *info);
- 
-/* Subroutine */ int cunmrq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cunmrz_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, complex *a, integer *lda, complex *tau, 
-	complex *c__, integer *ldc, complex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int cunmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, complex *a, integer *lda, complex *tau, complex *c__, 
-	integer *ldc, complex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int cupgtr_(char *uplo, integer *n, complex *ap, complex *
-	tau, complex *q, integer *ldq, complex *work, integer *info);
- 
-/* Subroutine */ int cupmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, complex *ap, complex *tau, complex *c__, integer *ldc, 
-	complex *work, integer *info);
- 
-/* Subroutine */ int dbdsdc_(char *uplo, char *compq, integer *n, doublereal *
-	d__, doublereal *e, doublereal *u, integer *ldu, doublereal *vt, 
-	integer *ldvt, doublereal *q, integer *iq, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dbdsqr_(char *uplo, integer *n, integer *ncvt, integer *
-	nru, integer *ncc, doublereal *d__, doublereal *e, doublereal *vt, 
-	integer *ldvt, doublereal *u, integer *ldu, doublereal *c__, integer *
-	ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int ddisna_(char *job, integer *m, integer *n, doublereal *
-	d__, doublereal *sep, integer *info);
- 
-/* Subroutine */ int dgbbrd_(char *vect, integer *m, integer *n, integer *ncc,
-	 integer *kl, integer *ku, doublereal *ab, integer *ldab, doublereal *
-	d__, doublereal *e, doublereal *q, integer *ldq, doublereal *pt, 
-	integer *ldpt, doublereal *c__, integer *ldc, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dgbcon_(char *norm, integer *n, integer *kl, integer *ku,
-	 doublereal *ab, integer *ldab, integer *ipiv, doublereal *anorm, 
-	doublereal *rcond, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dgbequ_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublereal *ab, integer *ldab, doublereal *r__, doublereal *c__, 
-	doublereal *rowcnd, doublereal *colcnd, doublereal *amax, integer *
-	info);
- 
-/* Subroutine */ int dgbrfs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, doublereal *ab, integer *ldab, doublereal *afb, 
-	integer *ldafb, integer *ipiv, doublereal *b, integer *ldb, 
-	doublereal *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dgbsv_(integer *n, integer *kl, integer *ku, integer *
-	nrhs, doublereal *ab, integer *ldab, integer *ipiv, doublereal *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int dgbsvx_(char *fact, char *trans, integer *n, integer *kl,
-	 integer *ku, integer *nrhs, doublereal *ab, integer *ldab, 
-	doublereal *afb, integer *ldafb, integer *ipiv, char *equed, 
-	doublereal *r__, doublereal *c__, doublereal *b, integer *ldb, 
-	doublereal *x, integer *ldx, doublereal *rcond, doublereal *ferr, 
-	doublereal *berr, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dgbtf2_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublereal *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dgbtrf_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublereal *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dgbtrs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, doublereal *ab, integer *ldab, integer *ipiv, 
-	doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dgebak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, doublereal *scale, integer *m, doublereal *v, integer *
-	ldv, integer *info);
- 
-/* Subroutine */ int dgebal_(char *job, integer *n, doublereal *a, integer *
-	lda, integer *ilo, integer *ihi, doublereal *scale, integer *info);
- 
-/* Subroutine */ int dgebd2_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *d__, doublereal *e, doublereal *tauq, doublereal *
-	taup, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgebrd_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *d__, doublereal *e, doublereal *tauq, doublereal *
-	taup, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgecon_(char *norm, integer *n, doublereal *a, integer *
-	lda, doublereal *anorm, doublereal *rcond, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dgeequ_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *r__, doublereal *c__, doublereal *rowcnd, doublereal 
-	*colcnd, doublereal *amax, integer *info);
- 
-/* Subroutine */ int dgees_(char *jobvs, char *sort, L_fp select, integer *n, 
-	doublereal *a, integer *lda, integer *sdim, doublereal *wr, 
-	doublereal *wi, doublereal *vs, integer *ldvs, doublereal *work, 
-	integer *lwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int dgeesx_(char *jobvs, char *sort, L_fp select, char *
-	sense, integer *n, doublereal *a, integer *lda, integer *sdim, 
-	doublereal *wr, doublereal *wi, doublereal *vs, integer *ldvs, 
-	doublereal *rconde, doublereal *rcondv, doublereal *work, integer *
-	lwork, integer *iwork, integer *liwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int dgeev_(char *jobvl, char *jobvr, integer *n, doublereal *
-	a, integer *lda, doublereal *wr, doublereal *wi, doublereal *vl, 
-	integer *ldvl, doublereal *vr, integer *ldvr, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dgeevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, doublereal *a, integer *lda, doublereal *wr, 
-	doublereal *wi, doublereal *vl, integer *ldvl, doublereal *vr, 
-	integer *ldvr, integer *ilo, integer *ihi, doublereal *scale, 
-	doublereal *abnrm, doublereal *rconde, doublereal *rcondv, doublereal 
-	*work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int dgegs_(char *jobvsl, char *jobvsr, integer *n, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
-	alphar, doublereal *alphai, doublereal *beta, doublereal *vsl, 
-	integer *ldvsl, doublereal *vsr, integer *ldvsr, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dgegv_(char *jobvl, char *jobvr, integer *n, doublereal *
-	a, integer *lda, doublereal *b, integer *ldb, doublereal *alphar, 
-	doublereal *alphai, doublereal *beta, doublereal *vl, integer *ldvl, 
-	doublereal *vr, integer *ldvr, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dgehd2_(integer *n, integer *ilo, integer *ihi, 
-	doublereal *a, integer *lda, doublereal *tau, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dgehrd_(integer *n, integer *ilo, integer *ihi, 
-	doublereal *a, integer *lda, doublereal *tau, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dgelq2_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgelqf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgels_(char *trans, integer *m, integer *n, integer *
-	nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgelsd_(integer *m, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
-	s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork,
-	 integer *iwork, integer *info);
- 
-/* Subroutine */ int dgelss_(integer *m, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
-	s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int dgelsx_(integer *m, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
-	jpvt, doublereal *rcond, integer *rank, doublereal *work, integer *
-	info);
- 
-/* Subroutine */ int dgelsy_(integer *m, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
-	jpvt, doublereal *rcond, integer *rank, doublereal *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int dgeql2_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgeqlf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgeqp3_(integer *m, integer *n, doublereal *a, integer *
-	lda, integer *jpvt, doublereal *tau, doublereal *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int dgeqpf_(integer *m, integer *n, doublereal *a, integer *
-	lda, integer *jpvt, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgeqr2_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgeqrf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgerfs_(char *trans, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *af, integer *ldaf, integer *
-	ipiv, doublereal *b, integer *ldb, doublereal *x, integer *ldx, 
-	doublereal *ferr, doublereal *berr, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dgerq2_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dgerqf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgesc2_(integer *n, doublereal *a, integer *lda, 
-	doublereal *rhs, integer *ipiv, integer *jpiv, doublereal *scale);
- 
-/* Subroutine */ int dgesdd_(char *jobz, integer *m, integer *n, doublereal *
-	a, integer *lda, doublereal *s, doublereal *u, integer *ldu, 
-	doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, integer 
-	*lda, integer *ipiv, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n, 
-	doublereal *a, integer *lda, doublereal *s, doublereal *u, integer *
-	ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dgesvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, doublereal *a, integer *lda, doublereal *af, integer *ldaf, 
-	integer *ipiv, char *equed, doublereal *r__, doublereal *c__, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	rcond, doublereal *ferr, doublereal *berr, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dgetc2_(integer *n, doublereal *a, integer *lda, integer 
-	*ipiv, integer *jpiv, integer *info);
- 
-/* Subroutine */ int dgetf2_(integer *m, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dgetrf_(integer *m, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dgetri_(integer *n, doublereal *a, integer *lda, integer 
-	*ipiv, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dgetrs_(char *trans, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int dggbak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, doublereal *lscale, doublereal *rscale, integer *m, 
-	doublereal *v, integer *ldv, integer *info);
- 
-/* Subroutine */ int dggbal_(char *job, integer *n, doublereal *a, integer *
-	lda, doublereal *b, integer *ldb, integer *ilo, integer *ihi, 
-	doublereal *lscale, doublereal *rscale, doublereal *work, integer *
-	info);
- 
-/* Subroutine */ int dgges_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	delctg, integer *n, doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, integer *sdim, doublereal *alphar, doublereal *alphai, 
-	doublereal *beta, doublereal *vsl, integer *ldvsl, doublereal *vsr, 
-	integer *ldvsr, doublereal *work, integer *lwork, logical *bwork, 
-	integer *info);
- 
-/* Subroutine */ int dggesx_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	delctg, char *sense, integer *n, doublereal *a, integer *lda, 
-	doublereal *b, integer *ldb, integer *sdim, doublereal *alphar, 
-	doublereal *alphai, doublereal *beta, doublereal *vsl, integer *ldvsl,
-	 doublereal *vsr, integer *ldvsr, doublereal *rconde, doublereal *
-	rcondv, doublereal *work, integer *lwork, integer *iwork, integer *
-	liwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int dggev_(char *jobvl, char *jobvr, integer *n, doublereal *
-	a, integer *lda, doublereal *b, integer *ldb, doublereal *alphar, 
-	doublereal *alphai, doublereal *beta, doublereal *vl, integer *ldvl, 
-	doublereal *vr, integer *ldvr, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dggevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, doublereal *alphar, doublereal *alphai, doublereal *
-	beta, doublereal *vl, integer *ldvl, doublereal *vr, integer *ldvr, 
-	integer *ilo, integer *ihi, doublereal *lscale, doublereal *rscale, 
-	doublereal *abnrm, doublereal *bbnrm, doublereal *rconde, doublereal *
-	rcondv, doublereal *work, integer *lwork, integer *iwork, logical *
-	bwork, integer *info);
- 
-/* Subroutine */ int dggglm_(integer *n, integer *m, integer *p, doublereal *
-	a, integer *lda, doublereal *b, integer *ldb, doublereal *d__, 
-	doublereal *x, doublereal *y, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dgghrd_(char *compq, char *compz, integer *n, integer *
-	ilo, integer *ihi, doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, doublereal *q, integer *ldq, doublereal *z__, integer *
-	ldz, integer *info);
- 
-/* Subroutine */ int dgglse_(integer *m, integer *n, integer *p, doublereal *
-	a, integer *lda, doublereal *b, integer *ldb, doublereal *c__, 
-	doublereal *d__, doublereal *x, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dggqrf_(integer *n, integer *m, integer *p, doublereal *
-	a, integer *lda, doublereal *taua, doublereal *b, integer *ldb, 
-	doublereal *taub, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dggrqf_(integer *m, integer *p, integer *n, doublereal *
-	a, integer *lda, doublereal *taua, doublereal *b, integer *ldb, 
-	doublereal *taub, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dggsvd_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *n, integer *p, integer *k, integer *l, doublereal *a, 
-	integer *lda, doublereal *b, integer *ldb, doublereal *alpha, 
-	doublereal *beta, doublereal *u, integer *ldu, doublereal *v, integer 
-	*ldv, doublereal *q, integer *ldq, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dggsvp_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, doublereal *tola, doublereal *tolb, integer *k, integer 
-	*l, doublereal *u, integer *ldu, doublereal *v, integer *ldv, 
-	doublereal *q, integer *ldq, integer *iwork, doublereal *tau, 
-	doublereal *work, integer *info);
- 
-/* Subroutine */ int dgtcon_(char *norm, integer *n, doublereal *dl, 
-	doublereal *d__, doublereal *du, doublereal *du2, integer *ipiv, 
-	doublereal *anorm, doublereal *rcond, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dgtrfs_(char *trans, integer *n, integer *nrhs, 
-	doublereal *dl, doublereal *d__, doublereal *du, doublereal *dlf, 
-	doublereal *df, doublereal *duf, doublereal *du2, integer *ipiv, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	ferr, doublereal *berr, doublereal *work, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int dgtsv_(integer *n, integer *nrhs, doublereal *dl, 
-	doublereal *d__, doublereal *du, doublereal *b, integer *ldb, integer 
-	*info);
- 
-/* Subroutine */ int dgtsvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, doublereal *dl, doublereal *d__, doublereal *du, doublereal *
-	dlf, doublereal *df, doublereal *duf, doublereal *du2, integer *ipiv, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	rcond, doublereal *ferr, doublereal *berr, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dgttrf_(integer *n, doublereal *dl, doublereal *d__, 
-	doublereal *du, doublereal *du2, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dgttrs_(char *trans, integer *n, integer *nrhs, 
-	doublereal *dl, doublereal *d__, doublereal *du, doublereal *du2, 
-	integer *ipiv, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dgtts2_(integer *itrans, integer *n, integer *nrhs, 
-	doublereal *dl, doublereal *d__, doublereal *du, doublereal *du2, 
-	integer *ipiv, doublereal *b, integer *ldb);
- 
-/* Subroutine */ int dhgeqz_(char *job, char *compq, char *compz, integer *n, 
-	integer *ilo, integer *ihi, doublereal *a, integer *lda, doublereal *
-	b, integer *ldb, doublereal *alphar, doublereal *alphai, doublereal *
-	beta, doublereal *q, integer *ldq, doublereal *z__, integer *ldz, 
-	doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dhsein_(char *side, char *eigsrc, char *initv, logical *
-	select, integer *n, doublereal *h__, integer *ldh, doublereal *wr, 
-	doublereal *wi, doublereal *vl, integer *ldvl, doublereal *vr, 
-	integer *ldvr, integer *mm, integer *m, doublereal *work, integer *
-	ifaill, integer *ifailr, integer *info);
- 
-/* Subroutine */ int dhseqr_(char *job, char *compz, integer *n, integer *ilo,
-	 integer *ihi, doublereal *h__, integer *ldh, doublereal *wr, 
-	doublereal *wi, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dlabad_(doublereal *smalll, doublereal *large); /* !? */
- 
-/* Subroutine */ int dlabrd_(integer *m, integer *n, integer *nb, doublereal *
-	a, integer *lda, doublereal *d__, doublereal *e, doublereal *tauq, 
-	doublereal *taup, doublereal *x, integer *ldx, doublereal *y, integer 
-	*ldy);
- 
-/* Subroutine */ int dlacon_(integer *n, doublereal *v, doublereal *x, 
-	integer *isgn, doublereal *est, integer *kase);
- 
-/* Subroutine */ int dlacpy_(char *uplo, integer *m, integer *n, doublereal *
-	a, integer *lda, doublereal *b, integer *ldb);
- 
-/* Subroutine */ int dladiv_(doublereal *a, doublereal *b, doublereal *c__, 
-	doublereal *d__, doublereal *p, doublereal *q);
- 
-/* Subroutine */ int dlae2_(doublereal *a, doublereal *b, doublereal *c__, 
-	doublereal *rt1, doublereal *rt2);
- 
-/* Subroutine */ int dlaebz_(integer *ijob, integer *nitmax, integer *n, 
-	integer *mmax, integer *minp, integer *nbmin, doublereal *abstol, 
-	doublereal *reltol, doublereal *pivmin, doublereal *d__, doublereal *
-	e, doublereal *e2, integer *nval, doublereal *ab, doublereal *c__, 
-	integer *mout, integer *nab, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dlaed0_(integer *icompq, integer *qsiz, integer *n, 
-	doublereal *d__, doublereal *e, doublereal *q, integer *ldq, 
-	doublereal *qstore, integer *ldqs, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dlaed1_(integer *n, doublereal *d__, doublereal *q, 
-	integer *ldq, integer *indxq, doublereal *rho, integer *cutpnt, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlaed2_(integer *k, integer *n, integer *n1, doublereal *
-	d__, doublereal *q, integer *ldq, integer *indxq, doublereal *rho, 
-	doublereal *z__, doublereal *dlamda, doublereal *w, doublereal *q2, 
-	integer *indx, integer *indxc, integer *indxp, integer *coltyp, 
-	integer *info);
- 
-/* Subroutine */ int dlaed3_(integer *k, integer *n, integer *n1, doublereal *
-	d__, doublereal *q, integer *ldq, doublereal *rho, doublereal *dlamda,
-	 doublereal *q2, integer *indx, integer *ctot, doublereal *w, 
-	doublereal *s, integer *info);
- 
-/* Subroutine */ int dlaed4_(integer *n, integer *i__, doublereal *d__, 
-	doublereal *z__, doublereal *delta, doublereal *rho, doublereal *dlam,
-	 integer *info);
- 
-/* Subroutine */ int dlaed5_(integer *i__, doublereal *d__, doublereal *z__, 
-	doublereal *delta, doublereal *rho, doublereal *dlam);
- 
-/* Subroutine */ int dlaed6_(integer *kniter, logical *orgati, doublereal *
-	rho, doublereal *d__, doublereal *z__, doublereal *finit, doublereal *
-	tau, integer *info);
- 
-/* Subroutine */ int dlaed7_(integer *icompq, integer *n, integer *qsiz, 
-	integer *tlvls, integer *curlvl, integer *curpbm, doublereal *d__, 
-	doublereal *q, integer *ldq, integer *indxq, doublereal *rho, integer 
-	*cutpnt, doublereal *qstore, integer *qptr, integer *prmptr, integer *
-	perm, integer *givptr, integer *givcol, doublereal *givnum, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlaed8_(integer *icompq, integer *k, integer *n, integer 
-	*qsiz, doublereal *d__, doublereal *q, integer *ldq, integer *indxq, 
-	doublereal *rho, integer *cutpnt, doublereal *z__, doublereal *dlamda,
-	 doublereal *q2, integer *ldq2, doublereal *w, integer *perm, integer 
-	*givptr, integer *givcol, doublereal *givnum, integer *indxp, integer 
-	*indx, integer *info);
- 
-/* Subroutine */ int dlaed9_(integer *k, integer *kstart, integer *kstop, 
-	integer *n, doublereal *d__, doublereal *q, integer *ldq, doublereal *
-	rho, doublereal *dlamda, doublereal *w, doublereal *s, integer *lds, 
-	integer *info);
- 
-/* Subroutine */ int dlaeda_(integer *n, integer *tlvls, integer *curlvl, 
-	integer *curpbm, integer *prmptr, integer *perm, integer *givptr, 
-	integer *givcol, doublereal *givnum, doublereal *q, integer *qptr, 
-	doublereal *z__, doublereal *ztemp, integer *info);
- 
-/* Subroutine */ int dlaein_(logical *rightv, logical *noinit, integer *n, 
-	doublereal *h__, integer *ldh, doublereal *wr, doublereal *wi, 
-	doublereal *vr, doublereal *vi, doublereal *b, integer *ldb, 
-	doublereal *work, doublereal *eps3, doublereal *smlnum, doublereal *
-	bignum, integer *info);
- 
-/* Subroutine */ int dlaev2_(doublereal *a, doublereal *b, doublereal *c__, 
-	doublereal *rt1, doublereal *rt2, doublereal *cs1, doublereal *sn1);
- 
-/* Subroutine */ int dlaexc_(logical *wantq, integer *n, doublereal *t, 
-	integer *ldt, doublereal *q, integer *ldq, integer *j1, integer *n1, 
-	integer *n2, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlag2_(doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, doublereal *safmin, doublereal *scale1, doublereal *
-	scale2, doublereal *wr1, doublereal *wr2, doublereal *wi);
- 
-/* Subroutine */ int dlags2_(logical *upper, doublereal *a1, doublereal *a2, 
-	doublereal *a3, doublereal *b1, doublereal *b2, doublereal *b3, 
-	doublereal *csu, doublereal *snu, doublereal *csv, doublereal *snv, 
-	doublereal *csq, doublereal *snq);
- 
-/* Subroutine */ int dlagtf_(integer *n, doublereal *a, doublereal *lambda, 
-	doublereal *b, doublereal *c__, doublereal *tol, doublereal *d__, 
-	integer *in, integer *info);
- 
-/* Subroutine */ int dlagtm_(char *trans, integer *n, integer *nrhs, 
-	doublereal *alpha, doublereal *dl, doublereal *d__, doublereal *du, 
-	doublereal *x, integer *ldx, doublereal *beta, doublereal *b, integer 
-	*ldb);
- 
-/* Subroutine */ int dlagts_(integer *job, integer *n, doublereal *a, 
-	doublereal *b, doublereal *c__, doublereal *d__, integer *in, 
-	doublereal *y, doublereal *tol, integer *info);
- 
-/* Subroutine */ int dlagv2_(doublereal *a, integer *lda, doublereal *b, 
-	integer *ldb, doublereal *alphar, doublereal *alphai, doublereal *
-	beta, doublereal *csl, doublereal *snl, doublereal *csr, doublereal *
-	snr);
- 
-/* Subroutine */ int dlahqr_(logical *wantt, logical *wantz, integer *n, 
-	integer *ilo, integer *ihi, doublereal *h__, integer *ldh, doublereal 
-	*wr, doublereal *wi, integer *iloz, integer *ihiz, doublereal *z__, 
-	integer *ldz, integer *info);
- 
-/* Subroutine */ int dlahrd_(integer *n, integer *k, integer *nb, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *t, integer *ldt, 
-	doublereal *y, integer *ldy);
- 
-/* Subroutine */ int dlaic1_(integer *job, integer *j, doublereal *x, 
-	doublereal *sest, doublereal *w, doublereal *gamma, doublereal *
-	sestpr, doublereal *s, doublereal *c__);
- 
-/* Subroutine */ int dlaln2_(logical *ltrans, integer *na, integer *nw, 
-	doublereal *smin, doublereal *ca, doublereal *a, integer *lda, 
-	doublereal *d1, doublereal *d2, doublereal *b, integer *ldb, 
-	doublereal *wr, doublereal *wi, doublereal *x, integer *ldx, 
-	doublereal *scale, doublereal *xnorm, integer *info);
- 
-/* Subroutine */ int dlals0_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *nrhs, doublereal *b, integer *ldb, doublereal 
-	*bx, integer *ldbx, integer *perm, integer *givptr, integer *givcol, 
-	integer *ldgcol, doublereal *givnum, integer *ldgnum, doublereal *
-	poles, doublereal *difl, doublereal *difr, doublereal *z__, integer *
-	k, doublereal *c__, doublereal *s, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlalsa_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *nrhs, doublereal *b, integer *ldb, doublereal *bx, integer *
-	ldbx, doublereal *u, integer *ldu, doublereal *vt, integer *k, 
-	doublereal *difl, doublereal *difr, doublereal *z__, doublereal *
-	poles, integer *givptr, integer *givcol, integer *ldgcol, integer *
-	perm, doublereal *givnum, doublereal *c__, doublereal *s, doublereal *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlalsd_(char *uplo, integer *smlsiz, integer *n, integer 
-	*nrhs, doublereal *d__, doublereal *e, doublereal *b, integer *ldb, 
-	doublereal *rcond, integer *rank, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dlamc1_(integer *beta, integer *t, logical *rnd, logical 
-	*ieee1);
- 
-/* Subroutine */ int dlamc2_(integer *beta, integer *t, logical *rnd, 
-	doublereal *eps, integer *emin, doublereal *rmin, integer *emax, 
-	doublereal *rmax);
- 
-/* Subroutine */ int dlamc4_(integer *emin, doublereal *start, integer *base);
- 
-/* Subroutine */ int dlamc5_(integer *beta, integer *p, integer *emin, 
-	logical *ieee, integer *emax, doublereal *rmax);
- 
-/* Subroutine */ int dlamrg_(integer *n1, integer *n2, doublereal *a, integer 
-	*dtrd1, integer *dtrd2, integer *index);
- 
-/* Subroutine */ int dlanv2_(doublereal *a, doublereal *b, doublereal *c__, 
-	doublereal *d__, doublereal *rt1r, doublereal *rt1i, doublereal *rt2r,
-	 doublereal *rt2i, doublereal *cs, doublereal *sn);
- 
-/* Subroutine */ int dlapll_(integer *n, doublereal *x, integer *incx, 
-	doublereal *y, integer *incy, doublereal *ssmin);
- 
-/* Subroutine */ int dlapmt_(logical *forwrd, integer *m, integer *n, 
-	doublereal *x, integer *ldx, integer *k);
- 
-/* Subroutine */ int dlaqgb_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublereal *ab, integer *ldab, doublereal *r__, doublereal *c__, 
-	doublereal *rowcnd, doublereal *colcnd, doublereal *amax, char *equed);
- 
-/* Subroutine */ int dlaqge_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *r__, doublereal *c__, doublereal *rowcnd, doublereal 
-	*colcnd, doublereal *amax, char *equed);
- 
-/* Subroutine */ int dlaqp2_(integer *m, integer *n, integer *offset, 
-	doublereal *a, integer *lda, integer *jpvt, doublereal *tau, 
-	doublereal *vn1, doublereal *vn2, doublereal *work);
- 
-/* Subroutine */ int dlaqps_(integer *m, integer *n, integer *offset, integer 
-	*nb, integer *kb, doublereal *a, integer *lda, integer *jpvt, 
-	doublereal *tau, doublereal *vn1, doublereal *vn2, doublereal *auxv, 
-	doublereal *f, integer *ldf);
- 
-/* Subroutine */ int dlaqsb_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, doublereal *s, doublereal *scond, doublereal *amax,
-	 char *equed);
- 
-/* Subroutine */ int dlaqsp_(char *uplo, integer *n, doublereal *ap, 
-	doublereal *s, doublereal *scond, doublereal *amax, char *equed);
- 
-/* Subroutine */ int dlaqsy_(char *uplo, integer *n, doublereal *a, integer *
-	lda, doublereal *s, doublereal *scond, doublereal *amax, char *equed);
- 
-/* Subroutine */ int dlaqtr_(logical *ltran, logical *lreal, integer *n, 
-	doublereal *t, integer *ldt, doublereal *b, doublereal *w, doublereal 
-	*scale, doublereal *x, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlar1v_(integer *n, integer *b1, integer *bn, doublereal 
-	*sigma, doublereal *d__, doublereal *l, doublereal *ld, doublereal *
-	lld, doublereal *gersch, doublereal *z__, doublereal *ztz, doublereal 
-	*mingma, integer *r__, integer *isuppz, doublereal *work);
- 
-/* Subroutine */ int dlar2v_(integer *n, doublereal *x, doublereal *y, 
-	doublereal *z__, integer *incx, doublereal *c__, doublereal *s, 
-	integer *incc);
- 
-/* Subroutine */ int dlarf_(char *side, integer *m, integer *n, doublereal *v,
-	 integer *incv, doublereal *tau, doublereal *c__, integer *ldc, 
-	doublereal *work);
- 
-/* Subroutine */ int dlarfb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, doublereal *v, integer *
-	ldv, doublereal *t, integer *ldt, doublereal *c__, integer *ldc, 
-	doublereal *work, integer *ldwork);
- 
-/* Subroutine */ int dlarfg_(integer *n, doublereal *alpha, doublereal *x, 
-	integer *incx, doublereal *tau);
- 
-/* Subroutine */ int dlarft_(char *direct, char *storev, integer *n, integer *
-	k, doublereal *v, integer *ldv, doublereal *tau, doublereal *t, 
-	integer *ldt);
- 
-/* Subroutine */ int dlarfx_(char *side, integer *m, integer *n, doublereal *
-	v, doublereal *tau, doublereal *c__, integer *ldc, doublereal *work);
- 
-/* Subroutine */ int dlargv_(integer *n, doublereal *x, integer *incx, 
-	doublereal *y, integer *incy, doublereal *c__, integer *incc);
- 
-/* Subroutine */ int dlarnv_(integer *idist, integer *iseed, integer *n, 
-	doublereal *x);
- 
-/* Subroutine */ int dlarrb_(integer *n, doublereal *d__, doublereal *l, 
-	doublereal *ld, doublereal *lld, integer *ifirst, integer *ilast, 
-	doublereal *sigma, doublereal *reltol, doublereal *w, doublereal *
-	wgap, doublereal *werr, doublereal *work, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int dlarre_(integer *n, doublereal *d__, doublereal *e, 
-	doublereal *tol, integer *nsplit, integer *isplit, integer *m, 
-	doublereal *w, doublereal *woff, doublereal *gersch, doublereal *work,
-	 integer *info);
- 
-/* Subroutine */ int dlarrf_(integer *n, doublereal *d__, doublereal *l, 
-	doublereal *ld, doublereal *lld, integer *ifirst, integer *ilast, 
-	doublereal *w, doublereal *dplus, doublereal *lplus, doublereal *work,
-	 integer *iwork, integer *info);
- 
-/* Subroutine */ int dlarrv_(integer *n, doublereal *d__, doublereal *l, 
-	integer *isplit, integer *m, doublereal *w, integer *iblock, 
-	doublereal *gersch, doublereal *tol, doublereal *z__, integer *ldz, 
-	integer *isuppz, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlartg_(doublereal *f, doublereal *g, doublereal *cs, 
-	doublereal *sn, doublereal *r__);
- 
-/* Subroutine */ int dlartv_(integer *n, doublereal *x, integer *incx, 
-	doublereal *y, integer *incy, doublereal *c__, doublereal *s, integer 
-	*incc);
- 
-/* Subroutine */ int dlaruv_(integer *iseed, integer *n, doublereal *x);
- 
-/* Subroutine */ int dlarz_(char *side, integer *m, integer *n, integer *l, 
-	doublereal *v, integer *incv, doublereal *tau, doublereal *c__, 
-	integer *ldc, doublereal *work);
- 
-/* Subroutine */ int dlarzb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, integer *l, doublereal *v,
-	 integer *ldv, doublereal *t, integer *ldt, doublereal *c__, integer *
-	ldc, doublereal *work, integer *ldwork);
- 
-/* Subroutine */ int dlarzt_(char *direct, char *storev, integer *n, integer *
-	k, doublereal *v, integer *ldv, doublereal *tau, doublereal *t, 
-	integer *ldt);
- 
-/* Subroutine */ int dlas2_(doublereal *f, doublereal *g, doublereal *h__, 
-	doublereal *ssmin, doublereal *ssmax);
- 
-/* Subroutine */ int dlascl_(char *type__, integer *kl, integer *ku, 
-	doublereal *cfrom, doublereal *cto, integer *m, integer *n, 
-	doublereal *a, integer *lda, integer *info);
- 
-/* Subroutine */ int dlasd0_(integer *n, integer *sqre, doublereal *d__, 
-	doublereal *e, doublereal *u, integer *ldu, doublereal *vt, integer *
-	ldvt, integer *smlsiz, integer *iwork, doublereal *work, integer *
-	info);
- 
-/* Subroutine */ int dlasd1_(integer *nl, integer *nr, integer *sqre, 
-	doublereal *d__, doublereal *alpha, doublereal *beta, doublereal *u, 
-	integer *ldu, doublereal *vt, integer *ldvt, integer *idxq, integer *
-	iwork, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlasd2_(integer *nl, integer *nr, integer *sqre, integer 
-	*k, doublereal *d__, doublereal *z__, doublereal *alpha, doublereal *
-	beta, doublereal *u, integer *ldu, doublereal *vt, integer *ldvt, 
-	doublereal *dsigma, doublereal *u2, integer *ldu2, doublereal *vt2, 
-	integer *ldvt2, integer *idxp, integer *idx, integer *idxc, integer *
-	idxq, integer *coltyp, integer *info);
- 
-/* Subroutine */ int dlasd3_(integer *nl, integer *nr, integer *sqre, integer 
-	*k, doublereal *d__, doublereal *q, integer *ldq, doublereal *dsigma, 
-	doublereal *u, integer *ldu, doublereal *u2, integer *ldu2, 
-	doublereal *vt, integer *ldvt, doublereal *vt2, integer *ldvt2, 
-	integer *idxc, integer *ctot, doublereal *z__, integer *info);
- 
-/* Subroutine */ int dlasd4_(integer *n, integer *i__, doublereal *d__, 
-	doublereal *z__, doublereal *delta, doublereal *rho, doublereal *
-	sigma, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlasd5_(integer *i__, doublereal *d__, doublereal *z__, 
-	doublereal *delta, doublereal *rho, doublereal *dsigma, doublereal *
-	work);
- 
-/* Subroutine */ int dlasd6_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, doublereal *d__, doublereal *vf, doublereal *vl, 
-	doublereal *alpha, doublereal *beta, integer *idxq, integer *perm, 
-	integer *givptr, integer *givcol, integer *ldgcol, doublereal *givnum,
-	 integer *ldgnum, doublereal *poles, doublereal *difl, doublereal *
-	difr, doublereal *z__, integer *k, doublereal *c__, doublereal *s, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlasd7_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *k, doublereal *d__, doublereal *z__, 
-	doublereal *zw, doublereal *vf, doublereal *vfw, doublereal *vl, 
-	doublereal *vlw, doublereal *alpha, doublereal *beta, doublereal *
-	dsigma, integer *idx, integer *idxp, integer *idxq, integer *perm, 
-	integer *givptr, integer *givcol, integer *ldgcol, doublereal *givnum,
-	 integer *ldgnum, doublereal *c__, doublereal *s, integer *info);
- 
-/* Subroutine */ int dlasd8_(integer *icompq, integer *k, doublereal *d__, 
-	doublereal *z__, doublereal *vf, doublereal *vl, doublereal *difl, 
-	doublereal *difr, integer *lddifr, doublereal *dsigma, doublereal *
-	work, integer *info);
- 
-/* Subroutine */ int dlasd9_(integer *icompq, integer *ldu, integer *k, 
-	doublereal *d__, doublereal *z__, doublereal *vf, doublereal *vl, 
-	doublereal *difl, doublereal *difr, doublereal *dsigma, doublereal *
-	work, integer *info);
- 
-/* Subroutine */ int dlasda_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *sqre, doublereal *d__, doublereal *e, doublereal *u, integer 
-	*ldu, doublereal *vt, integer *k, doublereal *difl, doublereal *difr, 
-	doublereal *z__, doublereal *poles, integer *givptr, integer *givcol, 
-	integer *ldgcol, integer *perm, doublereal *givnum, doublereal *c__, 
-	doublereal *s, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dlasdq_(char *uplo, integer *sqre, integer *n, integer *
-	ncvt, integer *nru, integer *ncc, doublereal *d__, doublereal *e, 
-	doublereal *vt, integer *ldvt, doublereal *u, integer *ldu, 
-	doublereal *c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dlasdt_(integer *n, integer *lvl, integer *nd, integer *
-	inode, integer *ndiml, integer *ndimr, integer *msub);
- 
-/* Subroutine */ int dlaset_(char *uplo, integer *m, integer *n, doublereal *
-	alpha, doublereal *beta, doublereal *a, integer *lda);
- 
-/* Subroutine */ int dlasq1_(integer *n, doublereal *d__, doublereal *e, 
-	doublereal *work, integer *info);
- 
-/* Subroutine */ int dlasq2_(integer *n, doublereal *z__, integer *info);
- 
-/* Subroutine */ int dlasq3_(integer *i0, integer *n0, doublereal *z__, 
-	integer *pp, doublereal *dmin__, doublereal *sigma, doublereal *desig,
-	 doublereal *qmax, integer *nfail, integer *iter, integer *ndiv, 
-	logical *ieee);
- 
-/* Subroutine */ int dlasq4_(integer *i0, integer *n0, doublereal *z__, 
-	integer *pp, integer *n0in, doublereal *dmin__, doublereal *dmin1, 
-	doublereal *dmin2, doublereal *dn, doublereal *dn1, doublereal *dn2, 
-	doublereal *tau, integer *ttype);
- 
-/* Subroutine */ int dlasq5_(integer *i0, integer *n0, doublereal *z__, 
-	integer *pp, doublereal *tau, doublereal *dmin__, doublereal *dmin1, 
-	doublereal *dmin2, doublereal *dn, doublereal *dnm1, doublereal *dnm2,
-	 logical *ieee);
- 
-/* Subroutine */ int dlasq6_(integer *i0, integer *n0, doublereal *z__, 
-	integer *pp, doublereal *dmin__, doublereal *dmin1, doublereal *dmin2,
-	 doublereal *dn, doublereal *dnm1, doublereal *dnm2);
- 
-/* Subroutine */ int dlasr_(char *side, char *pivot, char *direct, integer *m,
-	 integer *n, doublereal *c__, doublereal *s, doublereal *a, integer *
-	lda);
- 
-/* Subroutine */ int dlasrt_(char *id, integer *n, doublereal *d__, integer *
-	info);
- 
-/* Subroutine */ int dlassq_(integer *n, doublereal *x, integer *incx, 
-	doublereal *scale, doublereal *sumsq);
- 
-/* Subroutine */ int dlasv2_(doublereal *f, doublereal *g, doublereal *h__, 
-	doublereal *ssmin, doublereal *ssmax, doublereal *snr, doublereal *
-	csr, doublereal *snl, doublereal *csl);
- 
-/* Subroutine */ int dlaswp_(integer *n, doublereal *a, integer *lda, integer 
-	*k1, integer *k2, integer *ipiv, integer *incx);
- 
-/* Subroutine */ int dlasy2_(logical *ltranl, logical *ltranr, integer *isgn, 
-	integer *n1, integer *n2, doublereal *tl, integer *ldtl, doublereal *
-	tr, integer *ldtr, doublereal *b, integer *ldb, doublereal *scale, 
-	doublereal *x, integer *ldx, doublereal *xnorm, integer *info);
- 
-/* Subroutine */ int dlasyf_(char *uplo, integer *n, integer *nb, integer *kb,
-	 doublereal *a, integer *lda, integer *ipiv, doublereal *w, integer *
-	ldw, integer *info);
- 
-/* Subroutine */ int dlatbs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, integer *kd, doublereal *ab, integer *ldab, 
-	doublereal *x, doublereal *scale, doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int dlatdf_(integer *ijob, integer *n, doublereal *z__, 
-	integer *ldz, doublereal *rhs, doublereal *rdsum, doublereal *rdscal, 
-	integer *ipiv, integer *jpiv);
- 
-/* Subroutine */ int dlatps_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, doublereal *ap, doublereal *x, doublereal *scale, 
-	doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int dlatrd_(char *uplo, integer *n, integer *nb, doublereal *
-	a, integer *lda, doublereal *e, doublereal *tau, doublereal *w, 
-	integer *ldw);
- 
-/* Subroutine */ int dlatrs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, doublereal *a, integer *lda, doublereal *x, 
-	doublereal *scale, doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int dlatrz_(integer *m, integer *n, integer *l, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work);
- 
-/* Subroutine */ int dlatzm_(char *side, integer *m, integer *n, doublereal *
-	v, integer *incv, doublereal *tau, doublereal *c1, doublereal *c2, 
-	integer *ldc, doublereal *work);
- 
-/* Subroutine */ int dlauu2_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *info);
- 
-/* Subroutine */ int dlauum_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *info);
- 
-/* Subroutine */ int dopgtr_(char *uplo, integer *n, doublereal *ap, 
-	doublereal *tau, doublereal *q, integer *ldq, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dopmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, doublereal *ap, doublereal *tau, doublereal *c__, integer 
-	*ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorg2l_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorg2r_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorgbr_(char *vect, integer *m, integer *n, integer *k, 
-	doublereal *a, integer *lda, doublereal *tau, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dorghr_(integer *n, integer *ilo, integer *ihi, 
-	doublereal *a, integer *lda, doublereal *tau, doublereal *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int dorgl2_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorglq_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dorgql_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dorgqr_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dorgr2_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorgrq_(integer *m, integer *n, integer *k, doublereal *
-	a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dorgtr_(char *uplo, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dorm2l_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dorm2r_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dormbr_(char *vect, char *side, char *trans, integer *m, 
-	integer *n, integer *k, doublereal *a, integer *lda, doublereal *tau, 
-	doublereal *c__, integer *ldc, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dormhr_(char *side, char *trans, integer *m, integer *n, 
-	integer *ilo, integer *ihi, doublereal *a, integer *lda, doublereal *
-	tau, doublereal *c__, integer *ldc, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dorml2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dormlq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dormql_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dormqr_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dormr2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dormr3_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, doublereal *a, integer *lda, doublereal *tau, 
-	doublereal *c__, integer *ldc, doublereal *work, integer *info);
- 
-/* Subroutine */ int dormrq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dormrz_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, doublereal *a, integer *lda, doublereal *tau, 
-	doublereal *c__, integer *ldc, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dormtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, doublereal *a, integer *lda, doublereal *tau, doublereal *
-	c__, integer *ldc, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dpbcon_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, doublereal *anorm, doublereal *rcond, doublereal *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dpbequ_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, doublereal *s, doublereal *scond, doublereal *amax,
-	 integer *info);
- 
-/* Subroutine */ int dpbrfs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublereal *ab, integer *ldab, doublereal *afb, integer *ldafb, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	ferr, doublereal *berr, doublereal *work, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int dpbstf_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int dpbsv_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublereal *ab, integer *ldab, doublereal *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int dpbsvx_(char *fact, char *uplo, integer *n, integer *kd, 
-	integer *nrhs, doublereal *ab, integer *ldab, doublereal *afb, 
-	integer *ldafb, char *equed, doublereal *s, doublereal *b, integer *
-	ldb, doublereal *x, integer *ldx, doublereal *rcond, doublereal *ferr,
-	 doublereal *berr, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dpbtf2_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int dpbtrf_(char *uplo, integer *n, integer *kd, doublereal *
-	ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int dpbtrs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublereal *ab, integer *ldab, doublereal *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int dpocon_(char *uplo, integer *n, doublereal *a, integer *
-	lda, doublereal *anorm, doublereal *rcond, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dpoequ_(integer *n, doublereal *a, integer *lda, 
-	doublereal *s, doublereal *scond, doublereal *amax, integer *info);
- 
-/* Subroutine */ int dporfs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *af, integer *ldaf, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	ferr, doublereal *berr, doublereal *work, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int dposv_(char *uplo, integer *n, integer *nrhs, doublereal 
-	*a, integer *lda, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dposvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublereal *a, integer *lda, doublereal *af, integer *ldaf, 
-	char *equed, doublereal *s, doublereal *b, integer *ldb, doublereal *
-	x, integer *ldx, doublereal *rcond, doublereal *ferr, doublereal *
-	berr, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dpotf2_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *info);
- 
-/* Subroutine */ int dpotrf_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *info);
- 
-/* Subroutine */ int dpotri_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *info);
- 
-/* Subroutine */ int dpotrs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int dppcon_(char *uplo, integer *n, doublereal *ap, 
-	doublereal *anorm, doublereal *rcond, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dppequ_(char *uplo, integer *n, doublereal *ap, 
-	doublereal *s, doublereal *scond, doublereal *amax, integer *info);
- 
-/* Subroutine */ int dpprfs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *ap, doublereal *afp, doublereal *b, integer *ldb, 
-	doublereal *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dppsv_(char *uplo, integer *n, integer *nrhs, doublereal 
-	*ap, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dppsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublereal *ap, doublereal *afp, char *equed, doublereal *s, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	rcond, doublereal *ferr, doublereal *berr, doublereal *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dpptrf_(char *uplo, integer *n, doublereal *ap, integer *
-	info);
- 
-/* Subroutine */ int dpptri_(char *uplo, integer *n, doublereal *ap, integer *
-	info);
- 
-/* Subroutine */ int dpptrs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *ap, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dptcon_(integer *n, doublereal *d__, doublereal *e, 
-	doublereal *anorm, doublereal *rcond, doublereal *work, integer *info);
- 
-/* Subroutine */ int dpteqr_(char *compz, integer *n, doublereal *d__, 
-	doublereal *e, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dptrfs_(integer *n, integer *nrhs, doublereal *d__, 
-	doublereal *e, doublereal *df, doublereal *ef, doublereal *b, integer 
-	*ldb, doublereal *x, integer *ldx, doublereal *ferr, doublereal *berr,
-	 doublereal *work, integer *info);
- 
-/* Subroutine */ int dptsv_(integer *n, integer *nrhs, doublereal *d__, 
-	doublereal *e, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dptsvx_(char *fact, integer *n, integer *nrhs, 
-	doublereal *d__, doublereal *e, doublereal *df, doublereal *ef, 
-	doublereal *b, integer *ldb, doublereal *x, integer *ldx, doublereal *
-	rcond, doublereal *ferr, doublereal *berr, doublereal *work, integer *
-	info);
- 
-/* Subroutine */ int dpttrf_(integer *n, doublereal *d__, doublereal *e, 
-	integer *info);
- 
-/* Subroutine */ int dpttrs_(integer *n, integer *nrhs, doublereal *d__, 
-	doublereal *e, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dptts2_(integer *n, integer *nrhs, doublereal *d__, 
-	doublereal *e, doublereal *b, integer *ldb);
- 
-/* Subroutine */ int drscl_(integer *n, doublereal *sa, doublereal *sx, 
-	integer *incx);
- 
-/* Subroutine */ int dsbev_(char *jobz, char *uplo, integer *n, integer *kd, 
-	doublereal *ab, integer *ldab, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *info);
- 
-/* Subroutine */ int dsbevd_(char *jobz, char *uplo, integer *n, integer *kd, 
-	doublereal *ab, integer *ldab, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int dsbevx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *kd, doublereal *ab, integer *ldab, doublereal *q, integer *
-	ldq, doublereal *vl, doublereal *vu, integer *il, integer *iu, 
-	doublereal *abstol, integer *m, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *iwork, integer *ifail, 
-	integer *info);
- 
-/* Subroutine */ int dsbgst_(char *vect, char *uplo, integer *n, integer *ka, 
-	integer *kb, doublereal *ab, integer *ldab, doublereal *bb, integer *
-	ldbb, doublereal *x, integer *ldx, doublereal *work, integer *info);
- 
-/* Subroutine */ int dsbgv_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, doublereal *ab, integer *ldab, doublereal *bb, integer *
-	ldbb, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dsbgvd_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, doublereal *ab, integer *ldab, doublereal *bb, integer *
-	ldbb, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dsbgvx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *ka, integer *kb, doublereal *ab, integer *ldab, doublereal *
-	bb, integer *ldbb, doublereal *q, integer *ldq, doublereal *vl, 
-	doublereal *vu, integer *il, integer *iu, doublereal *abstol, integer 
-	*m, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int dsbtrd_(char *vect, char *uplo, integer *n, integer *kd, 
-	doublereal *ab, integer *ldab, doublereal *d__, doublereal *e, 
-	doublereal *q, integer *ldq, doublereal *work, integer *info);
- 
-/* Subroutine */ int dspcon_(char *uplo, integer *n, doublereal *ap, integer *
-	ipiv, doublereal *anorm, doublereal *rcond, doublereal *work, integer 
-	*iwork, integer *info);
- 
-/* Subroutine */ int dspev_(char *jobz, char *uplo, integer *n, doublereal *
-	ap, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dspevd_(char *jobz, char *uplo, integer *n, doublereal *
-	ap, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dspevx_(char *jobz, char *range, char *uplo, integer *n, 
-	doublereal *ap, doublereal *vl, doublereal *vu, integer *il, integer *
-	iu, doublereal *abstol, integer *m, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *iwork, integer *ifail, 
-	integer *info);
- 
-/* Subroutine */ int dspgst_(integer *itype, char *uplo, integer *n, 
-	doublereal *ap, doublereal *bp, integer *info);
- 
-/* Subroutine */ int dspgv_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublereal *ap, doublereal *bp, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *info);
- 
-/* Subroutine */ int dspgvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublereal *ap, doublereal *bp, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int dspgvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, doublereal *ap, doublereal *bp, doublereal *vl, 
-	doublereal *vu, integer *il, integer *iu, doublereal *abstol, integer 
-	*m, doublereal *w, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int dsprfs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *ap, doublereal *afp, integer *ipiv, doublereal *b, 
-	integer *ldb, doublereal *x, integer *ldx, doublereal *ferr, 
-	doublereal *berr, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dspsv_(char *uplo, integer *n, integer *nrhs, doublereal 
-	*ap, integer *ipiv, doublereal *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dspsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublereal *ap, doublereal *afp, integer *ipiv, doublereal *b, 
-	integer *ldb, doublereal *x, integer *ldx, doublereal *rcond, 
-	doublereal *ferr, doublereal *berr, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dsptrd_(char *uplo, integer *n, doublereal *ap, 
-	doublereal *d__, doublereal *e, doublereal *tau, integer *info);
- 
-/* Subroutine */ int dsptrf_(char *uplo, integer *n, doublereal *ap, integer *
-	ipiv, integer *info);
- 
-/* Subroutine */ int dsptri_(char *uplo, integer *n, doublereal *ap, integer *
-	ipiv, doublereal *work, integer *info);
- 
-/* Subroutine */ int dsptrs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *ap, integer *ipiv, doublereal *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int dstebz_(char *range, char *order, integer *n, doublereal 
-	*vl, doublereal *vu, integer *il, integer *iu, doublereal *abstol, 
-	doublereal *d__, doublereal *e, integer *m, integer *nsplit, 
-	doublereal *w, integer *iblock, integer *isplit, doublereal *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int dstedc_(char *compz, integer *n, doublereal *d__, 
-	doublereal *e, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dstegr_(char *jobz, char *range, integer *n, doublereal *
-	d__, doublereal *e, doublereal *vl, doublereal *vu, integer *il, 
-	integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublereal *z__, integer *ldz, integer *isuppz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dstein_(integer *n, doublereal *d__, doublereal *e, 
-	integer *m, doublereal *w, integer *iblock, integer *isplit, 
-	doublereal *z__, integer *ldz, doublereal *work, integer *iwork, 
-	integer *ifail, integer *info);
- 
-/* Subroutine */ int dsteqr_(char *compz, integer *n, doublereal *d__, 
-	doublereal *e, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dsterf_(integer *n, doublereal *d__, doublereal *e, 
-	integer *info);
- 
-/* Subroutine */ int dstev_(char *jobz, integer *n, doublereal *d__, 
-	doublereal *e, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int dstevd_(char *jobz, integer *n, doublereal *d__, 
-	doublereal *e, doublereal *z__, integer *ldz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dstevr_(char *jobz, char *range, integer *n, doublereal *
-	d__, doublereal *e, doublereal *vl, doublereal *vu, integer *il, 
-	integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublereal *z__, integer *ldz, integer *isuppz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dstevx_(char *jobz, char *range, integer *n, doublereal *
-	d__, doublereal *e, doublereal *vl, doublereal *vu, integer *il, 
-	integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublereal *z__, integer *ldz, doublereal *work, integer *iwork, 
-	integer *ifail, integer *info);
- 
-/* Subroutine */ int dsycon_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, doublereal *anorm, doublereal *rcond, doublereal *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dsyev_(char *jobz, char *uplo, integer *n, doublereal *a,
-	 integer *lda, doublereal *w, doublereal *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int dsyevd_(char *jobz, char *uplo, integer *n, doublereal *
-	a, integer *lda, doublereal *w, doublereal *work, integer *lwork, 
-	integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dsyevr_(char *jobz, char *range, char *uplo, integer *n, 
-	doublereal *a, integer *lda, doublereal *vl, doublereal *vu, integer *
-	il, integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublereal *z__, integer *ldz, integer *isuppz, doublereal *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int dsyevx_(char *jobz, char *range, char *uplo, integer *n, 
-	doublereal *a, integer *lda, doublereal *vl, doublereal *vu, integer *
-	il, integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublereal *z__, integer *ldz, doublereal *work, integer *lwork, 
-	integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int dsygs2_(integer *itype, char *uplo, integer *n, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int dsygst_(integer *itype, char *uplo, integer *n, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int dsygv_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *w, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dsygvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *w, doublereal *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int dsygvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, doublereal *a, integer *lda, doublereal *b, integer 
-	*ldb, doublereal *vl, doublereal *vu, integer *il, integer *iu, 
-	doublereal *abstol, integer *m, doublereal *w, doublereal *z__, 
-	integer *ldz, doublereal *work, integer *lwork, integer *iwork, 
-	integer *ifail, integer *info);
- 
-/* Subroutine */ int dsyrfs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, doublereal *af, integer *ldaf, integer *
-	ipiv, doublereal *b, integer *ldb, doublereal *x, integer *ldx, 
-	doublereal *ferr, doublereal *berr, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dsysv_(char *uplo, integer *n, integer *nrhs, doublereal 
-	*a, integer *lda, integer *ipiv, doublereal *b, integer *ldb, 
-	doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dsysvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublereal *a, integer *lda, doublereal *af, integer *ldaf, 
-	integer *ipiv, doublereal *b, integer *ldb, doublereal *x, integer *
-	ldx, doublereal *rcond, doublereal *ferr, doublereal *berr, 
-	doublereal *work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int dsytd2_(char *uplo, integer *n, doublereal *a, integer *
-	lda, doublereal *d__, doublereal *e, doublereal *tau, integer *info);
- 
-/* Subroutine */ int dsytf2_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int dsytrd_(char *uplo, integer *n, doublereal *a, integer *
-	lda, doublereal *d__, doublereal *e, doublereal *tau, doublereal *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dsytrf_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dsytri_(char *uplo, integer *n, doublereal *a, integer *
-	lda, integer *ipiv, doublereal *work, integer *info);
- 
-/* Subroutine */ int dsytrs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int dtbcon_(char *norm, char *uplo, char *diag, integer *n, 
-	integer *kd, doublereal *ab, integer *ldab, doublereal *rcond, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dtbrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, doublereal *ab, integer *ldab, doublereal 
-	*b, integer *ldb, doublereal *x, integer *ldx, doublereal *ferr, 
-	doublereal *berr, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dtbtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, doublereal *ab, integer *ldab, doublereal 
-	*b, integer *ldb, integer *info);
- 
-/* Subroutine */ int dtgevc_(char *side, char *howmny, logical *select, 
-	integer *n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *vl, integer *ldvl, doublereal *vr, integer *ldvr, integer 
-	*mm, integer *m, doublereal *work, integer *info);
- 
-/* Subroutine */ int dtgex2_(logical *wantq, logical *wantz, integer *n, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
-	q, integer *ldq, doublereal *z__, integer *ldz, integer *j1, integer *
-	n1, integer *n2, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dtgexc_(logical *wantq, logical *wantz, integer *n, 
-	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
-	q, integer *ldq, doublereal *z__, integer *ldz, integer *ifst, 
-	integer *ilst, doublereal *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int dtgsen_(integer *ijob, logical *wantq, logical *wantz, 
-	logical *select, integer *n, doublereal *a, integer *lda, doublereal *
-	b, integer *ldb, doublereal *alphar, doublereal *alphai, doublereal *
-	beta, doublereal *q, integer *ldq, doublereal *z__, integer *ldz, 
-	integer *m, doublereal *pl, doublereal *pr, doublereal *dif, 
-	doublereal *work, integer *lwork, integer *iwork, integer *liwork, 
-	integer *info);
- 
-/* Subroutine */ int dtgsja_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, integer *k, integer *l, doublereal *a, 
-	integer *lda, doublereal *b, integer *ldb, doublereal *tola, 
-	doublereal *tolb, doublereal *alpha, doublereal *beta, doublereal *u, 
-	integer *ldu, doublereal *v, integer *ldv, doublereal *q, integer *
-	ldq, doublereal *work, integer *ncycle, integer *info);
- 
-/* Subroutine */ int dtgsna_(char *job, char *howmny, logical *select, 
-	integer *n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *vl, integer *ldvl, doublereal *vr, integer *ldvr, 
-	doublereal *s, doublereal *dif, integer *mm, integer *m, doublereal *
-	work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int dtgsy2_(char *trans, integer *ijob, integer *m, integer *
-	n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *c__, integer *ldc, doublereal *d__, integer *ldd, 
-	doublereal *e, integer *lde, doublereal *f, integer *ldf, doublereal *
-	scale, doublereal *rdsum, doublereal *rdscal, integer *iwork, integer 
-	*pq, integer *info);
- 
-/* Subroutine */ int dtgsyl_(char *trans, integer *ijob, integer *m, integer *
-	n, doublereal *a, integer *lda, doublereal *b, integer *ldb, 
-	doublereal *c__, integer *ldc, doublereal *d__, integer *ldd, 
-	doublereal *e, integer *lde, doublereal *f, integer *ldf, doublereal *
-	scale, doublereal *dif, doublereal *work, integer *lwork, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dtpcon_(char *norm, char *uplo, char *diag, integer *n, 
-	doublereal *ap, doublereal *rcond, doublereal *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int dtprfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublereal *ap, doublereal *b, integer *ldb, 
-	doublereal *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dtptri_(char *uplo, char *diag, integer *n, doublereal *
-	ap, integer *info);
- 
-/* Subroutine */ int dtptrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublereal *ap, doublereal *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int dtrcon_(char *norm, char *uplo, char *diag, integer *n, 
-	doublereal *a, integer *lda, doublereal *rcond, doublereal *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int dtrevc_(char *side, char *howmny, logical *select, 
-	integer *n, doublereal *t, integer *ldt, doublereal *vl, integer *
-	ldvl, doublereal *vr, integer *ldvr, integer *mm, integer *m, 
-	doublereal *work, integer *info);
- 
-/* Subroutine */ int dtrexc_(char *compq, integer *n, doublereal *t, integer *
-	ldt, doublereal *q, integer *ldq, integer *ifst, integer *ilst, 
-	doublereal *work, integer *info);
- 
-/* Subroutine */ int dtrrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublereal *a, integer *lda, doublereal *b, integer *
-	ldb, doublereal *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int dtrsen_(char *job, char *compq, logical *select, integer 
-	*n, doublereal *t, integer *ldt, doublereal *q, integer *ldq, 
-	doublereal *wr, doublereal *wi, integer *m, doublereal *s, doublereal 
-	*sep, doublereal *work, integer *lwork, integer *iwork, integer *
-	liwork, integer *info);
- 
-/* Subroutine */ int dtrsna_(char *job, char *howmny, logical *select, 
-	integer *n, doublereal *t, integer *ldt, doublereal *vl, integer *
-	ldvl, doublereal *vr, integer *ldvr, doublereal *s, doublereal *sep, 
-	integer *mm, integer *m, doublereal *work, integer *ldwork, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int dtrsyl_(char *trana, char *tranb, integer *isgn, integer 
-	*m, integer *n, doublereal *a, integer *lda, doublereal *b, integer *
-	ldb, doublereal *c__, integer *ldc, doublereal *scale, integer *info);
- 
-/* Subroutine */ int dtrti2_(char *uplo, char *diag, integer *n, doublereal *
-	a, integer *lda, integer *info);
- 
-/* Subroutine */ int dtrtri_(char *uplo, char *diag, integer *n, doublereal *
-	a, integer *lda, integer *info);
- 
-/* Subroutine */ int dtrtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublereal *a, integer *lda, doublereal *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int dtzrqf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, integer *info);
- 
-/* Subroutine */ int dtzrzf_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublereal *tau, doublereal *work, integer *lwork, integer *info);
- 
-integer icmax1_(integer *n, complex *cx, integer *incx);
- 
-integer ieeeck_(integer *ispec, real *zero, real *one);
- 
-integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1, 
-	integer *n2, integer *n3, integer *n4, ftnlen name_len, ftnlen 
-	opts_len);
- 
-integer izmax1_(integer *n, doublecomplex *cx, integer *incx);
- 
-/* Subroutine */ int sbdsdc_(char *uplo, char *compq, integer *n, real *d__, 
-	real *e, real *u, integer *ldu, real *vt, integer *ldvt, real *q, 
-	integer *iq, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sbdsqr_(char *uplo, integer *n, integer *ncvt, integer *
-	nru, integer *ncc, real *d__, real *e, real *vt, integer *ldvt, real *
-	u, integer *ldu, real *c__, integer *ldc, real *work, integer *info);
- 
-/* Subroutine */ int sdisna_(char *job, integer *m, integer *n, real *d__, 
-	real *sep, integer *info);
- 
-/* Subroutine */ int sgbbrd_(char *vect, integer *m, integer *n, integer *ncc,
-	 integer *kl, integer *ku, real *ab, integer *ldab, real *d__, real *
-	e, real *q, integer *ldq, real *pt, integer *ldpt, real *c__, integer 
-	*ldc, real *work, integer *info);
- 
-/* Subroutine */ int sgbcon_(char *norm, integer *n, integer *kl, integer *ku,
-	 real *ab, integer *ldab, integer *ipiv, real *anorm, real *rcond, 
-	real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgbequ_(integer *m, integer *n, integer *kl, integer *ku,
-	 real *ab, integer *ldab, real *r__, real *c__, real *rowcnd, real *
-	colcnd, real *amax, integer *info);
- 
-/* Subroutine */ int sgbrfs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, real *ab, integer *ldab, real *afb, integer *ldafb,
-	 integer *ipiv, real *b, integer *ldb, real *x, integer *ldx, real *
-	ferr, real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgbsv_(integer *n, integer *kl, integer *ku, integer *
-	nrhs, real *ab, integer *ldab, integer *ipiv, real *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int sgbsvx_(char *fact, char *trans, integer *n, integer *kl,
-	 integer *ku, integer *nrhs, real *ab, integer *ldab, real *afb, 
-	integer *ldafb, integer *ipiv, char *equed, real *r__, real *c__, 
-	real *b, integer *ldb, real *x, integer *ldx, real *rcond, real *ferr,
-	 real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgbtf2_(integer *m, integer *n, integer *kl, integer *ku,
-	 real *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int sgbtrf_(integer *m, integer *n, integer *kl, integer *ku,
-	 real *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int sgbtrs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, real *ab, integer *ldab, integer *ipiv, real *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int sgebak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, real *scale, integer *m, real *v, integer *ldv, integer 
-	*info);
- 
-/* Subroutine */ int sgebal_(char *job, integer *n, real *a, integer *lda, 
-	integer *ilo, integer *ihi, real *scale, integer *info);
- 
-/* Subroutine */ int sgebd2_(integer *m, integer *n, real *a, integer *lda, 
-	real *d__, real *e, real *tauq, real *taup, real *work, integer *info);
- 
-/* Subroutine */ int sgebrd_(integer *m, integer *n, real *a, integer *lda, 
-	real *d__, real *e, real *tauq, real *taup, real *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int sgecon_(char *norm, integer *n, real *a, integer *lda, 
-	real *anorm, real *rcond, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgeequ_(integer *m, integer *n, real *a, integer *lda, 
-	real *r__, real *c__, real *rowcnd, real *colcnd, real *amax, integer 
-	*info);
- 
-/* Subroutine */ int sgees_(char *jobvs, char *sort, L_fp select, integer *n, 
-	real *a, integer *lda, integer *sdim, real *wr, real *wi, real *vs, 
-	integer *ldvs, real *work, integer *lwork, logical *bwork, integer *
-	info);
- 
-/* Subroutine */ int sgeesx_(char *jobvs, char *sort, L_fp select, char *
-	sense, integer *n, real *a, integer *lda, integer *sdim, real *wr, 
-	real *wi, real *vs, integer *ldvs, real *rconde, real *rcondv, real *
-	work, integer *lwork, integer *iwork, integer *liwork, logical *bwork,
-	 integer *info);
- 
-/* Subroutine */ int sgeev_(char *jobvl, char *jobvr, integer *n, real *a, 
-	integer *lda, real *wr, real *wi, real *vl, integer *ldvl, real *vr, 
-	integer *ldvr, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgeevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, real *a, integer *lda, real *wr, real *wi, real *
-	vl, integer *ldvl, real *vr, integer *ldvr, integer *ilo, integer *
-	ihi, real *scale, real *abnrm, real *rconde, real *rcondv, real *work,
-	 integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgegs_(char *jobvsl, char *jobvsr, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb, real *alphar, real *alphai, real 
-	*beta, real *vsl, integer *ldvsl, real *vsr, integer *ldvsr, real *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgegv_(char *jobvl, char *jobvr, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb, real *alphar, real *alphai, real 
-	*beta, real *vl, integer *ldvl, real *vr, integer *ldvr, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int sgehd2_(integer *n, integer *ilo, integer *ihi, real *a, 
-	integer *lda, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgehrd_(integer *n, integer *ilo, integer *ihi, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgelq2_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgelqf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgels_(char *trans, integer *m, integer *n, integer *
-	nrhs, real *a, integer *lda, real *b, integer *ldb, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int sgelsd_(integer *m, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, real *s, real *rcond, integer *
-	rank, real *work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgelss_(integer *m, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, real *s, real *rcond, integer *
-	rank, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgelsx_(integer *m, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, integer *jpvt, real *rcond, 
-	integer *rank, real *work, integer *info);
- 
-/* Subroutine */ int sgelsy_(integer *m, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, integer *jpvt, real *rcond, 
-	integer *rank, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgeql2_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgeqlf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgeqp3_(integer *m, integer *n, real *a, integer *lda, 
-	integer *jpvt, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgeqpf_(integer *m, integer *n, real *a, integer *lda, 
-	integer *jpvt, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgeqr2_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgeqrf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgerfs_(char *trans, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *af, integer *ldaf, integer *ipiv, real *b, 
-	integer *ldb, real *x, integer *ldx, real *ferr, real *berr, real *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgerq2_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sgerqf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgesc2_(integer *n, real *a, integer *lda, real *rhs, 
-	integer *ipiv, integer *jpiv, real *scale);
- 
-/* Subroutine */ int sgesdd_(char *jobz, integer *m, integer *n, real *a, 
-	integer *lda, real *s, real *u, integer *ldu, real *vt, integer *ldvt,
-	 real *work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgesv_(integer *n, integer *nrhs, real *a, integer *lda, 
-	integer *ipiv, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sgesvd_(char *jobu, char *jobvt, integer *m, integer *n, 
-	real *a, integer *lda, real *s, real *u, integer *ldu, real *vt, 
-	integer *ldvt, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgesvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, real *a, integer *lda, real *af, integer *ldaf, integer *ipiv, 
-	char *equed, real *r__, real *c__, real *b, integer *ldb, real *x, 
-	integer *ldx, real *rcond, real *ferr, real *berr, real *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int sgetc2_(integer *n, real *a, integer *lda, integer *ipiv,
-	 integer *jpiv, integer *info);
- 
-/* Subroutine */ int sgetf2_(integer *m, integer *n, real *a, integer *lda, 
-	integer *ipiv, integer *info);
- 
-/* Subroutine */ int sgetrf_(integer *m, integer *n, real *a, integer *lda, 
-	integer *ipiv, integer *info);
- 
-/* Subroutine */ int sgetri_(integer *n, real *a, integer *lda, integer *ipiv,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgetrs_(char *trans, integer *n, integer *nrhs, real *a, 
-	integer *lda, integer *ipiv, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sggbak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, real *lscale, real *rscale, integer *m, real *v, 
-	integer *ldv, integer *info);
- 
-/* Subroutine */ int sggbal_(char *job, integer *n, real *a, integer *lda, 
-	real *b, integer *ldb, integer *ilo, integer *ihi, real *lscale, real 
-	*rscale, real *work, integer *info);
- 
-/* Subroutine */ int sgges_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	selctg, integer *n, real *a, integer *lda, real *b, integer *ldb, 
-	integer *sdim, real *alphar, real *alphai, real *beta, real *vsl, 
-	integer *ldvsl, real *vsr, integer *ldvsr, real *work, integer *lwork,
-	 logical *bwork, integer *info);
- 
-/* Subroutine */ int sggesx_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	selctg, char *sense, integer *n, real *a, integer *lda, real *b, 
-	integer *ldb, integer *sdim, real *alphar, real *alphai, real *beta, 
-	real *vsl, integer *ldvsl, real *vsr, integer *ldvsr, real *rconde, 
-	real *rcondv, real *work, integer *lwork, integer *iwork, integer *
-	liwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int sggev_(char *jobvl, char *jobvr, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb, real *alphar, real *alphai, real 
-	*beta, real *vl, integer *ldvl, real *vr, integer *ldvr, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int sggevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, real *a, integer *lda, real *b, integer *ldb, real 
-	*alphar, real *alphai, real *beta, real *vl, integer *ldvl, real *vr, 
-	integer *ldvr, integer *ilo, integer *ihi, real *lscale, real *rscale,
-	 real *abnrm, real *bbnrm, real *rconde, real *rcondv, real *work, 
-	integer *lwork, integer *iwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int sggglm_(integer *n, integer *m, integer *p, real *a, 
-	integer *lda, real *b, integer *ldb, real *d__, real *x, real *y, 
-	real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sgghrd_(char *compq, char *compz, integer *n, integer *
-	ilo, integer *ihi, real *a, integer *lda, real *b, integer *ldb, real 
-	*q, integer *ldq, real *z__, integer *ldz, integer *info);
- 
-/* Subroutine */ int sgglse_(integer *m, integer *n, integer *p, real *a, 
-	integer *lda, real *b, integer *ldb, real *c__, real *d__, real *x, 
-	real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sggqrf_(integer *n, integer *m, integer *p, real *a, 
-	integer *lda, real *taua, real *b, integer *ldb, real *taub, real *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sggrqf_(integer *m, integer *p, integer *n, real *a, 
-	integer *lda, real *taua, real *b, integer *ldb, real *taub, real *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sggsvd_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *n, integer *p, integer *k, integer *l, real *a, integer *lda,
-	 real *b, integer *ldb, real *alpha, real *beta, real *u, integer *
-	ldu, real *v, integer *ldv, real *q, integer *ldq, real *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int sggsvp_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, real *a, integer *lda, real *b, integer *ldb, 
-	real *tola, real *tolb, integer *k, integer *l, real *u, integer *ldu,
-	 real *v, integer *ldv, real *q, integer *ldq, integer *iwork, real *
-	tau, real *work, integer *info);
- 
-/* Subroutine */ int sgtcon_(char *norm, integer *n, real *dl, real *d__, 
-	real *du, real *du2, integer *ipiv, real *anorm, real *rcond, real *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgtrfs_(char *trans, integer *n, integer *nrhs, real *dl,
-	 real *d__, real *du, real *dlf, real *df, real *duf, real *du2, 
-	integer *ipiv, real *b, integer *ldb, real *x, integer *ldx, real *
-	ferr, real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sgtsv_(integer *n, integer *nrhs, real *dl, real *d__, 
-	real *du, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sgtsvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, real *dl, real *d__, real *du, real *dlf, real *df, real *duf, 
-	real *du2, integer *ipiv, real *b, integer *ldb, real *x, integer *
-	ldx, real *rcond, real *ferr, real *berr, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int sgttrf_(integer *n, real *dl, real *d__, real *du, real *
-	du2, integer *ipiv, integer *info);
- 
-/* Subroutine */ int sgttrs_(char *trans, integer *n, integer *nrhs, real *dl,
-	 real *d__, real *du, real *du2, integer *ipiv, real *b, integer *ldb,
-	 integer *info);
- 
-/* Subroutine */ int sgtts2_(integer *itrans, integer *n, integer *nrhs, real 
-	*dl, real *d__, real *du, real *du2, integer *ipiv, real *b, integer *
-	ldb);
- 
-/* Subroutine */ int shgeqz_(char *job, char *compq, char *compz, integer *n, 
-	integer *ilo, integer *ihi, real *a, integer *lda, real *b, integer *
-	ldb, real *alphar, real *alphai, real *beta, real *q, integer *ldq, 
-	real *z__, integer *ldz, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int shsein_(char *side, char *eigsrc, char *initv, logical *
-	select, integer *n, real *h__, integer *ldh, real *wr, real *wi, real 
-	*vl, integer *ldvl, real *vr, integer *ldvr, integer *mm, integer *m, 
-	real *work, integer *ifaill, integer *ifailr, integer *info);
- 
-/* Subroutine */ int shseqr_(char *job, char *compz, integer *n, integer *ilo,
-	 integer *ihi, real *h__, integer *ldh, real *wr, real *wi, real *z__,
-	 integer *ldz, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int slabad_(real *smalll, real *large); /* !? */
- 
-/* Subroutine */ int slabrd_(integer *m, integer *n, integer *nb, real *a, 
-	integer *lda, real *d__, real *e, real *tauq, real *taup, real *x, 
-	integer *ldx, real *y, integer *ldy);
- 
-/* Subroutine */ int slacon_(integer *n, real *v, real *x, integer *isgn, 
-	real *est, integer *kase);
- 
-/* Subroutine */ int slacpy_(char *uplo, integer *m, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb);
- 
-/* Subroutine */ int sladiv_(real *a, real *b, real *c__, real *d__, real *p, 
-	real *q);
- 
-/* Subroutine */ int slae2_(real *a, real *b, real *c__, real *rt1, real *rt2);
- 
-/* Subroutine */ int slaebz_(integer *ijob, integer *nitmax, integer *n, 
-	integer *mmax, integer *minp, integer *nbmin, real *abstol, real *
-	reltol, real *pivmin, real *d__, real *e, real *e2, integer *nval, 
-	real *ab, real *c__, integer *mout, integer *nab, real *work, integer 
-	*iwork, integer *info);
- 
-/* Subroutine */ int slaed0_(integer *icompq, integer *qsiz, integer *n, real 
-	*d__, real *e, real *q, integer *ldq, real *qstore, integer *ldqs, 
-	real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slaed1_(integer *n, real *d__, real *q, integer *ldq, 
-	integer *indxq, real *rho, integer *cutpnt, real *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int slaed2_(integer *k, integer *n, integer *n1, real *d__, 
-	real *q, integer *ldq, integer *indxq, real *rho, real *z__, real *
-	dlamda, real *w, real *q2, integer *indx, integer *indxc, integer *
-	indxp, integer *coltyp, integer *info);
- 
-/* Subroutine */ int slaed3_(integer *k, integer *n, integer *n1, real *d__, 
-	real *q, integer *ldq, real *rho, real *dlamda, real *q2, integer *
-	indx, integer *ctot, real *w, real *s, integer *info);
- 
-/* Subroutine */ int slaed4_(integer *n, integer *i__, real *d__, real *z__, 
-	real *delta, real *rho, real *dlam, integer *info);
- 
-/* Subroutine */ int slaed5_(integer *i__, real *d__, real *z__, real *delta, 
-	real *rho, real *dlam);
- 
-/* Subroutine */ int slaed6_(integer *kniter, logical *orgati, real *rho, 
-	real *d__, real *z__, real *finit, real *tau, integer *info);
- 
-/* Subroutine */ int slaed7_(integer *icompq, integer *n, integer *qsiz, 
-	integer *tlvls, integer *curlvl, integer *curpbm, real *d__, real *q, 
-	integer *ldq, integer *indxq, real *rho, integer *cutpnt, real *
-	qstore, integer *qptr, integer *prmptr, integer *perm, integer *
-	givptr, integer *givcol, real *givnum, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int slaed8_(integer *icompq, integer *k, integer *n, integer 
-	*qsiz, real *d__, real *q, integer *ldq, integer *indxq, real *rho, 
-	integer *cutpnt, real *z__, real *dlamda, real *q2, integer *ldq2, 
-	real *w, integer *perm, integer *givptr, integer *givcol, real *
-	givnum, integer *indxp, integer *indx, integer *info);
- 
-/* Subroutine */ int slaed9_(integer *k, integer *kstart, integer *kstop, 
-	integer *n, real *d__, real *q, integer *ldq, real *rho, real *dlamda,
-	 real *w, real *s, integer *lds, integer *info);
- 
-/* Subroutine */ int slaeda_(integer *n, integer *tlvls, integer *curlvl, 
-	integer *curpbm, integer *prmptr, integer *perm, integer *givptr, 
-	integer *givcol, real *givnum, real *q, integer *qptr, real *z__, 
-	real *ztemp, integer *info);
- 
-/* Subroutine */ int slaein_(logical *rightv, logical *noinit, integer *n, 
-	real *h__, integer *ldh, real *wr, real *wi, real *vr, real *vi, real 
-	*b, integer *ldb, real *work, real *eps3, real *smlnum, real *bignum, 
-	integer *info);
- 
-/* Subroutine */ int slaev2_(real *a, real *b, real *c__, real *rt1, real *
-	rt2, real *cs1, real *sn1);
- 
-/* Subroutine */ int slaexc_(logical *wantq, integer *n, real *t, integer *
-	ldt, real *q, integer *ldq, integer *j1, integer *n1, integer *n2, 
-	real *work, integer *info);
- 
-/* Subroutine */ int slag2_(real *a, integer *lda, real *b, integer *ldb, 
-	real *safmin, real *scale1, real *scale2, real *wr1, real *wr2, real *
-	wi);
- 
-/* Subroutine */ int slags2_(logical *upper, real *a1, real *a2, real *a3, 
-	real *b1, real *b2, real *b3, real *csu, real *snu, real *csv, real *
-	snv, real *csq, real *snq);
- 
-/* Subroutine */ int slagtf_(integer *n, real *a, real *lambda, real *b, real 
-	*c__, real *tol, real *d__, integer *in, integer *info);
- 
-/* Subroutine */ int slagtm_(char *trans, integer *n, integer *nrhs, real *
-	alpha, real *dl, real *d__, real *du, real *x, integer *ldx, real *
-	beta, real *b, integer *ldb);
- 
-/* Subroutine */ int slagts_(integer *job, integer *n, real *a, real *b, real 
-	*c__, real *d__, integer *in, real *y, real *tol, integer *info);
- 
-/* Subroutine */ int slagv2_(real *a, integer *lda, real *b, integer *ldb, 
-	real *alphar, real *alphai, real *beta, real *csl, real *snl, real *
-	csr, real *snr);
- 
-/* Subroutine */ int slahqr_(logical *wantt, logical *wantz, integer *n, 
-	integer *ilo, integer *ihi, real *h__, integer *ldh, real *wr, real *
-	wi, integer *iloz, integer *ihiz, real *z__, integer *ldz, integer *
-	info);
- 
-/* Subroutine */ int slahrd_(integer *n, integer *k, integer *nb, real *a, 
-	integer *lda, real *tau, real *t, integer *ldt, real *y, integer *ldy);
- 
-/* Subroutine */ int slaic1_(integer *job, integer *j, real *x, real *sest, 
-	real *w, real *gamma, real *sestpr, real *s, real *c__);
- 
-/* Subroutine */ int slaln2_(logical *ltrans, integer *na, integer *nw, real *
-	smin, real *ca, real *a, integer *lda, real *d1, real *d2, real *b, 
-	integer *ldb, real *wr, real *wi, real *x, integer *ldx, real *scale, 
-	real *xnorm, integer *info);
- 
-/* Subroutine */ int slals0_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *nrhs, real *b, integer *ldb, real *bx, 
-	integer *ldbx, integer *perm, integer *givptr, integer *givcol, 
-	integer *ldgcol, real *givnum, integer *ldgnum, real *poles, real *
-	difl, real *difr, real *z__, integer *k, real *c__, real *s, real *
-	work, integer *info);
- 
-/* Subroutine */ int slalsa_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *nrhs, real *b, integer *ldb, real *bx, integer *ldbx, real *
-	u, integer *ldu, real *vt, integer *k, real *difl, real *difr, real *
-	z__, real *poles, integer *givptr, integer *givcol, integer *ldgcol, 
-	integer *perm, real *givnum, real *c__, real *s, real *work, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int slalsd_(char *uplo, integer *smlsiz, integer *n, integer 
-	*nrhs, real *d__, real *e, real *b, integer *ldb, real *rcond, 
-	integer *rank, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slamc1_(integer *beta, integer *t, logical *rnd, logical 
-	*ieee1);
- 
-/* Subroutine */ int slamc2_(integer *beta, integer *t, logical *rnd, real *
-	eps, integer *emin, real *rmin, integer *emax, real *rmax);
- 
-/* Subroutine */ int slamc4_(integer *emin, real *start, integer *base);
- 
-/* Subroutine */ int slamc5_(integer *beta, integer *p, integer *emin, 
-	logical *ieee, integer *emax, real *rmax);
- 
-/* Subroutine */ int slamrg_(integer *n1, integer *n2, real *a, integer *
-	strd1, integer *strd2, integer *index);
- 
-/* Subroutine */ int slanv2_(real *a, real *b, real *c__, real *d__, real *
-	rt1r, real *rt1i, real *rt2r, real *rt2i, real *cs, real *sn);
- 
-/* Subroutine */ int slapll_(integer *n, real *x, integer *incx, real *y, 
-	integer *incy, real *ssmin);
- 
-/* Subroutine */ int slapmt_(logical *forwrd, integer *m, integer *n, real *x,
-	 integer *ldx, integer *k);
- 
-/* Subroutine */ int slaqgb_(integer *m, integer *n, integer *kl, integer *ku,
-	 real *ab, integer *ldab, real *r__, real *c__, real *rowcnd, real *
-	colcnd, real *amax, char *equed);
- 
-/* Subroutine */ int slaqge_(integer *m, integer *n, real *a, integer *lda, 
-	real *r__, real *c__, real *rowcnd, real *colcnd, real *amax, char *
-	equed);
- 
-/* Subroutine */ int slaqp2_(integer *m, integer *n, integer *offset, real *a,
-	 integer *lda, integer *jpvt, real *tau, real *vn1, real *vn2, real *
-	work);
- 
-/* Subroutine */ int slaqps_(integer *m, integer *n, integer *offset, integer 
-	*nb, integer *kb, real *a, integer *lda, integer *jpvt, real *tau, 
-	real *vn1, real *vn2, real *auxv, real *f, integer *ldf);
- 
-/* Subroutine */ int slaqsb_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int slaqsp_(char *uplo, integer *n, real *ap, real *s, real *
-	scond, real *amax, char *equed);
- 
-/* Subroutine */ int slaqsy_(char *uplo, integer *n, real *a, integer *lda, 
-	real *s, real *scond, real *amax, char *equed);
- 
-/* Subroutine */ int slaqtr_(logical *ltran, logical *lreal, integer *n, real 
-	*t, integer *ldt, real *b, real *w, real *scale, real *x, real *work, 
-	integer *info);
- 
-/* Subroutine */ int slar1v_(integer *n, integer *b1, integer *bn, real *
-	sigma, real *d__, real *l, real *ld, real *lld, real *gersch, real *
-	z__, real *ztz, real *mingma, integer *r__, integer *isuppz, real *
-	work);
- 
-/* Subroutine */ int slar2v_(integer *n, real *x, real *y, real *z__, integer 
-	*incx, real *c__, real *s, integer *incc);
- 
-/* Subroutine */ int slarf_(char *side, integer *m, integer *n, real *v, 
-	integer *incv, real *tau, real *c__, integer *ldc, real *work);
- 
-/* Subroutine */ int slarfb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, real *v, integer *ldv, 
-	real *t, integer *ldt, real *c__, integer *ldc, real *work, integer *
-	ldwork);
- 
-/* Subroutine */ int slarfg_(integer *n, real *alpha, real *x, integer *incx, 
-	real *tau);
- 
-/* Subroutine */ int slarft_(char *direct, char *storev, integer *n, integer *
-	k, real *v, integer *ldv, real *tau, real *t, integer *ldt);
- 
-/* Subroutine */ int slarfx_(char *side, integer *m, integer *n, real *v, 
-	real *tau, real *c__, integer *ldc, real *work);
- 
-/* Subroutine */ int slargv_(integer *n, real *x, integer *incx, real *y, 
-	integer *incy, real *c__, integer *incc);
- 
-/* Subroutine */ int slarnv_(integer *idist, integer *iseed, integer *n, real 
-	*x);
- 
-/* Subroutine */ int slarrb_(integer *n, real *d__, real *l, real *ld, real *
-	lld, integer *ifirst, integer *ilast, real *sigma, real *reltol, real 
-	*w, real *wgap, real *werr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slarre_(integer *n, real *d__, real *e, real *tol, 
-	integer *nsplit, integer *isplit, integer *m, real *w, real *woff, 
-	real *gersch, real *work, integer *info);
- 
-/* Subroutine */ int slarrf_(integer *n, real *d__, real *l, real *ld, real *
-	lld, integer *ifirst, integer *ilast, real *w, real *dplus, real *
-	lplus, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slarrv_(integer *n, real *d__, real *l, integer *isplit, 
-	integer *m, real *w, integer *iblock, real *gersch, real *tol, real *
-	z__, integer *ldz, integer *isuppz, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int slartg_(real *f, real *g, real *cs, real *sn, real *r__);
- 
-/* Subroutine */ int slartv_(integer *n, real *x, integer *incx, real *y, 
-	integer *incy, real *c__, real *s, integer *incc);
- 
-/* Subroutine */ int slaruv_(integer *iseed, integer *n, real *x);
- 
-/* Subroutine */ int slarz_(char *side, integer *m, integer *n, integer *l, 
-	real *v, integer *incv, real *tau, real *c__, integer *ldc, real *
-	work);
- 
-/* Subroutine */ int slarzb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, integer *l, real *v, 
-	integer *ldv, real *t, integer *ldt, real *c__, integer *ldc, real *
-	work, integer *ldwork);
- 
-/* Subroutine */ int slarzt_(char *direct, char *storev, integer *n, integer *
-	k, real *v, integer *ldv, real *tau, real *t, integer *ldt);
- 
-/* Subroutine */ int slas2_(real *f, real *g, real *h__, real *ssmin, real *
-	ssmax);
- 
-/* Subroutine */ int slascl_(char *type__, integer *kl, integer *ku, real *
-	cfrom, real *cto, integer *m, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int slasd0_(integer *n, integer *sqre, real *d__, real *e, 
-	real *u, integer *ldu, real *vt, integer *ldvt, integer *smlsiz, 
-	integer *iwork, real *work, integer *info);
- 
-/* Subroutine */ int slasd1_(integer *nl, integer *nr, integer *sqre, real *
-	d__, real *alpha, real *beta, real *u, integer *ldu, real *vt, 
-	integer *ldvt, integer *idxq, integer *iwork, real *work, integer *
-	info);
- 
-/* Subroutine */ int slasd2_(integer *nl, integer *nr, integer *sqre, integer 
-	*k, real *d__, real *z__, real *alpha, real *beta, real *u, integer *
-	ldu, real *vt, integer *ldvt, real *dsigma, real *u2, integer *ldu2, 
-	real *vt2, integer *ldvt2, integer *idxp, integer *idx, integer *idxc,
-	 integer *idxq, integer *coltyp, integer *info);
- 
-/* Subroutine */ int slasd3_(integer *nl, integer *nr, integer *sqre, integer 
-	*k, real *d__, real *q, integer *ldq, real *dsigma, real *u, integer *
-	ldu, real *u2, integer *ldu2, real *vt, integer *ldvt, real *vt2, 
-	integer *ldvt2, integer *idxc, integer *ctot, real *z__, integer *
-	info);
- 
-/* Subroutine */ int slasd4_(integer *n, integer *i__, real *d__, real *z__, 
-	real *delta, real *rho, real *sigma, real *work, integer *info);
- 
-/* Subroutine */ int slasd5_(integer *i__, real *d__, real *z__, real *delta, 
-	real *rho, real *dsigma, real *work);
- 
-/* Subroutine */ int slasd6_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, real *d__, real *vf, real *vl, real *alpha, real *beta,
-	 integer *idxq, integer *perm, integer *givptr, integer *givcol, 
-	integer *ldgcol, real *givnum, integer *ldgnum, real *poles, real *
-	difl, real *difr, real *z__, integer *k, real *c__, real *s, real *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slasd7_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *k, real *d__, real *z__, real *zw, real *vf, 
-	real *vfw, real *vl, real *vlw, real *alpha, real *beta, real *dsigma,
-	 integer *idx, integer *idxp, integer *idxq, integer *perm, integer *
-	givptr, integer *givcol, integer *ldgcol, real *givnum, integer *
-	ldgnum, real *c__, real *s, integer *info);
- 
-/* Subroutine */ int slasd8_(integer *icompq, integer *k, real *d__, real *
-	z__, real *vf, real *vl, real *difl, real *difr, integer *lddifr, 
-	real *dsigma, real *work, integer *info);
- 
-/* Subroutine */ int slasd9_(integer *icompq, integer *ldu, integer *k, real *
-	d__, real *z__, real *vf, real *vl, real *difl, real *difr, real *
-	dsigma, real *work, integer *info);
- 
-/* Subroutine */ int slasda_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *sqre, real *d__, real *e, real *u, integer *ldu, real *vt, 
-	integer *k, real *difl, real *difr, real *z__, real *poles, integer *
-	givptr, integer *givcol, integer *ldgcol, integer *perm, real *givnum,
-	 real *c__, real *s, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int slasdq_(char *uplo, integer *sqre, integer *n, integer *
-	ncvt, integer *nru, integer *ncc, real *d__, real *e, real *vt, 
-	integer *ldvt, real *u, integer *ldu, real *c__, integer *ldc, real *
-	work, integer *info);
- 
-/* Subroutine */ int slasdt_(integer *n, integer *lvl, integer *nd, integer *
-	inode, integer *ndiml, integer *ndimr, integer *msub);
- 
-/* Subroutine */ int slaset_(char *uplo, integer *m, integer *n, real *alpha, 
-	real *beta, real *a, integer *lda);
- 
-/* Subroutine */ int slasq1_(integer *n, real *d__, real *e, real *work, 
-	integer *info);
- 
-/* Subroutine */ int slasq2_(integer *n, real *z__, integer *info);
- 
-/* Subroutine */ int slasq3_(integer *i0, integer *n0, real *z__, integer *pp,
-	 real *dmin__, real *sigma, real *desig, real *qmax, integer *nfail, 
-	integer *iter, integer *ndiv, logical *ieee);
- 
-/* Subroutine */ int slasq4_(integer *i0, integer *n0, real *z__, integer *pp,
-	 integer *n0in, real *dmin__, real *dmin1, real *dmin2, real *dn, 
-	real *dn1, real *dn2, real *tau, integer *ttype);
- 
-/* Subroutine */ int slasq5_(integer *i0, integer *n0, real *z__, integer *pp,
-	 real *tau, real *dmin__, real *dmin1, real *dmin2, real *dn, real *
-	dnm1, real *dnm2, logical *ieee);
- 
-/* Subroutine */ int slasq6_(integer *i0, integer *n0, real *z__, integer *pp,
-	 real *dmin__, real *dmin1, real *dmin2, real *dn, real *dnm1, real *
-	dnm2);
- 
-/* Subroutine */ int slasr_(char *side, char *pivot, char *direct, integer *m,
-	 integer *n, real *c__, real *s, real *a, integer *lda);
- 
-/* Subroutine */ int slasrt_(char *id, integer *n, real *d__, integer *info);
- 
-/* Subroutine */ int slassq_(integer *n, real *x, integer *incx, real *scale, 
-	real *sumsq);
- 
-/* Subroutine */ int slasv2_(real *f, real *g, real *h__, real *ssmin, real *
-	ssmax, real *snr, real *csr, real *snl, real *csl);
- 
-/* Subroutine */ int slaswp_(integer *n, real *a, integer *lda, integer *k1, 
-	integer *k2, integer *ipiv, integer *incx);
- 
-/* Subroutine */ int slasy2_(logical *ltranl, logical *ltranr, integer *isgn, 
-	integer *n1, integer *n2, real *tl, integer *ldtl, real *tr, integer *
-	ldtr, real *b, integer *ldb, real *scale, real *x, integer *ldx, real 
-	*xnorm, integer *info);
- 
-/* Subroutine */ int slasyf_(char *uplo, integer *n, integer *nb, integer *kb,
-	 real *a, integer *lda, integer *ipiv, real *w, integer *ldw, integer 
-	*info);
- 
-/* Subroutine */ int slatbs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, integer *kd, real *ab, integer *ldab, real *x, 
-	real *scale, real *cnorm, integer *info);
- 
-/* Subroutine */ int slatdf_(integer *ijob, integer *n, real *z__, integer *
-	ldz, real *rhs, real *rdsum, real *rdscal, integer *ipiv, integer *
-	jpiv);
- 
-/* Subroutine */ int slatps_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, real *ap, real *x, real *scale, real *cnorm, 
-	integer *info);
- 
-/* Subroutine */ int slatrd_(char *uplo, integer *n, integer *nb, real *a, 
-	integer *lda, real *e, real *tau, real *w, integer *ldw);
- 
-/* Subroutine */ int slatrs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, real *a, integer *lda, real *x, real *scale, real 
-	*cnorm, integer *info);
- 
-/* Subroutine */ int slatrz_(integer *m, integer *n, integer *l, real *a, 
-	integer *lda, real *tau, real *work);
- 
-/* Subroutine */ int slatzm_(char *side, integer *m, integer *n, real *v, 
-	integer *incv, real *tau, real *c1, real *c2, integer *ldc, real *
-	work);
- 
-/* Subroutine */ int slauu2_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int slauum_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int sopgtr_(char *uplo, integer *n, real *ap, real *tau, 
-	real *q, integer *ldq, real *work, integer *info);
- 
-/* Subroutine */ int sopmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, real *ap, real *tau, real *c__, integer *ldc, real *work, 
-	integer *info);
- 
-/* Subroutine */ int sorg2l_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sorg2r_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sorgbr_(char *vect, integer *m, integer *n, integer *k, 
-	real *a, integer *lda, real *tau, real *work, integer *lwork, integer 
-	*info);
- 
-/* Subroutine */ int sorghr_(integer *n, integer *ilo, integer *ihi, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorgl2_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sorglq_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorgql_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorgqr_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorgr2_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *info);
- 
-/* Subroutine */ int sorgrq_(integer *m, integer *n, integer *k, real *a, 
-	integer *lda, real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorgtr_(char *uplo, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorm2l_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *info);
- 
-/* Subroutine */ int sorm2r_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *info);
- 
-/* Subroutine */ int sormbr_(char *vect, char *side, char *trans, integer *m, 
-	integer *n, integer *k, real *a, integer *lda, real *tau, real *c__, 
-	integer *ldc, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormhr_(char *side, char *trans, integer *m, integer *n, 
-	integer *ilo, integer *ihi, real *a, integer *lda, real *tau, real *
-	c__, integer *ldc, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sorml2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *info);
- 
-/* Subroutine */ int sormlq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormql_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormqr_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormr2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *info);
- 
-/* Subroutine */ int sormr3_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, real *a, integer *lda, real *tau, real *c__, 
-	integer *ldc, real *work, integer *info);
- 
-/* Subroutine */ int sormrq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormrz_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, real *a, integer *lda, real *tau, real *c__, 
-	integer *ldc, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int sormtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, real *a, integer *lda, real *tau, real *c__, integer *ldc,
-	 real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int spbcon_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, real *anorm, real *rcond, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int spbequ_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, real *s, real *scond, real *amax, integer *info);
- 
-/* Subroutine */ int spbrfs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, real *ab, integer *ldab, real *afb, integer *ldafb, real *b, 
-	integer *ldb, real *x, integer *ldx, real *ferr, real *berr, real *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int spbstf_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, integer *info);
- 
-/* Subroutine */ int spbsv_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, real *ab, integer *ldab, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int spbsvx_(char *fact, char *uplo, integer *n, integer *kd, 
-	integer *nrhs, real *ab, integer *ldab, real *afb, integer *ldafb, 
-	char *equed, real *s, real *b, integer *ldb, real *x, integer *ldx, 
-	real *rcond, real *ferr, real *berr, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int spbtf2_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, integer *info);
- 
-/* Subroutine */ int spbtrf_(char *uplo, integer *n, integer *kd, real *ab, 
-	integer *ldab, integer *info);
- 
-/* Subroutine */ int spbtrs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, real *ab, integer *ldab, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int spocon_(char *uplo, integer *n, real *a, integer *lda, 
-	real *anorm, real *rcond, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int spoequ_(integer *n, real *a, integer *lda, real *s, real 
-	*scond, real *amax, integer *info);
- 
-/* Subroutine */ int sporfs_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *af, integer *ldaf, real *b, integer *ldb, real *x,
-	 integer *ldx, real *ferr, real *berr, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int sposv_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sposvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, real *a, integer *lda, real *af, integer *ldaf, char *equed, 
-	real *s, real *b, integer *ldb, real *x, integer *ldx, real *rcond, 
-	real *ferr, real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int spotf2_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int spotrf_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int spotri_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *info);
- 
-/* Subroutine */ int spotrs_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sppcon_(char *uplo, integer *n, real *ap, real *anorm, 
-	real *rcond, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sppequ_(char *uplo, integer *n, real *ap, real *s, real *
-	scond, real *amax, integer *info);
- 
-/* Subroutine */ int spprfs_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	real *afp, real *b, integer *ldb, real *x, integer *ldx, real *ferr, 
-	real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sppsv_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sppsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, real *ap, real *afp, char *equed, real *s, real *b, integer *
-	ldb, real *x, integer *ldx, real *rcond, real *ferr, real *berr, real 
-	*work, integer *iwork, integer *info);
- 
-/* Subroutine */ int spptrf_(char *uplo, integer *n, real *ap, integer *info);
- 
-/* Subroutine */ int spptri_(char *uplo, integer *n, real *ap, integer *info);
- 
-/* Subroutine */ int spptrs_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sptcon_(integer *n, real *d__, real *e, real *anorm, 
-	real *rcond, real *work, integer *info);
- 
-/* Subroutine */ int spteqr_(char *compz, integer *n, real *d__, real *e, 
-	real *z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int sptrfs_(integer *n, integer *nrhs, real *d__, real *e, 
-	real *df, real *ef, real *b, integer *ldb, real *x, integer *ldx, 
-	real *ferr, real *berr, real *work, integer *info);
- 
-/* Subroutine */ int sptsv_(integer *n, integer *nrhs, real *d__, real *e, 
-	real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sptsvx_(char *fact, integer *n, integer *nrhs, real *d__,
-	 real *e, real *df, real *ef, real *b, integer *ldb, real *x, integer 
-	*ldx, real *rcond, real *ferr, real *berr, real *work, integer *info);
- 
-/* Subroutine */ int spttrf_(integer *n, real *d__, real *e, integer *info);
- 
-/* Subroutine */ int spttrs_(integer *n, integer *nrhs, real *d__, real *e, 
-	real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sptts2_(integer *n, integer *nrhs, real *d__, real *e, 
-	real *b, integer *ldb);
- 
-/* Subroutine */ int srscl_(integer *n, real *sa, real *sx, integer *incx);
- 
-/* Subroutine */ int ssbev_(char *jobz, char *uplo, integer *n, integer *kd, 
-	real *ab, integer *ldab, real *w, real *z__, integer *ldz, real *work,
-	 integer *info);
- 
-/* Subroutine */ int ssbevd_(char *jobz, char *uplo, integer *n, integer *kd, 
-	real *ab, integer *ldab, real *w, real *z__, integer *ldz, real *work,
-	 integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int ssbevx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *kd, real *ab, integer *ldab, real *q, integer *ldq, real *vl,
-	 real *vu, integer *il, integer *iu, real *abstol, integer *m, real *
-	w, real *z__, integer *ldz, real *work, integer *iwork, integer *
-	ifail, integer *info);
- 
-/* Subroutine */ int ssbgst_(char *vect, char *uplo, integer *n, integer *ka, 
-	integer *kb, real *ab, integer *ldab, real *bb, integer *ldbb, real *
-	x, integer *ldx, real *work, integer *info);
- 
-/* Subroutine */ int ssbgv_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, real *ab, integer *ldab, real *bb, integer *ldbb, real *
-	w, real *z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int ssbgvd_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, real *ab, integer *ldab, real *bb, integer *ldbb, real *
-	w, real *z__, integer *ldz, real *work, integer *lwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int ssbgvx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *ka, integer *kb, real *ab, integer *ldab, real *bb, integer *
-	ldbb, real *q, integer *ldq, real *vl, real *vu, integer *il, integer 
-	*iu, real *abstol, integer *m, real *w, real *z__, integer *ldz, real 
-	*work, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssbtrd_(char *vect, char *uplo, integer *n, integer *kd, 
-	real *ab, integer *ldab, real *d__, real *e, real *q, integer *ldq, 
-	real *work, integer *info);
- 
-/* Subroutine */ int sspcon_(char *uplo, integer *n, real *ap, integer *ipiv, 
-	real *anorm, real *rcond, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sspev_(char *jobz, char *uplo, integer *n, real *ap, 
-	real *w, real *z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int sspevd_(char *jobz, char *uplo, integer *n, real *ap, 
-	real *w, real *z__, integer *ldz, real *work, integer *lwork, integer 
-	*iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int sspevx_(char *jobz, char *range, char *uplo, integer *n, 
-	real *ap, real *vl, real *vu, integer *il, integer *iu, real *abstol, 
-	integer *m, real *w, real *z__, integer *ldz, real *work, integer *
-	iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int sspgst_(integer *itype, char *uplo, integer *n, real *ap,
-	 real *bp, integer *info);
- 
-/* Subroutine */ int sspgv_(integer *itype, char *jobz, char *uplo, integer *
-	n, real *ap, real *bp, real *w, real *z__, integer *ldz, real *work, 
-	integer *info);
- 
-/* Subroutine */ int sspgvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, real *ap, real *bp, real *w, real *z__, integer *ldz, real *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int sspgvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, real *ap, real *bp, real *vl, real *vu, integer *il,
-	 integer *iu, real *abstol, integer *m, real *w, real *z__, integer *
-	ldz, real *work, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssprfs_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	real *afp, integer *ipiv, real *b, integer *ldb, real *x, integer *
-	ldx, real *ferr, real *berr, real *work, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int sspsv_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	integer *ipiv, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sspsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, real *ap, real *afp, integer *ipiv, real *b, integer *ldb, real 
-	*x, integer *ldx, real *rcond, real *ferr, real *berr, real *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int ssptrd_(char *uplo, integer *n, real *ap, real *d__, 
-	real *e, real *tau, integer *info);
- 
-/* Subroutine */ int ssptrf_(char *uplo, integer *n, real *ap, integer *ipiv, 
-	integer *info);
- 
-/* Subroutine */ int ssptri_(char *uplo, integer *n, real *ap, integer *ipiv, 
-	real *work, integer *info);
- 
-/* Subroutine */ int ssptrs_(char *uplo, integer *n, integer *nrhs, real *ap, 
-	integer *ipiv, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int sstebz_(char *range, char *order, integer *n, real *vl, 
-	real *vu, integer *il, integer *iu, real *abstol, real *d__, real *e, 
-	integer *m, integer *nsplit, real *w, integer *iblock, integer *
-	isplit, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int sstedc_(char *compz, integer *n, real *d__, real *e, 
-	real *z__, integer *ldz, real *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int sstegr_(char *jobz, char *range, integer *n, real *d__, 
-	real *e, real *vl, real *vu, integer *il, integer *iu, real *abstol, 
-	integer *m, real *w, real *z__, integer *ldz, integer *isuppz, real *
-	work, integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int sstein_(integer *n, real *d__, real *e, integer *m, real 
-	*w, integer *iblock, integer *isplit, real *z__, integer *ldz, real *
-	work, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssteqr_(char *compz, integer *n, real *d__, real *e, 
-	real *z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int ssterf_(integer *n, real *d__, real *e, integer *info);
- 
-/* Subroutine */ int sstev_(char *jobz, integer *n, real *d__, real *e, real *
-	z__, integer *ldz, real *work, integer *info);
- 
-/* Subroutine */ int sstevd_(char *jobz, integer *n, real *d__, real *e, real 
-	*z__, integer *ldz, real *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int sstevr_(char *jobz, char *range, integer *n, real *d__, 
-	real *e, real *vl, real *vu, integer *il, integer *iu, real *abstol, 
-	integer *m, real *w, real *z__, integer *ldz, integer *isuppz, real *
-	work, integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int sstevx_(char *jobz, char *range, integer *n, real *d__, 
-	real *e, real *vl, real *vu, integer *il, integer *iu, real *abstol, 
-	integer *m, real *w, real *z__, integer *ldz, real *work, integer *
-	iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssycon_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *ipiv, real *anorm, real *rcond, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int ssyev_(char *jobz, char *uplo, integer *n, real *a, 
-	integer *lda, real *w, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int ssyevd_(char *jobz, char *uplo, integer *n, real *a, 
-	integer *lda, real *w, real *work, integer *lwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int ssyevr_(char *jobz, char *range, char *uplo, integer *n, 
-	real *a, integer *lda, real *vl, real *vu, integer *il, integer *iu, 
-	real *abstol, integer *m, real *w, real *z__, integer *ldz, integer *
-	isuppz, real *work, integer *lwork, integer *iwork, integer *liwork, 
-	integer *info);
- 
-/* Subroutine */ int ssyevx_(char *jobz, char *range, char *uplo, integer *n, 
-	real *a, integer *lda, real *vl, real *vu, integer *il, integer *iu, 
-	real *abstol, integer *m, real *w, real *z__, integer *ldz, real *
-	work, integer *lwork, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssygs2_(integer *itype, char *uplo, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int ssygst_(integer *itype, char *uplo, integer *n, real *a, 
-	integer *lda, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int ssygv_(integer *itype, char *jobz, char *uplo, integer *
-	n, real *a, integer *lda, real *b, integer *ldb, real *w, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int ssygvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, real *a, integer *lda, real *b, integer *ldb, real *w, real *work, 
-	integer *lwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int ssygvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, real *a, integer *lda, real *b, integer *ldb, real *
-	vl, real *vu, integer *il, integer *iu, real *abstol, integer *m, 
-	real *w, real *z__, integer *ldz, real *work, integer *lwork, integer 
-	*iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int ssyrfs_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, real *af, integer *ldaf, integer *ipiv, real *b, 
-	integer *ldb, real *x, integer *ldx, real *ferr, real *berr, real *
-	work, integer *iwork, integer *info);
- 
-/* Subroutine */ int ssysv_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, integer *ipiv, real *b, integer *ldb, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int ssysvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, real *a, integer *lda, real *af, integer *ldaf, integer *ipiv, 
-	real *b, integer *ldb, real *x, integer *ldx, real *rcond, real *ferr,
-	 real *berr, real *work, integer *lwork, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int ssytd2_(char *uplo, integer *n, real *a, integer *lda, 
-	real *d__, real *e, real *tau, integer *info);
- 
-/* Subroutine */ int ssytf2_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *ipiv, integer *info);
- 
-/* Subroutine */ int ssytrd_(char *uplo, integer *n, real *a, integer *lda, 
-	real *d__, real *e, real *tau, real *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int ssytrf_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *ipiv, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int ssytri_(char *uplo, integer *n, real *a, integer *lda, 
-	integer *ipiv, real *work, integer *info);
- 
-/* Subroutine */ int ssytrs_(char *uplo, integer *n, integer *nrhs, real *a, 
-	integer *lda, integer *ipiv, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int stbcon_(char *norm, char *uplo, char *diag, integer *n, 
-	integer *kd, real *ab, integer *ldab, real *rcond, real *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int stbrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, real *ab, integer *ldab, real *b, integer 
-	*ldb, real *x, integer *ldx, real *ferr, real *berr, real *work, 
-	integer *iwork, integer *info);
- 
-/* Subroutine */ int stbtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, real *ab, integer *ldab, real *b, integer 
-	*ldb, integer *info);
- 
-/* Subroutine */ int stgevc_(char *side, char *howmny, logical *select, 
-	integer *n, real *a, integer *lda, real *b, integer *ldb, real *vl, 
-	integer *ldvl, real *vr, integer *ldvr, integer *mm, integer *m, real 
-	*work, integer *info);
- 
-/* Subroutine */ int stgex2_(logical *wantq, logical *wantz, integer *n, real 
-	*a, integer *lda, real *b, integer *ldb, real *q, integer *ldq, real *
-	z__, integer *ldz, integer *j1, integer *n1, integer *n2, real *work, 
-	integer *lwork, integer *info);
- 
-/* Subroutine */ int stgexc_(logical *wantq, logical *wantz, integer *n, real 
-	*a, integer *lda, real *b, integer *ldb, real *q, integer *ldq, real *
-	z__, integer *ldz, integer *ifst, integer *ilst, real *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int stgsen_(integer *ijob, logical *wantq, logical *wantz, 
-	logical *select, integer *n, real *a, integer *lda, real *b, integer *
-	ldb, real *alphar, real *alphai, real *beta, real *q, integer *ldq, 
-	real *z__, integer *ldz, integer *m, real *pl, real *pr, real *dif, 
-	real *work, integer *lwork, integer *iwork, integer *liwork, integer *
-	info);
- 
-/* Subroutine */ int stgsja_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, integer *k, integer *l, real *a, integer *lda,
-	 real *b, integer *ldb, real *tola, real *tolb, real *alpha, real *
-	beta, real *u, integer *ldu, real *v, integer *ldv, real *q, integer *
-	ldq, real *work, integer *ncycle, integer *info);
- 
-/* Subroutine */ int stgsna_(char *job, char *howmny, logical *select, 
-	integer *n, real *a, integer *lda, real *b, integer *ldb, real *vl, 
-	integer *ldvl, real *vr, integer *ldvr, real *s, real *dif, integer *
-	mm, integer *m, real *work, integer *lwork, integer *iwork, integer *
-	info);
- 
-/* Subroutine */ int stgsy2_(char *trans, integer *ijob, integer *m, integer *
-	n, real *a, integer *lda, real *b, integer *ldb, real *c__, integer *
-	ldc, real *d__, integer *ldd, real *e, integer *lde, real *f, integer 
-	*ldf, real *scale, real *rdsum, real *rdscal, integer *iwork, integer 
-	*pq, integer *info);
- 
-/* Subroutine */ int stgsyl_(char *trans, integer *ijob, integer *m, integer *
-	n, real *a, integer *lda, real *b, integer *ldb, real *c__, integer *
-	ldc, real *d__, integer *ldd, real *e, integer *lde, real *f, integer 
-	*ldf, real *scale, real *dif, real *work, integer *lwork, integer *
-	iwork, integer *info);
- 
-/* Subroutine */ int stpcon_(char *norm, char *uplo, char *diag, integer *n, 
-	real *ap, real *rcond, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int stprfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, real *ap, real *b, integer *ldb, real *x, integer *ldx,
-	 real *ferr, real *berr, real *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int stptri_(char *uplo, char *diag, integer *n, real *ap, 
-	integer *info);
- 
-/* Subroutine */ int stptrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, real *ap, real *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int strcon_(char *norm, char *uplo, char *diag, integer *n, 
-	real *a, integer *lda, real *rcond, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int strevc_(char *side, char *howmny, logical *select, 
-	integer *n, real *t, integer *ldt, real *vl, integer *ldvl, real *vr, 
-	integer *ldvr, integer *mm, integer *m, real *work, integer *info);
- 
-/* Subroutine */ int strexc_(char *compq, integer *n, real *t, integer *ldt, 
-	real *q, integer *ldq, integer *ifst, integer *ilst, real *work, 
-	integer *info);
- 
-/* Subroutine */ int strrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, real *a, integer *lda, real *b, integer *ldb, real *x, 
-	integer *ldx, real *ferr, real *berr, real *work, integer *iwork, 
-	integer *info);
- 
-/* Subroutine */ int strsen_(char *job, char *compq, logical *select, integer 
-	*n, real *t, integer *ldt, real *q, integer *ldq, real *wr, real *wi, 
-	integer *m, real *s, real *sep, real *work, integer *lwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int strsna_(char *job, char *howmny, logical *select, 
-	integer *n, real *t, integer *ldt, real *vl, integer *ldvl, real *vr, 
-	integer *ldvr, real *s, real *sep, integer *mm, integer *m, real *
-	work, integer *ldwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int strsyl_(char *trana, char *tranb, integer *isgn, integer 
-	*m, integer *n, real *a, integer *lda, real *b, integer *ldb, real *
-	c__, integer *ldc, real *scale, integer *info);
- 
-/* Subroutine */ int strti2_(char *uplo, char *diag, integer *n, real *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int strtri_(char *uplo, char *diag, integer *n, real *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int strtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, real *a, integer *lda, real *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int stzrqf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, integer *info);
- 
-/* Subroutine */ int stzrzf_(integer *m, integer *n, real *a, integer *lda, 
-	real *tau, real *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int xerbla_(char *srname, integer *info);
- 
-/* Subroutine */ int zbdsqr_(char *uplo, integer *n, integer *ncvt, integer *
-	nru, integer *ncc, doublereal *d__, doublereal *e, doublecomplex *vt, 
-	integer *ldvt, doublecomplex *u, integer *ldu, doublecomplex *c__, 
-	integer *ldc, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zdrot_(integer *n, doublecomplex *cx, integer *incx, 
-	doublecomplex *cy, integer *incy, doublereal *c__, doublereal *s);
- 
-/* Subroutine */ int zdrscl_(integer *n, doublereal *sa, doublecomplex *sx, 
-	integer *incx);
- 
-/* Subroutine */ int zgbbrd_(char *vect, integer *m, integer *n, integer *ncc,
-	 integer *kl, integer *ku, doublecomplex *ab, integer *ldab, 
-	doublereal *d__, doublereal *e, doublecomplex *q, integer *ldq, 
-	doublecomplex *pt, integer *ldpt, doublecomplex *c__, integer *ldc, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgbcon_(char *norm, integer *n, integer *kl, integer *ku,
-	 doublecomplex *ab, integer *ldab, integer *ipiv, doublereal *anorm, 
-	doublereal *rcond, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zgbequ_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublecomplex *ab, integer *ldab, doublereal *r__, doublereal *c__, 
-	doublereal *rowcnd, doublereal *colcnd, doublereal *amax, integer *
-	info);
- 
-/* Subroutine */ int zgbrfs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, doublecomplex *ab, integer *ldab, doublecomplex *
-	afb, integer *ldafb, integer *ipiv, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgbsv_(integer *n, integer *kl, integer *ku, integer *
-	nrhs, doublecomplex *ab, integer *ldab, integer *ipiv, doublecomplex *
-	b, integer *ldb, integer *info);
- 
-/* Subroutine */ int zgbsvx_(char *fact, char *trans, integer *n, integer *kl,
-	 integer *ku, integer *nrhs, doublecomplex *ab, integer *ldab, 
-	doublecomplex *afb, integer *ldafb, integer *ipiv, char *equed, 
-	doublereal *r__, doublereal *c__, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *rcond, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zgbtf2_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublecomplex *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zgbtrf_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublecomplex *ab, integer *ldab, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zgbtrs_(char *trans, integer *n, integer *kl, integer *
-	ku, integer *nrhs, doublecomplex *ab, integer *ldab, integer *ipiv, 
-	doublecomplex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int zgebak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, doublereal *scale, integer *m, doublecomplex *v, 
-	integer *ldv, integer *info);
- 
-/* Subroutine */ int zgebal_(char *job, integer *n, doublecomplex *a, integer 
-	*lda, integer *ilo, integer *ihi, doublereal *scale, integer *info);
- 
-/* Subroutine */ int zgebd2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *d__, doublereal *e, doublecomplex *tauq, 
-	doublecomplex *taup, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgebrd_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *d__, doublereal *e, doublecomplex *tauq, 
-	doublecomplex *taup, doublecomplex *work, integer *lwork, integer *
-	info);
- 
-/* Subroutine */ int zgecon_(char *norm, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *anorm, doublereal *rcond, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgeequ_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *r__, doublereal *c__, doublereal *rowcnd, 
-	doublereal *colcnd, doublereal *amax, integer *info);
- 
-/* Subroutine */ int zgees_(char *jobvs, char *sort, L_fp select, integer *n, 
-	doublecomplex *a, integer *lda, integer *sdim, doublecomplex *w, 
-	doublecomplex *vs, integer *ldvs, doublecomplex *work, integer *lwork,
-	 doublereal *rwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int zgeesx_(char *jobvs, char *sort, L_fp select, char *
-	sense, integer *n, doublecomplex *a, integer *lda, integer *sdim, 
-	doublecomplex *w, doublecomplex *vs, integer *ldvs, doublereal *
-	rconde, doublereal *rcondv, doublecomplex *work, integer *lwork, 
-	doublereal *rwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int zgeev_(char *jobvl, char *jobvr, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *w, doublecomplex *vl, 
-	integer *ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work, 
-	integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgeevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, doublecomplex *a, integer *lda, doublecomplex *w, 
-	doublecomplex *vl, integer *ldvl, doublecomplex *vr, integer *ldvr, 
-	integer *ilo, integer *ihi, doublereal *scale, doublereal *abnrm, 
-	doublereal *rconde, doublereal *rcondv, doublecomplex *work, integer *
-	lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgegs_(char *jobvsl, char *jobvsr, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *alpha, doublecomplex *beta, doublecomplex *vsl, 
-	integer *ldvsl, doublecomplex *vsr, integer *ldvsr, doublecomplex *
-	work, integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgegv_(char *jobvl, char *jobvr, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *alpha, doublecomplex *beta, doublecomplex *vl, integer 
-	*ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work, integer 
-	*lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgehd2_(integer *n, integer *ilo, integer *ihi, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zgehrd_(integer *n, integer *ilo, integer *ihi, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zgelq2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgelqf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zgels_(char *trans, integer *m, integer *n, integer *
-	nrhs, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zgelsx_(integer *m, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *jpvt, doublereal *rcond, integer *rank, doublecomplex *work, 
-	doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgelsy_(integer *m, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *jpvt, doublereal *rcond, integer *rank, doublecomplex *work, 
-	integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgeql2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgeqlf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zgeqp3_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, integer *jpvt, doublecomplex *tau, doublecomplex *work, 
-	integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgeqpf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, integer *jpvt, doublecomplex *tau, doublecomplex *work, 
-	doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgeqr2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgeqrf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zgerfs_(char *trans, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *af, integer *ldaf, 
-	integer *ipiv, doublecomplex *b, integer *ldb, doublecomplex *x, 
-	integer *ldx, doublereal *ferr, doublereal *berr, doublecomplex *work,
-	 doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgerq2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgerqf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zgesc2_(integer *n, doublecomplex *a, integer *lda, 
-	doublecomplex *rhs, integer *ipiv, integer *jpiv, doublereal *scale);
- 
-/* Subroutine */ int zgesv_(integer *n, integer *nrhs, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublecomplex *b, integer *ldb, integer *
-	info);
- 
-/* Subroutine */ int zgesvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, doublecomplex *a, integer *lda, doublecomplex *af, integer *
-	ldaf, integer *ipiv, char *equed, doublereal *r__, doublereal *c__, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *rcond, doublereal *ferr, doublereal *berr, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgetc2_(integer *n, doublecomplex *a, integer *lda, 
-	integer *ipiv, integer *jpiv, integer *info);
- 
-/* Subroutine */ int zgetf2_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zgetrf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zgetri_(integer *n, doublecomplex *a, integer *lda, 
-	integer *ipiv, doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zgetrs_(char *trans, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int zggbak_(char *job, char *side, integer *n, integer *ilo, 
-	integer *ihi, doublereal *lscale, doublereal *rscale, integer *m, 
-	doublecomplex *v, integer *ldv, integer *info);
- 
-/* Subroutine */ int zggbal_(char *job, integer *n, doublecomplex *a, integer 
-	*lda, doublecomplex *b, integer *ldb, integer *ilo, integer *ihi, 
-	doublereal *lscale, doublereal *rscale, doublereal *work, integer *
-	info);
- 
-/* Subroutine */ int zgges_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	delctg, integer *n, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, integer *sdim, doublecomplex *alpha, doublecomplex *
-	beta, doublecomplex *vsl, integer *ldvsl, doublecomplex *vsr, integer 
-	*ldvsr, doublecomplex *work, integer *lwork, doublereal *rwork, 
-	logical *bwork, integer *info);
- 
-/* Subroutine */ int zggesx_(char *jobvsl, char *jobvsr, char *sort, L_fp 
-	delctg, char *sense, integer *n, doublecomplex *a, integer *lda, 
-	doublecomplex *b, integer *ldb, integer *sdim, doublecomplex *alpha, 
-	doublecomplex *beta, doublecomplex *vsl, integer *ldvsl, 
-	doublecomplex *vsr, integer *ldvsr, doublereal *rconde, doublereal *
-	rcondv, doublecomplex *work, integer *lwork, doublereal *rwork, 
-	integer *iwork, integer *liwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int zggev_(char *jobvl, char *jobvr, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *alpha, doublecomplex *beta, doublecomplex *vl, integer 
-	*ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work, integer 
-	*lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zggevx_(char *balanc, char *jobvl, char *jobvr, char *
-	sense, integer *n, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, doublecomplex *alpha, doublecomplex *beta, 
-	doublecomplex *vl, integer *ldvl, doublecomplex *vr, integer *ldvr, 
-	integer *ilo, integer *ihi, doublereal *lscale, doublereal *rscale, 
-	doublereal *abnrm, doublereal *bbnrm, doublereal *rconde, doublereal *
-	rcondv, doublecomplex *work, integer *lwork, doublereal *rwork, 
-	integer *iwork, logical *bwork, integer *info);
- 
-/* Subroutine */ int zggglm_(integer *n, integer *m, integer *p, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *d__, doublecomplex *x, doublecomplex *y, doublecomplex 
-	*work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zgghrd_(char *compq, char *compz, integer *n, integer *
-	ilo, integer *ihi, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, doublecomplex *q, integer *ldq, doublecomplex *z__, 
-	integer *ldz, integer *info);
- 
-/* Subroutine */ int zgglse_(integer *m, integer *n, integer *p, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *c__, doublecomplex *d__, doublecomplex *x, 
-	doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zggqrf_(integer *n, integer *m, integer *p, 
-	doublecomplex *a, integer *lda, doublecomplex *taua, doublecomplex *b,
-	 integer *ldb, doublecomplex *taub, doublecomplex *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int zggrqf_(integer *m, integer *p, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *taua, doublecomplex *b,
-	 integer *ldb, doublecomplex *taub, doublecomplex *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int zggsvd_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *n, integer *p, integer *k, integer *l, doublecomplex *a, 
-	integer *lda, doublecomplex *b, integer *ldb, doublereal *alpha, 
-	doublereal *beta, doublecomplex *u, integer *ldu, doublecomplex *v, 
-	integer *ldv, doublecomplex *q, integer *ldq, doublecomplex *work, 
-	doublereal *rwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int zggsvp_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, doublecomplex *a, integer *lda, doublecomplex 
-	*b, integer *ldb, doublereal *tola, doublereal *tolb, integer *k, 
-	integer *l, doublecomplex *u, integer *ldu, doublecomplex *v, integer 
-	*ldv, doublecomplex *q, integer *ldq, integer *iwork, doublereal *
-	rwork, doublecomplex *tau, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zgtcon_(char *norm, integer *n, doublecomplex *dl, 
-	doublecomplex *d__, doublecomplex *du, doublecomplex *du2, integer *
-	ipiv, doublereal *anorm, doublereal *rcond, doublecomplex *work, 
-	integer *info);
- 
-/* Subroutine */ int zgtrfs_(char *trans, integer *n, integer *nrhs, 
-	doublecomplex *dl, doublecomplex *d__, doublecomplex *du, 
-	doublecomplex *dlf, doublecomplex *df, doublecomplex *duf, 
-	doublecomplex *du2, integer *ipiv, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zgtsv_(integer *n, integer *nrhs, doublecomplex *dl, 
-	doublecomplex *d__, doublecomplex *du, doublecomplex *b, integer *ldb,
-	 integer *info);
- 
-/* Subroutine */ int zgtsvx_(char *fact, char *trans, integer *n, integer *
-	nrhs, doublecomplex *dl, doublecomplex *d__, doublecomplex *du, 
-	doublecomplex *dlf, doublecomplex *df, doublecomplex *duf, 
-	doublecomplex *du2, integer *ipiv, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *rcond, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zgttrf_(integer *n, doublecomplex *dl, doublecomplex *
-	d__, doublecomplex *du, doublecomplex *du2, integer *ipiv, integer *
-	info);
- 
-/* Subroutine */ int zgttrs_(char *trans, integer *n, integer *nrhs, 
-	doublecomplex *dl, doublecomplex *d__, doublecomplex *du, 
-	doublecomplex *du2, integer *ipiv, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zgtts2_(integer *itrans, integer *n, integer *nrhs, 
-	doublecomplex *dl, doublecomplex *d__, doublecomplex *du, 
-	doublecomplex *du2, integer *ipiv, doublecomplex *b, integer *ldb);
- 
-/* Subroutine */ int zhbev_(char *jobz, char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *w, doublecomplex *z__, 
-	integer *ldz, doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhbevd_(char *jobz, char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *w, doublecomplex *z__, 
-	integer *ldz, doublecomplex *work, integer *lwork, doublereal *rwork, 
-	integer *lrwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int zhbevx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *kd, doublecomplex *ab, integer *ldab, doublecomplex *q, 
-	integer *ldq, doublereal *vl, doublereal *vu, integer *il, integer *
-	iu, doublereal *abstol, integer *m, doublereal *w, doublecomplex *z__,
-	 integer *ldz, doublecomplex *work, doublereal *rwork, integer *iwork,
-	 integer *ifail, integer *info);
- 
-/* Subroutine */ int zhbgst_(char *vect, char *uplo, integer *n, integer *ka, 
-	integer *kb, doublecomplex *ab, integer *ldab, doublecomplex *bb, 
-	integer *ldbb, doublecomplex *x, integer *ldx, doublecomplex *work, 
-	doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhbgv_(char *jobz, char *uplo, integer *n, integer *ka, 
-	integer *kb, doublecomplex *ab, integer *ldab, doublecomplex *bb, 
-	integer *ldbb, doublereal *w, doublecomplex *z__, integer *ldz, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhbgvx_(char *jobz, char *range, char *uplo, integer *n, 
-	integer *ka, integer *kb, doublecomplex *ab, integer *ldab, 
-	doublecomplex *bb, integer *ldbb, doublecomplex *q, integer *ldq, 
-	doublereal *vl, doublereal *vu, integer *il, integer *iu, doublereal *
-	abstol, integer *m, doublereal *w, doublecomplex *z__, integer *ldz, 
-	doublecomplex *work, doublereal *rwork, integer *iwork, integer *
-	ifail, integer *info);
- 
-/* Subroutine */ int zhbtrd_(char *vect, char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *d__, doublereal *e, 
-	doublecomplex *q, integer *ldq, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zhecon_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublereal *anorm, doublereal *rcond, 
-	doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zheev_(char *jobz, char *uplo, integer *n, doublecomplex 
-	*a, integer *lda, doublereal *w, doublecomplex *work, integer *lwork, 
-	doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zheevd_(char *jobz, char *uplo, integer *n, 
-	doublecomplex *a, integer *lda, doublereal *w, doublecomplex *work, 
-	integer *lwork, doublereal *rwork, integer *lrwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int zheevr_(char *jobz, char *range, char *uplo, integer *n, 
-	doublecomplex *a, integer *lda, doublereal *vl, doublereal *vu, 
-	integer *il, integer *iu, doublereal *abstol, integer *m, doublereal *
-	w, doublecomplex *z__, integer *ldz, integer *isuppz, doublecomplex *
-	work, integer *lwork, doublereal *rwork, integer *lrwork, integer *
-	iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int zheevx_(char *jobz, char *range, char *uplo, integer *n, 
-	doublecomplex *a, integer *lda, doublereal *vl, doublereal *vu, 
-	integer *il, integer *iu, doublereal *abstol, integer *m, doublereal *
-	w, doublecomplex *z__, integer *ldz, doublecomplex *work, integer *
-	lwork, doublereal *rwork, integer *iwork, integer *ifail, integer *
-	info);
- 
-/* Subroutine */ int zhegs2_(integer *itype, char *uplo, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zhegst_(integer *itype, char *uplo, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zhegv_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublereal *w, doublecomplex *work, integer *lwork, doublereal *rwork,
-	 integer *info);
- 
-/* Subroutine */ int zhegvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublereal *w, doublecomplex *work, integer *lwork, doublereal *rwork,
-	 integer *lrwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int zhegvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, doublereal *vl, doublereal *vu, integer *il, integer *
-	iu, doublereal *abstol, integer *m, doublereal *w, doublecomplex *z__,
-	 integer *ldz, doublecomplex *work, integer *lwork, doublereal *rwork,
-	 integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int zherfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *af, integer *ldaf, 
-	integer *ipiv, doublecomplex *b, integer *ldb, doublecomplex *x, 
-	integer *ldx, doublereal *ferr, doublereal *berr, doublecomplex *work,
-	 doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhesv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, 
-	integer *ldb, doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zhesvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *a, integer *lda, doublecomplex *af, integer *
-	ldaf, integer *ipiv, doublecomplex *b, integer *ldb, doublecomplex *x,
-	 integer *ldx, doublereal *rcond, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhetf2_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zhetrd_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *d__, doublereal *e, doublecomplex *tau, 
-	doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zhetrf_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublecomplex *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int zhetri_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zhetrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int zhgeqz_(char *job, char *compq, char *compz, integer *n, 
-	integer *ilo, integer *ihi, doublecomplex *a, integer *lda, 
-	doublecomplex *b, integer *ldb, doublecomplex *alpha, doublecomplex *
-	beta, doublecomplex *q, integer *ldq, doublecomplex *z__, integer *
-	ldz, doublecomplex *work, integer *lwork, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zhpcon_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, doublereal *anorm, doublereal *rcond, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zhpev_(char *jobz, char *uplo, integer *n, doublecomplex 
-	*ap, doublereal *w, doublecomplex *z__, integer *ldz, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhpevd_(char *jobz, char *uplo, integer *n, 
-	doublecomplex *ap, doublereal *w, doublecomplex *z__, integer *ldz, 
-	doublecomplex *work, integer *lwork, doublereal *rwork, integer *
-	lrwork, integer *iwork, integer *liwork, integer *info);
- 
-/* Subroutine */ int zhpevx_(char *jobz, char *range, char *uplo, integer *n, 
-	doublecomplex *ap, doublereal *vl, doublereal *vu, integer *il, 
-	integer *iu, doublereal *abstol, integer *m, doublereal *w, 
-	doublecomplex *z__, integer *ldz, doublecomplex *work, doublereal *
-	rwork, integer *iwork, integer *ifail, integer *info);
- 
-/* Subroutine */ int zhpgst_(integer *itype, char *uplo, integer *n, 
-	doublecomplex *ap, doublecomplex *bp, integer *info);
- 
-/* Subroutine */ int zhpgv_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublecomplex *ap, doublecomplex *bp, doublereal *w, doublecomplex 
-	*z__, integer *ldz, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zhpgvd_(integer *itype, char *jobz, char *uplo, integer *
-	n, doublecomplex *ap, doublecomplex *bp, doublereal *w, doublecomplex 
-	*z__, integer *ldz, doublecomplex *work, integer *lwork, doublereal *
-	rwork, integer *lrwork, integer *iwork, integer *liwork, integer *
-	info);
- 
-/* Subroutine */ int zhpgvx_(integer *itype, char *jobz, char *range, char *
-	uplo, integer *n, doublecomplex *ap, doublecomplex *bp, doublereal *
-	vl, doublereal *vu, integer *il, integer *iu, doublereal *abstol, 
-	integer *m, doublereal *w, doublecomplex *z__, integer *ldz, 
-	doublecomplex *work, doublereal *rwork, integer *iwork, integer *
-	ifail, integer *info);
- 
-/* Subroutine */ int zhprfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, doublecomplex *afp, integer *ipiv, doublecomplex *
-	b, integer *ldb, doublecomplex *x, integer *ldx, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zhpsv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, integer *ipiv, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zhpsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *ap, doublecomplex *afp, integer *ipiv, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *rcond, doublereal *ferr, doublereal *berr, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zhptrd_(char *uplo, integer *n, doublecomplex *ap, 
-	doublereal *d__, doublereal *e, doublecomplex *tau, integer *info);
- 
-/* Subroutine */ int zhptrf_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, integer *info);
- 
-/* Subroutine */ int zhptri_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zhptrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, integer *ipiv, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zhsein_(char *side, char *eigsrc, char *initv, logical *
-	select, integer *n, doublecomplex *h__, integer *ldh, doublecomplex *
-	w, doublecomplex *vl, integer *ldvl, doublecomplex *vr, integer *ldvr,
-	 integer *mm, integer *m, doublecomplex *work, doublereal *rwork, 
-	integer *ifaill, integer *ifailr, integer *info);
- 
-/* Subroutine */ int zhseqr_(char *job, char *compz, integer *n, integer *ilo,
-	 integer *ihi, doublecomplex *h__, integer *ldh, doublecomplex *w, 
-	doublecomplex *z__, integer *ldz, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zlabrd_(integer *m, integer *n, integer *nb, 
-	doublecomplex *a, integer *lda, doublereal *d__, doublereal *e, 
-	doublecomplex *tauq, doublecomplex *taup, doublecomplex *x, integer *
-	ldx, doublecomplex *y, integer *ldy);
- 
-/* Subroutine */ int zlacgv_(integer *n, doublecomplex *x, integer *incx);
- 
-/* Subroutine */ int zlacon_(integer *n, doublecomplex *v, doublecomplex *x, 
-	doublereal *est, integer *kase);
- 
-/* Subroutine */ int zlacp2_(char *uplo, integer *m, integer *n, doublereal *
-	a, integer *lda, doublecomplex *b, integer *ldb);
- 
-/* Subroutine */ int zlacpy_(char *uplo, integer *m, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb);
- 
-/* Subroutine */ int zlacrm_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *b, integer *ldb, doublecomplex *c__, 
-	integer *ldc, doublereal *rwork);
- 
-/* Subroutine */ int zlacrt_(integer *n, doublecomplex *cx, integer *incx, 
-	doublecomplex *cy, integer *incy, doublecomplex *c__, doublecomplex *
-	s);
- 
-/* Subroutine */ int zlaed0_(integer *qsiz, integer *n, doublereal *d__, 
-	doublereal *e, doublecomplex *q, integer *ldq, doublecomplex *qstore, 
-	integer *ldqs, doublereal *rwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int zlaed7_(integer *n, integer *cutpnt, integer *qsiz, 
-	integer *tlvls, integer *curlvl, integer *curpbm, doublereal *d__, 
-	doublecomplex *q, integer *ldq, doublereal *rho, integer *indxq, 
-	doublereal *qstore, integer *qptr, integer *prmptr, integer *perm, 
-	integer *givptr, integer *givcol, doublereal *givnum, doublecomplex *
-	work, doublereal *rwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int zlaed8_(integer *k, integer *n, integer *qsiz, 
-	doublecomplex *q, integer *ldq, doublereal *d__, doublereal *rho, 
-	integer *cutpnt, doublereal *z__, doublereal *dlamda, doublecomplex *
-	q2, integer *ldq2, doublereal *w, integer *indxp, integer *indx, 
-	integer *indxq, integer *perm, integer *givptr, integer *givcol, 
-	doublereal *givnum, integer *info);
- 
-/* Subroutine */ int zlaein_(logical *rightv, logical *noinit, integer *n, 
-	doublecomplex *h__, integer *ldh, doublecomplex *w, doublecomplex *v, 
-	doublecomplex *b, integer *ldb, doublereal *rwork, doublereal *eps3, 
-	doublereal *smlnum, integer *info);
- 
-/* Subroutine */ int zlaesy_(doublecomplex *a, doublecomplex *b, 
-	doublecomplex *c__, doublecomplex *rt1, doublecomplex *rt2, 
-	doublecomplex *evscal, doublecomplex *cs1, doublecomplex *sn1);
- 
-/* Subroutine */ int zlaev2_(doublecomplex *a, doublecomplex *b, 
-	doublecomplex *c__, doublereal *rt1, doublereal *rt2, doublereal *cs1,
-	 doublecomplex *sn1);
- 
-/* Subroutine */ int zlags2_(logical *upper, doublereal *a1, doublecomplex *
-	a2, doublereal *a3, doublereal *b1, doublecomplex *b2, doublereal *b3,
-	 doublereal *csu, doublecomplex *snu, doublereal *csv, doublecomplex *
-	snv, doublereal *csq, doublecomplex *snq);
- 
-/* Subroutine */ int zlagtm_(char *trans, integer *n, integer *nrhs, 
-	doublereal *alpha, doublecomplex *dl, doublecomplex *d__, 
-	doublecomplex *du, doublecomplex *x, integer *ldx, doublereal *beta, 
-	doublecomplex *b, integer *ldb);
- 
-/* Subroutine */ int zlahef_(char *uplo, integer *n, integer *nb, integer *kb,
-	 doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *w, 
-	integer *ldw, integer *info);
- 
-/* Subroutine */ int zlahqr_(logical *wantt, logical *wantz, integer *n, 
-	integer *ilo, integer *ihi, doublecomplex *h__, integer *ldh, 
-	doublecomplex *w, integer *iloz, integer *ihiz, doublecomplex *z__, 
-	integer *ldz, integer *info);
- 
-/* Subroutine */ int zlahrd_(integer *n, integer *k, integer *nb, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *t, 
-	integer *ldt, doublecomplex *y, integer *ldy);
- 
-/* Subroutine */ int zlaic1_(integer *job, integer *j, doublecomplex *x, 
-	doublereal *sest, doublecomplex *w, doublecomplex *gamma, doublereal *
-	sestpr, doublecomplex *s, doublecomplex *c__);
- 
-/* Subroutine */ int zlals0_(integer *icompq, integer *nl, integer *nr, 
-	integer *sqre, integer *nrhs, doublecomplex *b, integer *ldb, 
-	doublecomplex *bx, integer *ldbx, integer *perm, integer *givptr, 
-	integer *givcol, integer *ldgcol, doublereal *givnum, integer *ldgnum,
-	 doublereal *poles, doublereal *difl, doublereal *difr, doublereal *
-	z__, integer *k, doublereal *c__, doublereal *s, doublereal *rwork, 
-	integer *info);
- 
-/* Subroutine */ int zlalsa_(integer *icompq, integer *smlsiz, integer *n, 
-	integer *nrhs, doublecomplex *b, integer *ldb, doublecomplex *bx, 
-	integer *ldbx, doublereal *u, integer *ldu, doublereal *vt, integer *
-	k, doublereal *difl, doublereal *difr, doublereal *z__, doublereal *
-	poles, integer *givptr, integer *givcol, integer *ldgcol, integer *
-	perm, doublereal *givnum, doublereal *c__, doublereal *s, doublereal *
-	rwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int zlapll_(integer *n, doublecomplex *x, integer *incx, 
-	doublecomplex *y, integer *incy, doublereal *ssmin);
- 
-/* Subroutine */ int zlapmt_(logical *forwrd, integer *m, integer *n, 
-	doublecomplex *x, integer *ldx, integer *k);
- 
-/* Subroutine */ int zlaqgb_(integer *m, integer *n, integer *kl, integer *ku,
-	 doublecomplex *ab, integer *ldab, doublereal *r__, doublereal *c__, 
-	doublereal *rowcnd, doublereal *colcnd, doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqge_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *r__, doublereal *c__, doublereal *rowcnd, 
-	doublereal *colcnd, doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqhb_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *s, doublereal *scond, 
-	doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqhe_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *s, doublereal *scond, doublereal *amax, 
-	char *equed);
- 
-/* Subroutine */ int zlaqhp_(char *uplo, integer *n, doublecomplex *ap, 
-	doublereal *s, doublereal *scond, doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqp2_(integer *m, integer *n, integer *offset, 
-	doublecomplex *a, integer *lda, integer *jpvt, doublecomplex *tau, 
-	doublereal *vn1, doublereal *vn2, doublecomplex *work);
- 
-/* Subroutine */ int zlaqps_(integer *m, integer *n, integer *offset, integer 
-	*nb, integer *kb, doublecomplex *a, integer *lda, integer *jpvt, 
-	doublecomplex *tau, doublereal *vn1, doublereal *vn2, doublecomplex *
-	auxv, doublecomplex *f, integer *ldf);
- 
-/* Subroutine */ int zlaqsb_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *s, doublereal *scond, 
-	doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqsp_(char *uplo, integer *n, doublecomplex *ap, 
-	doublereal *s, doublereal *scond, doublereal *amax, char *equed);
- 
-/* Subroutine */ int zlaqsy_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *s, doublereal *scond, doublereal *amax, 
-	char *equed);
- 
-/* Subroutine */ int zlar1v_(integer *n, integer *b1, integer *bn, doublereal 
-	*sigma, doublereal *d__, doublereal *l, doublereal *ld, doublereal *
-	lld, doublereal *gersch, doublecomplex *z__, doublereal *ztz, 
-	doublereal *mingma, integer *r__, integer *isuppz, doublereal *work);
- 
-/* Subroutine */ int zlar2v_(integer *n, doublecomplex *x, doublecomplex *y, 
-	doublecomplex *z__, integer *incx, doublereal *c__, doublecomplex *s, 
-	integer *incc);
- 
-/* Subroutine */ int zlarcm_(integer *m, integer *n, doublereal *a, integer *
-	lda, doublecomplex *b, integer *ldb, doublecomplex *c__, integer *ldc,
-	 doublereal *rwork);
- 
-/* Subroutine */ int zlarf_(char *side, integer *m, integer *n, doublecomplex 
-	*v, integer *incv, doublecomplex *tau, doublecomplex *c__, integer *
-	ldc, doublecomplex *work);
- 
-/* Subroutine */ int zlarfb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, doublecomplex *v, integer 
-	*ldv, doublecomplex *t, integer *ldt, doublecomplex *c__, integer *
-	ldc, doublecomplex *work, integer *ldwork);
- 
-/* Subroutine */ int zlarfg_(integer *n, doublecomplex *alpha, doublecomplex *
-	x, integer *incx, doublecomplex *tau);
- 
-/* Subroutine */ int zlarft_(char *direct, char *storev, integer *n, integer *
-	k, doublecomplex *v, integer *ldv, doublecomplex *tau, doublecomplex *
-	t, integer *ldt);
- 
-/* Subroutine */ int zlarfx_(char *side, integer *m, integer *n, 
-	doublecomplex *v, doublecomplex *tau, doublecomplex *c__, integer *
-	ldc, doublecomplex *work);
- 
-/* Subroutine */ int zlargv_(integer *n, doublecomplex *x, integer *incx, 
-	doublecomplex *y, integer *incy, doublereal *c__, integer *incc);
- 
-/* Subroutine */ int zlarnv_(integer *idist, integer *iseed, integer *n, 
-	doublecomplex *x);
- 
-/* Subroutine */ int zlarrv_(integer *n, doublereal *d__, doublereal *l, 
-	integer *isplit, integer *m, doublereal *w, integer *iblock, 
-	doublereal *gersch, doublereal *tol, doublecomplex *z__, integer *ldz,
-	 integer *isuppz, doublereal *work, integer *iwork, integer *info);
- 
-/* Subroutine */ int zlartg_(doublecomplex *f, doublecomplex *g, doublereal *
-	cs, doublecomplex *sn, doublecomplex *r__);
- 
-/* Subroutine */ int zlartv_(integer *n, doublecomplex *x, integer *incx, 
-	doublecomplex *y, integer *incy, doublereal *c__, doublecomplex *s, 
-	integer *incc);
- 
-/* Subroutine */ int zlarz_(char *side, integer *m, integer *n, integer *l, 
-	doublecomplex *v, integer *incv, doublecomplex *tau, doublecomplex *
-	c__, integer *ldc, doublecomplex *work);
- 
-/* Subroutine */ int zlarzb_(char *side, char *trans, char *direct, char *
-	storev, integer *m, integer *n, integer *k, integer *l, doublecomplex 
-	*v, integer *ldv, doublecomplex *t, integer *ldt, doublecomplex *c__, 
-	integer *ldc, doublecomplex *work, integer *ldwork);
- 
-/* Subroutine */ int zlarzt_(char *direct, char *storev, integer *n, integer *
-	k, doublecomplex *v, integer *ldv, doublecomplex *tau, doublecomplex *
-	t, integer *ldt);
- 
-/* Subroutine */ int zlascl_(char *type__, integer *kl, integer *ku, 
-	doublereal *cfrom, doublereal *cto, integer *m, integer *n, 
-	doublecomplex *a, integer *lda, integer *info);
- 
-/* Subroutine */ int zlaset_(char *uplo, integer *m, integer *n, 
-	doublecomplex *alpha, doublecomplex *beta, doublecomplex *a, integer *
-	lda);
- 
-/* Subroutine */ int zlasr_(char *side, char *pivot, char *direct, integer *m,
-	 integer *n, doublereal *c__, doublereal *s, doublecomplex *a, 
-	integer *lda);
- 
-/* Subroutine */ int zlassq_(integer *n, doublecomplex *x, integer *incx, 
-	doublereal *scale, doublereal *sumsq);
- 
-/* Subroutine */ int zlaswp_(integer *n, doublecomplex *a, integer *lda, 
-	integer *k1, integer *k2, integer *ipiv, integer *incx);
- 
-/* Subroutine */ int zlasyf_(char *uplo, integer *n, integer *nb, integer *kb,
-	 doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *w, 
-	integer *ldw, integer *info);
- 
-/* Subroutine */ int zlatbs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, integer *kd, doublecomplex *ab, integer *ldab, 
-	doublecomplex *x, doublereal *scale, doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int zlatdf_(integer *ijob, integer *n, doublecomplex *z__, 
-	integer *ldz, doublecomplex *rhs, doublereal *rdsum, doublereal *
-	rdscal, integer *ipiv, integer *jpiv);
- 
-/* Subroutine */ int zlatps_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, doublecomplex *ap, doublecomplex *x, doublereal *
-	scale, doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int zlatrd_(char *uplo, integer *n, integer *nb, 
-	doublecomplex *a, integer *lda, doublereal *e, doublecomplex *tau, 
-	doublecomplex *w, integer *ldw);
- 
-/* Subroutine */ int zlatrs_(char *uplo, char *trans, char *diag, char *
-	normin, integer *n, doublecomplex *a, integer *lda, doublecomplex *x, 
-	doublereal *scale, doublereal *cnorm, integer *info);
- 
-/* Subroutine */ int zlatrz_(integer *m, integer *n, integer *l, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work);
- 
-/* Subroutine */ int zlatzm_(char *side, integer *m, integer *n, 
-	doublecomplex *v, integer *incv, doublecomplex *tau, doublecomplex *
-	c1, doublecomplex *c2, integer *ldc, doublecomplex *work);
- 
-/* Subroutine */ int zlauu2_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int zlauum_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int zpbcon_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *anorm, doublereal *
-	rcond, doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zpbequ_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, doublereal *s, doublereal *scond, 
-	doublereal *amax, integer *info);
- 
-/* Subroutine */ int zpbrfs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublecomplex *ab, integer *ldab, doublecomplex *afb, integer *
-	ldafb, doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx,
-	 doublereal *ferr, doublereal *berr, doublecomplex *work, doublereal *
-	rwork, integer *info);
- 
-/* Subroutine */ int zpbstf_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int zpbsv_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublecomplex *ab, integer *ldab, doublecomplex *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int zpbsvx_(char *fact, char *uplo, integer *n, integer *kd, 
-	integer *nrhs, doublecomplex *ab, integer *ldab, doublecomplex *afb, 
-	integer *ldafb, char *equed, doublereal *s, doublecomplex *b, integer 
-	*ldb, doublecomplex *x, integer *ldx, doublereal *rcond, doublereal *
-	ferr, doublereal *berr, doublecomplex *work, doublereal *rwork, 
-	integer *info);
- 
-/* Subroutine */ int zpbtf2_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int zpbtrf_(char *uplo, integer *n, integer *kd, 
-	doublecomplex *ab, integer *ldab, integer *info);
- 
-/* Subroutine */ int zpbtrs_(char *uplo, integer *n, integer *kd, integer *
-	nrhs, doublecomplex *ab, integer *ldab, doublecomplex *b, integer *
-	ldb, integer *info);
- 
-/* Subroutine */ int zpocon_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, doublereal *anorm, doublereal *rcond, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zpoequ_(integer *n, doublecomplex *a, integer *lda, 
-	doublereal *s, doublereal *scond, doublereal *amax, integer *info);
- 
-/* Subroutine */ int zporfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *af, integer *ldaf, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *ferr, doublereal *berr, doublecomplex *work, doublereal *
-	rwork, integer *info);
- 
-/* Subroutine */ int zposv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zposvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *a, integer *lda, doublecomplex *af, integer *
-	ldaf, char *equed, doublereal *s, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *rcond, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zpotf2_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int zpotrf_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int zpotri_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *info);
- 
-/* Subroutine */ int zpotrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zppcon_(char *uplo, integer *n, doublecomplex *ap, 
-	doublereal *anorm, doublereal *rcond, doublecomplex *work, doublereal 
-	*rwork, integer *info);
- 
-/* Subroutine */ int zppequ_(char *uplo, integer *n, doublecomplex *ap, 
-	doublereal *s, doublereal *scond, doublereal *amax, integer *info);
- 
-/* Subroutine */ int zpprfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, doublecomplex *afp, doublecomplex *b, integer *ldb,
-	 doublecomplex *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zppsv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, doublecomplex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int zppsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *ap, doublecomplex *afp, char *equed, doublereal *
-	s, doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *rcond, doublereal *ferr, doublereal *berr, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zpptrf_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *info);
- 
-/* Subroutine */ int zpptri_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *info);
- 
-/* Subroutine */ int zpptrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, doublecomplex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int zptcon_(integer *n, doublereal *d__, doublecomplex *e, 
-	doublereal *anorm, doublereal *rcond, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zptrfs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *d__, doublecomplex *e, doublereal *df, doublecomplex *ef, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *ferr, doublereal *berr, doublecomplex *work, doublereal *
-	rwork, integer *info);
- 
-/* Subroutine */ int zptsv_(integer *n, integer *nrhs, doublereal *d__, 
-	doublecomplex *e, doublecomplex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int zptsvx_(char *fact, integer *n, integer *nrhs, 
-	doublereal *d__, doublecomplex *e, doublereal *df, doublecomplex *ef, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *rcond, doublereal *ferr, doublereal *berr, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zpttrf_(integer *n, doublereal *d__, doublecomplex *e, 
-	integer *info);
- 
-/* Subroutine */ int zpttrs_(char *uplo, integer *n, integer *nrhs, 
-	doublereal *d__, doublecomplex *e, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zptts2_(integer *iuplo, integer *n, integer *nrhs, 
-	doublereal *d__, doublecomplex *e, doublecomplex *b, integer *ldb);
- 
-/* Subroutine */ int zrot_(integer *n, doublecomplex *cx, integer *incx, 
-	doublecomplex *cy, integer *incy, doublereal *c__, doublecomplex *s);
- 
-/* Subroutine */ int zspcon_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, doublereal *anorm, doublereal *rcond, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zspmv_(char *uplo, integer *n, doublecomplex *alpha, 
-	doublecomplex *ap, doublecomplex *x, integer *incx, doublecomplex *
-	beta, doublecomplex *y, integer *incy);
- 
-/* Subroutine */ int zspr_(char *uplo, integer *n, doublecomplex *alpha, 
-	doublecomplex *x, integer *incx, doublecomplex *ap);
- 
-/* Subroutine */ int zsprfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, doublecomplex *afp, integer *ipiv, doublecomplex *
-	b, integer *ldb, doublecomplex *x, integer *ldx, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int zspsv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, integer *ipiv, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zspsvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *ap, doublecomplex *afp, integer *ipiv, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *rcond, doublereal *ferr, doublereal *berr, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zsptrf_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, integer *info);
- 
-/* Subroutine */ int zsptri_(char *uplo, integer *n, doublecomplex *ap, 
-	integer *ipiv, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zsptrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *ap, integer *ipiv, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int zstedc_(char *compz, integer *n, doublereal *d__, 
-	doublereal *e, doublecomplex *z__, integer *ldz, doublecomplex *work, 
-	integer *lwork, doublereal *rwork, integer *lrwork, integer *iwork, 
-	integer *liwork, integer *info);
- 
-/* Subroutine */ int zstein_(integer *n, doublereal *d__, doublereal *e, 
-	integer *m, doublereal *w, integer *iblock, integer *isplit, 
-	doublecomplex *z__, integer *ldz, doublereal *work, integer *iwork, 
-	integer *ifail, integer *info);
- 
-/* Subroutine */ int zsteqr_(char *compz, integer *n, doublereal *d__, 
-	doublereal *e, doublecomplex *z__, integer *ldz, doublereal *work, 
-	integer *info);
- 
-/* Subroutine */ int zsycon_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublereal *anorm, doublereal *rcond, 
-	doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zsymv_(char *uplo, integer *n, doublecomplex *alpha, 
-	doublecomplex *a, integer *lda, doublecomplex *x, integer *incx, 
-	doublecomplex *beta, doublecomplex *y, integer *incy);
- 
-/* Subroutine */ int zsyr_(char *uplo, integer *n, doublecomplex *alpha, 
-	doublecomplex *x, integer *incx, doublecomplex *a, integer *lda);
- 
-/* Subroutine */ int zsyrfs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, doublecomplex *af, integer *ldaf, 
-	integer *ipiv, doublecomplex *b, integer *ldb, doublecomplex *x, 
-	integer *ldx, doublereal *ferr, doublereal *berr, doublecomplex *work,
-	 doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zsysv_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, 
-	integer *ldb, doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zsysvx_(char *fact, char *uplo, integer *n, integer *
-	nrhs, doublecomplex *a, integer *lda, doublecomplex *af, integer *
-	ldaf, integer *ipiv, doublecomplex *b, integer *ldb, doublecomplex *x,
-	 integer *ldx, doublereal *rcond, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, integer *lwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int zsytf2_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, integer *info);
- 
-/* Subroutine */ int zsytrf_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublecomplex *work, integer *lwork, 
-	integer *info);
- 
-/* Subroutine */ int zsytri_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, integer *ipiv, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zsytrs_(char *uplo, integer *n, integer *nrhs, 
-	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int ztbcon_(char *norm, char *uplo, char *diag, integer *n, 
-	integer *kd, doublecomplex *ab, integer *ldab, doublereal *rcond, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int ztbrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, doublecomplex *ab, integer *ldab, 
-	doublecomplex *b, integer *ldb, doublecomplex *x, integer *ldx, 
-	doublereal *ferr, doublereal *berr, doublecomplex *work, doublereal *
-	rwork, integer *info);
- 
-/* Subroutine */ int ztbtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *kd, integer *nrhs, doublecomplex *ab, integer *ldab, 
-	doublecomplex *b, integer *ldb, integer *info);
- 
-/* Subroutine */ int ztgevc_(char *side, char *howmny, logical *select, 
-	integer *n, doublecomplex *a, integer *lda, doublecomplex *b, integer 
-	*ldb, doublecomplex *vl, integer *ldvl, doublecomplex *vr, integer *
-	ldvr, integer *mm, integer *m, doublecomplex *work, doublereal *rwork,
-	 integer *info);
- 
-/* Subroutine */ int ztgex2_(logical *wantq, logical *wantz, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *q, integer *ldq, doublecomplex *z__, integer *ldz, 
-	integer *j1, integer *info);
- 
-/* Subroutine */ int ztgexc_(logical *wantq, logical *wantz, integer *n, 
-	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *q, integer *ldq, doublecomplex *z__, integer *ldz, 
-	integer *ifst, integer *ilst, integer *info);
- 
-/* Subroutine */ int ztgsen_(integer *ijob, logical *wantq, logical *wantz, 
-	logical *select, integer *n, doublecomplex *a, integer *lda, 
-	doublecomplex *b, integer *ldb, doublecomplex *alpha, doublecomplex *
-	beta, doublecomplex *q, integer *ldq, doublecomplex *z__, integer *
-	ldz, integer *m, doublereal *pl, doublereal *pr, doublereal *dif, 
-	doublecomplex *work, integer *lwork, integer *iwork, integer *liwork, 
-	integer *info);
- 
-/* Subroutine */ int ztgsja_(char *jobu, char *jobv, char *jobq, integer *m, 
-	integer *p, integer *n, integer *k, integer *l, doublecomplex *a, 
-	integer *lda, doublecomplex *b, integer *ldb, doublereal *tola, 
-	doublereal *tolb, doublereal *alpha, doublereal *beta, doublecomplex *
-	u, integer *ldu, doublecomplex *v, integer *ldv, doublecomplex *q, 
-	integer *ldq, doublecomplex *work, integer *ncycle, integer *info);
- 
-/* Subroutine */ int ztgsna_(char *job, char *howmny, logical *select, 
-	integer *n, doublecomplex *a, integer *lda, doublecomplex *b, integer 
-	*ldb, doublecomplex *vl, integer *ldvl, doublecomplex *vr, integer *
-	ldvr, doublereal *s, doublereal *dif, integer *mm, integer *m, 
-	doublecomplex *work, integer *lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int ztgsy2_(char *trans, integer *ijob, integer *m, integer *
-	n, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *c__, integer *ldc, doublecomplex *d__, integer *ldd, 
-	doublecomplex *e, integer *lde, doublecomplex *f, integer *ldf, 
-	doublereal *scale, doublereal *rdsum, doublereal *rdscal, integer *
-	info);
- 
-/* Subroutine */ int ztgsyl_(char *trans, integer *ijob, integer *m, integer *
-	n, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb, 
-	doublecomplex *c__, integer *ldc, doublecomplex *d__, integer *ldd, 
-	doublecomplex *e, integer *lde, doublecomplex *f, integer *ldf, 
-	doublereal *scale, doublereal *dif, doublecomplex *work, integer *
-	lwork, integer *iwork, integer *info);
- 
-/* Subroutine */ int ztpcon_(char *norm, char *uplo, char *diag, integer *n, 
-	doublecomplex *ap, doublereal *rcond, doublecomplex *work, doublereal 
-	*rwork, integer *info);
- 
-/* Subroutine */ int ztprfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublecomplex *ap, doublecomplex *b, integer *ldb, 
-	doublecomplex *x, integer *ldx, doublereal *ferr, doublereal *berr, 
-	doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int ztptri_(char *uplo, char *diag, integer *n, 
-	doublecomplex *ap, integer *info);
- 
-/* Subroutine */ int ztptrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublecomplex *ap, doublecomplex *b, integer *ldb, 
-	integer *info);
- 
-/* Subroutine */ int ztrcon_(char *norm, char *uplo, char *diag, integer *n, 
-	doublecomplex *a, integer *lda, doublereal *rcond, doublecomplex *
-	work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int ztrevc_(char *side, char *howmny, logical *select, 
-	integer *n, doublecomplex *t, integer *ldt, doublecomplex *vl, 
-	integer *ldvl, doublecomplex *vr, integer *ldvr, integer *mm, integer 
-	*m, doublecomplex *work, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int ztrexc_(char *compq, integer *n, doublecomplex *t, 
-	integer *ldt, doublecomplex *q, integer *ldq, integer *ifst, integer *
-	ilst, integer *info);
- 
-/* Subroutine */ int ztrrfs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, doublecomplex *x, integer *ldx, doublereal *ferr, 
-	doublereal *berr, doublecomplex *work, doublereal *rwork, integer *
-	info);
- 
-/* Subroutine */ int ztrsen_(char *job, char *compq, logical *select, integer 
-	*n, doublecomplex *t, integer *ldt, doublecomplex *q, integer *ldq, 
-	doublecomplex *w, integer *m, doublereal *s, doublereal *sep, 
-	doublecomplex *work, integer *lwork, integer *info);
- 
-/* Subroutine */ int ztrsna_(char *job, char *howmny, logical *select, 
-	integer *n, doublecomplex *t, integer *ldt, doublecomplex *vl, 
-	integer *ldvl, doublecomplex *vr, integer *ldvr, doublereal *s, 
-	doublereal *sep, integer *mm, integer *m, doublecomplex *work, 
-	integer *ldwork, doublereal *rwork, integer *info);
- 
-/* Subroutine */ int ztrsyl_(char *trana, char *tranb, integer *isgn, integer 
-	*m, integer *n, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, doublecomplex *c__, integer *ldc, doublereal *scale, 
-	integer *info);
- 
-/* Subroutine */ int ztrti2_(char *uplo, char *diag, integer *n, 
-	doublecomplex *a, integer *lda, integer *info);
- 
-/* Subroutine */ int ztrtri_(char *uplo, char *diag, integer *n, 
-	doublecomplex *a, integer *lda, integer *info);
- 
-/* Subroutine */ int ztrtrs_(char *uplo, char *trans, char *diag, integer *n, 
-	integer *nrhs, doublecomplex *a, integer *lda, doublecomplex *b, 
-	integer *ldb, integer *info);
- 
-/* Subroutine */ int ztzrqf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, integer *info);
- 
-/* Subroutine */ int ztzrzf_(integer *m, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zung2l_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zung2r_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zungbr_(char *vect, integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zunghr_(integer *n, integer *ilo, integer *ihi, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zungl2_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zunglq_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zungql_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zungqr_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zungr2_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zungrq_(integer *m, integer *n, integer *k, 
-	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zungtr_(char *uplo, integer *n, doublecomplex *a, 
-	integer *lda, doublecomplex *tau, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zunm2l_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zunm2r_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zunmbr_(char *vect, char *side, char *trans, integer *m, 
-	integer *n, integer *k, doublecomplex *a, integer *lda, doublecomplex 
-	*tau, doublecomplex *c__, integer *ldc, doublecomplex *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int zunmhr_(char *side, char *trans, integer *m, integer *n, 
-	integer *ilo, integer *ihi, doublecomplex *a, integer *lda, 
-	doublecomplex *tau, doublecomplex *c__, integer *ldc, doublecomplex *
-	work, integer *lwork, integer *info);
- 
-/* Subroutine */ int zunml2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zunmlq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zunmql_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zunmqr_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zunmr2_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *info);
- 
-/* Subroutine */ int zunmr3_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, doublecomplex *a, integer *lda, doublecomplex 
-	*tau, doublecomplex *c__, integer *ldc, doublecomplex *work, integer *
-	info);
- 
-/* Subroutine */ int zunmrq_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zunmrz_(char *side, char *trans, integer *m, integer *n, 
-	integer *k, integer *l, doublecomplex *a, integer *lda, doublecomplex 
-	*tau, doublecomplex *c__, integer *ldc, doublecomplex *work, integer *
-	lwork, integer *info);
- 
-/* Subroutine */ int zunmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, doublecomplex *a, integer *lda, doublecomplex *tau, 
-	doublecomplex *c__, integer *ldc, doublecomplex *work, integer *lwork,
-	 integer *info);
- 
-/* Subroutine */ int zupgtr_(char *uplo, integer *n, doublecomplex *ap, 
-	doublecomplex *tau, doublecomplex *q, integer *ldq, doublecomplex *
-	work, integer *info);
- 
-/* Subroutine */ int zupmtr_(char *side, char *uplo, char *trans, integer *m, 
-	integer *n, doublecomplex *ap, doublecomplex *tau, doublecomplex *c__,
-	 integer *ldc, doublecomplex *work, integer *info);
-
-#endif /* __CLAPACK_H */
diff --git a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c
--- a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c
+++ b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c
@@ -101,6 +101,11 @@
 
 //////////////////// real svd ////////////////////////////////////
 
+/* Subroutine */ int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n,
+	doublereal *a, integer *lda, doublereal *s, doublereal *u, integer *
+	ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
+	integer *info);
+
 int svd_l_R(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) {
     integer m = ar;
     integer n = ac;
@@ -159,6 +164,11 @@
 
 // (alternative version)
 
+/* Subroutine */ int dgesdd_(char *jobz, integer *m, integer *n, doublereal *
+	a, integer *lda, doublereal *s, doublereal *u, integer *ldu,
+	doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
+	integer *iwork, integer *info);
+
 int svd_l_Rdd(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) {
     integer m = ar;
     integer n = ac;
@@ -331,6 +341,11 @@
 
 //////////////////// general complex eigensystem ////////////
 
+/* Subroutine */ int zgeev_(char *jobvl, char *jobvr, integer *n,
+	doublecomplex *a, integer *lda, doublecomplex *w, doublecomplex *vl,
+	integer *ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work,
+	integer *lwork, doublereal *rwork, integer *info);
+
 int eig_l_C(KCMAT(a), CMAT(u), CVEC(s),CMAT(v)) {
     integer n = ar;
     REQUIRES(ac==n && sn==n, BAD_SIZE);
@@ -381,6 +396,11 @@
 
 //////////////////// general real eigensystem ////////////
 
+/* Subroutine */ int dgeev_(char *jobvl, char *jobvr, integer *n, doublereal *
+	a, integer *lda, doublereal *wr, doublereal *wi, doublereal *vl,
+	integer *ldvl, doublereal *vr, integer *ldvr, doublereal *work,
+	integer *lwork, integer *info);
+
 int eig_l_R(KDMAT(a),DMAT(u), CVEC(s),DMAT(v)) {
     integer n = ar;
     REQUIRES(ac==n && sn==n, BAD_SIZE);
@@ -425,6 +445,9 @@
 
 //////////////////// symmetric real eigensystem ////////////
 
+/* Subroutine */ int dsyev_(char *jobz, char *uplo, integer *n, doublereal *a,
+	 integer *lda, doublereal *w, doublereal *work, integer *lwork,
+	integer *info);
 
 int eig_l_S(int wantV,KDMAT(a),DVEC(s),DMAT(v)) {
     integer n = ar;
@@ -460,6 +483,10 @@
 
 //////////////////// hermitian complex eigensystem ////////////
 
+/* Subroutine */ int zheev_(char *jobz, char *uplo, integer *n, doublecomplex
+	*a, integer *lda, doublereal *w, doublecomplex *work, integer *lwork,
+	doublereal *rwork, integer *info);
+
 int eig_l_H(int wantV,KCMAT(a),DVEC(s),CMAT(v)) {
     integer n = ar;
     REQUIRES(ac==n && sn==n, BAD_SIZE);
@@ -499,6 +526,9 @@
 
 //////////////////// general real linear system ////////////
 
+/* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, integer
+	*lda, integer *ipiv, doublereal *b, integer *ldb, integer *info);
+
 int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
     integer n = ar;
     integer nhrs = bc;
@@ -525,6 +555,10 @@
 
 //////////////////// general complex linear system ////////////
 
+/* Subroutine */ int zgesv_(integer *n, integer *nrhs, doublecomplex *a,
+	integer *lda, integer *ipiv, doublecomplex *b, integer *ldb, integer *
+	info);
+
 int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
     integer n = ar;
     integer nhrs = bc;
@@ -551,6 +585,10 @@
 
 //////// symmetric positive definite real linear system using Cholesky ////////////
 
+/* Subroutine */ int dpotrs_(char *uplo, integer *n, integer *nrhs,
+	doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
+	info);
+
 int cholSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
     integer n = ar;
     integer nhrs = bc;
@@ -569,6 +607,10 @@
 
 //////// Hermitian positive definite real linear system using Cholesky ////////////
 
+/* Subroutine */ int zpotrs_(char *uplo, integer *n, integer *nrhs,
+	doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb,
+	integer *info);
+
 int cholSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
     integer n = ar;
     integer nhrs = bc;
@@ -587,6 +629,10 @@
 
 //////////////////// least squares real linear system ////////////
 
+/* Subroutine */ int dgels_(char *trans, integer *m, integer *n, integer *
+	nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb,
+	doublereal *work, integer *lwork, integer *info);
+
 int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
     integer m = ar;
     integer n = ac;
@@ -631,6 +677,10 @@
 
 //////////////////// least squares complex linear system ////////////
 
+/* Subroutine */ int zgels_(char *trans, integer *m, integer *n, integer *
+	nrhs, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb,
+	doublecomplex *work, integer *lwork, integer *info);
+
 int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
     integer m = ar;
     integer n = ac;
@@ -675,6 +725,11 @@
 
 //////////////////// least squares real linear system using SVD ////////////
 
+/* Subroutine */ int dgelss_(integer *m, integer *n, integer *nrhs,
+	doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
+	s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork,
+	 integer *info);
+
 int linearSolveSVDR_l(double rcond,KDMAT(a),KDMAT(b),DMAT(x)) {
     integer m = ar;
     integer n = ac;
@@ -789,6 +844,9 @@
 
 //////////////////// Cholesky factorization /////////////////////////
 
+/* Subroutine */ int zpotrf_(char *uplo, integer *n, doublecomplex *a,
+	integer *lda, integer *info);
+
 int chol_l_H(KCMAT(a),CMAT(l)) {
     integer n = ar;
     REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE);
@@ -809,6 +867,10 @@
     OK
 }
 
+
+/* Subroutine */ int dpotrf_(char *uplo, integer *n, doublereal *a, integer *
+	lda, integer *info);
+
 int chol_l_S(KDMAT(a),DMAT(l)) {
     integer n = ar;
     REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE);
@@ -830,6 +892,9 @@
 
 //////////////////// QR factorization /////////////////////////
 
+/* Subroutine */ int dgeqr2_(integer *m, integer *n, doublereal *a, integer *
+	lda, doublereal *tau, doublereal *work, integer *info);
+
 int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -846,6 +911,9 @@
     OK
 }
 
+/* Subroutine */ int zgeqr2_(integer *m, integer *n, doublecomplex *a,
+	integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
+
 int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -864,6 +932,10 @@
 
 //////////////////// Hessenberg factorization /////////////////////////
 
+/* Subroutine */ int dgehrd_(integer *n, integer *ilo, integer *ihi,
+	doublereal *a, integer *lda, doublereal *tau, doublereal *work,
+	integer *lwork, integer *info);
+
 int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -882,6 +954,11 @@
     OK
 }
 
+
+/* Subroutine */ int zgehrd_(integer *n, integer *ilo, integer *ihi,
+	doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
+	work, integer *lwork, integer *info);
+
 int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -902,6 +979,11 @@
 
 //////////////////// Schur factorization /////////////////////////
 
+/* Subroutine */ int dgees_(char *jobvs, char *sort, L_fp select, integer *n,
+	doublereal *a, integer *lda, integer *sdim, doublereal *wr,
+	doublereal *wi, doublereal *vs, integer *ldvs, doublereal *work,
+	integer *lwork, logical *bwork, integer *info);
+
 int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)) {
     integer m = ar;
     integer n = ac;
@@ -936,6 +1018,12 @@
     OK
 }
 
+
+/* Subroutine */ int zgees_(char *jobvs, char *sort, L_fp select, integer *n,
+	doublecomplex *a, integer *lda, integer *sdim, doublecomplex *w,
+	doublecomplex *vs, integer *ldvs, doublecomplex *work, integer *lwork,
+	 doublereal *rwork, logical *bwork, integer *info);
+
 int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)) {
     integer m = ar;
     integer n = ac;
@@ -965,6 +1053,9 @@
 
 //////////////////// LU factorization /////////////////////////
 
+/* Subroutine */ int dgetrf_(integer *m, integer *n, doublereal *a, integer *
+	lda, integer *ipiv, integer *info);
+
 int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -987,6 +1078,10 @@
     OK
 }
 
+
+/* Subroutine */ int zgetrf_(integer *m, integer *n, doublecomplex *a,
+	integer *lda, integer *ipiv, integer *info);
+
 int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)) {
     integer m = ar;
     integer n = ac;
@@ -1012,6 +1107,10 @@
 
 //////////////////// LU substitution /////////////////////////
 
+/* Subroutine */ int dgetrs_(char *trans, integer *n, integer *nrhs,
+	doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer *
+	ldb, integer *info);
+
 int luS_l_R(KDMAT(a), KDVEC(ipiv), KDMAT(b), DMAT(x)) {
   integer m = ar;
   integer n = ac;
@@ -1031,6 +1130,11 @@
   free(auxipiv);
   OK
 }
+
+
+/* Subroutine */ int zgetrs_(char *trans, integer *n, integer *nrhs,
+	doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b,
+	integer *ldb, integer *info);
 
 int luS_l_C(KCMAT(a), KDVEC(ipiv), KCMAT(b), CMAT(x)) {
     integer m = ar;
diff --git a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h
--- a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h
+++ b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h
@@ -36,10 +36,6 @@
 
 /********************************************************/
 
-#include "clapack.h"
-
-/********************************************************/
-
 #define FVEC(A) int A##n, float*A##p
 #define DVEC(A) int A##n, double*A##p
 #define QVEC(A) int A##n, complex*A##p
@@ -62,70 +58,3 @@
 #define KCMAT(A) int A##r, int A##c, const doublecomplex* A##p
 #define KPMAT(A) int A##r, int A##c, const void* A##p, int A##s
 
-/********************************************************/
-
-int multiplyF(int ta, int tb, KFMAT(a),KFMAT(b),FMAT(r));
-int multiplyR(int ta, int tb, KDMAT(a),KDMAT(b),DMAT(r));
-int multiplyC(int ta, int tb, KCMAT(a),KCMAT(b),CMAT(r));
-int multiplyQ(int ta, int tb, KQMAT(a),KQMAT(b),QMAT(r));
-
-int transF(KFMAT(x),FMAT(t));
-int transR(KDMAT(x),DMAT(t));
-int transQ(KQMAT(x),QMAT(t));
-int transC(KCMAT(x),CMAT(t));
-int transP(KPMAT(x),PMAT(t));
-
-int constantF(float * pval, FVEC(r));
-int constantR(double * pval, DVEC(r));
-int constantQ(complex* pval, QVEC(r));
-int constantC(doublecomplex* pval, CVEC(r));
-int constantP(void* pval, PVEC(r));
-
-int float2double(FVEC(x),DVEC(y));
-int double2float(DVEC(x),FVEC(y));
-
-int conjugateQ(KQVEC(x),QVEC(t));
-int conjugateC(KCVEC(x),CVEC(t));
-
-int stepF(FVEC(x),FVEC(y));
-int stepD(DVEC(x),DVEC(y));
-
-int condF(FVEC(x),FVEC(y),FVEC(lt),FVEC(eq),FVEC(gt),FVEC(r));
-int condD(DVEC(x),DVEC(y),DVEC(lt),DVEC(eq),DVEC(gt),DVEC(r));
-
-int svd_l_R(KDMAT(x),DMAT(u),DVEC(s),DMAT(v));
-int svd_l_Rdd(KDMAT(x),DMAT(u),DVEC(s),DMAT(v));
-int svd_l_C(KCMAT(a),CMAT(u),DVEC(s),CMAT(v));
-
-int eig_l_C(KCMAT(a),CMAT(u),CVEC(s),CMAT(v));
-int eig_l_R(KDMAT(a),DMAT(u),CVEC(s),DMAT(v));
-
-int eig_l_S(int,KDMAT(a),DVEC(s),DMAT(v));
-int eig_l_H(int,KCMAT(a),DVEC(s),CMAT(v));
-
-int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x));
-int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x));
-
-int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x));
-int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x));
-
-int linearSolveSVDR_l(double,KDMAT(a),KDMAT(b),DMAT(x));
-int linearSolveSVDC_l(double,KCMAT(a),KCMAT(b),CMAT(x));
-
-int chol_l_H(KCMAT(a),CMAT(r));
-int chol_l_S(KDMAT(a),DMAT(r));
-
-int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r));
-int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r));
-
-int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r));
-int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r));
-
-int schur_l_R(KDMAT(a), DMAT(u), DMAT(s));
-int schur_l_C(KCMAT(a), CMAT(u), CMAT(s));
-
-int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r));
-int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r));
-
-int luS_l_R(KDMAT(a), KDVEC(ipiv), KDMAT(b), DMAT(x));
-int luS_l_C(KCMAT(a), KDVEC(ipiv), KCMAT(b), CMAT(x));
diff --git a/lib/Numeric/LinearAlgebra/Util.hs b/lib/Numeric/LinearAlgebra/Util.hs
--- a/lib/Numeric/LinearAlgebra/Util.hs
+++ b/lib/Numeric/LinearAlgebra/Util.hs
@@ -2,7 +2,7 @@
 -----------------------------------------------------------------------------
 {- |
 Module      :  Numeric.LinearAlgebra.Util
-Copyright   :  (c) Alberto Ruiz 2012
+Copyright   :  (c) Alberto Ruiz 2013
 License     :  GPL
 
 Maintainer  :  Alberto Ruiz (aruiz at um dot es)
@@ -12,16 +12,24 @@
 -----------------------------------------------------------------------------
 
 module Numeric.LinearAlgebra.Util(
-    -- * Convenience functions for real elements
-    disp,
+    
+    -- * Convenience functions
+    size, disp,
     zeros, ones,
     diagl,
     row,
     col,
-    (&),(!), (#),
+    (&),(!), (¦), (#),
+    (?),(¿),
     rand, randn,
     cross,
     norm,
+    unitary,
+    mt,
+    pairwiseD2,
+    rowOuters,
+    null1,
+    null1sym,
     -- * Convolution
     -- ** 1D
     corr, conv, corrMin,
@@ -40,7 +48,11 @@
     vtrans
 ) where
 
-import Numeric.LinearAlgebra hiding (i)
+import Numeric.Container
+import Numeric.LinearAlgebra.Algorithms hiding (i)
+import Numeric.Matrix()
+import Numeric.Vector()
+
 import System.Random(randomIO)
 import Numeric.LinearAlgebra.Util.Convolution
 
@@ -92,6 +104,11 @@
 (!) :: Matrix Double -> Matrix Double -> Matrix Double
 a ! b = fromBlocks [[a,b]]
 
+-- | (00A6) horizontal concatenation of real matrices
+infixl 3 ¦
+(¦) :: Matrix Double -> Matrix Double -> Matrix Double
+a ¦ b = fromBlocks [[a,b]]
+
 -- | vertical concatenation of real matrices
 (#) :: Matrix Double -> Matrix Double -> Matrix Double
 infixl 2 #
@@ -105,6 +122,17 @@
 col :: [Double] -> Matrix Double
 col = asColumn . fromList
 
+-- | extract selected rows
+infixl 9 ?
+(?) :: Element t => Matrix t -> [Int] -> Matrix t
+(?) = flip extractRows
+
+-- | (00BF) extract selected columns
+infixl 9 ¿
+(¿) :: Element t => Matrix t -> [Int] -> Matrix t
+m ¿ ks = trans . extractRows ks . trans $ m
+
+
 cross :: Vector Double -> Vector Double -> Vector Double
 -- ^ cross product (for three-element real vectors)
 cross x y | dim x == 3 && dim y == 3 = fromList [z1,z2,z3]
@@ -119,6 +147,55 @@
 norm :: Vector Double -> Double
 -- ^ 2-norm of real vector
 norm = pnorm PNorm2
+
+
+-- | Obtains a vector in the same direction with 2-norm=1
+unitary :: Vector Double -> Vector Double
+unitary v = v / scalar (norm v)
+
+-- | (rows &&& cols)
+size :: Matrix t -> (Int, Int)
+size m = (rows m, cols m)
+
+-- | trans . inv
+mt :: Matrix Double -> Matrix Double
+mt = trans . inv
+
+----------------------------------------------------------------------
+
+-- | Matrix of pairwise squared distances of row vectors
+-- (using the matrix product trick in blog.smola.org)
+pairwiseD2 :: Matrix Double -> Matrix Double -> Matrix Double
+pairwiseD2 x y | ok = x2 `outer` oy + ox `outer` y2 - 2* x <> trans y
+               | otherwise = error $ "pairwiseD2 with different number of columns: "
+                                   ++ show (size x) ++ ", " ++ show (size y)
+  where
+    ox = one (rows x)
+    oy = one (rows y)
+    oc = one (cols x)
+    one k = constant 1 k
+    x2 = x * x <> oc
+    y2 = y * y <> oc
+    ok = cols x == cols y
+
+--------------------------------------------------------------------------------
+
+-- | outer products of rows
+rowOuters :: Matrix Double -> Matrix Double -> Matrix Double
+rowOuters a b = a' * b'
+  where
+    a' = kronecker a (ones 1 (cols b))
+    b' = kronecker (ones 1 (cols a)) b
+
+--------------------------------------------------------------------------------
+
+-- | solution of overconstrained homogeneous linear system
+null1 :: Matrix Double -> Vector Double
+null1 = last . toColumns . snd . rightSV
+
+-- | solution of overconstrained homogeneous symmetric linear system
+null1sym :: Matrix Double -> Vector Double
+null1sym = last . toColumns . snd . eigSH'
 
 --------------------------------------------------------------------------------
 
diff --git a/lib/Numeric/Vector.hs b/lib/Numeric/Vector.hs
--- a/lib/Numeric/Vector.hs
+++ b/lib/Numeric/Vector.hs
@@ -25,33 +25,6 @@
 
 -------------------------------------------------------------------
 
-#ifndef VECTOR
-import Foreign(Storable)
-#endif
-
-------------------------------------------------------------------
-
-#ifndef VECTOR
-
-instance (Show a, Storable a) => (Show (Vector a)) where
-    show v = (show (dim v))++" |> " ++ show (toList v)
-
-instance Container Vector a => Eq (Vector a) where
-    (==) = equal
-
-instance (Element a, Read a) => Read (Vector a) where
-    readsPrec _ s = [((d |>) . read $ listnums, rest)]
-        where (thing,rest) = breakAt ']' s
-              (dims,listnums) = breakAt '>' thing
-              d = read . init . fst . breakAt '|' $ dims
-              breakAt c l = (a++[c],tail b) where
-                  (a,b) = break (==c) l
-
-#endif
-
-
-------------------------------------------------------------------
-
 adaptScalar f1 f2 f3 x y
     | dim x == 1 = f1   (x@>0) y
     | dim y == 1 = f3 x (y@>0)
