pterasoftware.movements.aeroelastic_movement

Contains the AeroelasticMovement class.

Classes

AeroelasticMovement

A class used to contain an AeroelasticUnsteadyProblem’s movement.

Module Contents

class pterasoftware.movements.aeroelastic_movement.AeroelasticMovement(airplane_movements: list[pterasoftware.movements.aeroelastic_airplane_movement.AeroelasticAirplaneMovement], operating_point_movement: pterasoftware.movements.aeroelastic_operating_point_movement.AeroelasticOperatingPointMovement, delta_time: float | int, num_steps: int, max_wake_rows: int | None = None)[source]

A class used to contain an AeroelasticUnsteadyProblem’s movement.

In aeroelastic simulations, wing geometry is prescribed via oscillation parameters (flapping, CG oscillation, etc.) but the solver adds structural deformation at each time step based on aerodynamic loads. OperatingPoints are prescribed via the same oscillation parameters as OperatingPointMovement.

AeroelasticMovement pre generates all OperatingPoints upfront (since they are prescribed) but does not pre generate Airplanes, because the deformed wing geometry at each time step depends on the solver’s structural response calculation.

Contains the following methods:

lcm_period: The least common multiple of all motion periods, ensuring all motions complete an integer number of cycles when cycle averaging forces and moments.

max_period: The longest period of motion of AeroelasticMovement’s sub movement objects, the motion(s) of its sub sub movement object(s), and the motions of its sub sub sub movement objects.

min_period: The shortest non zero period of motion of AeroelasticMovement’s sub movement objects, the motion(s) of its sub sub movement object(s), and the motions of its sub sub sub movement objects.

static: Flags if AeroelasticMovement’s sub movement objects, its sub sub movement object(s), and its sub sub sub movement objects all represent no motion.

generate_airplane_at_time_step: Creates the Airplane at a single time step, applying deformation from the solver’s structural response.

This method checks that all Wings maintain their symmetry type across all time steps (using the undeformed prescribed geometry). See the WingMovement class documentation for more details on this requirement. See the Wing class documentation for more information on symmetry types.

Parameters:
  • airplane_movements – A list of the AeroelasticAirplaneMovements associated with each of the AeroelasticUnsteadyProblem’s Airplanes.

  • operating_point_movement – An AeroelasticOperatingPointMovement holding the oscillation parameters for prescribing OperatingPoints at each time step.

  • delta_time – The time, in seconds, between each time step. It must be a positive number (int or float). It will be converted internally to a float.

  • num_steps – The number of time steps to simulate. It must be a positive int.

  • max_wake_rows – The maximum number of chordwise wake ring vortex rows per Wing. Must be a positive int if set. The default is None (no truncation).

Returns:

None

generate_airplane_at_time_step(airplane_movement_index: int, step: int, wing_deformation_angles_ixyz: list[numpy.ndarray | None] | None = None) pterasoftware.geometry.airplane.Airplane[source]

Creates the Airplane at a single time step for a given AeroelasticAirplaneMovement, applying deformation from the solver’s structural response.

This is the method the aeroelastic solver calls at each time step to get the deformed Airplane geometry.

Parameters:
  • airplane_movement_index – The index of the AeroelasticAirplaneMovement in this AeroelasticMovement’s airplane_movements tuple.

  • step – The time step index. Must be a non negative int.

  • wing_deformation_angles_ixyz – A list of (N_wcs, 3) ndarrays of floats, one per Wing, where N_wcs is the number of WingCrossSections in that Wing. Each row is a (3,) deformation angle vector using an intrinsic xy’z” sequence. The units are in degrees. When None, no deformation is applied. The default is None.

Returns:

The Airplane at this time step, with structural deformation applied if provided.

property lcm_period: float

The least common multiple of all motion periods, ensuring all motions complete an integer number of cycles when cycle averaging forces and moments.

Using the LCM ensures that when cycle averaging forces and moments, we capture a complete cycle of all motions, not just the longest one. For example, if one motion has a period of 2.0 s and another has a period of 3.0 s, the LCM is 6.0, which contains exactly 3 cycles of the first motion and 2 cycles of the second.

Returns:

The LCM period in seconds. If all the motion is static, this will be 0.0.

property max_period: float

The longest period of motion across each Airplane’s movement class, each Wing’s movement class, each WingCrossSection’s movement class, and the OperatingPoint’s movement class.

For cycle averaging calculations, lcm_period should be used instead of max_period to ensure all motions complete an integer number of cycles.

Returns:

The longest period in seconds. If all the motion is static, this will be 0.0.

property min_period: float

The shortest non zero period of motion across each Airplane’s movement class, each Wing’s movement class, each WingCrossSection’s movement class, and the OperatingPoint’s movement class.

Returns:

The shortest non zero period in seconds. If all the motion is static, this will be 0.0.

property static: bool

Flags if all motion across each Airplane’s movement class, each Wing’s movement class, each WingCrossSection’s movement class, and the OperatingPoint’s movement class is static.

Returns:

True if all motion is static. False otherwise.