Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
disc-fe
src
lof
Panzer_EpetraLinearObjContainer.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Panzer: A partial differential equation assembly
5
// engine for strongly coupled complex multiphysics systems
6
// Copyright (2011) Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
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 Roger P. Pawlowski (rppawlo@sandia.gov) and
39
// Eric C. Cyr (eccyr@sandia.gov)
40
// ***********************************************************************
41
// @HEADER
42
43
#ifndef __Panzer_EpetraLinearObjContainer_hpp__
44
#define __Panzer_EpetraLinearObjContainer_hpp__
45
46
#include "PanzerDiscFE_config.hpp"
47
48
#include <map>
49
50
// Epetra includes
51
#include "Epetra_Vector.h"
52
#include "Epetra_CrsMatrix.h"
53
54
#include "
Panzer_LinearObjFactory.hpp
"
55
#include "
Panzer_ThyraObjContainer.hpp
"
56
57
#include "Teuchos_RCP.hpp"
58
59
#include "Thyra_VectorBase.hpp"
60
#include "Thyra_LinearOpBase.hpp"
61
#include "Thyra_EpetraLinearOp.hpp"
62
#include "Thyra_EpetraThyraWrappers.hpp"
63
#include "Thyra_get_Epetra_Operator.hpp"
64
65
namespace
panzer
{
66
67
class
EpetraLinearObjContainer
:
public
LinearObjContainer
68
,
public
ThyraObjContainer
<double> {
69
70
EpetraLinearObjContainer
();
71
72
public
:
73
typedef
LinearObjContainer::Members
Members
;
74
75
typedef
Epetra_Vector
VectorType
;
76
typedef
Epetra_CrsMatrix
CrsMatrixType
;
77
78
EpetraLinearObjContainer
(
const
Teuchos::RCP<const Epetra_Map> & domain,
79
const
Teuchos::RCP<const Epetra_Map> & range)
80
:
domainMap
(domain),
rangeMap
(range)
81
{
82
domainSpace
= Thyra::create_VectorSpace(
domainMap
);
83
rangeSpace
= Thyra::create_VectorSpace(
rangeMap
);
84
}
85
86
EpetraLinearObjContainer
(
const
Teuchos::RCP<const Epetra_Map> & domain,
87
const
Teuchos::RCP<
const
Thyra::VectorSpaceBase<double>
> & domainS,
88
const
Teuchos::RCP<const Epetra_Map> & range,
89
const
Teuchos::RCP<
const
Thyra::VectorSpaceBase<double>
> & rangeS)
90
:
domainMap
(domain),
rangeMap
(range)
91
{
92
domainSpace
= domainS;
93
rangeSpace
= rangeS;
94
}
95
96
virtual
void
initialize
()
97
{
98
if
(
get_x
()!=Teuchos::null)
get_x
()->PutScalar(0.0);
99
if
(
get_dxdt
()!=Teuchos::null)
get_dxdt
()->PutScalar(0.0);
100
if
(
get_f
()!=Teuchos::null)
get_f
()->PutScalar(0.0);
101
if
(
get_A
()!=Teuchos::null)
get_A
()->PutScalar(0.0);
102
}
103
105
void
clear
()
106
{
107
set_x
(Teuchos::null);
108
set_dxdt
(Teuchos::null);
109
set_f
(Teuchos::null);
110
set_A
(Teuchos::null);
111
}
112
113
inline
void
set_x
(
const
Teuchos::RCP<Epetra_Vector> & in) {
x
= in; }
114
inline
const
Teuchos::RCP<Epetra_Vector>
get_x
()
const
{
return
x
; }
115
116
inline
void
set_dxdt
(
const
Teuchos::RCP<Epetra_Vector> & in) {
dxdt
= in; }
117
inline
const
Teuchos::RCP<Epetra_Vector>
get_dxdt
()
const
{
return
dxdt
; }
118
119
inline
void
set_f
(
const
Teuchos::RCP<Epetra_Vector> & in) {
f
= in; }
120
inline
const
Teuchos::RCP<Epetra_Vector>
get_f
()
const
{
return
f
; }
121
122
inline
void
set_A
(
const
Teuchos::RCP<Epetra_CrsMatrix> & in) {
A
= in; }
123
inline
const
Teuchos::RCP<Epetra_CrsMatrix>
get_A
()
const
{
return
A
; }
124
125
void
initializeMatrix
(
double
value)
126
{
A
->PutScalar(value); }
127
128
virtual
void
set_x_th
(
const
Teuchos::RCP<
Thyra::VectorBase<double>
> & in)
129
{
x
= (in==Teuchos::null) ? Teuchos::null : Thyra::get_Epetra_Vector(*
domainMap
,in); }
130
virtual
Teuchos::RCP<Thyra::VectorBase<double> >
get_x_th
()
const
131
{
return
(
x
==Teuchos::null) ? Teuchos::null : Thyra::create_Vector(
x
,
domainSpace
); }
132
133
virtual
void
set_dxdt_th
(
const
Teuchos::RCP<
Thyra::VectorBase<double>
> & in)
134
{
dxdt
= (in==Teuchos::null) ? Teuchos::null : Thyra::get_Epetra_Vector(*
domainMap
,in); }
135
virtual
Teuchos::RCP<Thyra::VectorBase<double> >
get_dxdt_th
()
const
136
{
return
(
dxdt
==Teuchos::null) ? Teuchos::null : Thyra::create_Vector(
dxdt
,
domainSpace
); }
137
138
virtual
void
set_f_th
(
const
Teuchos::RCP<
Thyra::VectorBase<double>
> & in)
139
{
f
= (in==Teuchos::null) ? Teuchos::null : Thyra::get_Epetra_Vector(*
rangeMap
,in); }
140
virtual
Teuchos::RCP<Thyra::VectorBase<double> >
get_f_th
()
const
141
{
return
(
f
==Teuchos::null) ? Teuchos::null : Thyra::create_Vector(
f
,
rangeSpace
); }
142
143
virtual
void
set_A_th
(
const
Teuchos::RCP<
Thyra::LinearOpBase<double>
> & in)
144
{
A
= (in==Teuchos::null) ? Teuchos::null : Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(Thyra::get_Epetra_Operator(*in),
true
); }
145
virtual
Teuchos::RCP<Thyra::LinearOpBase<double> >
get_A_th
()
const
146
{
return
(
A
==Teuchos::null) ? Teuchos::null : Thyra::nonconstEpetraLinearOp(
A
); }
147
148
private
:
149
Teuchos::RCP<const Epetra_Map>
domainMap
;
150
Teuchos::RCP<const Epetra_Map>
rangeMap
;
151
Teuchos::RCP<const Thyra::VectorSpaceBase<double> >
domainSpace
;
152
Teuchos::RCP<const Thyra::VectorSpaceBase<double> >
rangeSpace
;
153
Teuchos::RCP<Epetra_Vector>
x
,
dxdt
,
f
;
154
Teuchos::RCP<Epetra_CrsMatrix>
A
;
155
};
156
157
}
158
159
#endif
Panzer_LinearObjFactory.hpp
Panzer_ThyraObjContainer.hpp
Epetra_CrsMatrix
Epetra_Vector
Thyra::LinearOpBase
Thyra::VectorBase
Thyra::VectorSpaceBase
Definition
Panzer_ThyraObjFactory.hpp:52
panzer::EpetraLinearObjContainer::get_x_th
virtual Teuchos::RCP< Thyra::VectorBase< double > > get_x_th() const
Definition
Panzer_EpetraLinearObjContainer.hpp:130
panzer::EpetraLinearObjContainer::clear
void clear()
Wipe out stored data.
Definition
Panzer_EpetraLinearObjContainer.hpp:105
panzer::EpetraLinearObjContainer::initialize
virtual void initialize()
Definition
Panzer_EpetraLinearObjContainer.hpp:96
panzer::EpetraLinearObjContainer::set_f
void set_f(const Teuchos::RCP< Epetra_Vector > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:119
panzer::EpetraLinearObjContainer::set_f_th
virtual void set_f_th(const Teuchos::RCP< Thyra::VectorBase< double > > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:138
panzer::EpetraLinearObjContainer::A
Teuchos::RCP< Epetra_CrsMatrix > A
Definition
Panzer_EpetraLinearObjContainer.hpp:154
panzer::EpetraLinearObjContainer::x
Teuchos::RCP< Epetra_Vector > x
Definition
Panzer_EpetraLinearObjContainer.hpp:153
panzer::EpetraLinearObjContainer::set_x
void set_x(const Teuchos::RCP< Epetra_Vector > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:113
panzer::EpetraLinearObjContainer::VectorType
Epetra_Vector VectorType
Definition
Panzer_EpetraLinearObjContainer.hpp:75
panzer::EpetraLinearObjContainer::EpetraLinearObjContainer
EpetraLinearObjContainer(const Teuchos::RCP< const Epetra_Map > &domain, const Teuchos::RCP< const Epetra_Map > &range)
Definition
Panzer_EpetraLinearObjContainer.hpp:78
panzer::EpetraLinearObjContainer::get_A
const Teuchos::RCP< Epetra_CrsMatrix > get_A() const
Definition
Panzer_EpetraLinearObjContainer.hpp:123
panzer::EpetraLinearObjContainer::set_x_th
virtual void set_x_th(const Teuchos::RCP< Thyra::VectorBase< double > > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:128
panzer::EpetraLinearObjContainer::set_dxdt_th
virtual void set_dxdt_th(const Teuchos::RCP< Thyra::VectorBase< double > > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:133
panzer::EpetraLinearObjContainer::EpetraLinearObjContainer
EpetraLinearObjContainer()
panzer::EpetraLinearObjContainer::CrsMatrixType
Epetra_CrsMatrix CrsMatrixType
Definition
Panzer_EpetraLinearObjContainer.hpp:76
panzer::EpetraLinearObjContainer::domainMap
Teuchos::RCP< const Epetra_Map > domainMap
Definition
Panzer_EpetraLinearObjContainer.hpp:149
panzer::EpetraLinearObjContainer::get_dxdt
const Teuchos::RCP< Epetra_Vector > get_dxdt() const
Definition
Panzer_EpetraLinearObjContainer.hpp:117
panzer::EpetraLinearObjContainer::domainSpace
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domainSpace
Definition
Panzer_EpetraLinearObjContainer.hpp:151
panzer::EpetraLinearObjContainer::initializeMatrix
void initializeMatrix(double value)
Put a particular scalar in the matrix.
Definition
Panzer_EpetraLinearObjContainer.hpp:125
panzer::EpetraLinearObjContainer::rangeMap
Teuchos::RCP< const Epetra_Map > rangeMap
Definition
Panzer_EpetraLinearObjContainer.hpp:150
panzer::EpetraLinearObjContainer::get_A_th
virtual Teuchos::RCP< Thyra::LinearOpBase< double > > get_A_th() const
Definition
Panzer_EpetraLinearObjContainer.hpp:145
panzer::EpetraLinearObjContainer::EpetraLinearObjContainer
EpetraLinearObjContainer(const Teuchos::RCP< const Epetra_Map > &domain, const Teuchos::RCP< const Thyra::VectorSpaceBase< double > > &domainS, const Teuchos::RCP< const Epetra_Map > &range, const Teuchos::RCP< const Thyra::VectorSpaceBase< double > > &rangeS)
Definition
Panzer_EpetraLinearObjContainer.hpp:86
panzer::EpetraLinearObjContainer::dxdt
Teuchos::RCP< Epetra_Vector > dxdt
Definition
Panzer_EpetraLinearObjContainer.hpp:153
panzer::EpetraLinearObjContainer::set_A
void set_A(const Teuchos::RCP< Epetra_CrsMatrix > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:122
panzer::EpetraLinearObjContainer::get_f
const Teuchos::RCP< Epetra_Vector > get_f() const
Definition
Panzer_EpetraLinearObjContainer.hpp:120
panzer::EpetraLinearObjContainer::set_A_th
virtual void set_A_th(const Teuchos::RCP< Thyra::LinearOpBase< double > > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:143
panzer::EpetraLinearObjContainer::rangeSpace
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace
Definition
Panzer_EpetraLinearObjContainer.hpp:152
panzer::EpetraLinearObjContainer::get_dxdt_th
virtual Teuchos::RCP< Thyra::VectorBase< double > > get_dxdt_th() const
Definition
Panzer_EpetraLinearObjContainer.hpp:135
panzer::EpetraLinearObjContainer::get_x
const Teuchos::RCP< Epetra_Vector > get_x() const
Definition
Panzer_EpetraLinearObjContainer.hpp:114
panzer::EpetraLinearObjContainer::get_f_th
virtual Teuchos::RCP< Thyra::VectorBase< double > > get_f_th() const
Definition
Panzer_EpetraLinearObjContainer.hpp:140
panzer::EpetraLinearObjContainer::set_dxdt
void set_dxdt(const Teuchos::RCP< Epetra_Vector > &in)
Definition
Panzer_EpetraLinearObjContainer.hpp:116
panzer::EpetraLinearObjContainer::Members
LinearObjContainer::Members Members
Definition
Panzer_EpetraLinearObjContainer.hpp:73
panzer::EpetraLinearObjContainer::f
Teuchos::RCP< Epetra_Vector > f
Definition
Panzer_EpetraLinearObjContainer.hpp:153
panzer::LinearObjContainer
Definition
Panzer_LinearObjContainer.hpp:59
panzer::LinearObjContainer::Members
Members
Definition
Panzer_LinearObjContainer.hpp:63
panzer::ThyraObjContainer
Definition
Panzer_ThyraObjContainer.hpp:59
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
Generated by
1.17.0