Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Stokhos_ProductEpetraMultiVectorOperator.cpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Stokhos Package
5 // Copyright (2009) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
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 Eric T. Phipps (etphipp@sandia.gov).
38 //
39 // ***********************************************************************
40 // @HEADER
41 
44 #include "Epetra_LocalMap.h"
45 
49  bool is_multi_vec_transposed) :
50  ProductContainer<Epetra_Operator>(product_mv_->map()),
51  ProductEpetraOperator(product_mv_->map(),
52  product_mv_->productComm()),
53  product_mv(product_mv_)
54 {
55  // Create domain, range maps
56  Teuchos::RCP<const Epetra_Map> domain_map, range_map;
57  int nv = product_mv->numVectors();
58  const Epetra_Comm& coeff_comm = product_mv->productComm()->SubDomainComm();
60  Teuchos::rcp(new Epetra_LocalMap(nv, 0, coeff_comm));
61  if (is_multi_vec_transposed) {
62  domain_map =
63  Teuchos::rcp_dynamic_cast<const Epetra_Map>(product_mv->coefficientMap());
64  range_map = local_map;
65  }
66  else {
67  domain_map = local_map;
68  range_map =
69  Teuchos::rcp_dynamic_cast<const Epetra_Map>(product_mv->coefficientMap());
70  }
71  ProductEpetraOperator::setup(domain_map, range_map);
72 
73  // Set coefficients as operators
74  for (int i=0; i<this->size(); i++) {
77  product_mv->getCoeffPtr(i), is_multi_vec_transposed));
78  this->setCoeffPtr(i, op);
79  }
80 }
81 
87  product_mv(v.product_mv)
88 {
89 }
90 
93 
98  product_mv = v.product_mv;
99  return *this;
100 }
101 
105  return product_mv;
106 }
void setCoeffPtr(ordinal_type i, const Teuchos::RCP< Epetra_Operator > &c)
Set coefficient i to c.
ProductEpetraMultiVectorOperator(const Teuchos::RCP< ProductEpetraMultiVector > &product_mv, bool is_multi_vec_transposed)
Create ProductEpetraOperator out of ProductEpetraMultiVector.
A container class for products of Epetra_Vector&#39;s.
An adaptor that supplies the operator interface to a multi-vector.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
A container class for products of Epetra_Vector&#39;s.
A product (in the mathematical sense) container class whose coefficients are vectors, operators, or in general any type that would have an expensive copy constructor.
void setup(const Teuchos::RCP< const Epetra_Map > &domain_base_map, const Teuchos::RCP< const Epetra_Map > &range_base_map)
Second stage of setup.
Teuchos::RCP< ProductEpetraMultiVector > product_mv
The product multi-vector.
Teuchos::RCP< ProductEpetraMultiVector > productMultiVector() const
Get product multi vector.
ProductEpetraOperator & operator=(const ProductEpetraOperator &v)
Assignment.
ordinal_type size() const
Return size.
ProductEpetraMultiVectorOperator & operator=(const ProductEpetraMultiVectorOperator &v)
Assignment.