Changeset 4087cb


Ignore:
Timestamp:
Oct 15, 2013, 2:55:12 PM (12 years ago)
Author:
Frederik Heber <heber@…>
Children:
fb3b4c
Parents:
b4ac80
git-author:
Frederik Heber <heber@…> (08/30/13 20:45:35)
git-committer:
Frederik Heber <heber@…> (10/15/13 14:55:12)
Message:

Increased numerical tolerance of assert in LevelOperatorFAS::Restrict().

  • modified VMG::Vector::IsComponentWise..(), e.g. ..LessOr..() to accept equality within interval of width tol.
Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/base/helper.cpp

    rb4ac80 r4087cb  
    9393bool Helper::AssertVectorsEqual(const Vector& pos_1, const Vector& pos_2, const vmg_float& tol)
    9494{
    95   bool equal = (pos_1 - pos_2).Abs().IsComponentwiseLessOrEqual(tol);
     95  // create factor with similar magnitude as pos1 but always greater equal 1
     96  const VMG::Vector factor( abs(pos_1.X())+1, abs(pos_1.Y())+1, abs(pos_1.Z())+1);
     97  const VMG::Vector temp = (pos_1 - pos_2).Abs() / factor;
     98  bool equal = temp.IsComponentwiseLessOrEqual(tol);
    9699  assert(equal);
    97100  return equal;
  • src/level/level_operator_fas.cpp

    rb4ac80 r4087cb  
    8181
    8282  for (iter_f=bounds_f.Begin(), iter_c=bounds_c.Begin(); iter_c!=bounds_c.End(); iter_f+=2, ++iter_c) {
    83     Helper::AssertVectorsEqual(sol_c_undist.GetSpatialPos(*iter_c), sol_f.GetSpatialPos(*iter_f), 4.0 * std::numeric_limits<vmg_float>::epsilon());
     83    Helper::AssertVectorsEqual(sol_c_undist.GetSpatialPos(*iter_c), sol_f.GetSpatialPos(*iter_f), 1e6 * std::numeric_limits<vmg_float>::epsilon());
    8484    sol_c_undist(*iter_c) = op_sol.Apply(sol_f, *iter_f);
    8585  }
     
    8888
    8989  for (iter_f=bounds_f.Begin(), iter_c=bounds_c.Begin(); iter_c!=bounds_c.End(); iter_f+=2, ++iter_c) {
    90     Helper::AssertVectorsEqual(rhs_c_undist.GetSpatialPos(*iter_c), (*res_grid).GetSpatialPos(*iter_f), 4.0 * std::numeric_limits<vmg_float>::epsilon());
     90    Helper::AssertVectorsEqual(rhs_c_undist.GetSpatialPos(*iter_c), (*res_grid).GetSpatialPos(*iter_f), 1e6 * std::numeric_limits<vmg_float>::epsilon());
    9191    rhs_c_undist(*iter_c) = op_res.Apply(*res_grid, *iter_f) + prefactor * op_pde.Apply(sol_c_undist, *iter_c);
    9292  }
     
    134134
    135135  for (iter_f=bounds_f.Begin(), iter_c=bounds_c.Begin(); iter_c!=bounds_c.End(); iter_f+=2, ++iter_c) {
    136     Helper::AssertVectorsEqual(sol_c.GetSpatialPos(*iter_c), sol_f_undist.GetSpatialPos(*iter_f), 4.0 * std::numeric_limits<vmg_float>::epsilon());
     136    Helper::AssertVectorsEqual(sol_c.GetSpatialPos(*iter_c), sol_f_undist.GetSpatialPos(*iter_f), 1e6 * std::numeric_limits<vmg_float>::epsilon());
    137137    val = sol_c.GetVal(*iter_c) - sol_old->GetVal(*iter_c);
    138138    sol_f_undist(*iter_f) += op.GetDiag() * val;
Note: See TracChangeset for help on using the changeset viewer.