Skip to main content

User-friendly Python library that simplifies finite element analysis.

Project description

EasyFEA_banner

Overview

EasyFEA is a user-friendly Python library that simplifies finite element analysis. It is flexible and supports different types of simulation without requiring users to handle complex PDE formulations. The library currently supports four specific simulation types:

  1. ElasticSimu (static and dynamic): Examples in /examples/Elastic, /examples/Dynamic and /examples/Contact.
  2. BeamSimu (static Euler-Bernoulli): Examples in /examples/Beam.
  3. ThermalSimu (stationary and transient): Examples in /examples/Thermal.
  4. PhaseFieldSimu: (quasi-static phase field) Examples in /examples/PhaseField.

All examples are available here.

For each simulation, users create a mesh and a model. Once the simulation has been set up, defining the boundary conditions, solving the problem and visualizing the results is straightforward.

Numerous examples of mesh creation are available in the examples/Meshes folder.

The simplest and quickest introduction is shown below and is available in examples/HelloWorld.py.

from EasyFEA import (Display, Mesher, ElemType,
                     Materials, Simulations)
from EasyFEA.Geoms import Point, Domain

# ----------------------------------------------
# Mesh
# ----------------------------------------------
L = 120 # mm
h = 13

domain = Domain(Point(), Point(L,h), h/6)
mesh = Mesher().Mesh_2D(domain, [], ElemType.QUAD4, isOrganised=True)

# ----------------------------------------------
# Simulation
# ----------------------------------------------
E = 210000 # MPa
v = .3
F = -800 # N

mat = Materials.Elas_Isot(2, E, v, planeStress=True, thickness=h)

simu = Simulations.ElasticSimu(mesh, mat)

nodesX0 = mesh.Nodes_Conditions(lambda x,y,z: x==0)
nodesXL = mesh.Nodes_Conditions(lambda x,y,z: x==L)

simu.add_dirichlet(nodesX0, [0,0], ["x","y"])
simu.add_surfLoad(nodesXL, [F/h/h], ["y"])

simu.Solve()

# ----------------------------------------------
# Results
# ----------------------------------------------
Display.Plot_Mesh(mesh)
Display.Plot_BoundaryConditions(simu)
Display.Plot_Result(simu, 'uy', plotMesh=True)
Display.Plot_Result(simu, 'Svm', plotMesh=True, ncolors=11)

Display.plt.show()

License

Copyright (C) 2021-2025 Université Gustave Eiffel.

EasyFEA is distributed under the terms of the GNU General Public License v3.0 or later, see LICENSE.txt and CREDITS.md for more information.

Installation

EasyFEA can be easily installed from PyPI using pip, compatible with Python versions 3.9 through 3.12:

pip install EasyFEA

You can also install EasyFEA with the source code using the pip install . command in the downloaded or cloned EasyFEA folder.

Dependencies

EasyFEA uses several libraries such as NumPy and Gmsh - as such, the following projects are required dependencies of EasyFEA:

  • numpy - Fundamental package for scientific computing with Python.
  • gmsh (>= 4.12) - Three-dimensional finite element mesh generator.
  • scipy - Fundamental package for scientific computing in Python.
  • matplotlib - Plotting package.
  • pyvista - Plotting package.
  • numba - Compiling Python code using LLVM.
  • pandas (3.9 <= Python <= 3.12) - Powerful data structures for data analysis.
  • imageio and imageio[ffmpeg] - Library for reading and writing a wide range of image, video, scientific, and volumetric data formats.

For detailed information on installing numba, refer to the Numba Installation Guide.

Optional Dependencies

EasyFEA includes a few optional dependencies for reducing resolution time or for performing DIC:

  • pypardiso (Python > 3.8 & Intel oneAPI) - Library for solving large systems of sparse linear equations.
  • petsc and petsc4py - Python bindings for PETSc.
  • opencv-python - Computer Vision package.

Naming conventions

EasyFEA uses Object-Oriented Programming (OOP) with the following naming conventions:

  • PascalCasing for classes
  • camelCasing for properties
  • Snake_Casing or Snake_casing for functions/methods

In this library, objects can contain both public and private properties or functions.

Private parameters or functions are designated by a double underscore, such as __privateParam. In addition, parameters or functions beginning with an underscore, such as _My_Function are accessible to advanced users, but should be used with caution.

Citing EasyFEA

If you are using EasyFEA as part of your scientific research, please contribute to the scientific visibility of the project by citing it as follows.

Matthieu Noel. EasyFEA: a user-friendly Python library that simplifies finite element analysis. 2024, https://hal.science/hal-04571962

Bibtex:

@softwareversion{noel:hal-04571962v1,
  TITLE = {{EasyFEA: a user-friendly Python library that simplifies finite element analysis}},
  AUTHOR = {Noel, Matthieu},
  URL = {https://hal.science/hal-04571962},
  NOTE = {},
  INSTITUTION = {{Universit{\'e} Gustave Eiffel}},
  YEAR = {2024},
  MONTH = Apr,
  SWHID = {swh:1:dir:ffb0e56fe2ce8a344ed27df7baf8f5f1b58700b5;origin=https://github.com/matnoel/EasyFEA;visit=swh:1:snp:88527adbdb363d97ebaee858943a02d98fc5c23c;anchor=swh:1:rev:ee2a09258bfd7fd60886ad9334b0893f4989cf35},
  REPOSITORY = {https://github.com/matnoel/EasyFEA},
  LICENSE = {GNU General Public License v3.0 or later},
  KEYWORDS = {Finite element analyses ; Computational Mechanics ; Numerical Simulation ; Phase field modeling of brittle fracture ; Linear elasticity ; Euler-Bernoulli beam ; DIC - Digital Image Correlation ; User friendly ; Object oriented programming ; Mesh Generation},
  HAL_ID = {hal-04571962},
  HAL_VERSION = {v1},
}

Contributing

EasyFEA is an emerging project with a strong commitment to growth and improvement. Your input and ideas are invaluable to me. I welcome your comments and advice with open arms, encouraging a culture of respect and kindness in our collaborative journey towards improvement.

To learn more about contributing to EasyFEA, please consult the Contributing Guide.

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

easyfea-1.3.1.tar.gz (198.3 kB view details)

Uploaded Source

Built Distributions

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

easyfea-1.3.1-py3-none-any.whl (207.8 kB view details)

Uploaded Python 3

EasyFEA-1.3.1-py3-none-any.whl (207.5 kB view details)

Uploaded Python 3

File details

Details for the file easyfea-1.3.1.tar.gz.

File metadata

  • Download URL: easyfea-1.3.1.tar.gz
  • Upload date:
  • Size: 198.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.8

File hashes

Hashes for easyfea-1.3.1.tar.gz
Algorithm Hash digest
SHA256 f1d3bdf0dbb9e9e3d3096812fe6f95670cdfca2035a94e25fa0e79e4dfceacc7
MD5 7a4775bd735ff497b9ceea3d841d76a5
BLAKE2b-256 1c0504029122528f5ea12afaa51b70cc5d0362ab3338afefd759a70901e55c67

See more details on using hashes here.

File details

Details for the file easyfea-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: easyfea-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 207.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.8

File hashes

Hashes for easyfea-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 33840fe214aa261e6008ba6a7b7adbb1c69f42abbb0865b0a9022c5f5879b30b
MD5 df6e9e0f6d9108a7d1c6d3216a1e9998
BLAKE2b-256 5a15212a510125b1fc9d1e71dd9546fa20c5b7553dd3f5a7c80c001767ee8054

See more details on using hashes here.

File details

Details for the file EasyFEA-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: EasyFEA-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 207.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.8

File hashes

Hashes for EasyFEA-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 227b0ae40141c40e542c1f8545ae19fa8c93d0ff7eeee1589469e78943830eaf
MD5 ec6d11659844594662e152fecbf9a34d
BLAKE2b-256 d60aded9905986bacd856e3c75a394337c8af48494a7fabb78f5574a391a856b

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