Rythmos - Transient Integration for Differential Equations Version of the Day
Loading...
Searching...
No Matches
Rythmos_SmartInterpolationBufferAppender.hpp
1//@HEADER
2// ***********************************************************************
3//
4// Rythmos Package
5// Copyright (2006) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// This library is free software; you can redistribute it and/or modify
11// it under the terms of the GNU Lesser General Public License as
12// published by the Free Software Foundation; either version 2.1 of the
13// License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// Lesser General Public License for more details.
19//
20// You should have received a copy of the GNU Lesser General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23// USA
24// Questions? Contact Todd S. Coffey (tscoffe@sandia.gov)
25//
26// ***********************************************************************
27//@HEADER
28
29#ifndef RYTHMOS_SMART_INTERPOLATION_BUFFER_APPENDER_HPP
30#define RYTHMOS_SMART_INTERPOLATION_BUFFER_APPENDER_HPP
31
32#include "Rythmos_InterpolationBufferAppenderBase.hpp"
33#include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
34
35
36namespace Rythmos {
37
38
40template<class Scalar>
42 : virtual public InterpolationBufferAppenderBase<Scalar>,
43 virtual public Teuchos::ParameterListAcceptorDefaultBase
44{
45 public:
50 void append(
51 const InterpolationBufferBase<Scalar>& interpBuffSource,
52 const TimeRange<Scalar>& range,
53 const Ptr<InterpolationBufferBase<Scalar> > &interpBuffSink
54 );
55
58
60 void setParameterList(RCP<Teuchos::ParameterList> const& paramList);
61
63 RCP<const Teuchos::ParameterList> getValidParameters() const;
64
66};
67
68
69//
70// Implementations
71//
72
73
74template<class Scalar>
76 const InterpolationBufferBase<Scalar>& interpBuffSource,
77 const TimeRange<Scalar>& range,
78 const Ptr<InterpolationBufferBase<Scalar> > &interpBuffSink
79 )
80{
81 TEUCHOS_TEST_FOR_EXCEPTION(
82 true, std::logic_error,
83 "This class has never been tested before and should not be used\n"
84 "until it is"
85 );
86 // 2007/12/05: rabartl: This code has not been tested so don't use this
87 // until a test has been writen for this!
88#ifdef HAVE_RYTHMOS_DEBUG
89 this->assertAppendPreconditions(interpBuffSource,range,*interpBuffSink);
90#endif // HAVE_RYTHMOS_DEBUG
91 if (interpBuffSink->getOrder() >= interpBuffSource.getOrder()) {
92 // The incoming interpolation buffer's order of interpolation is lower than
93 // the base interpolation buffer's order of interpolation. In this case,
94 // we just copy the data over.
96 defaultAppender.append(interpBuffSink,interpBuffSource,range);
97 } else {
98 // In this case, the incoming interpolation buffer's order of interpolation
99 // is higher than the base interpolation buffer's, so we'll ask it to
100 // interpolate points before inserting into the base interpolation buffer.
101 TEUCHOS_TEST_FOR_EXCEPTION(
102 true,std::logic_error,
103 "Error, the smart interpolation buffer appender is not implemented\n"
104 "for appending interpolation buffers with higher order interpolation\n"
105 "into interpolation buffers with a lower order of interpolation yet!"
106 );
107 // 08/09/07 tscoffe: Note: you can't use selectPointsInTimeRange
108 // immediately because you may need to interpolate points before the first
109 // node inside the range. I.e. interpBuffSource.getNodes = [... , range.lower(), ... , range.upper(), ... ]
110 }
111}
112
113template<class Scalar>
114void SmartInterpolationBufferAppender<Scalar>::setParameterList(RCP<Teuchos::ParameterList> const& paramList)
115{
116 TEUCHOS_TEST_FOR_EXCEPT( is_null(paramList) );
117 paramList->validateParameters(*this->getValidParameters());
118 setMyParamList(paramList);
119 Teuchos::readVerboseObjectSublist(&*paramList,this);
120}
121
122template<class Scalar>
124{
125 static RCP<Teuchos::ParameterList> validPL;
126 if (is_null(validPL)) {
127 RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
128 Teuchos::setupVerboseObjectSublist(&*pl);
129 validPL = pl;
130 }
131 return (validPL);
132}
133
134} // namespace Rythmos
135
136
137#endif //RYTHMOS_SMART_INTERPOLATION_BUFFER_APPENDER_HPP
Base class for strategy objects that append data from one InterplationBufferBase object to another.
Base class for an interpolation buffer.
virtual int getOrder() const =0
Get order of interpolation.
Concrete InterplationBufferAppender subclass that just transfers notes without any regard for accurac...
void append(const InterpolationBufferBase< Scalar > &interpBuffSource, const TimeRange< Scalar > &range, const Ptr< InterpolationBufferBase< Scalar > > &interpBuffSink)
Concrete implementation that simply copies the nodal points between the interpolation buffers.
void setParameterList(RCP< Teuchos::ParameterList > const &paramList)
void append(const InterpolationBufferBase< Scalar > &interpBuffSource, const TimeRange< Scalar > &range, const Ptr< InterpolationBufferBase< Scalar > > &interpBuffSink)
Concrete implementation that attempts to use the order of interpolation between the two interpolation...
RCP< const Teuchos::ParameterList > getValidParameters() const
Represent a time range.