42 #ifndef EPETRA_EXT_DIAGONAL_TRANSIENT_MODEL_HPP
43 #define EPETRA_EXT_DIAGONAL_TRANSIENT_MODEL_HPP
46 #include "EpetraExt_ModelEvaluator.h"
47 #include "Teuchos_VerboseObject.hpp"
48 #include "Teuchos_ParameterListAcceptor.hpp"
49 #include "Teuchos_Array.hpp"
53 class Epetra_CrsGraph;
100 :
public ::EpetraExt::ModelEvaluator,
101 public Teuchos::VerboseObject<DiagonalTransientModel>,
102 public Teuchos::ParameterListAcceptor
111 Teuchos::RCP<Epetra_Comm>
const& epetra_comm
115 Teuchos::RCP<const Epetra_Vector>
get_gamma()
const;
118 Teuchos::RCP<const Epetra_Vector>
120 const double t,
const Epetra_Vector *coeff_s_p = 0
124 Teuchos::RCP<const Epetra_MultiVector>
126 const double t,
const Epetra_Vector *coeff_s_p = 0
135 void setParameterList(Teuchos::RCP<Teuchos::ParameterList>
const& paramList);
151 Teuchos::RCP<const Epetra_Map>
get_x_map()
const;
153 Teuchos::RCP<const Epetra_Map>
get_f_map()
const;
155 Teuchos::RCP<const Epetra_Map>
get_p_map(
int l)
const;
157 Teuchos::RCP<const Teuchos::Array<std::string> >
get_p_names(
int l)
const;
159 Teuchos::RCP<const Epetra_Map>
get_g_map(
int j)
const;
161 Teuchos::RCP<const Epetra_Vector>
get_x_init()
const;
165 Teuchos::RCP<const Epetra_Vector>
get_p_init(
int l)
const;
167 Teuchos::RCP<Epetra_Operator>
create_W()
const;
173 void evalModel(
const InArgs& inArgs,
const OutArgs& outArgs )
const;
179 enum EGammaFit { GAMMA_FIT_LINEAR, GAMMA_FIT_RANDOM };
186 typedef Teuchos::Array<double> coeff_s_t;
187 typedef Teuchos::Array<int> coeff_s_idx_t;
188 typedef Teuchos::Array<Teuchos::RCP<const Epetra_Map> > RCP_Eptra_Map_Array_t;
189 typedef Teuchos::Array<Teuchos::RCP<Epetra_Vector> > RCP_Eptra_Vector_Array_t;
190 typedef Teuchos::Array<Teuchos::RCP<Teuchos::Array<std::string> > > RCP_Array_String_Array_t;
196 Teuchos::RCP<Teuchos::ParameterList> paramList_;
197 Teuchos::RCP<Epetra_Comm> epetra_comm_;
198 Teuchos::RCP<Epetra_Map> epetra_map_;
204 coeff_s_idx_t coeff_s_idx_;
205 EGammaFit gamma_fit_;
207 bool exactSolutionAsResponse_;
208 Teuchos::RCP<Epetra_Vector> gamma_;
209 Teuchos::RCP<Epetra_CrsGraph> W_graph_;
213 RCP_Eptra_Map_Array_t map_p_;
214 RCP_Array_String_Array_t names_p_;
215 RCP_Eptra_Map_Array_t map_g_;
216 RCP_Eptra_Vector_Array_t p_init_;
217 Teuchos::RCP<Epetra_Vector> x_init_;
218 Teuchos::RCP<Epetra_Vector> x_dot_init_;
220 mutable Teuchos::RCP<const Epetra_Vector> coeff_s_p_;
230 const Teuchos::RCP<const Epetra_Vector> &coeff_s_p
233 void unset_coeff_s_p()
const;
235 int coeff_s_idx(
int i)
const
237 return coeff_s_idx_[i];
240 double coeff_s(
int i)
const
242 return (*coeff_s_p_)[coeff_s_idx(i)];
252 Teuchos::RCP<DiagonalTransientModel>
253 diagonalTransientModel(
254 Teuchos::RCP<Epetra_Comm>
const& epetra_comm,
255 Teuchos::RCP<Teuchos::ParameterList>
const& paramList = Teuchos::null
267 #endif // EPETRA_EXT_DIAGONAL_TRANSIENT_MODEL_HPP
OutArgs createOutArgs() const
Simple transient diagonal model for an implicit or explicit ODE.
Teuchos::RCP< const Epetra_Vector > getExactSolution(const double t, const Epetra_Vector *coeff_s_p=0) const
Return the exact solution as a function of time.
Teuchos::RCP< const Epetra_Vector > get_gamma() const
Return the model vector gamma,.
Teuchos::RCP< const Epetra_Map > get_p_map(int l) const
Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
DiagonalTransientModel(Teuchos::RCP< Epetra_Comm > const &epetra_comm)
Teuchos::RCP< const Epetra_Vector > get_x_init() const
Teuchos::RCP< const Epetra_Map > get_f_map() const
Teuchos::RCP< const Teuchos::Array< std::string > > get_p_names(int l) const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Teuchos::RCP< const Epetra_MultiVector > getExactSensSolution(const double t, const Epetra_Vector *coeff_s_p=0) const
Return the exact sensitivity of x as a function of time.
Teuchos::RCP< const Epetra_Map > get_x_map() const
InArgs createInArgs() const
Teuchos::RCP< Epetra_Operator > create_W() const
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const ¶mList)
Teuchos::RCP< const Epetra_Vector > get_x_dot_init() const
Teuchos::RCP< const Epetra_Vector > get_p_init(int l) const
void evalModel(const InArgs &inArgs, const OutArgs &outArgs) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
Teuchos::RCP< const Epetra_Map > get_g_map(int j) const