Anasazi Version of the Day
Loading...
Searching...
No Matches
ModeLaplace1DQ1.h
1// @HEADER
2// *****************************************************************************
3// Anasazi: Block Eigensolvers Package
4//
5// Copyright 2004 NTESS and the Anasazi contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10// This software is a result of the research described in the report
11//
12// "A comparison of algorithms for modal analysis in the absence
13// of a sparse direct method", P. Arbenz, R. Lehoucq, and U. Hetmaniuk,
14// Sandia National Laboratories, Technical report SAND2003-1028J.
15//
16// It is based on the Epetra, AztecOO, and ML packages defined in the Trilinos
17// framework ( http://trilinos.org/ ).
18
19#ifndef MODE_LAPLACE_1D_Q1_H
20#define MODE_LAPLACE_1D_Q1_H
21
22#include "Epetra_ConfigDefs.h"
23
24#include "Epetra_Comm.h"
25#include "Epetra_CrsMatrix.h"
26#include "Epetra_MultiVector.h"
27#include "Epetra_Operator.h"
28#include "Epetra_RowMatrix.h"
29
30#include "CheckingTools.h"
31#include "ModeLaplace.h"
32#include "SortingTools.h"
33
34class ModeLaplace1DQ1 : public ModeLaplace {
35
36 private:
37
38 const CheckingTools myVerify;
39 const Epetra_Comm &MyComm;
40 const SortingTools mySort;
41
42 Epetra_Map *Map;
43 Epetra_Operator *K;
44 Epetra_Operator *M;
45
46 double Lx;
47 int nX;
48
49 double *x;
50
51 static const int dofEle;
52 static const int maxConnect;
53#ifndef M_PI
54 static const double M_PI;
55#endif
56
57 // Private member functions
58 void preProcess();
59 void makeMap();
60 int countElements(bool *isTouched);
61 void makeMyElementsTopology(int *elemTopo, bool *isTouched);
62 void makeMyConnectivity(int *elemTopo, int numEle, int *connectivity, int *numNz);
63 void makeStiffness(int *elemTopo, int numEle, int *connectivity, int *numNz);
64 void makeMass(int *elemTopo, int numEle, int *connectivity, int *numNz);
65
66 // Don't define these functions
67 ModeLaplace1DQ1(const ModeLaplace1DQ1 &ref);
68 ModeLaplace1DQ1& operator=(const ModeLaplace1DQ1 &ref);
69
70 public:
71
72 ModeLaplace1DQ1(const Epetra_Comm &_Comm, double _Lx, int _nX);
73
74 ~ModeLaplace1DQ1();
75
76 const Epetra_Operator* getStiffness() const { return K; }
77 const Epetra_Operator* getMass() const { return M; }
78
79 double getFirstMassEigenValue() const;
80
81 int eigenCheck(const Epetra_MultiVector &Q, double *lambda, double *normWeight) const;
82
83 void memoryInfo() const;
84 void problemInfo() const;
85
86};
87
88#endif