Rythmos_PointwiseInterpolationBufferAppender.hpp
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_POINTWISE_INTERPOLATION_BUFFER_APPENDER_HPP
00030 #define RYTHMOS_POINTWISE_INTERPOLATION_BUFFER_APPENDER_HPP
00031
00032 #include "Rythmos_InterpolationBufferAppenderBase.hpp"
00033
00034
00035 namespace Rythmos {
00036
00037
00041 template<class Scalar>
00042 class PointwiseInterpolationBufferAppender
00043 : virtual public InterpolationBufferAppenderBase<Scalar>
00044 {
00045 public:
00046
00048 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
00049
00053 void append(
00054 const InterpolationBufferBase<Scalar>& interpBuffSource,
00055 const TimeRange<Scalar>& range,
00056 const Ptr<InterpolationBufferBase<Scalar> > &interpBuffSink
00057 );
00058
00061
00063 void describe(
00064 Teuchos::FancyOStream &out,
00065 const Teuchos::EVerbosityLevel verbLevel
00066 ) const;
00067
00069
00072
00074 void setParameterList(RCP<ParameterList> const& paramList);
00076 RCP<ParameterList> getNonconstParameterList();
00078 RCP<ParameterList> unsetParameterList();
00079
00081
00082 private:
00083
00084 RCP<ParameterList> parameterList_;
00085
00086 };
00087
00088
00089
00094 template<class Scalar>
00095 RCP<PointwiseInterpolationBufferAppender<Scalar> >
00096 pointwiseInterpolationBufferAppender()
00097 {
00098 return Teuchos::rcp(new PointwiseInterpolationBufferAppender<Scalar>);
00099 }
00100
00101
00102
00103
00104
00105
00106
00107 template<class Scalar>
00108 void PointwiseInterpolationBufferAppender<Scalar>::append(
00109 const InterpolationBufferBase<Scalar>& interpBuffSource,
00110 const TimeRange<Scalar>& range,
00111 const Ptr<InterpolationBufferBase<Scalar> > &interpBuffSink
00112 )
00113 {
00114 #ifdef TEUCHOS_DEBUG
00115 this->assertAppendPreconditions(interpBuffSource,range,*interpBuffSink);
00116 #endif // TEUCHOS_DEBUG
00117
00118 Array<Scalar> time_vec_in;
00119 interpBuffSource.getNodes(&time_vec_in);
00120
00121 Array<Scalar> time_vec;
00122 selectPointsInTimeRange(&time_vec,time_vec_in,range);
00123
00124
00125 Array<RCP<const Thyra::VectorBase<Scalar> > > x_vec;
00126 Array<RCP<const Thyra::VectorBase<Scalar> > > xdot_vec;
00127 Array<ScalarMag> accuracy_vec;
00128 interpBuffSource.getPoints(time_vec, &x_vec, &xdot_vec, &accuracy_vec);
00129
00130 interpBuffSink->addPoints(time_vec, x_vec, xdot_vec);
00131
00132 }
00133
00134
00135 template<class Scalar>
00136 void PointwiseInterpolationBufferAppender<Scalar>::describe(
00137 Teuchos::FancyOStream &out,
00138 const Teuchos::EVerbosityLevel verbLevel
00139 ) const
00140 {
00141 using Teuchos::as;
00142 if (
00143 (as<int>(verbLevel) == as<int>(Teuchos::VERB_DEFAULT))
00144 || (as<int>(verbLevel) >= as<int>(Teuchos::VERB_LOW))
00145 )
00146 {
00147 out << this->description() << std::endl;
00148 }
00149 }
00150
00151
00152 template<class Scalar>
00153 void PointwiseInterpolationBufferAppender<Scalar>::setParameterList(
00154 RCP<ParameterList> const& paramList
00155 )
00156 {
00157 TEST_FOR_EXCEPTION(
00158 paramList==Teuchos::null, std::logic_error,
00159 "Error, paramList == Teuchos::null!\n" );
00160 parameterList_ = paramList;
00161 }
00162
00163
00164 template<class Scalar>
00165 RCP<ParameterList>
00166 PointwiseInterpolationBufferAppender<Scalar>::getNonconstParameterList()
00167 {
00168 return(parameterList_);
00169 }
00170
00171
00172 template<class Scalar>
00173 RCP<ParameterList>
00174 PointwiseInterpolationBufferAppender<Scalar>::unsetParameterList()
00175 {
00176 RCP<ParameterList> temp_param_list = parameterList_;
00177 parameterList_ = Teuchos::null;
00178 return(temp_param_list);
00179 }
00180
00181
00182 }
00183
00184
00185 #endif //RYTHMOS_POINTWISE_INTERPOLATION_BUFFER_APPENDER_HPP