29#ifndef Rythmos_DATA_STORE_DEF_H
30#define Rythmos_DATA_STORE_DEF_H
32#include "Rythmos_DataStore_decl.hpp"
38DataStore<Scalar>::DataStore()
44DataStore<Scalar>::DataStore(
46 ,
const Teuchos::RCP<
const Thyra::VectorBase<Scalar> > &x_
47 ,
const Teuchos::RCP<
const Thyra::VectorBase<Scalar> > &xdot_
48 ,ScalarMag &accuracy_)
57DataStore<Scalar>::DataStore(
58 const DataStore<Scalar>& ds_in
64 accuracy = ds_in.accuracy;
68RCP<DataStore<Scalar> > DataStore<Scalar>::clone()
const
71 RCP<VectorBase<Scalar> > x_out;
72 if (!Teuchos::is_null(x)) {
75 RCP<VectorBase<Scalar> > xdot_out;
76 if (!Teuchos::is_null(xdot)) {
77 xdot_out = xdot->clone_v();
79 ScalarMag accuracy_out = accuracy;
80 RCP<DataStore<Scalar> > ds_out = Teuchos::rcp(
new DataStore<Scalar>(t_out,x_out,xdot_out,accuracy_out));
85bool DataStore<Scalar>::operator< (
const DataStore<Scalar>& ds)
const
87 return( this->time < ds.time );
91bool DataStore<Scalar>::operator<= (
const DataStore<Scalar>& ds)
const
93 return( this->time <= ds.time );
97bool DataStore<Scalar>::operator< (
const Scalar& t)
const
99 return( this->time < t );
102template<
class Scalar>
103bool DataStore<Scalar>::operator<= (
const Scalar& t)
const
105 return( this->time <= t );
108template<
class Scalar>
109bool DataStore<Scalar>::operator> (
const DataStore<Scalar>& ds)
const
111 return( this->time > ds.time );
114template<
class Scalar>
115bool DataStore<Scalar>::operator>= (
const DataStore<Scalar>& ds)
const
117 return( this->time >= ds.time );
120template<
class Scalar>
121bool DataStore<Scalar>::operator> (
const Scalar& t)
const
123 return( this->time > t );
126template<
class Scalar>
127bool DataStore<Scalar>::operator>= (
const Scalar& t)
const
129 return( this->time >= t );
132template<
class Scalar>
133bool DataStore<Scalar>::operator== (
const DataStore<Scalar>& ds)
const
135 return( this->time == ds.time );
138template<
class Scalar>
139bool DataStore<Scalar>::operator== (
const Scalar& t)
const
141 return( this->time == t );
144template<
class Scalar>
145std::string DataStore<Scalar>::description()
const
147 std::string name =
"Rythmos::DataStore";
151template<
class Scalar>
152void DataStore<Scalar>::describe(
153 Teuchos::FancyOStream &out
154 ,
const Teuchos::EVerbosityLevel verbLevel
157 if (verbLevel == Teuchos::VERB_EXTREME) {
158 out << description() <<
"::describe:" << std::endl;
159 out <<
"time = " << time << std::endl;
160 out <<
"x = " << std::endl;
161 x->describe(out,verbLevel);
162 if (xdot != Teuchos::null) {
163 out <<
"xdot = " << std::endl;
164 xdot->describe(out,verbLevel);
166 out <<
"accuracy = " << accuracy << std::endl;
171template<
class Scalar>
172void dataStoreVectorToVector(
173 const typename DataStore<Scalar>::DataStoreVector_t &ds
174 ,Array<Scalar> *time_vec
175 ,Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > *x_vec
176 ,Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > *xdot_vec
177 ,Array<
typename Teuchos::ScalarTraits<Scalar>::magnitudeType> *accuracy_vec)
186 accuracy_vec->clear();
188 for (
int i=0; i<N ; ++i) {
190 time_vec->push_back(ds[i].time);
192 x_vec->push_back(ds[i].x);
194 xdot_vec->push_back(ds[i].xdot);
196 accuracy_vec->push_back(ds[i].accuracy);
200template<
class Scalar>
201void vectorToDataStoreVector(
202 const Array<Scalar> &time_vec
203 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &x_vec
204 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &xdot_vec
205 ,
const Array<
typename Teuchos::ScalarTraits<Scalar>::magnitudeType> &accuracy_vec
206 ,
typename DataStore<Scalar>::DataStoreVector_t *ds
209 int N = time_vec.size();
210 int Nx = x_vec.size();
211 int Nxdot = xdot_vec.size();
212 int Nacc = accuracy_vec.size();
213 if ( (N != Nx) || (N != Nxdot) || (N != Nacc) ) {
218 for (
int i=0; i<N ; ++i) {
219 Scalar time_temp = time_vec[i];
220 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x_temp = x_vec[i];
221 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot_temp = xdot_vec[i];
222 typename Teuchos::ScalarTraits<Scalar>::magnitudeType accuracy_temp = accuracy_vec[i];
223 DataStore<Scalar> ds_tmp(time_temp,x_temp,xdot_temp,accuracy_temp);
224 ds->push_back(ds_tmp);
228template<
class Scalar>
229void vectorToDataStoreList(
230 const Array<Scalar> &time_vec
231 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &x_vec
232 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &xdot_vec
233 ,
const Array<
typename Teuchos::ScalarTraits<Scalar>::magnitudeType> &accuracy_vec
234 ,
typename DataStore<Scalar>::DataStoreList_t *ds)
236 int N = time_vec.size();
237 int Nx = x_vec.size();
238 int Nxdot = xdot_vec.size();
239 int Nacc = accuracy_vec.size();
240 if ( (N != Nx) || (N != Nxdot) || (N != Nacc) ) {
245 for (
int i=0; i<N ; ++i) {
246 Scalar time_temp = time_vec[i];
247 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x_temp = x_vec[i];
248 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot_temp = xdot_vec[i];
249 typename Teuchos::ScalarTraits<Scalar>::magnitudeType accuracy_temp = accuracy_vec[i];
250 DataStore<Scalar> ds_tmp(time_temp,x_temp,xdot_temp,accuracy_temp);
251 ds->push_back(ds_tmp);
255template<
class Scalar>
256void vectorToDataStoreList(
257 const Array<Scalar> &time_vec
258 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &x_vec
259 ,
const Array<Teuchos::RCP<
const Thyra::VectorBase<Scalar> > > &xdot_vec
260 ,
typename DataStore<Scalar>::DataStoreList_t *ds)
262 typedef Teuchos::ScalarTraits<Scalar> ST;
263 Array<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> accuracy_vec;
264 int N = time_vec.size();
265 accuracy_vec.reserve(N);
266 for (
int i=0 ; i<N ; ++i) {
267 accuracy_vec.push_back(ST::zero());
269 vectorToDataStoreList(time_vec,x_vec,xdot_vec,accuracy_vec,ds);
278#define RYTHMOS_DATA_STORE_INSTANT(SCALAR) \
280 template class DataStore< SCALAR >; \
282 template void dataStoreVectorToVector( \
283 const DataStore< SCALAR >::DataStoreVector_t &ds \
284 ,Array< SCALAR > *time_vec \
285 ,Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > *x_vec \
286 ,Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > *xdot_vec \
287 ,Array<Teuchos::ScalarTraits< SCALAR >::magnitudeType> *accuracy_vec \
290 template void vectorToDataStoreVector( \
291 const Array< SCALAR > &time_vec \
292 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &x_vec \
293 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &xdot_vec \
294 ,const Array<Teuchos::ScalarTraits< SCALAR >::magnitudeType> &accuracy_vec \
295 ,DataStore< SCALAR >::DataStoreVector_t *ds \
298 template void vectorToDataStoreList( \
299 const Array< SCALAR > &time_vec \
300 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &x_vec \
301 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &xdot_vec \
302 ,const Array<Teuchos::ScalarTraits< SCALAR >::magnitudeType> &accuracy_vec \
303 ,DataStore< SCALAR >::DataStoreList_t *ds \
306 template void vectorToDataStoreList( \
307 const Array< SCALAR > &time_vec \
308 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &x_vec \
309 ,const Array<Teuchos::RCP<const Thyra::VectorBase< SCALAR > > > &xdot_vec \
310 ,DataStore< SCALAR >::DataStoreList_t *ds \