Accurate many-body perturbation theory calculations of the electronic structure of molecules and clusters
Many-body perturbation theory for atoms, molecules, and clusters
This is a minimalistic README file. Many more details can be found on the web site molgw.org. A tutorial section exists there.
MOLGW implements the following schemes:
The Python3 module molgw.py
is available for automation.
MOLGW needs Fortran 2003 (and a few Fortran2008 features) and C++ compilers.
MOLGW is being tested with gfortran
, g++
(version 11.x.x) and ifort
(version 21).
MOLGW can run in parallel using OPENMP and MPI parallelization.
All the machine dependent variables should be set in file ~molgw/src/my_machine.arch
Examples for this file can be found in the folder ~molgw/config/
.
Then
cd ~molgw/src
make
To run on multi-node computers
Many standard Gaussian basis sets are shipped with MOLGW.
More basis sets can be obtained from Basis Set Exchange
The file can be generated from a NWChem file using the script
~molgw/utils/basisset_nwchem2molgw.py aug-cc-pVDZ.nwchem
You may even create your own.
/path/to/molgw/molgw helium.in > helium.out
Many example input files can be found in ~molgw/tests/inputs/
Please use the issues section on MOLGW github.
Besides the wrapper calls to the LIBINT library, MOLGW is entirely written in Fortran2003/2008. Fortran C bindings are used to call LIBXC and LIBCINT. The source files can be found in ~molgw/src/.
The Fortran intent in/out/inout is compulsory for the arguments of a subroutine. One character variable names are discouraged.
The careful developer should try
A few fortran source files are generated by python scripts:
To add a new input variable, append a new variable description in the YAML file src/input_variables.yaml. Then execute the python script utils/input_variables.py. This will generate automatically the Fortran source file src/input_variables.f90 and the HTML and markdown documentation files docs/input_variables.html docs/input_variables.md.
It requires the manual editing of the src/Makefile (sorry).
Please check carefully the module dependence so to compile and add it to the right "level" of the Makefile.
The code should compile properly in parallel with make -j
.