Why FeenoX is different

Jeremy Theler

2025-12-01-26f4122

Get PDF version

Abstract

This white paper answers the question “why is FeenoX different?” First of all, we have to say what FeenoX is. Then, we must state what we are comparing FeenoX against so we can finally explain why it is indeed different. TL; DR: FeenoX is different because there is nothing else that matches 100% FeenoX’s design and implementation.

1 What FeenoX is

As explained in its website, FeenoX is…

…a cloud-first free no-fee no-X uniX-like finite-element(ish) computational engineering tool.

or, in similar words,

…a tool to solve engineering-related problems using a computer (or many computers in parallel) with a particular design basis.

We will go into (some) of the details in sec. 3, but it is helpful to think of FeenoX as a transfer function between one or more input files and zero or more outputs:

                            +------------+
 mesh (*.msh)  }            |            |            { terminal
 input (*.fee) } input ---> |   FeenoX   |---> output { data files
 data file     }            |            |            { post (vtk/msh)
                            +------------+

Here, FeenoX is a binary executable which can be easily installed in a Debian or Ubuntu GNU/Linux server (remember it is a cloud-first tool) with

apt install feenox

Let us consider for instance the following input file that solves linear elasticity:

PROBLEM mechanical MESH box.msh

T(x,y,z) = sqrt(x^2 + y^2) + z   # non-trivial temperature distribution
E = 200e3 * (1-T(x,y,z)/300)     # temperature-dependent Young modulus
nu = 0.3

BC left fixed           # left face fully fixed
BC top  p=1e4*(1+x)     # top face with a trapezFoidal load

WRITE_RESULTS FORMAT vtu

Some preliminary notes:

2 What can FeenoX do that cannot be done with Tool \mathcal{X}?

In principle, nothing. FeenoX provides a Turing-complete system so theoretically any computable problem can be solved. Chances are that Tool \mathcal{X} also provides a Turing-complete system as well. So the question is ill-posed. The real question we need to ask is:

How much engineering effort is needed in order to solve problem y with FeenoX and with Tool \mathcal{X}?

Well, I do not know anything about Tool \mathcal{X}. But I do know everything about FeenoX and first of all, FeenoX is free1 software and open source so, again in principle, any engineer has the freedom to modify (or the freedom to hire someone to modify) the code to suit her needs.

But secondly and more importantly, FeenoX has been designed and implemented in such a way that solving problem y can be performed by different engineers as flexibly and efficiently as possible (i.e. in different ways for each engineer). Let us dive into some details in the next section.

For instance, given the question “what is the most efficient way of solving a maze?” there might be people that just say “Dijkstra” and move on. These are the same people that think they know more than they do and do not know what they do not know—especially regarding engineering challenges—as illustrated in FeenoX’s tutorial about solving mazes without AI.

3 Design and implementation

FeenoX is a third-system effect. A first idea came up in the late 2000s. Since it had some good features, a second version with a lot of features appeared in the early 2010s. After almost one decade later, with all the lessons learned, the third version—named FeenoX—was re-written from scratch as a subject of a PhD thesis in Nuclear Engineering “Neutron transport in the cloud.”2

The design went through a pattern which is common in software development, namely

  1. A customer writes a document named “Software Requirements Specification” which acts as a request for quotation of an alleged tender where the requirements that the provider has to fulfill are clearly stated and explained.
  2. One or more providers write a document named “Software Design Specification” that acts as an technical offer for the potential tender where each customer requirement is addressed and the way the provider proposes to design and implement each feature is explained.

For FeenoX, these two documents—the SRS and the SDS—were written by the same person. But nevertheless, they help organize and understand the rationale behind the design and the implementation.

The main items of FeenoX’s design basis are

  1. Cloud-first remote execution
  2. Scalability with distributed-memory parallelization (MPI)
  3. Self-descriptive English keyword-based plain-text input file
  4. Scriptability and traceability
    1. Parametric and optimization studies
  5. Straightforward integration with
    1. Web-based UX/UIs
    2. Large Language Models
    3. Rest APIs
    4. Standard post-processing tools
    5. Markdown and LaTeX reporting

Technically speaking, FeenoX is a back end which can use zero or more front ends (fig. 1). These front ends can range from a graphical user interface that creates a proper input file given the user point-and-click choices down to an agent using an augmented Large Language Model to create the input from a problem formulated in natural (engineering) language.

Figure 1: Conceptual illustration of the difference between a front end and a back end ©bluecoders.

Due to the way FeenoX is designed to read a text-based input file (and eventually mesh and data files), it is perfectly suited to be run in remote cloud servers. The server just needs to get the feenox executable, either by (from easier and less flexible to more complex and more flexible)

and either get or create on the fly the input and the mesh files. These are actual files that can be uploaded from a client to a server, copied from server to server and/or stored in any kind of medium until needed. The same idea applies to the output, which being a set of files, can be downloaded, copied or stored at will. There are no binary, database nor proprietary lock ins. Hence, the implementation of a remote REST API to handle file transfers from the client to the server back and forth with a (possibly parallel) execution of feenox in the middle is (almost) straightforward.3

The last three paragraphs illustrate item 1 (cloud-first remote execution) and 5.c (REST APIs).

Since the algebraic solvers in FeenoX are based on PETSc—if the server has enough computational power–it can be launched in parallel using the MPI standard. This architecture allows a large range of problem sizes to be tackled, from simple coarse cases up problems to millions of degrees of freedom since—as long as the server is part of an HPC cluster—the domain can be split not only among several processors but also among several nodes. This “distributed memory parallelization” approach is not bounded by the maximum memory of a single host as the “shared memory parallelization” scheme used by OpenMP.

The last paragraph illustrates item 2 (scalability with distributed-memory parallelization).

A great deal of effort was put into designing the syntax of the input files. The SDS discusses several “rules” for this syntax, but one of the most important ideas is the one from Alan Kay: “Simple things should be simple, complex things should be possible.” Another one is that the input file should try to match as closely as possible the “engineering” formulation of the problem. The inputs needed to solve two NAFEMS benchmark problems in fig. 2 and fig. 3 illustrate these concepts.

Figure 2: One-to-one correspondence between the “engineering” formulation and the FeenoX input file for the NAFEMS LE10 problem.
Figure 3: The NAFEMS LE11 problem asks for an algebraically-defined temperature distribution which can be written as an ASCII expression in the input file.

The last paragraph and figures 2-3 illustrate item 3 (self-descriptive English keyword-based plain-text input file).

Since the input files are based on English words and algebraic expressions, they are amenable to be traced by version control systems like Git. And since the mesh files come from Gmsh (actually from any other mesher or converter that can write in .msh format) that also uses English keywords in its input .geo language (or in its Python API), in principle the set of files that completely define a problem can be tracked with Git-like tools. Even more, FeenoX’s source code is also tracked with Git and the feenox executable reports its version and checksum when invoked with -v so the same set of results can be deterministically obtained:

$ feenox --versions
FeenoX v1.2.3-gf95b352 
a cloud-first free no-fee no-X uniX-like finite-element(ish) computational engineering tool

Last commit date   : Mon Sep 22 13:17:58 2025 -0300
Build architecture : linux-gnu x86_64
Compiler version   : gcc (Debian 14.2.0-19) 14.2.0
Compiler expansion : gcc -Wl,-z,relro -Wl,-z,now -I/usr/lib/x86_64-linux-gnu/mpich/include -L/usr/lib/x86_64-linux-gnu/mpich/lib -lmpich
Compiler flags     : -O3 -flto=auto -no-pie
GSL version        : 2.8
SUNDIALS version   : N/A
PETSc version      : PETSc Development Git Revision: v3.24.1-181-gbad27f0b03b Git Date: 2025-11-24 16:54:37 +0000
PETSc arch         : arch-linux-c-debug
PETSc options      : --download-mumps --download-scalapack --download-slepc --with-bison=0 --with-c2html=0 --with-debugging=1 --with-x=0 --download-parmetis --download-metis
SLEPc version      : N/A

A set of scripts calling

  1. the mesher (or other pre-processing tools),
  2. feenox
  3. post-processing tools

can help to get systematically traceable results. And even more so, since the output from FeenoX is 100% determined by the user to the extent that without instructions to create outputs (i.e. PRINT, WRITE_RESULTS, etc.) then there will not be any output whatsoever. There is no need to for complex regular expressions or weird filter to uncover numerical results buried inside thousands of useless lines of data. And since the post-processing formats are standard (VTU/VTK or .msh) then there are plenty of high-quality (and most of the time open source) libraries for further post-processing the results and obtaining just the numbers that the engineer needs, giving more importance to engineering time over computer time. Plus, again since the output is user-defined, programmatically creating plots, tables and even full engineering reports is straightforward.

Moreover, FeenoX can expand command-line arguments into strings in the input file which—since everything is an expression—may be parsed as numerical values. For example, consider the following input that solves a rectangular cantilevered beam and computes the difference of the maximum displacement with the value predicted by Euler’s theory:

PROBLEM mechanical 3D MESH cantilever-$1-$2.msh 

E = 2.1e11         # Young modulus in Pascals
nu = 0.3           # Poisson's ratio
F = 1000

BC left   fixed
BC right  Fz=-F  # traction in Pascals, negative z

# compute the vertical displacement using Euler's theory
L = 0.5    # length
b = 0.05   # base
h = 0.02   # width

I = b*h^3/12
euler = -F*L^3/(3*E*I)

# error in z-displacement (components are u,v,w) at the tip vs. number of nodes
PRINT nodes %e 100*abs((w(L,0,0)-euler)/euler) "\# $1 $2"
Figure 4: Parametric study of the difference between FEA and Euler’s beam theory.

The occurrences of $1 and $2 in the input file are expanded to the arguments given in the command line after the path to the input file. Hence, if we call Gmsh & FeenoX as

for e in tet4 tet10 hex8 hex20 hex27; do
  for c in 1 0.75 0.5 0.2 0.1; do
    gmsh -3 cantilever-$e.geo -clscale $c -o cantilever-$e-$c.msh -v 0
    feenox beam-euler.fee $e $c | tee -a beam-euler-$e.dat
  done
done

we can perform a parametric mesh convergence study. A result similar to fig. 4 can be easily created by standard open-source tools such as Gnuplot, Pyxplot or Matplotlib. Also, the combination of these parametric-ready features and the possibility of having sources (and material properties and boundary conditions) as algebraic expressions allow the verification of the solver with the Method of Manufactured solutions. Finally, by replacing a pre-defined parametric run with an optimization scheme one can smartly iterate over the parameter space to obtain optimal engineering designs.

The last four paragraphs illustrate item 4 (parametric and optimization studies) and 4.a (scriptability and traceability).

This design philosophy also enhances the creation of several front ends to match different needs. For instance, CAEplex is a web app that is integrated into the cloud-base CAD tool Onshape.

SunCAE is another front end that provides an open-source web interface that helps the user to create the mesh the CAD, create FeenoX’s input file, run the program and post-process the results. Even more, the input file can be edited online from the browser and, if the changes are simple enough, the web interface updates automatically. So for instance, if a boundary condition for a thermal problem says T=300~\text{K} then the input file would look like

BC bc1 T=300 GROUPS face9

a b

Figure 5: Illustration of the two-way connection between the UX and the input file in SunCAE. a — FeenoX input file in the online editor, b — Updated interface with the new value

But if the user changes it to 250 and clicks “Accept” then the interface will show the updated value (fig. 5). Further examples of FeenoX usage through SunCAE:

The last three paragraphs illustrate item 5.b (straightforward integration with web-based UX/UIs).

The fact that feenox is an executable (instead of a library) and that it reads the problem to be solved from an input file at runtime (instead of having to recompile each time) allows LLMs to assist the cognizant engineer in the process of stating the problem formulation in FeenoX’s terms. Because the input syntax is designed to look like engineering textbook descriptions (e.g., BC right T=300), LLMs can generate valid FeenoX inputs with high accuracy. Unlike proprietary “input decks” full of magic numbers, or GUI-based workflows that are invisible to an LLM, FeenoX provides a semantic bridge between natural language and computational physics. Furthermore, the feedback loop is tight: an LLM can write an input file, run FeenoX, capture the standard error output, detect syntax errors (e.g., a missing variable), correct the input, and run it again—all without human intervention. This enables “Agentic workflows” where the AI acts as a junior engineer, performing the setup and initial debugging before the human reviews the results.

The last paragraph illustrates item 5.a (straightforward integration with LLMs).

This repository is an example of Kay’s idea that complex thing should be possible. It contains an example of scripts and input files that estimate environmentally-assisted fatigue in piping joints of a nuclear power plant using

Everything is Git-tracked and all the results are deterministically computed by running a single script run.sh. By using specific LaTeX macros, reports containing references to isometric blue prints, time-dependent plots, spatial temperature distributions and result tables can be created programmatically (such as the one shown in fig. 6) without needing error-introducing manual interventions.

a
b

Figure 6: Results of the same environmentally-assisted fatigue problem.. a — A table published by a multi-billion-dollar agency (probably using Word), b — The same results in a report written by a a small third-world consulting company (FeenoX+AWK+LaTeX)

The last two paragraphs illustrate item 5.e (straightforward integration with Markdown and LaTeX reporting).

4 The Unique Value Proposition

Taking into account the features discussed so far, it is left to the reader to consider the differences that FeenoX proposes with respect to traditional computational codes. In particular, to think about how the workflows in conceptual and basic engineering design of a nuclear reactor can be improved by being able to model all the physics involved in a nuclear reactor

  1. within the same general modeling paradigm, and
  2. using the particular paradigm proposed by FeenoX.

4.1 Unfair advantages

Traditional computational codes in the nuclear industry…

Given what we have been discussing so far (and the details discussed in the SRS and the SDS), there is no single piece of software which provides all the benefits that FeenoX does.

Table 1: While traditional commercial codes rely on legacy codebases and proprietary lock-ins, FeenoX leverages the modern open-source ecosystem.
Feature Traditional Commercial Code FeenoX
Interface Heavy GUI (User must click manually) Text-based (Human or AI can write it)
Scalability Expensive licenses per core; limited by license server Unlimited MPI scaling; limited only by hardware
Transparency “Binary files &”“Black Box”” solvers” Plain text inputs & Open Source Code
Workflow Monolithic (One tool does everything moderately well) “Modular (Unix philosophy: connects with Gmsh, Paraview, Python)”
Reproducibility Difficult (What version? Which settings?) Native (Git-trackable inputs & versioned binaries)
AI Readiness Low (Visual interfaces are hard for LLMs) High (Text interfaces are native to LLMs)

4.2 What comes next

The goal is to provide a comprehensive suite of tools to aid engineering teams to design and license nuclear reactors within a modern philosophy that leverages state-of-the-art computational technologies (web, cloud, IA, etc.). The following is a list of potential development tasks that can move FeenoX closer to the aforementioned goal:


  1. As in freedom, not as in price.↩︎

  2. Due to local law the text of the thesis had to be written in Spanish. Yet nowadays, it should be pretty straightforward to translate the text into English.↩︎

  3. Especially in times of AI-assisted programming, a.k.a. “vibe coding.”↩︎