Main Documentation Page
OpenCurrent is a library for solving PDEs over structured grids using CUDA-capable devices. See the OpenCurrent wiki page for instructions on how to build the test suite and for a quick introduction to the library.
While some example applications are included, the goal of OpenCurrent is to provide utilities and functionality that can be used to build useful solvers in a variety of application domains.
The OpenCurrent library follows a small number of design principles throughout the codebase:
OpenCurrent is divided into 3 libraries:
There is also a unit testing framework.
OpenCurrent is designed to run on all CUDA-capable devices, with certain functionality automatically disabled based on the compute capabilities of the target platform. In particular, double precision is not support in kernels prior to compute 1.3. In order to maintain uniformity of the head files across different compilation targets, the library automatically does not define symbols that would require double-precision support when the compute target is < 1.3. This means that attempting to call a double-precision routine will result in a link-time error, typically 'undefined symbol.' In order to avoid these errors, application code should avoid calling double-precision routines when linked against a version of OpenCurrent built for compute caoability prior to 1.3.
Essentially all routines or data structures that are templated on type and have a 'Device' version are not defined. Host routines, however, are unaffected. For example, calling routines on a Grid3DDeviceD object will result in link errors, while calling routines on Grid3DHostD will not.