Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
CDR_Model_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// ****************************************************************************
3// Tempus: Copyright (2017) Sandia Corporation
4//
5// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6// ****************************************************************************
7// @HEADER
8
9#ifndef TEMPUS_CDR_MODEL_DECL_HPP
10#define TEMPUS_CDR_MODEL_DECL_HPP
11
12#include "Thyra_StateFuncModelEvaluatorBase.hpp"
13
14class Epetra_Comm;
15class Epetra_Map;
16class Epetra_Vector;
17class Epetra_CrsGraph;
18class Epetra_Import;
19
20namespace Tempus_Test {
21
22template<class Scalar> class ModelEvaluator1DFEM;
23
44template<class Scalar>
46 : public ::Thyra::StateFuncModelEvaluatorBase<Scalar>
47{
48public:
49
50 CDR_Model(const Teuchos::RCP<const Epetra_Comm>& comm,
51 const int num_global_elements,
52 const Scalar z_min,
53 const Scalar z_max,
54 const Scalar a, // convection
55 const Scalar k); // source
56
59
60 void set_x0(const Teuchos::ArrayView<const Scalar> &x0);
61
62 void setShowGetInvalidArgs(bool showGetInvalidArg);
63
64 void set_W_factory(const Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar> >& W_factory);
65
67
70
71 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar> > get_x_space() const;
72 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar> > get_f_space() const;
73 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
74 Teuchos::RCP<Thyra::LinearOpWithSolveBase<double> > create_W() const;
75 Teuchos::RCP< ::Thyra::LinearOpBase<Scalar> > create_W_op() const;
76 Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar> > get_W_factory() const;
77 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs() const;
78 Teuchos::RCP< ::Thyra::PreconditionerBase< Scalar > > create_W_prec() const;
80
81private:
82
84 virtual Teuchos::RCP<Epetra_CrsGraph> createGraph();
85
88
89 ::Thyra::ModelEvaluatorBase::OutArgs<Scalar> createOutArgsImpl() const;
90 void evalModelImpl(
91 const ::Thyra::ModelEvaluatorBase::InArgs<Scalar> &inArgs,
92 const ::Thyra::ModelEvaluatorBase::OutArgs<Scalar> &outArgs
93 ) const;
94
96
97private: // data members
98
99 const Teuchos::RCP<const Epetra_Comm> comm_;
101 const Scalar z_min_;
102 const Scalar z_max_;
103 const Scalar a_;
104 const Scalar k_;
105
106 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar> > x_space_;
107 Teuchos::RCP<const Epetra_Map> x_owned_map_;
108 Teuchos::RCP<const Epetra_Map> x_ghosted_map_;
109 Teuchos::RCP<const Epetra_Import> importer_;
110
111 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar> > f_space_;
112 Teuchos::RCP<const Epetra_Map> f_owned_map_;
113
114 Teuchos::RCP<Epetra_CrsGraph> W_graph_;
115
116 Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar> > W_factory_;
117
118 Teuchos::RCP<Epetra_Vector> node_coordinates_;
119 Teuchos::RCP<Epetra_Vector> ghosted_node_coordinates_;
120
121 mutable Teuchos::RCP<Epetra_Vector> u_ptr;
122 mutable Teuchos::RCP<Epetra_Vector> u_dot_ptr;
123 mutable Teuchos::RCP<Epetra_Vector> x_ptr;
124
125 mutable Teuchos::RCP<Epetra_Vector> J_diagonal_;
126
127 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> nominalValues_;
128 Teuchos::RCP< ::Thyra::VectorBase<Scalar> > x0_;
129 Teuchos::Array<Scalar> p_;
131 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
132 ::Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
133
134};
135
136//==================================================================
137// Finite Element Basis Object
138class Basis {
139
140 public:
141 // Constructor
142 Basis();
143
144 // Destructor
145 ~Basis();
146
147 // Calculates the values of u and x at the specified gauss point
148 void computeBasis(int gp, double *z, double *u, double *u_dot = nullptr);
149
150 public:
151 // Variables that are calculated at the gauss point
152 double *phi, *dphide;
153 double uu, zz, duu, eta, wt;
154 double dz;
155 // These are only needed for transient
157};
158
159} // namespace Tempus_Test
160
161#endif
void computeBasis(int gp, double *z, double *u, double *u_dot=nullptr)
1D CGFEM model for convection/diffusion/reaction
Teuchos::RCP< Epetra_Vector > u_dot_ptr
::Thyra::ModelEvaluatorBase::InArgs< Scalar > nominalValues_
Teuchos::RCP< Epetra_Vector > ghosted_node_coordinates_
const Teuchos::RCP< const Epetra_Comm > comm_
Teuchos::RCP< const ::Thyra::LinearOpWithSolveFactoryBase< Scalar > > W_factory_
Teuchos::RCP< const ::Thyra::VectorSpaceBase< Scalar > > get_x_space() const
Teuchos::RCP< Epetra_Vector > node_coordinates_
Teuchos::RCP< const ::Thyra::VectorSpaceBase< Scalar > > x_space_
void setShowGetInvalidArgs(bool showGetInvalidArg)
Teuchos::RCP< Epetra_Vector > J_diagonal_
::Thyra::ModelEvaluatorBase::InArgs< Scalar > getNominalValues() const
Teuchos::RCP< const Epetra_Map > x_owned_map_
void set_W_factory(const Teuchos::RCP< const ::Thyra::LinearOpWithSolveFactoryBase< Scalar > > &W_factory)
virtual Teuchos::RCP< Epetra_CrsGraph > createGraph()
Teuchos::RCP< const ::Thyra::VectorSpaceBase< Scalar > > get_f_space() const
::Thyra::ModelEvaluatorBase::InArgs< Scalar > createInArgs() const
Teuchos::RCP< ::Thyra::LinearOpBase< Scalar > > create_W_op() const
Teuchos::Array< Scalar > p_
Teuchos::RCP< Epetra_Vector > x_ptr
Teuchos::RCP< ::Thyra::VectorBase< Scalar > > x0_
::Thyra::ModelEvaluatorBase::InArgs< Scalar > prototypeInArgs_
Teuchos::RCP< const Epetra_Import > importer_
Teuchos::RCP< Epetra_CrsGraph > W_graph_
::Thyra::ModelEvaluatorBase::OutArgs< Scalar > prototypeOutArgs_
Teuchos::RCP< const ::Thyra::VectorSpaceBase< Scalar > > f_space_
void set_x0(const Teuchos::ArrayView< const Scalar > &x0)
Teuchos::RCP< ::Thyra::PreconditionerBase< Scalar > > create_W_prec() const
Teuchos::RCP< const Epetra_Map > x_ghosted_map_
Teuchos::RCP< Thyra::LinearOpWithSolveBase< double > > create_W() const
CDR_Model(const Teuchos::RCP< const Epetra_Comm > &comm, const int num_global_elements, const Scalar z_min, const Scalar z_max, const Scalar a, const Scalar k)
Teuchos::RCP< Epetra_Vector > u_ptr
Teuchos::RCP< const Epetra_Map > f_owned_map_
void evalModelImpl(const ::Thyra::ModelEvaluatorBase::InArgs< Scalar > &inArgs, const ::Thyra::ModelEvaluatorBase::OutArgs< Scalar > &outArgs) const
::Thyra::ModelEvaluatorBase::OutArgs< Scalar > createOutArgsImpl() const
Teuchos::RCP< const ::Thyra::LinearOpWithSolveFactoryBase< Scalar > > get_W_factory() const