partmor / ezaero

ezaero - Easy aerodynamics in Python :airplane:

Home Page:https://ezaero.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Implement general wing geometry

jorgepiloto opened this issue · comments

Let me propose an interesting upgrade: imagine we want to carry out a simulation on a general wing geometry like the one shown below:

At the moment, ezaero is able to properly mesh and solve for trapezoidal lifting surfaces. This new feature would require a software refactoring, but any geometry could be generated!

I propose the following steps to achieve this new feature:

  • Generate a vlm/lifting_surface.py module which holds the definition of a LiftingSurface class. This class holds all geometrical definitions for a small trapezoidal section. It contains a plot() method for showing the current geometry without having to run a simulation. Also, it includes a new r_offset when building the object, which is the position vector of the leading edge of the root. This will enable to move the part along the global model geometry.

newplot (14)

  • Instead of a single wing, a list of LiftingSurfaces modeling the global geometry is passed to the Simulation instance. Influence coefficient matrices are stacked and a global solution is finally achieved. Testing cases can be implemented from this online solver.

Let me now what you think about this new feature when possible, @partmor 👍

With previous presented approach, it is easy to model complex shapes:

wing_root = LiftingSurface(
    r_offset = np.array([0,0,0]),
    root_chord=1.5,
    tip_chord=0.5,
    planform_wingspan=4,
    sweep_angle=30 * np.pi / 180,
    dihedral_angle=15 * np.pi / 180,
)

wing_tip = LiftingSurface(
    r_offset = wing_root.LE_tip,
    root_chord=0.5,
    tip_chord=0.1,
    planform_wingspan=2,
    sweep_angle=75 * np.pi / 180,
    dihedral_angle=45 * np.pi / 180,
)

for part in [wing_root, wing_tip]:
    fig = part.plot(fig)

fig.show()

Which outputs the following:

newplot (15)

Hi @jorgepiloto!

I LOVE this proposal. You just aced one of the "that would be nice..." things I've had in my head for a while!

Please go ahead and open a PR whenever you like, and we can discuss together the needed refactors directly on the code ;)

Thank you again

This is looking good in my local machine. Still need to go through complete matrix solution but meshing and wake (which adapts to Uinf vector) are properly generated:

newplot (18)

In previous image, wake offset was reduced for a better visualization.

Great stuff!! Looking forward to seeing the final result! ^^

Hi @jorgepiloto just checking in; all good? if you need any help please reach out :)