GithubHelp home page GithubHelp logo

gaidaiigor / spectrumsdt Goto Github PK

View Code? Open in Web Editor NEW
7.0 2.0 1.0 69.37 MB

A parallel Fortran program for calculation of ro-vibrational energy levels and lifetimes of ABA-molecules.

License: GNU General Public License v3.0

Fortran 96.21% CMake 2.08% Python 1.72%
rovibrational-states computational-chemistry quantum-mechanics ab-initio spectroscopy

spectrumsdt's Introduction

A parallel Fortran program for calculation of ro-vibrational energy levels and lifetimes of ABA-molecules. Note that the current version is limited to wave functions that do not extend into linear and equilateral triangle configurations (see manual for details).

Building

  1. Prerequisites

    1. Make sure the following software is installed: Python 3, CMake (v3.5+), Fortan compiler (gfortran (v9.3.0+) or ifort (v19.0.3+)), MPICH, BLAS and LAPACK libraries. The following example is also going to assume that mpiexec wrapper is availble. Other implementations of Fortran compilers or MPI libraries may work, but have not been tested.

      The build files have been configured to work with gfortran by default, but with the appropriate modifications the code should also work with ifort. In our experience, ifort generates much faster code than gfortran, therefore we recommend to change the default settings to build with ifort on system where it is available.

    2. Make sure you machine has at least 2GB of RAM (for compilation).

  2. Clone the repo git clone https://github.com/IgorGayday/SpectrumSDT
    This example assumes the repo is cloned into ~/SpectrumSDT

  3. Build the libraries

    1. fdict
    cd ~/SpectrumSDT/libs/fdict
    

    Edit setup.make to change compiler options as necessary. Then run:

    make
    
    1. PETSc
    cd ~/SpectrumSDT/libs/petsc
    export PETSC_DIR=$PWD
    export PETSC_ARCH=debug_64
    ./configure --with-scalar-type=complex --with-64-bit-indices
    make all
    
    1. SLEPc
    cd ~/SpectrumSDT/libs/slepc
    export SLEPC_DIR=$PWD
    ./configure
    make all
    
  4. Build the main program
    cd ~/SpectrumSDT

    1. Edit CMakeLists.txt to specify custom compiler options as necessary

    2. Build the executable
      Note: do not move the executable to another folder since some paths are resolved relative to its location.

    mkdir build && cd build
    cmake ..
    make spectrumsdt
    

Basic example of running (ozone)

  1. Generate the grids
mkdir -p ~/SpectrumSDT_runs/o3/ && cd ~/SpectrumSDT_runs/o3/
cp ~/SpectrumSDT/config_examples/o3/1.simple/grids.config spectrumsdt.config
~/SpectrumSDT/build/spectrumsdt

After this, 3 files will be generated: grid_rho.dat, grid_theta.dat and grid_phi.dat. Each file stores values of grid points in each dimension, given in Bohr (for rho) and radians (for theta and phi). Before proceeding to the next stage, user should provide file pes.out with the values of potential at all combinations of these points in atomic units of energy (Hartree). See the potential section in manual for more details.

  1. Calculate the values of PES. Here we will use an example program that reads grid files and uses the PES of ozone calculated by Dawes et al. to generate pes.out file. First, compile the program:
cd ~/SpectrumSDT/PES_examples/ozone/
mkdir build && cd build
../compile.sh

Now run:

cd ~/SpectrumSDT_runs/o3/
mpiexec -n <n_procs> ~/SpectrumSDT/PES_examples/ozone/build/ozone_pes 686

Replace <n_procs> with however many MPI tasks you want to use. After this, pes.out file with the values of PES at all grid points will be written.

  1. Setup SpectrumSDT directory structure
mkdir J_0 && cd J_0
cp ~/SpectrumSDT/config_examples/o3/1.simple/spectrumsdt.config .

Edit spectrumsdt.config and replace username in the paths. Then execute:
~/SpectrumSDT/scripts/init_spectrum_folders.py -K 0

  1. Calculate basis
cd K_0/symmetry_0/basis
mpiexec -n <n_procs> spectrumsdt
  1. Calculate basis cross terms (overlaps)
cd ../overlaps
mpiexec -n <n_procs> spectrumsdt
  1. Calculate eigenpairs
cd ../eigensolve
mpiexec -n <n_procs> spectrumsdt

Lowest 50 rovibrational energy levels of ozone-686 J=0 will be printed into states.fwc file.

  1. Calculate wave function properties (optional)
cd ../properties
mpiexec -n <n_procs> spectrumsdt

The requested properties will be printed into states.fwc file.

References

  1. Gayday, I.; Grushnikova, E.; Babikov, D. Influence of the Coriolis Effect on the Properties of Scattering Resonances in Symmetric and Asymmetric Isotopomers of Ozone. Phys. Chem. Chem. Phys. 2020, 22, 27560–27571.

  2. Gayday, I.; Teplukhin, A.; Kendrick, B. K.; Babikov, D. The Role of Rotation–Vibration Coupling in Symmetric and Asymmetric Isotopomers of Ozone. J. Chem. Phys. 2020, 152, 144104.

  3. Gayday, I.; Teplukhin, A.; Kendrick, B. K.; Babikov, D. Theoretical Treatment of the Coriolis Effect Using Hyperspherical Coordinates, with Application to the Ro-Vibrational Spectrum of Ozone. J. Phys. Chem. A 2020, 124, 2808–2819.

  4. Teplukhin, A.; Babikov, D. Efficient Method for Calculations of Ro-Vibrational States in Triatomic Molecules near Dissociation Threshold: Application to Ozone. J. Chem. Phys. 2016, 145, 114106.

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.