Tulip (Transmission line per unit length and in-cell parameters) is a solver to obtain the per unit length (PUL)
- Calculation of p.u.l
$C$ and$L$ matrices. - Third order isoparametric elements.
- Support for dielectric materials.
- Open boundary conditions.
- Works on closed and open MTLs.
- Multilevel domain decomposition.
- Uses a modified MFEM solver engine available here.
- Result visualization with Paraview.
- Start from
.stepCAD files with the integrated gmsh workflow.
Compilation needs vcpkg with the packages stated in the vcpkg.json manifest.
Additionally needs:
- mfem (with the version pointed by the external/mfem-geg submodule)
Configure and build presets are available. For instance, to configure in windows you can use
cmake
-DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE
--preset "msbuild-vcpkg"
-S <project folder>
-B <build folder>Once compiled, test cases can be launched from the project root folder, with
ctest --test-dir ./<build folder> --output-on-failureMost cases will store results in the Results folder.
Please check the codes in test folder for information on the validation cases and their expected tolerances.
These commands require a working Docker installation and permission to create
directories beside the input file. Run make help to see the commands from the
terminal.
Build the reusable container images and export the runnable bundle to dist:
make buildThis creates the runtime image tulip:latest, the test image
tulip-test:latest, and the standalone binary bundle in dist/.
Create a compressed Ubuntu 26.04 release bundle. By default it uses the
current Git tag or commit as its version; set VERSION to provide the release
version explicitly:
make release-ubuntu VERSION=1.2.3The resulting archive is written to
release/tulip-1.2.3-ubuntu-26.04.tar.gz.
Run the complete test suite from the prebuilt image:
make testRun one GoogleTest case using its fully qualified name:
make test-one TEST=SuiteName.TestNameRun an input file in the container. A new results directory is created beside the input file and its path is printed when execution finishes. The input's directory is copied inside the container so relative CAD and mesh references continue to work.
make run FILE=testData/empty_coax/empty_coax.tulip.input.jsonFor paths without spaces, the input can also be passed positionally:
make run testData/empty_coax/empty_coax.tulip.input.jsonThe generated directory is named <case>.tulip-output.XXXXXX and contains all
Tulip output, including the results JSON and the Results/ directory. After
make build, both make test and make run use the already compiled images
and do not rebuild Tulip.
If the source code, Dockerfile, dependencies, or test fixtures change, run
make build again to refresh the images before running tests or analyses.
Call tulip from command line as,
tulip.exe -i <input file>The input file format is described here.
By default, tulip will generate a file called matrices.tulip.out.json which contains the N integer in Conductor_N. Conductor_0 is used as reference.
These results have been cross-compared [here][test/DriverTest.cpp] to match with Ansys Maxwell.
Comparison with SACAMOS does not produce satisfactory because of the different underlying analytical assumptions that are made.
This means two results for each conductor different from zero: with and without accounting for dielectrics, used to compute the p.u.l five_wires case visualized in Paraview with (above) and without (below) considering dielectrics.
tulip is licensed under GPL v2. Its copyright belongs to the University of Granada.
This project is funded by the following grants:
- HECATE - Hybrid ElectriC regional Aircraft distribution TEchnologies. HE-HORIZON-JU-Clean-Aviation-2022-01. European Union.
- ESAMA - Metodos numericos avanzados para el analisis de materiales electricos y magneticos en aplicaciones aerospaciales. PID2022-137495OB-C31. Spain.

