Releases: mlau154/pymead
Releases · mlau154/pymead
Release beta.12 of pymead v2.0.0
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"
toParam.set_value
that determines whether point parameter values should be set directly or ifPoint.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 bypymoo
for multi-point optimizations) to1e-6
(as suggested bypymoo
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
andy
parameters - Fixed bug where a point could not be removed after creating
x
ory
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
ory
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
ory
-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
orps2pdf
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 returnNone
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
subclassFramelessDialog
instead ofQDialog
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
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 produceConnectionError
s due to excess web requests by caching the airfoil coordinates in theGeometryCollection
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
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
andplot_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
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 inAirfoil.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
andp2.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 ifmea
wasNone
- 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
whenaxs==None
- Fixed bug where part of the base-level
titleBar
fromQFramelessWindow
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
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
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
Library upgrades
- Upgraded all the GUI elements from
PyQt5
andPyQtWebEngine
toPyQt6
andPyQt6-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
New features
- Added an example airfoil loader with several test airfoils under File -> Load Example
- Added experimental wrapper for
MPOLAR
, the component of theMSES
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 thatMSES
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 theAirfoil
class for convenience. - Added
XFOILSettings
,MSETSettings
,MSESSettings
,MPLOTSettings
, andMPOLARSettings
classes to improve API usage ofcalculate_aero_data
Testing
- Added several unit tests
- Added dialog unit testing capability for the GUI
Release beta.4 of pymead v2.0.0
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
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