This repository contains the code and examples for the publication
M. Jäger, S. Wartzack,
Nodal force distribution of moments on arbitrarily shaped geometries without multi-point constraints,
Engineering with Computers (2025), DOI: 10.1007/s00366-025-02118-y
Run any of the example files, and once finished, the gmsh UI will open.
Result views for all load cases, with and without force compensation, will be generated and displayed.
You can copy any example file and modify the loaded model. You can specify the element size and mesh order to be used. For example:
import_and_mesh('step/cylindrical_surface.stp', element_size=0.5, mesh_order=1)Loads are specified using the DimTag notation of gmsh, along with a 3x1 vector for each load.
For example:
load_case_dimTags: List[List[Tuple[int, int]]] = [[(2, 1), (2, 2)],
[(2, 1)]]
load_cases: List[np.ndarray] = [np.array([[2000, 0, 3000],
[1000, 0, 1000]]),
np.array([[3000, 700, -1000], ])]load_case_dimTags- A list of load cases, where each element contains a list of tuples specifying the surface in
gmshto which the load is applied. (2, 1)means the 2nd dimension (surface), face no. 1.- To determine the face number in
gmsh- Run
gmsh.fltk.run(), - Load the STEP file via
File -> Open - Go to
Tools -> Options -> Geometry - Activate
Surface labels
- Run
- A list of load cases, where each element contains a list of tuples specifying the surface in
- load_cases
- A list of load cases, where each element contains a NumPy array with shape
(N_LOADS, 3)representing the loads in Nm. - For each load case,
N_LOADSmust match the length of the list of surfaceDimTags.
- A list of load cases, where each element contains a NumPy array with shape
To hide some results, simply uncheck the views you want to hide under Modules -> Post-processing.

- src
common.py- Methods for importing STEP files and plotting.moment2force.py- The method published in the paper.
- examples
- settings
colormap_orange.opt- Configuration file for visualization.
- step - Contains the 3D data of the surfaces and the truss node.
square_surface.py- Example 3.1 and 3.2cylindrical_surface.py- Example 3.3 and 3.4arbitrary_surface.py- Example 3.5truss_node.py- Example 4
- settings