LINEAR++ library: AFF to LAPACK
syfd.h
Go to the documentation of this file.
1 // LAPACK++ (V. 1.1)
2 // (C) 1992-1996 All Rights Reserved.
3 // Copyright (c) 1992 by J. J. Dongarra, E. Greaser, R. Pozo, D. Walker
4 // see file README.lapack++
5 
6 
7 #ifndef _LA_SYMM_FACT_DOUBLE_H_
8 #define _LA_SYMM_FACT_DOUBLE_H_
9 
10 #include "lafnames.h"
11 #include LA_VECTOR_INT_H
12 #include LA_SYMM_MAT_DOUBLE_H
13 
14 
15 #include "lapack.h"
16 
18 {
19  LaSymmMatDouble S_;
20  LaVectorLongInt pivot_;
21  int info_;
22  char uplo_;
23  int size_;
24  int gdim_;
25 
26 public:
27 
28  // constructor
29 
30  inline LaSymmFactDouble();
31  inline LaSymmFactDouble(int,int);
32  inline LaSymmFactDouble(const LaSymmFactDouble &);
33  inline ~LaSymmFactDouble();
34 
35  // extraction functions for components
36 
37  inline LaSymmMatDouble& S() { return S_; }
38  inline LaVectorLongInt& pivot() { return pivot_; }
39  inline int info() { return info_; }
40  inline char uplo(){ return uplo_; }
41  inline int size() { return size_; }
42  inline int gdim() { return gdim_; }
43 
44  // operators
45 
47  inline LaSymmFactDouble ref(LaSymmMatDouble &);
48  inline LaSymmFactDouble& copy(const LaSymmFactDouble &);
49  inline LaSymmFactDouble& copy(const LaSymmMatDouble &);
50 
51 };
52 
53 
54 
55  // constructor/destructor functions
56 
57 inline LaSymmFactDouble::LaSymmFactDouble():S_(),pivot_(),info_(0),uplo_('L')
58 {}
59 
60 
61 inline LaSymmFactDouble::LaSymmFactDouble(int n, int m):S_(n,m),pivot_(n*m),
62  info_(0),uplo_('L')
63 {}
64 
65 
67 {
68  S_.copy(F.S_);
69  pivot_.copy(F.pivot_);
70  info_ = F.info_;
71  uplo_ = F.uplo_;
72  size_ = F.size_;
73  gdim_ = F.gdim_;
74 }
75 
77 {}
78 
79  // operators
80 
81 
83 {
84  S_.ref(F.S_);
85  pivot_.ref(F.pivot_);
86  info_ = F.info_;
87  uplo_ = F.uplo_;
88  size_ = F.size_;
89  gdim_ = F.gdim_;
90 
91  return *this;
92 }
93 
95 {
96  S_.copy(F.S_);
97  pivot_.copy(F.pivot_);
98  info_ = F.info_;
99  uplo_ = F.uplo_;
100  size_ = F.size_;
101  gdim_ = F.gdim_;
102 
103  return *this;
104 }
105 
106 inline LaSymmFactDouble LaSymmFactDouble::ref(LaSymmMatDouble &G)
107 {
108  S_.ref(G);
109  info_ = 0;
110  uplo_ = 'L';
111  size_ = G.size(0);
112  gdim_ = G.gdim(0);
113 
114  return *this;
115 }
116 
117 inline LaSymmFactDouble& LaSymmFactDouble::copy(const LaSymmMatDouble &G)
118 {
119  S_.copy(G);
120  info_ = 0;
121  uplo_ = 'L';
122  size_ = G.size(0);
123  gdim_ = G.gdim(0);
124 
125  return *this;
126 }
127 
128 #if 0
129 inline void LaSymmMatFactorize(LaSymmMatDouble &A, LaSymmFactDouble &AF)
130 {
131  char UPLO = 'L';
132  integer N = A.size(0), LDA = A.gdim(0), info = 0;
133 // integer M = DSYTRF;
134 // integer NB = F77NAME(get_nb)(&N,&M);
135 
136  integer LWORK = N*NB;
137  double *WORK = new double[LWORK];
138  LaVectorLongInt piv(N);
139  AF.pivot().copy(piv); // make copies of A and pivot information
140  AF.copy(A);
141 
142  F77NAME(dsytrf)(&UPLO, &N, &(AF.S()(0,0)), &LDA, &(AF.pivot()(0)), WORK,
143  &LWORK, &info);
144 
145  delete [] WORK;
146 }
147 #endif
148 inline void LaLinearSolve(LaSymmFactDouble &AF, LaGenMatDouble &X,
149  LaGenMatDouble &B)
150 {
151  char uplo = 'L';
152  integer N = AF.size(), nrhs = X.size(1), lda = AF.gdim(),
153  ldb = B.size(0), info = 0;
154 
155  X.inject(B);
156  F77NAME(dsytrs)(&uplo, &N, &nrhs, &(AF.S()(0,0)), &lda,
157  &(AF.pivot()(0)), &X(0,0), &ldb, &info);
158 
159 }
160 
161 #endif
162 // _LA_SYMM_FACT_DOUBLE_H_
LaSymmMatDouble & S()
Definition: syfd.h:37
char uplo_
Definition: syfd.h:22
char uplo()
Definition: syfd.h:40
void F77NAME() dsytrs(char *uplo, integer *N, integer *nrhs, doublereal *A, integer *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info)
LaVectorLongInt & pivot()
Definition: syfd.h:38
long int integer
Definition: f77lapack.h:61
LaSymmMatDouble S_
Definition: syfd.h:19
LaSymmFactDouble ref(LaSymmFactDouble &)
Definition: syfd.h:82
int size()
Definition: syfd.h:41
int gdim()
Definition: syfd.h:42
~LaSymmFactDouble()
Definition: syfd.h:76
LaVectorLongInt pivot_
Definition: syfd.h:20
LaSymmFactDouble()
Definition: syfd.h:57
#define F77NAME(x)
Definition: arch.h:17
void F77NAME() dsytrf(char *UPLO, integer *N, doublereal *SM, integer *LDSM, integer *ipiv, doublereal *WORK, integer *LWORK, integer *info)
LaSymmFactDouble & copy(const LaSymmFactDouble &)
Definition: syfd.h:94
int info()
Definition: syfd.h:39
void LaLinearSolve(LaSymmFactDouble &AF, LaGenMatDouble &X, LaGenMatDouble &B)
Definition: syfd.h:148