Stokhos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
NOX_Epetra_LinearSystem_SGJacobi.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_LINEARSYSTEMSGJACOBI_H
45#define NOX_EPETRA_LINEARSYSTEMSGJACOBI_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
64namespace NOX {
65 namespace Epetra {
66 namespace Interface {
67 class Required;
68 class Jacobian;
69 class Preconditioner;
70 }
71 }
72}
73
74namespace NOX {
75
76 namespace Epetra {
77
82 class LinearSystemSGJacobi : public virtual NOX::Epetra::LinearSystem {
83
84 public:
85
87 LinearSystemSGJacobi(
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 ~LinearSystemSGJacobi();
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::EpetraSparse3Tensor> epetraCijk;
190
192 Teuchos::RCP<NOX::Epetra::Interface::Jacobian> jacInterfacePtr;
193
195 mutable Teuchos::RCP<Stokhos::SGOperator> sg_op;
196
198 mutable Teuchos::RCP<Stokhos::EpetraOperatorOrthogPoly > sg_poly;
199
201 Teuchos::RCP<const Epetra_Map> base_map;
202
204 Teuchos::RCP<const Epetra_Map> sg_map;
205
207 Teuchos::RCP<NOX::Epetra::Scaling> scaling;
208
210 NOX::Utils utils;
211
213 mutable Teuchos::RCP<EpetraExt::BlockVector> sg_df_block;
214
216 mutable Teuchos::RCP<Epetra_Vector> kx;
217
219 Teuchos::RCP<Stokhos::SGOperator> mat_free_op;
220 };
221
222 } // namespace Epetra
223} // namespace NOX
224
225#endif
226
227#endif
Abstract base class for multivariate orthogonal polynomials.