Changelog
v0.14.0 (2024-02-27)
Feat
use meshio instead of pymesh when saving FlowSolver results
parsers.py: added meshio parser
v0.13.0 (2024-01-02)
Feat
ShapeOpt: added passing of cog data
Fix
optimisation: fixed stale import
OPMShapeOpt: use generic sensitivity solver instead of finite diff
Cart3DShapeOpt: add sim_success flag to recover from bad sim
van_dyke_dPdp: remove temporary method
Cell: fix face_ids type hint
Refactor
opm: convert opm module name to lowercase for PEP8
renamed dPdp methods to sensitivity for clarity
refactored sensitivity models into senstivity module
wrapper: refactored wrapper module into sensitivity module
utilities.py: integrate piston sens with mach_limited_piston function
utilities.py: move test helper functions into relevant test module
cart3d.py: update import to avoid pymesh dependency error
v0.12.1 (2023-11-06)
Refactor
optimisation.cartd.init.py: remove imports to simplify
v0.12.0 (2023-10-31)
Feat
Parser: STL load_from_file also appends sensitivity data
OPM: added count of bad cells for diagnosing bad solve
OPM: optionally provide parameters to avoid sens extraction
FlowState: add Vector property
Cart3DShapeOpt: provide kwargs for wrapper.calculate
Fix
Wrapper: _extract_parameters preserves parameter ordering
van_dyke_dPdp_ingo: take kwargs
v0.11.0 (2023-06-18)
Feat
deck.py: added multideck object to tidy sensitivity deck
SensitivityResults: translate f_sens to aero frame for coefficients
Deck: added from_csv methods
deck.py: added aerodeck object
Wrapper: return SensitivityResult from calculate
Wrapper: add verbosity to calculate method
PyMesh-Parser: optionally provide geom sens data to append to cells on load
GenericWrapper: specify that cells already have geom sens data to prevent transcription
wrappers: added generic wrapper to calculate sensitivities from provided cells
Refactor
Sensdeck: change type to sensdeck
v0.10.0 (2023-06-13)
Feat
C3DPrep: improved docstrings
C3DPrep: allow passing args to autoinputs
utilities.py: implemented van dykes second order theory for sensitivities
Cart3DMooShapeOpt: added multi-objective cart3d shape optimiser
combine_sense_data: added verbosity control
Cart3D: solve_sens method implemented
Cart3D: improved running function
Cart3D: added status and stop functionality
Cart3D: added cfd wrapper for cart3d
FlowState: define direction by aoa
OPMShapeOpt: added verbosity
OPMShapeOpt: pass parameters to objective callback
add_sens_data: improved reporting
OPM: added perturbation amount argument for sens
add_sens_data: return point match fraction metric
FlowSolver: added sweep method to generate aerodeck
OPM: calculate net moment
first implementation of OPM optimisation wrapper
FlowResults: improved aero coefficient helper method
FlowSolver: added aero coefficient helper
PyMesh: implemented multiprocessing for parser
FlowSolver: check if a flow state has already been solved before proceeding
OPM: implemented sensitivity solver
add_sens_data: function to append sensitivity data to cells
FlowSolver: added method to convert body to wind axes
GasState: added default flow direction and q property
FlowSolver: added convenience inputs of aoa and mach for solver instance
OPM: added finite difference sensitivities for PM and oblique
OPM: use normal shock relations for theta > theta_max
TRI-Parser: now includes connectivity information
FlowSolver: added vtk file save method
OPM: first implementation running to produce net force vector
Parser: implemented stl and tri parsers
OPM: added oblique theory methods
Fix
van_dyke_dPdp: skip subsonic cells
Cart3DMooShapeOpt: combine sens data for each sim point
Cart3D: path management
OPMShapeOpt: force reloading cells and instantiating solver
OPMShapeOpt: re-instantiate cells and solver on each evaluation
OPM-ShapeOpt: chain rule theta through parameter
OPMShapeOpt: try load with pymesh, except use STL
add_sens_data: removed print line interfering with progress bar
OPM: fixed sensitivity evaluation
OPM: allow solving sens with cells that already have geom sens data
GasState: dynamically return properties to allow updating state
OPM: threshold expansion cells
FlowResults: str return type
Cell: ambiguity of numpy array
geometry: fixed namespace generation
Refactor
Cart3DWrapper: pass flowstate instead of individual properties
combine_sense_data: moved to pysagas.optimisation.cartd.utilities
geometry: tidied geometry module into submodule
FlowSolver: started implemented prelimary flow solvers
Perf
Cell: delay calculation of geometric sensitivities until required
v0.9.0 (2023-04-15)
Feat
C3DPrep: add option to not write config.xml file
Cart3DShapeOpt: pass user-defined properties and sensitivities to callback functions
Cart3DShapeOpt: convert tri files to dat
Cart3DShapeOpt: option to copy components file to observe evolution
ShapeOpt: check bounds on variables when added
ShapeOpt: implemented constraint interface
ShapeOpt: implemented hypercube bounds
parse_tri_file: added progress bar and verbosity control
ShapeOpt: read c3d commands from warmstart dir
ShapeOpt: prepare new simulation with warmstart flag
utilities: implemented Newtonian impact solver
Fix
C3DPrep: config.xml writing option
paraview and vtk compatibility
Cart3DShapeOpt: revert file copying without .dat conversion
ShapeOpt: pass variable bounds
Cart3DShapeOpt: working directory cleaning logic
ShapeOpt: pass parameters to obj_jac_cb
ShapeOpt: handle when a geom has no properties data
ShapeOpt: raise exception if Cart3D commands cannot be found
ShapeOpt: added verbosity to logging
ShapeOpt: append cart3d stdout to log file
ShapeOpt: open/close file when running main cmd with stdout/err pipe
ShapeOpt: mgPrep filename for warmstarted iterations
ShapeOpt: run c3d commands using subprocess.run
ShapeOpt: use os.path.join on conditional
ShapeOpt: rename checkpoint file when copying warmstart files
ShapeOpt: distinguish preparaton warmstart flag from simulation warmstart flag
ShapeOpt: handle FileNotFoundErrors in _infer_adapt method
ShapeOpt: remove hardcoded run command
ShapeOpt: allow restarting warmstarted iteration
ShapeOpt: return line in _find_in_file method
ShapeOpt: move *.tri files into simulation directory on warmstarts
ShapeOpt: override warmstart flag on restarts
ShapeOpt: warmstart bool ambiguity
ShapeOpt: falsify warmstart flag on initial iteration
ShapeOpt: pass warmstart flag to run_simulation method
ShapeOpt: allow specifying max_iterations
newtonian_impact_solver: return type hint
Refactor
Cart3DShapeOpt: tidied repeated code
Cart3DShapeOpt: clean working directory before running any operations
Cart3DShapeOpt: minimal working example complete
Cart3DShapeOpt: moved methods to functions
Cart3DShapeOpt: improved flow of evaluate_objective method
Cart3DShapeOpt: refactored into unified interface
tidied up cart3d optimisation methods
C3DPrep: moved into utilities module for C3D optimisation
set up inheritance structure
v0.8.0 (2023-03-01)
Feat
ShapeOpt: handle bad combined sens data
ShapeOpt: limit number of C3D restarts
ShapeOpt: added general C3D handling for ‘ERROR’
C3DPrep: optionally specify number of rotation attempts before quitting
ShapeOpt: objective and jacobian provided by user callback function
Fix
ShapeOpt: explicitly specify sensitivity files when combining
Cart3DWrapper: raise exception when len(sensdata) != len(pointdata)
C3DPrep: apply reverse rotations upon intersection
ShapeOpt: added max_adapt arg back in after merge deletion
Refactor
ShapeOpt: attempt component intersection multiple times
ShapeOpt: retrieve vol and mass from properties dir
v0.7.0 (2023-02-05)
Feat
implemented moment sensitivities
_C3DPrep: overwrite Config.xml with tri files prefix
ShapeOpt: implemented c3d adapt cycle scheduling
ShapeOpt: added cubes failure to c3d errors to catch
cell_dfdp: added mechanism to calculate moment sensitivities
ShapeOpt: optionally provide theoretical convergence limit to post process
_C3DPrep: added control over jitter
ShapeOpt: implemented max step size argument
ShapeOpt: added C3D error to recovery
ShapeOpt: added error handling for C3D crashes
ShapeOpt: added iterative matching tol reduction
ShapeOpt: catch zero norm jacobian and bail
Cart3D: improved verbosity output
DegenerateCell: implemented exception for degenerate cells
option to show plot in post for c3d shapeopt
ShapeOpt: implemented automated step size
optimisation: implemented basic shape optimisation wrapper for cart3d
Fix
cell_dfdp: include dr/dp in moment sensitivity calculation
ShapeOpt: updated output of wrapper.calculate and sensitivity notation
ShapeOpt: warmstart continuity of x_older and jac_older
process_components: enforce paraview to point data in spreadsheet view
Cart3DWrapper: improved parameter extraction
Refactor
Wrapper: allow passing c.o.g. as arg to calculate
v0.6.0 (2023-01-18)
Feat
Wrapper: return sensitivities as dataframe
v0.5.0 (2022-12-20)
Feat
Cart3DWrapper: allow directly providing point and cell data frames
added sensitivities to transcribed cells
modularised dPdp method
Fix
test_cart3d.py: name of test function
isentropic_dPdp: calculation of pressure sensitivity
Refactor
improved flow of cart3d wrapper
improved wrapper interface
Perf
Wrapper: check if cells have already been transcribed
v0.4.0 (2022-12-08)
Feat
utilities.py: modularised dPdp method
Fix
merge conflicts
Refactor
wrappers: added wrappers submodule heirarchy
v0.3.1 (2022-12-08)
Fix
pyproject.toml: rename to pysagas
Refactor
rename package to pysagas
v0.3.0 (2022-12-06)
Feat
init.py: expose key classes to top namespace
test_cart3d.py: code running to completion
assign FlowState to Cells
flow.py: created GasState and FlowState classes
Vector: added unit vector property
utilities.py: added ParaView macro to process components.i.plt
geometry.py: added class methods for Vector and Cell objects
Fix
flow.py: circular import
fixed circular import error
utilities.py: fixed dimensionality for parameters
v0.2.0 (2022-11-30)
Feat
implemented use of Cells
Cell: added sensitivity methods to cell
geometry.py: implemented area and normal methods for Cell
geometry.py: implemented operation methods for Vector
utilities.py: added force sensitivity utilities
geometry.py: added vec property to Vector object
geometry.py: added geometry module
added some utilities
flow.py: added flow state object
Refactor
code tidy up