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 BSMatrxC.h
Function template for the mass matrix formed by using piecewise
linear elements on the interval [0, 1].
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 BSMATRXC_H
#define BSMATRXC_H
#include <math.h>
template<class ARFLOAT, class ARINT>
void BandMatrixC(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 = (4.0/6.0)*h;
df = (1.0/6.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;
}
}
} // BandMatrixC.
#endif // BSMATRXC_H
|