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
38 virtual void scatterDerivative(
39 const panzer::Traits::Jacobian::ScalarT& probeValue,
40 const size_t cell_index,
41 const bool has_probe,
44 const int derivativeOffset,
45 Teuchos::ArrayRCP<double> & dgdx) const = 0;
46};
47
48template <typename LO,typename GO>
50public:
51 ProbeScatter(const Teuchos::RCP<const panzer::GlobalIndexer> & globalIndexer)
52 : globalIndexer_(globalIndexer) { }
53
55 const panzer::Traits::Jacobian::ScalarT& probeValue,
56 const size_t cell_index,
57 const bool has_probe,
60 const int derivativeOffset,
61 Teuchos::ArrayRCP<double> & dgdx) const;
62
63private:
64
65 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer_;
66};
67
70template<typename EvalT, typename Traits, typename LO, typename GO>
72 public panzer::EvaluatorWithBaseImpl<Traits>,
73 public PHX::EvaluatorDerived<EvalT, Traits> {
74public:
75
78 const std::string & responseName,
79 const std::string & fieldName,
80 const int fieldComponent,
81 const Teuchos::Array<double>& point,
82 const IntegrationRule & ir,
83 const Teuchos::RCP<const PureBasis>& basis,
84 const Teuchos::RCP<const panzer::GlobalIndexer>& indexer,
85 const Teuchos::RCP<ProbeScatterBase> & probeScatter);
86
87 void evaluateFields(typename Traits::EvalData d);
88
91
92 void preEvaluate(typename Traits::PreEvalData d);
93
94 // Should be protected, but is public for cuda lambda support
96
102 int getProductVectorBlockIndex() const;
103
111 int getDerivativeOffset(const std::string& blockId) const;
112
113protected:
114 typedef typename EvalT::ScalarT ScalarT;
115
116 std::string responseName_;
117 std::string fieldName_;
119 Teuchos::Array<double> point_;
120 Teuchos::RCP<const panzer::PureBasis> basis_;
121 Teuchos::RCP<Response_Probe<EvalT> > responseObj_;
122 Teuchos::RCP<const shards::CellTopology> topology_;
123 Teuchos::RCP<const panzer::GlobalIndexer> globalIndexer_;
124
125 Teuchos::RCP<PHX::FieldTag> scatterHolder_; // dummy target
126 PHX::MDField<const ScalarT,Cell,BASIS> field_; // holds field values
127 Teuchos::RCP<ProbeScatterBase> scatterObj_;
128
133 Kokkos::DynRankView<double,PHX::Device> basis_values_;
134};
135
138template<typename EvalT, typename Traits, typename LO, typename GO>
140 public ResponseScatterEvaluator_ProbeBase<EvalT,Traits,LO,GO> {
141public:
142
144
147 const std::string & responseName,
148 const std::string & fieldName,
149 const int fieldComponent,
150 const Teuchos::Array<double>& point,
151 const IntegrationRule & ir,
152 const Teuchos::RCP<const PureBasis>& basis,
153 const Teuchos::RCP<const panzer::GlobalIndexer> & indexer,
154 const Teuchos::RCP<ProbeScatterBase> & probeScatter) :
155 Base(responseName, fieldName, fieldComponent, point,
156 ir, basis, indexer, probeScatter) {}
157};
158
161template<typename LO, typename GO>
163 public ResponseScatterEvaluator_ProbeBase<panzer::Traits::Jacobian,panzer::Traits,LO,GO> {
164public:
165
167
170 const std::string & responseName,
171 const std::string & fieldName,
172 const int fieldComponent,
173 const Teuchos::Array<double>& point,
174 const IntegrationRule & ir,
175 const Teuchos::RCP<const PureBasis>& basis,
176 const Teuchos::RCP<const panzer::GlobalIndexer> & indexer,
177 const Teuchos::RCP<ProbeScatterBase> & probeScatter) :
178 Base(responseName, fieldName, fieldComponent, point,
179 ir, basis, indexer, probeScatter) {}
180
182};
183
184template <typename LO,typename GO>
186 const panzer::Traits::Jacobian::ScalarT& probeValue,
187 const size_t cell_index,
188 const bool has_probe,
191 const int derivativeOffset,
192 Teuchos::ArrayRCP<double> & dgdx) const
193{
194
195 if (has_probe) {
196 PHX::View<const LO*> LIDs = globalIndexer_->getElementLIDs(cell_index);
197
198 // loop over basis functions
199 for(std::size_t i=0; i<LIDs.size(); ++i) {
200 // In a blocked system this field's DOFs occupy derivative components
201 // starting at derivativeOffset, not at zero.
202 dgdx[LIDs[i]] += probeValue.dx(derivativeOffset+i);
203 }
204 }
205}
206
207}
208
209#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, const int derivativeOffset, 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, const int derivativeOffset, Teuchos::ArrayRCP< double > &dgdx) const
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
int getDerivativeOffset(const std::string &blockId) const
First Fad derivative component belonging to the probed field's product vector block,...
void postRegistrationSetup(typename Traits::SetupData, PHX::FieldManager< Traits > &)
Teuchos::RCP< const panzer::GlobalIndexer > globalIndexer_
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.
Evaluation type for computing the residual and its Jacobian, using FadType as the scalar type.
User-defined data passed to PHX::Evaluator::preEvaluate(), called once before each residual/Jacobian ...
User-defined data passed to PHX::Evaluator::postRegistrationSetup() during the one-time setup phase.
Panzer's specialization of the Phalanx traits class.