BTCSDiffusion
A framework solving diffusion problems using BTCS approach.
About
This project aims to provide a library for solving diffusion problems using the backward Euler method (BTCS) implemented in C++.
The library is built on top of Eigen, providing easy access to data structures and the linear equation solver.
We designed the API to be as much flexible as possible. Nearly every built-in, framework or third-party data structure can be used to model a problem, as long a pointer to continious memory can be providided.
Also we provide basic parallelization by using OpenMP, which can be easily turned on/off during generation of makefiles.
At the current state, both 1D and @D diffusion problems on a regular grid with constant alpha for all grid cells can be solved reliably.
Getting started
As this diffusion module is designed as a framework library and makefile generation is done by CMake, you're good to go to also use CMake as your build toolkit. If you decide to not use CMake, you need to manually link your application/library to BTCSDiffusion.
-
Create project directory.
$ mkdir sample_project && cd sample_project -
Clone this repository into path of choice project directory
$ git clone git@git.gfz-potsdam.de:mluebke/diffusion.git -
Add the following line into
CMakeLists.txtfile:add_subdirectory(path_to_diffusion_module EXCLUDE_FROM_ALL) - Write application/library using API of
BTCSDiffusion. -
Link target application/library against
BTCSDiffusion. Do this by adding into accordingCMakeLists.txtfile:target_link_libraries(your_libapp BTCSDiffusion) - Build your application/library with CMake.
Usage
Setting up an enviroment to use the BTCSDiffusion module is divided into the
following steps:
- Defining dimension of diffusion problem.
- Set grid sizes in according dimensions.
- Set the timestep to simulate.
- Defining boundary conditions.
- Run the simulation!
This will run a simulation on the defined grid for one species. See the source
code documentation of BTCSDiffusion and the examples in the app/ directory
for more information.
Roadmap
- 1D diffusion
- 2D diffusion
- 3D diffusion (?)
- R-API
- Python-API (?)
- Testing
License
TODO?