FeenoX is a cloud-first free no-X uniX-like finite-element(ish) + computational engineering tool designed to solve engineering-related + problems using cloud servers in parallel in such a way that the + problem is defined in a plain-text near-English self descriptive input + file read at run time, without requiring further user intervention + after the invocation. FeenoX meets fictitious-yet-plausible Software + Requirement Specifications (SRS). The FeenoX Software Design + Specifications address each requirement of the SRS. FeenoX provides a + set of common extents, capabilities and usefulness but offers + different features (following slightly different spirits) for industry + engineers, Unix hackers and academic researchers. The main features of + this design basis are
+-
+
The tool has to be an already-compiled program (not a library) + so regular users do not have to compile anything to solve a + problem.
+Simple problems ought to need simple input files.
+There should be a one-to-one correspondence between the problem
+ definition and FeenoX’s input file, as illustrated in
+ fig.
There should be an extension mechanism to allow hackers and + researchers to add new partial differential equations to the + tool.
+The NAFEMS LE10 problem statement
+ (
Open-source finite-element tools are either
+-
+
libraries which need code to use them such as
+-
+
end-user programs which need a GUI such as
+-
+
FeenoX sits in the middle. First, it can solve
+-
+
Second, it is the only free and open-source tool that satisfies the
+
-
+
in order to solve a problem one needs to prepare a (relatively)
+ simple input file (not a script nor a deck) which is read at
+ run-time (not code which calls a library). For example,
+ considering the
+
-
+
between the mesher
+
between the PETSc library and a post-processor such as
+
these input files can expand generic command-line options using
+ Bash syntax as
for solving partial differential equations (PDEs), the input
+ file has to refer to at least one Gmsh
the material properties and boundary conditions are defined + using physical groups and not individual nodes nor elements, so + the input file is independent of the mesh and thus can be tracked + with Git to increase traceability and repeatability.
+it follows the Unix philosophy
+ (
FeenoX tries to achieve its goals by…
+-
+
standing on both ethical (since it is free) and technical + (since it is open source) grounds while interacting with other + free and open operating systems, libraries, compilers and pre and + post-processing tools, thus encouraging science and engineering to + shift from privative environments into the free world.
+leveraging the Unix programming philosophy to come up with a + cloud-first tool suitable to be automatically deployed and serve + as the back end of web-based interfaces such as CAEplex.
+providing a ready-to-run program that reads an input file at
+ run time (and not a library that has to be linked for each
+ particular problem to be solved) as a deliberate design decision
+ discussed in the
+
designing and implementing an extensibility mechanism to allow
+ hackers and/or academics to add new PDE formulations by adding a
+ new subdirectory to
+
-
+
re-bootstrapping with
+
re-configuring with
re-compiling with
In effect, FeenoX provides a general mathematical framework to + solve PDEs with a bunch of entry points (as C functions) where new + types of PDEs (e.g. electromagnetism, fluid mechanics, etc.) can be + added to the set of what FeenoX can solve. This general framework + provides means to
+-
+
+
handle
+
+
read problem-specific
+
+
access shape functions and its derivatives evaluated either at + Gauss points or at arbitrary locations for computing elementary + contributions to
+-
+
For example, this snippet would build the elemental stiffness
+ matrix for the
+
+ int build_laplace_Ki(element_t *e, unsigned int q) {
+ double wdet = feenox_fem_compute_w_det_at_gauss(e, q);
+ gsl_matrix *B = feenox_fem_compute_B_at_gauss(e, q);
+ feenox_call(feenox_blas_BtB_accum(B, wdet, feenox.fem.Ki));
+ return FEENOX_OK;
+}
+
The calls for computing the weights and the matrices with the
+ shape functions and/or their derivatives currently support first
+ and second-order iso-geometric elements, but other element types
+ can be added as well. More complex cases involving non-uniform
+ material properties, volumetric sources, etc. can be found in the
+
solve the discretized equations using the appropriate PETSc
+ (
-
+
The particular functions that implement each problem type are
+ located in subdirectories
+
-
+
Researchers with both knowledge of mathematical theory of finite
+ elements and programming skills might, with the aid of
+
-
+
replace every occurrence of
modify the initialization functions in
+
-
+
the names of the unknowns
+the names of the material properties
+the mathematical type and characteristics of problem
+etc.
+modify the contents of the elemental matrices in
+
modify the contents of how the boundary conditions are parsed
+ and set in
re-run
The addition of non-trivial PDEs is not straightforward, but
+ possible. The
+
FeenoX’s main goal is to keep things simple as possible from the
+ user’s point of view without sacrificing flexibility. There exist
+ other tools which are similar in functionality but differ in the way
+ the problem is set up. For example, FeniCSx uses the Unified Form
+ Language where the PDE being solved has to be written by the user in
+ weak form
+ (