Пример #1
0
 def is_aligned_with(self, mesh):
     min_size = min(mesh.num, self.num)
     min_step = min(mesh.phys_step, self.phys_step)
     max_step = max(mesh.phys_step, self.phys_step)
     step_ratio = max_step / min_step
     # print step_ratio, m.rnd(step_ratio), abs(m.floor(step_ratio) - step_ratio)
     # if abs(m.floor(step_ratio) - step_ratio) < 1e-6:#step_ratio.is_integer():
     if check_if_integer(step_ratio, 1e-8):
         shift = (mesh.to_phys(mesh.local_nodes)[:min_size] - self.to_phys(self.local_nodes)[:min_size]) / min_step
         if shift[0].is_integer() or abs(round(shift[0]) - shift[0]) < 1e-6:
             return True
         else:
             print 'SHIFT!!! %3.16f' % shift[0]
             return False
     else:
         print abs(m.floor(step_ratio) - step_ratio)
         return False
Пример #2
0
 def add_mesh(self, mesh):
     level = m.log(self.get_root_mesh().phys_step / mesh.phys_step, self.refinement_coefficient)
     # print level, np.floor(level), int(m.floor(level)), abs(m.floor(level) - level), level.is_integer()
     # if abs(m.floor(level) - level) > 1e-10:
     if not check_if_integer(level, 1e-10):
         raise Exception('all child meshes must have step multiple to the root mesh with refinement coefficient')
     if self.aligned and not self.get_root_mesh().is_aligned_with(mesh):
         raise Exception('all child meshes must be aligned with the root mesh')
     # level = int(m.floor(level))
     lower_estimation = m.floor(level)
     upper_estimation = m.ceil(level)
     if abs(lower_estimation - level) < abs(upper_estimation - level):
         level = int(lower_estimation)
     else:
         level = int(upper_estimation)
     try:
         self.Tree[level].append(mesh)
     except KeyError:
         self.Tree[level] = [mesh]
     self.cleanup()