LINEAR++ library: AFF to LAPACK
genmd.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 #include "arch.h"
7 #include "lapack.h"
8 #include "f2c.h"
9 
10 #ifdef _LA_TRIDIAG_MAT_DOUBLE_H_
11 inline void LaGenerateMatDouble(LaTridiagMatDouble &A)
12 {
13  // the lapack dtimmg() routine assumes that the three
14  // diagonals of A are stored contiguously. This is not
15  // a typical requirement of tridiagonal matrices, so
16  // we first create a tmp vector hold the contiguous values
17  // to be initalized, and then copy this back into A.
18 
19  integer N = A.size();
20  LaVectorDouble tmp(3*N-2);
21  integer iflag = -12, ku =0, kl= 0;
22  integer m = 3*N-2, n=1;
23 
24  F77NAME(dtimmg)(&iflag, &m, &n, &tmp(0), &m, &kl, &ku);
25 
26  A.diag(-1) = tmp(LaIndex(0,N-2));
27  A.diag(0) = tmp(LaIndex(N-1, 2*N-2));
28  A.diag(1) = tmp(LaIndex(2*N-1, 3*N-3));
29 }
30 #endif
31 
32 #ifdef _LA_SYMM_TRIDIAG_MAT_DOUBLE_H_
33 inline void LaGenerateMatDouble(LaSymmTridiagMatDouble &A)
34 {
35  // the lapack dtimmg() routine assumes that the
36  // diagonals of A are stored contiguously.
37  // We first create a tmp vector hold the contiguous values
38  // to be initalized, and then copy this back into A.
39 
40  integer N = A.size();
41  LaVectorDouble tmp(2*N-1);
42  integer iflag = -13, ku =0, kl= 0;
43  integer m = 2*N-1, n=1;
44 
45  F77NAME(dtimmg)(&iflag, &m, &n, &tmp(0), &m, &kl, &ku);
46 
47  //cout << tmp << endl;
48  //cout << tmp(LaIndex(0,N-2)) << endl;
49 
50  A.diag(-1) = tmp(LaIndex(0,N-2));
51  A.diag(0) = tmp(LaIndex(N-1, 2*N-2));
52 }
53 #endif
54 
55 #ifdef _LA_GEN_MAT_DOUBLE_H_
56 inline void LaGenerateMatDouble(LaGenMatDouble &A)
57 {
58  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
59  integer iflag = 0, ku = 0, kl = 0;
60 
61  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
62 }
63 
64 extern "C" double drand48(void);
65 LaGenMatDouble& LaRandUniform(LaGenMatDouble &A, double low, double high)
66 {
67  int M = A.size(0), N = A.size(1);
68  int i,j;
69 
70  double scale = high-low;
71  for (j=0; j<N; j++)
72  for (i=0; i<M; i++)
73  A(i,j) = low + scale * drand48();
74 
75  return A;
76 }
77 #endif
78 
79 #ifdef _LA_UPPER_TRIANG_MAT_DOUBLE_H_
80 inline void LaGenerateMatDouble(LaUpperTriangMatDouble &A)
81 {
82  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
83  integer iflag = 9, ku = 0, kl = 0;
84 
85  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
86 }
87 #endif
88 
89 #ifdef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
90 inline void LaGenerateMatDouble(LaLowerTriangMatDouble &A)
91 {
92  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
93  integer iflag = -9, ku = 0, kl = 0;
94 
95  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
96 }
97 #endif
98 
99 
100 #ifdef _LA_SYMM_MAT_DOUBLE_H_
101 inline void LaGenerateMatDouble(LaSymmMatDouble &A)
102 {
103  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
104  integer iflag = -6, ku = 0, kl = 0;
105 
106  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
107 }
108 #endif
109 
110 #ifdef _LA_SPD_MAT_DOUBLE_H_
111 inline void LaGenerateMatDouble(LaSpdMatDouble &A)
112 {
113  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
114  integer iflag = -3;
115  integer ku = 0;
116  integer kl = 0;
117 
118  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
119 }
120 #endif
121 
122 #ifdef _LA_SPD_BAND_MAT_DOUBLE_H_
123 inline void LaGenerateMatDouble(LaSpdBandMatDouble &A)
124 {
125  integer m = A.size(0), n = A.size(1), lda = A.gdim(0);
126  integer iflag = -5;
127  integer ku = A.subdiags();
128  integer kl = A.subdiags();
129 
130  F77NAME(dtimmg)(&iflag, &m, &n, &A(0,0), &lda, &ku, &kl);
131 }
132 #endif
133 
134 
135 #ifdef _LA_BAND_MAT_DOUBLE_H_
136 inline void LaGenerateMatDouble(LaBandMatDouble &A)
137 {
138  integer iflag = 2, ku = A.superdiags(), kl = A.subdiags();
139  integer m = A.size(1), n = A.size(1), lda = A.gdim(0); // changed 11/8
140 
141  F77NAME(dtimmg)(&iflag, &m, &n, &A(-kl,0), &lda, &ku, &kl);
142 }
143 #endif
144 
145 
146 
long int integer
Definition: f77lapack.h:61
void F77NAME() dtimmg(integer *iflag, integer *m, integer *n, doublereal *A, integer *lda, integer *kl, integer *ku)
#define F77NAME(x)
Definition: arch.h:17