Skip to content

Releases: mlau154/pymead

Release beta.12 of pymead v2.0.0

26 Nov 21:57
Compare
Choose a tag to compare
Pre-release

New features

  • New option in MPLOT interface to export MSES field data and airfoil geometry to either/both a Tecplot (.dat) file or Paraview XML (.vtp and .vts) ASCII files
  • Added the ability to modify only one side of a Bézier curve joint when applying a radius of curvature constraint. This is useful when one of the two curves must remain fixed. In this case, the default value used for the radius of curvature in the GUI when applying an ROCConstraint is simply the value of the radius of curvature at the endpoint of the curve being fixed rather than the average radius of curvature value at the endpoints of both curves. Instructions for how to apply the constraint this way appear in the status bar (lower left-hand part of the GUI)
  • Added normalization options to pymead.post.mses_field.generate_field_matplotlib
  • Added an experimental rational Bézier curve class to the API (see the pymead.core.rbezier module)
  • Added an experimental B-spline class to the API (see the pymead.core.bspline module)
  • Added a hodograph method to the Bézier class
  • Added an experimental NACA 4-series airfoil feature to the API (see the pymead.core.naca4 module)
  • Baseline and optimized airfoil system from each generation are now saved to .jmea files during optimization runs
  • Added an experimental Wagner function curve class to the API (see the pymead.core.wagner module)
  • Added option to skip geometric constraint evaluation on a Chromosome when post-processing an optimization
  • Added multipoint tag option for field/grid/grid statistics files
  • Added the keyword argument "direct_user_request" to Param.set_value that determines whether point parameter values should be set directly or if Point.request_move should be called instead
  • Added Ferguson's curves to both the API (see the pymead.core.ferguson module) and the GUI
  • Added "Verify Constraints" feature to the "Dev" toolbar item in the GUI. This allows users to ensure that their system of constraints is working properly. Especially useful for complex airfoil systems
  • Added several example airfoil systems to the GUI
  • Added a feature where fan pressure ratio can be used as a design variable in optimizations
  • Added a "File already exists. Overwrite?" dialog that executes during GUI.save_as_geo_col
  • Hovering is now ignored for all objects when a point is being dragged
  • Added a relative-airfoil point feature. This allows points to move with affine transformations (translation, rotation, etc.) of the airfoil. This option can be toggled from the parameter tree or the context menu of "Modify Geometry" in the airfoil canvas
  • Keyboard tracking is now set to false for spin boxes to prevent updates from happening until typing is finished
  • Added optimization geometric constraint visualization for maximum thickness, minimum radius, thickness distribution, internal geometry, and minimum area in the "Constraints" tab of the optimization setup dialog
  • Added a CPU/RAM usage visualization tab that automatically runs during optimization
  • Changed the default function tolerance for termination from 0.0025 (as suggested by pymoo for multi-point optimizations) to 1e-6 (as suggested by pymoo for single-point optimization). The best value to use depends on the objective function. For example, a smaller value should probably be used if drag coefficient is the objective function since $C_d$ usually takes on a value much less than 1.

Bug fixes

  • Fixed bug where deleting a point would not delete its associated x and y parameters
  • Fixed bug where a point could not be removed after creating x or y parameters/design variables
  • Fixed bug where deleting angle constraints in specific sequences would not properly set a new constraint cluster root and would not properly re-orient arrows
  • Fixed bug where ClusterAngle parameters would sometimes not get automatically removed when deleting some constraints in specific sequences
  • An error message now appears in the GUI when a user tries to promote a Point x or y parameter that has constraints and is not a root of a constraint cluster
  • An error message now appears in the GUI when a user tries to add a constraint across points that have promoted x or y-values
  • Fixed bug where progress bar would not reset after MPOLAR failure
  • An error message now appears in the GUI when MPOLAR fails to converge
  • Fixed broken URL path to pymead user guide location in help browser window
  • Fixed bug where ValueSpin could be negative even if value was non-negative
  • Fixed bug where bounds-normalized point values were treated as absolute
  • Fixed bug where loading in an optimized airfoil system and running the same MSES settings gave a different result than the optimum outcome
  • Added zero curvature handling for proper radius of curvature constraint verification
  • Fixed a bug where optimized airfoil design variable vectors were not properly decoded in the GUI
  • Fixed bug where symmetry constraints would not update properly from design variable change
  • Fixed bug where angle verification would fail incorrectly
  • Fixed objective and constraint bugs in optimization
  • Fixed bug in GeometryCollection.assign_design_variable_values
  • Created GUI error message instead of early terminating for plotting Mach contours, etc. with MSES analysis if MuPDF or ps2pdf were not found on the system path
  • A GUI error is now thrown if an airfoil being analyzed in XFOIL has more than 495 coordinates (a hard-coded limit in XFOIL)
  • Fixed no GUI error being thrown when trying to visualize downsampling on an empty/non-existent MEA
  • Fixed bug in internal geometry visualization
  • Fixed bug in Airfoil.contains_line_string
  • Added a GUI error message for when MPOLAR fails at first point
  • Fixed a bug in MPOLAR runs from the GUI
  • Fixed a bug in XFOIL multipoint optimization
  • Fixed a bug in airfoil statistics
  • Fixed bug where an optimization pool would not always properly terminate, especially with heavy CPU and/or RAM usage. See pymead.utils.pymead_mp.pool_terminate_multi_tiered
  • Fixed bug in Airfoil.check_contains_points
  • Fixed bug where n_eval could return None after an optimization

Aesthetics

  • Made sampling preview adhere to the global theme
  • Updated PymeadLabeledColorSelector to reflect the global theme
  • Updated suggested width and height values for many dialogs
  • Made PymeadDialog subclass FramelessDialog instead of QDialog so that the dialog windows have the same unified style as the GUI title bar

Unit testing

  • Added additional GUI unit tests, including testing of the XFOIL analysis, MSES analysis, match airfoil, and help browser features

Release beta.11 of pymead v2.0.0

03 Sep 21:23
Compare
Choose a tag to compare
Pre-release

New features

  • Added polylines and reference geometry to show/hide menu
  • Made constraint items hoverable and clickable
  • Reduced HoverableCurve mouse width
  • Added interactive text item for distance and angle constraints (changing the text value changes the corresponding parameter value)
  • Added the ability to dynamically modify distance and relative angle constraint visual element placement in the canvas
  • Made airfoil dialog non-blocking to allow point hover
  • Added clear/export data options for AnalysisGraph
  • Added the ability to change the number of evaluation points on each Bézier curve from the GUI. This feature is useful when the number of points evaluated on an airfoil exceeds the hard-coded limits in XFOIL or MSES

Bug fixes

  • Fixed typos in MSET option labels
  • Added GUI error messages for load_point, airfoil generation
  • Fixed bug where multiprocessing pool would not properly close during optimization
  • Fixed bug where running an optimization including a WebAirfoil would produce ConnectionErrors due to excess web requests by caching the airfoil coordinates in the GeometryCollection directly
  • Fixed bug where trying to add an airfoil when no points were present failed to throw a GUI error
  • Eliminated default pyqtgraph context menu from all analysis and optimization graphs

Aesthetics

  • Added unified title bar to dock widgets
  • Fixed point hover text color not matching "main-color"

Unit tests

  • Added unit test for loading points

Release beta.10 of pymead v2.0.0

09 Aug 19:36
Compare
Choose a tag to compare
Pre-release

New features

  • Added the ability to create Reference Polylines from the GUI
  • Added ReferencePolylineButton to the parameter tree which allows editing of ReferencePolyline name and color from the GUI

Features removed

  • Removed plot_geometry and plot_airfoil_from_airfoiltools in favor of the new reference polyline feature

Bug fixes

  • Fixed bug where show/hide object changes would not apply when new airfoil system was loaded in

Release beta.9 of pymead v2.0.0

08 Aug 02:05
Compare
Choose a tag to compare
Pre-release

New features

  • Added the ability to match an airfoil from a data file in the GUI
  • Added a new geometric object type -- "Reference Polyline" -- which can be used to compare a matched airfoil parametrization to an existing airfoil shape directly on the airfoil canvas
  • Added mass flow rate and elementwise performance to read_forces_from_mses
  • Optimization settings now save to optimization results directory
  • Added field scaling factor option to mses_field.py
  • Added n_points_per_curve option in Airfoil.get_coords_selig_format that allows evaluation of each curve using a specified number of points

Bug fixes

  • Added missing keys in XFOIL settings dictionary (GUI optimization)
  • Fixed load dialog opening if no MEA file specified in optimization settings
  • Fixed improper behavior of relative angle constraints with p1.rotation_handle and p2.root both set
  • Hover and selection behavior for parametric curves now match point hover and selection behavior
  • Fixed bug where airfoils could not be created with trailing edge and upper surface end being the same point reference
  • Fixed broken reference in WebAirfoilDialog.setInputs
  • Fixed area unit not changing on length unit update
  • Made topology error dimensional in airfoil matching
  • Fixed bug where a design variable and a parameter could share the same name
  • Fixed bug where polar analysis would fail to execute after a previous polar analysis in the same directory
  • Fixed bug where geometry axis labels would not update when loading in a GeometryCollection with different units
  • Fixed bug where optimization would try to access mea.name() even if mea was None
  • Fixed bug in pymead_mp.py where a process terminating in the middle of accessing its name would raise an error instead of continuing
  • Fixed bug where MEA file dialog box was read-only by default
  • Fixed bug where removing a trailing edge line does not remove the airfoil
  • Fixed bug where optimization would take a while to clean up processes after completing a generation
  • Fixed broken arrow key movement
  • Fixed bug where geometric constraints were not calculated properly during optimization
  • Fixed bug in mses_field.py when axs==None
  • Fixed bug where part of the base-level titleBar from QFramelessWindow was visible and could be interacted with
  • Folder link now correctly appears when an MSES analysis fails
  • Fixed bug where context menu would not activate on canvas curve select
  • Added a key check to PymeadDialogWidget.setValue to improve backwards compatibility
  • GUI error message now appears when an invalid MSES analysis path is selected

Aesthetics

  • Created custom text item to support vertical text in parallel coordinates graph output during optimization

Unit tests

  • Added numerous unit tests for item selection/hover
  • Added unit tests related to optimization

Release beta.8 of pymead v2.0.0

15 Jun 08:22
Compare
Choose a tag to compare
Pre-release

New features

  • Windows Aero Snap (dragging GUI to edges of screen creates a pop-up with various quarter-screen/half-screen/full-screen options) and double-clicking title-bar to toggle full-screen now added using a custom implementation of the PyQt6-Frameless-Window library. The Linux tarball is not included in this release since the changes apply only to Windows.

Release beta.7 of pymead v2.0.0

13 Jun 22:33
Compare
Choose a tag to compare
Pre-release

New features

  • Migrated the airfoil matching GUI method to a separate thread
  • Added intermediate airfoil comparisons and function value updates to the airfoil matching feature

Release beta.6 of pymead v2.0.0

13 Jun 15:53
Compare
Choose a tag to compare
Pre-release

Library upgrades

  • Upgraded all the GUI elements from PyQt5 and PyQtWebEngine to PyQt6 and PyQt6-WebEngine

Behavior changes

  • Grid button is now toggleable and active by default. Toggling the grid button now toggles the grid to the same state for every graph present

Bug fixes

  • Fixed a bug where the hyperlinked directory for MSES and MPOLAR runs failed to link properly

Release beta.5 of pymead v2.0.0

12 Jun 17:56
Compare
Choose a tag to compare
Pre-release

New features

  • Added an example airfoil loader with several test airfoils under File -> Load Example
  • Added experimental wrapper for MPOLAR, the component of the MSES suite that executes sweeps over high-level parameters (such as angle of attack). In the GUI, MPOLAR runs can be executed using the new "MPOLAR" tab in Analysis -> Multi-Element Airfoil. The wrapper function runs in a separate thread and passes intermediate data, including the angle of attack and residual values, to the GUI for frequent visual updates.
  • MSES now runs in a separate thread and passes the residual values to a graph. This means that MSES runs that take longer than a few seconds will not appear to cause pymead to hang.
  • "Stop" button in the toolbar now takes effect on both MSES and optimization runs
  • Implemented De Casteljau's algorithm to split any Bézier curve into two Bézier curves of equal degree to the original at any parameter value $t$
  • Added a matplotlib "plot" method to the Airfoil class for convenience.
  • Added XFOILSettings, MSETSettings, MSESSettings, MPLOTSettings, and MPOLARSettings classes to improve API usage of calculate_aero_data

Testing

  • Added several unit tests
  • Added dialog unit testing capability for the GUI

Release beta.4 of pymead v2.0.0

24 Apr 17:48
Compare
Choose a tag to compare
Pre-release

New features

  • Added a basic save-state-based undo/redo framework to the GUI
  • Added the ability to load points from a text/dat file as Point objects in the GUI
  • Added proper inviscid support for XFOIL GUI wrapper (set by unchecking the "Viscosity On?" checkbox)
  • Added basic panel-code analysis dialog for angle of attack control (Ctrl+Alt+I in the GUI)
  • Introduced the ability to define parameters by equations (activate in the GUI by double-clicking on the parameter)
  • Added splash screen to the standalone executable version of pymead
  • Experimental unit-switching feature added to API and GUI (GeometryCollection.switch_units)
  • Chord-normalized scaling for XFOIL, MSES, field plots, and $C_p$ distributions
  • Added dev tools to show constraint and parameter graphs from the GUI
  • Default $C_{P_K}$ calculation is now much simpler and more robust

Bug fixes

  • Fixed bug where optimization would not complete properly
  • Fixed bug where parameters would get deleted during promotion to design variables
  • Fixed context menu bug in the AirfoilCanvas
  • Now prevent optimization from running if no design variables are present
  • Fixed bug related to loading in web airfoils with sharp trailing edges
  • Now catch and properly throw 404 errors from airfoiltools.com
  • Fixed optimization settings bug in the GUI
  • Properly connected actuator disk/parameter connection in optimization settings
  • Fixed root-vertex angles not updating properly
  • Added re-try safeguards for various aerodynamic analysis functions to prevent good airfoil systems from failing due to
    timeout errors (possibly because of running optimization from inside cloud-synced folder?)
  • Improvements/bug fixes for the screenshot tool
  • XFOIL settings now save after closing the dialog
  • Set GUI pen access to a cyclic function to prevent the GUI from throwing errors when more analyses were done at once than the number
    of pens specified

Aesthetics

  • Formatting updates for AnalysisGraph

Testing

  • Added constraint verification method which must be defined in every instance of GeoCon

Release beta.3 of pymead v2.0.0

23 Feb 00:42
Compare
Choose a tag to compare
Pre-release

New features

  • Added a PolyLine class to handle airfoils from a file or from AirfoilTools as pymead objects.
  • Added the ability to split these polylines at a specified index
  • Support for antiparallel constraints between Bezier curves and lines
  • Added the ability to enforce tangent and curvature constraints between polylines and Bezier curves at these split points
  • Contour level specification in the "export plot" dialog
  • Added GUI error messages for several known potential user error cases

Aesthetics

  • Moved points to the top of the airfoil canvas by default (highest Z-order)

Bug fixes

  • Fixed a bug where removing an airfoil from the GeometryCollection did not remove its name from the inviscid airfoil analysis combo box
  • Fixed a bug where removing airfoil would not remove associated MEA objects
  • Fixed a bug where removing constraints would not properly remove cluster angle parameters when the cluster was deleted