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
|