File: TODO

package info (click to toggle)
feenox 1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,068 kB
  • sloc: ansic: 28,856; sh: 7,201; makefile: 556; python: 554; xml: 500
file content (243 lines) | stat: -rw-r--r-- 6,065 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
2025-09-01

- 1 General things to do
  - 1.1 Tests
  - 1.2 Optimizations
  - 1.3 Wasora keywords
  - 1.4 Wasora-like stuff
  - 1.5 API
  - 1.6 Nice to have
  - 1.7 Command-line arguments
  - 1.8 Error handling
  - 1.9 Postprocessing output
- 2 Meshes
- 3 PDEs
  - 3.1 Laplace/Poisson/Helmholtz
  - 3.2 Heat
  - 3.3 Mechanical
  - 3.4 Modal
  - 3.5 Neutron
- 4 V & V
- 5 PDEs

  [1 General things to do]: #general-things-to-do
  [1.1 Tests]: #tests
  [1.2 Optimizations]: #optimizations
  [1.3 Wasora keywords]: #wasora-keywords
  [1.4 Wasora-like stuff]: #wasora-like-stuff
  [1.5 API]: #api
  [1.6 Nice to have]: #nice-to-have
  [1.7 Command-line arguments]: #command-line-arguments
  [1.8 Error handling]: #error-handling
  [1.9 Postprocessing output]: #postprocessing-output
  [2 Meshes]: #meshes
  [3 PDEs]: #pdes
  [3.1 Laplace/Poisson/Helmholtz]: #laplacepoissonhelmholtz
  [3.2 Heat]: #heat
  [3.3 Mechanical]: #mechanical
  [3.4 Modal]: #modal
  [3.5 Neutron]: #neutron
  [4 V & V]: #v-v
  [5 PDEs]: #pdes-1

General things to do

- windows build (against my will)
- PROGRESS ascii_art percentage norm
  - build, KSP, SNES
- implicit call to SOLVE_PROBLEM?
- for/while loops?
- use DMPlex?
  - to read non-gmsh meshes?
  - to partition meshes on the fly?
  - allocate matrices?
  - dump states?
  - choose to use it or not
- FIT to mesh-based functions
- FIT taking into account uncertainties
- extended integration (as in reduced, full, extended)
- make GSL optional
  - rewrite BLAS using ad-hoc routines
    - profile GSL BLAS vs. manual implementation vs. OpenBLAS
    - eigen in C++ (optional)
  - define fee_matrix as gsl_matrix but allow to change the
    implementation
  - wrap all GSL calls inside #ifdef
  - use a large chunk of contiguous memory in the heap to store shape
    functions, gradients, etc
- optimize MPI usage
  - variables mpi_rank, mpi_size, memory_total y memory_local(rank)
- V&V
  - fully document tests
  - section for MMS

Tests

- use the same documentation strategy from doc/examples in tests
- write a README and an explanation of each test
- cell-based mesh writes and integrations
- FIT ranges
- more MPI tests

Optimizations

- if the elements are straight all the jacobians are the same and there
  is no need to sweep over gauss points
- make two lists of elements, one for bulk and one for BCs and loop over
  those
- re-think fem.c to store per-gauss point data in a cache-friendly way
- remove branches (and replace with what?)
- use ad-hoc matrices instead of gsl_matrix?
  - have a contiguous array of memory that stores all the per-element
    matrices in a row-major order
  - access them using macros dhdx(row,col)
  - mind SSE!
  - https://github.com/niswegmann/small-matrix-inverse
- have compile-time macros that will optimize for
  - speed
  - memory
  - something else
- create FeenoX flavors with compile-time
  - problem type (so we can avoid function pointers)
  - problem dimension (so we can hardcode sizes)
  - full or axi-symmetry
  - scalar size (float or double)
  - all elements are of the same type
- use MatSetValuesBlocked()

Wasora keywords

- SEMAPHORE + SHARED_MEMORY
- READ / WRITE
- M4 (MUSTACHE? MACRO?)
- SHELL
- HISTORY
- PRINT_FUNCTION PHYSICAL_ENTITY -> for dumping and reading back BCs
- CALL user routines (check hash of feenox.h)

Wasora-like stuff

- vector & matrix assignments & DAEs
- debug mode, line-by-line
  - run feenox with an option like -d or --debug and then present a
    gdb-like interface with print, and step by step advances
- trap and handle signit & sigterm

API

- Python?
- Julia?
- come up with an example in C

Nice to have

- ask how to set OMP_NUM_THREADS=1
- logarithmic ranges for PRINT_FUNCTION
- default separator after TEXT should be space, after numerical should
  be tab
- PRINT_FUNCTION with %f in between arguments (like PRINT_VECTOR)
- BLAS
  - BLAS a * b = s   # scalar dot
  - BLAS a x b = c   # vector cross
  - BLAS A * b = c   # matrix-vector
  - BLAS a + b = c   # vector
  - BLAS A + B = C   # matrix
  - BLAS a - b = c
  - BLAS A - B = C

Command-line arguments

- list symbols with -l

Error handling

- GSL error handling
- feenox_nan_error()
- feenox_gsl_handler()

Postprocessing output

- formats
  - xdmf? (needs DMView() and VecView())
  - frd? (to be able to use ccx’s post processor… is it worth it?)
  - binary msh and vtu
  - msh v4.1
  - cgns?
  - med?
- full tensors

Meshes

- expose the vectors with the node coordinates

PDEs

- check when the matrices do not need to be rebuilt – use constant flag
- remove the need of needing an explicit SOLVE_PROBLEM
  - detect which variables/functions are PDE outputs and call
    solve_problem() the first time they are needed
- benchmark MPI (read .msh with partitioning info first)
- glue (mortar)
- investigate -mpi_linear_solver_server
- direct elimination for multi-freedom BCs
- third-medium contact?

Laplace/Poisson/Helmholtz

- poisson f = 1, eta = 0
- helmholtz f = 1, eta = 1
- investigate dsyrk() instead of dgemmv()
  https://stackoverflow.com/questions/47013581/blas-matrix-by-matrix-transpose-multiply

Heat

- improve parallel runs
- convection with a separate matrix? think!
- explain that radiation is better off as an expression
- same for total heat sources/bcs
- orthotropic conductivity

Mechanical

- be able to use λ & μ, K & μ, etc.
- strain energy for non-linear
- reactions for non-linear
- many volumes
  - same models
  - different models
- compare with other solvers
  - mofem
  - fenicsx
  - ccx
  - code aster
- check det (F) ≠ 0
- examples
- plasticity
- stresses: count negative jacobians and worst jacobians
- strain energy density
- quasi-static: use PETSc’s TS
  - if a simple SNES does not converge, convert to TS
  - if det F ≤ 0, convert to TS
  - PROBLEM AUTO_LOAD_STEPS

Modal

- partially-unconstrained DOFs in arbitrary directions

Neutron

- current in BCs
- FVM?
- allow per-material fission spectrum (it has to be uniform and
  normalized)

V & V

- MMS

PDEs

- CFD?
- LBM?
- Electromagnetism?
- FVM