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 (see RcppBTCS)
- Python-API (?)
- Testing
Contributing
PLEASE NOTE
Starting with the preparations of v0.2 we would like to use more meaningful commit messages. A good practice can be found here.
Workflow
In this early stage of development every help is welcome. To do so, there are currently the following options:
Given you have an account for this GFZ git instance:
- Fork this project, create a branch and push your changes. If your changes are done or you feel the need for some feedback create a merge request with the destination set to the main branch of this project.
- Ask for access to this repository. You most likelz will get access as a developer which allows you to create branches and merge requests inside this repository.
If can't get access to this git instance:
- Download this repository and note down the SHA of the downloaded commit. Apply your changes and send a mail to mluebke@gfz-potsdam.de or delucia@gfz-potsdam.de with the patch/diff compared to your starting point. Please split different patch types (feature, fixes, improvements …) into seperate files. Also provide us the SHA of the commit you've downloaded.
Thank you for your contributions in advance!
License
TODO?