- OPM: oblique_rho2_rho1 function
- merge conflict
- migrate Vector into hypervehicle
- examples: added example of generating aerodeck and sensedeck from geometry
- SensitivityCalculator: do not overwrite verbosity
- _read_c3d_loads: fix tag handling
- Cart3DShapeOpt: add extra checks for errors
- van_dyke_sensitivity: added supersonic mach conditional
- use meshio instead of pymesh when saving FlowSolver results
- parsers.py: added meshio parser
- ShapeOpt: added passing of cog data
- 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
- 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
- optimisation.cartd.init.py: remove imports to simplify
- 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
- Wrapper: _extract_parameters preserves parameter ordering
- van_dyke_dPdp_ingo: take kwargs
- 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
- Sensdeck: change type to sensdeck
- 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
- 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
- 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
- Cell: delay calculation of geometric sensitivities until required
- 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
- 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
- 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
- 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
- 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
- ShapeOpt: attempt component intersection multiple times
- ShapeOpt: retrieve vol and mass from properties dir
- 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
- 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
- Wrapper: allow passing c.o.g. as arg to calculate
- Wrapper: return sensitivities as dataframe
- Cart3DWrapper: allow directly providing point and cell data frames
- added sensitivities to transcribed cells
- modularised dPdp method
- test_cart3d.py: name of test function
- isentropic_dPdp: calculation of pressure sensitivity
- improved flow of cart3d wrapper
- improved wrapper interface
- Wrapper: check if cells have already been transcribed
- utilities.py: modularised dPdp method
- merge conflicts
- wrappers: added wrappers submodule heirarchy
- pyproject.toml: rename to pysagas
- rename package to pysagas
- 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
- flow.py: circular import
- fixed circular import error
- utilities.py: fixed dimensionality for parameters
- 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
- code tidy up