Epetra Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Epetra_CrsSingletonFilter.h
Go to the documentation of this file.
1/*
2//@HEADER
3// ************************************************************************
4//
5// Epetra: Linear Algebra Services Package
6// Copyright 2011 Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39//
40// ************************************************************************
41//@HEADER
42*/
43
44#ifndef EPETRA_CRSSINGLETONFILTER_H
45#define EPETRA_CRSSINGLETONFILTER_H
46
47#include "Epetra_Object.h"
48#include "Epetra_CrsMatrix.h"
49#include "Epetra_MapColoring.h"
52class Epetra_Map;
54class Epetra_Import;
55class Epetra_Export;
57
59
116
117 public:
118
120
121
123
127
129
140
142 bool SingletonsDetected() const {if (!AnalysisDone_) return(false); else return(RowMapColors_->MaxNumColors()>1);};
144
146
147
154
156
162
164
166
174
176
178
181
183
189
191 double RatioOfDimensions() const {return(RatioOfDimensions_);};
192
194 double RatioOfNonzeros() const {return(RatioOfNonzeros_);};
195
197
199
202
205
208
211
214
217
220
223
226
230
231 protected:
232
233
234
235 // This pointer will be zero if full matrix is not a CrsMatrix.
237
238 const Epetra_Map & FullMatrixRowMap() const {return(FullMatrix()->RowMatrixRowMap());};
239 const Epetra_Map & FullMatrixColMap() const {return(FullMatrix()->RowMatrixColMap());};
240 const Epetra_Map & FullMatrixDomainMap() const {return((FullMatrix()->OperatorDomainMap()));};
241 const Epetra_Map & FullMatrixRangeMap() const {return((FullMatrix()->OperatorRangeMap()));};
242 void InitializeDefaults();
246 int GetRow(int Row, int & NumIndices, int * & Indices);
247 int GetRowGCIDs(int Row, int & NumIndices, double * & Values, int * & GlobalIndices);
248 int GetRow(int Row, int & NumIndices, double * & Values, int * & Indices);
249 int CreatePostSolveArrays(const Epetra_IntVector & RowIDs,
251 const Epetra_IntVector & ColProfiles,
252 const Epetra_IntVector & NewColProfiles,
253 const Epetra_IntVector & ColHasRowWithSingleton);
254
255 int ConstructRedistributeExporter(Epetra_Map * SourceMap, Epetra_Map * TargetMap,
256 Epetra_Export * & RedistributeExporter,
257 Epetra_Map * & RedistributeMap);
258
266
275
280
281
284
291
296
301 int * Indices_;
303
308
309
310 private:
314};
315#endif /* EPETRA_CRSSINGLETONFILTER_H */
Epetra_CrsMatrix: A class for constructing and using real-valued double-precision sparse compressed r...
Epetra_CrsSingletonFilter: A class for explicitly eliminating matrix rows and columns.
Epetra_MapColoring * ColMapColors() const
Returns pointer to Epetra_MapColoring object: color 0 columns are part of reduced system.
int ComputeFullSolution()
Compute a solution for the full problem using the solution of the reduced problem,...
int Setup(Epetra_LinearProblem *Problem)
int Analyze(Epetra_RowMatrix *FullMatrix)
Analyze the input matrix, removing row/column pairs that have singletons.
int GetRowGCIDs(int Row, int &NumIndices, double *&Values, int *&GlobalIndices)
const Epetra_Map & FullMatrixRowMap() const
int ConstructRedistributeExporter(Epetra_Map *SourceMap, Epetra_Map *TargetMap, Epetra_Export *&RedistributeExporter, Epetra_Map *&RedistributeMap)
int ConstructReducedProblem(Epetra_LinearProblem *Problem)
Return a reduced linear problem based on results of Analyze().
int GetRow(int Row, int &NumIndices, int *&Indices)
Epetra_CrsSingletonFilter()
Epetra_CrsSingletonFilter default constructor.
Epetra_LinearProblem * ReducedProblem() const
Returns pointer to the derived reduced Epetra_LinearProblem.
Epetra_Map * ReducedMatrixDomainMap() const
Returns pointer to Epetra_Map describing the domain map for the reduced system.
Epetra_MapColoring * RowMapColors() const
Returns pointer to Epetra_MapColoring object: color 0 rows are part of reduced system.
Epetra_MultiVector * RedistributeReducedLHS_
Epetra_CrsSingletonFilter(const Epetra_CrsSingletonFilter &Problem)
Copy constructor (defined as private so it is unavailable to user).
Epetra_Map * ReducedMatrixColMap() const
Returns pointer to Epetra_Map describing the reduced system column distribution.
const Epetra_Map & FullMatrixDomainMap() const
const Epetra_Map & FullMatrixColMap() const
Epetra_LinearProblem * FullProblem_
Epetra_CrsMatrix * ReducedMatrix() const
Returns pointer to Epetra_CrsMatrix from full problem.
Epetra_LinearProblem * FullProblem() const
Returns pointer to the original unreduced Epetra_LinearProblem.
virtual ~Epetra_CrsSingletonFilter()
Epetra_CrsSingletonFilter Destructor.
int NumRowSingletons() const
Return number of rows that contain a single entry, returns -1 if Analysis not performed yet.
const Epetra_Map & FullMatrixRangeMap() const
bool SingletonsDetected() const
Returns true if singletons were detected in this matrix (must be called after Analyze() to be effecti...
double RatioOfDimensions() const
Returns ratio of reduced system to full system dimensions, returns -1.0 if reduced problem not constr...
int NumSingletons() const
Return total number of singletons detected, returns -1 if Analysis not performed yet.
int UpdateReducedProblem(Epetra_LinearProblem *Problem)
Update a reduced linear problem using new values.
int CreatePostSolveArrays(const Epetra_IntVector &RowIDs, const Epetra_MapColoring &RowMapColors, const Epetra_IntVector &ColProfiles, const Epetra_IntVector &NewColProfiles, const Epetra_IntVector &ColHasRowWithSingleton)
Epetra_RowMatrix * FullMatrix() const
Returns pointer to Epetra_CrsMatrix from full problem.
Epetra_Map * ReducedMatrixRowMap() const
Returns pointer to Epetra_Map describing the reduced system row distribution.
Epetra_CrsSingletonFilter & operator=(const Epetra_CrsSingletonFilter &Problem)
int NumColSingletons() const
Return number of columns that contain a single entry that are not associated with singleton row,...
Epetra_LinearProblem * ReducedProblem_
Epetra_SerialDenseVector Values_
Epetra_Map * ReducedMatrixRangeMap() const
Returns pointer to Epetra_Map describing the range map for the reduced system.
double RatioOfNonzeros() const
Returns ratio of reduced system to full system nonzero count, returns -1.0 if reduced problem not con...
Epetra_CrsMatrix * FullCrsMatrix() const
Epetra_Export: This class builds an export object for efficient exporting of off-processor elements.
Definition: Epetra_Export.h:62
Epetra_Import: This class builds an import object for efficient importing of off-processor elements.
Definition: Epetra_Import.h:63
Epetra_IntVector: A class for constructing and using dense integer vectors on a parallel computer.
Epetra_LinearProblem: The Epetra Linear Problem Class.
Epetra_MapColoring: A class for coloring Epetra_Map and Epetra_BlockMap objects.
int MaxNumColors() const
Returns maximum over all processors of the number of colors.
Epetra_Map: A class for partitioning vectors and matrices.
Definition: Epetra_Map.h:119
Epetra_MultiVector: A class for constructing and using dense multi-vectors, vectors and matrices in p...
Epetra_RowMatrix: A pure virtual class for using real-valued double-precision row matrices.
Epetra_SerialDenseVector: A class for constructing and using dense vectors.