Giter Site home page Giter Site logo

fractional-pde's Introduction

fractional-pde

Solver for Caputo fractional PDEs over equidistant time and arbitrary space grids.

Documentation of this repository is still work in progress.

The code in this repository has been written in the course of my master's thesis "Enhancing a C++ Program Solving Time Fractional PDEs" (https://unipub.uni-graz.at/obvugrhs/download/pdf/6408510), in which an introduction to Caputo fractional PDEs is given. The thesis also documents the development of the code and serves as a more in-depth documentation of the code base.

The program has the following features:

  • Calculation of solutions for Caputo fractional PDEs
  • Both equidistant and non-equidistant space grids are supported. Time grids have to be equidistant.
  • Different algorithms for solving the PDE, the most recommended are Cyclic Reduction for equidistant space grids, and multigrid preconditioned BiCGStab for non-equidistant space grids.
  • Templatized solving routines allowing to choose the precision of the floating point numbers used between float or double.
  • Custom data types for scalars, arrays and matrices allowing to be allocated and transferred from the Cpu's to Gpu's memory and vice versa. They are contained in the folder src/devicedata.
  • Additional data types for arrays and matrices supporting efficient linear algebra operations. The data types are contained in the folder srd/algebraiccontainers.
  • These linear algebra operations are accelerated using an adapter generalizing BLAS/LAPACK, cuBLAS/cuSOLVER, and MAGMA, for calculation on the Cpu or Gpu. This adapter is contained in the folder src/processingunit.

The contents of the folders src/devicedata, src/processingunit and src/algebraiccontainers can be used independently of the solver. devicedata is stand-alone, which is a prerequisite for processingunit, which in turn is again a prerequisite for algebraiccontainers.

An exemplary use of the solver is demonstrated in main.cpp.

Building the executable

For building the executable, follow these steps:

  • Change to the base folder fractional_pde
  • In bash, call CMAKE using cmake .
  • Use the generated Makefile to build the target you wish. Three targets are available, which can be build via make <TARGET_NAME> in bash:
    • make fpde_cpu for building the application without GPU acceleration. In this case, the acceleration of linear algebra operations relies on BLAS/LAPACK/LAPACKE only. From all child classes of ProcessingUnitDevice, only Cpu can be used; from all child classes of MemoryManager, only CpuManager can be used.
    • make fpde_cuda for building the application with CUDA and cuBLAS/cuSOLVER acceleration of linear algebra operations. From all child classes of ProcessingUnitDevice, Cpu and Gpu can be used; all child classes of MemoryManager can be used.
    • make fpde_magma for building the application with CUDA and both cuBLAS/cuSOLVER and MAGMA support. All child classes of ProcessingUnitDevice and MemoryManager can be used.
  • The executable is found under the name <TARGET_NAME> in the base folder fractional_pde.

fractional-pde's People

Contributors

meteoritenhagel avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.