Panzer  Version of the Day
Panzer_Integrator_GradBasisTimesScalar_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_GRADBASISTIMESSCALAR_DECL_HPP
44 #define PANZER_EVALUATOR_GRADBASISTIMESSCALAR_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 
77 namespace panzer
78 {
79  template<typename EvalT, typename Traits>
81  :
82  public panzer::EvaluatorWithBaseImpl<Traits>,
83  public PHX::EvaluatorDerived<EvalT, Traits>
84  {
85  public:
86 
125  const std::vector<std::string>& resNames,
126  const std::string& scalar,
127  const panzer::BasisIRLayout& basis,
128  const panzer::IntegrationRule& ir,
129  const double& multiplier = 1,
130  const std::vector<std::string>& fmNames =
131  std::vector<std::string>());
132 
177  const Teuchos::ParameterList& p);
178 
189  void
191  typename Traits::SetupData d,
193 
203  void
205  typename Traits::EvalData d);
206 
211  template<int NUM_FIELD_MULT>
213  {
214  }; // end of struct FieldMultTag
215 
232  template<int NUM_FIELD_MULT>
233  KOKKOS_INLINE_FUNCTION
234  void
236  const FieldMultTag<NUM_FIELD_MULT>& tag,
237  const std::size_t& cell) const;
238 
239  private:
240 
251  Teuchos::RCP<Teuchos::ParameterList>
252  getValidParameters() const;
253 
257  using ScalarT = typename EvalT::ScalarT;
258 
268 
273  Kokkos::View<PHX::MDField<ScalarT, Cell, BASIS>*> fields_;
274 
279  PHX::MDField<const ScalarT, Cell, IP> scalar_;
280 
286 
291  std::vector<PHX::MDField<const ScalarT, Cell, IP>> fieldMults_;
292 
298  Kokkos::View<Kokkos::View<const ScalarT**,
299  typename PHX::DevLayout<ScalarT>::type, PHX::Device>*>
301 
305  int numDims_;
306 
310  std::string basisName_;
311 
316  std::size_t basisIndex_;
317 
322  PHX::MDField<double, panzer::Cell, panzer::BASIS, panzer::IP,
324 
325  }; // end of class Integrator_GradBasisTimesScalar
326 
327 } // end of namespace panzer
328 
329 #endif // PANZER_EVALUATOR_GRADBASISTIMESSCALAR_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.
std::string basisName_
The name of the basis we're using.
std::size_t basisIndex_
The index in the Workset bases for our particular BasisIRLayout name.
int numDims_
The number of dimensions associated with the gradient.
PHX::MDField< const ScalarT, Cell, IP > scalar_
A field representing the scalar function we're integrating ( ).
Integrator_GradBasisTimesScalar(const panzer::EvaluatorStyle &evalStyle, const std::vector< std::string > &resNames, const std::string &scalar, const panzer::BasisIRLayout &basis, const panzer::IntegrationRule &ir, const double &multiplier=1, const std::vector< std::string > &fmNames=std::vector< std::string >())
Main Constructor.
ScalarT multiplier_
The scalar multiplier out in front of the integral ( ).
KOKKOS_INLINE_FUNCTION void operator()(const FieldMultTag< NUM_FIELD_MULT > &tag, const std::size_t &cell) const
Perform the integration.
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.
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &fm)
Post-Registration Setup.
std::vector< PHX::MDField< const ScalarT, Cell, IP > > fieldMults_
The scalar multiplier out in front of the integral ( ).
PHX::MDField< double, panzer::Cell, panzer::BASIS, panzer::IP, panzer::Dim > basis_
The gradient vector basis information necessary for integration.
Teuchos::RCP< Teuchos::ParameterList > getValidParameters() const
Get Valid Parameters.
void evaluateFields(typename Traits::EvalData d)
Evaluate Fields.
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.
EvaluatorStyle
An indication of how an Evaluator will behave.
This empty struct allows us to optimize operator()() depending on the number of field multipliers.