Skip to content

Add functionality for analysing shell sections #225

@mortenengen

Description

@mortenengen

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.

Image

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.

$$n_{\textrm{x}} = \int_{-t/2}^{t/2} \sigma_{\textrm{x}} dz$$ $$n_{\textrm{y}} = \int_{-t/2}^{t/2} \sigma_{\textrm{y}} dz$$ $$n_{\textrm{xy}} = \int_{-t/2}^{t/2} \tau_{\textrm{xy}} dz$$ $$m_{\textrm{x}} = -\int_{-t/2}^{t/2} \sigma_{\textrm{x}} z dz$$ $$m_{\textrm{y}} = -\int_{-t/2}^{t/2} \sigma_{\textrm{y}} z dz$$ $$m_{\textrm{xy}} = -\int_{-t/2}^{t/2} \tau_{\textrm{xy}} z dz$$

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 CompoundGeometry using the following functions:
    add_reinforcement
    add_reinforcement_line
    add_reinforcement_circle

Section

  • GenericSection should be considered renamed to GenericBeamSection.

SectionCalculator

  • GenericSectionCalculator should be considered renamed to GenericBeamSectionCalculator.
  • With the new ShellSectionCalculator, the abstract methods calculate_bending_strength and calculate_moment_curvature on the base class SectionCalculator are 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_2d method 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 ShellReinforcement object 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 a ShellReinforcement object, create it, and store it in the .reinforcement attribute of the ShellGeometry object.

Section

  • ShellSection which stores a ShellGeometry and initializes and stores a ShellSectionCalculator. Inherits from Section.

SectionCalculator

  • ShellSectionCalculator which sets attributes for an integrator and creates a ShellIntegrator. Inherits from SectionCalculator. 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

  • ShellFiberIntegrator with concrete implementations of the three abstract methods defined on SectionIntegrator.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions