def numpoints(self, numpoints): self.x_values = Distribution.from_cos_distribution(numpoints)
def get_glider_3d(self, glider=None, num=50, num_profile=None): """returns a new glider from parametric values""" glider = glider or Glider() ribs = [] self.rescale_curves() x_values = self.shape.rib_x_values shape_ribs = self.shape.ribs profile_merge_curve = self.profile_merge_curve.interpolation(num=num) ballooning_merge_curve = self.ballooning_merge_curve.interpolation( num=num) aoa_int = self.aoa.interpolation(num=num) zrot_int = self.zrot.interpolation(num=num) arc_pos = list(self.arc.get_arc_positions(x_values)) rib_angles = self.arc.get_rib_angles(x_values) if self.num_profile is not None: num_profile = self.num_profile if num_profile is not None: profile_x_values = Distribution.from_cos_distribution(num_profile) else: profile_x_values = self.profiles[0].x_values rib_holes = self.elements.get("holes", []) rigids = self.elements.get("rigidfoils", []) cell_centers = [(p1 + p2) / 2 for p1, p2 in zip(x_values[:-1], x_values[1:])] offset_x = shape_ribs[0][0][1] for rib_no, pos in enumerate(x_values): front, back = shape_ribs[rib_no] arc = arc_pos[rib_no] startpoint = np.array([-front[1] + offset_x, arc[0], arc[1]]) chord = abs(front[1] - back[1]) factor = profile_merge_curve(abs(pos)) profile = self.get_merge_profile(factor) profile.name = "Profile{}".format(rib_no) profile.x_values = profile_x_values this_rib_holes = [ RibHole(ribhole["pos"], ribhole["size"]) for ribhole in rib_holes if rib_no in ribhole["ribs"] ] this_rigid_foils = [ RigidFoil(rigid["start"], rigid["end"], rigid["distance"]) for rigid in rigids if rib_no in rigid["ribs"] ] ribs.append( Rib(profile_2d=profile, startpoint=startpoint, chord=chord, arcang=rib_angles[rib_no], glide=self.glide, aoa_absolute=aoa_int(pos), zrot=zrot_int(pos), holes=this_rib_holes, rigidfoils=this_rigid_foils, name="rib{}".format(rib_no))) ribs[-1].aoa_relative = aoa_int(pos) if self.shape.has_center_cell: new_rib = ribs[0].copy() new_rib.name = "rib0" new_rib.mirror() new_rib.mirrored_rib = ribs[0] ribs.insert(0, new_rib) cell_centers.insert(0, 0.) glider.cells = [] for cell_no, (rib1, rib2) in enumerate(zip(ribs[:-1], ribs[1:])): ballooning_factor = ballooning_merge_curve(cell_centers[cell_no]) ballooning = self.merge_ballooning(ballooning_factor) cell = Cell(rib1, rib2, ballooning, name="c{}".format(cell_no + 1)) glider.cells.append(cell) glider.close_rib() # CELL-ELEMENTS self.get_panels(glider) self.apply_diagonals(glider) for minirib in self.elements.get("miniribs", []): data = minirib.copy() cells = data.pop("cells") for cell_no in cells: glider.cells[cell_no].miniribs.append(MiniRib(**data)) # RIB-ELEMENTS #self.apply_holes(glider) glider.rename_parts() glider.lineset = self.lineset.return_lineset(glider, self.v_inf) glider.lineset.glider = glider glider.lineset.calculate_sag = False for _ in range(3): glider.lineset.recalc() glider.lineset.calculate_sag = True glider.lineset.recalc() return glider