Giter Club home page Giter Club logo

pymes's Introduction

PyMES

(Python package for Many-Electron Simulations (PyMES))

PyMES package implements many-electron methods, such as MP2, CCD/DCD, CCSD/DCSD for ground states, and EOM-CCSD for excited states, using the CTF library for automatic tensor contractions.

Key features:

  1. Handling non-hermitian Hamiltonians, such as transcorrelated Hamiltonian;
  2. MPI and OMP parallelisation thanks to CTF;
  3. Treating simple model system like 3D uniform electron gas, as well as interface to popular electronic method packages via FCIDUMP.

The package is currently under active development, so some functions and classes may change during this time. If you experience any problems, feel free to open issues. Please include detailed explanations to the issues you experience when you do so.

Installation

Dependancies

  • numpy
  • scipy
  • h5py
  • Cython
  • CTF
  • spglib
  • pytest (test purpose, not needed for running the code)

PyMES can be installed by pip

pip install ./

PyMES depends on the C++ Cyclops Tensor Framework (CTF) library. Therefore, you need to build the CTF before using pymes.

Building CTF

Building instructions can be found at https://github.com/cyclops-community/ctf.
Because of popular demand we outline the steps and some useful tips in the following.

First, pull the ctf lib source using

cd pymes/lib
git submodule init
git submodule update

Now you should see that the ctf directory contain the source files. Then

cd ctf

Run the configure script to check if all necessary libraries etc. can be found.

./configure --install-dir=/path/to/install/dir

Tip: Make sure your MPI, OpenMP and dynamic BLAS and LAPACK libraries are in your PATH.
It might complain that static libs cannot be found, but as long as the dynamic ones are found you can proceed to next steps.

Tip: If you use the --install-dir option, it is necessary to export the path to the libraries in your bash as

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/install/dir/lib

Tip: Note the suffixed /lib.

Now we can build ctf with

make -j 8
make python -j 8

Tip: It may be necessary to make some changes in the Makefile. For example changing the python command to python3 on line 121

LDFLAGS="-L$(BDIR)/lib_shared" python3 setup.py build_ext -j4 --force -b $(BDIR)/lib_python/ -t $(BDIR)/lib_python/; \

and the pip to pip3 on line 133

pip3 install --force --user -b $(BDIR)/lib_python/ . --upgrade; \

, if cython is only available in your python3 or when you make python -j 8 it complains that it cannot find python.

If that works, pip install ctf with

make python_install

Tip: If you don't have sudo, it may also be necessary to add to the pip install command in the Makefile the --user flag.

Now try to import 'ctf' in python

import ctf

to see if any errors appear.

Running

For example, run test_ccsd.py with 5 processes under test_ccsd with

mpirun -np 5 python3 test_ccsd.py

For developers

Contributions are welcome. But to keep the code in the long-term organized and readable, some simple rules should be followed.

Testing

For each functionality added, a test file or an example file on how to use it should be added under the test directory. For now, the test files serve the purpose of showing examples. In the future, they should also serve as unit tests, where standard and correct results should be supplied and be compared to each running results.

Naming style

We follow the convention explained in wikipedia

Python and Ruby

Python and Ruby both recommend UpperCamelCase for class names, CAPITALIZED_WITH_UNDERSCORES for constants, and lowercase_separated_by_underscores for other names.

In Python, if a name is intended to be "private", it is prefixed by an underscore. Private variables are enforced in Python only by convention. Names can also be suffixed with an underscore to prevent conflict with Python keywords. Prefixing with double underscores changes behaviour in classes with regard to name mangling. Prefixing and suffixing with double underscores are reserved for "magic names" which fulfill special behaviour in Python objects.[39]

Some old codes need to be refactored to fulfil the naming conventions. But newly added code should follow these conventions.

Long and self-explanatory names are favored over short and clean ones.

Documentation

For each function or class added, please add documentation following the most detailed ones you can find in the existing code as the example.

This should include a brief introduction to the function or class, and the main attributes in a class, and the arguments and returns of the function.

Reference

The following paper(s) (more to be added) should be cited in your publications if you use PyMES:

Towards efficient and accurate ab initio solutions to periodic systems via transcorrelation and coupled cluster theory, Ke Liao, Thomas Schraivogel, Hongjun Luo, Daniel Kats, Ali Alavi, Physical Review Research 3 033072 (2021) https://doi.org/10.1103/PhysRevResearch.3.033072

Density Matrix Renormalization Group for Transcorrelated Hamiltonians: Ground and Excited States in Molecules, Ke Liao, Huanchen Zhai, Evelin Martine Christlmaier, Thomas Schraivogel, Pablo López Ríos, Daniel Kats, Ali Alavi, Journal of Chemical Theory and Computation (2023) https://doi.org/10.1021/acs.jctc.2c01207

Contributors

Ke Liao, Thomas Schraivogel, Evelin Christlmaier, Daniel Kats

pymes's People

Contributors

dnkats avatar nickirk avatar

Stargazers

 avatar  avatar  avatar  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.