def test_filter_lines(self): file = open(join(runs_dir, self.test_avl_case+'.avl')) lines = filter_lines(file.readlines()) f2 = open('filter_lines.avl', 'w') f2.write('\n'.join(lines)) f2.close() file.close() file = open('filter_test.avl','w') file.write('\n'.join(lines)) file.close()
def test_filter_lines(self): file = open(join(runs_dir, self.test_avl_case + '.avl')) lines = filter_lines(file.readlines()) f2 = open('filter_lines.avl', 'w') f2.write('\n'.join(lines)) f2.close() file.close() file = open('filter_test.avl', 'w') file.write('\n'.join(lines)) file.close()
def mass_from_file(cls, filename): file = open(filename) lines = file.readlines() file.close() lines = filter_lines(lines) traits = {} for i,line in enumerate(lines): match = re.match(r'(?P<name>\S+?)\s*?=\s*?(?P<value>[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)\s*?(?P<unit>\S+)?$', line) if match is not None: name = match.group('name').lower() if name[1:] == 'unit': unit = match.group('unit') unit = unit if unit is not None else '' value = float(match.group('value')) traits[name] = value, unit else: value = float(match.group('value')) traits[name] = value else: break multiplier = MassObject(mass=1.0, cg=numpy.ones(3), inertia_moment=numpy.ones(3), cross_inertia=numpy.ones(3)) adder = MassObject(mass=0.0, cg=numpy.zeros(3), inertia_moment=numpy.zeros(3), cross_inertia=numpy.zeros(3)) traits['objects'] = [] for line in lines[i:]: vals = [float(num) for num in line.split()] cross_inertia = numpy.zeros(3) if len(vals) > 7: cross_inertia[:] = vals[7:] mass=vals[0] cg=vals[1:4] inertia_moment=vals[4:7] massobj = MassObject(mass=multiplier.mass*mass+adder.mass, cg=multiplier.cg * cg + adder.cg, inertia_moment=multiplier.inertia_moment * inertia_moment + adder.inertia_moment, cross_inertia=multiplier.cross_inertia * cross_inertia + adder.cross_inertia, ) traits['objects'].append(massobj) return Mass(**traits)