Skip to main content

Finite element analysis of 2D structures

Project description

anaStruct 2D Frames and Trusses

Python tests Documentation Status

Analyse 2D Frames and trusses for slender structures. Determine the bending moments, shear forces, axial forces and displacements.

Installation

For the actively developed version:

$ pip install git+https://github.com/ritchie46/anaStruct.git

Or for a release:

$ pip install anastruct

Read the docs!

Documentation

Questions

Got a question? Please ask on gitter.

Includes

  • trusses :heavy_check_mark:
  • beams :heavy_check_mark:
  • moment lines :heavy_check_mark:
  • axial force lines :heavy_check_mark:
  • shear force lines :heavy_check_mark:
  • displacement lines :heavy_check_mark:
  • hinged supports :heavy_check_mark:
  • fixed supports :heavy_check_mark:
  • spring supports :heavy_check_mark:
  • q-load in elements direction :heavy_check_mark:
  • point loads in global x, y directions on nodes :heavy_check_mark:
  • dead load :heavy_check_mark:
  • q-loads in global y direction :heavy_check_mark:
  • hinged elements :heavy_check_mark:
  • rotational springs :heavy_check_mark:
  • non-linear nodes :heavy_check_mark:
  • geometrical non linearity :heavy_check_mark:
  • load cases and load combinations :heavy_check_mark:
  • generic type of section - rectangle and circle :heavy_check_mark:
  • EU, US, UK steel section database :heavy_check_mark:

Examples

from anastruct import SystemElements
import numpy as np

ss = SystemElements()
element_type = 'truss'

# Create 2 towers
width = 6
span = 30
k = 5e3

# create triangles
y = np.arange(1, 10) * np.pi
x = np.cos(y) * width * 0.5
x -= x.min()

for length in [0, span]:
    x_left_column = np.ones(y[::2].shape) * x.min() + length
    x_right_column = np.ones(y[::2].shape[0] + 1) * x.max() + length

    # add triangles
    ss.add_element_grid(x + length, y, element_type=element_type)
    # add vertical elements
    ss.add_element_grid(x_left_column, y[::2], element_type=element_type)
    ss.add_element_grid(x_right_column, np.r_[y[0], y[1::2], y[-1]], element_type=element_type)

    ss.add_support_spring(
        node_id=ss.find_node_id(vertex=[x_left_column[0], y[0]]),
        translation=2,
        k=k)
    ss.add_support_spring(
        node_id=ss.find_node_id(vertex=[x_right_column[0], y[0]]),
        translation=2,
        k=k)

# add top girder
ss.add_element_grid([0, width, span, span + width], np.ones(4) * y.max(), EI=10e3)

# Add stability elements at the bottom.
ss.add_truss_element([[0, y.min()], [width, y.min()]])
ss.add_truss_element([[span, y.min()], [span + width, y.min()]])

for el in ss.element_map.values():
    # apply wind load on elements that are vertical
    if np.isclose(np.sin(el.ai), 1):
        ss.q_load(
            q=1,
            element_id=el.id,
            direction='x'
        )

ss.show_structure()
ss.solve()
ss.show_displacement(factor=2)
ss.show_bending_moment()

from anastruct import SystemElements

ss = SystemElements(EA=15000, EI=5000)

# Add beams to the system.
ss.add_element(location=[0, 5])
ss.add_element(location=[[0, 5], [5, 5]])
ss.add_element(location=[[5, 5], [5, 0]])

# Add a fixed support at node 1.
ss.add_support_fixed(node_id=1)

# Add a rotational spring support at node 4.
ss.add_support_spring(node_id=4, translation=3, k=4000)

# Add loads.
ss.point_load(Fx=30, node_id=2)
ss.q_load(q=-10, element_id=2)

# Solve
ss.solve()

# Get visual results.
ss.show_structure()
ss.show_reaction_force()
ss.show_axial_force()
ss.show_shear_force()
ss.show_bending_moment()
ss.show_displacement()

Real world use case.

Non linear water accumulation analysis

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anastruct-1.5.1.tar.gz (172.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anastruct-1.5.1-py3-none-any.whl (361.6 kB view details)

Uploaded Python 3

File details

Details for the file anastruct-1.5.1.tar.gz.

File metadata

  • Download URL: anastruct-1.5.1.tar.gz
  • Upload date:
  • Size: 172.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for anastruct-1.5.1.tar.gz
Algorithm Hash digest
SHA256 50061c02ed8506527ca3366b67e392c836f04c748a6da9e222552a811a5e5686
MD5 1e945a8419d8c0047160f6b37026eed9
BLAKE2b-256 97e44d12d6348ea0ec7baf5b82624ead7d27a8f18171764dc0ce3110d1cab1fe

See more details on using hashes here.

File details

Details for the file anastruct-1.5.1-py3-none-any.whl.

File metadata

  • Download URL: anastruct-1.5.1-py3-none-any.whl
  • Upload date:
  • Size: 361.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for anastruct-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 50cfca7bb730db9dc1ebc5d601bfcf8a5835c1f3feaf9bc7193e957cd755b539
MD5 2df76a4d646c93f051dd29a288ecdf61
BLAKE2b-256 86504fed34eca05207a513a17300668b3c2eeefb262bbdc8064765d8167fd19e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page