mirror of
https://github.com/LCPQ/quantum_package
synced 2024-12-22 20:35:19 +01:00
Merge branch 'master' of https://github.com/TApplencourt/quantum_package into TApplencourt-master
Conflicts: install/scripts/install_ocaml.sh testing_no_regression/unit_test.py
This commit is contained in:
commit
adc95a3678
@ -22,12 +22,10 @@ language: python
|
|||||||
python:
|
python:
|
||||||
- "2.6"
|
- "2.6"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- ./configure --production ./config/gfortran.cfg
|
- ./configure --production ./config/gfortran.cfg
|
||||||
- source ./quantum_package.rc
|
- source ./quantum_package.rc
|
||||||
- qp_install_module.py install Full_CI Hartree_Fock CAS_SD MRCC_CASSD
|
- qp_module.py install Full_CI Hartree_Fock CAS_SD MRCC_CASSD
|
||||||
- ninja
|
- ninja
|
||||||
- cd ocaml ; make ; cd -
|
- cd ocaml ; make ; cd -
|
||||||
- cd testing_no_regression ; ./unit_test.py
|
- cd test ; bats bats/qp.bats
|
||||||
|
17
README.md
17
README.md
@ -18,6 +18,9 @@ For more information, you can visit the [wiki of the project](http://github.com/
|
|||||||
* Python >= 2.6
|
* Python >= 2.6
|
||||||
* GNU make
|
* GNU make
|
||||||
* Bash
|
* Bash
|
||||||
|
* Blast/Lapack
|
||||||
|
* unzip
|
||||||
|
* g++ (For ninja)
|
||||||
|
|
||||||
## Standard installation
|
## Standard installation
|
||||||
|
|
||||||
@ -51,19 +54,17 @@ This file contains all the environment variables needed by the quantum package b
|
|||||||
|
|
||||||
### Optional) Add some new module
|
### Optional) Add some new module
|
||||||
|
|
||||||
Usage: qp_install_module.py list (--installed|--avalaible-local|--avalaible-remote)
|
Usage: qp_module.py list (--installed|--avalaible-local|--avalaible-remote)
|
||||||
qp_install_module.py install <name>...
|
qp_module.py install <name>...
|
||||||
qp_install_module.py create -n <name> [<children_module>...]
|
qp_module.py create -n <name> [<children_module>...]
|
||||||
qp_install_module.py download -n <name> [<path_folder>...]
|
qp_module.py download -n <name> [<path_folder>...]
|
||||||
|
|
||||||
For exemple you can type :
|
For exemple you can type :
|
||||||
`qp_install_module.py install Full_CI`
|
`qp_module.py install Full_CI`
|
||||||
|
|
||||||
### 3) Compiling the fortran
|
### 3) Compiling the fortran
|
||||||
|
|
||||||
ninja
|
Just type `ninja` if you are in `$QP_ROOT` (or `ninja -f $QP_ROOT/build.ninja` elsewhere). The compilation will take approximately 3 min.
|
||||||
Just type `ninja` if you are in `$QP_ROOT` (or `ninja -f $QP_ROOT/build.ninja`
|
|
||||||
elsewhere). The compilation will take approximately 3 min.
|
|
||||||
|
|
||||||
If you have set the `--developement` flag in a specific module you can go in
|
If you have set the `--developement` flag in a specific module you can go in
|
||||||
the corresponding module directory and run `ninja` to build only this module.
|
the corresponding module directory and run `ninja` to build only this module.
|
||||||
|
19
configure
vendored
19
configure
vendored
@ -69,7 +69,8 @@ d_dependency = {
|
|||||||
"python": [],
|
"python": [],
|
||||||
"ninja": ["g++", "python"],
|
"ninja": ["g++", "python"],
|
||||||
"make": [],
|
"make": [],
|
||||||
"p_graphviz": ["python"]
|
"p_graphviz": ["python"],
|
||||||
|
"bats": []
|
||||||
}
|
}
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
@ -149,11 +150,16 @@ p_graphviz = Info(
|
|||||||
description=' Python library for graphviz',
|
description=' Python library for graphviz',
|
||||||
default_path=join(QP_ROOT_INSTALL, "p_graphviz"))
|
default_path=join(QP_ROOT_INSTALL, "p_graphviz"))
|
||||||
|
|
||||||
|
bats = Info(
|
||||||
|
url='https://github.com/sstephenson/bats/archive/master.tar.gz',
|
||||||
|
description=' Bash Automated Testing System',
|
||||||
|
default_path=join(QP_ROOT_INSTALL, "bats"))
|
||||||
|
|
||||||
d_info = dict()
|
d_info = dict()
|
||||||
|
|
||||||
for m in ["ocaml", "m4", "curl", "zlib", "patch", "irpf90", "docopt",
|
for m in ["ocaml", "m4", "curl", "zlib", "patch", "irpf90", "docopt",
|
||||||
"resultsFile", "ninja", "emsl", "ezfio", "p_graphviz",
|
"resultsFile", "ninja", "emsl", "ezfio", "p_graphviz",
|
||||||
"zeromq", "f77zmq" ]:
|
"zeromq", "f77zmq","bats" ]:
|
||||||
exec ("d_info['{0}']={0}".format(m))
|
exec ("d_info['{0}']={0}".format(m))
|
||||||
|
|
||||||
|
|
||||||
@ -410,10 +416,10 @@ _|_ | | _> |_ (_| | | (_| |_ | (_) | |
|
|||||||
with open(path, "w+") as f:
|
with open(path, "w+") as f:
|
||||||
f.write("\n".join(l_string))
|
f.write("\n".join(l_string))
|
||||||
|
|
||||||
print " [ OK ] ({0})".format(path)
|
print "[ OK ] ({0})".format(path)
|
||||||
|
|
||||||
print str_info("install"),
|
print str_info("install"),
|
||||||
print " [ Running ]"
|
print "[ Running ]"
|
||||||
try:
|
try:
|
||||||
path_ninja = find_path("ninja", l_installed)
|
path_ninja = find_path("ninja", l_installed)
|
||||||
subprocess.check_call("cd install ;{0}".format(path_ninja), shell=True)
|
subprocess.check_call("cd install ;{0}".format(path_ninja), shell=True)
|
||||||
@ -478,7 +484,7 @@ def create_ninja_and_rc(l_installed):
|
|||||||
'export IRPF90={0}'.format(path_irpf90.replace(QP_ROOT,"${QP_ROOT}")),
|
'export IRPF90={0}'.format(path_irpf90.replace(QP_ROOT,"${QP_ROOT}")),
|
||||||
'export NINJA={0}'.format(path_ninja.replace(QP_ROOT,"${QP_ROOT}")),
|
'export NINJA={0}'.format(path_ninja.replace(QP_ROOT,"${QP_ROOT}")),
|
||||||
'export QP_PYTHON={0}'.format(":".join(l_python)), "",
|
'export QP_PYTHON={0}'.format(":".join(l_python)), "",
|
||||||
'export PYTHONPATH="${QP_EZFIO}":"${QP_PYTHON}":"${PYTHONPATH}"',
|
'export PYTHONPATH="${QP_EZFIO}/Python":"${QP_PYTHON}":"${PYTHONPATH}"',
|
||||||
'export PATH="${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml:"${PATH}"',
|
'export PATH="${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml:"${PATH}"',
|
||||||
'export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}"',
|
'export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}"',
|
||||||
'export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"', "",
|
'export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"', "",
|
||||||
@ -531,7 +537,8 @@ def recommendation():
|
|||||||
print " ninja"
|
print " ninja"
|
||||||
print " make -C ocaml"
|
print " make -C ocaml"
|
||||||
print ""
|
print ""
|
||||||
print "PS : For more info on compiling the code, read the COMPILE_RUN.md file."
|
print "You can install more plugin with the qp_install command"
|
||||||
|
print "PS : For more info on compiling the code, read the README.md"
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
13
install/scripts/install_bats.sh
Executable file
13
install/scripts/install_bats.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
TARGET=bats
|
||||||
|
|
||||||
|
function _install()
|
||||||
|
{
|
||||||
|
cp -R ${BUILD} . || exit 1
|
||||||
|
cd ../bin
|
||||||
|
ln -s ../install/${TARGET}/libexec/bats . || return 1
|
||||||
|
cd -
|
||||||
|
}
|
||||||
|
|
||||||
|
source scripts/build.sh
|
@ -12,9 +12,18 @@ export C_INCLUDE_PATH="${QP_ROOT}"/lib:"${C_INCLUDE_PATH}"
|
|||||||
export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"
|
export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"
|
||||||
export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}"
|
export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}"
|
||||||
|
|
||||||
declare -i i
|
# return 0 if program version is equal or greater than check version
|
||||||
i=$(gcc -dumpversion | cut -d '.' -f 1)
|
check_version()
|
||||||
if [[ i -lt 4 ]]
|
{
|
||||||
|
local version=$1 check=$2
|
||||||
|
local winner=$(echo -e "$version\n$check" | sed '/^$/d' | sort -nr | head -1)
|
||||||
|
[[ "$winner" = "$version" ]] && return 0
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
i=$(gcc -dumpversion)
|
||||||
|
|
||||||
|
if check_version i 4.6
|
||||||
then
|
then
|
||||||
echo "GCC version $(gcc -dumpversion) too old. GCC >= 4.6 required."
|
echo "GCC version $(gcc -dumpversion) too old. GCC >= 4.6 required."
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -911,7 +911,7 @@ if __name__ == "__main__":
|
|||||||
if module not in d_binaries:
|
if module not in d_binaries:
|
||||||
l_msg = ["{0} is a root module but does not contain a main file.",
|
l_msg = ["{0} is a root module but does not contain a main file.",
|
||||||
"- Create it in {0}",
|
"- Create it in {0}",
|
||||||
"- Or delete {0} `qp_install_module.py uninstall {0}`",
|
"- Or delete {0} `qp_module.py uninstall {0}`",
|
||||||
"- Or install a module that needs {0} with a main "]
|
"- Or install a module that needs {0} with a main "]
|
||||||
|
|
||||||
print "\n".join(l_msg).format(module.rel)
|
print "\n".join(l_msg).format(module.rel)
|
||||||
|
@ -2,13 +2,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
Usage:
|
Usage:
|
||||||
qp_install_module.py create -n <name> [<children_modules>...]
|
qp_module.py create -n <name> [<children_modules>...]
|
||||||
qp_install_module.py download -n <name> [<path_folder>...]
|
qp_module.py download -n <name> [<path_folder>...]
|
||||||
qp_install_module.py install <name>...
|
qp_module.py install <name>...
|
||||||
qp_install_module.py list (--installed | --available-local)
|
qp_module.py list (--installed | --available-local)
|
||||||
qp_install_module.py uninstall <name>...
|
qp_module.py uninstall <name>
|
||||||
|
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
list: List all the modules available
|
list: List all the modules available
|
||||||
create: Create a new module
|
create: Create a new module
|
82
test/bats/qp.bats
Normal file
82
test/bats/qp.bats
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env bats
|
||||||
|
|
||||||
|
# float number comparison
|
||||||
|
# Compare two number ($1, $2) with a given precision ($3)
|
||||||
|
# If the number are not equal, the exit is 1 else is 0
|
||||||
|
|
||||||
|
# So we strip the "-", is the abs value of the poor
|
||||||
|
function eq() {
|
||||||
|
awk -v n1=${1#-} -v n2=${2#-} -v p=$3 'BEGIN{ if ((n1-n2)^2 < p^2) exit 0; exit 1}'
|
||||||
|
}
|
||||||
|
|
||||||
|
#: "${QP_ROOT?Pls set your quantum_package.rc}"
|
||||||
|
|
||||||
|
source ${QP_ROOT}/install/EZFIO/Bash/ezfio.sh
|
||||||
|
TEST_DIR=${QP_ROOT}/test/work/
|
||||||
|
mkdir -p ${TEST_DIR}
|
||||||
|
cd ${TEST_DIR}
|
||||||
|
|
||||||
|
@test "init HBO STO-3G" {
|
||||||
|
cp ${QP_ROOT}/test/input/HBO.xyz .
|
||||||
|
qp_create_ezfio_from_xyz -b "STO-3G" HBO.xyz
|
||||||
|
qp_edit -c HBO.ezfio
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "hartree fock HBO STO-3G" {
|
||||||
|
run init HBO STO-3G
|
||||||
|
ezfio set_file HBO.ezfio
|
||||||
|
ezfio hartree_fock thresh_scf 1E-5
|
||||||
|
|
||||||
|
qp_run SCF HBO.ezfio
|
||||||
|
# Check energy
|
||||||
|
|
||||||
|
energy="$(ezfio get hartree_fock energy)"
|
||||||
|
eq $energy -98.8251985622549 1E-5
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "full ci HBO STO-3G" {
|
||||||
|
run init HBO STO-3G
|
||||||
|
|
||||||
|
ezfio set_file HBO.ezfio
|
||||||
|
ezfio set perturbation do_pt2_end 1
|
||||||
|
ezfio set determinants n_det_max 1000
|
||||||
|
|
||||||
|
qp_run full_ci HBO.ezfio
|
||||||
|
energy="$(ezfio get full_ci energy)"
|
||||||
|
eq $energy -98.9649618899175 1E-2
|
||||||
|
energy_pt2="$(ezfio get full_ci energy_pt2)"
|
||||||
|
eq $energy_pt2 -98.966228232164 1E-5
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "cas_sd_selected HBO STO-3G" {
|
||||||
|
run hartree fock HBO STO-3G
|
||||||
|
ezfio set_file HBO.ezfio
|
||||||
|
ezfio set perturbation do_pt2_end 0
|
||||||
|
ezfio set determinants n_det_max 1000
|
||||||
|
qp_set_mo_class HBO.ezfio -core "[1-2]" -inact "[3-5]" -act "[6-9]" -virt "[10-11]"
|
||||||
|
qp_run cas_sd_selected HBO.ezfio
|
||||||
|
# Check energy
|
||||||
|
energy="$(ezfio get cas_sd energy)"
|
||||||
|
eq $energy -98.9646946027433 1E-5
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "mrcc_cassd HBO STO-3G" {
|
||||||
|
run cas_sd_selected fock HBO STO-3G
|
||||||
|
ezfio set_file HBO.ezfio
|
||||||
|
ezfio set determinants threshold_generators 1
|
||||||
|
ezfio set determinants read_wf 1
|
||||||
|
qp_run mrcc_cassd HBO.ezfio
|
||||||
|
# Check energy
|
||||||
|
energy="$(ezfio get mrcc_cassd energy)"
|
||||||
|
eq $energy -98.9653606184686 1E-5
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "script conversion HBO.out" {
|
||||||
|
cp ${QP_ROOT}/test/input/HBO.out .
|
||||||
|
qp_convert_output_to_ezfio.py HBO.out
|
||||||
|
qp_edit -c HBO.out.ezfio
|
||||||
|
qp_run SCF HBO.out.ezfio
|
||||||
|
ezfio set_file HBO.out.ezfio
|
||||||
|
energy="$(ezfio get hartree_fock energy)"
|
||||||
|
eq $energy -100.01858225534 1E-5
|
||||||
|
}
|
@ -1,5 +0,0 @@
|
|||||||
3
|
|
||||||
SO2 Geo: Experiment Mult: 1 symmetry: 32
|
|
||||||
O 0.0 1.2371 0.7215
|
|
||||||
O 0.0 -1.2371 0.7215
|
|
||||||
S 0.0 0.0 0.0
|
|
@ -1,7 +0,0 @@
|
|||||||
5
|
|
||||||
methane molecule (in ångströms)
|
|
||||||
C 0.000000 0.000000 0.000000
|
|
||||||
H 0.000000 0.000000 1.089000
|
|
||||||
H 1.026719 0.000000 -0.363000
|
|
||||||
H -0.513360 -0.889165 -0.363000
|
|
||||||
H -0.513360 0.889165 -0.363000
|
|
@ -1,404 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import unittest
|
|
||||||
import subprocess
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
qpackage_root = os.environ['QP_ROOT']
|
|
||||||
|
|
||||||
EZFIO = "{0}/install/EZFIO".format(qpackage_root)
|
|
||||||
sys.path = [EZFIO + "/Python"] + sys.path
|
|
||||||
|
|
||||||
from ezfio import ezfio
|
|
||||||
from collections import defaultdict
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
Energy = namedtuple('Energy', ['without_pseudo', 'with_pseudo'])
|
|
||||||
|
|
||||||
# ~#~#~ #
|
|
||||||
# O p t #
|
|
||||||
# ~#~#~ #
|
|
||||||
|
|
||||||
precision = 5.e-3
|
|
||||||
|
|
||||||
# A test get a geo file and a basis file.
|
|
||||||
# A global dict containt the result for this test
|
|
||||||
# A test return True or Raise a error !
|
|
||||||
# More ezfio condition you set, beter it is
|
|
||||||
|
|
||||||
|
|
||||||
# You cannot order the test flow.
|
|
||||||
# So if you dont whant to remarque on test (for example the HF), set
|
|
||||||
# a global variable and check for it
|
|
||||||
global has_hf_alredy
|
|
||||||
has_hf_alredy = False
|
|
||||||
|
|
||||||
global filename_check
|
|
||||||
|
|
||||||
|
|
||||||
def init_folder(geo, basis, mult=1, pseudo=False, ezfio_name=None):
|
|
||||||
'''
|
|
||||||
Take a geo in arg (aka a existing geo.xyz in test/)
|
|
||||||
And create the geo.ezfio with the adeguate basis and multipliciti
|
|
||||||
DO NOT CHECK IS THE EZFIO FOLDER ALREADY EXIST
|
|
||||||
'''
|
|
||||||
|
|
||||||
if not ezfio_name:
|
|
||||||
ezfio_name = geo
|
|
||||||
|
|
||||||
if pseudo:
|
|
||||||
cmd = "qp_create_ezfio_from_xyz -b {0} -m {1} {2}.xyz -p -o {3}.ezfio"
|
|
||||||
else:
|
|
||||||
cmd = "qp_create_ezfio_from_xyz -b {0} -m {1} {2}.xyz -o {3}.ezfio"
|
|
||||||
|
|
||||||
subprocess.check_call([cmd.format(basis, mult, geo, ezfio_name)],
|
|
||||||
shell=True)
|
|
||||||
|
|
||||||
def get_error_message(l_exepected, l_cur):
|
|
||||||
l_msg = ["Need {0} get {1} error is {2}".format(i, j, abs(i - j))
|
|
||||||
for i, j in zip(l_exepected, l_cur)]
|
|
||||||
return "\n" + "\n".join(l_msg)
|
|
||||||
|
|
||||||
|
|
||||||
# _
|
|
||||||
# / |_ _ _ | o ._ ._ _|_
|
|
||||||
# \_ | | (/_ (_ |< | | | |_) |_| |_
|
|
||||||
# |
|
|
||||||
def check_disk_acess(geo, basis, mult=1):
|
|
||||||
|
|
||||||
import uuid
|
|
||||||
filename = str(uuid.uuid4())
|
|
||||||
|
|
||||||
# ~#~#~#~ #
|
|
||||||
# I n i t #
|
|
||||||
# ~#~#~#~ #
|
|
||||||
|
|
||||||
init_folder(geo, basis, mult, ezfio_name=filename)
|
|
||||||
ezfio.set_file("{0}.ezfio".format(filename))
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# S e t _ p a r a m e t e r #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
# Test 1
|
|
||||||
ezfio.integrals_bielec_disk_access_ao_integrals = "Write"
|
|
||||||
cmd = "qp_edit -c {0}.ezfio".format(filename)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# Test 2
|
|
||||||
ezfio.integrals_bielec_disk_access_ao_integrals = "IculeAcess"
|
|
||||||
cmd = "qp_edit -c {0}.ezfio".format(filename)
|
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
return_code = False
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
return_code = True
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
# F i n a l i z e #
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
if return_code:
|
|
||||||
subprocess.call(["rm -R {0}.ezfio".format(filename)], shell=True)
|
|
||||||
return return_code
|
|
||||||
|
|
||||||
|
|
||||||
def check_mo_guess(geo, basis, mult=1):
|
|
||||||
|
|
||||||
import uuid
|
|
||||||
filename = str(uuid.uuid4())
|
|
||||||
|
|
||||||
# ~#~#~#~ #
|
|
||||||
# I n i t #
|
|
||||||
# ~#~#~#~ #
|
|
||||||
|
|
||||||
init_folder(geo, basis, mult, ezfio_name=filename)
|
|
||||||
ezfio.set_file("{0}.ezfio".format(filename))
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# S e t _ p a r a m e t e r #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
# Test 1
|
|
||||||
ezfio.hartree_fock_mo_guess_type = "Huckel"
|
|
||||||
cmd = "qp_edit -c {0}.ezfio".format(filename)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# Test 2
|
|
||||||
ezfio.hartree_fock_mo_guess_type = "IculeGuess"
|
|
||||||
cmd = "qp_edit -c {0}.ezfio".format(filename)
|
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
return_code = False
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
return_code = True
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
# F i n a l i z e #
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
if return_code:
|
|
||||||
subprocess.call(["rm -R {0}.ezfio".format(filename)], shell=True)
|
|
||||||
return return_code
|
|
||||||
|
|
||||||
|
|
||||||
# _
|
|
||||||
# / |_ _ _ | _. | _ _
|
|
||||||
# \_ | | (/_ (_ |< \/ (_| | |_| (/_ _>
|
|
||||||
#
|
|
||||||
def run_hf(geo, basis, mult=1, pseudo=False, remove_after_sucess=True):
|
|
||||||
"""
|
|
||||||
Run a simle by default hf
|
|
||||||
EZFIO path = geo.ezfio
|
|
||||||
"""
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# R e f _ e n e r g y #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
ref_energy = defaultdict(defaultdict)
|
|
||||||
|
|
||||||
ref_energy["sto-3g"]["methane"] = Energy(-39.7267433402, None)
|
|
||||||
ref_energy["vdz"]["SO2"] = Energy(None, -41.48912297776174)
|
|
||||||
# ref_energy["vdz"]["HBO"] = Energy(None, -19.1198231418)
|
|
||||||
ref_energy["vdz"]["HBO"] = Energy(None, -19.1198254041)
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# G l o b a l _ v a r i a b l e #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
global has_hf_alredy
|
|
||||||
has_hf_alredy = True
|
|
||||||
|
|
||||||
# ~#~#~#~ #
|
|
||||||
# I n i t #
|
|
||||||
# ~#~#~#~ #
|
|
||||||
|
|
||||||
init_folder(geo, basis, mult, pseudo)
|
|
||||||
ezfio.set_file("{0}.ezfio".format(geo))
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# S e t _ p a r a m e t e r #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
ezfio.integrals_bielec_direct = False
|
|
||||||
ezfio.integrals_bielec_threshold_ao = 1.e-15
|
|
||||||
ezfio.integrals_bielec_disk_access_ao_integrals = "None"
|
|
||||||
|
|
||||||
ezfio.integrals_bielec_threshold_mo = 1.e-15
|
|
||||||
ezfio.integrals_bielec_disk_access_mo_integrals = "None"
|
|
||||||
|
|
||||||
ezfio.hartree_fock_mo_guess_type = "Huckel"
|
|
||||||
ezfio.hartree_fock_thresh_scf = 1.e-10
|
|
||||||
ezfio.hartree_fock_n_it_scf_max = 100
|
|
||||||
|
|
||||||
ezfio.pseudo_do_pseudo = pseudo
|
|
||||||
|
|
||||||
# ~#~#~ #
|
|
||||||
# R u n #
|
|
||||||
# ~#~#~ #
|
|
||||||
|
|
||||||
# cmd = "{0}/Hartree_Fock/SCF {1}.ezfio/".format(QP_src,geo)
|
|
||||||
cmd = "qp_run SCF {0}.ezfio/".format(geo)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
# C h e c k #
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
|
|
||||||
cur_e = ezfio.get_hartree_fock_energy()
|
|
||||||
|
|
||||||
ref_e = ref_energy[basis][geo]
|
|
||||||
if pseudo:
|
|
||||||
ref_e = ref_e.with_pseudo
|
|
||||||
else:
|
|
||||||
ref_e = ref_e.without_pseudo
|
|
||||||
|
|
||||||
if abs(cur_e - ref_e) <= precision:
|
|
||||||
|
|
||||||
if remove_after_sucess:
|
|
||||||
subprocess.call(["rm -R {0}.ezfio".format(geo)], shell=True)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError(get_error_message([ref_e], [cur_e]))
|
|
||||||
|
|
||||||
|
|
||||||
def run_full_ci_10k_pt2_end(geo, basis, pseudo):
|
|
||||||
"""
|
|
||||||
Run a Full_ci with 10k with the TruePT2
|
|
||||||
EZFIO path = geo.ezfio
|
|
||||||
"""
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# R e f _ e n e r g y #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
ref_energy_var = defaultdict(dict)
|
|
||||||
ref_energy_pt2 = defaultdict(dict)
|
|
||||||
|
|
||||||
ref_energy_var["sto-3g"]["methane"] = Energy(-39.8058687211, None)
|
|
||||||
ref_energy_pt2["sto-3g"]["methane"] = Energy(-39.8059180427, None)
|
|
||||||
|
|
||||||
# ~#~#~#~ #
|
|
||||||
# I n i t #
|
|
||||||
# ~#~#~#~ #
|
|
||||||
|
|
||||||
ezfio.set_file("{0}.ezfio".format(geo))
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# S e t _ p a r a m e t e r #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
ezfio.determinants_n_det_max = 10000
|
|
||||||
ezfio.determinants_n_det_max_jacobi = 10000
|
|
||||||
ezfio.determinants_n_states = 1
|
|
||||||
ezfio.determinants_read_wf = 1
|
|
||||||
ezfio.determinants_s2_eig = False
|
|
||||||
|
|
||||||
ezfio.determinants_threshold_generators = 0.99
|
|
||||||
ezfio.determinants_threshold_selectors = 0.999
|
|
||||||
|
|
||||||
ezfio.perturbation_do_pt2_end = True
|
|
||||||
ezfio.perturbation_pt2_max = 1.e-4
|
|
||||||
|
|
||||||
# ~#~#~ #
|
|
||||||
# R u n #
|
|
||||||
# ~#~#~ #
|
|
||||||
|
|
||||||
# cmd = "{0}/Full_CI/full_ci {1}.ezfio/".format(QP_src,geo)
|
|
||||||
cmd = "qp_run full_ci {0}.ezfio/".format(geo)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
# C h e c k #
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
|
|
||||||
cur_var = ezfio.get_full_ci_energy()
|
|
||||||
cur_pt2 = ezfio.get_full_ci_energy_pt2()
|
|
||||||
|
|
||||||
ref_var = ref_energy_var[basis][geo]
|
|
||||||
ref_pt2 = ref_energy_pt2[basis][geo]
|
|
||||||
|
|
||||||
if pseudo:
|
|
||||||
ref_var = ref_var.with_pseudo
|
|
||||||
ref_pt2 = ref_pt2.with_pseudo
|
|
||||||
else:
|
|
||||||
ref_var = ref_var.without_pseudo
|
|
||||||
ref_pt2 = ref_pt2.without_pseudo
|
|
||||||
|
|
||||||
t = [abs(cur_var - ref_var) <= precision,
|
|
||||||
abs(cur_pt2 - ref_pt2) <= precision]
|
|
||||||
|
|
||||||
if all(t):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
raise ValueError(get_error_message([ref_var, ref_pt2],
|
|
||||||
[cur_var, cur_pt2]))
|
|
||||||
|
|
||||||
|
|
||||||
def hf_then_10k_test(geo, basis, mult=1, pseudo=False):
|
|
||||||
|
|
||||||
run_hf(geo, basis, mult, pseudo, remove_after_sucess=False)
|
|
||||||
|
|
||||||
try:
|
|
||||||
run_full_ci_10k_pt2_end(geo, basis, pseudo)
|
|
||||||
except:
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
return_code = True
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
# F i n a l i z e #
|
|
||||||
# ~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
if return_code:
|
|
||||||
subprocess.call(["rm -R {0}.ezfio".format(geo)], shell=True)
|
|
||||||
return return_code
|
|
||||||
|
|
||||||
|
|
||||||
# _
|
|
||||||
# / |_ _ _ | _. ._ _ _ ._ _ ._ _|_
|
|
||||||
# \_ | | (/_ (_ |< (_| |_) (_ (_) | | \/ (/_ | |_
|
|
||||||
# | | __
|
|
||||||
def check_convert(path_out):
|
|
||||||
'''
|
|
||||||
Path_out is the out_file
|
|
||||||
'''
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# R e f _ e n e r g y #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
|
|
||||||
ref_energy = defaultdict(dict)
|
|
||||||
|
|
||||||
ref_energy["HBO.out"] = -100.0185822589
|
|
||||||
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
# S e t _ p a r a m e t e r #
|
|
||||||
# ~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
|
||||||
cmd = "qp_convert_output_to_ezfio.py {0}".format(path_out)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# Test 2
|
|
||||||
cmd = "qp_edit -c {0}.ezfio".format(path_out)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
cmd = "qp_run SCF {0}.ezfio".format(path_out)
|
|
||||||
subprocess.check_call([cmd], shell=True)
|
|
||||||
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
# C h e c k #
|
|
||||||
# ~#~#~#~#~ #
|
|
||||||
|
|
||||||
ezfio.set_file("{0}.ezfio".format(path_out))
|
|
||||||
|
|
||||||
cur_e = ezfio.get_hartree_fock_energy()
|
|
||||||
ref_e = ref_energy[path_out]
|
|
||||||
|
|
||||||
if abs(cur_e - ref_e) <= precision:
|
|
||||||
subprocess.call(["rm -R {0}.ezfio".format(path_out)], shell=True)
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
raise ValueError(get_error_message([ref_e], [cur_e]))
|
|
||||||
|
|
||||||
|
|
||||||
# ___
|
|
||||||
# | _ _ _|_
|
|
||||||
# | (/_ _> |_
|
|
||||||
#
|
|
||||||
class ValueTest(unittest.TestCase):
|
|
||||||
|
|
||||||
def test_hf_then_full_ci_10k_pt2_end(self):
|
|
||||||
self.assertTrue(hf_then_10k_test(geo="methane",
|
|
||||||
basis="sto-3g",
|
|
||||||
mult=1,
|
|
||||||
pseudo=False))
|
|
||||||
|
|
||||||
def test_hf(self):
|
|
||||||
self.assertTrue(run_hf(geo="HBO",
|
|
||||||
basis="vdz",
|
|
||||||
mult=1,
|
|
||||||
pseudo=True))
|
|
||||||
|
|
||||||
|
|
||||||
class ConvertTest(unittest.TestCase):
|
|
||||||
def test_check_convert_hf_energy(self):
|
|
||||||
self.assertTrue(check_convert("HBO.out"))
|
|
||||||
|
|
||||||
|
|
||||||
class InputTest(unittest.TestCase):
|
|
||||||
|
|
||||||
def test_check_disk_acess(self):
|
|
||||||
self.assertTrue(check_disk_acess(geo="methane",
|
|
||||||
basis="un-ccemd-ref"))
|
|
||||||
|
|
||||||
def test_check_mo_guess(self):
|
|
||||||
self.assertTrue(check_mo_guess(geo="methane",
|
|
||||||
basis="maug-cc-pVDZ"))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
Loading…
Reference in New Issue
Block a user