Metadata-Version: 2.4
Name: fedoo
Version: 0.8.0
Summary: Finite elements library
Author-email: 3MAH <set3mah@gmail.com>
License: GPLv3
Project-URL: Documentation, https://3mah.github.io/fedoo-docs/
Project-URL: Bug Tracker, https://github.com/3MAH/fedoo/issues
Project-URL: Source Code, https://github.com/3MAH/fedoo
Keywords: FEM,Structural mechanics
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=2.00
Requires-Dist: scipy
Requires-Dist: simcoon>=1.11.0
Provides-Extra: all
Requires-Dist: fedoo[ipc,plot,solver,test]; extra == "all"
Provides-Extra: ipc
Requires-Dist: ipctk; extra == "ipc"
Provides-Extra: solver
Requires-Dist: pypardiso; (platform_machine != "arm64" and platform_machine != "aarch64") and extra == "solver"
Requires-Dist: scikit-umfpack; (platform_machine == "arm64" or platform_machine == "aarch64") and extra == "solver"
Provides-Extra: plot
Requires-Dist: matplotlib; extra == "plot"
Requires-Dist: pyvista[io]; extra == "plot"
Provides-Extra: simcoon
Requires-Dist: simcoon>=1.11.0; extra == "simcoon"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: gui
Requires-Dist: pyvistaqt; extra == "gui"
Requires-Dist: pyside6; extra == "gui"
Provides-Extra: other
Requires-Dist: pandas; extra == "other"
Requires-Dist: microgen; extra == "other"
Dynamic: license-file

# fedoo
Finite element library
[![FEDOO Logo](https://github.com/3MAH/fedoo/blob/master/fedOOLogos.png)](https://github.com/3MAH/fedoo)

About
-----

Fedoo is a free open source Finite Element library developed in Python.
It is mainly dedicated for mechanical problems but is easily developpable for other kind of problems (thermal laws already included).
One of the main application of fedoo is to simulate the mechanical response of heterogeneous materials. 
For that purpose, fedoo is part of the 3mah set that also include microgen for the CAD and meshing of heterogeneous materials 
and simcoon for the non linear material constitutive models in finite strain. 

Here are the main features:

- *New* A full interactive viewer is now included to improve the results visualization.
- Entirely written in Python 3
- Implicit finite element Solver for Static and Dynamics poblems
- Finite strain constitutive laws based on the simcoon library (simcoon is developped in C++ allowing a fast execution)
- Geometrical non linearities based on the simcoon library 
- Wide constitutive equation library including composites law, elasto-plastic law, ...
- Include many types of elements like 2D, 3D, beam, plate, cohesive elements, ...
- Homogeneisation: Easy application of periodic boundary conditions and fast automatic extraction of mean tangent matrices
- Embedded results visualization using the powerfull pyvista library
- Multi-point constraints
- Easy scripting
- Good compromise between a reasonable execution time and an open and lisible code. fedoo is not the fastest finite element software and doesn't intend to be, but a particular attention is paid 
  to the computational cost.
- Contact in 2D and 3D, Self contact
- And many other....

|               |                                                                                                                                        |
|---------------|----------------------------------------------------------------------------------------------------------------------------------------|
| PyPI package  | [![PyPI version](https://badge.fury.io/py/fedoo.svg)](https://badge.fury.io/py/fedoo)                                                  |
| Conda package | [![Conda](https://anaconda.org/set3mah/fedoo/badges/version.svg)](https://anaconda.org/set3mah/fedoo)                                  |
| Documentation | [![Documentation](https://github.com/3MAH/fedoo/actions/workflows/build-doc.yml/badge.svg)](https://3mah.github.io/fedoo-docs/)    |
| License       | [![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)                                |
| Website       | [![Website](https://img.shields.io/badge/website-3MAH-blue)](https://3mah.github.io/)                                                  |


Documentation
--------------
The [documentation](https://fedoo.readthedocs.io/en/latest/?badge=latest) is
provided by readthedocs at
[https://fedoo.readthedocs.io](https://fedoo.readthedocs.io).


Installation
--------------
Installation with conda with recommanded dependencices: 
```
conda install -c conda-forge -c set3mah fedoo
```

Minimal installation with pip:
```
pip install fedoo
```

Installation with pip including recommanded dependencies:
```
pip install fedoo[all]
```

In mac OS make sure to use petsc4py (included in the conda package) or
scikit-umfpack. To install scikit-umfpack, it is recommanded to use pip
(the conda package is outdated):
```
pip install scikit-umpack>=0.41 
```

For performance considerations, it is in general strongly recommended to make
sure that numpy is correctly installed using a fast implementation of BLAS
(*MKL* for windows or linux or *Accelerate* for mac OS).

In mac OS, the best way to take the most of MacOs accelerate framework
is to install numpy from sources first:
```
pip install cython pybind11
pip install --no-binary :all: numpy
```

Also, make sure that the default number of threads is not leading to
performance degradations: using explicit number of threads might help,
see below for extensive control of threads number.
```
#Set the number of threads
import os

n_threads = 4
os.environ["OMP_NUM_THREADS"] = f"{n_threads}"
os.environ["OPENBLAS_NUM_THREADS"] = f"{n_threads}"
os.environ["MKL_NUM_THREADS"] = f"{n_threads}"
os.environ["VECLIB_MAXIMUM_THREADS"] = f"{n_threads}"
os.environ["NUMEXPR_NUM_THREADS"] = f"{n_threads}"
```
