ADA - Assembly for Design & Analysis
A python library for structural analysis and design that focus on interoperability between IFC and various Finite Element formats.
This library is still undergoing significant development so expect there to be occasional bugs and breaking changes.
Try the latest build online here
(clicking the link above will open a jupyter notebook client in the cloud using the latest version of adapy)
- Feel free to start/join any informal topic related to adapy here.
- Issues related to adapy can be raised here
Here are the steps necessary to install the ada package
Note that it is recommended to create an isolated environment for the installation. You can create a new environment like so:
conda create -n adaenv activate adaenv
To install ada using pip
First you need to have installed
pythonocc-core from conda-forge.
conda -c conda-forge ifcopenshell pythonocc-core
After the conda-forge dependencies are installed you can install ada using
pip install ada-py
(which will automatically include all dependencies from PyPi)
Using Conda (Note! Work in progress)
Note! Conda installation is not yet set up.
Some example of using the ada package
Create an IFC file
The following code
from ada import Assembly, Part, Beam a = Assembly("MyAssembly") / (Part("MyPart") / Beam("MyBeam", (0,0,0), (1,0,0), "IPE300")) a.to_ifc("C:/temp/myifc.ifc")
MyAssembly (IfSite) MyPart (IfcBuildingStorey) MyBeam (IfcBeam)
Create and execute a FEM analysis in Calculix, Code Aster and Abaqus
This example uses a function
beam_ex1 from here that returns an
Assembly object ready to be written to FEM.
from ada.param_models.fem_models import beam_ex1 a = beam_ex1() a.to_fem("MyCantilever_abaqus", "abaqus", overwrite=True, execute=True, run_ext=True) a.to_fem("MyCantilever_calculix", "calculix", overwrite=True, execute=True) a.to_fem("MyCantilever_code_aster", "code_aster", overwrite=True, execute=True)
after the execution is finished you can look at the results (in Paraview or Abaqus CAE for the results from calculix and/or abaqus respectively)
or if your prefer to keep it in python here is a way you can use meshio to read the results from calculix and do your postprocessing using python only.
from ada.config import Settings import meshio vtu = Settings.scratch_dir / "MyCantilever_calculix" / "MyCantilever_calculix.vtu" mesh = meshio.read(vtu) # Displacements in [X, Y, Z] at point @ index=-1 print('Calculix:',mesh.point_data['U'][-1]) rmed = Settings.scratch_dir / "MyCantilever_code_aster" / "MyCantilever_code_aster.rmed" ca_mesh = meshio.read(rmed, 'med') # Displacements in [X, Y, Z] at point @ index=-1 print('Code Aster:',ca_mesh.point_data['DISP - 1'][-1][:3])
The current reasoning is to work with a base representation of beam/plates and have the ability to easily create a FEM representation of any of the base objects in 1D (beam elements), 2D (shell elements) or 3D (elements) using your own meshing recipes (i.e. not just build a mesh, but a recipe for building meshes).
The above example assumes you have installed Abaqus and Calculix locally on your computer.
To set correct paths to your installations of Abaqus or Calculix you wish to use there are a few ways of doing so.
- Add directory path of abaqus.bat or ccx.exe to your system path.
- Add directory paths to system environment variables. This can be done by using the control panel or running the following from a cmd prompt with administrator rights:
setx ADA_abaqus_exe <path to your abaqus.bat> setx ADA_ccx_exe <path to your ccx.exe>
- Set parameters in python by using environment variables or the ada.config.Settings class, like so:
import os os.environ["ADA_ccx_exe"] = "<path to your ccx.exe>" os.environ["ADA_abaqus_exe"] = "<path to your abaqus.bat>"
from ada.config import Settings Settings.fem_exe_paths["ccx"] = "<path to your ccx.exe>" Settings.fem_exe_paths["abaqus"] = "<path to your abaqus.bat>"
For installation files of open source FEM software such as Calculix and Code Aster, here are some links:
- https://github.com/calculix/cae/releases (calculix CAE for windows/linux)
- https://code-aster-windows.com/download/ (Code Aster for Windows Salome Meca v9.3.0)
- https://www.code-aster.org/spip.php?rubrique21 (Code Aster for Linux)
- https://salome-platform.org/downloads/current-version (Salome v9.6.0 for windows/linux)
For developers interested in contributing to this project feel free to make a fork, experiment and create a pull request when you have something you would like to add/change/remove.
Before making a pull request you need to lint with, isort, flake8 and black.
pip install black isort flake8 isort . flake8 . black .
Kristoffer H. Andersen