00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef Rythmos_DATA_STORE_DECL_H
00030 #define Rythmos_DATA_STORE_DECL_H
00031
00032 #include "Rythmos_Types.hpp"
00033 #include "Thyra_VectorBase.hpp"
00034 #include "Teuchos_Describable.hpp"
00035
00036 namespace Rythmos {
00037
00038 template<class Scalar>
00039 class DataStore : virtual public Teuchos::Describable
00040 {
00041
00042 public:
00043
00044 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
00045
00047 ~DataStore() {};
00048
00050 DataStore();
00051
00053
00054 DataStore(Scalar& time_
00055 ,const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x_
00056 ,const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot_
00057 ,ScalarMag& accuracy_);
00058
00060
00061 DataStore(const DataStore<Scalar>& ds_in);
00062
00064
00065 RCP<DataStore<Scalar> > clone() const;
00066
00068 Scalar time;
00069
00071 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x;
00072
00074 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot;
00075
00077 ScalarMag accuracy;
00078
00080 bool operator< (const DataStore<Scalar>& ds) const;
00081
00083 bool operator<= (const DataStore<Scalar>& ds) const;
00084
00086 bool operator< (const Scalar& t) const;
00087
00089 bool operator<= (const Scalar& t) const;
00090
00092 bool operator> (const DataStore<Scalar>& ds) const;
00093
00095 bool operator>= (const DataStore<Scalar>& ds) const;
00096
00098 bool operator> (const Scalar& t) const;
00099
00101 bool operator>= (const Scalar& t) const;
00102
00104 bool operator== (const DataStore<Scalar>& ds) const;
00105
00107 bool operator== (const Scalar& t) const;
00108
00110 typedef Array<DataStore<Scalar> > DataStoreVector_t;
00111
00113 typedef Array<const DataStore<Scalar> > constDataStoreVector_t;
00114
00116 typedef std::list<DataStore<Scalar> > DataStoreList_t;
00117
00119 typedef std::list<const DataStore<Scalar> > constDataStoreList_t;
00120
00122
00123 std::string description() const;
00124
00127 void describe(
00128 Teuchos::FancyOStream &out
00129 ,const Teuchos::EVerbosityLevel verbLevel
00130 ) const;
00131 };
00132
00133
00134
00135 template<class Scalar>
00136 void dataStoreVectorToVector(
00137 const typename DataStore<Scalar>::DataStoreVector_t &ds
00138 ,Array<Scalar> *time_vec
00139 ,Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > *x_vec
00140 ,Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > *xdot_vec
00141 ,Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> *accuracy_vec);
00142
00143
00144 template<class Scalar>
00145 void vectorToDataStoreVector(
00146 const Array<Scalar> &time_vec
00147 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &x_vec
00148 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &xdot_vec
00149 ,const Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> &accuracy_vec
00150 ,typename DataStore<Scalar>::DataStoreVector_t *ds);
00151
00152
00153 template<class Scalar>
00154 void vectorToDataStoreList(
00155 const Array<Scalar> &time_vec
00156 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &x_vec
00157 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &xdot_vec
00158 ,const Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> &accuracy_vec
00159 ,typename DataStore<Scalar>::DataStoreList_t *ds);
00160
00161 template<class Scalar>
00162 void vectorToDataStoreList(
00163 const Array<Scalar> &time_vec
00164 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &x_vec
00165 ,const Array<Teuchos::RCP<const Thyra::VectorBase<Scalar> > > &xdot_vec
00166 ,typename DataStore<Scalar>::DataStoreList_t *ds);
00167
00168 }
00169
00170 #endif // Rythmos_DATA_STORE_DECL_H
00171