Giter Club home page Giter Club logo

pfaffine's Introduction

☕️Pfaffine

Pfaffine aims to be the caffeine that wakes your program up when you work with Geminal wavefunctions.

Pfaffine is an numerical package for fast calculation of Pfaffian. This branch has its background relinked against an extended version of BLIS.

Requirements

C++ Compiler

  • Compiler supports C++ 11;
  • Compiler recognizes #pragma once;

Library and Others

Build and Linking

Simple makefile is provided. One can copy the example make.darwin to make.inc and modify accordingly. make install builds and installs an instantiated library together with several templated headers into {Repository root}/dest.

Including directly the .tcc files is another way and it's more extensive in some sense.

Usage

One can select between templated C++ and conventinoal C99 interfaces, which are stored pfaffine.hh and pfaffine.h correspondingly.

Interfaces are further categorized into 2 types: full interface that requires large memory allocation done outside function calls and simplified ones that allocates memory automatically for the user.

Full interface looks like this in C++/C99, correspondingly. Note that it can also be called from Fortran:

template <typename T>
T skpfa(char uplo, unsigned n,
        T *A, unsigned ldA, unsigned inv,
        T *Sp1, T *Sp2, T *Sp3, T *Sp4, T *Sp5, unsigned npanel);
void cal_?skpfa_(fpType *Pfa, char *uplo, unsigned *n, fpType *A, unsigned *ldA, unsigned *inv,
        fpType *Sp1, fpType *Sp2, fpType *Sp3, fpType *Sp4, fpType *Sp5, unsigned *npanel);

Here in C99 interface the fpType denotes floating point type corresponding to character ? in function names, i.e. double for dskpfa, double complex for zskpfa, etc.

Following full interface is the simplified one, defined as:

template <typename T>
T skpfa(char uplo, unsigned n, T *A, unsigned ldA, unsigned inv);
void ?skpfa(fpType *Pfa, char uplo, unsigned n, fpType *A, unsigned ldA, unsigned inv);

In all cases above, A will be replaced by its full inverse if inv=1, otherwise the upper-half of tri-diagonal form will be kept. Detailed explanation for parameters referred here is available in docstring in src/skpfa.tcc.

Licensing

Source code forms under this branch are provided under the Mozilla Public License. As long as one keep modifications of these specific files open, they are is allowed to use it for whatever they like at her or his own risk.

pfaffine's People

Contributors

xrq-phys avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

wistaria

pfaffine's Issues

v1.1 Roadmaps

  • Lower-triangular storage support;
  • Complete error code flow;
  • [Done in v1.0] Merge blis+blas branch as a compile-time option.

v1.0 Roadmaps

v1.0 will be completely based on my extension of BLIS. The old mixed-BLAS-kernel approach will be (or is already) abandoned.

  • Separate tri-diag factorization and inversion into SKTDF and SKTRI. SKPFA calls the two and the old SKTRI should be renamed to something else.
  • New C++ interface to be introduced (Fortran & C interface's not changing).
  • Choosing a good npanel instead of any brute-force formula.
  • Merge updated_Xij object from xrq-phys/PfUpdate_Tests. (This' better done in PfUpdate_Tests)

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.