Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_ExplicitModelEvaluator.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_EXPLICIT_MODEL_EVALUATOR_HPP
12 #define PANZER_EXPLICIT_MODEL_EVALUATOR_HPP
13 
14 #include "PanzerDiscFE_config.hpp"
15 
16 #include "Thyra_ModelEvaluatorDelegatorBase.hpp"
17 #include "Thyra_BlockedLinearOpBase.hpp"
18 
20 
21 #ifdef PANZER_HAVE_EPETRA_STACK
23 #endif
24 
26 
27 namespace panzer {
28 
34 template<typename Scalar>
36  : public Thyra::ModelEvaluatorDelegatorBase<Scalar>,
37  public panzer::MassMatrixModelEvaluator<Scalar> {
38 public:
39 
42 
47  bool constantMassMatrix,
48  bool useLumpedMass,
49  bool applyMassInverse=true);
50 
52 
54  Thyra::ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
55 
57  Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
58 
60  Thyra::ModelEvaluatorBase::OutArgs<Scalar> createOutArgs() const;
61 
64 
66  {
67  Thyra::apply(*invMassMatrix_,Thyra::NOTRANS,*input,output.ptr());
68  }
69 
71  {
72  Thyra::apply(*mass_,Thyra::NOTRANS,*input,output.ptr());
73  }
74 
75 private: // data members
76 
81  const Teuchos::RCP<Thyra::VectorBase<Scalar> > & f) const
82  {
83  if(panzerModel_!=Teuchos::null) { panzerModel_->applyDirichletBCs(x,f); return; }
84 #ifdef PANZER_HAVE_EPETRA_STACK
85  if(panzerEpetraModel_!=Teuchos::null) { panzerEpetraModel_->applyDirichletBCs(x,f); return; }
86 #endif
87 
88  TEUCHOS_ASSERT(false);
89  }
90 
94  void buildInverseMassMatrix(const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs) const;
95 
97  void buildArgsPrototypes();
98 
101 
103  void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
104  const Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs) const;
105 
107 
115  void setOneTimeDirichletBeta(double beta,const Thyra::ModelEvaluator<Scalar> & me) const;
116 
119 
122 
125 
126 #ifdef PANZER_HAVE_EPETRA_STACK
129 #endif
130 
135 
136  // build prototype in/out args
137  Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
138  Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
139 
140  // hide the default constructor
142 
143 };
144 
145 } // end namespace panzer
146 
147 #endif
virtual void applyInverseMassMatrix(const Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > input, const Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > output) const
Thyra::ModelEvaluatorBase::OutArgs< Scalar > prototypeOutArgs_
Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Build the in args, modifies the underlying models in args slightly.
void buildArgsPrototypes()
Build prototype in/out args.
Thyra::ModelEvaluatorBase::InArgs< Scalar > prototypeInArgs_
Teuchos::RCP< const Thyra::LinearOpBase< Scalar > > invMassMatrix_
Teuchos::RCP< Thyra::LinearOpBase< Scalar > > mass_
Teuchos::RCP< panzer::ModelEvaluator< Scalar > > getPanzerUnderlyingModel()
Get the underlying panzer::ModelEvaluator.
Teuchos::RCP< Thyra::VectorBase< Scalar > > scrap_f_
void evalModelImpl(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
Evaluation of model, applies the mass matrix to the RHS.
Teuchos::RCP< Thyra::VectorBase< Scalar > > zero_
Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
Build the nominal values, modifies the underlying models in args slightly.
Ptr< T > ptr() const
void setOneTimeDirichletBeta(double beta, const Thyra::ModelEvaluator< Scalar > &me) const
Teuchos::RCP< const panzer::ModelEvaluator< Scalar > > panzerModel_
Access to the panzer model evaluator pointer (thyra version)
Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgs() const
Build the out args, modifies the underlying models in args slightly.
bool constantMassMatrix_
Is the mass matrix constant.
void applyDirichletBCs(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &f) const
#define TEUCHOS_ASSERT(assertion_test)
void buildInverseMassMatrix(const Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs) const
bool massLumping_
Use mass lumping, or a full solve.
virtual void applyMassMatrix(const Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > input, const Teuchos::RCP< Thyra::MultiVectorBase< Scalar > > output) const