Ignore:
Timestamp:
Jun 8, 2016, 10:45:27 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Children:
6369bc
Parents:
e34888
git-author:
Frederik Heber <heber@…> (06/06/16 14:28:05)
git-committer:
Frederik Heber <heber@…> (06/08/16 22:45:27)
Message:

Extended SamplingGridProperties::isCompatible() to allow more finely resolved grids, added ::isEquivalent().

  • isEquivalent contains the old check and we replaced isCompatible() by it.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/SetValues/SamplingGridProperties.cpp

    re34888 rc739b3  
    141141}
    142142
    143 int SamplingGridProperties::getSurplusLevel(const SamplingGridProperties &_props) const
     143double SamplingGridProperties::getSurplusLevel(const SamplingGridProperties &_props) const
    144144{
    145145  static const double log_two = log(2.);
     
    154154  //!> states how many more levels we have because of smaller grid (assuming equal levels)
    155155  const double surplus_level = log(domain_extent/props_extent)/log_two;
    156   ASSERT( fabs(surplus_level - round(surplus_level)) < std::numeric_limits<double>::epsilon()*1e4,
    157       "SamplingGridProperties::getSurplusLevel() - surplus level is not integer: "
    158       +toString(surplus_level));
    159   return round(surplus_level);
     156  return surplus_level;
     157}
     158
     159bool SamplingGridProperties::isCompatible(const SamplingGridProperties &_props) const
     160{
     161  // only equally sized or finer grids are compatible: we only downsample
     162  const double surplus_level = getSurplusLevel(_props);
     163  if (fabs(surplus_level - round(surplus_level)) > std::numeric_limits<double>::epsilon()*1e4)
     164    return false;
     165  if (level > (_props.level+surplus_level))
     166    return false;
     167  // check whether grid point corners coincide
     168  for (size_t i=0;i<NDIM;++i) {
     169    const double lowercorner = getNearestLowerGridPoint(_props.begin[i], i);
     170    if (fabs(lowercorner - _props.begin[i]) > std::numeric_limits<double>::epsilon()*1e4)
     171      return false;
     172    const double uppercorner = getNearestHigherGridPoint(_props.end[i], i);
     173    if (fabs(uppercorner - _props.end[i]) > std::numeric_limits<double>::epsilon()*1e4)
     174      return false;
     175  }
     176  return true;
    160177}
    161178
Note: See TracChangeset for help on using the changeset viewer.