Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_ResponseScatterEvaluator_Probe.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Panzer: A partial differential equation assembly
4// engine for strongly coupled complex multiphysics systems
5//
6// Copyright 2011 NTESS and the Panzer contributors.
7// SPDX-License-Identifier: BSD-3-Clause
8// *****************************************************************************
9// @HEADER
10
11#ifndef __Panzer_ResponseScatterEvaluator_Probe_hpp__
12#define __Panzer_ResponseScatterEvaluator_Probe_hpp__
13
14#include <iostream>
15#include <string>
16
17#include "PanzerDiscFE_config.hpp"
18#include "Panzer_Dimension.hpp"
22
23#include "Phalanx_Evaluator_Macros.hpp"
24#include "Phalanx_MDField.hpp"
25
27
28namespace panzer {
29
31public:
32 virtual ~ProbeScatterBase() {}
33
34 virtual void scatterDerivative(
35 const panzer::Traits::Jacobian::ScalarT& probeValue,
36 const size_t cell_index,
37 const bool has_probe,
40 Teuchos::ArrayRCP<double> & dgdx) const = 0;
41};
42
43template <typename LO,typename GO>
45public:
46 ProbeScatter(const Teuchos::RCP<const panzer::GlobalIndexer> & globalIndexer)
47 : globalIndexer_(globalIndexer) { }
48
50 const panzer::Traits::Jacobian::ScalarT& probeValue,
51 const size_t cell_index,
52 const bool has_probe,
55 Teuchos::ArrayRCP<double> & dgdx) const;
56
57private:
58
59 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer_;
60};
61
64template<typename EvalT, typename Traits, typename LO, typename GO>
66 public panzer::EvaluatorWithBaseImpl<Traits>,
67 public PHX::EvaluatorDerived<EvalT, Traits> {
68public:
69
72 const std::string & responseName,
73 const std::string & fieldName,
74 const int fieldComponent,
75 const Teuchos::Array<double>& point,
76 const IntegrationRule & ir,
77 const Teuchos::RCP<const PureBasis>& basis,
78 const Teuchos::RCP<const panzer::GlobalIndexer>& indexer,
79 const Teuchos::RCP<ProbeScatterBase> & probeScatter);
80
81 void evaluateFields(typename Traits::EvalData d);
82
85
86 void preEvaluate(typename Traits::PreEvalData d);
87
88 // Should be protected, but is public for cuda lambda support
90
91protected:
92 typedef typename EvalT::ScalarT ScalarT;
93
94 std::string responseName_;
95 std::string fieldName_;
97 Teuchos::Array<double> point_;
98 Teuchos::RCP<const panzer::PureBasis> basis_;
99 Teuchos::RCP<Response_Probe<EvalT> > responseObj_;
100 Teuchos::RCP<const shards::CellTopology> topology_;
101 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer_;
102
103 Teuchos::RCP<PHX::FieldTag> scatterHolder_; // dummy target
104 PHX::MDField<const ScalarT,Cell,BASIS> field_; // holds field values
105 Teuchos::RCP<ProbeScatterBase> scatterObj_;
106
111 Kokkos::DynRankView<double,PHX::Device> basis_values_;
112};
113
116template<typename EvalT, typename Traits, typename LO, typename GO>
118 public ResponseScatterEvaluator_ProbeBase<EvalT,Traits,LO,GO> {
119public:
120
122
125 const std::string & responseName,
126 const std::string & fieldName,
127 const int fieldComponent,
128 const Teuchos::Array<double>& point,
129 const IntegrationRule & ir,
130 const Teuchos::RCP<const PureBasis>& basis,
131 const Teuchos::RCP<const panzer::GlobalIndexer> & indexer,
132 const Teuchos::RCP<ProbeScatterBase> & probeScatter) :
133 Base(responseName, fieldName, fieldComponent, point,
134 ir, basis, indexer, probeScatter) {}
135};
136
139template<typename LO, typename GO>
141 public ResponseScatterEvaluator_ProbeBase<panzer::Traits::Jacobian,panzer::Traits,LO,GO> {
142public:
143
145
148 const std::string & responseName,
149 const std::string & fieldName,
150 const int fieldComponent,
151 const Teuchos::Array<double>& point,
152 const IntegrationRule & ir,
153 const Teuchos::RCP<const PureBasis>& basis,
154 const Teuchos::RCP<const panzer::GlobalIndexer> & indexer,
155 const Teuchos::RCP<ProbeScatterBase> & probeScatter) :
156 Base(responseName, fieldName, fieldComponent, point,
157 ir, basis, indexer, probeScatter) {}
158
160};
161
162template <typename LO,typename GO>
164 const panzer::Traits::Jacobian::ScalarT& probeValue,
165 const size_t cell_index,
166 const bool has_probe,
169 Teuchos::ArrayRCP<double> & dgdx) const
170{
171
172 if (has_probe) {
173 PHX::View<const LO*> LIDs = globalIndexer_->getElementLIDs(cell_index);
174
175 // loop over basis functions
176 for(std::size_t i=0; i<LIDs.size(); ++i) {
177 dgdx[LIDs[i]] += probeValue.dx(i);
178 }
179 }
180}
181
182}
183
184#endif
Wrapper to PHX::EvaluatorWithBaseImpl that implements Panzer-specific helpers.
virtual void scatterDerivative(const panzer::Traits::Jacobian::ScalarT &probeValue, const size_t cell_index, const bool has_probe, panzer::Traits::EvalData workset, WorksetDetailsAccessor &wda, Teuchos::ArrayRCP< double > &dgdx) const =0
ProbeScatter(const Teuchos::RCP< const panzer::GlobalIndexer > &globalIndexer)
Teuchos::RCP< const panzer::GlobalIndexer > globalIndexer_
void scatterDerivative(const panzer::Traits::Jacobian::ScalarT &probeValue, const size_t cell_index, const bool has_probe, panzer::Traits::EvalData workset, WorksetDetailsAccessor &wda, Teuchos::ArrayRCP< double > &dgdx) const
void postRegistrationSetup(typename Traits::SetupData, PHX::FieldManager< Traits > &)
Teuchos::RCP< const panzer::GlobalIndexer > globalIndexer_
ResponseScatterEvaluator_Probe(const std::string &responseName, const std::string &fieldName, const int fieldComponent, const Teuchos::Array< double > &point, const IntegrationRule &ir, const Teuchos::RCP< const PureBasis > &basis, const Teuchos::RCP< const panzer::GlobalIndexer > &indexer, const Teuchos::RCP< ProbeScatterBase > &probeScatter)
A constructor with concrete arguments instead of a parameter list.
ResponseScatterEvaluator_ProbeBase< panzer::Traits::Jacobian, panzer::Traits, LO, GO > Base
ResponseScatterEvaluator_ProbeBase< EvalT, Traits, LO, GO > Base
ResponseScatterEvaluator_Probe(const std::string &responseName, const std::string &fieldName, const int fieldComponent, const Teuchos::Array< double > &point, const IntegrationRule &ir, const Teuchos::RCP< const PureBasis > &basis, const Teuchos::RCP< const panzer::GlobalIndexer > &indexer, const Teuchos::RCP< ProbeScatterBase > &probeScatter)
A constructor with concrete arguments instead of a parameter list.