- implicit call to
SOLVE_PROBLEM
? - for/while loops?
- use
DMPlex
?- allocate matrices?
- write vtus?
- dump states?
- choose to use it or not
- use
spack
? sow? - 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
- 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
ymemory_local(rank)
- variables
- V&V
- fully document tests
- section for MMS
- move all
doc/examples
totests
- write a
README
and an explanation of each test - make an index of the keywords used in each test and link them from the doc as examples
- cell-based mesh writes and integrations
FIT
ranges- MPI
- 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()
SEMAPHORE
+SHARED_MEMORY
READ
/WRITE
M4
(MUSTACHE? MACRO?)SHELL
HISTORY
PRINT_FUNCTION PHYSICAL_ENTITY
-> for dumping and reading back BCsCALL
user routines (check hash of feenox.h)
- vector & matrix assignements & 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
- run
- trap and handle signit & sigterm
- Python?
- Julia?
- come up with an example in C
- add a keyword and command-line argument to set
OMP_NUM_THREADS
- logaritmic ranges for
PRINT_FUNCTION
- default separator after
TEXT
should be space, after numerical should be tab PRINT_FUNCTION
with%f
in between arguments (likePRINT_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
- list symbols with
-l
- GSL error handling
feenox_nan_error()
feenox_gsl_handler()
-
formats
- vtu?
- xdmf? (needs DMView() and VecView())
- frd? (to be able to use ccx's post processor... is it worth it?)
- binary msh and vtk
- msh v4.1
- cgns?
- med?
-
full tensors
- expose the vectors with the node coordinates
- check when the matrices do not need to be rebuilt -- use constant flag
- allow different material model for each volume!
- so far we have a global material model, i.e. all the materials have to be orthotropic
- this is wrong!
- 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
- detect which variables/functions are PDE outputs and call
- benchmark MPI (read
.msh
with partitioning info first) - openmp to build matrices and compute stresses? not sure, we'd have to rewrite the building stuff thread safe, it should be mpi on a partitioned mesh
- glue (mortar)
- investigate
-mpi_linear_solver_server
- direct elimination for multi-freedom BCs
- poisson f = 1, eta = 0
- helmholtz f = 1, eta = 1
- investigate
dsyrk()
insted ofdgemmv()
https://stackoverflow.com/questions/47013581/blas-matrix-by-matrix-transpose-multiply
- 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
- non-linear
- stresses: count negative jacobians and worst jacobians
- strain energy density
- partially-unconstrained DOFs in arbitrary directions
- current in BCs
- FVM?
- allow per-material fission spectrum (it has to be uniform and normalized)
- MMS
- CFD?
- LBM?
- Electromagnetism?
- FVM