Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
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 
47 #include "Stokhos_SGOperator.hpp"
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 
56 namespace 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 
214  bool scale_op;
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
Teuchos::RCP< const Epetra_Map > range_sg_map
Stores range SG map.
Cijk_type::k_iterator k_end
Ending k iterator.
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 <^2>
virtual const char * Label() const
Returns a character std::string describing the operator.
Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > epetraCijk
Stores Epetra Cijk tensor.
bool is_stoch_parallel
Whether we have parallelism over stochastic blocks.
Teuchos::RCP< const EpetraExt::MultiComm > sg_comm
Stores SG parallel communicator.
virtual int SetUseTranspose(bool UseTranspose)
Set to true if the transpose of the operator is requested.
An Epetra operator representing the block stochastic Galerkin operator.
virtual Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > getSGPolynomial()
Get SG polynomial.
virtual const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this matrix operator.
int num_blocks
Number of Jacobian blocks (not necessarily equal to expansion_size)
KLMatrixFreeOperator(const Teuchos::RCP< const EpetraExt::MultiComm > &sg_comm, const Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > &sg_basis, const Teuchos::RCP< const Stokhos::EpetraSparse3Tensor > &epetraCijk, const Teuchos::RCP< const Epetra_Map > &domain_base_map, const Teuchos::RCP< const Epetra_Map > &range_base_map, const Teuchos::RCP< const Epetra_Map > &domain_sg_map, const Teuchos::RCP< const Epetra_Map > &range_sg_map, const Teuchos::RCP< Teuchos::ParameterList > &params)
Constructor.
Stokhos::Sparse3Tensor< int, double > Cijk_type
Short-hand for Cijk.
virtual bool UseTranspose() const
Returns the current UseTranspose setting.
int expansion_size
Number of terms in expansion.
Teuchos::RCP< const Epetra_Map > range_base_map
Stores range base map.
Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > sg_basis
Stochastic Galerking basis.
virtual const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this matrix operator. ...
Bi-directional iterator for traversing a sparse array.
bool useTranspose
Flag indicating whether transpose was selected.
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 ...
Teuchos::Array< Teuchos::RCP< const Epetra_MultiVector > > input_block
MultiVectors for each block for Apply() input.
Teuchos::RCP< Epetra_MultiVector > tmp_trans
Temporary multivector used in Apply() for transpose.
virtual double NormInf() const
Returns an approximate infinity norm of the operator matrix.
An abstract class to represent a generic stochastic Galerkin operator as an Epetra_Operator.
Teuchos::RCP< const Epetra_Map > domain_sg_map
Stores domain SG map.
Cijk_type::k_iterator k_begin
Starting k iterator.
int max_num_mat_vec
Maximum number of matvecs in Apply.
Teuchos::RCP< const Cijk_type > Cijk
Stores triple product tensor.
Teuchos::RCP< const Epetra_BlockMap > stoch_col_map
Stores stochastic part of column map.
Top-level namespace for Stokhos classes and functions.
Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > block_ops
Stores operators.
virtual bool HasNormInf() const
Returns true if the this object can provide an approximate Inf-norm, false otherwise.
Teuchos::RCP< Epetra_Import > col_importer
Importer from domain map to column map.
std::string label
Label for operator.
Teuchos::RCP< Epetra_MultiVector > input_col_trans
Temporary to store result of importing input into column map (transpose)
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 ...
bool include_mean
Flag indicating whether to include mean term.
Teuchos::RCP< Epetra_Import > col_importer_trans
Importer from range map to column map.
KLMatrixFreeOperator & operator=(const KLMatrixFreeOperator &)
Private to prohibit copying.
Teuchos::RCP< Epetra_Map > global_col_map
Stores operator column SG map.
Teuchos::RCP< const Epetra_Map > domain_base_map
Stores domain base map.
virtual void setupOperator(const Teuchos::RCP< Stokhos::EpetraOperatorOrthogPoly > &poly)
Setup operator.
virtual const Epetra_Comm & Comm() const
Returns a reference to the Epetra_Comm communicator associated with this operator.
Teuchos::Array< Teuchos::RCP< Epetra_MultiVector > > result_block
MultiVectors for each block for Apply() result.
Teuchos::RCP< Epetra_MultiVector > input_col
Temporary to store result of importing input into column map.
Teuchos::RCP< Epetra_MultiVector > tmp
Temporary multivector used in Apply()