Rythmos - Transient Integration for Differential Equations Version of the Day
Rythmos_IntegrationObserverBase.hpp
00001 
00002 #ifndef RYTHMOS_INTEGRATION_OBSERVER_BASE_HPP
00003 #define RYTHMOS_INTEGRATION_OBSERVER_BASE_HPP
00004 
00005 #include "Rythmos_Types.hpp"
00006 #include "Teuchos_Describable.hpp"
00007 #include "Teuchos_VerboseObject.hpp"
00008 
00009 namespace Rythmos {
00010 
00011 
00012 // Forwards
00013 template<class Scalar> class TimeRange;
00014 template<class Scalar> class StepControlInfo;
00015 template<class Scalar> class StepperBase;
00016 
00017 
00023 template<class Scalar>
00024 class IntegrationObserverBase
00025   : virtual public Teuchos::Describable,
00026     virtual public Teuchos::VerboseObject<IntegrationObserverBase<Scalar> >
00027 {
00028 public:
00029 
00035   virtual RCP<IntegrationObserverBase<Scalar> >
00036   cloneIntegrationObserver() const = 0;
00037 
00049   virtual void resetIntegrationObserver(
00050     const TimeRange<Scalar> &integrationTimeDomain
00051     // ToDo: Pass in the initial condition to the observer
00052     ) = 0;
00053 
00085   virtual void observeCompletedTimeStep(
00086     const StepperBase<Scalar> &stepper,
00087     const StepControlInfo<Scalar> &stepCtrlInfo,
00088     const int timeStepIter
00089     ) = 0;
00090 
00091 };
00092 
00093 
00099 template<class Scalar>
00100 bool isInitialTimeStep(
00101   const TimeRange<Scalar> &currentTimeRange,
00102   const TimeRange<Scalar> &fullTimeRange
00103   )
00104 {
00105   typedef Teuchos::ScalarTraits<Scalar> ST;
00106   return compareTimeValues(currentTimeRange.lower(), fullTimeRange.lower()) == ST::zero();
00107 }
00108 
00109 
00115 template<class Scalar>
00116 bool isFinalTimeStep(
00117   const TimeRange<Scalar> &currentTimeRange,
00118   const TimeRange<Scalar> &fullTimeRange
00119   )
00120 {
00121   typedef Teuchos::ScalarTraits<Scalar> ST;
00122   return compareTimeValues(currentTimeRange.upper(), fullTimeRange.upper()) >= ST::zero();
00123 }
00124 
00125 
00126 } // namespace Rythmos
00127 
00128 
00129 #endif // RYTHMOS_INTEGRATION_OBSERVER_BASE_HPP
 All Classes Functions Variables Typedefs Friends