Changeset f57182 for src/base/helper.hpp


Ignore:
Timestamp:
Mar 30, 2013, 2:44:52 PM (13 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
8180d8
Parents:
d13e27
git-author:
Julian Iseringhausen <isering@…> (06/11/12 14:02:16)
git-committer:
Julian Iseringhausen <isering@…> (03/30/13 14:44:52)
Message:

Open boundary conditions.

Conflicts:

lib/vmg/src/Makefile.am
lib/vmg/src/base/factory.cpp
lib/vmg/test/unit_test/library/dirichlet_fas_lr_mpi.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/base/helper.hpp

    rd13e27 rf57182  
    8080   * Checks a number for validity, i.e. it is neither nan nor inf.
    8181   */
    82   inline bool CheckNumber(const vmg_float& number)
     82  template <class T>
     83  inline bool CheckNumber(const T& number)
    8384  {
    8485    bool valid = true;
    8586
    86     if (std::numeric_limits<vmg_float>::has_quiet_NaN) {
    87       valid &= number != std::numeric_limits<vmg_float>::quiet_NaN();
    88       assert(number != std::numeric_limits<vmg_float>::quiet_NaN());
    89     }
     87    // Check for nan
     88    valid &= number == number;
     89    assert(number == number);
    9090
    91     if (std::numeric_limits<vmg_float>::has_signaling_NaN) {
    92       valid &= number != std::numeric_limits<vmg_float>::signaling_NaN();
    93       assert(number != std::numeric_limits<vmg_float>::signaling_NaN());
    94     }
    95 
    96     if (std::numeric_limits<vmg_float>::has_infinity) {
    97       valid &= number != std::numeric_limits<vmg_float>::infinity();
    98       valid &= number != -1 * std::numeric_limits<vmg_float>::infinity();
    99       assert(number != std::numeric_limits<vmg_float>::infinity());
    100       assert(number != -1 * std::numeric_limits<vmg_float>::infinity());
     91    // Check for infinity
     92    if (!std::numeric_limits<T>::is_integer && std::numeric_limits<T>::has_denorm == std::denorm_present) {
     93      valid &= number >= -1 * std::numeric_limits<T>::max();
     94      valid &= number <= std::numeric_limits<T>::max();
     95      assert(number >= -1 * std::numeric_limits<T>::max());
     96      assert(number <= std::numeric_limits<T>::max());
     97    }else {
     98      valid &= number >= std::numeric_limits<T>::min();
     99      valid &= number <= std::numeric_limits<T>::max();
     100      assert(number >= std::numeric_limits<T>::min());
     101      assert(number <= std::numeric_limits<T>::max());
    101102    }
    102103
     
    179180  }
    180181
     182  bool AssertVectorsEqual(const Vector& pos_1, const Vector& pos_2);
     183
    181184  vmg_float InterpolateTrilinear(const Vector& point, const Grid& grid);
    182185
Note: See TracChangeset for help on using the changeset viewer.