Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_BCStrategy_Neumann_DefaultImpl.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 
44 #ifndef PANZER_BCSTRATEGY_NEUMANN_DEFAULT_IMPL_DECL_HPP
45 #define PANZER_BCSTRATEGY_NEUMANN_DEFAULT_IMPL_DECL_HPP
46 
47 #include <vector>
48 #include <string>
49 #include <tuple>
50 
51 #include "Teuchos_RCP.hpp"
52 
53 #include "Panzer_BCStrategy.hpp"
55 #include "Panzer_Traits.hpp"
56 
57 #include "Panzer_Traits.hpp"
58 #include "Phalanx_Evaluator_WithBaseImpl.hpp"
59 #include "Phalanx_FieldManager.hpp"
60 #include "Phalanx_MDField.hpp"
61 
63 
64 namespace panzer {
65 
66  template <typename EvalT>
69  public panzer::EvaluatorWithBaseImpl<panzer::Traits>
70  {
71 
72  public:
73 
75 
77 
79 
80 
81  virtual void setup(const panzer::PhysicsBlock& side_pb, const Teuchos::ParameterList& user_data) = 0;
82 
84  const panzer::PhysicsBlock& side_pb,
86  const Teuchos::ParameterList& models,
87  const Teuchos::ParameterList& user_data) const = 0;
88 
89  virtual void
91  const panzer::PhysicsBlock& side_pb,
93  const Teuchos::ParameterList& user_data) const;
94 
95  virtual void
97  const panzer::PhysicsBlock& side_pb,
99  const Teuchos::ParameterList& user_data) const;
100 
101  virtual void
103  const panzer::PhysicsBlock& side_pb,
105  const Teuchos::ParameterList& user_data) const;
107 
109 
110  virtual void postRegistrationSetup(typename Traits::SetupData d,
111  PHX::FieldManager<Traits>& vm) = 0;
112 
113  virtual void evaluateFields(typename Traits::EvalData d) = 0;
115 
117 
118 
120  virtual void requireDOFGather(const std::string required_dof_name);
121 
130  virtual void addResidualContribution(const std::string residual_name,
131  const std::string dof_name,
132  const std::string flux_name,
133  const int integration_order,
134  const panzer::PhysicsBlock& side_pb);
135 
137  const std::vector<std::tuple<std::string,std::string,std::string,int,Teuchos::RCP<panzer::PureBasis>,Teuchos::RCP<panzer::IntegrationRule> > > getResidualContributionData() const;
138 
140 
141 
143 
144 
146  const panzer::BC bc() const;
147 
149 
150 
151  private:
152 
154 
155 
157  Teuchos::RCP<panzer::PureBasis> getBasis(const std::string dof_name,
158  const panzer::PhysicsBlock& side_pb) const;
159 
162  const panzer::PhysicsBlock& side_pb) const;
164 
165  private:
166 
182  std::vector<std::tuple<std::string,std::string,std::string,int,Teuchos::RCP<panzer::PureBasis>,Teuchos::RCP<panzer::IntegrationRule> > > m_residual_contributions;
183 
185  std::vector<std::string> m_required_dof_names;
186 
187  };
188 
189 }
190 
192 
193 #endif
std::vector< std::tuple< std::string, std::string, std::string, int, Teuchos::RCP< panzer::PureBasis >, Teuchos::RCP< panzer::IntegrationRule > > > m_residual_contributions
A vector of tuples containing information for each residual contribution for a corresponding Neumann ...
BCStrategy_Neumann_DefaultImpl(const panzer::BC &bc, const Teuchos::RCP< panzer::GlobalData > &global_data)
std::vector< std::string > m_required_dof_names
All DOF field names needed by this BC: this vector is used to build gather evaluators for each DOF...
virtual void requireDOFGather(const std::string required_dof_name)
Requires that a gather evaluator for the DOF be constructed.
Object that contains information on the physics and discretization of a block of elements with the SA...
virtual void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &vm)=0
virtual void addResidualContribution(const std::string residual_name, const std::string dof_name, const std::string flux_name, const int integration_order, const panzer::PhysicsBlock &side_pb)
Adds a residual contribution for a neumann condition to a particular equation.
Default implementation for accessing the GlobalData object.
virtual void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
Wrapper to PHX::EvaluatorWithBaseImpl that implements Panzer-specific helpers.
virtual void buildAndRegisterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const =0
const panzer::BC bc() const
Returns the boundary condition data for this object.
Teuchos::RCP< panzer::IntegrationRule > buildIntegrationRule(const int integration_order, const panzer::PhysicsBlock &side_pb) const
Allocates and returns the integration rule associated with an integration order and side physics bloc...
virtual void evaluateFields(typename Traits::EvalData d)=0
const std::vector< std::tuple< std::string, std::string, std::string, int, Teuchos::RCP< panzer::PureBasis >, Teuchos::RCP< panzer::IntegrationRule > > > getResidualContributionData() const
Returns information for the residual contribution integrations associated with this Neumann BC...
virtual void buildAndRegisterGatherScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
Stores input information for a boundary condition.
Definition: Panzer_BC.hpp:81
virtual void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::PhysicsBlock &side_pb, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
Teuchos::RCP< panzer::PureBasis > getBasis(const std::string dof_name, const panzer::PhysicsBlock &side_pb) const
Finds the basis for the corresponding dof_name in the physics block.
virtual void setup(const panzer::PhysicsBlock &side_pb, const Teuchos::ParameterList &user_data)=0