Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
disc-fe
src
responses
Panzer_ResponseMESupport_Default_impl.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_ResponseMESupport_Default_impl_hpp__
44
#define __Panzer_ResponseMESupport_Default_impl_hpp__
45
46
namespace
panzer
{
47
48
#ifdef PANZER_HAVE_EPETRA_STACK
49
template
<
typename
EvalT>
50
Epetra_Vector &
ResponseMESupport_Default<EvalT>::
51
getEpetraVector
()
const
52
{
53
TEUCHOS_ASSERT(useEpetra());
54
55
return
*eVector_;
56
}
57
#endif
58
59
template
<
typename
EvalT>
60
Thyra::ArrayRCP<double>
ResponseMESupport_Default<EvalT>::
61
getThyraVector
()
const
62
{
63
TEUCHOS_ASSERT(
useThyra
());
64
65
Teuchos::ArrayRCP<double> data;
66
Teuchos::rcp_dynamic_cast<Thyra::SpmdVectorBase<double> >(
tVector_
,
true
)->getNonconstLocalData(Teuchos::outArg(data));
67
68
return
data;
69
}
70
71
#ifdef PANZER_HAVE_EPETRA_STACK
72
template
<
typename
EvalT>
73
Teuchos::RCP<const Epetra_Map>
ResponseMESupport_Default<EvalT>::
74
getMap
()
const
75
{
76
TEUCHOS_TEST_FOR_EXCEPTION(useThyra_,std::logic_error,
77
"Reponse field \""
<< this->getName() <<
"\" has previously been initialized as a "
78
"Thyra object, now trying to initalize as a Epetra! Error!"
);
79
80
// lazily construct the map only as needed
81
if
(map_==Teuchos::null) {
82
if
(this->vectorIsDistributed())
83
map_ = Teuchos::rcp(
new
Epetra_Map
(-1,(
int
) this->localSizeRequired(),0,eComm_));
84
else
85
map_ = Teuchos::rcp(
new
Epetra_LocalMap
((
int
) this->localSizeRequired(),0,eComm_));
86
}
87
88
return
map_;
89
}
90
91
template
<
typename
EvalT>
92
void
ResponseMESupport_Default<EvalT>::
93
setVector
(
const
Teuchos::RCP<Epetra_Vector> & destVec)
94
{
95
TEUCHOS_TEST_FOR_EXCEPTION(useThyra_,std::logic_error,
96
"Reponse field \""
<< this->getName() <<
"\" has previously been initialized as a "
97
"Thyra object, now trying to initalize as a Epetra! Error!"
);
98
99
eVector_ = destVec;
100
101
useEpetra_ =
true
;
102
}
103
#endif
104
105
template
<
typename
EvalT>
106
Teuchos::RCP<const Thyra::VectorSpaceBase<double> >
ResponseMESupport_Default<EvalT>::
107
getVectorSpace
()
const
108
{
109
TEUCHOS_TEST_FOR_EXCEPTION(
useEpetra_
,std::logic_error,
110
"Reponse field \""
<< this->
getName
() <<
"\" has previously been initialized as an "
111
"Epetra object, now trying to initalize as a Thyra object! Error!"
);
112
113
// lazily build the space and return it
114
if
(
vSpace_
==Teuchos::null) {
115
if
(this->
vectorIsDistributed
())
116
vSpace_
= Thyra::defaultSpmdVectorSpace<double>(
tComm_
,this->
localSizeRequired
(),-1);
117
else
118
vSpace_
= Thyra::locallyReplicatedDefaultSpmdVectorSpace<double>(
tComm_
,this->
localSizeRequired
());
119
}
120
121
return
vSpace_
;
122
}
123
124
template
<
typename
EvalT>
125
void
ResponseMESupport_Default<EvalT>::
126
setVector
(
const
Teuchos::RCP<
Thyra::VectorBase<double>
> & destVec)
127
{
128
TEUCHOS_TEST_FOR_EXCEPTION(
useEpetra_
,std::logic_error,
129
"Reponse field \""
<< this->
getName
() <<
"\" has previously been initialized as an "
130
"Epetra object, now trying to initalize as a Thyra object! Error!"
);
131
132
tVector_
= destVec;
133
134
useThyra_
=
true
;
135
}
136
137
}
138
139
#endif
Epetra_LocalMap
Epetra_Map
Thyra::VectorBase
panzer::ResponseBase::getName
std::string getName() const
Definition
Panzer_ResponseBase.hpp:74
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::vectorIsDistributed
virtual bool vectorIsDistributed() const =0
Is the vector distributed (or replicated). For derivative assembly this must be false!
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::localSizeRequired
virtual std::size_t localSizeRequired() const =0
What is the number of values you need locally.
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::tComm_
Teuchos::RCP< const Teuchos::Comm< Thyra::Ordinal > > tComm_
Definition
Panzer_ResponseMESupport_Default.hpp:470
panzer::ResponseMESupport_Default
Definition
Panzer_ResponseMESupport_Default.hpp:66
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::useEpetra_
bool useEpetra_
Definition
Panzer_ResponseMESupport_Default.hpp:146
panzer::ResponseMESupport_Default::tVector_
Teuchos::RCP< Thyra::VectorBase< double > > tVector_
Definition
Panzer_ResponseMESupport_Default.hpp:155
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::vSpace_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > vSpace_
Definition
Panzer_ResponseMESupport_Default.hpp:154
panzer::ResponseMESupport_Default< panzer::Traits::Hessian >::useThyra_
bool useThyra_
Definition
Panzer_ResponseMESupport_Default.hpp:153
panzer::ResponseMESupport_Default::setVector
void setVector(const Teuchos::RCP< Thyra::VectorBase< double > > &destVec)
Definition
Panzer_ResponseMESupport_Default_impl.hpp:126
panzer::ResponseMESupport_Default::getThyraVector
Thyra::ArrayRCP< double > getThyraVector() const
Access the thyra vector.
Definition
Panzer_ResponseMESupport_Default_impl.hpp:61
panzer::ResponseMESupport_Default::getVectorSpace
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getVectorSpace() const
Get the vector space for this response, vector space is constructed lazily.
Definition
Panzer_ResponseMESupport_Default_impl.hpp:107
panzer::ResponseMESupport_Default::useThyra
bool useThyra() const
Is Thyra the right vector.
Definition
Panzer_ResponseMESupport_Default.hpp:126
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
Generated by
1.17.0