Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
disc-fe
src
evaluators
Panzer_Interface_Residual_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_INTERFACE_RESIDUAL_IMPL_HPP
44
#define PANZER_INTERFACE_RESIDUAL_IMPL_HPP
45
46
#include <cstddef>
47
#include <string>
48
#include <vector>
49
#include "
Panzer_BasisIRLayout.hpp
"
50
#include "
Panzer_Workset_Utilities.hpp
"
51
#include "Intrepid2_FunctionSpaceTools.hpp"
52
#include "Teuchos_RCP.hpp"
53
54
namespace
panzer
{
55
56
//**********************************************************************
57
template
<
typename
EvalT,
typename
Traits>
58
InterfaceResidual<EvalT, Traits>::
59
InterfaceResidual
(
60
const
Teuchos::ParameterList& p)
61
{
62
std::string residual_name = p.get<std::string>(
"Residual Name"
);
63
std::string flux_name = p.get<std::string>(
"Flux Name"
);
64
std::string normal_name = p.get<std::string>(
"Normal Name"
);
65
std::string normal_dot_flux_name = normal_name +
" dot "
+ flux_name;
66
67
const
Teuchos::RCP<const panzer::PureBasis> basis =
68
p.get< Teuchos::RCP<const panzer::PureBasis> >(
"Basis"
);
69
70
const
Teuchos::RCP<const panzer::IntegrationRule> ir =
71
p.get< Teuchos::RCP<const panzer::IntegrationRule> >(
"IR"
);
72
73
74
residual
= PHX::MDField<ScalarT>(residual_name, basis->functional);
75
normal_dot_flux
= PHX::MDField<ScalarT>(normal_dot_flux_name, ir->dl_scalar);
76
flux
= PHX::MDField<const ScalarT>(flux_name, ir->dl_vector);
77
normal
= PHX::MDField<const ScalarT>(normal_name, ir->dl_vector);
78
79
this->addEvaluatedField(
residual
);
80
this->addEvaluatedField(
normal_dot_flux
);
81
this->addDependentField(
normal
);
82
this->addDependentField(
flux
);
83
84
basis_name
=
panzer::basisIRLayout
(basis,*ir)->name();
85
86
std::string n =
"Interface Residual Evaluator"
;
87
this->setName(n);
88
}
89
90
//**********************************************************************
91
template
<
typename
EvalT,
typename
Traits>
92
void
93
InterfaceResidual<EvalT, Traits>::
94
postRegistrationSetup
(
95
typename
Traits::SetupData
sd,
96
PHX::FieldManager<Traits>
&
/* fm */
)
97
{
98
num_ip
=
flux
.extent(1);
99
num_dim
=
flux
.extent(2);
100
101
TEUCHOS_ASSERT(
flux
.extent(1) ==
normal
.extent(1));
102
TEUCHOS_ASSERT(
flux
.extent(2) ==
normal
.extent(2));
103
104
basis_index
=
panzer::getBasisIndex
(
basis_name
, (*sd.
worksets_
)[0], this->wda);
105
}
106
107
//**********************************************************************
108
template
<
typename
EvalT,
typename
Traits>
109
void
110
InterfaceResidual<EvalT, Traits>::
111
evaluateFields
(
112
typename
Traits::EvalData
workset)
113
{
114
residual
.deep_copy(
ScalarT
(0.0));
115
116
for
(index_t cell = 0; cell < workset.
num_cells
; ++cell) {
117
for
(std::size_t ip = 0; ip <
num_ip
; ++ip) {
118
normal_dot_flux
(cell,ip) =
ScalarT
(0.0);
119
for
(std::size_t dim = 0; dim <
num_dim
; ++dim) {
120
normal_dot_flux
(cell,ip) +=
normal
(cell,ip,dim) *
flux
(cell,ip,dim);
121
}
122
}
123
}
124
125
// const Kokkos::DynRankView<double,PHX::Device> & weighted_basis = this->wda(workset).bases[basis_index]->weighted_basis;
126
const
Teuchos::RCP<const BasisValues2<double> > bv = this->
wda
(workset).bases[
basis_index
];
127
for
(index_t cell = 0; cell < workset.
num_cells
; ++cell) {
128
for
(std::size_t basis = 0; basis <
residual
.extent(1); ++basis) {
129
for
(std::size_t qp = 0; qp <
num_ip
; ++qp) {
130
residual
(cell,basis) +=
normal_dot_flux
(cell,qp)*bv->weighted_basis_scalar(cell,basis,qp);
131
}
132
}
133
}
134
135
if
(workset.
num_cells
>0)
136
Intrepid2::FunctionSpaceTools<PHX::exec_space>::
137
integrate(
residual
.get_view(),
138
normal_dot_flux
.get_view(),
139
(this->wda(workset).bases[
basis_index
])->weighted_basis_scalar.get_view());
140
}
141
142
//**********************************************************************
143
144
}
145
146
#endif
Panzer_BasisIRLayout.hpp
Panzer_Workset_Utilities.hpp
PHX::FieldManager
Definition
Panzer_BCStrategy_Base.hpp:53
panzer::EvaluatorWithBaseImpl< Traits >::wda
WorksetDetailsAccessor wda
Definition
Panzer_Evaluator_WithBaseImpl.hpp:63
panzer::InterfaceResidual::num_dim
std::size_t num_dim
Definition
Panzer_Interface_Residual_decl.hpp:92
panzer::InterfaceResidual::normal_dot_flux
PHX::MDField< ScalarT > normal_dot_flux
Definition
Panzer_Interface_Residual_decl.hpp:85
panzer::InterfaceResidual::basis_name
std::string basis_name
Definition
Panzer_Interface_Residual_decl.hpp:89
panzer::InterfaceResidual::residual
PHX::MDField< ScalarT > residual
Definition
Panzer_Interface_Residual_decl.hpp:84
panzer::InterfaceResidual::flux
PHX::MDField< const ScalarT > flux
Definition
Panzer_Interface_Residual_decl.hpp:86
panzer::InterfaceResidual::num_ip
std::size_t num_ip
Definition
Panzer_Interface_Residual_decl.hpp:91
panzer::InterfaceResidual::postRegistrationSetup
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &fm)
Definition
Panzer_Interface_Residual_impl.hpp:94
panzer::InterfaceResidual::ScalarT
typename EvalT::ScalarT ScalarT
Definition
Panzer_Interface_Residual_decl.hpp:82
panzer::InterfaceResidual::normal
PHX::MDField< const ScalarT > normal
Definition
Panzer_Interface_Residual_decl.hpp:87
panzer::InterfaceResidual::InterfaceResidual
InterfaceResidual(const Teuchos::ParameterList &p)
Definition
Panzer_Interface_Residual_impl.hpp:59
panzer::InterfaceResidual::evaluateFields
void evaluateFields(typename Traits::EvalData d)
Definition
Panzer_Interface_Residual_impl.hpp:111
panzer::InterfaceResidual::basis_index
std::size_t basis_index
Definition
Panzer_Interface_Residual_decl.hpp:90
panzer::WorksetDetails::num_cells
int num_cells
DEPRECATED - use: numCells().
Definition
Panzer_Workset.hpp:116
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
panzer::getBasisIndex
std::vector< std::string >::size_type getBasisIndex(std::string basis_name, const panzer::Workset &workset, WorksetDetailsAccessor &wda)
Returns the index in the workset bases for a particular BasisIRLayout name.
Definition
Panzer_Workset_Utilities.cpp:80
panzer::basisIRLayout
Teuchos::RCP< panzer::BasisIRLayout > basisIRLayout(std::string basis_type, const int basis_order, const PointRule &pt_rule)
Nonmember constructor.
Definition
Panzer_BasisIRLayout.cpp:55
panzer::Traits::SD::worksets_
Teuchos::RCP< const std::vector< panzer::Workset > > worksets_
Definition
Panzer_Traits.hpp:124
panzer::Traits::EvalData
const panzer::Workset & EvalData
Definition
Panzer_Traits.hpp:129
panzer::Traits::SetupData
const SD & SetupData
Definition
Panzer_Traits.hpp:127
Generated by
1.17.0