Skip to content

Commit 7b3685d

Browse files
committed
doc
1 parent 7a2379d commit 7b3685d

9 files changed

Lines changed: 49 additions & 34 deletions

README4academics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ It does not require the users to write a weak form of the PDE they want to solve
1717
The user chooses from a set of built-in PDEs using the [`PROBLEM`](https://www.seamplex.com/feenox/doc/feenox-manual.html#problem) definition which internally resolves (at run time) a set of function pointers to the appropriate locations which will build the elemental objects which correspond the to chosen PDE.
1818
The list of available PDEs can be peeked by executing the `feenox` binary with the `--pdes` option:
1919

20-
```
20+
```terminal
2121
$ feenox --pdes
2222
laplace
2323
mechanical

README4hackers.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ Unlike these other FEA tools, FeenoX provides...
6464
thermal
6565
$
6666
```
67-
6867
The decision of extensibility through compiled code is, as the choice of making FeenoX a program and not a library, a thoughtful one. See [FeenoX for academics](./README4academics.md) for more details about how the extensibility mechanism works.
69-
68+
7069
* continuous integration (using [Github actions](https://github.com/seamplex/feenox/actions)), an issue tracker (using [Github issues](https://github.com/seamplex/feenox/issues) and a discussion page (using [Github discussions](https://github.com/seamplex/feenox/discussions))
7170

7271
* a mechanism to [expand command-line arguments as literal strings in the input file](https://www.seamplex.com/feenox/doc/sds.html#sec:run-time-arguments) so as to allow [parametric](https://www.seamplex.com/feenox/doc/sds.html#sec:parametric) (and/or [optimization](https://www.seamplex.com/feenox/doc/sds.html#sec:optimization)) loops. For instance, if an input file `print.fee` looks like
@@ -75,7 +74,7 @@ Unlike these other FEA tools, FeenoX provides...
7574
PRINT 2*${1}
7675
```
7776
then
78-
77+
7978
```terminal
8079
$ for i in $(seq 1 5); do feenox print.fee $i; done
8180
2
@@ -85,7 +84,7 @@ Unlike these other FEA tools, FeenoX provides...
8584
10
8685
$
8786
```
88-
87+
8988
* the possibility to provide the input from `stdin` (so as to use it as a Unix pipe) by passing `-` as the input file path:
9089

9190
```terminal
@@ -95,10 +94,13 @@ Unlike these other FEA tools, FeenoX provides...
9594
6
9695
8
9796
10
98-
$
99-
```
97+
$
98+
```
10099

101100
* flexibility to handle many workflows, including [web-based interfaces](https://www.caeplex.com) and [thin command-line clients](https://www.seamplex.com/feenox/doc/sds.html#cloud-first).
101+
- In particular, FeenoX is particularly well suited to be incldued in workflows involving LLMs and/or AI agents.
102+
103+
* official Debian and Ubuntu packages built on Salsa from the source tarballs.
102104

103105
The [input file](https://seamplex.com/feenox/doc/sds.html#sec:input)...
104106

@@ -107,6 +109,7 @@ The [input file](https://seamplex.com/feenox/doc/sds.html#sec:input)...
107109
- allows the user to enter [algebraic expressions whenever a numerical value is needed](https://seamplex.com/feenox/doc/sds.html#sec:expression) (everything is an expression)
108110
- understands [definitions (nouns) and instructions (verbs)](https://seamplex.com/feenox/doc/sds.html#sec:nouns_verbs). FeenoX has an actual instruction pointer that loops over the instruction set (there might even be [conditional blocks](https://www.seamplex.com/feenox/doc/feenox-manual.html#if)).
109111
- is [simple for simple files](https://seamplex.com/feenox/doc/sds.html#sec:simple) (but might get [more complicated for more complex problems](https://seamplex.com/feenox/doc/sds.html#sec:complex)). Remember [Alan Kay](https://en.wikipedia.org/wiki/Alan_Kay)'s quote: ["simple things should be simple and complex things should be possible."](https://www.quora.com/What-is-the-story-behind-Alan-Kay-s-adage-Simple-things-should-be-simple-complex-things-should-be-possible)
112+
- can be created using assistance from LLMs and AI agents.
110113

111114

112115
Following the Unix rule of silence, [the output is 100% user-defined](https://seamplex.com/feenox/doc/sds.html#sec:output): if there are not explicit output instructions, FeenoX will not write anything. And probably nothing will be computed (because FeenoX is smart and will not compute things that are not actually needed).

doc/100-introduction.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

22
A computational tool (herein after referred to as _the tool_) specifically designed to be executed in arbitrarily-scalable remote servers (i.e. in the cloud) is required in order to solve engineering problems following the current state-of-the-art methods and technologies impacting the high-performance computing world.
33
This (imaginary but plausible) Software Requirements Specification document describes the mandatory features this tool ought to have and lists some features which would be nice the tool had.
4-
Also it contains requirements and guidelines about architecture, execution and interfaces in order to fulfill the needs of cognizant engineers as of the 2020s.
4+
Also it contains requirements and guidelines about architecture, execution and interfaces in order to fulfill the needs of cognizant engineers as of the 2020s. In particular, it should be designed and implemented in such a way to explicitly allow and encourage LLMs to be able to provide assistance with the problem set up, model debugging and analysis of results.
55

66
On the one hand, the tool should allow to solve industrial problems under stringent efficiency (@sec:efficiency) and quality (@sec:qa) requirements. It is therefore mandatory to be able to assess the source code for
77

88
* independent verification, and/or
99
* performance profiling, and/or
1010
* quality control
11-
11+
1212
by qualified third parties from all around the world.
1313
Hence, it has to be _open source_ according to the definition of the Open Source Initiative.
1414

doc/110-objective.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The main objective of the tool is to be able to solve engineering problems which
1111
* computational fluid dynamics
1212
* ...
1313

14-
on one or more mainstream cloud servers, i.e. computers with hardware and operating systems (further discussed in @sec:architecture) that allows them to be available online and accessed remotely either interactively or automatically by other computers as well. Other architectures such as high-end desktop personal computers or even low-end laptops might be supported but they should not the main target (i.e. the tool has to be cloud-first but laptop-friendly).
15-
14+
on one or more mainstream cloud servers, i.e. computers with hardware and operating systems (further discussed in @sec:architecture) that allows them to be available online and accessed remotely either interactively or automatically by other computers as well. Other architectures such as high-end desktop personal computers or even low-end laptops might be supported but they should not the main target (i.e. the tool has to be cloud-first but laptop-friendly).
15+
1616
The initial version of the tool must be able to handle a subset of the above list of problem types.
1717
Afterward, the set of supported problem types, models, equations and features of the tool should grow to include other models as well, as required in @sec:extensibility.

doc/TODO.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
* FeenoX focuses on:
44

5-
a. cloud-firtness
5+
a. cloud-firstness
66
b. parametric runs: script-friendly through command-line arguments and ASCII files
77
c. material properties: everything is an expression
8+
d. LLM-friendlyness
89

910
* NAFEMS LE10 & LE11: keep a single case in `differences` and create a new one in `cases` with a full parametric run
10-
11+
1112
```
1213
READ_MESH le10-$1.msh
1314
...

doc/sds-appendices.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
# Appendix: Downloading and compiling FeenoX
44

5+
## Debian & Ubuntu packages
6+
7+
To be explained
8+
59
## Binary executables
610

711
```include

doc/source.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
To compile the source tarball, proceed as follows. This procedure does not need `git` nor `autoconf` but a new tarball has to be downloaded each time there is a new FeenoX version.
1+
To compile the source tarball, proceed as follows. This procedure does not need `git` nor `autoconf` but a new [source tarball]() has to be downloaded each time there is a new FeenoX version.
22

33
1. Install mandatory dependencies
44

@@ -8,16 +8,15 @@ To compile the source tarball, proceed as follows. This procedure does not need
88
```
99
1010
If you cannot install `libgsl-dev`, you can have the `configure` script to download and compile it for you. See point\ 4 below.
11-
11+
1212
2. Install optional dependencies (of course these are _optional_ but recommended)
13-
13+
1414
```terminal
1515
sudo apt-get install libsundials-dev petsc-dev slepc-dev
1616
```
1717
1818
3. Download and un-compress FeenoX source tarball. Browse to <https://www.seamplex.com/feenox/dist/src/> and pick the latest version:
19-
20-
19+
2120
```terminal
2221
wget https://www.seamplex.com/feenox/dist/src/feenox-v1.1.tar.gz
2322
tar xvzf feenox-v1.1.tar.gz

src/flow/init.c

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -351,26 +351,33 @@ int feenox_init_special_objects(void) {
351351
feenox_special_var_value(static_steps) = 1;
352352

353353

354-
///va+end_time+desc Final time of the transient calculation, to be set by the user.
355-
///va+end_time+detail The default value is zero, meaning no transient calculation.
354+
///va+end_time+desc Final time of the transient calculation.
355+
///va+end_time+detail Set this variable to a positive value to ask for a transient calculation.
356+
///va+end_time+detail For some PDEs, the default might be a quasi-static problem instead of an actual transient one.
357+
///va+end_time+detail For instance, setting a non-zero `end_time` in `PROBLEM mechanical` starts a quasi-static computation
358+
///va+end_time+detail but a real transient one for `PROBLEM thermal`.
359+
///va+end_time+detail The default value is zero, meaning a static problem.
356360
feenox_special_var(end_time) = feenox_get_or_define_variable_get_ptr("end_time");
357361

358362

359-
///va+t+desc Actual value of the time for transient calculations.
360-
///va+t+detail This variable is set by FeenoX, but can be written by
361-
///va+t+detail the user for example by importing it from another
362-
///va+t+detail transient code by means of shared-memory objects.
363-
///va+t+detail Care should be taken when solving DAE systems and overwriting `t`.
363+
///va+t+desc Actual value of the time for transient or quasi-static calculations.
364+
///va+t+detail This variable can be `PRINT`ed and used in expressions involving time and/or
365+
///va+t+detail as arguments of time-dependent functions.
366+
///va+t+detail It stars equal to zero and it is updated by FeenoX according to
367+
///va+t+detail the time-stepping scheme. At the end, it is exactly equal to `end_time`.
368+
364369
feenox_special_var(t) = feenox_get_or_define_variable_get_ptr("t");
365370
feenox_special_var_value(t) = 0;
366371

367372

368-
///va+dt+desc Actual value of the time step for transient calculations.
369-
///va+dt+detail When solving DAE systems,
370-
///va+dt+detail this variable is set by feenox. It can be written by the user for example by importing it from another
371-
///va+dt+detail transient code by means of shared-memory objects. Care should be taken when
372-
///va+dt+detail solving DAE systems and overwriting `t`. Default value is DEFAULT_DT, which is
373-
///va+dt+detail a power of two and roundoff errors are thus reduced.
373+
///va+dt+desc Actual value of the time step for transient or quasi-static calculations.
374+
///va+dt+detail This variable can be `PRINT`ed and used in expressions involving time and/or
375+
///va+dt+detail as arguments of time-dependent functions.
376+
///va+dt+detail The initial time step can be set by assigning a non-zero value to `dt_0`.
377+
///va+dt+detail Do not set `dt` explicitly in an assignment.
378+
///va+dt+detail If you want to have a constant time step set both `min_dt` and `max_dt` to the same value.
379+
///va+dt+detail Default initial time step is DEFAULT_DT, which is
380+
///va+dt+detail a power of two and round-off errors are thus reduced.
374381
feenox_special_var(dt) = feenox_get_or_define_variable_get_ptr("dt");
375382
feenox_special_var_value(dt) = DEFAULT_DT;
376383

@@ -381,10 +388,10 @@ int feenox_init_special_objects(void) {
381388
feenox_special_var(dae_rtol) = feenox_get_or_define_variable_get_ptr("dae_rtol");
382389
feenox_special_var_value(dae_rtol) = DEFAULT_DAE_RTOL;
383390

384-
///va+min_dt+desc Minimum bound for the time step that feenox should take when solving DAE systems.
391+
///va+min_dt+desc Minimum bound for the time step that FeenoX should take when solving transient problems.
385392
feenox_special_var(min_dt) = feenox_get_or_define_variable_get_ptr("min_dt");
386393

387-
///va+max_dt+desc Maximum bound for the time step that feenox should take when solving DAE systems.
394+
///va+max_dt+desc Maximum bound for the time step that FeenoX should take when solving transient systems.
388395
feenox_special_var(max_dt) = feenox_get_or_define_variable_get_ptr("max_dt");
389396

390397
///va+i+desc Dummy index, used mainly in vector and matrix row subindex expressions.
@@ -393,7 +400,7 @@ int feenox_init_special_objects(void) {
393400
///va+j+desc Dummy index, used mainly in matrix column subindex expressions.
394401
feenox_special_var(j) = feenox_get_or_define_variable_get_ptr("j");
395402

396-
///va+pi+desc A double-precision floating point representation of the number $\pi$
403+
///va+pi+desc A double-precision floating· point representation of the number $\pi$
397404
///va+pi+detail It is equal to the `M_PI` constant in `math.h` .
398405
feenox_special_var(pi) = feenox_get_or_define_variable_get_ptr("pi");
399406
feenox_special_var_value(pi) = M_PI;

tests/pellet-nonlinear-transient-from-initial.fee

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
PROBLEM thermal 3D
22
READ_MESH pellet.msh
33

4+
dt_0 = 1e-3
45
end_time = 3 # small time to run the test faster [seconds]
56

67
# https://www.nuclear-power.com/nuclear-engineering/heat-transfer/thermal-conduction/thermal-conductivity/thermal-conductivity-of-uranium-dioxide/

0 commit comments

Comments
 (0)