Panzer  Version of the Day
Panzer_Integrator_GradBasisCrossVector_decl.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_EVALUATOR_GRADBASISCROSSVECTOR_DECL_HPP
44 #define PANZER_EVALUATOR_GRADBASISCROSSVECTOR_DECL_HPP
45 
47 //
48 // Include Files
49 //
51 
52 // C++
53 #include <string>
54 
55 // Kokkos
56 #include "Kokkos_DynRankView.hpp"
57 
58 // Panzer
61 
62 // Phalanx
63 #include "Phalanx_Evaluator_Derived.hpp"
64 #include "Phalanx_MDField.hpp"
65 
66 namespace panzer
67 {
80  template<typename EvalT, typename Traits>
82  :
83  public panzer::EvaluatorWithBaseImpl<Traits>,
84  public PHX::EvaluatorDerived<EvalT, Traits>
85  {
86  public:
87 
135  const std::vector<std::string>& resNames,
136  const std::string& vecName,
137  const panzer::BasisIRLayout& basis,
138  const panzer::IntegrationRule& ir,
139  const double& multiplier = 1,
140  const std::vector<std::string>& fmNames =
141  std::vector<std::string>(),
142  const Teuchos::RCP<PHX::DataLayout>& vecDL = Teuchos::null);
143 
191  const Teuchos::ParameterList& p);
192 
203  void
205  typename Traits::SetupData d,
207 
217  void
219  typename Traits::EvalData d);
220 
225  template<int NUM_FIELD_MULT>
227  {
228  }; // end of struct FieldMultTag
229 
245  template<int NUM_FIELD_MULT>
246  KOKKOS_INLINE_FUNCTION
247  void
249  const FieldMultTag<NUM_FIELD_MULT>& tag,
250  const std::size_t& cell) const;
251 
252  private:
253 
264  Teuchos::RCP<Teuchos::ParameterList>
265  getValidParameters() const;
266 
270  using ScalarT = typename EvalT::ScalarT;
271 
281 
286  Kokkos::View<PHX::MDField<ScalarT, Cell, BASIS>*> fields_;
287 
292  PHX::MDField<const ScalarT, Cell, IP, Dim> vector_;
293 
298  double multiplier_;
299 
304  std::vector<PHX::MDField<const ScalarT, Cell, IP>> fieldMults_;
305 
311  Kokkos::View<Kokkos::View<const ScalarT**,
312  typename PHX::DevLayout<ScalarT>::type, PHX::Device>*>
314 
318  int numDims_;
319 
324 
328  std::string basisName_;
329 
334  std::size_t basisIndex_;
335 
340  PHX::MDField<double, panzer::Cell, panzer::BASIS, panzer::IP,
342 
343  }; // end of class Integrator_GradBasisCrossVector
344 
345 } // end of namespace panzer
346 
347 #endif // PANZER_EVALUATOR_GRADBASISCROSSVECTOR_DECL_HPP
panzer::EvaluatorStyle evalStyle
The EvaluatorStyle of the parent Integrator_CurlBasisDotVector object.
double multiplier
The scalar multiplier out in front of the integral ( ).
Wrapper to PHX::EvaluatorWithBaseImpl that implements Panzer-specific helpers.
PHX::MDField< const ScalarT, Cell, IP, Dim > vector_
A field representing the vector-valued function we're integrating ( ).
Teuchos::RCP< Teuchos::ParameterList > getValidParameters() const
Get Valid Parameters.
std::vector< PHX::MDField< const ScalarT, Cell, IP > > fieldMults_
The (possibly empty) list of fields that are multipliers out in front of the integral ( ,...
void evaluateFields(typename Traits::EvalData d)
Evaluate Fields.
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &fm)
Post-Registration Setup.
std::size_t basisIndex_
The index in the Workset bases for our particular BasisIRLayout name.
Kokkos::View< PHX::MDField< ScalarT, Cell, BASIS > * > fields_
The fields to which we'll contribute, or in which we'll store, the result of computing this integral.
std::string basisName_
The name of the basis we're using.
PHX::MDField< double, panzer::Cell, panzer::BASIS, panzer::IP, panzer::Dim > basis_
The gradient vector basis information necessary for integration.
double multiplier_
The scalar multiplier out in front of the integral ( ).
Integrator_GradBasisCrossVector(const panzer::EvaluatorStyle &evalStyle, const std::vector< std::string > &resNames, const std::string &vecName, const panzer::BasisIRLayout &basis, const panzer::IntegrationRule &ir, const double &multiplier=1, const std::vector< std::string > &fmNames=std::vector< std::string >(), const Teuchos::RCP< PHX::DataLayout > &vecDL=Teuchos::null)
Main Constructor.
Kokkos::View< Kokkos::View< const ScalarT **, typename PHX::DevLayout< ScalarT >::type, PHX::Device > * > kokkosFieldMults_
The Kokkos::View representation of the (possibly empty) list of fields that are multipliers out in fr...
const panzer::EvaluatorStyle evalStyle_
An enum determining the behavior of this Evaluator.
int numDims_
The number of dimensions associated with the vector.
KOKKOS_INLINE_FUNCTION void operator()(const FieldMultTag< NUM_FIELD_MULT > &tag, const std::size_t &cell) const
Perform the integration.
int numGradDims_
The number of dimensions associated with the gradient.
EvaluatorStyle
An indication of how an Evaluator will behave.
This empty struct allows us to optimize operator()() depending on the number of field multipliers.