Skip to content

feat: implement shell section - #227

Merged
mortenengen merged 48 commits into
devfrom
implement-shell-section
Sep 14, 2026
Merged

mortenengen merged 48 commits into
devfrom
implement-shell-section

Conversation

@mortenengen

@mortenengen mortenengen commented Mar 18, 2025 •

Copy link
Copy Markdown
Member

This PR tracks the development related to #225.

@mortenengen mortenengen added enhancement New feature or request sections Development of sections labels Mar 18, 2025
@mortenengen mortenengen moved this to New ✨ in PR tracker Mar 18, 2025
@mortenengen mortenengen linked an issue Mar 18, 2025 that may be closed by this pull request
6 of 18 tasks
krkris and others added 21 commits March 24, 2025 17:42
* Add shell reinforcement

* Add shell geometry
* Added validation for z-value and scaled the visualization

* Removed 'return self' and 'return None'

---------

Co-authored-by: Morten Engen <[email protected]>
* Add get_stress_2d and get_tangent_2d methods

* Add separate elastic class for 2D operations

* Add tests for Elastic2D methods get_stress and get_tangent.

* Establish the C_matrix as an internal attribute and a property + various fixes

* Change 'math.isclose...' to 'np.allclose...'

* Verified ValueError and removed misplaced comment in get_stress method

---------

Co-authored-by: Morten Engen <[email protected]>
* Add shell fiber integrator

* Removed strain at fiber as argument for Elastic2D get_tangent method

* Improve triangulation logic and various fixes to prepare_input per review comments

* Use zip() in integrate_modulus and only generate default mesh_size when z_coords is None

---------

Co-authored-by: Morten Engen <[email protected]>
…#241)

* Replace tangent stiffness with secant stiffness for 2D materials

* Replace 'tangent' with 'secant' in tests
* Fix add_reinforcement to validate single ShellReinforcement object correctly

* Add tests for ShellGeometry and ShellReinforcement, and add ._shell_geometry.py to __init__.py

* Remove duplicate line
* Add stiffness matrix for reinforcement

* Changed names for global and local material matrix

* Reinforcement integration in prepare_input and drop redundant geometry argument

* Move transformation matrix from  integrator to  ShellReinforcement

* Updated prepare_input for reinforcement
* Add side view to repr_svg in ShellGeometry

* Revert "Updated comment"

This reverts commit 4ca1ad0, reversing
changes made to 9823d2a.

* Updated files with errors

* Fixed difference in not relevant file

* Ignore too many statements in repr_svg

---------

Co-authored-by: Morten Engen <[email protected]>
* Add ParabolaRectangle2D material class

* Add ParabolaRectangle2D material in __init__

* Split class into modular methods for transform, correction, and cracking

* Add more tests to ParabolaRectangle2D class

* Add coefficient for compressive-strength reduction due to lateral shear

* Update tests accounting for compressive-strength reduction

* Update docstrings

* Fix computations related to principal strain direction and correct length of strain vectors as per review comments

* Avoid division by zero in get_secant method

* Update test results after corrections in commit 35898f8
* Add shell section

* Import shell classes to __init__ files

* Make section_calculator a public attr of ShellSection

* Make sure the layer information is stored

* Make sure strain is an array

* Draft iterative solver

* Update tests to reflect how mesh_size is propagated

* Make sure the stiffness matrix is returned correctly

* Separate treatment of current and initial stiffness

* Check number of iterations at the beginning of an iteration

---------

Co-authored-by: Morten Engen <[email protected]>
* Make the secant stiffness matrix consistent

* Refine computation of secant stiffness

* Add more tests for get_secant method

* Update Poisson matrix as per review comments
* Fix misleading variable name in integrate_stress method

* Changed variable name to fiber_stress
* Add shell section

* Import shell classes to __init__ files

* Make section_calculator a public attr of ShellSection

* Make sure the layer information is stored

* Make sure strain is an array

* Draft iterative solver

* Update tests to reflect how mesh_size is propagated

* Make sure the stiffness matrix is returned correctly

* Separate treatment of current and initial stiffness

* Check number of iterations at the beginning of an iteration

* Add tests for shell section

---------

Co-authored-by: Morten Engen <[email protected]>
@mortenengen
mortenengen force-pushed the implement-shell-section branch from e9e09d3 to c1fceef Compare August 28, 2025 19:50
* Update target values in new tests

* Merge dev

* Accept only materials in shell geometry and reinforcement

* Update tests
mortenengen and others added 16 commits September 11, 2025 22:58
* Add stress and modulus transformation as props of shell reinf

* Avoid matrix multiplication during iterations
* Change to an energy based convergence criterion for the shell section

* Update tests
* chore: rename GenericSection and GenericSectionCalculator (#341)

* fix: add last point to complete domain in nm_interaction_domain (#342)

* fix: raise a DeprecationWarning for the GenericSection (#344)

* Use BeamSection instead of GenericSection in tests
… size (#353)

* Specify the number of integration layers instead of a relative size of each layer

* Update tests
@mortenengen
mortenengen marked this pull request as ready for review September 14, 2026 12:05
@mortenengen mortenengen moved this from New ✨ to Under review 👀 in PR tracker Sep 14, 2026

@talledodiego talledodiego left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks so much for this outstanding contribution. Just some minor comments/questions. Eventually for future PR (shall we in case document some future work in proper issues?)

Comment thread structuralcodes/materials/constitutive_laws/_elastic_2d.py Outdated
Comment thread structuralcodes/materials/constitutive_laws/_elastic_2d.py Outdated
Comment thread structuralcodes/materials/constitutive_laws/_elastic_2d.py
Comment thread structuralcodes/materials/constitutive_laws/_elastic_2d.py Outdated
Comment thread structuralcodes/materials/constitutive_laws/_concrete_smeared_cracking/_core.py Outdated
Comment thread structuralcodes/materials/constitutive_laws/_concrete_smeared_cracking/_core.py Outdated
Comment thread structuralcodes/sections/_shell_section.py Outdated
Comment thread structuralcodes/sections/section_integrators/__init__.py
@mortenengen
mortenengen merged commit 1bb33d6 into dev Sep 14, 2026
4 checks passed
@github-project-automation github-project-automation Bot moved this from Under review 👀 to Done 🚀 in PR tracker Sep 14, 2026
@mortenengen
mortenengen deleted the implement-shell-section branch September 14, 2026 18:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request sections Development of sections

Projects

Status: Done 🚀

Development

Successfully merging this pull request may close these issues.

Add functionality for analysing shell sections

4 participants