1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
/*
ARPACK++ v1.2 2/20/2000
c++ interface to ARPACK code.
MODULE BSMatrxB.h
Function template for the one dimensional discrete Laplacian
on the interval [0, 1], with zero Dirichlet boundary conditions.
Matrix A is generated in symmetric band format, which means that
only the main diagonal and the lower or the upper band of the
matrix are stored.
ARPACK Authors
Richard Lehoucq
Danny Sorensen
Chao Yang
Dept. of Computational & Applied Mathematics
Rice University
Houston, Texas
*/
#ifndef BSMATRXB_H
#define BSMATRXB_H
#include <math.h>
template<class ARFLOAT, class ARINT>
void BandMatrixB(ARINT n, ARINT& nD, ARFLOAT* &A, char uplo='L')
{
// Defining internal variables.
ARINT i;
ARFLOAT h, df, dd;
// Defining constants.
h = 1.0/ARFLOAT(n+1);
dd = 2.0/h;
df = -1.0/h;
// Defining the upper (or lower) bandwidth.
nD = 1;
// Creating output vector A.
A = new ARFLOAT[2*n];
if (uplo == 'L') {
for (i=0; i<n; i++) {
A[2*i] = dd;
if (n-i-1) A[2*i+1] = df;
}
}
else {
for (i=0; i<n; i++) {
if (i) A[2*i] = df;
A[2*i+1] = dd;
}
}
} // BandMatrixB.
#endif // BSMATRXB_H
|