108 const InterpolationBufferBase<Scalar>& interpBuffSource,
109 const TimeRange<Scalar>& appendRange,
110 const Ptr<InterpolationBufferBase<Scalar> > &interpBuffSink
113 TEUCHOS_ASSERT( !is_null(interpBuffSink) );
114#ifdef HAVE_RYTHMOS_DEBUG
115 this->assertAppendPreconditions(interpBuffSource,appendRange,*interpBuffSink);
118 RCP<Teuchos::FancyOStream> out = this->getOStream();
119 Teuchos::OSTab ostab(out,1,
"PointwiseInterpolationBufferAppender::append");
120 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
121 *out <<
"Interpolation Buffer source range = [" << interpBuffSource.getTimeRange().lower() <<
"," <<
122 interpBuffSource.getTimeRange().upper() <<
"]" << std::endl;
123 *out <<
"Append range = [" << appendRange.lower() <<
"," << appendRange.upper() <<
"]" << std::endl;
124 *out <<
"Interpolation Buffer sink range = [" << interpBuffSink->getTimeRange().lower() <<
"," <<
125 interpBuffSink->getTimeRange().upper() <<
"]" << std::endl;
128 RCP<const TimeRange<Scalar> > correctedAppendRange = Teuchos::rcp(&appendRange,
false);
129 if (compareTimeValues<Scalar>(interpBuffSink->getTimeRange().upper(),appendRange.lower()) == 0) {
131 correctedAppendRange = Teuchos::rcp(
new TimeRange_oc<Scalar>(appendRange));
132 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
133 *out <<
"Corrected append range = (" << correctedAppendRange->lower() <<
"," <<
134 correctedAppendRange->upper() <<
"]" << std::endl;
137 else if (compareTimeValues<Scalar>(interpBuffSink->getTimeRange().lower(),appendRange.upper()) == 0) {
139 correctedAppendRange = Teuchos::rcp(
new TimeRange_co<Scalar>(appendRange));
140 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
141 *out <<
"Corrected append range = [" << correctedAppendRange->lower() <<
"," <<
142 correctedAppendRange->upper() <<
")" << std::endl;
146 Array<Scalar> time_vec_in;
147 interpBuffSource.getNodes(&time_vec_in);
149 Array<Scalar> time_vec;
150 selectPointsInTimeRange(time_vec_in,*correctedAppendRange,Teuchos::outArg(time_vec));
151 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
152 *out <<
"Selected points for appending to sink buffer: " << time_vec << std::endl;
155 Array<RCP<const Thyra::VectorBase<Scalar> > > x_vec;
156 Array<RCP<const Thyra::VectorBase<Scalar> > > xdot_vec;
157 Array<ScalarMag> accuracy_vec;
158 interpBuffSource.getPoints(time_vec, &x_vec, &xdot_vec, &accuracy_vec);
160 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
161 *out <<
"Sink buffer range before addPoints = [" << interpBuffSink->getTimeRange().lower() <<
"," <<
162 interpBuffSink->getTimeRange().upper() <<
"]" << std::endl;
165 interpBuffSink->addPoints(time_vec, x_vec, xdot_vec);
167 if ( Teuchos::as<int>(this->getVerbLevel()) >= Teuchos::as<int>(Teuchos::VERB_HIGH) ) {
168 *out <<
"Sink buffer range after addPoints = [" << interpBuffSink->getTimeRange().lower() <<
"," <<
169 interpBuffSink->getTimeRange().upper() <<
"]" << std::endl;