13 #ifndef VERTEXCFD_CDR_MODEL_HPP
14 #define VERTEXCFD_CDR_MODEL_HPP
16 #include "Thyra_StateFuncModelEvaluatorBase.hpp"
21 class Epetra_CrsGraph;
28 template<
class Scalar>
51 template<
class Scalar>
52 class CDR_Model final :
public ::Thyra::StateFuncModelEvaluatorBase<Scalar>
55 CDR_Model(
const Teuchos::RCP<const Epetra_Comm>& comm,
56 const int num_global_elements,
65 void set_x0(
const Teuchos::ArrayView<const Scalar>& x0);
67 void setShowGetInvalidArgs(
bool showGetInvalidArg);
70 const Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar>>&
78 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar>>
79 get_x_space()
const override;
80 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar>>
81 get_f_space()
const override;
82 ::Thyra::ModelEvaluatorBase::InArgs<Scalar>
83 getNominalValues()
const override;
84 Teuchos::RCP<Thyra::LinearOpWithSolveBase<double>>
85 create_W()
const override;
86 Teuchos::RCP<::Thyra::LinearOpBase<Scalar>> create_W_op()
const override;
87 Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar>>
88 get_W_factory()
const override;
89 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> createInArgs()
const override;
90 Teuchos::RCP<::Thyra::PreconditionerBase<Scalar>>
91 create_W_prec()
const override;
96 Teuchos::RCP<Epetra_CrsGraph> createGraph();
101 ::Thyra::ModelEvaluatorBase::OutArgs<Scalar>
102 createOutArgsImpl()
const override;
104 evalModelImpl(const ::Thyra::ModelEvaluatorBase::InArgs<Scalar>& inArgs,
105 const ::Thyra::ModelEvaluatorBase::OutArgs<Scalar>& outArgs)
111 const Teuchos::RCP<const Epetra_Comm> comm_;
112 const int num_global_elements_;
118 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar>> x_space_;
119 Teuchos::RCP<const Epetra_Map> x_owned_map_;
120 Teuchos::RCP<const Epetra_Map> x_ghosted_map_;
121 Teuchos::RCP<const Epetra_Import> importer_;
123 Teuchos::RCP<const ::Thyra::VectorSpaceBase<Scalar>> f_space_;
124 Teuchos::RCP<const Epetra_Map> f_owned_map_;
126 Teuchos::RCP<Epetra_CrsGraph> W_graph_;
128 Teuchos::RCP<const ::Thyra::LinearOpWithSolveFactoryBase<Scalar>> W_factory_;
130 Teuchos::RCP<Epetra_Vector> node_coordinates_;
131 Teuchos::RCP<Epetra_Vector> ghosted_node_coordinates_;
133 mutable Teuchos::RCP<Epetra_Vector> u_ptr;
134 mutable Teuchos::RCP<Epetra_Vector> u_dot_ptr;
135 mutable Teuchos::RCP<Epetra_Vector> x_ptr;
137 mutable Teuchos::RCP<Epetra_Vector> J_diagonal_;
139 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> nominalValues_;
140 Teuchos::RCP<::Thyra::VectorBase<Scalar>> x0_;
141 Teuchos::Array<Scalar> p_;
142 bool showGetInvalidArg_;
143 ::Thyra::ModelEvaluatorBase::InArgs<Scalar> prototypeInArgs_;
144 ::Thyra::ModelEvaluatorBase::OutArgs<Scalar> prototypeOutArgs_;
159 void computeBasis(
int gp,
double* z,
double* u,
double* u_dot =
nullptr);
163 double *phi, *dphide;
164 double uu, zz, duu, eta, wt;
167 double uu_dot, duu_dot;
173 #include "CDR_Model_impl.hpp"