1 /*
2  *   Copyright (c) 2012, Michael Lehn
3  *
4  *   All rights reserved.
5  *
6  *   Redistribution and use in source and binary forms, with or without
7  *   modification, are permitted provided that the following conditions
8  *   are met:
9  *
10  *   1) Redistributions of source code must retain the above copyright
11  *      notice, this list of conditions and the following disclaimer.
12  *   2) Redistributions in binary form must reproduce the above copyright
13  *      notice, this list of conditions and the following disclaimer in
14  *      the documentation and/or other materials provided with the
15  *      distribution.
16  *   3) Neither the name of the FLENS development group nor the names of
17  *      its contributors may be used to endorse or promote products derived
18  *      from this software without specific prior written permission.
19  *
20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef CXXLAPACK_INTERFACE_LACN2_TCC
34 #define CXXLAPACK_INTERFACE_LACN2_TCC 1
35 
36 #include <iostream>
37 #include "xflens/cxxlapack/interface/interface.h"
38 #include "xflens/cxxlapack/netlib/netlib.h"
39 
40 namespace cxxlapack {
41 
42 template <typename IndexType>
43 void
lacn2(IndexType n,float * v,float * x,IndexType * isgn,float & est,IndexType & kase,IndexType * iSave)44 lacn2(IndexType         n,
45       float             *v,
46       float             *x,
47       IndexType         *isgn,
48       float             &est,
49       IndexType         &kase,
50       IndexType         *iSave)
51 {
52     CXXLAPACK_DEBUG_OUT("slacn2");
53 
54     LAPACK_IMPL(slacn2)(&n,
55                         v,
56                         x,
57                         isgn,
58                         &est,
59                         &kase,
60                         iSave);
61 }
62 
63 template <typename IndexType>
64 void
lacn2(IndexType n,double * v,double * x,IndexType * isgn,double & est,IndexType & kase,IndexType * iSave)65 lacn2(IndexType         n,
66       double            *v,
67       double            *x,
68       IndexType         *isgn,
69       double            &est,
70       IndexType         &kase,
71       IndexType         *iSave)
72 {
73     CXXLAPACK_DEBUG_OUT("dlacn2");
74 
75     LAPACK_IMPL(dlacn2)(&n,
76                         v,
77                         x,
78                         isgn,
79                         &est,
80                         &kase,
81                         iSave);
82 }
83 
84 template <typename IndexType>
85 void
lacn2(IndexType n,std::complex<float> * v,std::complex<float> * x,float & est,IndexType & kase,IndexType * iSave)86 lacn2(IndexType             n,
87       std::complex<float >  *v,
88       std::complex<float >  *x,
89       float                 &est,
90       IndexType             &kase,
91       IndexType             *iSave)
92 {
93     CXXLAPACK_DEBUG_OUT("clacn2");
94 
95     LAPACK_IMPL(clacn2)(&n,
96                         reinterpret_cast<float  *>(v),
97                         reinterpret_cast<float  *>(x),
98                         &est,
99                         &kase,
100                         iSave);
101 }
102 
103 template <typename IndexType>
104 void
lacn2(IndexType n,std::complex<double> * v,std::complex<double> * x,double & est,IndexType & kase,IndexType * iSave)105 lacn2(IndexType             n,
106       std::complex<double>  *v,
107       std::complex<double>  *x,
108       double                &est,
109       IndexType             &kase,
110       IndexType             *iSave)
111 {
112     CXXLAPACK_DEBUG_OUT("zlacn2");
113 
114     LAPACK_IMPL(zlacn2)(&n,
115                         reinterpret_cast<double *>(v),
116                         reinterpret_cast<double *>(x),
117                         &est,
118                         &kase,
119                         iSave);
120 }
121 
122 } // namespace cxxlapack
123 
124 #endif // CXXLAPACK_INTERFACE_LACN2_TCC
125