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 DSMatrxC.h
   Function template for the mass matrix formed by using piecewise
   linear elements on the interval [0, 1].
   ARPACK Authors
      Richard Lehoucq
      Danny Sorensen
      Chao Yang
      Dept. of Computational & Applied Mathematics
      Rice University
      Houston, Texas
*/
#ifndef DSMATRXC_H
#define DSMATRXC_H
#include <math.h>
template<class ARFLOAT, class ARINT>
void DenseMatrixC(ARINT n, ARFLOAT* &A, char uplo='L')
{
  // Defining internal variables.
  ARINT    i, j;
  ARFLOAT  h, df, dd;
  // Defining constants.
  h  = 1.0/ARFLOAT(n+1);
  dd = (4.0/6.0)*h;
  df = (1.0/6.0)*h;
  // Creating output vector A.
  A   = new ARFLOAT[(n*n+n)/2];
  if (uplo == 'L') {
    for (i=0, j=0; i<n; j+=(n-(i++))) {
      A[j] = dd;
      if (i != (n-1)) {
        A[j+1] = df;
      }
    
    }
  }
  else {
    for (i=0, j=0; i<n; j+=(++i)) {
      A[j+i] = dd;
      if (i != 0) {
        A[j+i-1] = df;
      }
    
    }  
  }
    
} // DenseMatrixC.
#endif // DSMATRXC_H
 
     |