示例#1
0
 def create_potential_table(self):
     if not self.paraBEM:
         self.QWarning = QtGui.QLabel("no panel_method installed")
         self.layout.addWidget(self.QWarning)
     else:
         self._vertices, self._panels, self._trailing_edges = paraBEM_Panels(
             self.ParametricGlider.get_glider_3d(),
             midribs=0,
             profile_numpoints=50,
             num_average=4,
             distribution=Distribution.from_nose_cos_distribution(0.2),
             symmetric=True
             )
         case = self.pan3d.DirichletDoublet0Source0Case3(self._panels, self._trailing_edges)
         case.A_ref = self.ParametricGlider.shape.area
         case.mom_ref_point = self.paraBEM.Vector3(1.25, 0, -6)
         case.v_inf = self.paraBEM.Vector(self.ParametricGlider.v_inf)
         case.drag_calc = "trefftz"
         case.farfield = 5
         case.create_wake(10000000, 20)
         pols = case.polars(self.paraBEM_utils.v_inf_deg_range3(case.v_inf, 2, 15, 20))
         self.cL = []
         self.cDi = []
         self.cPi = []
         self.alpha = []
         for i in pols.values:
             self.alpha.append(i.alpha)
             self.cL.append(i.cL)
             self.cDi.append(i.cD)
             self.cPi.append(i.cP)
         self.alpha = np.array(self.alpha)
         self.cL = np.array(self.cL)
         self.cDi = np.array(self.cDi)
         self.cPi = np.array(self.cPi)
示例#2
0
def min_func(x):
    global count
    count += 1
    print("\niteration: " + str(count))
    _glider2d = deepcopy(glider2d)
    glider_set_controlpoint(_glider2d, x)
    glider3d = _glider2d.get_glider_3d()
    panels = paraBEM_Panels(
        glider3d,
        midribs=0,
        profile_numpoints=40,
        symmetric=True,
        distribution=Distribution.from_nose_cos_distribution(40, 0.2),
        num_average=0)
    case = Case(panels[1], panels[2])
    case.farfield = 5
    case.drag_calc = "trefftz"
    case.A_ref = 23

    case.create_wake(length=10000, count=5)
    case.v_inf = paraBEM.Vector3(8, 0, 1)
    case.trefftz_cut_pos = case.v_inf * 50
    alpha = v_inf_deg_range3(case.v_inf, 5, 9, 20)
    polars = case.polars(alpha)
    vtk_writer = CaseToVTK(case, "results/vtk_opt", suffix=str(count))
    vtk_writer.write_panels(data_type="point")
    cL = []
    cD = []
    for i in polars.values:
        cL.append(i.cL)
        cD.append(i.cD)
    return np.interp(0.6, cL, cD)
示例#3
0
 def create_potential_table(self):
     if not self.paraBEM:
         self.QWarning = QtGui.QLabel('no panel_method installed')
         self.layout.addWidget(self.QWarning)
     else:
         self._vertices, self._panels, self._trailing_edges = paraBEM_Panels(
             self.parametric_glider.get_glider_3d(),
             midribs=0,
             profile_numpoints=50,
             num_average=4,
             distribution=Distribution.from_nose_cos_distribution(0.2),
             symmetric=True)
         case = self.pan3d.DirichletDoublet0Source0Case3(
             self._panels, self._trailing_edges)
         case.A_ref = self.parametric_glider.shape.area
         case.mom_ref_point = self.paraBEM.Vector3(1.25, 0, -6)
         case.v_inf = self.paraBEM.Vector(self.parametric_glider.v_inf)
         case.drag_calc = 'trefftz'
         case.farfield = 5
         case.create_wake(10000000, 20)
         pols = case.polars(
             self.paraBEM_utils.v_inf_deg_range3(case.v_inf, 2, 15, 20))
         self.cL = []
         self.cDi = []
         self.cPi = []
         self.alpha = []
         for i in pols.values:
             self.alpha.append(i.alpha)
             self.cL.append(i.cL)
             self.cDi.append(i.cD)
             self.cPi.append(i.cP)
         self.alpha = np.array(self.alpha)
         self.cL = np.array(self.cL)
         self.cDi = np.array(self.cDi)
         self.cPi = np.array(self.cPi)
示例#4
0
def min_func(x):
    global count
    count += 1
    print("\niteration: " + str(count))
    _glider2d = deepcopy(glider2d)
    glider_set_controlpoint(_glider2d, x)
    glider3d = _glider2d.get_glider_3d()
    panels = paraBEM_Panels(glider3d,
                        midribs=0,
                        profile_numpoints=40,
                        symmetric=True,
                        distribution=Distribution.from_nose_cos_distribution(40, 0.2),
                        num_average=0)
    case = Case(panels[1], panels[2])
    case.farfield = 5
    case.drag_calc = "trefftz"
    case.A_ref = 23

    case.create_wake(length=10000, count=5)
    case.v_inf = paraBEM.Vector3(8, 0, 1)
    case.trefftz_cut_pos = case.v_inf * 50
    alpha = v_inf_deg_range3(case.v_inf, 5, 9, 20)
    polars = case.polars(alpha)
    vtk_writer = CaseToVTK(case, "results/vtk_opt", suffix=str(count))
    vtk_writer.write_panels(data_type="point")
    cL = []
    cD = []
    for i in polars.values:
        cL.append(i.cL)
        cD.append(i.cD)
    return np.interp(0.6, cL, cD)
示例#5
0
 def create_panels(self, midribs=0, profile_numpoints=10, mean=False, symmetric=True):
     self._vertices, self._panels, self._trailing_edges = paraBEM_Panels(
         self.ParametricGlider.get_glider_3d(),
         midribs=midribs,
         profile_numpoints=profile_numpoints,
         num_average=mean*5,
         distribution=Distribution.from_nose_cos_distribution(0.2),
         symmetric=symmetric)
示例#6
0
 def create_panels(self,
                   midribs=0,
                   profile_numpoints=10,
                   mean=False,
                   symmetric=True):
     self._vertices, self._panels, self._trailing_edges = paraBEM_Panels(
         self.parametric_glider.get_glider_3d(),
         midribs=midribs,
         profile_numpoints=profile_numpoints,
         num_average=mean * 5,
         distribution=Distribution.from_nose_cos_distribution(0.2),
         symmetric=symmetric)
示例#7
0
def create_fem_dict(par_glider):
    # not yet working

    # create a paraBEM object and compute the pressure

    # create a dict with:
    #   nodes, elements, forces, bc, joints
    vertices, panels, trailing_edges = paraBEM_Panels(
        par_glider.get_glider_3d(),
        midribs=0,
        profile_numpoints=50,
        num_average=4,
        distribution=Distribution.from_nose_cos_distribution(0.2),
        symmetric=True)
示例#8
0
def create_fem_dict(par_glider):
    # create a paraBEM object and compute the pressure

    # create a dict with:
    #   nodes, elements, forces, bc, joints
    vertices, panels, trailing_edges = paraBEM_Panels(
        par_glider.get_glider_3d(),
        midribs=0,
        profile_numpoints=50,
        num_average=4,
        distribution=Distribution.from_nose_cos_distribution(0.2),
        symmetric=True)
    case.A_ref = par_glider.flat_area
    case.v_inf = paraBEM.Vector(glider.v_inf)
    self.case.farfield = 5
    self.case.create_wake(9999, 10)
    self.case.run()
示例#9
0
def create_fem_dict(par_glider):
    # create a paraBEM object and compute the pressure

    # create a dict with:
    #   nodes, elements, forces, bc, joints
    vertices, panels, trailing_edges = paraBEM_Panels(
        par_glider.get_glider_3d(),
        midribs=0,
        profile_numpoints=50,
        num_average=4,
        distribution=Distribution.from_nose_cos_distribution(0.2),
        symmetric=True
        )
    case.A_ref = par_glider.flat_area
    case.v_inf = paraBEM.Vector(glider.v_inf)
    self.case.farfield = 5
    self.case.create_wake(9999, 10)
    self.case.run()
示例#10
0
import paraBEM
from paraBEM.pan3d import DirichletDoublet0Source0Case3 as Case
from paraBEM.vtk_export import CaseToVTK
from paraBEM.utils import v_inf_deg_range3

n_x = 30

with open("glider/referenz_schirm_berg.json") as _file:
    glider_2d = load(_file)["data"]
    glider_2d.shape.set_const_cell_dist()
    glider = glider_2d.get_glider_3d()

_, panels, trailing_edge = paraBEM_Panels(
    glider,
    midribs=3,
    profile_numpoints=n_x,
    distribution=Distribution.from_cos_2_distribution(n_x),
    num_average=0,
    symmetric=False)

v_inf = [8, 0, 1]

case = Case(panels, trailing_edge)
case.mom_ref_point = paraBEM.Vector3(1.25, 0, 0)
case.A_ref = glider_2d.shape.area
case.farfield = 5
case.drag_calc = "on_body"

case.v_inf = paraBEM.Vector3(v_inf)
case.create_wake(length=10000, count=4)  # length, count
polars = case.polars(v_inf_deg_range3(case.v_inf, -5, 15, 50))
示例#11
0
from paraBEM.pan3d import DirichletDoublet0Source0Case3
from paraBEM.utils import check_path


count = 0
#   load the glider
with open("results/glider/optimized.json") as _file:
    glider2d = load(_file)["data"]
    area = glider2d.shape.area
    aspect_ratio = glider2d.shape.aspect_ratio

glider3d = glider2d.get_glider_3d()
verts, panels, trailing_edge = paraBEM_Panels(
    glider3d,
    midribs=0,
    profile_numpoints=20,
    symmetric=False,
    distribution=Distribution.from_cos_2_distribution,
    num_average=0,
)

case = DirichletDoublet0Source0Case3(panels, trailing_edge)
case.v_inf = paraBEM.Vector3(*glider2d.v_inf)
case.create_wake(1000, 100)
case.trefftz_cut_pos = case.v_inf * 20
case.run()
gamma_pan = -np.array([edge.vorticity for edge in case.trailing_edge])


######################LiftingLine############################
te_line = [paraBEM.Vector3(0, i.y, i.z) for i in trailing_edge]
lifting_line = LiftingLine(te_line)
示例#12
0
from openglider.glider.in_out.export_3d import paraBEM_Panels
from openglider.jsonify import load
import paraBEM
from paraBEM.pan3d import DirichletDoublet0Source0Case3 as Case
from paraBEM.vtk_export import CaseToVTK

with open("../openglider/glider/referenz_schirm_berg.json") as _file:
    glider = load(_file)["data"]
    panels = paraBEM_Panels(glider.get_glider_3d() , 0, 30, 0, False)

case = Case(panels[1], panels[2])
case.v_inf = paraBEM.Vector(glider.v_inf)
case.drag_calc = "on_body"
case.A_ref = glider.shape.area

#wake parallel to the x axis
print("*    wake parallel to the x-axis")
case.create_wake(50, 100, paraBEM.Vector3(1., 0., 0.))
case.run()
writer = CaseToVTK(case, "results/wake/x-parallel")
writer.write_panels()
writer.write_wake_panels()
print("F_l = ", case.cL * case.A_ref * 1.2 * 11**2 / 2.,
      "F_w = ", case.cD * case.A_ref * 1.2 * 11**2 / 2.)


#wake parallel to v_inf
print("*    wake parallel to v_inf")
case.create_wake(50, 100, case.v_inf)
case.run()
writer = CaseToVTK(case, "results/wake/v_inf-parallel")
示例#13
0
from paraBEM.liftingline import LiftingLine
from paraBEM.pan3d import DirichletDoublet0Source0Case3
from paraBEM.utils import check_path

count = 0
#   load the glider
with open("results/glider/optimized.json") as _file:
    glider2d = load(_file)["data"]
    area = glider2d.shape.area
    aspect_ratio = glider2d.shape.aspect_ratio

glider3d = glider2d.get_glider_3d()
verts, panels, trailing_edge = paraBEM_Panels(
    glider3d,
    midribs=0,
    profile_numpoints=20,
    symmetric=False,
    distribution=Distribution.from_cos_2_distribution,
    num_average=0)

case = DirichletDoublet0Source0Case3(panels, trailing_edge)
case.v_inf = paraBEM.Vector3(*glider2d.v_inf)
case.create_wake(1000, 100)
case.trefftz_cut_pos = case.v_inf * 20
case.run()
gamma_pan = -np.array([edge.vorticity for edge in case.trailing_edge])

######################LiftingLine############################
te_line = [paraBEM.Vector3(0, i.y, i.z) for i in trailing_edge]
lifting_line = LiftingLine(te_line)
lifting_line.v_inf = case.v_inf
示例#14
0
import paraBEM
from paraBEM.pan3d import DirichletDoublet0Source0Case3 as Case
from paraBEM.vtk_export import CaseToVTK
from paraBEM.utils import v_inf_deg_range3

n_x = 30

with open("glider/referenz_schirm_berg.json") as _file:
    glider_2d = load(_file)["data"]
    glider_2d.shape.set_const_cell_dist()
    glider = glider_2d.get_glider_3d()

_, panels, trailing_edge = paraBEM_Panels(
    glider,
    midribs=3,
    profile_numpoints=n_x,
    distribution=Distribution.cos_2_distribution,
    num_average=0,
    symmetric=False)

v_inf = [8, 0, 1]

case = Case(panels, trailing_edge)
case.mom_ref_point = paraBEM.Vector3(1.25, 0, 0)
case.A_ref = glider_2d.shape.area
case.farfield = 5
case.drag_calc = "on_body"

case.v_inf = paraBEM.Vector3(v_inf)
case.create_wake(length=10000, count=4)    # length, count
polars = case.polars(v_inf_deg_range3(case.v_inf, -5, 15, 50))