FEI Package Browser (Single Doxygen Collection)  Version of the Day
fei_Reducer.hpp
Go to the documentation of this file.
1 /*--------------------------------------------------------------------*/
2 /* Copyright 2006 Sandia Corporation. */
3 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
4 /* non-exclusive license for use of this work by or on behalf */
5 /* of the U.S. Government. Export of this program may require */
6 /* a license from the United States Government. */
7 /*--------------------------------------------------------------------*/
8 
9 #ifndef _fei_Reducer_hpp_
10 #define _fei_Reducer_hpp_
11 
12 #include <fei_macros.hpp>
13 #include <fei_SharedPtr.hpp>
14 #include <fei_mpi.h>
15 #include <fei_Logger.hpp>
16 #include <fei_CSVec.hpp>
17 #include <fei_FillableMat.hpp>
18 #include <fei_CSVec.hpp>
19 #include <fei_CSRMat.hpp>
20 
21 namespace fei {
22  class MatrixGraph;
23  class Graph;
24  class Matrix;
25  class Vector;
26 
27  class Reducer : private fei::Logger {
28  public:
30  Reducer(fei::SharedPtr<FillableMat> globalSlaveDependencyMatrix,
31  fei::SharedPtr<CSVec> g_vector,
32  MPI_Comm comm);
33 
36 
38 
40  virtual ~Reducer();
41 
43  void setLocalUnreducedEqns(const std::vector<int>& localUnreducedEqns);
44 
45 
50 
51  void addGraphIndices(int numRows, const int* rows,
52  int numCols, const int* cols,
53  fei::Graph& graph);
54 
55  void addSymmetricGraphIndices(int numIndices, const int* indices,
56  bool diagonal,
57  fei::Graph& graph);
58 
66  int addMatrixValues(int numRows, const int* rows,
67  int numCols, const int* cols,
68  const double* const* values,
69  bool sum_into,
70  fei::Matrix& feimat,
71  int format);
72 
98  int addVectorValues(int numValues,
99  const int* globalIndices,
100  const double* values,
101  bool sum_into,
102  bool soln_vector,
103  int vectorIndex,
104  fei::Vector& feivec);
105 
106  int copyOutVectorValues(int numValues,
107  const int* globalIndices,
108  double* values,
109  bool soln_vector,
110  int vectorIndex,
111  fei::Vector& feivec);
112 
113  void getSlaveMasterEqns(int slaveEqn, std::vector<int>& masterEqns);
114  bool isSlaveEqn(int unreducedEqn) const;
115  bool isSlaveCol(int unreducedEqn) const;
116 
121  int translateToReducedEqn(int unreducedEqn) const;
122  int translateFromReducedEqn(int reduced_eqn) const;
123  void assembleReducedGraph(fei::Graph* graph,
124  bool global_gather=true);
126  void assembleReducedMatrix(fei::Matrix& matrix);
127  void assembleReducedVector(bool soln_vector,
128  fei::Vector& feivec);
129 
130  std::vector<int>& getLocalReducedEqns();
131 
132  void initialize();
133  private:
134  void expand_work_arrays(int size);
135 
144 
147 
148  std::vector<int> localUnreducedEqns_;
149  std::vector<int> localReducedEqns_;
150  std::vector<int> nonslaves_;
151  std::vector<int> reverse_;
152  bool* isSlaveEqn_;
159 
163  std::string dbgprefix_;
164  unsigned mat_counter_;
166 
167  bool* bool_array_;
169  double* double_array_;
171 
172  std::vector<double> work_1D_;
173  std::vector<const double*> work_2D_;
174  };//class Reducer
175 
176 }//namespace fei
177 
178 #endif // _fei_Reducer_hpp_
179 
fei::Vector
Definition: fei_Vector.hpp:57
fei::Reducer
Definition: fei_Reducer.hpp:27
fei::Reducer::highestGlobalSlaveEqn_
int highestGlobalSlaveEqn_
Definition: fei_Reducer.hpp:158
fei::Reducer::assembleReducedGraph
void assembleReducedGraph(fei::Graph *graph, bool global_gather=true)
Definition: fei_Reducer.cpp:454
fei::Reducer::addSymmetricGraphIndices
void addSymmetricGraphIndices(int numIndices, const int *indices, bool diagonal, fei::Graph &graph)
Definition: fei_Reducer.cpp:439
fei::Reducer::tmpVec2_
fei::CSVec tmpVec2_
Definition: fei_Reducer.hpp:143
fei::Reducer::nonslaves_
std::vector< int > nonslaves_
Definition: fei_Reducer.hpp:150
fei::Reducer::dbgprefix_
std::string dbgprefix_
Definition: fei_Reducer.hpp:163
fei::FillableMat
Definition: fei_FillableMat.hpp:20
fei::SharedPtr
Definition: fei_SharedPtr.hpp:65
fei::Reducer::localReducedEqns_
std::vector< int > localReducedEqns_
Definition: fei_Reducer.hpp:149
fei::Reducer::csrKii
fei::CSRMat csrKii
Definition: fei_Reducer.hpp:139
fei_CSVec.hpp
fei::Reducer::copyOutVectorValues
int copyOutVectorValues(int numValues, const int *globalIndices, double *values, bool soln_vector, int vectorIndex, fei::Vector &feivec)
Definition: fei_Reducer.cpp:892
fei_macros.hpp
fei::Reducer::mat_counter_
unsigned mat_counter_
Definition: fei_Reducer.hpp:164
fei::Reducer::array_len_
int array_len_
Definition: fei_Reducer.hpp:170
fei_SharedPtr.hpp
fei::Reducer::lowestGlobalSlaveEqn_
int lowestGlobalSlaveEqn_
Definition: fei_Reducer.hpp:157
fei::Graph
Definition: fei_Graph.hpp:20
fei::Reducer::csg_
fei::CSVec csg_
Definition: fei_Reducer.hpp:145
fei::Reducer::csrD_
fei::CSRMat csrD_
Definition: fei_Reducer.hpp:136
fei_CSRMat.hpp
fei::Reducer::assembleReducedMatrix
void assembleReducedMatrix(fei::Matrix &matrix)
Definition: fei_Reducer.cpp:525
fei::Logger
Definition: fei_Logger.hpp:19
fei::Reducer::firstLocalReducedEqn_
int firstLocalReducedEqn_
Definition: fei_Reducer.hpp:155
fei::Reducer::initialize
void initialize()
Definition: fei_Reducer.cpp:80
fei::Reducer::int_array_
int * int_array_
Definition: fei_Reducer.hpp:168
fei::Reducer::slavesPtr_
int * slavesPtr_
Definition: fei_Reducer.hpp:137
fei::Reducer::Kdd_
fei::FillableMat Kdd_
Definition: fei_Reducer.hpp:138
fei::Reducer::addVectorValues
int addVectorValues(int numValues, const int *globalIndices, const double *values, bool sum_into, bool soln_vector, int vectorIndex, fei::Vector &feivec)
Definition: fei_Reducer.cpp:804
fei::Reducer::numProcs_
int numProcs_
Definition: fei_Reducer.hpp:161
fei::Reducer::isSlaveCol
bool isSlaveCol(int unreducedEqn) const
Definition: fei_Reducer.cpp:632
fei::Reducer::getLocalReducedEqns
std::vector< int > & getLocalReducedEqns()
Definition: fei_Reducer.cpp:960
fei::Reducer::Reducer
Reducer(fei::SharedPtr< FillableMat > globalSlaveDependencyMatrix, fei::SharedPtr< CSVec > g_vector, MPI_Comm comm)
Definition: fei_Reducer.cpp:24
fei::Reducer::Kii_
fei::FillableMat Kii_
Definition: fei_Reducer.hpp:138
fei::Reducer::isSlaveEqn_
bool * isSlaveEqn_
Definition: fei_Reducer.hpp:152
fei::Reducer::localProc_
int localProc_
Definition: fei_Reducer.hpp:160
fei::Reducer::expand_work_arrays
void expand_work_arrays(int size)
Definition: fei_Reducer.cpp:365
fei::Reducer::csvec
fei::CSVec csvec
Definition: fei_Reducer.hpp:141
fei_mpi.h
fei::Reducer::addMatrixValues
int addMatrixValues(int numRows, const int *rows, int numCols, const int *cols, const double *const *values, bool sum_into, fei::Matrix &feimat, int format)
Definition: fei_Reducer.cpp:682
fei::Reducer::translateToReducedEqn
int translateToReducedEqn(int unreducedEqn) const
Definition: fei_Reducer.cpp:641
fei::Reducer::lastLocalReducedEqn_
int lastLocalReducedEqn_
Definition: fei_Reducer.hpp:156
fei::Reducer::addGraphIndices
void addGraphIndices(int numRows, const int *rows, int numCols, const int *cols, fei::Graph &graph)
Definition: fei_Reducer.cpp:379
fei::Reducer::addGraphEntries
void addGraphEntries(fei::SharedPtr< fei::SparseRowGraph > matrixGraph)
Definition: fei_Reducer.cpp:305
fei::Reducer::csrKdi
fei::CSRMat csrKdi
Definition: fei_Reducer.hpp:139
fei_Logger.hpp
fei::Reducer::numGlobalSlaves_
int numGlobalSlaves_
Definition: fei_Reducer.hpp:153
fei::Reducer::~Reducer
virtual ~Reducer()
Definition: fei_Reducer.cpp:194
fei::Reducer::work_1D_
std::vector< double > work_1D_
Definition: fei_Reducer.hpp:172
fei::Reducer::Kdi_
fei::FillableMat Kdi_
Definition: fei_Reducer.hpp:138
fei::Reducer::localUnreducedEqns_
std::vector< int > localUnreducedEqns_
Definition: fei_Reducer.hpp:148
fei::Reducer::bool_array_
bool * bool_array_
Definition: fei_Reducer.hpp:167
fei::Reducer::setLocalUnreducedEqns
void setLocalUnreducedEqns(const std::vector< int > &localUnreducedEqns)
Definition: fei_Reducer.cpp:204
fei::Reducer::numLocalSlaves_
int numLocalSlaves_
Definition: fei_Reducer.hpp:154
fei::SparseRowGraph
Definition: fei_SparseRowGraph.hpp:23
fei
Definition: fei_ArrayUtils.hpp:16
fei::Matrix
Definition: fei_Matrix.hpp:30
fei::Reducer::work_2D_
std::vector< const double * > work_2D_
Definition: fei_Reducer.hpp:173
fei::Reducer::fd_
fei::CSVec fd_
Definition: fei_Reducer.hpp:140
fei::Reducer::reverse_
std::vector< int > reverse_
Definition: fei_Reducer.hpp:151
fei::Reducer::double_array_
double * double_array_
Definition: fei_Reducer.hpp:169
MPI_Comm
#define MPI_Comm
Definition: fei_mpi.h:56
fei::Reducer::fi_
fei::CSVec fi_
Definition: fei_Reducer.hpp:140
fei::Reducer::getSlaveMasterEqns
void getSlaveMasterEqns(int slaveEqn, std::vector< int > &masterEqns)
Definition: fei_Reducer.cpp:607
fei::Reducer::csvec_i
fei::CSVec csvec_i
Definition: fei_Reducer.hpp:141
fei::Reducer::csrKdd
fei::CSRMat csrKdd
Definition: fei_Reducer.hpp:139
fei::Reducer::translateFromReducedEqn
int translateFromReducedEqn(int reduced_eqn) const
Definition: fei_Reducer.cpp:663
fei::Reducer::Kid_
fei::FillableMat Kid_
Definition: fei_Reducer.hpp:138
fei::Reducer::assembleReducedVector
void assembleReducedVector(bool soln_vector, fei::Vector &feivec)
Definition: fei_Reducer.cpp:847
fei::Reducer::tmpVec1_
fei::CSVec tmpVec1_
Definition: fei_Reducer.hpp:143
fei::Reducer::csrKid
fei::CSRMat csrKid
Definition: fei_Reducer.hpp:139
fei::Reducer::isSlaveEqn
bool isSlaveEqn(int unreducedEqn) const
Definition: fei_Reducer.cpp:594
fei::CSVec
Definition: fei_CSVec.hpp:24
fei::Reducer::tmpMat2_
fei::CSRMat tmpMat2_
Definition: fei_Reducer.hpp:142
fei::CSRMat
Definition: fei_CSRMat.hpp:21
fei::Reducer::tmpMat1_
fei::CSRMat tmpMat1_
Definition: fei_Reducer.hpp:142
fei::Reducer::rhs_vec_counter_
unsigned rhs_vec_counter_
Definition: fei_Reducer.hpp:165
fei::Reducer::g_nonzero_
bool g_nonzero_
Definition: fei_Reducer.hpp:146
fei_FillableMat.hpp
fei::Reducer::comm_
MPI_Comm comm_
Definition: fei_Reducer.hpp:162