- [x] possible to do attraction & repulsion in same loop to avoid double write to `out`? - [x] multithreading - [x] SoA for autovectorization - [x] SoA for the BarnesHut itself - [ ] rten_simd - [ ] simd gravity etc. - [x] cache friendly barnes hut (dfs sorting) - [x] barnes hut with leaf bucket - [x] use an enum for leaf or non leaf - [x] merging attraction into repulsion for parallelization - [ ] numerical optimizations everywhere - [ ] branchless whenever possible - [x] sorted csr for edges - [x] niche optim for barnes hut options, use nonmax crate - [x] document design choices - [x] single consolidated loop node-wise for parallelization (must sort edges into CSR) - [x] moving node masses into SoA layout for barnes hut tree? - [x] find insights: https://github.com/gephi/gephi/tree/master/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2 - [ ] weight scaling could happen when building the algorithm - [ ] try to parallelize force application also
out?