Stokhos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
NOX_Epetra_LinearSystem_SGGS.hpp
Go to the documentation of this file.
1/*
2// @HEADER
3// ***********************************************************************
4//
5// Stokhos Package
6// Copyright (2009) Sandia Corporation
7//
8// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9// license for use of this work by or on behalf of the U.S. Government.
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 Eric T. Phipps (etphipp@sandia.gov).
39//
40// ***********************************************************************
41// @HEADER
42*/
43
44#ifndef NOX_EPETRA_LINEARSYSTEMSGGS_H
45#define NOX_EPETRA_LINEARSYSTEMSGGS_H
46
47#include "Stokhos_ConfigDefs.h"
48
49#ifdef HAVE_STOKHOS_NOX
50
51#include "NOX_Common.H"
52
53#include "NOX_Epetra_LinearSystem.H" // base class
54#include "NOX_Utils.H" // class data element
55
63#include "Epetra_Export.h"
64
65namespace NOX {
66 namespace Epetra {
67 namespace Interface {
68 class Required;
69 class Jacobian;
70 class Preconditioner;
71 }
72 }
73}
74
75namespace NOX {
76
77 namespace Epetra {
78
83 class LinearSystemSGGS : public virtual NOX::Epetra::LinearSystem {
84 public:
85
87 LinearSystemSGGS(
88 Teuchos::ParameterList& printingParams,
89 Teuchos::ParameterList& linearSolverParams,
90 const Teuchos::RCP<NOX::Epetra::LinearSystem>& detsolve,
91 const Teuchos::RCP<NOX::Epetra::Interface::Required>& iReq,
92 const Teuchos::RCP<NOX::Epetra::Interface::Jacobian>& iJac,
93 const Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> >& sg_basis,
94 const Teuchos::RCP<const Stokhos::ParallelData>& sg_parallel_data,
95 const Teuchos::RCP<Epetra_Operator>& J,
96 const Teuchos::RCP<const Epetra_Map>& base_map,
97 const Teuchos::RCP<const Epetra_Map>& sg_map,
98 const Teuchos::RCP<NOX::Epetra::Scaling> scalingObject =
99 Teuchos::null);
100
102 virtual ~LinearSystemSGGS();
103
108 virtual bool applyJacobian(const NOX::Epetra::Vector& input,
109 NOX::Epetra::Vector& result) const;
110
115 virtual bool applyJacobianTranspose(const NOX::Epetra::Vector& input,
116 NOX::Epetra::Vector& result) const;
117
122 virtual bool applyJacobianInverse(Teuchos::ParameterList &params,
123 const NOX::Epetra::Vector &input,
124 NOX::Epetra::Vector &result);
125
127 virtual bool applyRightPreconditioning(bool useTranspose,
128 Teuchos::ParameterList& params,
129 const NOX::Epetra::Vector& input,
130 NOX::Epetra::Vector& result) const;
131
133 virtual Teuchos::RCP<NOX::Epetra::Scaling> getScaling();
134
136 virtual void resetScaling(const Teuchos::RCP<NOX::Epetra::Scaling>& s);
137
139 virtual bool computeJacobian(const NOX::Epetra::Vector& x);
140
142 virtual bool createPreconditioner(const NOX::Epetra::Vector& x,
143 Teuchos::ParameterList& p,
144 bool recomputeGraph) const;
145
147 virtual bool destroyPreconditioner() const;
148
150 virtual bool recomputePreconditioner(const NOX::Epetra::Vector& x,
151 Teuchos::ParameterList& linearSolverParams) const;
152
154 virtual PreconditionerReusePolicyType
155 getPreconditionerPolicy(bool advanceReuseCounter=true);
156
158 virtual bool isPreconditionerConstructed() const;
159
161 virtual bool hasPreconditioner() const;
162
164 virtual Teuchos::RCP<const Epetra_Operator>
165 getJacobianOperator() const;
166
168 virtual Teuchos::RCP<Epetra_Operator> getJacobianOperator();
169
171 virtual Teuchos::RCP<const Epetra_Operator>
172 getGeneratedPrecOperator() const;
173
175 virtual Teuchos::RCP<Epetra_Operator> getGeneratedPrecOperator();
176
178 virtual void setJacobianOperatorForSolve(const Teuchos::RCP<const Epetra_Operator>& solveJacOp);
179
181 virtual void setPrecOperatorForSolve(const Teuchos::RCP<const Epetra_Operator>& solvePrecOp);
182
183 protected:
184
186 Teuchos::RCP<NOX::Epetra::LinearSystem> det_solver;
187
189 Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> > sg_basis;
190
192 Teuchos::RCP<const Stokhos::EpetraSparse3Tensor> epetraCijk;
193
195 bool is_stoch_parallel;
196
198 Teuchos::RCP<const Epetra_BlockMap> stoch_row_map;
199
202
204 Teuchos::RCP<const Cijk_type > Cijk;
205
207 Teuchos::RCP<NOX::Epetra::Interface::Jacobian> jacInterfacePtr;
208
210 mutable Teuchos::RCP<Stokhos::SGOperator> sg_op;
211
213 mutable Teuchos::RCP<const Stokhos::EpetraOperatorOrthogPoly > sg_poly;
214
216 Teuchos::RCP<const Epetra_Map> base_map;
217
219 Teuchos::RCP<const Epetra_Map> sg_map;
220
222 Teuchos::RCP<NOX::Epetra::Scaling> scaling;
223
225 NOX::Utils utils;
226
228 mutable Teuchos::RCP<EpetraExt::BlockVector> sg_df_block;
229
231 mutable Teuchos::RCP<EpetraExt::BlockVector> sg_y_block;
232
234 mutable Teuchos::RCP<Epetra_Vector> kx;
235
237 bool is_parallel;
238
240 Teuchos::RCP<const Epetra_BlockMap> sg_col_map;
241
243 Teuchos::RCP<Epetra_Export> col_exporter;
244
246 Teuchos::RCP<EpetraExt::BlockVector> sg_df_col;
247
249 Teuchos::RCP<EpetraExt::BlockVector> sg_df_tmp;
250
252 bool only_use_linear;
253
255 int k_limit;
256 };
257
258 } // namespace Epetra
259} // namespace NOX
260
261#endif
262
263#endif
Abstract base class for multivariate orthogonal polynomials.
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
Stokhos::Sparse3Tensor< int, double > Cijk_type