30 #ifndef RYTHMOS_RK_BUTCHER_TABLEAU_BASE_HPP 31 #define RYTHMOS_RK_BUTCHER_TABLEAU_BASE_HPP 33 #include "Rythmos_Types.hpp" 34 #include "Teuchos_Describable.hpp" 35 #include "Teuchos_ParameterListAcceptor.hpp" 36 #include "Teuchos_VerboseObject.hpp" 37 #include "Teuchos_SerialDenseMatrix.hpp" 38 #include "Teuchos_SerialDenseVector.hpp" 43 template<
class Scalar>
44 class RKButcherTableauBase :
45 virtual public Teuchos::Describable,
46 virtual public Teuchos::ParameterListAcceptor,
47 virtual public Teuchos::VerboseObject<RKButcherTableauBase<Scalar> >
51 virtual int numStages()
const = 0;
53 virtual const Teuchos::SerialDenseMatrix<int,Scalar>& A()
const = 0;
55 virtual const Teuchos::SerialDenseVector<int,Scalar>& b()
const = 0;
57 virtual const Teuchos::SerialDenseVector<int,Scalar>& c()
const = 0;
59 virtual int order()
const = 0;
61 virtual bool operator== (
const RKButcherTableauBase<Scalar>& rkbt)
const;
63 virtual void setDescription(std::string longDescription) = 0;
68 template<
class Scalar>
69 bool RKButcherTableauBase<Scalar>::operator== (
const RKButcherTableauBase<Scalar>& rkbt)
const 71 if (this->numStages() != rkbt.numStages()) {
74 if (this->order() != rkbt.order()) {
77 int N = rkbt.numStages();
79 const Teuchos::SerialDenseVector<int,Scalar> b_ = this->b();
80 const Teuchos::SerialDenseVector<int,Scalar> c_ = this->c();
81 const Teuchos::SerialDenseVector<int,Scalar> other_b = rkbt.b();
82 const Teuchos::SerialDenseVector<int,Scalar> other_c = rkbt.c();
83 for (
int i=0 ; i<N ; ++i) {
84 if (b_(i) != other_b(i)) {
87 if (c_(i) != other_c(i)) {
92 const Teuchos::SerialDenseMatrix<int,Scalar>& A_ = this->A();
93 const Teuchos::SerialDenseMatrix<int,Scalar>& other_A = rkbt.A();
94 for (
int i=0 ; i<N ; ++i) {
95 for (
int j=0 ; j<N ; ++j) {
96 if (A_(i,j) != other_A(i,j)) {
107 #endif // RYTHMOS_RK_BUTCHER_TABLEAU_BASE_HPP