pfh.glidersim.paraglider_wing#
Models of paraglider wings.
FIXME: explain “wing = canopy + suspension lines”
Classes
|
Interface for classes that define a LineGeometry model. |
|
FIXME: add class docstring. |
|
FIXME: add docstring. |
- class pfh.glidersim.paraglider_wing.LineGeometry(*args, **kwargs)#
Bases:
Protocol
Interface for classes that define a LineGeometry model.
Methods
aerodynamics
(v_W2b, rho_air)Calculate the aerodynamic forces and moments at each control point.
delta_d
(s, delta_bl, delta_br)Compute the trailing edge deflection distance due to brake inputs.
r_CP2LE
()Compute the control points for the line geometry dynamics.
r_RM2LE
([delta_a])Compute the position of the riser midpoint RM in body frd.
- abstract r_RM2LE(delta_a=0)#
Compute the position of the riser midpoint RM in body frd.
- Parameters
- delta_aarray_like of float, shape (N,) [percentage] (optional)
Fraction of maximum accelerator application. Default: 0
- Returns
- r_RM2LEarray of float, shape (N,3) [unitless]
The riser midpoint RM with respect to the canopy origin.
- abstract r_CP2LE()#
Compute the control points for the line geometry dynamics.
- Returns
- ndarray of float, shape (K,3) [m]
Control points relative to the central leading edge LE. Coordinates are in canopy frd, and K is the number of points being used to distribute the surface area of the lines.
- abstract delta_d(s, delta_bl, delta_br)#
Compute the trailing edge deflection distance due to brake inputs.
- Parameters
- sarray_like of float
Section index, where -1 <= s <= 1
- delta_blarray_like of float [percentage]
Left brake application as a fraction of maximum braking
- delta_brarray_like of float [percentage]
Right brake application as a fraction of maximum braking
- Returns
- delta_dfloat [m]
The deflection distance of the trailing edge.
- abstract aerodynamics(v_W2b, rho_air: float)#
Calculate the aerodynamic forces and moments at each control point.
- Parameters
- v_W2barray of float, shape (K,3) [m/s]
The wind velocity at each of the K control points.
- rho_airfloat [kg/m^3]
Air density
- Returns
- dF, dMarray of float, shape (K,3) [N, N m]
Aerodynamic forces and moments for each control point.
- __init__(*args, **kwargs)#
- class pfh.glidersim.paraglider_wing.SimpleLineGeometry(kappa_x: float, kappa_z: float, kappa_A: float, kappa_C: float, kappa_a: float, kappa_b: float, total_line_length: float, average_line_diameter: float, r_L2LE, Cd_lines: float, s_delta_start0: float, s_delta_start1: float, s_delta_stop0: float, s_delta_stop1: float)#
Bases:
pfh.glidersim.paraglider_wing.LineGeometry
FIXME: add docstring.
- Parameters
- kappa_xfloat [m]
x-coordinate distance from RM to the canopy origin.
- kappa_zfloat [m]
z-coordinate distance from RM to the canopy origin.
- kappa_A, kappa_Cfloat [m]
Distance of the A and C canopy connection points along the central chord. The accelerator adjusts the length of the A lines, while the C lines remain fixed length, effectively causing a rotation of the canopy about the point kappa_C.
- kappa_afloat [m]
Accelerator line length. This is the maximum change in the length of the A lines.
- kappa_bfloat [m]
Brake line length. Equal to the maximum vertical deflection of the trailing edge, which occurs at (s_delta_start + s_delta_stop) / 2. This is the deflection distance supported by the model, not the true physical length of the line. The aerodynamics model can only support a limited range of edge deflection, and this value is the deflection associated with “100% brake input”.
- s_delta_start0, s_delta_start1float
Section indices where brake deflections begin, transitioning from start0 when delta_b = 0 to start1 when delta_b = 1. FIXME: needs a proper docstring. For example, these are for the right brake, but the left is symmetric.
- s_delta_stop0, s_delta_stop1float
Section indices where brake deflections end, transitioning from stop0 when delta_b = 0 to stop1 when delta_b = 1. FIXME: needs a proper docstring. For example, these are for the right brake, but the left is symmetric.
- total_line_lengthfloat [m]
Total length of the lines from the risers to the canopy.
- average_line_diameterfloat [m]
Average diameter of the connecting lines.
- r_L2LEarray of float, shape (K,3) [m]
Averaged location(s) of the connecting line surface area(s). If multiple positions are given, the total line length will be divided between them evenly.
- Cd_linesfloat
Drag coefficient of the lines.
Notes
FIXME: describe the design, and reference the sections in my thesis.
Accelerator
FIXME: describe
Brakes
The wing root typically experiences very little (if any) brake deflection, so this model allows for zero deflection until some section s_delta_start from the wing root. Similarly, brake deflections typically stop a little before reaching the wing tip.
This models the deflection distribution with a quartic function. It assumes the deflection distance is symmetric about some peak at the middle of s_delta_start and s_delta_stop.
Regarding the the derivation: a normal quartic goes like \(Ap^4 + Bp^3 + Cp^2 + Dp + E = 0\). Assuming symmetry about p = 0.5, the six terms can be solved using:
delta_d(0) = 0 d(delta_d)/dp | s_0 = 0 delta_d(1) = 0 d(delta_d)/dp | s_1 = 0 delta_d(0.5) = delta_d_peak
I don’t love this design, but I was hoping to find time to prototype a proper line geometry that computes the true angles throughout the bridle, and having the LineGeometry compute distances instead of angles would make that easier.
Methods
aerodynamics
(v_W2b, rho_air)Calculate the aerodynamic forces and moments at each control point.
delta_d
(s, delta_bl, delta_br)Compute the trailing edge deflection distance due to brake inputs.
maximize_kappa_b
(delta_d_max, chord_length)Maximze kappa_b such that delta_d never exceeds delta_d_max.
r_CP2LE
()Compute the control points for the line geometry dynamics.
r_RM2LE
([delta_a])Compute the position of the riser midpoint RM in body frd.
- __init__(kappa_x: float, kappa_z: float, kappa_A: float, kappa_C: float, kappa_a: float, kappa_b: float, total_line_length: float, average_line_diameter: float, r_L2LE, Cd_lines: float, s_delta_start0: float, s_delta_start1: float, s_delta_stop0: float, s_delta_stop1: float)#
- r_RM2LE(delta_a=0)#
Compute the position of the riser midpoint RM in body frd.
- Parameters
- delta_aarray_like of float, shape (N,) [percentage] (optional)
Fraction of maximum accelerator application. Default: 0
- Returns
- r_RM2LEarray of float, shape (N,3) [unitless]
The riser midpoint RM with respect to the canopy origin.
- r_CP2LE()#
Compute the control points for the line geometry dynamics.
- Returns
- ndarray of float, shape (K,3) [m]
Control points relative to the central leading edge LE. Coordinates are in canopy frd, and K is the number of points being used to distribute the surface area of the lines.
- delta_d(s, delta_bl, delta_br)#
Compute the trailing edge deflection distance due to brake inputs.
- Parameters
- sarray_like of float
Section index, where -1 <= s <= 1
- delta_blarray_like of float [percentage]
Left brake application as a fraction of maximum braking
- delta_brarray_like of float [percentage]
Right brake application as a fraction of maximum braking
- Returns
- delta_dfloat [m]
The deflection distance of the trailing edge.
- aerodynamics(v_W2b, rho_air: float)#
Calculate the aerodynamic forces and moments at each control point.
- Parameters
- v_W2barray of float, shape (K,3) [m/s]
The wind velocity at each of the K control points.
- rho_airfloat [kg/m^3]
Air density
- Returns
- dF, dMarray of float, shape (K,3) [N, N m]
Aerodynamic forces and moments for each control point.
- maximize_kappa_b(delta_d_max: float, chord_length: Callable, margin: float = 1e-06) None #
Maximze kappa_b such that delta_d never exceeds delta_d_max.
Useful to ensure the deflections don’t exceed the maximum delta_d supported by the airfoil coefficients.
- Parameters
- delta_d_maxfloat
Maximum deflection distance the brakes should produce at any section, normalized to unit chord length.
- chord_lengthfunction
Canopy chord length as a function of section index -1 <= s <= 1.
- class pfh.glidersim.paraglider_wing.ParagliderWing(lines: LineGeometry, canopy: SimpleFoil, rho_upper: float = 0, rho_lower: float = 0, rho_ribs: float = 0, N_cells: int = 1)#
Bases:
object
FIXME: add class docstring.
The system is referred to as the “body” since that is conventional in aeronautics literature. Vectors are in “body frd”, a coordinate system inherited from the canopy: the xyz axes are oriented front-right-down with the origin at the central leading edge LE.
- Parameters
- linesLineGeometry
Lines that position the riser and produce trailing edge deflections.
- canopySimpleFoil
The geometric shape of the lifting surface.
- rho_upper, rho_lowerfloat [kg/m^2]
Surface area densities of the upper and lower canopy surfaces.
- rho_ribsfloat [kg/m^2]
Surface area density of the internal vertical ribs.
- N_cellsinteger, optional
The number of canopy cells. This is only used for estimating the mass of the internal ribs. Proper support for ribs would require a new foil geometry with native support for cells, ribs, profile distortions, etc.
Methods
aerodynamics
(delta_a, delta_bl, delta_br, ...)FIXME: add docstring.
apparent_mass_properties
(rho_air, r_R2LE, ...)Compute the apparent mass matrix and momentum of the canopy.
equilibrium_alpha
(delta_a, delta_b, v_mag[, ...])Compute the angle of attack with zero aerodynamic pitching moment.
mass_properties
(rho_air, r_R2LE)Compute the mass properties of the materials and enclosed volume of air.
r_CP2LE
([delta_a])Compute the FoilGeometry control points in frd.
r_RM2LE
([delta_a])Compute the position of the riser midpoint RM in frd coordinates.
resultant_force
(delta_a, delta_bl, delta_br, ...)Calculate the net force and moment due to wind and gravity.
- __init__(lines: LineGeometry, canopy: SimpleFoil, rho_upper: float = 0, rho_lower: float = 0, rho_ribs: float = 0, N_cells: int = 1)#
- aerodynamics(delta_a: float, delta_bl: float, delta_br: float, v_W2b, rho_air: float, reference_solution: Optional[dict] = None)#
FIXME: add docstring.
- Parameters
- delta_afloat [percentage]
Fraction of accelerator, from 0 to 1
- delta_blfloat [percentage]
Fraction of left brake, from 0 to 1
- delta_brfloat [percentage]
Fraction of right brake, from 0 to 1
- v_W2barray of float, shape (K,3) [m/s]
The wind vector at each control point in body frd
- rho_airfloat [kg/m^3]
The ambient air density
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- dF, dMarray of float, shape (K,3) [N, N m]
Aerodynamic forces and moments for each control point.
- solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- equilibrium_alpha(delta_a: float, delta_b: float, v_mag: float, rho_air: float = 1.225, alpha_0: float = 9, alpha_1: float = 6, reference_solution: Optional[dict] = None)#
Compute the angle of attack with zero aerodynamic pitching moment.
The final wing will have extra moments from the harness and weight of the wing, but this value is often a good estimate.
- Parameters
- delta_afloat [percentage], optional
Fraction of accelerator, from 0 to 1
- delta_bfloat [percentage]
Fraction of symmetric brake, from 0 to 1
- v_magfloat [m/s]
Airspeed
- rho_airfloat [kg/m^3], optional
Air density
- alpha_0float [deg], optional
First guess for the equilibrium alpha search.
- alpha_1float [deg], optional
Second guess for the equilibrium alpha search.
- solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- float [rad]
The angle of attack where the section pitching moments sum to zero.
- r_CP2LE(delta_a=0)#
Compute the FoilGeometry control points in frd.
FIXME: descibe/define “control points”
- Parameters
- delta_aarray_like of float, shape (K,) [percentage] (optional)
Fraction of maximum accelerator application
- Returns
- ndarray of floats, shape (K,3) [m]
The control points in frd coordinates
- r_RM2LE(delta_a=0)#
Compute the position of the riser midpoint RM in frd coordinates.
- Parameters
- delta_aarray_like of float, shape (K,) [percentage] (optional)
Fraction of maximum accelerator application. Default: 0
- Returns
- r_RM2LEarray of float, shape (K,3) [m]
The riser midpoint RM with respect to the canopy origin.
- mass_properties(rho_air: float, r_R2LE)#
Compute the mass properties of the materials and enclosed volume of air.
- Parameters
- rho_airfloat [kg/m^3]
Air density
- r_R2LEarray of float, shape (3,) [m]
Reference point R with respect to the canopy origin in body frd.
- Returns
- dictionary
- m_sfloat [kg]
The solid mass of the wing
- r_S2LEarray of float, shape (3,) [m]
Vector from the canopy origin to the solid mass centroid
- r_S2Rarray of float, shape (3,) [m]
Vector from the reference point to the solid mass centroid
- J_s2Sarray of float, shape (3,3) [kg m^2]
The moment of inertia matrix of the solid mass about its cm
- vfloat [m^3]
The enclosed volume
- r_V2Rarray of float, shape (3,) [m]
Vector from the reference point to the volume centroid V
- J_v2Varray of float, shape (3,3) [m^2]
The moment of inertia matrix of the volume about its centroid
- m_airfloat [kg m^3]
The enclosed air mass.
- apparent_mass_properties(rho_air: float, r_R2LE, v_R2e, omega_b2e)#
Compute the apparent mass matrix and momentum of the canopy.
- Parameters
- rho_airfloat [kg/m^3]
Air density
- r_R2LEarray of float, shape (3,) [m]
Reference point R with respect to the canopy origin in body frd.
- v_R2earray of float, shape (3,) [m/s]
The velocity of the R with respect to the inertial frame.
- omega_b2earray of float, shape (3,) [rad/s]
Angular velocity of the body, in body frd coordinates.
- Returns
- dictionary
- r_PC2RCarray of float, shape (3,) [m]
Vector to the pitch center from the roll center
- r_RC2Rarray of float, shape (3,) [m]
Vector to the roll center from the riser connection point
- M_aarray of float, shape (3,3)
The apparent mass matrix
- A_a2Rarray of float, shape (6,6)
The apparent inertia matrix of the volume with respect to R
- p_a2earray of float, shape (3,)
The apparent linear momentum with respect to the inertial frame
- h_a2Rarray of float, shape (3,3)
The angular momentum of the apparent mass with respect to R
- resultant_force(delta_a, delta_bl, delta_br, v_W2b, rho_air, g, r_R2LE, mp=None, reference_solution=None)#
Calculate the net force and moment due to wind and gravity.
- Parameters
- delta_afloat [percentage]
Fraction of accelerator, from 0 to 1
- delta_blfloat [percentage]
Fraction of left brake, from 0 to 1
- delta_brfloat [percentage]
Fraction of right brake, from 0 to 1
- v_W2barray of float, shape (K,3) [m/s]
The wind vector at each control point in body frd
- rho_airfloat [kg/m^3]
The ambient air density
- garray of float, shape (3,) [m/s^s]
The gravity vector in body frd
- r_R2LEarray of float, shape (3,) [m]
Reference point R with respect to the canopy origin in body frd.
- mpdictionary, optional
The mass properties of the body associated with the given air density and reference point. Used to avoid recomputation.
- reference_solutiondictionary, optional
FIXME: docstring. See Phillips.__call__
- Returns
- f_b, g_B2Rarray of float, shape (3,) [N, N m]
The net force and moment on the body with respect to R.