Stokhos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Stokhos_KLMatrixFreeOperator.hpp
Go to the documentation of this file.
1// $Id$
2// $Source$
3// @HEADER
4// ***********************************************************************
5//
6// Stokhos Package
7// Copyright (2009) Sandia Corporation
8//
9// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
10// license for use of this work by or on behalf of the U.S. Government.
11//
12// Redistribution and use in source and binary forms, with or without
13// modification, are permitted provided that the following conditions are
14// met:
15//
16// 1. Redistributions of source code must retain the above copyright
17// notice, this list of conditions and the following disclaimer.
18//
19// 2. Redistributions in binary form must reproduce the above copyright
20// notice, this list of conditions and the following disclaimer in the
21// documentation and/or other materials provided with the distribution.
22//
23// 3. Neither the name of the Corporation nor the names of the
24// contributors may be used to endorse or promote products derived from
25// this software without specific prior written permission.
26//
27// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
28// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
31// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38//
39// Questions? Contact Eric T. Phipps (etphipp@sandia.gov).
40//
41// ***********************************************************************
42// @HEADER
43
44#ifndef STOKHOS_KLMATRIX_FREE_OPERATOR_HPP
45#define STOKHOS_KLMATRIX_FREE_OPERATOR_HPP
46
48#include "EpetraExt_MultiComm.h"
51#include "Epetra_Map.h"
52#include "Epetra_Import.h"
53#include "Teuchos_ParameterList.hpp"
54#include "Teuchos_Array.hpp"
55
56namespace Stokhos {
57
63
64 public:
65
68 const Teuchos::RCP<const EpetraExt::MultiComm>& sg_comm,
69 const Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> >& sg_basis,
70 const Teuchos::RCP<const Stokhos::EpetraSparse3Tensor>& epetraCijk,
71 const Teuchos::RCP<const Epetra_Map>& domain_base_map,
72 const Teuchos::RCP<const Epetra_Map>& range_base_map,
73 const Teuchos::RCP<const Epetra_Map>& domain_sg_map,
74 const Teuchos::RCP<const Epetra_Map>& range_sg_map,
75 const Teuchos::RCP<Teuchos::ParameterList>& params);
76
78 virtual ~KLMatrixFreeOperator();
79
82
84 virtual void setupOperator(
85 const Teuchos::RCP<Stokhos::EpetraOperatorOrthogPoly >& poly);
86
88 virtual Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly >
90
92 virtual Teuchos::RCP<const Stokhos::EpetraOperatorOrthogPoly >
93 getSGPolynomial() const;
94
96
99
101 virtual int SetUseTranspose(bool UseTranspose);
102
107 virtual int Apply(const Epetra_MultiVector& Input,
108 Epetra_MultiVector& Result) const;
109
114 virtual int ApplyInverse(const Epetra_MultiVector& X,
115 Epetra_MultiVector& Y) const;
116
118 virtual double NormInf() const;
119
121 virtual const char* Label () const;
122
124 virtual bool UseTranspose() const;
125
130 virtual bool HasNormInf() const;
131
136 virtual const Epetra_Comm & Comm() const;
137
142 virtual const Epetra_Map& OperatorDomainMap () const;
143
148 virtual const Epetra_Map& OperatorRangeMap () const;
149
151
152 private:
153
156
159
160 protected:
161
163 std::string label;
164
166 Teuchos::RCP<const EpetraExt::MultiComm> sg_comm;
167
169 Teuchos::RCP<const Stokhos::OrthogPolyBasis<int,double> > sg_basis;
170
172 Teuchos::RCP<const Stokhos::EpetraSparse3Tensor> epetraCijk;
173
175 Teuchos::RCP<const Epetra_Map> domain_base_map;
176
178 Teuchos::RCP<const Epetra_Map> range_base_map;
179
181 Teuchos::RCP<const Epetra_Map> domain_sg_map;
182
184 Teuchos::RCP<const Epetra_Map> range_sg_map;
185
188
190 Teuchos::RCP<Epetra_Map> global_col_map;
191
193 Teuchos::RCP<Epetra_Map> global_col_map_trans;
194
196 Teuchos::RCP<const Epetra_BlockMap> stoch_col_map;
197
199 Teuchos::RCP<Epetra_Import> col_importer;
200
202 Teuchos::RCP<Epetra_Import> col_importer_trans;
203
206
208 Teuchos::RCP<const Cijk_type> Cijk;
209
211 Teuchos::RCP<Stokhos::EpetraOperatorOrthogPoly > block_ops;
212
215
218
221
224
227
230
232 mutable Teuchos::RCP<Epetra_MultiVector> input_col;
233
235 mutable Teuchos::RCP<Epetra_MultiVector> input_col_trans;
236
238 mutable Teuchos::Array< Teuchos::RCP<const Epetra_MultiVector> > input_block;
239
241 mutable Teuchos::Array< Teuchos::RCP<Epetra_MultiVector> > result_block;
242
244 mutable Teuchos::RCP<Epetra_MultiVector> tmp;
245
247 mutable Teuchos::RCP<Epetra_MultiVector> tmp_trans;
248
251
254
255 }; // class KLMatrixFreeOperator
256
257} // namespace Stokhos
258
259#endif // STOKHOS_KLMATRIX_FREE_OPERATOR_HPP
An Epetra operator representing the block stochastic Galerkin operator.
Cijk_type::k_iterator k_begin
Starting k iterator.
Stokhos::Sparse3Tensor< int, double > Cijk_type
Short-hand for Cijk.
virtual const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this matrix operator.
virtual const Epetra_Comm & Comm() const
Returns a reference to the Epetra_Comm communicator associated with this operator.
Teuchos::RCP< const Epetra_BlockMap > stoch_col_map
Stores stochastic part of column map.
Teuchos::RCP< Epetra_Import > col_importer
Importer from domain map to column map.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > sg_basis
Stochastic Galerking basis.
virtual bool UseTranspose() const
Returns the current UseTranspose setting.
Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > block_ops
Stores operators.
virtual void setupOperator(const Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > &poly)
Setup operator.
Teuchos::RCP< const EpetraExt::MultiComm > sg_comm
Stores SG parallel communicator.
Teuchos::RCP< const Epetra_Map > domain_base_map
Stores domain base map.
bool include_mean
Flag indicating whether to include mean term.
Teuchos::RCP< const Epetra_Map > domain_sg_map
Stores domain SG map.
Teuchos::RCP< Epetra_Map > global_col_map
Stores operator column SG map.
virtual Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > getSGPolynomial()
Get SG polynomial.
bool useTranspose
Flag indicating whether transpose was selected.
Teuchos::Array< Teuchos::RCP< const Epetra_MultiVector > > input_block
MultiVectors for each block for Apply() input.
virtual double NormInf() const
Returns an approximate infinity norm of the operator matrix.
virtual int Apply(const Epetra_MultiVector &Input, Epetra_MultiVector &Result) const
Returns the result of a Epetra_Operator applied to a Epetra_MultiVector Input in Result as described ...
int num_blocks
Number of Jacobian blocks (not necessarily equal to expansion_size)
Teuchos::RCP< const Epetra_Map > range_base_map
Stores range base map.
int max_num_mat_vec
Maximum number of matvecs in Apply.
Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > epetraCijk
Stores Epetra Cijk tensor.
Teuchos::RCP< Epetra_MultiVector > input_col
Temporary to store result of importing input into column map.
Teuchos::RCP< const Cijk_type > Cijk
Stores triple product tensor.
Teuchos::RCP< Epetra_MultiVector > tmp
Temporary multivector used in Apply()
virtual int SetUseTranspose(bool UseTranspose)
Set to true if the transpose of the operator is requested.
Cijk_type::k_iterator k_end
Ending k iterator.
bool is_stoch_parallel
Whether we have parallelism over stochastic blocks.
KLMatrixFreeOperator(const KLMatrixFreeOperator &)
Private to prohibit copying.
Teuchos::RCP< Epetra_Import > col_importer_trans
Importer from range map to column map.
Teuchos::RCP< const Epetra_Map > range_sg_map
Stores range SG map.
virtual bool HasNormInf() const
Returns true if the this object can provide an approximate Inf-norm, false otherwise.
virtual const char * Label() const
Returns a character std::string describing the operator.
Teuchos::Array< Teuchos::RCP< Epetra_MultiVector > > result_block
MultiVectors for each block for Apply() result.
KLMatrixFreeOperator & operator=(const KLMatrixFreeOperator &)
Private to prohibit copying.
int expansion_size
Number of terms in expansion.
Teuchos::RCP< Epetra_MultiVector > tmp_trans
Temporary multivector used in Apply() for transpose.
Teuchos::RCP< Epetra_Map > global_col_map_trans
Stores operator column SG map for transpose.
bool scale_op
Flag indicating whether operator be scaled with <\psi_i^2>
virtual int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Returns the result of the inverse of the operator applied to a Epetra_MultiVector Input in Result as ...
Teuchos::RCP< Epetra_MultiVector > input_col_trans
Temporary to store result of importing input into column map (transpose)
std::string label
Label for operator.
virtual const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this matrix operator.
Abstract base class for multivariate orthogonal polynomials.
An abstract class to represent a generic stochastic Galerkin operator as an Epetra_Operator.
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
Top-level namespace for Stokhos classes and functions.
Bi-directional iterator for traversing a sparse array.