A simple finite element analysis code for 2D elasticity problems. The code uses as input simple-to-create text files defining a model in terms of nodal, element, material and load data.
- Documentation: http://solidspy.readthedocs.io
- GitHub: https://github.com/AppliedMechanics-EAFIT/SolidsPy
- PyPI: https://pypi.org/project/solidspy/
- Free and open source software: MIT license
- It is based on an open-source environment.
- It is easy to use.
- The code allows to find displacement, strain and stress solutions for arbitrary two-dimensional domains discretized into finite elements and subject to point loads.
- The code is organized in independent modules for pre-processing, assembly and post-processing allowing the user to easily modify it or add features like new elements or analyses pipelines.
- It was created with academic and research purposes.
- It has been used to tech the following courses:
- Computational Modeling.
- Introduction to the Finite Element Methods.
The code is written in Python and it depends on numpy
, scipy
and
sympy
. It has been tested under Windows, Mac, Linux and Android.
To install SolidsPy open a terminal and type:
pip install solidspy
To specify through a GUI the folder where the input files are stored you will need to install easygui.
To easily generate the required SolidsPy text files out of a Gmsh model you will need meshio.
These two can be installed with:
pip install easygui pip install meshio
For further explanation check the docs.
Let's suppose that we have a simple model represented by the following files (see tutorials/square example for further explanation).
import numpy as np
from solidspy.solids_GUI import solids_auto
### Define the data
nodes = np.array([
[0, 0.00, 0.00],
[1, 2.00, 0.00],
[2, 2.00, 2.00],
[3, 0.00, 2.00],
[4, 1.00, 0.00],
[5, 2.00, 1.00],
[6, 1.00, 2.00],
[7, 0.00, 1.00],
[8, 1.00, 1.00]])
cons = np.array([
[0, -1],
[0, -1],
[0, 0],
[0, 0],
[-1, -1],
[0, 0],
[0, 0],
[0, 0],
[0, 0]])
elements = np.array([
[0, 1, 0, 0, 4, 8, 7],
[1, 1, 0, 4, 1, 5, 8],
[2, 1, 0, 7, 8, 6, 3],
[3, 1, 0, 8, 5, 2, 6]])
mats = np.array([[1.0, 0.3]])
loads = np.array([
[2, 0.0, 1.0],
[3, 0.0, 1.0],
[6, 0.0, 2.0]])
data = {"nodes": nodes,
"cons": cons,
"elements": elements,
"mats": mats,
"loads": loads}
### Run the simulation
disp = solids_auto(data)
plt.show()
Save it as example_solidspy.py
and run it in your terminal:
python example_solidspy.py
This project is licensed under the MIT license. The documents are licensed under Creative Commons Attribution License.
To cite SolidsPy in publications use
Juan Gómez, Nicolás Guarín-Zapata (2018). SolidsPy: 2D-Finite Element Analysis with Python, <https://github.com/AppliedMechanics-EAFIT/SolidsPy>.
A BibTeX entry for LaTeX users is
@software{solidspy,
title = {SolidsPy: 2D-Finite Element Analysis with Python},
author = {Gómez, Juan and Guarín-Zapata, Nicolás},
year = 2018,
keywords = {Python, Finite elements, Scientific computing, Computational mechanics},
abstract = {SolidsPy is a simple finite element analysis code for
2D elasticity problems. The code uses as input simple-to-create text
files defining a model in terms of nodal, element, material and
load data.},
url = {https://github.com/AppliedMechanics-EAFIT/SolidsPy}
}