-
Notifications
You must be signed in to change notification settings - Fork 50
Description
Description
This is an attempt to describe the necessary steps for adding functionality for analyzing shell sections. The objective is to implement a ShellSection class with functionality similar to the current GenericSection, but capable of calculating the response of a shell with an arbitrary thickness and material, and with arbitrary reinforcement.
A shell section is subjected to the stress resultants shown in the figure below. As a start we should implement functionality for calculating the response of the moments and membrane forces with respect to the respective strain components relative to the mid-plane, i.e. three in-plane strain components, and three curvature components.
The relations between stresses and stress resultants are given in the equations below, positive stresses are tension, and a positive curvature gives tension on the face of the shell with negative z-coordinate.
The integration of stresses to stress resultants should be performed by dividing the section into n layers, or fibers through the thickness, where each layers is assumed to be in a state of plane stress.
Comparison between GenericSection and ShellSection
The overview below compares the current GenericSection and the proposed ShellSection and outlines tasks that should be completed.
Beam section
Material
Concrete:
- Uniaxial stress-strain diagram
Reinforcement:
- Uniaxial stress-strain diagram.
Gross geometry
- Surface represented as an arbitrary polygon. Wrappers for creating rectangle and circle.
- Points to a material. Today, we point to a constitutive law. This will be updated.
- Leverages
_repr_svg_for visualizing the geometry.
Reinforcement
Point- Points to a material. Today, we point to a constitutive law. This will be updated.
- Reinforcement is added to a geometry to create a
CompoundGeometryusing the following functions:
add_reinforcement
add_reinforcement_line
add_reinforcement_circle
Section
-
GenericSectionshould be considered renamed toGenericBeamSection.
SectionCalculator
-
GenericSectionCalculatorshould be considered renamed toGenericBeamSectionCalculator. - With the new
ShellSectionCalculator, the abstract methodscalculate_bending_strengthandcalculate_moment_curvatureon the base classSectionCalculatorare no longer well defined. These should be removed.
Integrator
- We should consider renaming the IntegratorFactory and all related to e.g.
BeamIntegratorFactory.
Shell section
Material
Concrete
- Uniaxial stress-strain diagram. As before. However, we should probably implement a
.get_stress_2dmethod that accepts strains from a state of plane stress, and returns the corresponding stresses. - Reduction of compressive strength due to transverse tension.
- Increase of compressive strength due to transverse compression.
Reinforcement
- Uniaxial stress-strain diagram. As before.
Gross geometry
- A shell represented by it’s thickness, e.g.:
ShellGeometry(thickness=450, material=concrete) - It should inherit from
Geometry. - Points to a material.
- It should have an attribute, e.g.
.reinforcement, which could be a list of reinforcement objects. - Could implement a
_repr_svg_which visualizes the reinforcement in the plane.
Reinforcement
- A custom
ShellReinforcementobject with at least the following attributes:- The position over the thickness.
- The number of bars in a bundle.
- The center distance between bar bundles.
- The bar diameter.
- The material.
- The orientation in the plane.
- Could be added to a shell geometry with for example a function
add_shell_reinforcement. This function could act as a factory function which takes the required arguments for creating aShellReinforcementobject, create it, and store it in the.reinforcementattribute of theShellGeometryobject.
Section
-
ShellSectionwhich stores aShellGeometryand initializes and stores aShellSectionCalculator. Inherits fromSection.
SectionCalculator
- ShellSectionCalculator which sets attributes for an integrator and creates a
ShellIntegrator. Inherits fromSectionCalculator. Should have the following methods as a start:.integrate_strain_profile(strain: ArrayLike, integrate: t.Literal[’stress’, ‘modulus’] = ‘stress’) → t.Union[t.Tuple[float, float, float], NDArray].calculate_strain_profile(nx, ny, nxy, mx, my, mxy) → t.List[float]
Integrator
-
ShellFiberIntegratorwith concrete implementations of the three abstract methods defined onSectionIntegrator.
