by Qingfeng Xia
BSD licensed
version 0.1 2019-06-17
https://github.com/qingfengxia/CAE_pipeline
Why CAE pipeline/automation is needed? look at the current process of engineering design and optimization process.
However, it is common to have several design iterations. If the geometry topology changed, I need to repeat the process. There are lots of tedious repeating labour work. From a programmer's perspective, there must be something wrong. Nevertheless, if the design is complex of thousands of parts, manually fixing the broken workflow is not practical. An automated working flow is essential to improve productivity.
In the past 3 years, I have been working on automated physical simulation to accelerate my engineering design process. It works similarly with Ansys workbench& ACT, but build
see also my presentation at Fenics 18: Automated Mechanical Engineering Design using Open Source CAE Software Packages
In the future, an intelligent engineering design process is envisaged
Those are github projects I developed to enable automated CAE.
- FreeCAD's CFD module https://github.com/qingfengxia/Cfd : to tie OpenFOAM and FreeCAD together
- Parallel Preprocessor: a parallel preprocess tool to prepare large assembly for CAE simulation
- FenicsSolver : a multi-physics FEM solver based on Fenics
- book under-writing: Design large scale Research Software in C++ and Python
- python_wrap : Various ways to wrapping C/C++ for Python
Those tools are selected mainly for their friendly python interfacing, esp, FreeCAD and Salome GUI can record operation into Python script.
- FreeCAD: geometry building and case setup for FEM and OpenFOAM CFD solver
- Gmsh: meshing and mesh format translation
- MOAB — The Mesh-Oriented datABase, command line interface for mesh file conversion
meshio-convert
(frommeshio
python package) can translate the salome Med format into dolfin format, however, it seems boundary and subdomains are not converted.
- FEM solvers such as Fenics/dolfin, other like Elmer, MFem, see a full list:
- CFD solvers such as OpenFOAM, see a full list of open source CFD solver:
- Multiple solver coupling: PreCICE:
-
Production life-cycle managment (PLM):
-
research data search, data miming, etc:
Salome platform has almost all the component to cover the workflow
geometry, meshing, FEM (Code_Aster) and CFD solver (Code_Saturne), paraview integrated for visualization.
Here is a demonstration of labyrinth seal design workflow, automated by Python script:
-
*_parameter.py
: parameter define the geomtrical parameters and topologyThis python file will be shared among all different tools, so it should be python2 and python3 compatible, keep as simple as possible with parameter and bool switches.
-
*_goemetry.py
: generate geometry from FreeCADThis is a example geometry building script using FreeCAD.
-
mesh_*.py
: meshing and grouping, esp for boundary layerThe first part is to build the geomery (a section of labyrinth seal), alternatively, you can mport geometry file into Salome. Be careful, CAD tools default to mm while meshing tool using metre, Salome platform may prompt you to let you select the length unit. This script also do meshing, group and name solids and boundary faces, export.
-
convert_mesh.sh
: A shell script for automatically meshing generation/conversion.meshing format conversion can be done here (gmsh is excellent for mesh format coversion )
-
solver setup
A template of solver setup file should be ready, referring to the predefined mesh file name, so mesh file can be updated automatically. As long as the boundary group names (as the unique ID of a group of boundary faces) are not changed, a new simulation can be done without interference.
-
run the solvers
Tf there is multiple solvers in a coupling simulation, a bash script can start all solvers properly.
-
*_plot.py
: read result and post_processing for 3D viz and 2D plot for reporting.2D in
matplotlib
, 3D usingparaview
, you can record the GUI operation in python file (macro file) and adapt the python code for paraview-catalyst remote
-
2D geometry from FreeCAD: create a close wire in sketcher workbench, keep this sketch selected, create face from wire in Part menu of the Part workbench. This face is a 2D geometry ready to be exported to meshing tools.
-
Building connected solids (only one face connecting two solid in contact) for a multi-solid part assembly, is essential for CFD simulation. It can be achieved by boolean fragments
-
FreeCAD boolean fragments (part -> split -> fragments) , save compound shape into brep format. Brep format file works without any further operation in Salome (which can also do boolean fragment, but harder in respect to user interface), while step file does not work straightly after import in Salome.
- if
parameter.py
file changed, salome must be restarted to get updating parameters to take effect. In the early development stage, the content of parameter.py should be copied into the salome meshing script. Therefore, single script can be editted, reloaded and tested quickly without restart Salome. - In Salome, "Volume group" must be defined for the mesh, otherwise, only surface mesh is exported (checking by load into gmsh GUI) by default to MED mesh format.
- focus on GUI operation until the first perfect meshing is confirmed by CFD solver, then focus on script
Some commercial tools can be used like Ansys Workbench, but there is cell number limit of 0.5 million for CFD and non-commercial usage restriction.
Salome (export as *.med mesh file) -> gmsh (command line converting into gmsh native *.msh format) -> OpenFOAM (to foam mesh format then converting to Ansys Fluent *.msh format)
here is the example bash script to mesh for Ansys Fluent
# change geometry in parameter py file
# run FreeCAD_build_geometry.py if you build geometry and export CAD file using FreeCAD
# here abs path to salome and meshing script must be used! adapt path into your own
/opt/SALOME-8.5.0-UB16.04-SRC/salome -t /media/sf_OneDrive/gitrepo/seal_design/salome_mesh_seal.py
# assuming gmsh4 is on your search path, I rename v4 as gmsh4 as I have other version
gmsh4 -format msh2 -o /media/sf_OneDrive/cases/sealmesh/Mesh_p_3d.msh -save /tmp/Mesh_1.med
# copy a openfoam tutorial case into somewhere, and delete the mesh folder
#
# gmshToFoam need a case file structure to work
cd /media/sf_OneDrive/cases/sealmesh/
# assuming you have source openfoam bashrc into your ~/.bashrc
gmshToFoam Mesh_p_3d.msh
foamMeshToFluent
mv fluentInterface/sealmesh.msh ../fluentCFD/Mesh_p_5deg_3D.msh
# in Ansys workbench, you can `replace mesh` in GUI to reuse the previous case setup
# for other solver, it may be possible to run the solver without launch GUI
replace mesh while keep case setup in Fluent.
Replace Mesh...
in the Setting Up Domain
ribbon tab Zones
group box, or Mesh -> Replace ...
menu
Note that the data interpolation is done automatically during the replacement if data exists
There should be CLI command for mesh replacement, it may be useful in remote HPC.
- CFD solver is very sensitive to mesh quality, quad and hex mesh is preferred.
- Compressible flow is very sensitive to initial condition
Some fem solvers just accept UNV format (I-DEAS) export from Salome.
Salome (export as *.med mesh file) -> gmsh (command line converting into gmsh native msh format) -> dolfin-convert
converting into FEniCS xml mesh format.
todo!
link to example case repo: https://github.com/qingfengxia/quasi_static_metal_cutting
That linked repo has code for the journal paper published: QingfengXia, David R.H. Gillespie, Quasi-static finite element modelling of thermal distribution and heat partitioning for the multi-component system of high speed metal cutting, Journal of Materials Processing Technology, 2019, https://doi.org/10.1016/j.jmatprotec.2019.116389
This work derived from my independent research during my stay in Oxford University, using most of my after-work time. A very loose license (BSD) should be adopted, to let user to adapt this code by broadest users.
If you find this information useful, do refer to our paper and presentation. paper link