29 #ifndef RYTHMOS_TIME_RANGE_DEF_H 
   30 #define RYTHMOS_TIME_RANGE_DEF_H 
   32 #include "Rythmos_TimeRange_decl.hpp" 
   33 #include "Teuchos_Assert.hpp" 
   34 #include "Teuchos_ScalarTraits.hpp" 
   37 template<
class TimeType>
 
   38 int Rythmos::compareTimeValues( 
const TimeType &t1, 
const TimeType &t2 )
 
   41   const TimeType epsMore = 10.0*std::numeric_limits<TimeType>::epsilon();
 
   42   const TimeType t1Mag = Teuchos::ScalarTraits<TimeType>::magnitude(t1);
 
   43   const TimeType t1Tol = t1Mag*epsMore;
 
   44   if ( t2 - t1Tol <= t1 && t1 <= t2 + t1Tol )
 
   46   else if ( t1 > t2 + t1Tol )
 
   53 template<
class TimeType>
 
   55 Rythmos::timeRange(
const TimeType lower, 
const TimeType upper)
 
   57   return TimeRange<TimeType>(lower,upper);
 
   61 template<
class TimeType>
 
   63 Rythmos::invalidTimeRange()
 
   65   return TimeRange<TimeType>();
 
   69 template<
class TimeType>
 
   71 Rythmos::operator<<( std::ostream& out, const TimeRange<TimeType>& range )
 
   74   if (range.isValid()) {
 
   75     out << range.
lower() << 
"," << range.upper();
 
   85 template<
class TimeType>
 
   86 void Rythmos::asssertInTimeRange( 
const TimeRange<TimeType> &
timeRange,
 
   87   const TimeType &time )
 
   89   TEUCHOS_TEST_FOR_EXCEPTION( !timeRange.isInRange(time), std::out_of_range,
 
   90     "Error, the time = " << time
 
   91     << 
" is out of the range = " << timeRange << 
"!" 
   96 template<
class TimeType>
 
   97 bool Rythmos::isInRange_cc(
const TimeRange<TimeType> &tr, 
const TimeType &p)
 
  106 template<
class TimeType>
 
  107 bool Rythmos::isInRange_oc(
const TimeRange<TimeType> &tr, 
const TimeType &p)
 
  116 template<
class TimeType>
 
  117 bool Rythmos::isInRange_co(
const TimeRange<TimeType> &tr, 
const TimeType &p)
 
  126 template<
class TimeType>
 
  127 bool Rythmos::isInRange_oo(
const TimeRange<TimeType> &tr, 
const TimeType &p)
 
  136 #define RYTHMOS_TIME_RANGE_INSTANT(SCALAR) \ 
  138   template class TimeRange< SCALAR >; \ 
  140   template int compareTimeValues( const  SCALAR  &t1, const  SCALAR  &t2 ); \ 
  141   template TimeRange< SCALAR > timeRange(const  SCALAR  lower, const  SCALAR  upper); \ 
  142   template TimeRange< SCALAR > invalidTimeRange(); \ 
  143   template std::ostream& operator<<( std::ostream& out, const TimeRange< SCALAR >& range ); \ 
  144   template void asssertInTimeRange( const TimeRange<SCALAR > &timeRange, const SCALAR &time ); \ 
  145   template bool isInRange_cc(const TimeRange< SCALAR > &tr, const  SCALAR  &p); \ 
  146   template bool isInRange_oc(const TimeRange< SCALAR > &tr, const  SCALAR  &p); \ 
  147   template bool isInRange_co(const TimeRange< SCALAR > &tr, const  SCALAR  &p); \ 
  148   template bool isInRange_oo(const TimeRange< SCALAR > &tr, const  SCALAR  &p); \ 
  149   template class TimeRange_cc< SCALAR >;  \ 
  150   template class TimeRange_co< SCALAR >;  \ 
  151   template class TimeRange_oo< SCALAR >;  \ 
  152   template class TimeRange_oc< SCALAR >;   
  155 #endif //RYTHMOS_TIME_RANGE_DEF_H 
TimeRange< TimeType > timeRange(const TimeType my_lower, const TimeType my_upper)
Nonmember constructor. 
 
int compareTimeValues(const TimeType &t1, const TimeType &t2)
Compare two times taking into account floating point errors.