Releases: MonashSmartStructures/ospgrillage
Releases · MonashSmartStructures/ospgrillage
v0.6.0
Summary
v0.6.0 release — shell element contour plots, stress resultant extraction, self-contained results files, and a GUI results viewer.
Shell contour plots (plot_srf)
- New
plot_srf()function renders contour plots over the shell mesh for three component families: shell forces (Vx–Mz), nodal displacements (Dx,Dy,Dz), and section stress resultants (N11,N22,N12,M11,M22,M12,Q13,Q23). - Supports both Plotly (interactive 3-D) and matplotlib (2-D) backends.
- Shell contours can be composed with beam diagrams by passing the Plotly figure as
ax=toplot_bmd/plot_sfd/plot_tmd/plot_def. - Configurable colorscale, opacity, and colorbar display.
Stress extraction pipeline
extract_grillage_responses()now querieseleResponse(tag, "stresses")for shell elements, capturing 8 stress resultants at 4 Gauss points (32 values per element).- New
stresses_shellDataArray in the results Dataset with dimensions(Loadcase, Element, Stress)using a dedicatedStresscoordinate to avoid dimension conflicts withforces_shell.
Self-contained results files
.ncfiles saved viaget_results(save_filename=...)now embed node coordinates and member-element connectivity, making them fully self-contained.model_proxy_from_results()creates a lightweight_ModelProxyfrom a saved Dataset — all plotting functions work without the originalOspGrillageobject.
GUI results viewer
- File > Open Results (.nc) loads saved results into an interactive viewer with BMD, SFD, TMD, Deflection, and Shell Contour tabs.
- Shell Contour tab provides component, colorscale, and overlay controls (compose shell contours with beam diagrams).
- Contour controls grey out when a non-contour tab is active and hide entirely for non-shell models.
GUI fixes
- Disabled combo-box pseudo-state styles for better visual feedback.
- 3-D lighting disabled on shell contours to remove specular artefacts.
- BMD title no longer overwrites SRF title when composing; colorbar moved to the left.
- Support markers handled gracefully with
_ModelProxy. fig.show()works correctly in IPython terminal sessions.
Documentation
plot_srfuser guide inworking_with_results.mdwith component tables, colorscale guidance, and GUI walkthrough.- Complete NumPy-style docstring for
plot_srfwith all 17 components across 3 families. - Developer docs for the stress extraction pipeline in
package_design.md. plot_srfandmodel_proxy_from_resultsadded to API reference (api_postprocessing.rst).- GUI results viewer documented in
ospgui.mdwith screenshots (Deflection, Shell Contour, Shell Contour + BMD overlay). - Shell-beam results section added to
advanced_results.ipynbnotebook demonstratingforces_shell,stresses_shell,plot_srf, and composition with beam diagrams. - Changelog entry for v0.6.0.
- Version bumped from 0.5.3 to 0.6.0.
Test plan
- 132 tests pass, 2 skipped
- New notebook cells verified against live code
- Test data regeneration confirms
stresses_shellpresent in shell_beam.ncfiles - Sphinx docs build cleanly
- GUI manual smoke test: open
.ncfile, cycle through all 5 tabs, toggle contour controls
v0.5.3
What's Changed
- fix: use temp file for Plotly 3D to avoid setHtml() 2MB limit by @ccaprani in #151
- docs: document rigid-link offset kwargs and add show_rigid_links toggle by @ccaprani in #153
- Format Python code with psf/black push by @github-actions[bot] in #152
- fix: populate edge/transverse groups in shell_beam element list (#121) by @ccaprani in #154
- fix: correct double-counted node coordinates in multi-span ortho mesh (#120) by @ccaprani in #155
- chore: add functional test coverage and developer testing guide by @ccaprani in #156
- Format Python code with psf/black push by @github-actions[bot] in #157
- Format Python code with psf/black push by @github-actions[bot] in #158
Full Changelog: v0.5.2...v0.5.3
v0.5.2
What’s Changed
- fix: embed Plotly JS inline for QWebEngineView compatibility (#150) @ccaprani
- build(deps): bump codecov/codecov-action from 5.5.2 to 5.5.3 (#149) @dependabot[bot]
- Format Python code with psf/black push (#148) @github-actions[bot]
v0.5.1
What’s Changed
- feat: add interactive Plotly 3D view to GUI (#147) @ccaprani
- docs: execute all tutorial notebooks for GitHub Pages (#146) @ccaprani
- docs: restructure User Guide and add interactive Plotly output (#145) @ccaprani
- Format Python code with psf/black push (#144) @github-actions[bot]
- feat: show_supports on all plot functions + separate Analysis API page (#143) @ccaprani
- fix: enable notebook execution on CI and remove generated stubs (#142) @ccaprani
- fix: restore notebook execution in docs build (#141) @ccaprani
- fix: enable notebook execution in docs build (#140) @ccaprani
- Docs/v050 changelog and fixes (#139) @ccaprani
- fix: set notebook kernels to python3 for CI compatibility (#138) @ccaprani
v0.5.0
Version 0.5.0
A usability-focused release: every result the model produces can now be visualised in one or two lines of code, the public API is cleaner and more consistent, and the documentation has been substantially rewritten.
Plotting: new functions and interactive backend
- New convenience functions
plot_bmd(),plot_sfd(),plot_tmd(), andplot_def()wrapplot_force()with the correct component pre-selected. - All plotting functions accept
backend="plotly"for interactive 3-D force and deflection diagrams with rotation, zoom, and hover. Diagrams are rendered alongside the grillage mesh for immediate spatial context. Install withpip install ospgrillage[gui]. plot_model()visualises the grillage mesh geometry (backend="matplotlib"for a 2-D plan view,backend="plotly"for interactive 3-D). Replacesog.opsv.plot_model()/og.opsplt.plot_model().- Common keyword arguments across all plot functions:
figsize,ax(existing matplotlib Axes),scale,title,color,fill,alpha, andshow. Membersbitflag enum for filtering which member groups appear in a plot: combine with|, e.g.Members.EDGE_BEAM | Members.INTERIOR_MAIN_BEAM, or use the pre-defined compositesMembers.LONGITUDINAL,Members.TRANSVERSE,Members.ALL.- Plotly 3-D plots render supports, rigid links, shell quad elements, and transverse/edge beams alongside the longitudinal members.
API improvements
load_obj->loadandload_case_obj->load_caseinCompoundLoad.add_load(),LoadCase.add_load(),MovingLoad.add_load(), andOspGrillage.add_load_case(). The change is positional-compatible; only code using the old keyword names needs updating.LoadVertexnamedtuple replacesLoadPointas the preferred name for load coordinate+magnitude tuples.LoadPointis kept as a backwards-compatible alias.beam_z_spacingrenamed tobeam_spacingwith aDeprecationWarning(old name still accepted).Section(offset_y=_): users can now supply centroidal section properties and let ospgrillage apply the parallel axis theorem automatically (I_offset = I_centroid + A * y²). No more hand-calculating transferred second moments of area when the beam centroid is offset from the grillage model plane.Section(E=_)/Section(G=_)now raiseValueError(elastic moduli belong onMaterial).get_results(load_case=_)accepts a name or list of names to retrieve only specific load cases: avoids compiling every moving-load increment.plot_deflectionrenamed toplot_def(consistent withplot_bmd/plot_sfd).Mesh.orthogonalattribute added (previously raisedAttributeErroron oblique meshes).- Edge transverse elements (start/end edges on oblique meshes) are now correctly assigned to their own member groups.
Dependencies
vfois no longer a required dependency. Useog.plot_model()instead ofog.opsplt.plot_model().og.opsvandog.opspltre-exports now emitDeprecationWarning.- Generated pyfiles no longer import
vfo.
GUI
- Code generation updated: uses
og.plot_model()instead ofog.opsv.plot_model(). ext_to_int_distspinner replaced with abeam_spacingtext input for full control over transverse member layout.- Fixed
set_member()code generation (member names were unquoted).
Documentation
- Super-T bridge tutorial rewritten as a step-by-step walkthrough; advanced results split into a separate notebook.
performing_analysis.mdsplit intodefining_loads.md; "Running analysis" merged intogetting_results.md("Analysis and results").get_results()docstring now recommends theload_case=parameter for models with moving loads.Section(offset_y=)documented in user guide with worked composite beam-slab example.- 15+ content fixes: removed non-existent
set_material(), correctedlink_nodes_width�beam_width,NodalForce�NodeForces,type=->loadtype=, duplicate member assignments, Sphinx cross-references throughout, missing API methods added. - Removed stale
html_static_path/html_theme_pathfromconf.py.
What's Changed
- fix: resolve 5 API inconsistencies and improve usability by @ccaprani in #135
- build(deps): bump codecov/codecov-action from 4.5.0 to 5.5.2 by @dependabot[bot] in #133
- Format Python code with psf/black push by @github-actions[bot] in #132
- build(deps): bump peter-evans/create-pull-request from 6.1.0 to 8.1.0 by @dependabot[bot] in #134
- build(deps): bump release-drafter/release-drafter from 6 to 7 by @dependabot[bot] in #136
- Format Python code with psf/black push by @github-actions[bot] in #137
Full Changelog: v0.4.1...v0.5.0
v0.4.1
Code changes
_OpsProxydual-mode dispatch layer: single code path for live execution and script serialisation — no more parallel string-building branches.- Load assignment pipeline refactored from format strings to
(func_name, args, kwargs)tuples;eval()removed from the analysis loop. PatchLoadingvertex validation is now cyclic-rotation-aware.- NumPy-style docstrings added to all public functions and classes.
- Dead code removed from
Analysis.__init__(9 obsolete command-string attributes,analysis_argumentsdict). Envelope.get()rewritten withouteval().- Minimum supported Python version raised from 3.9 to 3.10.
- 30 new tests added; overall coverage rises from 71 % to 75 %.
Documentation overhaul
- Navigation restructured into four top-level sections: Getting Started, User Guide, API Reference, and Additional Resources.
- API reference split into per-module pages; Load module further subdivided into load types, load cases, and moving loads.
- All source files renamed to match their page titles; source folder renamed
rst/→pages/. - Pandoc conversion artefacts removed throughout (escaped characters, malformed directives, broken anchors, Pandoc grid tables).
- Docstrings improved for
PatchLoading,LoadCase,CompoundLoad, andOspGrillage. - Getting Results page rewritten with an xarray concept overview and annotated examples.
- Contributing guidelines page added; JOSS citation added to front page.
- Jupyter example notebooks cleaned up (version-output cells and trailing empty cells removed).
Bug Fixes
- Fix start_edge and end_edge node extraction across multiple edge groups by @ManavSharma23 in #131
New Contributors
- @ManavSharma23 made their first contribution in #131
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's Changed
- Mass and displacement interpolator update by @justinngan92 in #72
- Format Python code with psf/black push by @github-actions[bot] in #73
- Replace openseespyvis with vfo by @alanjferguson in #74
- build(deps): bump release-drafter/release-drafter from 5 to 6 by @dependabot[bot] in #81
- build(deps): bump codecov/codecov-action from 3.1.1 to 4.1.0 by @dependabot[bot] in #83
- build(deps): bump pypa/gh-action-pypi-publish from 1.5.1 to 1.8.12 by @dependabot[bot] in #84
- build(deps): bump codecov/codecov-action from 4.1.0 to 4.5.0 by @dependabot[bot] in #95
- build(deps): bump peter-evans/create-pull-request from 4.2.0 to 6.1.0 by @dependabot[bot] in #97
- build(deps): bump pypa/gh-action-pypi-publish from 1.8.12 to 1.9.0 by @dependabot[bot] in #96
- Fix plot module by @justinngan92 in #107
- fix gh page workflow by @justinngan92 in #109
- Fix numpy 2 and dependency compatibility issue by @justinngan92 in #126
- GUI-Based Geometry Generator for Ospgrillage by @Prathamesh001 in #128
New Contributors
- @alanjferguson made their first contribution in #74
- @Prathamesh001 made their first contribution in #128
Full Changelog: v0.3.1...v0.4.0
v0.3.2
What’s Changed
- Fix plot module (#107) @justinngan92
- Replace openseespyvis with vfo (#74) @alanjferguson
- Format Python code with psf/black push (#73) @github-actions
- Mass and displacement interpolator update (#72) @justinngan92
v0.3.1
What's Changed
- Vertically-offset supports (accounts for deep beams)
- Updates to documentation
- Code refactoring
- Bug fixes
- Build system modernization
Detailed Changes
- add test for rigidLink support feature
- abstraction of equal_DOF function
- refactor rigid_link function to be part of base class from concrete class
- Added inline comments for understanding; corrected design lane formula
- update codeblocks in Module description.rst (user guide page)
- updated to use pyproject.toml only, per PEP621
Bug Fixes
- fix result output of shell model not able to distinguish shell element with spring elements
- fix multispan feature where supports are not assigned to intermediate supports in a multispan shell mesh
- fix non-assignment issue of end edge members of oblique mesh when mesh edge angle is 0.
- fix edge slab member not assigned in curve meshes.
Main PRs
- Prep for v0.3.1 release (#66) @ccaprani
- feat and docs: fixes (#62) @justinngan92
- Minor Tweaks (#61) @shihabkhan1
v0.3.0
Highlights
- rotational/translation spring supports
- specific grillage member groups can now be assigned.
- orthogonal meshing now possible with multispan feature
What's Changed
- Update README.md by @ccaprani in #45
- build(deps): bump codecov/codecov-action from 3.1.0 to 3.1.1 by @dependabot in #46
- build(deps): bump peter-evans/create-pull-request from 4.1.1 to 4.2.0 by @dependabot in #50
- v.0.3.0 by @justinngan92 in #51
Full Changelog: v0.2.1...v0.3.0