EpetraExt  Development
EpetraExt_StaticCondensation_LinearProblem.h
Go to the documentation of this file.
1 //@HEADER
2 // ***********************************************************************
3 //
4 // EpetraExt: Epetra Extended - Linear Algebra Services Package
5 // Copyright (2011) Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 //@HEADER
41 
42 #ifndef EpetraExt_LINEARPROBLEM_STATICCONDENSATION_H
43 #define EpetraExt_LINEARPROBLEM_STATICCONDENSATION_H
44 
45 #include <EpetraExt_Transform.h>
46 
48 class Epetra_Map;
49 class Epetra_MultiVector;
50 class Epetra_CrsGraph;
51 class Epetra_CrsMatrix;
52 class Epetra_Export;
53 
54 namespace EpetraExt {
55 
56 class LinearProblem_StaticCondensation : public SameTypeTransform<Epetra_LinearProblem>
57 {
58  const int degree_;
59  const bool verbose_;
60 
61  const Epetra_Map * OldRowMap_;
62  Epetra_LinearProblem * OldProblem_;
63  Epetra_MultiVector * OldRHS_;
64  Epetra_MultiVector * OldLHS_;
65  const Epetra_CrsGraph * OldGraph_;
66  Epetra_CrsMatrix * OldMatrix_;
67 
68  Epetra_Export * Exporter_;
69 
70  Epetra_Map * NewRowMap_;
71  Epetra_Map * NewColMap_;
72  Epetra_LinearProblem * NewProblem_;
73  Epetra_MultiVector * NewRHS_;
74  Epetra_MultiVector * NewLHS_;
75  Epetra_CrsGraph * NewGraph_;
76  Epetra_CrsMatrix * NewMatrix_;
77 
78  Epetra_Map * UMap_;
79  Epetra_Map * RMap_;
80  Epetra_Map * LMap_;
81 
82  Epetra_Export * UExporter_;
83  Epetra_Export * RExporter_;
84  Epetra_Export * LExporter_;
85 
86  Epetra_MultiVector * ULHS_;
87  Epetra_MultiVector * RLHS_;
88  Epetra_MultiVector * LLHS_;
89 
90  Epetra_MultiVector * URHS_;
91  Epetra_MultiVector * RRHS_;
92  Epetra_MultiVector * LRHS_;
93 
94  Epetra_CrsGraph * UUGraph_;
95  Epetra_CrsGraph * URGraph_;
96  Epetra_CrsGraph * ULGraph_;
97  Epetra_CrsGraph * RRGraph_;
98  Epetra_CrsGraph * RLGraph_;
99  Epetra_CrsGraph * LLGraph_;
100 
101  Epetra_CrsMatrix * UUMatrix_;
102  Epetra_CrsMatrix * URMatrix_;
103  Epetra_CrsMatrix * ULMatrix_;
104  Epetra_CrsMatrix * RRMatrix_;
105  Epetra_CrsMatrix * RLMatrix_;
106  Epetra_CrsMatrix * LLMatrix_;
107 
108  public:
109 
111 
112  LinearProblem_StaticCondensation( int degree = 1, bool verbose = false )
113  : degree_(degree),
114  verbose_(verbose),
115  OldRowMap_(0),
116  OldProblem_(0),
117  OldRHS_(0),
118  OldLHS_(0),
119  OldGraph_(0),
120  OldMatrix_(0),
121  Exporter_(0),
122  NewRowMap_(0),
123  NewColMap_(0),
124  NewProblem_(0),
125  NewRHS_(0),
126  NewLHS_(0),
127  NewGraph_(0),
128  NewMatrix_(0),
129  UMap_(0),
130  RMap_(0),
131  LMap_(0),
132  UExporter_(0),
133  RExporter_(0),
134  LExporter_(0),
135  ULHS_(0),
136  RLHS_(0),
137  LLHS_(0),
138  URHS_(0),
139  RRHS_(0),
140  LRHS_(0),
141  UUGraph_(0),
142  URGraph_(0),
143  ULGraph_(0),
144  RRGraph_(0),
145  RLGraph_(0),
146  LLGraph_(0),
147  UUMatrix_(0),
148  URMatrix_(0),
149  ULMatrix_(0),
150  RRMatrix_(0),
151  RLMatrix_(0),
152  LLMatrix_(0)
153  {}
154 
156 
157  bool fwd();
158  bool rvs();
159 };
160 
161 } //namespace EpetraExt
162 
163 #endif //EpetraExt_LINEARPROBLEM_STATICCONDENSATION_H
EpetraExt::Transform< Epetra_LinearProblem, Epetra_LinearProblem >::NewTypeRef
Epetra_LinearProblem & NewTypeRef
Definition: EpetraExt_Transform.h:79
EpetraExt::SameTypeTransform
Definition: EpetraExt_Transform.h:270
EpetraExt::LinearProblem_StaticCondensation::fwd
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
Definition: EpetraExt_StaticCondensation_LinearProblem.cpp:362
Epetra_CrsMatrix
EpetraExt::Transform< Epetra_LinearProblem, Epetra_LinearProblem >::OriginalTypeRef
Epetra_LinearProblem & OriginalTypeRef
Definition: EpetraExt_Transform.h:74
EpetraExt::LinearProblem_StaticCondensation
Definition: EpetraExt_StaticCondensation_LinearProblem.h:56
EpetraExt::LinearProblem_StaticCondensation::operator()
NewTypeRef operator()(OriginalTypeRef orig)
Definition: EpetraExt_StaticCondensation_LinearProblem.cpp:105
Epetra_LinearProblem
EpetraExt_Transform.h
Epetra_CrsGraph
EpetraExt::LinearProblem_StaticCondensation::~LinearProblem_StaticCondensation
~LinearProblem_StaticCondensation()
Definition: EpetraExt_StaticCondensation_LinearProblem.cpp:61
Epetra_MultiVector
EpetraExt::LinearProblem_StaticCondensation::LinearProblem_StaticCondensation
LinearProblem_StaticCondensation(int degree=1, bool verbose=false)
Definition: EpetraExt_StaticCondensation_LinearProblem.h:112
EpetraExt::LinearProblem_StaticCondensation::rvs
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
Definition: EpetraExt_StaticCondensation_LinearProblem.cpp:407
Epetra_Export
EpetraExt
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
Definition: EpetraExt_BlockCrsMatrix.cpp:46
Epetra_Map