A lightweight, scriptable CFD code built for rapid browser-based problem exploration and transparent, reproducible workflows. Truly a CFD paradigm of the future, inasmuch as it is nowhere near finished.
Site Menu
Project summary
Embedding a lisp interpreter into a golang CFD code to get the best of both worlds: A fast, compiled, SIMD and CPU-cache optimised numeric kernel orchestrated by expressive Lisp-based DSLs (Domain Specific Language) in a literate code document format. Lightweight enough to be compiled to WebAssembly (WASM) so it can be run in the browser for fast problem discovery and iteration in a web-based workbook environment. However it could also be run on the server to create a persistent "Job Queue" for heavy computational work.
Outstanding work
Thank you very much.
Work that is still outstanding
(or indeed, features I'd like to add)
- Completed work
- Basic passive scalar transport solver
- Basic unstructured mesh generation
- Essential Lisp language features
- Sparse set of CFD bindings for Lisp
- Limited workbook editor environment
- WebGL renderer for the mesh and scenario visualisations
- Moving FVM algorithm expression to Lisp with code generation
- Redesign physics bindings to be more atomic
- Add these bindings to Lisp to create a DSL for expressing FVM algorithms
- Express FVM equation algorithms in that DSL
- Write code generation bindings for compiling those algorithms to fast numeric kernels
- Express SIMPLE algorithms in the FVM DSL
- Write a high-level library resembling symbolic maths for general CFD scenario specification
- Lisp language features
- Add quoting and macros for better Scheme completeness
- Add introspection features for documentation
- Add full support for the table data type
- Add metadata to symbol definitions for interaction with tooling
- Add list and vector processing to the standard library
- Add string formatting to the standard library
- Add more robust library resolution
- Web workbook environment features
- Better prose rendering so it's actually nice to read
- Basic syntax highlighting inside code blocks
- Inline error diagnostics
- Evaluated results appearing beneath code blocks in the editor
- Actual documentation
- Folder based "projects" for splitting code between phases and jobs
- Job queues: sending off meta-procedures (eg optimisation algorithms) to the server to be run in the background with progress updates on the web app.
- Other key CFD libraries/features that are essential
- Unstructured mesh generation with Delauney Triangulation
- Allowing for internal geometries with Constrained Delauney Triangulation (CDT)
- A Lisp DSL for expressing parametric 2D geometry
- A Lisp DSL for post-processing and extracting dependent variables (eg lift)
- A Lisp DSL for interacting with actual output data
Note these are not exhaustive at all or in any meaningful order - just work I imagine I would need to do (off the top of my head) to see out my vision of moving logic and algorithms to the Lisp DSL while keeping the benefits of fast, compiled code.