Fix travil
@ -27,7 +27,7 @@ python:
|
|||||||
script:
|
script:
|
||||||
- ./configure --production ./config/gfortran.cfg
|
- ./configure --production ./config/gfortran.cfg
|
||||||
- source ./quantum_package.rc
|
- source ./quantum_package.rc
|
||||||
- qp_module.py install Full_CI Hartree_Fock
|
- qp_install_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 testing_no_regression ; ./unit_test.py
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
[COMMON]
|
[COMMON]
|
||||||
FC : gfortran -g -ffree-line-length-none -I .
|
FC : gfortran -g -ffree-line-length-none -I . -static-libgcc
|
||||||
LAPACK_LIB : -llapack -lblas
|
LAPACK_LIB : -llapack -lblas
|
||||||
IRPF90 : irpf90
|
IRPF90 : irpf90
|
||||||
IRPF90_FLAGS : --ninja --align=32
|
IRPF90_FLAGS : --ninja --align=32
|
||||||
@ -22,7 +22,7 @@ IRPF90_FLAGS : --ninja --align=32
|
|||||||
# 0 : Deactivate
|
# 0 : Deactivate
|
||||||
#
|
#
|
||||||
[OPTION]
|
[OPTION]
|
||||||
MODE : OPT ; [ OPT | PROFILE | DEBUG ] : Chooses the section below
|
MODE : DEBUG ; [ OPT | PROFILE | DEBUG ] : Chooses the section below
|
||||||
CACHE : 1 ; Enable cache_compile.py
|
CACHE : 1 ; Enable cache_compile.py
|
||||||
OPENMP : 1 ; Append OpenMP flags
|
OPENMP : 1 ; Append OpenMP flags
|
||||||
|
|
||||||
|
70
configure
vendored
@ -33,8 +33,8 @@ import sys
|
|||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
if not any(i in ["--production", "--development"] for i in sys.argv):
|
if not any(i in ["--production", "--development"] for i in sys.argv):
|
||||||
print __doc__
|
sys.argv += ["--development"]
|
||||||
sys.exit()
|
|
||||||
if len(sys.argv) != 3:
|
if len(sys.argv) != 3:
|
||||||
print __doc__
|
print __doc__
|
||||||
sys.exit()
|
sys.exit()
|
||||||
@ -46,6 +46,7 @@ if len(sys.argv) != 3:
|
|||||||
|
|
||||||
QP_ROOT = os.getcwd()
|
QP_ROOT = os.getcwd()
|
||||||
QP_ROOT_BIN = join(QP_ROOT, "bin")
|
QP_ROOT_BIN = join(QP_ROOT, "bin")
|
||||||
|
QP_ROOT_LIB = join(QP_ROOT, "lib")
|
||||||
QP_ROOT_INSTALL = join(QP_ROOT, "install")
|
QP_ROOT_INSTALL = join(QP_ROOT, "install")
|
||||||
|
|
||||||
os.environ["PATH"] = os.environ["PATH"] + ":" + QP_ROOT_BIN
|
os.environ["PATH"] = os.environ["PATH"] + ":" + QP_ROOT_BIN
|
||||||
@ -62,8 +63,11 @@ d_dependency = {
|
|||||||
"resultsFile": ["python"],
|
"resultsFile": ["python"],
|
||||||
"emsl": ["python"],
|
"emsl": ["python"],
|
||||||
"gcc": [],
|
"gcc": [],
|
||||||
|
"g++": [],
|
||||||
|
"zeromq" : [ "g++" ],
|
||||||
|
"f77zmq" : [ "zeromq", "python" ],
|
||||||
"python": [],
|
"python": [],
|
||||||
"ninja": ["gcc", "python"],
|
"ninja": ["g++", "python"],
|
||||||
"make": [],
|
"make": [],
|
||||||
"p_graphviz": ["python"]
|
"p_graphviz": ["python"]
|
||||||
}
|
}
|
||||||
@ -92,12 +96,12 @@ curl = Info(
|
|||||||
zlib = Info(
|
zlib = Info(
|
||||||
url='http://zlib.net/zlib-1.2.8.tar.gz',
|
url='http://zlib.net/zlib-1.2.8.tar.gz',
|
||||||
description=' zlib',
|
description=' zlib',
|
||||||
default_path=join(QP_ROOT_INSTALL, "zlib"))
|
default_path=join(QP_ROOT_LIB, "libz.a"))
|
||||||
|
|
||||||
path = Info(
|
patch = Info(
|
||||||
url='ftp://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.gz',
|
url='ftp://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.gz',
|
||||||
description=' path',
|
description=' patch',
|
||||||
default_path=join(QP_ROOT, "lib", "libz.a"))
|
default_path=join(QP_ROOT_BIN, "patch"))
|
||||||
|
|
||||||
irpf90 = Info(
|
irpf90 = Info(
|
||||||
url='{head}/LCPQ/irpf90/{tail}'.format(**path_github),
|
url='{head}/LCPQ/irpf90/{tail}'.format(**path_github),
|
||||||
@ -116,12 +120,11 @@ resultsFile = Info(
|
|||||||
|
|
||||||
ninja = Info(
|
ninja = Info(
|
||||||
url='{head}/martine/ninja/{tail}'.format(**path_github),
|
url='{head}/martine/ninja/{tail}'.format(**path_github),
|
||||||
description=' nina',
|
description=' ninja',
|
||||||
default_path=join(QP_ROOT_BIN, "ninja"))
|
default_path=join(QP_ROOT_BIN, "ninja"))
|
||||||
|
|
||||||
emsl = Info(
|
emsl = Info(
|
||||||
url='{head}/LCPQ/EMSL_Basis_Set_Exchange_Local/{tail}'.format(**
|
url='{head}/LCPQ/EMSL_Basis_Set_Exchange_Local/{tail}'.format(**path_github),
|
||||||
path_github),
|
|
||||||
description=' EMSL basis set library',
|
description=' EMSL basis set library',
|
||||||
default_path=join(QP_ROOT_INSTALL, "emsl"))
|
default_path=join(QP_ROOT_INSTALL, "emsl"))
|
||||||
|
|
||||||
@ -130,6 +133,16 @@ ezfio = Info(
|
|||||||
description=' EZFIO',
|
description=' EZFIO',
|
||||||
default_path=join(QP_ROOT_INSTALL, "EZFIO"))
|
default_path=join(QP_ROOT_INSTALL, "EZFIO"))
|
||||||
|
|
||||||
|
zeromq = Info(
|
||||||
|
url='http://download.zeromq.org/zeromq-4.1.3.tar.gz',
|
||||||
|
description=' ZeroMQ',
|
||||||
|
default_path=join(QP_ROOT_LIB, "libzmq.a"))
|
||||||
|
|
||||||
|
f77zmq = Info(
|
||||||
|
url='{head}/zeromq/f77_zmq/{tail}'.format(**path_github),
|
||||||
|
description=' F77-ZeroMQ',
|
||||||
|
default_path=join(QP_ROOT_LIB, "libf77zmq.a"))
|
||||||
|
|
||||||
p_graphviz = Info(
|
p_graphviz = Info(
|
||||||
url='https://github.com/xflr6/graphviz/archive/master.tar.gz',
|
url='https://github.com/xflr6/graphviz/archive/master.tar.gz',
|
||||||
description=' Python library for graphviz',
|
description=' Python library for graphviz',
|
||||||
@ -137,8 +150,9 @@ p_graphviz = Info(
|
|||||||
|
|
||||||
d_info = dict()
|
d_info = dict()
|
||||||
|
|
||||||
for m in ["ocaml", "m4", "curl", "zlib", "path", "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" ]:
|
||||||
exec ("d_info['{0}']={0}".format(m))
|
exec ("d_info['{0}']={0}".format(m))
|
||||||
|
|
||||||
|
|
||||||
@ -189,8 +203,7 @@ def check_output(*popenargs, **kwargs):
|
|||||||
|
|
||||||
def checking(d_dependency):
|
def checking(d_dependency):
|
||||||
"""
|
"""
|
||||||
For each key in d_dependency check if it
|
For each key in d_dependency check if it is avalabie
|
||||||
is avalabie or not
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def check_python():
|
def check_python():
|
||||||
@ -260,7 +273,7 @@ def checking(d_dependency):
|
|||||||
l_installed = dict()
|
l_installed = dict()
|
||||||
l_needed = []
|
l_needed = []
|
||||||
|
|
||||||
# Check all the other
|
# Check all the others
|
||||||
length = max(map(len, d_dependency))
|
length = max(map(len, d_dependency))
|
||||||
|
|
||||||
for i in d_dependency.keys():
|
for i in d_dependency.keys():
|
||||||
@ -275,7 +288,7 @@ def checking(d_dependency):
|
|||||||
l_needed.append(i)
|
l_needed.append(i)
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
# Expend the need_stuff for all the genealogy
|
# Expand the needed stuff for all the genealogy
|
||||||
l_install_descendant = get_list_descendant(d_dependency, l_installed,
|
l_install_descendant = get_list_descendant(d_dependency, l_installed,
|
||||||
l_needed)
|
l_needed)
|
||||||
|
|
||||||
@ -328,7 +341,7 @@ _|_ | | _> |_ (_| | | (_| |_ | (_) | |
|
|||||||
d_print = {
|
d_print = {
|
||||||
"install_ninja": "Install ninja...",
|
"install_ninja": "Install ninja...",
|
||||||
"build": "Creating build.ninja...",
|
"build": "Creating build.ninja...",
|
||||||
"install": "Installing the dependencies with Ninja..."
|
"install": "Installing the dependencies using Ninja..."
|
||||||
}
|
}
|
||||||
|
|
||||||
length = max(map(len, d_print.values()))
|
length = max(map(len, d_print.values()))
|
||||||
@ -372,7 +385,7 @@ _|_ | | _> |_ (_| | | (_| |_ | (_) | |
|
|||||||
descr = d_info[need].description
|
descr = d_info[need].description
|
||||||
default_path = d_info[need].default_path
|
default_path = d_info[need].default_path
|
||||||
|
|
||||||
# Build to dowload
|
# Build to download
|
||||||
l_build += ["build {0}: download".format(archive_path),
|
l_build += ["build {0}: download".format(archive_path),
|
||||||
" url = {0}".format(url), " descr = {0}".format(descr),
|
" url = {0}".format(url), " descr = {0}".format(descr),
|
||||||
""]
|
""]
|
||||||
@ -404,7 +417,16 @@ _|_ | | _> |_ (_| | | (_| |_ | (_) | |
|
|||||||
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)
|
||||||
except:
|
except:
|
||||||
raise
|
prefix = os.path.join('install', '_build')
|
||||||
|
for filename in os.listdir(prefix):
|
||||||
|
if filename.endswith(".log"):
|
||||||
|
with open( os.path.join(prefix,filename) ,'r') as f:
|
||||||
|
print "\n\n"
|
||||||
|
print "=-=-=-=-=-=- %s =-=-=-=-=-=-" %(filename)
|
||||||
|
print f.read()
|
||||||
|
print "=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n"
|
||||||
|
print "Error in installation of dependencies"
|
||||||
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print r"""
|
print r"""
|
||||||
_________
|
_________
|
||||||
@ -437,11 +459,12 @@ def create_ninja_and_rc(l_installed):
|
|||||||
print str_info("qp_root"),
|
print str_info("qp_root"),
|
||||||
python_path = [join(QP_ROOT, "scripts"), join(QP_ROOT, "install")]
|
python_path = [join(QP_ROOT, "scripts"), join(QP_ROOT, "install")]
|
||||||
|
|
||||||
l_python = [join(QP_ROOT, "scripts")]
|
l_python = [join("${QP_ROOT}", "scripts")]
|
||||||
for dir_ in python_path:
|
for dir_ in python_path:
|
||||||
for folder in os.listdir(dir_):
|
for folder in os.listdir(dir_):
|
||||||
path = join(dir_, folder)
|
path = join(dir_, folder)
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
|
path = path.replace(QP_ROOT,"${QP_ROOT}")
|
||||||
l_python.append(path)
|
l_python.append(path)
|
||||||
|
|
||||||
path_ezfio = find_path('ezfio', l_installed, var_for_qp_root=True)
|
path_ezfio = find_path('ezfio', l_installed, var_for_qp_root=True)
|
||||||
@ -450,9 +473,9 @@ def create_ninja_and_rc(l_installed):
|
|||||||
|
|
||||||
l_rc = [
|
l_rc = [
|
||||||
'export QP_ROOT={0}'.format(QP_ROOT),
|
'export QP_ROOT={0}'.format(QP_ROOT),
|
||||||
'export QP_EZFIO={0}'.format(path_ezfio),
|
'export QP_EZFIO={0}'.format(path_ezfio.replace(QP_ROOT,"${QP_ROOT}")),
|
||||||
'export IRPF90={0}'.format(path_irpf90),
|
'export IRPF90={0}'.format(path_irpf90.replace(QP_ROOT,"${QP_ROOT}")),
|
||||||
'export NINJA={0}'.format(path_ninja),
|
'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}/Python":"${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}"',
|
||||||
@ -526,3 +549,4 @@ if __name__ == '__main__':
|
|||||||
create_ninja_and_rc(l_installed)
|
create_ninja_and_rc(l_installed)
|
||||||
|
|
||||||
recommendation()
|
recommendation()
|
||||||
|
|
||||||
|
23
install/scripts/install_f77zmq.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
TARGET=f77zmq
|
||||||
|
|
||||||
|
function _install()
|
||||||
|
{
|
||||||
|
cd ..
|
||||||
|
QP_ROOT=$PWD
|
||||||
|
cd -
|
||||||
|
export C_INCLUDE_PATH="${C_INCLUDE_PATH}":"${QP_ROOT}"/lib
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
export ZMQ_H="${QP_ROOT}"/lib/zmq.h
|
||||||
|
cd "${BUILD}"
|
||||||
|
make -j 8 || exit 1
|
||||||
|
mv libf77zmq.a "${QP_ROOT}"/lib || exit 1
|
||||||
|
mv libf77zmq.so "${QP_ROOT}"/lib || exit 1
|
||||||
|
cp f77_zmq.h "${QP_ROOT}"/src/ZMQ/
|
||||||
|
cd -
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
source scripts/build.sh
|
27
install/scripts/install_zeromq.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
TARGET=zeromq
|
||||||
|
|
||||||
|
function _install()
|
||||||
|
{
|
||||||
|
cd ..
|
||||||
|
QP_ROOT=$PWD
|
||||||
|
cd -
|
||||||
|
export C_INCLUDE_PATH="${C_INCLUDE_PATH}":./
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
ORIG=$(pwd)
|
||||||
|
cd "${BUILD}"
|
||||||
|
./configure --without-libsodium || exit 1
|
||||||
|
make -j 8 || exit 1
|
||||||
|
rm -f -- "${QP_ROOT}"/lib/libzmq.a "${QP_ROOT}"/lib/libzmq.so "${QP_ROOT}"/lib/libzmq.so.5
|
||||||
|
cp .libs/libzmq.a "${QP_ROOT}"/lib
|
||||||
|
cp .libs/libzmq.so "${QP_ROOT}"/lib/libzmq.so.5
|
||||||
|
cp include/{zmq.h,zmq_utils.h} "${QP_ROOT}"/lib
|
||||||
|
cd "${QP_ROOT}"/lib
|
||||||
|
ln -s libzmq.so.5 libzmq.so
|
||||||
|
cd ${ORIG}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
source scripts/build.sh
|
@ -8,8 +8,8 @@ type t =
|
|||||||
coord : Point3d.t ;
|
coord : Point3d.t ;
|
||||||
} with sexp
|
} with sexp
|
||||||
|
|
||||||
(** Read xyz coordinates of the atom with unit u *)
|
(** Read xyz coordinates of the atom *)
|
||||||
let of_string u s =
|
let of_string ~units s =
|
||||||
let buffer = s
|
let buffer = s
|
||||||
|> String.split ~on:' '
|
|> String.split ~on:' '
|
||||||
|> List.filter ~f:(fun x -> x <> "")
|
|> List.filter ~f:(fun x -> x <> "")
|
||||||
@ -18,21 +18,21 @@ let of_string u s =
|
|||||||
| [ name; charge; x; y; z ] ->
|
| [ name; charge; x; y; z ] ->
|
||||||
{ element = Element.of_string name ;
|
{ element = Element.of_string name ;
|
||||||
charge = Charge.of_string charge ;
|
charge = Charge.of_string charge ;
|
||||||
coord = Point3d.of_string u (String.concat [x; y; z] ~sep:" ")
|
coord = Point3d.of_string ~units (String.concat [x; y; z] ~sep:" ")
|
||||||
}
|
}
|
||||||
| [ name; x; y; z ] ->
|
| [ name; x; y; z ] ->
|
||||||
let e = Element.of_string name in
|
let e = Element.of_string name in
|
||||||
{ element = e ;
|
{ element = e ;
|
||||||
charge = Element.to_charge e;
|
charge = Element.to_charge e;
|
||||||
coord = Point3d.of_string u (String.concat [x; y; z] ~sep:" ")
|
coord = Point3d.of_string ~units (String.concat [x; y; z] ~sep:" ")
|
||||||
}
|
}
|
||||||
| _ -> raise (AtomError s)
|
| _ -> raise (AtomError s)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let to_string u a =
|
let to_string ~units a =
|
||||||
[ Element.to_string a.element ;
|
[ Element.to_string a.element ;
|
||||||
Charge.to_string a.charge ;
|
Charge.to_string a.charge ;
|
||||||
Point3d.to_string u a.coord ]
|
Point3d.to_string ~units a.coord ]
|
||||||
|> String.concat ~sep:" "
|
|> String.concat ~sep:" "
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -5,5 +5,5 @@ type t = { element : Element.t; charge : Charge.t; coord : Point3d.t; }
|
|||||||
val t_of_sexp : Sexplib.Sexp.t -> t
|
val t_of_sexp : Sexplib.Sexp.t -> t
|
||||||
val sexp_of_t : t -> Sexplib.Sexp.t
|
val sexp_of_t : t -> Sexplib.Sexp.t
|
||||||
|
|
||||||
val of_string : Units.units -> string -> t
|
val of_string : units:Units.units -> string -> t
|
||||||
val to_string : Units.units -> t -> string
|
val to_string : units:Units.units -> t -> string
|
||||||
|
144
ocaml/Element.ml
@ -1,4 +1,5 @@
|
|||||||
open Core.Std;;
|
open Core.Std
|
||||||
|
open Qptypes
|
||||||
|
|
||||||
exception ElementError of string
|
exception ElementError of string
|
||||||
|
|
||||||
@ -8,7 +9,7 @@ type t =
|
|||||||
|Li|Be |B |C |N |O |F |Ne
|
|Li|Be |B |C |N |O |F |Ne
|
||||||
|Na|Mg |Al|Si|P |S |Cl|Ar
|
|Na|Mg |Al|Si|P |S |Cl|Ar
|
||||||
|K |Ca|Sc|Ti|V |Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr
|
|K |Ca|Sc|Ti|V |Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr
|
||||||
with sexp;;
|
with sexp
|
||||||
|
|
||||||
let of_string x =
|
let of_string x =
|
||||||
match (String.capitalize (String.lowercase x)) with
|
match (String.capitalize (String.lowercase x)) with
|
||||||
@ -50,7 +51,7 @@ let of_string x =
|
|||||||
| "Br" | "Bromine" -> Br
|
| "Br" | "Bromine" -> Br
|
||||||
| "Kr" | "Krypton" -> Kr
|
| "Kr" | "Krypton" -> Kr
|
||||||
| x -> raise (ElementError ("Element "^x^" unknown"))
|
| x -> raise (ElementError ("Element "^x^" unknown"))
|
||||||
;;
|
|
||||||
|
|
||||||
let to_string = function
|
let to_string = function
|
||||||
| X -> "X"
|
| X -> "X"
|
||||||
@ -90,7 +91,7 @@ let to_string = function
|
|||||||
| Se -> "Se"
|
| Se -> "Se"
|
||||||
| Br -> "Br"
|
| Br -> "Br"
|
||||||
| Kr -> "Kr"
|
| Kr -> "Kr"
|
||||||
;;
|
|
||||||
|
|
||||||
let to_long_string = function
|
let to_long_string = function
|
||||||
| X -> "Dummy"
|
| X -> "Dummy"
|
||||||
@ -130,7 +131,7 @@ let to_long_string = function
|
|||||||
| Se -> "Selenium"
|
| Se -> "Selenium"
|
||||||
| Br -> "Bromine"
|
| Br -> "Bromine"
|
||||||
| Kr -> "Krypton"
|
| Kr -> "Krypton"
|
||||||
;;
|
|
||||||
|
|
||||||
let to_charge c =
|
let to_charge c =
|
||||||
let result = match c with
|
let result = match c with
|
||||||
@ -172,7 +173,7 @@ let to_charge c =
|
|||||||
| Br -> 35
|
| Br -> 35
|
||||||
| Kr -> 36
|
| Kr -> 36
|
||||||
in Charge.of_int result
|
in Charge.of_int result
|
||||||
;;
|
|
||||||
|
|
||||||
let of_charge c = match (Charge.to_int c) with
|
let of_charge c = match (Charge.to_int c) with
|
||||||
| 0 -> X
|
| 0 -> X
|
||||||
@ -213,5 +214,134 @@ let of_charge c = match (Charge.to_int c) with
|
|||||||
| 35 -> Br
|
| 35 -> Br
|
||||||
| 36 -> Kr
|
| 36 -> Kr
|
||||||
| x -> raise (ElementError ("Element of charge "^(string_of_int x)^" unknown"))
|
| x -> raise (ElementError ("Element of charge "^(string_of_int x)^" unknown"))
|
||||||
;;
|
|
||||||
|
|
||||||
|
let covalent_radius x =
|
||||||
|
let result = function
|
||||||
|
| X -> 0.
|
||||||
|
| H -> 0.37
|
||||||
|
| He -> 0.70
|
||||||
|
| Li -> 1.23
|
||||||
|
| Be -> 0.89
|
||||||
|
| B -> 0.90
|
||||||
|
| C -> 0.85
|
||||||
|
| N -> 0.74
|
||||||
|
| O -> 0.74
|
||||||
|
| F -> 0.72
|
||||||
|
| Ne -> 0.70
|
||||||
|
| Na -> 1.00
|
||||||
|
| Mg -> 1.36
|
||||||
|
| Al -> 1.25
|
||||||
|
| Si -> 1.17
|
||||||
|
| P -> 1.10
|
||||||
|
| S -> 1.10
|
||||||
|
| Cl -> 0.99
|
||||||
|
| Ar -> 0.70
|
||||||
|
| K -> 2.03
|
||||||
|
| Ca -> 1.74
|
||||||
|
| Sc -> 1.44
|
||||||
|
| Ti -> 1.32
|
||||||
|
| V -> 1.22
|
||||||
|
| Cr -> 0.00
|
||||||
|
| Mn -> 1.16
|
||||||
|
| Fe -> 0.00
|
||||||
|
| Co -> 1.15
|
||||||
|
| Ni -> 1.17
|
||||||
|
| Cu -> 1.25
|
||||||
|
| Zn -> 1.25
|
||||||
|
| Ga -> 1.20
|
||||||
|
| Ge -> 1.21
|
||||||
|
| As -> 1.16
|
||||||
|
| Se -> 0.70
|
||||||
|
| Br -> 1.24
|
||||||
|
| Kr -> 1.91
|
||||||
|
in
|
||||||
|
Units.angstrom_to_bohr *. (result x)
|
||||||
|
|> Positive_float.of_float
|
||||||
|
|
||||||
|
let vdw_radius x =
|
||||||
|
let result = function
|
||||||
|
| X -> 0.
|
||||||
|
| H -> 1.20
|
||||||
|
| He -> 1.70
|
||||||
|
| Li -> 1.70
|
||||||
|
| Be -> 1.70
|
||||||
|
| B -> 1.70
|
||||||
|
| C -> 1.70
|
||||||
|
| N -> 1.55
|
||||||
|
| O -> 1.52
|
||||||
|
| F -> 1.47
|
||||||
|
| Ne -> 1.70
|
||||||
|
| Na -> 1.70
|
||||||
|
| Mg -> 1.70
|
||||||
|
| Al -> 1.94
|
||||||
|
| Si -> 2.10
|
||||||
|
| P -> 1.80
|
||||||
|
| S -> 1.80
|
||||||
|
| Cl -> 1.75
|
||||||
|
| Ar -> 1.70
|
||||||
|
| K -> 1.70
|
||||||
|
| Ca -> 1.70
|
||||||
|
| Sc -> 1.70
|
||||||
|
| Ti -> 1.70
|
||||||
|
| V -> 1.98
|
||||||
|
| Cr -> 1.94
|
||||||
|
| Mn -> 1.93
|
||||||
|
| Fe -> 1.93
|
||||||
|
| Co -> 1.92
|
||||||
|
| Ni -> 1.70
|
||||||
|
| Cu -> 1.70
|
||||||
|
| Zn -> 1.70
|
||||||
|
| Ga -> 2.02
|
||||||
|
| Ge -> 1.70
|
||||||
|
| As -> 1.96
|
||||||
|
| Se -> 1.70
|
||||||
|
| Br -> 2.10
|
||||||
|
| Kr -> 1.70
|
||||||
|
in
|
||||||
|
Units.angstrom_to_bohr *. (result x)
|
||||||
|
|> Positive_float.of_float
|
||||||
|
|
||||||
|
let mass x =
|
||||||
|
let result = function
|
||||||
|
| X -> 0.
|
||||||
|
| H -> 1.0079
|
||||||
|
| He -> 4.00260
|
||||||
|
| Li -> 6.941
|
||||||
|
| Be -> 9.01218
|
||||||
|
| B -> 10.81
|
||||||
|
| C -> 12.011
|
||||||
|
| N -> 14.0067
|
||||||
|
| O -> 15.9994
|
||||||
|
| F -> 18.998403
|
||||||
|
| Ne -> 20.179
|
||||||
|
| Na -> 22.98977
|
||||||
|
| Mg -> 24.305
|
||||||
|
| Al -> 26.98154
|
||||||
|
| Si -> 28.0855
|
||||||
|
| P -> 30.97376
|
||||||
|
| S -> 32.06
|
||||||
|
| Cl -> 35.453
|
||||||
|
| Ar -> 39.948
|
||||||
|
| K -> 39.0983
|
||||||
|
| Ca -> 40.08
|
||||||
|
| Sc -> 44.9559
|
||||||
|
| Ti -> 47.90
|
||||||
|
| V -> 50.9415
|
||||||
|
| Cr -> 51.996
|
||||||
|
| Mn -> 54.9380
|
||||||
|
| Fe -> 55.9332
|
||||||
|
| Co -> 58.9332
|
||||||
|
| Ni -> 58.70
|
||||||
|
| Cu -> 63.546
|
||||||
|
| Zn -> 65.38
|
||||||
|
| Ga -> 69.72
|
||||||
|
| Ge -> 72.59
|
||||||
|
| As -> 74.9216
|
||||||
|
| Se -> 78.96
|
||||||
|
| Br -> 79.904
|
||||||
|
| Kr -> 83.80
|
||||||
|
in
|
||||||
|
result x
|
||||||
|
|> Positive_float.of_float
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ val of_string : string -> t
|
|||||||
val to_string : t -> string
|
val to_string : t -> string
|
||||||
val to_long_string : t -> string
|
val to_long_string : t -> string
|
||||||
|
|
||||||
(** get the positive charge *)
|
(** Properties *)
|
||||||
val to_charge : t -> Charge.t
|
val to_charge : t -> Charge.t
|
||||||
val of_charge : Charge.t -> t
|
val of_charge : Charge.t -> t
|
||||||
|
val covalent_radius : t -> Qptypes.Positive_float.t
|
||||||
|
val vdw_radius : t -> Qptypes.Positive_float.t
|
||||||
|
@ -7,8 +7,6 @@ module Determinants_by_hand : sig
|
|||||||
{ n_int : N_int_number.t;
|
{ n_int : N_int_number.t;
|
||||||
bit_kind : Bit_kind.t;
|
bit_kind : Bit_kind.t;
|
||||||
n_det : Det_number.t;
|
n_det : Det_number.t;
|
||||||
n_states : States_number.t;
|
|
||||||
n_states_diag : States_number.t;
|
|
||||||
expected_s2 : Positive_float.t;
|
expected_s2 : Positive_float.t;
|
||||||
psi_coef : Det_coef.t array;
|
psi_coef : Det_coef.t array;
|
||||||
psi_det : Determinant.t array;
|
psi_det : Determinant.t array;
|
||||||
@ -23,8 +21,6 @@ end = struct
|
|||||||
{ n_int : N_int_number.t;
|
{ n_int : N_int_number.t;
|
||||||
bit_kind : Bit_kind.t;
|
bit_kind : Bit_kind.t;
|
||||||
n_det : Det_number.t;
|
n_det : Det_number.t;
|
||||||
n_states : States_number.t;
|
|
||||||
n_states_diag : States_number.t;
|
|
||||||
expected_s2 : Positive_float.t;
|
expected_s2 : Positive_float.t;
|
||||||
psi_coef : Det_coef.t array;
|
psi_coef : Det_coef.t array;
|
||||||
psi_det : Determinant.t array;
|
psi_det : Determinant.t array;
|
||||||
@ -146,11 +142,12 @@ end = struct
|
|||||||
|> Array.map ~f:Det_coef.of_float
|
|> Array.map ~f:Det_coef.of_float
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let write_psi_coef ~n_det ~n_states c =
|
let write_psi_coef ~n_det c =
|
||||||
let n_det = Det_number.to_int n_det
|
let n_det = Det_number.to_int n_det
|
||||||
and c = Array.to_list c
|
and c = Array.to_list c
|
||||||
|> List.map ~f:Det_coef.to_float
|
|> List.map ~f:Det_coef.to_float
|
||||||
and n_states = States_number.to_int n_states
|
and n_states =
|
||||||
|
read_n_states () |> States_number.to_int
|
||||||
in
|
in
|
||||||
Ezfio.ezfio_array_of_list ~rank:2 ~dim:[| n_det ; n_states |] ~data:c
|
Ezfio.ezfio_array_of_list ~rank:2 ~dim:[| n_det ; n_states |] ~data:c
|
||||||
|> Ezfio.set_determinants_psi_coef
|
|> Ezfio.set_determinants_psi_coef
|
||||||
@ -214,8 +211,6 @@ end = struct
|
|||||||
{ n_int = read_n_int () ;
|
{ n_int = read_n_int () ;
|
||||||
bit_kind = read_bit_kind () ;
|
bit_kind = read_bit_kind () ;
|
||||||
n_det = read_n_det () ;
|
n_det = read_n_det () ;
|
||||||
n_states = read_n_states () ;
|
|
||||||
n_states_diag = read_n_states_diag () ;
|
|
||||||
expected_s2 = read_expected_s2 () ;
|
expected_s2 = read_expected_s2 () ;
|
||||||
psi_coef = read_psi_coef () ;
|
psi_coef = read_psi_coef () ;
|
||||||
psi_det = read_psi_det () ;
|
psi_det = read_psi_det () ;
|
||||||
@ -227,8 +222,6 @@ end = struct
|
|||||||
let write { n_int ;
|
let write { n_int ;
|
||||||
bit_kind ;
|
bit_kind ;
|
||||||
n_det ;
|
n_det ;
|
||||||
n_states ;
|
|
||||||
n_states_diag ;
|
|
||||||
expected_s2 ;
|
expected_s2 ;
|
||||||
psi_coef ;
|
psi_coef ;
|
||||||
psi_det ;
|
psi_det ;
|
||||||
@ -236,10 +229,8 @@ end = struct
|
|||||||
write_n_int n_int ;
|
write_n_int n_int ;
|
||||||
write_bit_kind bit_kind;
|
write_bit_kind bit_kind;
|
||||||
write_n_det n_det;
|
write_n_det n_det;
|
||||||
write_n_states n_states;
|
|
||||||
write_n_states_diag ~n_states:n_states n_states_diag;
|
|
||||||
write_expected_s2 expected_s2;
|
write_expected_s2 expected_s2;
|
||||||
write_psi_coef ~n_det:n_det psi_coef ~n_states:n_states;
|
write_psi_coef ~n_det:n_det psi_coef ;
|
||||||
write_psi_det ~n_int:n_int ~n_det:n_det psi_det;
|
write_psi_det ~n_int:n_int ~n_det:n_det psi_det;
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -249,7 +240,7 @@ end = struct
|
|||||||
let mo_tot_num = MO_number.of_int mo_tot_num ~max:mo_tot_num in
|
let mo_tot_num = MO_number.of_int mo_tot_num ~max:mo_tot_num in
|
||||||
let det_text =
|
let det_text =
|
||||||
let nstates =
|
let nstates =
|
||||||
States_number.to_int b.n_states
|
read_n_states () |> States_number.to_int
|
||||||
and ndet =
|
and ndet =
|
||||||
Det_number.to_int b.n_det
|
Det_number.to_int b.n_det
|
||||||
in
|
in
|
||||||
@ -284,12 +275,6 @@ If true, input the expected value of S^2 ::
|
|||||||
|
|
||||||
expected_s2 = %s
|
expected_s2 = %s
|
||||||
|
|
||||||
Number of requested states, and number of states used for the
|
|
||||||
Davidson diagonalization ::
|
|
||||||
|
|
||||||
n_states = %s
|
|
||||||
n_states_diag = %s
|
|
||||||
|
|
||||||
Number of determinants ::
|
Number of determinants ::
|
||||||
|
|
||||||
n_det = %s
|
n_det = %s
|
||||||
@ -299,8 +284,6 @@ Determinants ::
|
|||||||
%s
|
%s
|
||||||
"
|
"
|
||||||
(b.expected_s2 |> Positive_float.to_string)
|
(b.expected_s2 |> Positive_float.to_string)
|
||||||
(b.n_states |> States_number.to_string)
|
|
||||||
(b.n_states_diag |> States_number.to_string)
|
|
||||||
(b.n_det |> Det_number.to_string)
|
(b.n_det |> Det_number.to_string)
|
||||||
det_text
|
det_text
|
||||||
|> Rst_string.of_string
|
|> Rst_string.of_string
|
||||||
@ -313,8 +296,6 @@ Determinants ::
|
|||||||
n_int = %s
|
n_int = %s
|
||||||
bit_kind = %s
|
bit_kind = %s
|
||||||
n_det = %s
|
n_det = %s
|
||||||
n_states = %s
|
|
||||||
n_states_diag = %s
|
|
||||||
expected_s2 = %s
|
expected_s2 = %s
|
||||||
psi_coef = %s
|
psi_coef = %s
|
||||||
psi_det = %s
|
psi_det = %s
|
||||||
@ -322,8 +303,6 @@ psi_det = %s
|
|||||||
(b.n_int |> N_int_number.to_string)
|
(b.n_int |> N_int_number.to_string)
|
||||||
(b.bit_kind |> Bit_kind.to_string)
|
(b.bit_kind |> Bit_kind.to_string)
|
||||||
(b.n_det |> Det_number.to_string)
|
(b.n_det |> Det_number.to_string)
|
||||||
(b.n_states |> States_number.to_string)
|
|
||||||
(b.n_states_diag |> States_number.to_string)
|
|
||||||
(b.expected_s2 |> Positive_float.to_string)
|
(b.expected_s2 |> Positive_float.to_string)
|
||||||
(b.psi_coef |> Array.to_list |> List.map ~f:Det_coef.to_string
|
(b.psi_coef |> Array.to_list |> List.map ~f:Det_coef.to_string
|
||||||
|> String.concat ~sep:", ")
|
|> String.concat ~sep:", ")
|
||||||
|
@ -147,7 +147,7 @@ nucl_coord = %s
|
|||||||
(b.nucl_charge |> Array.to_list |> List.map
|
(b.nucl_charge |> Array.to_list |> List.map
|
||||||
~f:(Charge.to_string) |> String.concat ~sep:", " )
|
~f:(Charge.to_string) |> String.concat ~sep:", " )
|
||||||
(b.nucl_coord |> Array.to_list |> List.map
|
(b.nucl_coord |> Array.to_list |> List.map
|
||||||
~f:(Point3d.to_string Units.Bohr) |> String.concat ~sep:"\n" )
|
~f:(Point3d.to_string ~units:Units.Bohr) |> String.concat ~sep:"\n" )
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ nucl_coord = %s
|
|||||||
Printf.sprintf " %-3s %d %s"
|
Printf.sprintf " %-3s %d %s"
|
||||||
(b.nucl_label.(i) |> Element.to_string)
|
(b.nucl_label.(i) |> Element.to_string)
|
||||||
(b.nucl_charge.(i) |> Charge.to_int )
|
(b.nucl_charge.(i) |> Charge.to_int )
|
||||||
(b.nucl_coord.(i) |> Point3d.to_string Units.Angstrom) )
|
(b.nucl_coord.(i) |> Point3d.to_string ~units:Units.Angstrom) )
|
||||||
) |> String.concat ~sep:"\n"
|
) |> String.concat ~sep:"\n"
|
||||||
in
|
in
|
||||||
Printf.sprintf "
|
Printf.sprintf "
|
||||||
|
@ -10,27 +10,36 @@ type t = {
|
|||||||
} with sexp
|
} with sexp
|
||||||
|
|
||||||
let get_charge { nuclei ; elec_alpha ; elec_beta } =
|
let get_charge { nuclei ; elec_alpha ; elec_beta } =
|
||||||
let result = (Elec_alpha_number.to_int elec_alpha) +
|
let result =
|
||||||
(Elec_beta_number.to_int elec_beta) in
|
(Elec_alpha_number.to_int elec_alpha) +
|
||||||
|
(Elec_beta_number.to_int elec_beta)
|
||||||
|
in
|
||||||
let rec nucl_charge = function
|
let rec nucl_charge = function
|
||||||
| a::rest -> (Charge.to_float a.Atom.charge) +. nucl_charge rest
|
| a::rest -> (Charge.to_float a.Atom.charge) +. nucl_charge rest
|
||||||
| [] -> 0.
|
| [] -> 0.
|
||||||
in
|
in
|
||||||
Charge.of_float (nucl_charge nuclei -. (Float.of_int result))
|
Charge.of_float (nucl_charge nuclei -. (Float.of_int result))
|
||||||
;;
|
|
||||||
|
|
||||||
let get_multiplicity m =
|
let get_multiplicity m =
|
||||||
let elec_alpha = m.elec_alpha in
|
let elec_alpha =
|
||||||
|
m.elec_alpha
|
||||||
|
in
|
||||||
Multiplicity.of_alpha_beta elec_alpha m.elec_beta
|
Multiplicity.of_alpha_beta elec_alpha m.elec_beta
|
||||||
;;
|
|
||||||
|
|
||||||
let get_nucl_num m =
|
let get_nucl_num m =
|
||||||
let nmax = (List.length m.nuclei) in
|
let nmax =
|
||||||
|
List.length m.nuclei
|
||||||
|
in
|
||||||
Nucl_number.of_int nmax ~max:nmax
|
Nucl_number.of_int nmax ~max:nmax
|
||||||
;;
|
|
||||||
|
|
||||||
let name m =
|
let name m =
|
||||||
let cm = Charge.to_int (get_charge m) in
|
let cm =
|
||||||
|
get_charge m
|
||||||
|
|> Charge.to_int
|
||||||
|
in
|
||||||
let c =
|
let c =
|
||||||
match cm with
|
match cm with
|
||||||
| 0 -> ""
|
| 0 -> ""
|
||||||
@ -39,8 +48,12 @@ let name m =
|
|||||||
| i when i>1 -> Printf.sprintf " (%d+)" i
|
| i when i>1 -> Printf.sprintf " (%d+)" i
|
||||||
| i -> Printf.sprintf " (%d-)" (-i)
|
| i -> Printf.sprintf " (%d-)" (-i)
|
||||||
in
|
in
|
||||||
let mult = Multiplicity.to_string (get_multiplicity m) in
|
let mult =
|
||||||
let { nuclei ; elec_alpha ; elec_beta } = m in
|
get_multiplicity m
|
||||||
|
|> Multiplicity.to_string
|
||||||
|
in
|
||||||
|
let { nuclei ; elec_alpha ; elec_beta } = m
|
||||||
|
in
|
||||||
let rec build_list accu = function
|
let rec build_list accu = function
|
||||||
| a::rest ->
|
| a::rest ->
|
||||||
begin
|
begin
|
||||||
@ -53,7 +66,9 @@ let name m =
|
|||||||
in
|
in
|
||||||
let rec build_name accu = function
|
let rec build_name accu = function
|
||||||
| (a, n)::rest ->
|
| (a, n)::rest ->
|
||||||
let a = Element.to_string a in
|
let a =
|
||||||
|
Element.to_string a
|
||||||
|
in
|
||||||
begin
|
begin
|
||||||
match n with
|
match n with
|
||||||
| 1 -> build_name (a::accu) rest
|
| 1 -> build_name (a::accu) rest
|
||||||
@ -64,19 +79,25 @@ let name m =
|
|||||||
end
|
end
|
||||||
| [] -> accu
|
| [] -> accu
|
||||||
in
|
in
|
||||||
let result = build_list [] nuclei |> build_name [c ; ", " ; mult]
|
let result =
|
||||||
|
build_list [] nuclei |> build_name [c ; ", " ; mult]
|
||||||
in
|
in
|
||||||
String.concat (result)
|
String.concat (result)
|
||||||
;;
|
|
||||||
|
|
||||||
let to_string m =
|
let to_string m =
|
||||||
let { nuclei ; elec_alpha ; elec_beta } = m in
|
let { nuclei ; elec_alpha ; elec_beta } = m
|
||||||
let n = List.length nuclei in
|
in
|
||||||
let title = name m in
|
let n =
|
||||||
[ Int.to_string n ; title ] @ (List.map ~f:(fun x -> Atom.to_string
|
List.length nuclei
|
||||||
Units.Angstrom x) nuclei)
|
in
|
||||||
|
let title =
|
||||||
|
name m
|
||||||
|
in
|
||||||
|
[ Int.to_string n ; title ] @
|
||||||
|
(List.map ~f:(fun x -> Atom.to_string Units.Angstrom x) nuclei)
|
||||||
|> String.concat ~sep:"\n"
|
|> String.concat ~sep:"\n"
|
||||||
;;
|
|
||||||
|
|
||||||
let of_xyz_string
|
let of_xyz_string
|
||||||
?(charge=(Charge.of_int 0)) ?(multiplicity=(Multiplicity.of_int 1))
|
?(charge=(Charge.of_int 0)) ?(multiplicity=(Multiplicity.of_int 1))
|
||||||
@ -94,7 +115,9 @@ let of_xyz_string
|
|||||||
) + 1 - (Charge.to_int charge)
|
) + 1 - (Charge.to_int charge)
|
||||||
|> Elec_number.of_int
|
|> Elec_number.of_int
|
||||||
in
|
in
|
||||||
let (na,nb) = Multiplicity.to_alpha_beta ne multiplicity in
|
let (na,nb) =
|
||||||
|
Multiplicity.to_alpha_beta ne multiplicity
|
||||||
|
in
|
||||||
let result =
|
let result =
|
||||||
{ nuclei = l ;
|
{ nuclei = l ;
|
||||||
elec_alpha = na ;
|
elec_alpha = na ;
|
||||||
@ -109,7 +132,7 @@ let of_xyz_string
|
|||||||
raise (MultiplicityError msg);
|
raise (MultiplicityError msg);
|
||||||
else () ;
|
else () ;
|
||||||
result
|
result
|
||||||
;;
|
|
||||||
|
|
||||||
|
|
||||||
let of_xyz_file
|
let of_xyz_file
|
||||||
@ -121,8 +144,33 @@ let of_xyz_file
|
|||||||
let (_,buffer) = String.lsplit2_exn buffer ~on:'\n' in
|
let (_,buffer) = String.lsplit2_exn buffer ~on:'\n' in
|
||||||
of_xyz_string ~charge:charge ~multiplicity:multiplicity
|
of_xyz_string ~charge:charge ~multiplicity:multiplicity
|
||||||
~units:units buffer
|
~units:units buffer
|
||||||
;;
|
|
||||||
|
|
||||||
include To_md5;;
|
|
||||||
|
|
||||||
|
let distance_matrix molecule =
|
||||||
|
let coord =
|
||||||
|
molecule.nuclei
|
||||||
|
|> List.map ~f:(fun x -> x.Atom.coord)
|
||||||
|
|> Array.of_list
|
||||||
|
in
|
||||||
|
let n =
|
||||||
|
Array.length coord
|
||||||
|
in
|
||||||
|
let result =
|
||||||
|
Array.make_matrix ~dimx:n ~dimy:n 0.
|
||||||
|
in
|
||||||
|
for i = 0 to (n-1)
|
||||||
|
do
|
||||||
|
for j = 0 to (n-1)
|
||||||
|
do
|
||||||
|
result.(i).(j) <- Point3d.distance coord.(i) coord.(j)
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include To_md5
|
||||||
let to_md5 = to_md5 sexp_of_t
|
let to_md5 = to_md5 sexp_of_t
|
||||||
;;
|
|
||||||
|
@ -34,5 +34,9 @@ val of_xyz_string :
|
|||||||
?multiplicity:Multiplicity.t ->
|
?multiplicity:Multiplicity.t ->
|
||||||
?units:Units.units -> string -> t
|
?units:Units.units -> string -> t
|
||||||
|
|
||||||
|
(** Creates the distance matrix between all the atoms *)
|
||||||
|
val distance_matrix :
|
||||||
|
t -> (float array) array
|
||||||
|
|
||||||
(** Computes the MD5 hash *)
|
(** Computes the MD5 hash *)
|
||||||
val to_md5 : t -> Qptypes.MD5.t
|
val to_md5 : t -> Qptypes.MD5.t
|
||||||
|
@ -7,9 +7,16 @@ type t = {
|
|||||||
z : float ;
|
z : float ;
|
||||||
} with sexp
|
} with sexp
|
||||||
|
|
||||||
|
let of_tuple ~units (x,y,z) =
|
||||||
|
let f = match units with
|
||||||
|
| Units.Bohr -> 1.
|
||||||
|
| Units.Angstrom -> Units.angstrom_to_bohr
|
||||||
|
in
|
||||||
|
{ x = x *. f ; y = y *. f ; z = z *. f }
|
||||||
|
|
||||||
(** Read x y z coordinates in string s with units u *)
|
(** Read x y z coordinates in string s with units u *)
|
||||||
let of_string u s =
|
let of_string ~units s =
|
||||||
let f = match u with
|
let f = match units with
|
||||||
| Units.Bohr -> 1.
|
| Units.Bohr -> 1.
|
||||||
| Units.Angstrom -> Units.angstrom_to_bohr
|
| Units.Angstrom -> Units.angstrom_to_bohr
|
||||||
in
|
in
|
||||||
@ -22,7 +29,6 @@ let of_string u s =
|
|||||||
{ x = l.(0) *. f ;
|
{ x = l.(0) *. f ;
|
||||||
y = l.(1) *. f ;
|
y = l.(1) *. f ;
|
||||||
z = l.(2) *. f }
|
z = l.(2) *. f }
|
||||||
;;
|
|
||||||
|
|
||||||
|
|
||||||
let distance2 p1 p2 =
|
let distance2 p1 p2 =
|
||||||
@ -30,17 +36,18 @@ let distance2 p1 p2 =
|
|||||||
and { x=x2 ; y=y2 ; z=z2 } = p2 in
|
and { x=x2 ; y=y2 ; z=z2 } = p2 in
|
||||||
(x2-.x1)*.(x2-.x1) +. (y2-.y1)*.(y2-.y1) +. (z2-.z1)*.(z2-.z1)
|
(x2-.x1)*.(x2-.x1) +. (y2-.y1)*.(y2-.y1) +. (z2-.z1)*.(z2-.z1)
|
||||||
|> Positive_float.of_float
|
|> Positive_float.of_float
|
||||||
;;
|
|
||||||
|
|
||||||
let distance p1 p2 = sqrt (Positive_float.to_float (distance2 p1 p2))
|
|
||||||
;;
|
|
||||||
|
|
||||||
let to_string u p =
|
let distance p1 p2 =
|
||||||
let f = match u with
|
sqrt (Positive_float.to_float (distance2 p1 p2))
|
||||||
|
|
||||||
|
|
||||||
|
let to_string ~units p =
|
||||||
|
let f = match units with
|
||||||
| Units.Bohr -> 1.
|
| Units.Bohr -> 1.
|
||||||
| Units.Angstrom -> Units.bohr_to_angstrom
|
| Units.Angstrom -> Units.bohr_to_angstrom
|
||||||
in
|
in
|
||||||
let { x=x ; y=y ; z=z } = p in
|
let { x=x ; y=y ; z=z } = p in
|
||||||
Printf.sprintf "%16.8f %16.8f %16.8f" (x*.f) (y*.f) (z*.f)
|
Printf.sprintf "%16.8f %16.8f %16.8f" (x*.f) (y*.f) (z*.f)
|
||||||
;;
|
|
||||||
|
|
||||||
|
@ -4,11 +4,14 @@ type t =
|
|||||||
z : float;
|
z : float;
|
||||||
} with sexp
|
} with sexp
|
||||||
|
|
||||||
|
(** Create from a tuple of floats *)
|
||||||
|
val of_tuple : units:Units.units -> float*float*float -> t
|
||||||
|
|
||||||
(** Create from an xyz string *)
|
(** Create from an xyz string *)
|
||||||
val of_string : Units.units -> string -> t
|
val of_string : units:Units.units -> string -> t
|
||||||
|
|
||||||
(** Convert to a string for printing *)
|
(** Convert to a string for printing *)
|
||||||
val to_string : Units.units -> t -> string
|
val to_string : units:Units.units -> t -> string
|
||||||
|
|
||||||
(** Computes the squared distance between 2 points *)
|
(** Computes the squared distance between 2 points *)
|
||||||
val distance2 : t -> t -> Qptypes.Positive_float.t
|
val distance2 : t -> t -> Qptypes.Positive_float.t
|
||||||
|
@ -12,7 +12,6 @@ let rec transpose = function
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
|
||||||
let input_to_sexp s =
|
let input_to_sexp s =
|
||||||
let result =
|
let result =
|
||||||
String.split_lines s
|
String.split_lines s
|
||||||
|
@ -11,64 +11,139 @@ let spec =
|
|||||||
~doc:"string Name of basis set."
|
~doc:"string Name of basis set."
|
||||||
+> flag "c" (optional_with_default 0 int)
|
+> flag "c" (optional_with_default 0 int)
|
||||||
~doc:"int Total charge of the molecule. Default is 0."
|
~doc:"int Total charge of the molecule. Default is 0."
|
||||||
|
+> flag "d" (optional_with_default 0. float)
|
||||||
|
~doc:"float Add dummy atoms. x * (covalent radii of the atoms)"
|
||||||
+> flag "m" (optional_with_default 1 int)
|
+> flag "m" (optional_with_default 1 int)
|
||||||
~doc:"int Spin multiplicity (2S+1) of the molecule. Default is 1."
|
~doc:"int Spin multiplicity (2S+1) of the molecule. Default is 1."
|
||||||
+> flag "p" no_arg
|
+> flag "p" no_arg
|
||||||
~doc:" Using pseudopotentials"
|
~doc:" Using pseudopotentials"
|
||||||
+> anon ("xyz_file" %: string)
|
+> anon ("xyz_file" %: file )
|
||||||
;;
|
|
||||||
|
|
||||||
let run ?o b c m p xyz_file =
|
|
||||||
|
let dummy_centers ~threshold ~molecule ~nuclei =
|
||||||
|
let d =
|
||||||
|
Molecule.distance_matrix molecule
|
||||||
|
in
|
||||||
|
let n =
|
||||||
|
Array.length d
|
||||||
|
in
|
||||||
|
let nuclei =
|
||||||
|
Array.of_list nuclei
|
||||||
|
in
|
||||||
|
let rec aux accu = function
|
||||||
|
| (-1,_) -> accu
|
||||||
|
| (i,-1) -> aux accu (i-1,i-1)
|
||||||
|
| (i,j) when (i>j) ->
|
||||||
|
let new_accu =
|
||||||
|
let x,y =
|
||||||
|
Element.covalent_radius (nuclei.(i)).Atom.element |> Positive_float.to_float,
|
||||||
|
Element.covalent_radius (nuclei.(j)).Atom.element |> Positive_float.to_float
|
||||||
|
in
|
||||||
|
let r =
|
||||||
|
( x +. y ) *. threshold
|
||||||
|
in
|
||||||
|
if d.(i).(j) < r then
|
||||||
|
(i,x,j,y,d.(i).(j)) :: accu
|
||||||
|
else
|
||||||
|
accu
|
||||||
|
in aux new_accu (i,j-1)
|
||||||
|
| (i,j) when (i=j) -> aux accu (i,j-1)
|
||||||
|
| _ -> assert false
|
||||||
|
in
|
||||||
|
aux [] (n-1,n-1)
|
||||||
|
|> List.map ~f:(fun (i,x,j,y,r) ->
|
||||||
|
let f =
|
||||||
|
x /. (x +. y)
|
||||||
|
in
|
||||||
|
let u =
|
||||||
|
Point3d.of_tuple ~units:Units.Bohr
|
||||||
|
( nuclei.(i).Atom.coord.Point3d.x +.
|
||||||
|
(nuclei.(j).Atom.coord.Point3d.x -. nuclei.(i).Atom.coord.Point3d.x) *. f,
|
||||||
|
nuclei.(i).Atom.coord.Point3d.y +.
|
||||||
|
(nuclei.(j).Atom.coord.Point3d.y -. nuclei.(i).Atom.coord.Point3d.y) *. f,
|
||||||
|
nuclei.(i).Atom.coord.Point3d.z +.
|
||||||
|
(nuclei.(j).Atom.coord.Point3d.z -. nuclei.(i).Atom.coord.Point3d.z) *. f)
|
||||||
|
in
|
||||||
|
Atom.{ element = Element.X ; charge = Charge.of_int 0 ; coord = u }
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
let list_basis () =
|
||||||
|
let basis_list =
|
||||||
|
Qpackage.root ^ "/install/emsl/EMSL_api.py list_basis"
|
||||||
|
|> Unix.open_process_in
|
||||||
|
|> In_channel.input_lines
|
||||||
|
|> List.map ~f:(fun x ->
|
||||||
|
match String.split x ~on:'\'' with
|
||||||
|
| [] -> ""
|
||||||
|
| a :: []
|
||||||
|
| _ :: a :: _ -> String.strip a
|
||||||
|
)
|
||||||
|
in
|
||||||
|
List.sort basis_list ~cmp:String.ascending
|
||||||
|
|> String.concat ~sep:"\t"
|
||||||
|
|
||||||
|
|
||||||
|
let run ?o b c d m p xyz_file =
|
||||||
|
|
||||||
(* Read molecule *)
|
(* Read molecule *)
|
||||||
let molecule =
|
let molecule =
|
||||||
(Molecule.of_xyz_file xyz_file ~charge:(Charge.of_int c)
|
(Molecule.of_xyz_file xyz_file ~charge:(Charge.of_int c)
|
||||||
~multiplicity:(Multiplicity.of_int m) )
|
~multiplicity:(Multiplicity.of_int m) )
|
||||||
in
|
in
|
||||||
let nuclei = molecule.Molecule.nuclei in
|
let dummy =
|
||||||
|
dummy_centers ~threshold:d ~molecule ~nuclei:molecule.Molecule.nuclei
|
||||||
|
in
|
||||||
|
(*
|
||||||
|
List.iter dummy ~f:(fun x ->
|
||||||
|
Printf.printf "%s\n" (Atom.to_string ~units:Units.Angstrom x)
|
||||||
|
);
|
||||||
|
*)
|
||||||
|
let nuclei =
|
||||||
|
molecule.Molecule.nuclei @ dummy
|
||||||
|
in
|
||||||
|
|
||||||
|
|
||||||
|
let basis_table =
|
||||||
|
Hashtbl.Poly.create ()
|
||||||
|
in
|
||||||
|
|
||||||
let basis_table = Hashtbl.Poly.create () in
|
|
||||||
(* Open basis set channels *)
|
(* Open basis set channels *)
|
||||||
let basis_channel element =
|
let basis_channel element =
|
||||||
let key = Element.to_string element in
|
let key =
|
||||||
|
Element.to_string element
|
||||||
|
in
|
||||||
match Hashtbl.find basis_table key with
|
match Hashtbl.find basis_table key with
|
||||||
| Some in_channel ->
|
| Some in_channel ->
|
||||||
in_channel
|
in_channel
|
||||||
| None ->
|
| None ->
|
||||||
begin
|
let msg =
|
||||||
Printf.printf "%s is not defined in basis %s.\nEnter alternate basis : %!"
|
Printf.sprintf "%s is not defined in basis %s.%!"
|
||||||
(Element.to_long_string element) b ;
|
(Element.to_long_string element) b ;
|
||||||
let bas =
|
|
||||||
match In_channel.input_line stdin with
|
|
||||||
| Some line -> String.strip line |> String.lowercase
|
|
||||||
| None -> failwith "Aborted"
|
|
||||||
in
|
in
|
||||||
let new_channel = In_channel.create
|
failwith msg
|
||||||
(Qpackage.root ^ "/data/basis/" ^ bas)
|
|
||||||
in
|
|
||||||
Hashtbl.add_exn basis_table ~key:key ~data:new_channel;
|
|
||||||
new_channel
|
|
||||||
end
|
|
||||||
in
|
in
|
||||||
|
|
||||||
let temp_filename =
|
let temp_filename =
|
||||||
Filename.temp_file "qp_create_" ".basis"
|
Filename.temp_file "qp_create_" ".basis"
|
||||||
in
|
in
|
||||||
let rec build_basis = function
|
let () =
|
||||||
| [] -> ()
|
Sys.remove temp_filename
|
||||||
| elem_and_basis_name :: rest ->
|
in
|
||||||
begin
|
|
||||||
match (String.lsplit2 ~on:':' elem_and_basis_name) with
|
let fetch_channel basis =
|
||||||
| None -> (* Principal basis *)
|
|
||||||
let basis = elem_and_basis_name in
|
|
||||||
let command =
|
let command =
|
||||||
if (p) then
|
if (p) then
|
||||||
Qpackage.root ^ "/scripts/get_basis.sh \"" ^ temp_filename
|
Qpackage.root ^ "/scripts/get_basis.sh \"" ^ temp_filename
|
||||||
^ "\" \"" ^ basis ^"\" pseudo"
|
^ "." ^ basis ^ "\" \"" ^ basis ^"\" pseudo"
|
||||||
else
|
else
|
||||||
Qpackage.root ^ "/scripts/get_basis.sh \"" ^ temp_filename
|
Qpackage.root ^ "/scripts/get_basis.sh \"" ^ temp_filename
|
||||||
^ "\" \"" ^ basis ^"\""
|
^ "." ^ basis ^ "\" \"" ^ basis ^"\""
|
||||||
in
|
in
|
||||||
|
match Sys.is_file basis with
|
||||||
|
| `Yes ->
|
||||||
|
In_channel.create basis
|
||||||
|
| _ ->
|
||||||
begin
|
begin
|
||||||
let filename =
|
let filename =
|
||||||
Unix.open_process_in command
|
Unix.open_process_in command
|
||||||
@ -79,8 +154,26 @@ let run ?o b c m p xyz_file =
|
|||||||
In_channel.create filename
|
In_channel.create filename
|
||||||
in
|
in
|
||||||
Unix.unlink filename;
|
Unix.unlink filename;
|
||||||
|
new_channel
|
||||||
|
end
|
||||||
|
in
|
||||||
|
|
||||||
|
let rec build_basis = function
|
||||||
|
| [] -> ()
|
||||||
|
| elem_and_basis_name :: rest ->
|
||||||
|
begin
|
||||||
|
match (String.lsplit2 ~on:':' elem_and_basis_name) with
|
||||||
|
| None -> (* Principal basis *)
|
||||||
|
begin
|
||||||
|
let basis =
|
||||||
|
elem_and_basis_name
|
||||||
|
in
|
||||||
|
let new_channel =
|
||||||
|
fetch_channel basis
|
||||||
|
in
|
||||||
List.iter nuclei ~f:(fun elem->
|
List.iter nuclei ~f:(fun elem->
|
||||||
let key = Element.to_string elem.Atom.element
|
let key =
|
||||||
|
Element.to_string elem.Atom.element
|
||||||
in
|
in
|
||||||
match Hashtbl.add basis_table ~key:key ~data:new_channel with
|
match Hashtbl.add basis_table ~key:key ~data:new_channel with
|
||||||
| `Ok -> ()
|
| `Ok -> ()
|
||||||
@ -89,25 +182,18 @@ let run ?o b c m p xyz_file =
|
|||||||
end
|
end
|
||||||
| Some (key, basis) -> (*Aux basis *)
|
| Some (key, basis) -> (*Aux basis *)
|
||||||
begin
|
begin
|
||||||
let elem = Element.of_string key
|
let elem =
|
||||||
and basis = String.lowercase basis
|
Element.of_string key
|
||||||
|
and basis =
|
||||||
|
String.lowercase basis
|
||||||
in
|
in
|
||||||
let key = Element.to_string elem
|
let key =
|
||||||
in
|
Element.to_string elem
|
||||||
let command =
|
|
||||||
Qpackage.root ^ "/scripts/get_basis.sh \"" ^ temp_filename ^
|
|
||||||
"\" \"" ^ basis ^ "\" " ^ key
|
|
||||||
in
|
|
||||||
begin
|
|
||||||
let filename =
|
|
||||||
Unix.open_process_in command
|
|
||||||
|> In_channel.input_all
|
|
||||||
|> String.strip
|
|
||||||
in
|
in
|
||||||
let new_channel =
|
let new_channel =
|
||||||
In_channel.create filename
|
fetch_channel basis
|
||||||
in
|
in
|
||||||
Unix.unlink filename;
|
begin
|
||||||
match Hashtbl.add basis_table ~key:key ~data:new_channel with
|
match Hashtbl.add basis_table ~key:key ~data:new_channel with
|
||||||
| `Ok -> ()
|
| `Ok -> ()
|
||||||
| `Duplicate -> failwith ("Duplicate definition of basis for "^(Element.to_long_string elem))
|
| `Duplicate -> failwith ("Duplicate definition of basis for "^(Element.to_long_string elem))
|
||||||
@ -164,28 +250,30 @@ let run ?o b c m p xyz_file =
|
|||||||
(* Write Basis set *)
|
(* Write Basis set *)
|
||||||
let basis =
|
let basis =
|
||||||
|
|
||||||
let nmax = Nucl_number.get_max () in
|
let nmax =
|
||||||
|
Nucl_number.get_max ()
|
||||||
|
in
|
||||||
let rec do_work (accu:(Atom.t*Nucl_number.t) list) (n:int) = function
|
let rec do_work (accu:(Atom.t*Nucl_number.t) list) (n:int) = function
|
||||||
| [] -> accu
|
| [] -> accu
|
||||||
| e::tail ->
|
| e::tail ->
|
||||||
let new_accu = (e,(Nucl_number.of_int ~max:nmax n))::accu in
|
let new_accu =
|
||||||
|
(e,(Nucl_number.of_int ~max:nmax n))::accu
|
||||||
|
in
|
||||||
do_work new_accu (n+1) tail
|
do_work new_accu (n+1) tail
|
||||||
in
|
in
|
||||||
let result = do_work [] 1 nuclei
|
let result = do_work [] 1 nuclei
|
||||||
|> List.rev
|
|> List.rev
|
||||||
|> List.map ~f:(fun (x,i) ->
|
|> List.map ~f:(fun (x,i) ->
|
||||||
try
|
try
|
||||||
Basis.read_element (basis_channel x.Atom.element) i x.Atom.element
|
let e =
|
||||||
|
match x.Atom.element with
|
||||||
|
| Element.X -> Element.H
|
||||||
|
| e -> e
|
||||||
|
in
|
||||||
|
Basis.read_element (basis_channel x.Atom.element) i e
|
||||||
with
|
with
|
||||||
| End_of_file ->
|
| End_of_file -> failwith
|
||||||
begin
|
("Element "^(Element.to_string x.Atom.element)^" not found in basis set.")
|
||||||
let alt_channel = basis_channel x.Atom.element in
|
|
||||||
try
|
|
||||||
Basis.read_element alt_channel i x.Atom.element
|
|
||||||
with
|
|
||||||
End_of_file -> failwith
|
|
||||||
("Element "^(Element.to_string x.Atom.element)^" not found")
|
|
||||||
end
|
|
||||||
)
|
)
|
||||||
|> List.concat
|
|> List.concat
|
||||||
in
|
in
|
||||||
@ -264,28 +352,37 @@ let run ?o b c m p xyz_file =
|
|||||||
| None -> failwith "Error in basis"
|
| None -> failwith "Error in basis"
|
||||||
| Some x -> Input.Ao_basis.write x
|
| Some x -> Input.Ao_basis.write x
|
||||||
|
|
||||||
;;
|
|
||||||
|
|
||||||
let command =
|
let command =
|
||||||
Command.basic
|
Command.basic
|
||||||
~summary: "Quantum Package command"
|
~summary: "Quantum Package command"
|
||||||
~readme:(fun () -> "
|
~readme:(fun () -> "
|
||||||
Creates an EZFIO directory from a standard xyz file.
|
|
||||||
The basis set is defined as a single string if all the
|
=== Available basis sets ===
|
||||||
atoms are taken from the same basis set, otherwise specific
|
|
||||||
elements can be defined as follows:
|
" ^ (list_basis ()) ^ "
|
||||||
|
|
||||||
|
============================
|
||||||
|
|
||||||
|
Creates an EZFIO directory from a standard xyz file. The basis set is defined
|
||||||
|
as a single string if all the atoms are taken from the same basis set,
|
||||||
|
otherwise specific elements can be defined as follows:
|
||||||
|
|
||||||
-b \"cc-pcvdz | H:cc-pvdz | C:6-31g\"
|
-b \"cc-pcvdz | H:cc-pvdz | C:6-31g\"
|
||||||
|
|
||||||
|
If a file with the same name as the basis set exists, this file will be read.
|
||||||
|
Otherwise, the basis set is obtained from the database.
|
||||||
|
|
||||||
" )
|
" )
|
||||||
spec
|
spec
|
||||||
(fun o b c m p xyz_file () ->
|
(fun o b c d m p xyz_file () ->
|
||||||
run ?o b c m p xyz_file )
|
run ?o b c d m p xyz_file )
|
||||||
;;
|
|
||||||
|
|
||||||
let () =
|
let () =
|
||||||
Command.run command
|
Command.run command
|
||||||
;;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
308
ocaml/qp_edit.ml
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
open Qputils;;
|
||||||
|
open Qptypes;;
|
||||||
|
open Core.Std;;
|
||||||
|
|
||||||
|
(** Interactive editing of the input.
|
||||||
|
|
||||||
|
WARNING
|
||||||
|
This file is autogenerad by
|
||||||
|
`${QP_ROOT}/script/ezfio_interface/ei_handler.py`
|
||||||
|
*)
|
||||||
|
|
||||||
|
|
||||||
|
(** Keywords used to define input sections *)
|
||||||
|
type keyword =
|
||||||
|
| Ao_basis
|
||||||
|
| Determinants_by_hand
|
||||||
|
| Electrons
|
||||||
|
| Mo_basis
|
||||||
|
| Nuclei
|
||||||
|
| Determinants
|
||||||
|
| Hartree_fock
|
||||||
|
| Integrals_bielec
|
||||||
|
| Perturbation
|
||||||
|
| Properties
|
||||||
|
| Pseudo
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
let keyword_to_string = function
|
||||||
|
| Ao_basis -> "AO basis"
|
||||||
|
| Determinants_by_hand -> "Determinants_by_hand"
|
||||||
|
| Electrons -> "Electrons"
|
||||||
|
| Mo_basis -> "MO basis"
|
||||||
|
| Nuclei -> "Molecule"
|
||||||
|
| Determinants -> "Determinants"
|
||||||
|
| Hartree_fock -> "Hartree_fock"
|
||||||
|
| Integrals_bielec -> "Integrals_bielec"
|
||||||
|
| Perturbation -> "Perturbation"
|
||||||
|
| Properties -> "Properties"
|
||||||
|
| Pseudo -> "Pseudo"
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(** Create the header of the temporary file *)
|
||||||
|
let file_header filename =
|
||||||
|
Printf.sprintf "
|
||||||
|
==================================================================
|
||||||
|
Quantum Package
|
||||||
|
==================================================================
|
||||||
|
|
||||||
|
Editing file `%s`
|
||||||
|
|
||||||
|
" filename
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Creates the header of a section *)
|
||||||
|
let make_header kw =
|
||||||
|
let s = keyword_to_string kw in
|
||||||
|
let l = String.length s in
|
||||||
|
"\n\n"^s^"\n"^(String.init l ~f:(fun _ -> '='))^"\n\n"
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Returns the rst string of section [s] *)
|
||||||
|
let get s =
|
||||||
|
let header = (make_header s) in
|
||||||
|
let f (read,to_rst) =
|
||||||
|
match read () with
|
||||||
|
| Some text -> header ^ (Rst_string.to_string (to_rst text))
|
||||||
|
| None -> ""
|
||||||
|
in
|
||||||
|
let rst =
|
||||||
|
try
|
||||||
|
begin
|
||||||
|
let open Input in
|
||||||
|
match s with
|
||||||
|
| Mo_basis ->
|
||||||
|
f Mo_basis.(read, to_rst)
|
||||||
|
| Electrons ->
|
||||||
|
f Electrons.(read, to_rst)
|
||||||
|
| Nuclei ->
|
||||||
|
f Nuclei.(read, to_rst)
|
||||||
|
| Ao_basis ->
|
||||||
|
f Ao_basis.(read, to_rst)
|
||||||
|
| Determinants_by_hand ->
|
||||||
|
f Determinants_by_hand.(read, to_rst)
|
||||||
|
| Determinants ->
|
||||||
|
f Determinants.(read, to_rst)
|
||||||
|
| Hartree_fock ->
|
||||||
|
f Hartree_fock.(read, to_rst)
|
||||||
|
| Integrals_bielec ->
|
||||||
|
f Integrals_bielec.(read, to_rst)
|
||||||
|
| Perturbation ->
|
||||||
|
f Perturbation.(read, to_rst)
|
||||||
|
| Properties ->
|
||||||
|
f Properties.(read, to_rst)
|
||||||
|
| Pseudo ->
|
||||||
|
f Pseudo.(read, to_rst)
|
||||||
|
end
|
||||||
|
with
|
||||||
|
| Sys_error msg -> (Printf.eprintf "Info: %s\n%!" msg ; "")
|
||||||
|
in
|
||||||
|
rst
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Applies the changes from the string [str] corresponding to section [s] *)
|
||||||
|
let set str s =
|
||||||
|
let header = (make_header s) in
|
||||||
|
match String.substr_index ~pos:0 ~pattern:header str with
|
||||||
|
| None -> ()
|
||||||
|
| Some idx ->
|
||||||
|
begin
|
||||||
|
let index_begin = idx + (String.length header) in
|
||||||
|
let index_end =
|
||||||
|
match ( String.substr_index ~pos:(index_begin+(String.length header)+1)
|
||||||
|
~pattern:"==" str) with
|
||||||
|
| Some i -> i
|
||||||
|
| None -> String.length str
|
||||||
|
in
|
||||||
|
let l = index_end - index_begin in
|
||||||
|
let str = String.sub ~pos:index_begin ~len:l str
|
||||||
|
|> Rst_string.of_string
|
||||||
|
in
|
||||||
|
let write (of_rst,w) s =
|
||||||
|
try
|
||||||
|
match of_rst str with
|
||||||
|
| Some data -> w data
|
||||||
|
| None -> ()
|
||||||
|
with
|
||||||
|
| _ -> (Printf.eprintf "Info: Read error in %s\n%!"
|
||||||
|
(keyword_to_string s); ignore (of_rst str) )
|
||||||
|
in
|
||||||
|
let open Input in
|
||||||
|
match s with
|
||||||
|
| Determinants -> write Determinants.(of_rst, write) s
|
||||||
|
| Hartree_fock -> write Hartree_fock.(of_rst, write) s
|
||||||
|
| Integrals_bielec -> write Integrals_bielec.(of_rst, write) s
|
||||||
|
| Perturbation -> write Perturbation.(of_rst, write) s
|
||||||
|
| Properties -> write Properties.(of_rst, write) s
|
||||||
|
| Pseudo -> write Pseudo.(of_rst, write) s
|
||||||
|
| Electrons -> write Electrons.(of_rst, write) s
|
||||||
|
| Determinants_by_hand -> write Determinants_by_hand.(of_rst, write) s
|
||||||
|
| Nuclei -> write Nuclei.(of_rst, write) s
|
||||||
|
| Ao_basis -> () (* TODO *)
|
||||||
|
| Mo_basis -> () (* TODO *)
|
||||||
|
end
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Creates the temporary file for interactive editing *)
|
||||||
|
let create_temp_file ezfio_filename fields =
|
||||||
|
let temp_filename = Filename.temp_file "qp_edit_" ".rst" in
|
||||||
|
begin
|
||||||
|
Out_channel.with_file temp_filename ~f:(fun out_channel ->
|
||||||
|
(file_header ezfio_filename) :: (List.map ~f:get fields)
|
||||||
|
|> String.concat ~sep:"\n"
|
||||||
|
|> Out_channel.output_string out_channel
|
||||||
|
)
|
||||||
|
end
|
||||||
|
; temp_filename
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let run check_only ezfio_filename =
|
||||||
|
|
||||||
|
(* Open EZFIO *)
|
||||||
|
if (not (Sys.file_exists_exn ezfio_filename)) then
|
||||||
|
failwith (ezfio_filename^" does not exists");
|
||||||
|
|
||||||
|
Ezfio.set_file ezfio_filename;
|
||||||
|
|
||||||
|
(*
|
||||||
|
let output = (file_header ezfio_filename) :: (
|
||||||
|
List.map ~f:get [
|
||||||
|
Ao_basis ;
|
||||||
|
Mo_basis ;
|
||||||
|
])
|
||||||
|
in
|
||||||
|
String.concat output
|
||||||
|
|> print_string
|
||||||
|
*)
|
||||||
|
|
||||||
|
let tasks = [
|
||||||
|
Nuclei ;
|
||||||
|
Ao_basis;
|
||||||
|
Electrons ;
|
||||||
|
Determinants ;
|
||||||
|
Hartree_fock ;
|
||||||
|
Integrals_bielec ;
|
||||||
|
Perturbation ;
|
||||||
|
Properties ;
|
||||||
|
Pseudo ;
|
||||||
|
Mo_basis;
|
||||||
|
Determinants_by_hand ;
|
||||||
|
]
|
||||||
|
in
|
||||||
|
|
||||||
|
(* Create the temp file *)
|
||||||
|
let temp_filename = create_temp_file ezfio_filename tasks in
|
||||||
|
|
||||||
|
(* Open the temp file with external editor *)
|
||||||
|
let editor =
|
||||||
|
match Sys.getenv "EDITOR" with
|
||||||
|
| Some editor -> editor
|
||||||
|
| None -> "vi"
|
||||||
|
in
|
||||||
|
|
||||||
|
match check_only with
|
||||||
|
| true -> ()
|
||||||
|
| false ->
|
||||||
|
Printf.sprintf "%s %s ; tput sgr0 2> /dev/null" editor temp_filename
|
||||||
|
|> Sys.command_exn
|
||||||
|
;
|
||||||
|
|
||||||
|
(* Re-read the temp file *)
|
||||||
|
let temp_string =
|
||||||
|
In_channel.with_file temp_filename ~f:(fun in_channel ->
|
||||||
|
In_channel.input_all in_channel)
|
||||||
|
in
|
||||||
|
List.iter ~f:(fun x -> set temp_string x) tasks;
|
||||||
|
|
||||||
|
(* Remove temp_file *)
|
||||||
|
Sys.remove temp_filename;
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Create a backup file in case of an exception *)
|
||||||
|
let create_backup ezfio_filename =
|
||||||
|
Printf.sprintf "
|
||||||
|
rm -f %s/backup.tgz ;
|
||||||
|
tar -zcf .backup.tgz %s && mv .backup.tgz %s/backup.tgz
|
||||||
|
"
|
||||||
|
ezfio_filename ezfio_filename ezfio_filename
|
||||||
|
|> Sys.command_exn
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
(** Restore the backup file when an exception occuprs *)
|
||||||
|
let restore_backup ezfio_filename =
|
||||||
|
Printf.sprintf "tar -zxf %s/backup.tgz"
|
||||||
|
ezfio_filename
|
||||||
|
|> Sys.command_exn
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
let spec =
|
||||||
|
let open Command.Spec in
|
||||||
|
empty
|
||||||
|
+> flag "-c" no_arg
|
||||||
|
~doc:"Checks the input data"
|
||||||
|
(*
|
||||||
|
+> flag "o" (optional string)
|
||||||
|
~doc:"Prints output data"
|
||||||
|
*)
|
||||||
|
+> anon ("ezfio_file" %: string)
|
||||||
|
;;
|
||||||
|
|
||||||
|
let command =
|
||||||
|
Command.basic
|
||||||
|
~summary: "Quantum Package command"
|
||||||
|
~readme:(fun () ->
|
||||||
|
"
|
||||||
|
Edit input data
|
||||||
|
")
|
||||||
|
spec
|
||||||
|
(* (fun i o ezfio_file () -> *)
|
||||||
|
(*fun ezfio_file () ->
|
||||||
|
try
|
||||||
|
run ezfio_file
|
||||||
|
with
|
||||||
|
| _ msg -> print_string ("\n\nError\n\n"^msg^"\n\n")
|
||||||
|
*)
|
||||||
|
(fun c ezfio_file () ->
|
||||||
|
try
|
||||||
|
run c ezfio_file ;
|
||||||
|
(* create_backup ezfio_file; *)
|
||||||
|
with
|
||||||
|
| Failure exc
|
||||||
|
| Invalid_argument exc as e ->
|
||||||
|
begin
|
||||||
|
Printf.eprintf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n";
|
||||||
|
Printf.eprintf "%s\n\n" exc;
|
||||||
|
Printf.eprintf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n";
|
||||||
|
(* restore_backup ezfio_file; *)
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
| Assert_failure (file, line, ch) as e ->
|
||||||
|
begin
|
||||||
|
Printf.eprintf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n";
|
||||||
|
Printf.eprintf "Assert error in file $QP_ROOT/ocaml/%s, line %d, character %d\n\n" file line ch;
|
||||||
|
Printf.eprintf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n";
|
||||||
|
(* restore_backup ezfio_file; *)
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Command.run command;
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ let run exe ezfio_file =
|
|||||||
let spec =
|
let spec =
|
||||||
let open Command.Spec in
|
let open Command.Spec in
|
||||||
empty
|
empty
|
||||||
+> anon ("exectuable" %: string)
|
+> anon ("executable" %: string)
|
||||||
+> anon ("ezfio_file" %: string)
|
+> anon ("ezfio_file" %: string)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -83,6 +83,12 @@ let input_data = "
|
|||||||
assert (x >= 0.) ;
|
assert (x >= 0.) ;
|
||||||
assert (x <= 1.) ;
|
assert (x <= 1.) ;
|
||||||
|
|
||||||
|
* Energy : float
|
||||||
|
assert (x <=0.) ;
|
||||||
|
|
||||||
|
* S2 : float
|
||||||
|
assert (x >=0.) ;
|
||||||
|
|
||||||
* PT2_energy : float
|
* PT2_energy : float
|
||||||
assert (x >=0.) ;
|
assert (x >=0.) ;
|
||||||
|
|
||||||
|
@ -39,6 +39,15 @@ H 0.54386314 0.00000000 -0.92559535
|
|||||||
let m = Molecule.of_xyz_file "c2h6.xyz" in
|
let m = Molecule.of_xyz_file "c2h6.xyz" in
|
||||||
print_string (Molecule.to_string m);
|
print_string (Molecule.to_string m);
|
||||||
|
|
||||||
|
print_string "\nDistance matrix\n";
|
||||||
|
print_string "---------------\n";
|
||||||
|
let d =
|
||||||
|
Molecule.distance_matrix m
|
||||||
|
in
|
||||||
|
Array.iter d ~f:(fun x ->
|
||||||
|
Array.iter x ~f:(fun y -> Printf.printf "%12.8f " y);
|
||||||
|
print_newline ();
|
||||||
|
)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
test_molecule ();;
|
test_molecule ();;
|
||||||
|
10
plugins/CASSCF/EZFIO.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[energy]
|
||||||
|
type: double precision
|
||||||
|
doc: "Calculated CAS-SCF energy"
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
|
[energy_pt2]
|
||||||
|
type: double precision
|
||||||
|
doc: "Calculated selected CAS-SCF energy with PT2 correction"
|
||||||
|
interface: ezfio
|
||||||
|
|
39
plugins/CASSCF/H_apply.irp.f
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
use bitmasks
|
||||||
|
BEGIN_SHELL [ /usr/bin/env python ]
|
||||||
|
from generate_h_apply import *
|
||||||
|
|
||||||
|
s = H_apply("CAS_SD")
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_SD_selected_no_skip")
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
s.unset_skip()
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_SD_selected")
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_SD_PT2")
|
||||||
|
s.set_perturbation("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
|
|
||||||
|
s = H_apply("CAS_S",do_double_exc=False)
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_selected_no_skip",do_double_exc=False)
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
s.unset_skip()
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_selected",do_double_exc=False)
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_PT2",do_double_exc=False)
|
||||||
|
s.set_perturbation("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
|
END_SHELL
|
||||||
|
|
1
plugins/CASSCF/NEEDED_CHILDREN_MODULES
Normal file
@ -0,0 +1 @@
|
|||||||
|
Generators_CAS Perturbation Selectors_full
|
20
plugins/CASSCF/README.rst
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
======
|
||||||
|
CASSCF
|
||||||
|
======
|
||||||
|
|
||||||
|
This module is not a "real" CAS-SCF. It is an orbital optimization step done by :
|
||||||
|
|
||||||
|
1) Doing the CAS+SD
|
||||||
|
2) Taking one-electron density matrix
|
||||||
|
3) Cancelling all active-active rotations
|
||||||
|
4) Finding the order which matches with the input MOs
|
||||||
|
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
220
plugins/CASSCF/casscf.irp.f
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
program casscf
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Optimize MOs and CI coefficients of the CAS
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:)
|
||||||
|
integer(bit_kind), allocatable :: generators_bitmask_save(:,:,:,:)
|
||||||
|
|
||||||
|
integer :: degree, N_generators_bitmask_save, N_det_ci
|
||||||
|
double precision :: E_old, E_CI
|
||||||
|
double precision :: selection_criterion_save, selection_criterion_min_save
|
||||||
|
|
||||||
|
integer :: N_det_old
|
||||||
|
integer :: i, j, k, l
|
||||||
|
integer :: i_bit, j_bit, i_int, j_int
|
||||||
|
integer(bit_kind), allocatable :: bit_tmp(:), cas_bm(:)
|
||||||
|
character*(64) :: label
|
||||||
|
|
||||||
|
allocate( pt2(N_states), norm_pert(N_states),H_pert_diag(N_states) )
|
||||||
|
allocate( generators_bitmask_save(N_int,2,6,N_generators_bitmask) )
|
||||||
|
allocate( bit_tmp(N_int), cas_bm(N_int) )
|
||||||
|
|
||||||
|
PROVIDE N_det_cas
|
||||||
|
N_det_old = 0
|
||||||
|
pt2 = 1.d0
|
||||||
|
E_CI = 1.d0
|
||||||
|
E_old = 0.d0
|
||||||
|
diag_algorithm = "Lapack"
|
||||||
|
selection_criterion_save = selection_criterion
|
||||||
|
selection_criterion_min_save = selection_criterion_min
|
||||||
|
|
||||||
|
|
||||||
|
cas_bm = 0_bit_kind
|
||||||
|
do i=1,N_cas_bitmask
|
||||||
|
do j=1,N_int
|
||||||
|
cas_bm(j) = ior(cas_bm(j), cas_bitmask(j,1,i))
|
||||||
|
cas_bm(j) = ior(cas_bm(j), cas_bitmask(j,2,i))
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Save CAS-SD bitmask
|
||||||
|
generators_bitmask_save = generators_bitmask
|
||||||
|
N_generators_bitmask_save = N_generators_bitmask
|
||||||
|
|
||||||
|
! Set the CAS bitmask
|
||||||
|
do i=1,6
|
||||||
|
generators_bitmask(:,:,i,:) = cas_bitmask
|
||||||
|
enddo
|
||||||
|
N_generators_bitmask = N_cas_bitmask
|
||||||
|
SOFT_TOUCH generators_bitmask N_generators_bitmask
|
||||||
|
|
||||||
|
|
||||||
|
! If the number of dets already in the file is larger than the requested
|
||||||
|
! number of determinants, truncate the wf
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
endif
|
||||||
|
|
||||||
|
! Start MCSCF iteration
|
||||||
|
|
||||||
|
! CAS-CI
|
||||||
|
! ------
|
||||||
|
|
||||||
|
E_old = E_CI
|
||||||
|
|
||||||
|
! Reset the selection criterion
|
||||||
|
selection_criterion = selection_criterion_save
|
||||||
|
selection_criterion_min = selection_criterion_min_save
|
||||||
|
SOFT_TOUCH selection_criterion_min selection_criterion selection_criterion_factor
|
||||||
|
|
||||||
|
! Set the CAS bitmask
|
||||||
|
do i=1,6
|
||||||
|
generators_bitmask(:,:,i,:) = cas_bitmask
|
||||||
|
enddo
|
||||||
|
N_generators_bitmask = N_cas_bitmask
|
||||||
|
SOFT_TOUCH generators_bitmask N_generators_bitmask
|
||||||
|
|
||||||
|
do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_states))) > pt2_max)
|
||||||
|
N_det_old = N_det
|
||||||
|
call H_apply_CAS_SD_selected_no_skip(pt2, norm_pert, H_pert_diag, N_states)
|
||||||
|
|
||||||
|
PROVIDE psi_coef
|
||||||
|
PROVIDE psi_det
|
||||||
|
PROVIDE psi_det_sorted
|
||||||
|
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
endif
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, '======'
|
||||||
|
print *, 'CAS-CI'
|
||||||
|
print *, '======'
|
||||||
|
print *, ''
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E(CAS) = ', CI_energy
|
||||||
|
print *, 'E(CAS)+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
print *, ''
|
||||||
|
E_CI = sum(CI_energy(1:N_states)+pt2(1:N_states))/dble(N_states)
|
||||||
|
|
||||||
|
call ezfio_set_casscf_energy(CI_energy(1))
|
||||||
|
if (abort_all) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
if (N_det == N_det_old) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Super-CI
|
||||||
|
! --------
|
||||||
|
|
||||||
|
selection_criterion_min = 1.d-12
|
||||||
|
selection_criterion = 1.d-12
|
||||||
|
|
||||||
|
! Set the CAS bitmask
|
||||||
|
generators_bitmask = generators_bitmask_save
|
||||||
|
N_generators_bitmask = N_generators_bitmask_save
|
||||||
|
SOFT_TOUCH generators_bitmask N_generators_bitmask selection_criterion selection_criterion_min selection_criterion_factor
|
||||||
|
|
||||||
|
N_det_ci = N_det
|
||||||
|
|
||||||
|
call H_apply_CAS_SD_selected(pt2, norm_pert, H_pert_diag, N_states)
|
||||||
|
|
||||||
|
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
i_int = ishft(i-1,-bit_kind_shift)+1
|
||||||
|
i_bit = j-ishft(i_int-1,bit_kind_shift)-1
|
||||||
|
bit_tmp(:) = 0_bit_kind
|
||||||
|
bit_tmp(i_int) = ibset(0_bit_kind,i_bit)
|
||||||
|
if (iand(bit_tmp(i_int), cas_bm(i_int)) == 0_bit_kind) then
|
||||||
|
! Not a CAS MO
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
|
||||||
|
do j=1,mo_tot_num
|
||||||
|
if (j == i) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
j_int = ishft(j-1,-bit_kind_shift)+1
|
||||||
|
j_bit = j-ishft(j_int-1,bit_kind_shift)-1
|
||||||
|
bit_tmp(:) = 0_bit_kind
|
||||||
|
bit_tmp(j_int) = ibset(0_bit_kind,j_bit)
|
||||||
|
if (iand(bit_tmp(j_int), cas_bm(j_int)) == 0_bit_kind) then
|
||||||
|
! Not a CAS MO
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
! Now, both i and j are MOs of the CAS. De-couple them in the DM
|
||||||
|
one_body_dm_mo(i,j) = 0.d0
|
||||||
|
enddo
|
||||||
|
|
||||||
|
enddo
|
||||||
|
|
||||||
|
SOFT_TOUCH one_body_dm_mo
|
||||||
|
|
||||||
|
double precision :: mx, ov
|
||||||
|
double precision, allocatable :: mo_coef_old(:,:)
|
||||||
|
integer, allocatable :: iorder(:)
|
||||||
|
logical, allocatable :: selected(:)
|
||||||
|
allocate( mo_coef_old(size(mo_coef,1), size(mo_coef,2)), iorder(mo_tot_num), selected(mo_tot_num) )
|
||||||
|
mo_coef_old = mo_coef
|
||||||
|
label = "Canonical"
|
||||||
|
call mo_as_eigvectors_of_mo_matrix(one_body_dm_mo,size(one_body_dm_mo,1),size(one_body_dm_mo,2),label,-1)
|
||||||
|
selected = .False.
|
||||||
|
do j=1,mo_tot_num
|
||||||
|
mx = -1.d0
|
||||||
|
iorder(j) = j
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
if (selected(i)) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
ov = 0.d0
|
||||||
|
do l=1,ao_num
|
||||||
|
do k=1,ao_num
|
||||||
|
ov = ov + mo_coef_old(k,j) * ao_overlap(k,l) * mo_coef(l,i)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
ov= dabs(ov)
|
||||||
|
if (ov > mx) then
|
||||||
|
mx = ov
|
||||||
|
iorder(j) = i
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
selected( iorder(j) ) = .True.
|
||||||
|
enddo
|
||||||
|
mo_coef_old = mo_coef
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
mo_coef(:,i) = mo_coef_old(:,iorder(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
call save_mos
|
||||||
|
|
||||||
|
call write_double(6,E_CI,"Energy(CAS)")
|
||||||
|
|
||||||
|
deallocate( mo_coef_old )
|
||||||
|
deallocate( pt2, norm_pert,H_pert_diag )
|
||||||
|
deallocate( generators_bitmask_save )
|
||||||
|
deallocate( bit_tmp, cas_bm, iorder )
|
||||||
|
end
|
@ -5,7 +5,6 @@ from generate_h_apply import *
|
|||||||
s = H_apply("CAS_SD")
|
s = H_apply("CAS_SD")
|
||||||
print s
|
print s
|
||||||
|
|
||||||
|
|
||||||
s = H_apply("CAS_SD_selected_no_skip")
|
s = H_apply("CAS_SD_selected_no_skip")
|
||||||
s.set_selection_pt2("epstein_nesbet_2x2")
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
s.unset_skip()
|
s.unset_skip()
|
||||||
@ -19,5 +18,22 @@ s = H_apply("CAS_SD_PT2")
|
|||||||
s.set_perturbation("epstein_nesbet_2x2")
|
s.set_perturbation("epstein_nesbet_2x2")
|
||||||
print s
|
print s
|
||||||
|
|
||||||
|
|
||||||
|
s = H_apply("CAS_S",do_double_exc=False)
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_selected_no_skip",do_double_exc=False)
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
s.unset_skip()
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_selected",do_double_exc=False)
|
||||||
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
|
s = H_apply("CAS_S_PT2",do_double_exc=False)
|
||||||
|
s.set_perturbation("epstein_nesbet_2x2")
|
||||||
|
print s
|
||||||
|
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
|
@ -118,69 +118,101 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L414>`_
|
h_apply_cas_sd
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L1>`_
|
h_apply_cas_sd_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L269>`_
|
h_apply_cas_sd_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_pt2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L2610>`_
|
h_apply_cas_sd_pt2
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_pt2_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L2118>`_
|
h_apply_cas_sd_pt2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_pt2_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_pt2_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L2427>`_
|
h_apply_cas_sd_pt2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_pt2_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L1872>`_
|
h_apply_cas_sd_selected
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L1346>`_
|
h_apply_cas_sd_selected_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_selected_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L1675>`_
|
h_apply_cas_sd_selected_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_selected_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected_no_skip <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L1128>`_
|
h_apply_cas_sd_selected_no_skip
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected_no_skip_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L602>`_
|
h_apply_cas_sd_selected_no_skip_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_selected_no_skip_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cas_sd_selected_no_skip_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CAS_SD/H_apply.irp.f_shell_22#L931>`_
|
h_apply_cas_sd_selected_no_skip_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cas_sd_selected_no_skip_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
95
plugins/CAS_SD/cas_s.irp.f
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
program full_ci
|
||||||
|
implicit none
|
||||||
|
integer :: i,k
|
||||||
|
integer :: N_det_old
|
||||||
|
|
||||||
|
|
||||||
|
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:)
|
||||||
|
integer :: N_st, degree
|
||||||
|
N_st = N_states
|
||||||
|
allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st))
|
||||||
|
character*(64) :: perturbation
|
||||||
|
PROVIDE N_det_cas
|
||||||
|
|
||||||
|
N_det_old = 0
|
||||||
|
pt2 = 1.d0
|
||||||
|
diag_algorithm = "Lapack"
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
endif
|
||||||
|
|
||||||
|
do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max)
|
||||||
|
N_det_old = N_det
|
||||||
|
call H_apply_CAS_S(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
|
|
||||||
|
PROVIDE psi_coef
|
||||||
|
PROVIDE psi_det
|
||||||
|
PROVIDE psi_det_sorted
|
||||||
|
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
endif
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
call ezfio_set_cas_sd_energy(CI_energy(1))
|
||||||
|
if (abort_all) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
if (N_det == N_det_old) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
call diagonalize_CI
|
||||||
|
|
||||||
|
if(do_pt2_end)then
|
||||||
|
print*,'Last iteration only to compute the PT2'
|
||||||
|
threshold_selectors = 1.d0
|
||||||
|
threshold_generators = 0.999d0
|
||||||
|
call H_apply_CAS_S_PT2(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
|
|
||||||
|
print *, 'Final step'
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
call ezfio_set_cas_sd_energy_pt2(CI_energy(1)+pt2(1))
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
integer :: exc_max, degree_min
|
||||||
|
exc_max = 0
|
||||||
|
print *, 'CAS determinants : ', N_det_cas
|
||||||
|
do i=1,min(N_det_cas,10)
|
||||||
|
do k=i,N_det_cas
|
||||||
|
call get_excitation_degree(psi_cas(1,1,k),psi_cas(1,1,i),degree,N_int)
|
||||||
|
exc_max = max(exc_max,degree)
|
||||||
|
enddo
|
||||||
|
call debug_det(psi_cas(1,1,i),N_int)
|
||||||
|
print *, ''
|
||||||
|
enddo
|
||||||
|
print *, 'Max excitation degree in the CAS :', exc_max
|
||||||
|
end
|
89
plugins/CAS_SD/cas_s_selected.irp.f
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
program full_ci
|
||||||
|
implicit none
|
||||||
|
integer :: i,k
|
||||||
|
|
||||||
|
|
||||||
|
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:)
|
||||||
|
integer :: N_st, degree
|
||||||
|
N_st = N_states
|
||||||
|
allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st))
|
||||||
|
character*(64) :: perturbation
|
||||||
|
PROVIDE N_det_cas
|
||||||
|
|
||||||
|
pt2 = 1.d0
|
||||||
|
diag_algorithm = "Lapack"
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
endif
|
||||||
|
|
||||||
|
do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max)
|
||||||
|
call H_apply_CAS_S_selected(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
|
|
||||||
|
PROVIDE psi_coef
|
||||||
|
PROVIDE psi_det
|
||||||
|
PROVIDE psi_det_sorted
|
||||||
|
|
||||||
|
if (N_det > N_det_max) then
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
N_det = N_det_max
|
||||||
|
soft_touch N_det psi_det psi_coef
|
||||||
|
endif
|
||||||
|
call diagonalize_CI
|
||||||
|
call save_wavefunction
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
call ezfio_set_cas_sd_energy(CI_energy(1))
|
||||||
|
if (abort_all) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
call diagonalize_CI
|
||||||
|
|
||||||
|
if(do_pt2_end)then
|
||||||
|
print*,'Last iteration only to compute the PT2'
|
||||||
|
threshold_selectors = 1.d0
|
||||||
|
threshold_generators = 0.999d0
|
||||||
|
call H_apply_CAS_S_PT2(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
|
|
||||||
|
print *, 'Final step'
|
||||||
|
print *, 'N_det = ', N_det
|
||||||
|
print *, 'N_states = ', N_states
|
||||||
|
print *, 'PT2 = ', pt2
|
||||||
|
print *, 'E = ', CI_energy
|
||||||
|
print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
|
print *, '-----'
|
||||||
|
call ezfio_set_cas_sd_energy_pt2(CI_energy(1)+pt2(1))
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
integer :: exc_max, degree_min
|
||||||
|
exc_max = 0
|
||||||
|
print *, 'CAS determinants : ', N_det_cas
|
||||||
|
do i=1,min(N_det_cas,10)
|
||||||
|
do k=i,N_det_cas
|
||||||
|
call get_excitation_degree(psi_cas(1,1,k),psi_cas(1,1,i),degree,N_int)
|
||||||
|
exc_max = max(exc_max,degree)
|
||||||
|
enddo
|
||||||
|
call debug_det(psi_cas(1,1,i),N_int)
|
||||||
|
print *, ''
|
||||||
|
enddo
|
||||||
|
print *, 'Max excitation degree in the CAS :', exc_max
|
||||||
|
end
|
@ -203,3 +203,48 @@ Documentation
|
|||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/plugins/Selectors_full>`_
|
||||||
|
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/plugins/SingleRefMethod>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
`cid <http://github.com/LCPQ/quantum_package/tree/master/plugins/CID/cid_lapack.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cid
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cid_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cid_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cid_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cid_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
1
plugins/CISD/.gitignore
vendored
@ -20,6 +20,7 @@ Pseudo
|
|||||||
Selectors_full
|
Selectors_full
|
||||||
SingleRefMethod
|
SingleRefMethod
|
||||||
Utils
|
Utils
|
||||||
|
cisd
|
||||||
cisd_lapack
|
cisd_lapack
|
||||||
ezfio_interface.irp.f
|
ezfio_interface.irp.f
|
||||||
irpf90.make
|
irpf90.make
|
||||||
|
10
plugins/CISD/EZFIO.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[energy]
|
||||||
|
type: double precision
|
||||||
|
doc: Variational CISD energy
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
|
[energy_pt2]
|
||||||
|
type: double precision
|
||||||
|
doc: Estimated CISD energy (including PT2)
|
||||||
|
interface: ezfio
|
||||||
|
|
@ -59,22 +59,26 @@ Documentation
|
|||||||
.. by the `update_README.py` script.
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
`cisd <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD/cisd_lapack.irp.f#L1>`_
|
h_apply_cisd
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD/H_apply.irp.f_shell_8#L414>`_
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD/H_apply.irp.f_shell_8#L1>`_
|
h_apply_cisd_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD/H_apply.irp.f_shell_8#L269>`_
|
h_apply_cisd_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 84 KiB |
@ -72,3 +72,122 @@ Needed Modules
|
|||||||
|
|
||||||
* `CISD_selected <http://github.com/LCPQ/quantum_package/tree/master/src/CISD_selected>`_
|
* `CISD_selected <http://github.com/LCPQ/quantum_package/tree/master/src/CISD_selected>`_
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `CISD_selected <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
`cisd_sc2_selected <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_SC2_selected/cisd_sc2_selection.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_en_sc2
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_en_sc2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_en_sc2_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_en_sc2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_en_sc2_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_sc2_selected
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_sc2_selected_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_sc2_selected_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_sc2_selected_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_sc2_selected_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
@ -196,22 +196,26 @@ Documentation
|
|||||||
.. by the `update_README.py` script.
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
`cisd <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/cisd_selection.irp.f#L1>`_
|
h_apply_cisd
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_8#L414>`_
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_8#L1>`_
|
h_apply_cisd_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_8#L269>`_
|
h_apply_cisd_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
@ -221,154 +225,226 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_delta_rho_one_point <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L5931>`_
|
h_apply_cisd_selection_delta_rho_one_point
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_delta_rho_one_point_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L5405>`_
|
h_apply_cisd_selection_delta_rho_one_point_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_delta_rho_one_point_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_delta_rho_one_point_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L5734>`_
|
h_apply_cisd_selection_delta_rho_one_point_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_delta_rho_one_point_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_dipole_moment_z <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L5159>`_
|
h_apply_cisd_selection_dipole_moment_z
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_dipole_moment_z_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L4633>`_
|
h_apply_cisd_selection_dipole_moment_z_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_dipole_moment_z_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_dipole_moment_z_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L4962>`_
|
h_apply_cisd_selection_dipole_moment_z_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_dipole_moment_z_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L3615>`_
|
h_apply_cisd_selection_epstein_nesbet
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_2x2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L4387>`_
|
h_apply_cisd_selection_epstein_nesbet_2x2
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_2x2_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L3861>`_
|
h_apply_cisd_selection_epstein_nesbet_2x2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_2x2_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_2x2_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L4190>`_
|
h_apply_cisd_selection_epstein_nesbet_2x2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_2x2_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L3089>`_
|
h_apply_cisd_selection_epstein_nesbet_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L3418>`_
|
h_apply_cisd_selection_epstein_nesbet_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L2843>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L2317>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L2646>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L2071>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_no_projected
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L1545>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L1874>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L1299>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_projected
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L773>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L1102>`_
|
h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_h_core <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L527>`_
|
h_apply_cisd_selection_h_core
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_h_core_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L1>`_
|
h_apply_cisd_selection_h_core_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_h_core_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_h_core_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L330>`_
|
h_apply_cisd_selection_h_core_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_h_core_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_moller_plesset <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L6703>`_
|
h_apply_cisd_selection_moller_plesset
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_moller_plesset_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L6177>`_
|
h_apply_cisd_selection_moller_plesset_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_moller_plesset_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_cisd_selection_moller_plesset_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/CISD_selected/H_apply.irp.f_shell_10#L6506>`_
|
h_apply_cisd_selection_moller_plesset_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_cisd_selection_moller_plesset_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
@ -41,8 +41,8 @@ program cisd
|
|||||||
N_det = min(N_det,N_det_max)
|
N_det = min(N_det,N_det_max)
|
||||||
touch N_det psi_det psi_coef
|
touch N_det psi_det psi_coef
|
||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
deallocate(pt2,norm_pert,H_pert_diag)
|
|
||||||
call save_wavefunction
|
call save_wavefunction
|
||||||
call ezfio_set_cisd_selected_energy(CI_energy)
|
call ezfio_set_cisd_selected_energy(CI_energy)
|
||||||
call ezfio_set_cisd_selected_energy_pt2(CI_energy+pt2)
|
call ezfio_set_cisd_selected_energy_pt2(CI_energy+pt2)
|
||||||
|
deallocate(pt2,norm_pert,H_pert_diag)
|
||||||
end
|
end
|
||||||
|
@ -57,3 +57,74 @@ Needed Modules
|
|||||||
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
||||||
* `Generators_CAS <http://github.com/LCPQ/quantum_package/tree/master/src/Generators_CAS>`_
|
* `Generators_CAS <http://github.com/LCPQ/quantum_package/tree/master/src/Generators_CAS>`_
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `Perturbation <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation>`_
|
||||||
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/plugins/Selectors_full>`_
|
||||||
|
* `Generators_CAS <http://github.com/LCPQ/quantum_package/tree/master/plugins/Generators_CAS>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
`ddci <http://github.com/LCPQ/quantum_package/tree/master/plugins/DDCI_selected/ddci.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_pt2
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_pt2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_pt2_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_pt2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_pt2_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_selection
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_selection_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_selection_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_selection_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_ddci_selection_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 59 KiB |
32
plugins/Full_CI/.gitignore
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Automatically created by $QP_ROOT/scripts/module/module_handler.py
|
||||||
|
.ninja_deps
|
||||||
|
.ninja_log
|
||||||
|
AO_Basis
|
||||||
|
Bitmask
|
||||||
|
Determinants
|
||||||
|
Electrons
|
||||||
|
Ezfio_files
|
||||||
|
Generators_full
|
||||||
|
Hartree_Fock
|
||||||
|
IRPF90_man
|
||||||
|
IRPF90_temp
|
||||||
|
Integrals_Bielec
|
||||||
|
Integrals_Monoelec
|
||||||
|
MOGuess
|
||||||
|
MO_Basis
|
||||||
|
Makefile
|
||||||
|
Makefile.depend
|
||||||
|
Nuclei
|
||||||
|
Perturbation
|
||||||
|
Properties
|
||||||
|
Pseudo
|
||||||
|
Selectors_full
|
||||||
|
Utils
|
||||||
|
ezfio_interface.irp.f
|
||||||
|
full_ci
|
||||||
|
full_ci_no_skip
|
||||||
|
irpf90.make
|
||||||
|
irpf90_entities
|
||||||
|
tags
|
||||||
|
target_pt2
|
||||||
|
var_pt2_ratio
|
@ -27,137 +27,201 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L527>`_
|
h_apply_fci
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1>`_
|
h_apply_fci_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_mono <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L2744>`_
|
h_apply_fci_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_mono
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_mono_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L2216>`_
|
h_apply_fci_mono_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_mono_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_mono_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L2545>`_
|
h_apply_fci_mono_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_mono_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L330>`_
|
h_apply_fci_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_no_skip <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1998>`_
|
h_apply_fci_no_skip
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_no_skip_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1472>`_
|
h_apply_fci_no_skip_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_no_skip_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_no_skip_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1801>`_
|
h_apply_fci_no_skip_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_no_skip_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_pt2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1265>`_
|
h_apply_fci_pt2
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_pt2_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L773>`_
|
h_apply_fci_pt2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_pt2_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_fci_pt2_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L1082>`_
|
h_apply_fci_pt2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_fci_pt2_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_delta_rho <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L4258>`_
|
h_apply_pt2_mono_delta_rho
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_delta_rho_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L3764>`_
|
h_apply_pt2_mono_delta_rho_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_mono_delta_rho_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_delta_rho_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L4073>`_
|
h_apply_pt2_mono_delta_rho_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_mono_delta_rho_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_di_delta_rho <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L5729>`_
|
h_apply_pt2_mono_di_delta_rho
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_di_delta_rho_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L5237>`_
|
h_apply_pt2_mono_di_delta_rho_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_mono_di_delta_rho_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_pt2_mono_di_delta_rho_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L5546>`_
|
h_apply_pt2_mono_di_delta_rho_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_pt2_mono_di_delta_rho_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_delta_rho <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L3518>`_
|
h_apply_select_mono_delta_rho
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_delta_rho_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L2990>`_
|
h_apply_select_mono_delta_rho_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_select_mono_delta_rho_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_delta_rho_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L3319>`_
|
h_apply_select_mono_delta_rho_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_select_mono_delta_rho_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_di_delta_rho <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L4991>`_
|
h_apply_select_mono_di_delta_rho
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_di_delta_rho_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L4465>`_
|
h_apply_select_mono_di_delta_rho_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_select_mono_di_delta_rho_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_select_mono_di_delta_rho_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/Full_CI/H_apply.irp.f_shell_43#L4794>`_
|
h_apply_select_mono_di_delta_rho_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_select_mono_di_delta_rho_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
@ -27,6 +27,8 @@ program var_pt2_ratio_run
|
|||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
ratio = (CI_energy(1) - HF_energy) / (CI_energy(1)+pt2(1) - HF_energy)
|
ratio = (CI_energy(1) - HF_energy) / (CI_energy(1)+pt2(1) - HF_energy)
|
||||||
if (N_det > 20000) then
|
if (N_det > 20000) then
|
||||||
|
N_det = 20000
|
||||||
|
TOUCH N_det
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 73 KiB |
@ -10,6 +10,12 @@ doc: Maximum number of SCF iterations
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: 200
|
default: 200
|
||||||
|
|
||||||
|
[level_shift]
|
||||||
|
type: Positive_float
|
||||||
|
doc: Energy shift on the virtual MOs to improve SCF convergence
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 0.5
|
||||||
|
|
||||||
[mo_guess_type]
|
[mo_guess_type]
|
||||||
type: MO_guess
|
type: MO_guess
|
||||||
doc: Initial MO guess. Can be [ Huckel | HCore ]
|
doc: Initial MO guess. Can be [ Huckel | HCore ]
|
||||||
|
@ -73,6 +73,11 @@
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
! Introduce level shift here
|
||||||
|
do i = elec_alpha_num+1, mo_tot_num
|
||||||
|
Fock_matrix_mo(i,i) += level_shift
|
||||||
|
enddo
|
||||||
|
|
||||||
do i = 1, mo_tot_num
|
do i = 1, mo_tot_num
|
||||||
Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i)
|
Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i)
|
||||||
enddo
|
enddo
|
||||||
@ -108,9 +113,10 @@ END_PROVIDER
|
|||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
integer :: i,j,k,l,k1,r,s
|
integer :: i,j,k,l,k1,r,s
|
||||||
|
integer :: i0,j0,k0,l0
|
||||||
integer*8 :: p,q
|
integer*8 :: p,q
|
||||||
double precision :: integral
|
double precision :: integral, c0, c1, c2
|
||||||
double precision :: ao_bielec_integral
|
double precision :: ao_bielec_integral, local_threshold
|
||||||
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:)
|
double precision, allocatable :: ao_bi_elec_integral_alpha_tmp(:,:)
|
||||||
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:)
|
double precision, allocatable :: ao_bi_elec_integral_beta_tmp(:,:)
|
||||||
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp
|
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: ao_bi_elec_integral_beta_tmp
|
||||||
@ -121,8 +127,9 @@ END_PROVIDER
|
|||||||
if (do_direct_integrals) then
|
if (do_direct_integrals) then
|
||||||
|
|
||||||
!$OMP PARALLEL DEFAULT(NONE) &
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s, &
|
!$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s,i0,j0,k0,l0, &
|
||||||
!$OMP ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp)&
|
!$OMP ao_bi_elec_integral_alpha_tmp,ao_bi_elec_integral_beta_tmp, c0, c1, c2, &
|
||||||
|
!$OMP local_threshold)&
|
||||||
!$OMP SHARED(ao_num,ao_num_align,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,&
|
!$OMP SHARED(ao_num,ao_num_align,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,&
|
||||||
!$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, &
|
!$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, &
|
||||||
!$OMP ao_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta)
|
!$OMP ao_overlap_abs, ao_bi_elec_integral_alpha, ao_bi_elec_integral_beta)
|
||||||
@ -152,14 +159,16 @@ END_PROVIDER
|
|||||||
< ao_integrals_threshold) then
|
< ao_integrals_threshold) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
if (ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) &
|
local_threshold = ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j)
|
||||||
< ao_integrals_threshold) then
|
if (local_threshold < ao_integrals_threshold) then
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
values(1) = ao_bielec_integral(k,l,i,j)
|
|
||||||
if (abs(values(1)) < ao_integrals_threshold) then
|
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
|
i0 = i
|
||||||
|
j0 = j
|
||||||
|
k0 = k
|
||||||
|
l0 = l
|
||||||
|
values(1) = 0.d0
|
||||||
|
local_threshold = ao_integrals_threshold/local_threshold
|
||||||
do k2=1,8
|
do k2=1,8
|
||||||
if (kk(k2)==0) then
|
if (kk(k2)==0) then
|
||||||
cycle
|
cycle
|
||||||
@ -168,12 +177,21 @@ END_PROVIDER
|
|||||||
j = jj(k2)
|
j = jj(k2)
|
||||||
k = kk(k2)
|
k = kk(k2)
|
||||||
l = ll(k2)
|
l = ll(k2)
|
||||||
integral = (HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)) * values(1)
|
c0 = HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)
|
||||||
|
c1 = HF_density_matrix_ao_alpha(k,i)
|
||||||
|
c2 = HF_density_matrix_ao_beta(k,i)
|
||||||
|
if ( dabs(c0)+dabs(c1)+dabs(c2) < local_threshold) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
if (values(1) == 0.d0) then
|
||||||
|
values(1) = ao_bielec_integral(k0,l0,i0,j0)
|
||||||
|
endif
|
||||||
|
integral = c0 * values(1)
|
||||||
ao_bi_elec_integral_alpha_tmp(i,j) += integral
|
ao_bi_elec_integral_alpha_tmp(i,j) += integral
|
||||||
ao_bi_elec_integral_beta_tmp (i,j) += integral
|
ao_bi_elec_integral_beta_tmp (i,j) += integral
|
||||||
integral = values(1)
|
integral = values(1)
|
||||||
ao_bi_elec_integral_alpha_tmp(l,j) -= HF_density_matrix_ao_alpha(k,i) * integral
|
ao_bi_elec_integral_alpha_tmp(l,j) -= c1 * integral
|
||||||
ao_bi_elec_integral_beta_tmp (l,j) -= HF_density_matrix_ao_beta (k,i) * integral
|
ao_bi_elec_integral_beta_tmp (l,j) -= c2 * integral
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!$OMP END DO NOWAIT
|
!$OMP END DO NOWAIT
|
||||||
@ -315,7 +333,9 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num_align, ao_num) ]
|
|||||||
! Fock matrix in AO basis set
|
! Fock matrix in AO basis set
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
if (elec_alpha_num == elec_beta_num) then
|
if ( (elec_alpha_num == elec_beta_num).and. &
|
||||||
|
(level_shift == 0.) ) &
|
||||||
|
then
|
||||||
integer :: i,j
|
integer :: i,j
|
||||||
do j=1,ao_num
|
do j=1,ao_num
|
||||||
!DIR$ VECTOR ALIGNED
|
!DIR$ VECTOR ALIGNED
|
||||||
@ -325,29 +345,46 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num_align, ao_num) ]
|
|||||||
enddo
|
enddo
|
||||||
else
|
else
|
||||||
double precision, allocatable :: T(:,:), M(:,:)
|
double precision, allocatable :: T(:,:), M(:,:)
|
||||||
|
integer :: ierr
|
||||||
! F_ao = S C F_mo C^t S
|
! F_ao = S C F_mo C^t S
|
||||||
allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num))
|
allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num),stat=ierr)
|
||||||
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
if (ierr /=0 ) then
|
||||||
|
print *, irp_here, ' : allocation failed'
|
||||||
|
endif
|
||||||
|
|
||||||
|
! ao_overlap (ao_num,ao_num) . mo_coef (ao_num,mo_tot_num)
|
||||||
|
! -> M(ao_num,mo_tot_num)
|
||||||
|
call dgemm('N','N', ao_num,mo_tot_num,ao_num, 1.d0, &
|
||||||
ao_overlap, size(ao_overlap,1), &
|
ao_overlap, size(ao_overlap,1), &
|
||||||
mo_coef, size(mo_coef,1), &
|
mo_coef, size(mo_coef,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
M, size(M,1))
|
M, size(M,1))
|
||||||
|
|
||||||
|
! M(ao_num,mo_tot_num) . Fock_matrix_mo (mo_tot_num,mo_tot_num)
|
||||||
|
! -> T(ao_num,mo_tot_num)
|
||||||
call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, &
|
call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, &
|
||||||
M, size(M,1), &
|
M, size(M,1), &
|
||||||
Fock_matrix_mo, size(Fock_matrix_mo,1), &
|
Fock_matrix_mo, size(Fock_matrix_mo,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
T, size(T,1))
|
T, size(T,1))
|
||||||
call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, &
|
|
||||||
|
! T(ao_num,mo_tot_num) . mo_coef^T (mo_tot_num,ao_num)
|
||||||
|
! -> M(ao_num,ao_num)
|
||||||
|
call dgemm('N','T', ao_num,ao_num,mo_tot_num, 1.d0, &
|
||||||
T, size(T,1), &
|
T, size(T,1), &
|
||||||
mo_coef, size(mo_coef,1), &
|
mo_coef, size(mo_coef,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
M, size(M,1))
|
M, size(M,1))
|
||||||
|
|
||||||
|
! M(ao_num,ao_num) . ao_overlap (ao_num,ao_num)
|
||||||
|
! -> Fock_matrix_ao(ao_num,ao_num)
|
||||||
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
||||||
M, size(M,1), &
|
M, size(M,1), &
|
||||||
ao_overlap, size(ao_overlap,1), &
|
ao_overlap, size(ao_overlap,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
Fock_matrix_ao, size(Fock_matrix_ao,1))
|
Fock_matrix_ao, size(Fock_matrix_ao,1))
|
||||||
|
|
||||||
|
|
||||||
deallocate(T)
|
deallocate(T)
|
||||||
endif
|
endif
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
@ -360,23 +397,39 @@ subroutine Fock_mo_to_ao(FMO,LDFMO,FAO,LDFAO)
|
|||||||
double precision, intent(out) :: FAO(LDFAO,*)
|
double precision, intent(out) :: FAO(LDFAO,*)
|
||||||
|
|
||||||
double precision, allocatable :: T(:,:), M(:,:)
|
double precision, allocatable :: T(:,:), M(:,:)
|
||||||
|
integer :: ierr
|
||||||
! F_ao = S C F_mo C^t S
|
! F_ao = S C F_mo C^t S
|
||||||
allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num))
|
allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num),stat=ierr)
|
||||||
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
if (ierr /=0 ) then
|
||||||
|
print *, irp_here, ' : allocation failed'
|
||||||
|
endif
|
||||||
|
|
||||||
|
! ao_overlap (ao_num,ao_num) . mo_coef (ao_num,mo_tot_num)
|
||||||
|
! -> M(ao_num,mo_tot_num)
|
||||||
|
call dgemm('N','N', ao_num,mo_tot_num,ao_num, 1.d0, &
|
||||||
ao_overlap, size(ao_overlap,1), &
|
ao_overlap, size(ao_overlap,1), &
|
||||||
mo_coef, size(mo_coef,1), &
|
mo_coef, size(mo_coef,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
M, size(M,1))
|
M, size(M,1))
|
||||||
|
|
||||||
|
! M(ao_num,mo_tot_num) . FMO (mo_tot_num,mo_tot_num)
|
||||||
|
! -> T(ao_num,mo_tot_num)
|
||||||
call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, &
|
call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, &
|
||||||
M, size(M,1), &
|
M, size(M,1), &
|
||||||
FMO, size(FMO,1), &
|
FMO, size(FMO,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
T, size(T,1))
|
T, size(T,1))
|
||||||
call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, &
|
|
||||||
|
! T(ao_num,mo_tot_num) . mo_coef^T (mo_tot_num,ao_num)
|
||||||
|
! -> M(ao_num,ao_num)
|
||||||
|
call dgemm('N','T', ao_num,ao_num,mo_tot_num, 1.d0, &
|
||||||
T, size(T,1), &
|
T, size(T,1), &
|
||||||
mo_coef, size(mo_coef,1), &
|
mo_coef, size(mo_coef,1), &
|
||||||
0.d0, &
|
0.d0, &
|
||||||
M, size(M,1))
|
M, size(M,1))
|
||||||
|
|
||||||
|
! M(ao_num,ao_num) . ao_overlap (ao_num,ao_num)
|
||||||
|
! -> Fock_matrix_ao(ao_num,ao_num)
|
||||||
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, &
|
||||||
M, size(M,1), &
|
M, size(M,1), &
|
||||||
ao_overlap, size(ao_overlap,1), &
|
ao_overlap, size(ao_overlap,1), &
|
||||||
|
@ -32,11 +32,11 @@ Documentation
|
|||||||
.. by the `update_README.py` script.
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
`ao_bi_elec_integral_alpha <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L102>`_
|
`ao_bi_elec_integral_alpha <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L107>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
|
|
||||||
`ao_bi_elec_integral_beta <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L103>`_
|
`ao_bi_elec_integral_beta <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L108>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
|
|
||||||
@ -62,23 +62,23 @@ Documentation
|
|||||||
Diagonal Fock matrix in the MO basis
|
Diagonal Fock matrix in the MO basis
|
||||||
|
|
||||||
|
|
||||||
`fock_matrix_alpha_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L83>`_
|
`fock_matrix_alpha_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L88>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
|
|
||||||
`fock_matrix_alpha_mo <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L254>`_
|
`fock_matrix_alpha_mo <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L272>`_
|
||||||
Fock matrix on the MO basis
|
Fock matrix on the MO basis
|
||||||
|
|
||||||
|
|
||||||
`fock_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L312>`_
|
`fock_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L330>`_
|
||||||
Fock matrix in AO basis set
|
Fock matrix in AO basis set
|
||||||
|
|
||||||
|
|
||||||
`fock_matrix_beta_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L84>`_
|
`fock_matrix_beta_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L89>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
|
|
||||||
`fock_matrix_beta_mo <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L274>`_
|
`fock_matrix_beta_mo <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L292>`_
|
||||||
Fock matrix on the MO basis
|
Fock matrix on the MO basis
|
||||||
|
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ Documentation
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
||||||
`fock_mo_to_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L355>`_
|
`fock_mo_to_ao <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L375>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ Documentation
|
|||||||
S^-1 Beta density matrix in the AO basis x S^-1
|
S^-1 Beta density matrix in the AO basis x S^-1
|
||||||
|
|
||||||
|
|
||||||
`hf_energy <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L293>`_
|
`hf_energy <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/Fock_matrix.irp.f#L311>`_
|
||||||
Hartree-Fock energy
|
Hartree-Fock energy
|
||||||
|
|
||||||
|
|
||||||
@ -142,7 +142,11 @@ Documentation
|
|||||||
Build the MOs using the extended Huckel model
|
Build the MOs using the extended Huckel model
|
||||||
|
|
||||||
|
|
||||||
`mo_guess_type <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/ezfio_interface.irp.f#L28>`_
|
`level_shift <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/ezfio_interface.irp.f#L28>`_
|
||||||
|
Energy shift on the virtual MOs to improve SCF convergence
|
||||||
|
|
||||||
|
|
||||||
|
`mo_guess_type <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/ezfio_interface.irp.f#L50>`_
|
||||||
Initial MO guess. Can be [ Huckel | HCore ]
|
Initial MO guess. Can be [ Huckel | HCore ]
|
||||||
|
|
||||||
|
|
||||||
@ -161,6 +165,6 @@ Documentation
|
|||||||
optional: mo_basis.mo_coef
|
optional: mo_basis.mo_coef
|
||||||
|
|
||||||
|
|
||||||
`thresh_scf <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/ezfio_interface.irp.f#L46>`_
|
`thresh_scf <http://github.com/LCPQ/quantum_package/tree/master/plugins/Hartree_Fock/ezfio_interface.irp.f#L68>`_
|
||||||
Threshold on the convergence of the Hartree Fock energy
|
Threshold on the convergence of the Hartree Fock energy
|
||||||
|
|
||||||
|
@ -42,16 +42,13 @@ subroutine run
|
|||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Run SCF calculation
|
! Run SCF calculation
|
||||||
END_DOC
|
END_DOC
|
||||||
double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem,get_mo_bielec_integral
|
double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem
|
||||||
double precision :: E0
|
double precision :: E0
|
||||||
integer :: i_it, i, j, k
|
integer :: i_it, i, j, k
|
||||||
|
|
||||||
E0 = HF_energy
|
E0 = HF_energy
|
||||||
|
|
||||||
thresh_SCF = 1.d-10
|
|
||||||
call damping_SCF
|
|
||||||
mo_label = "Canonical"
|
mo_label = "Canonical"
|
||||||
TOUCH mo_label mo_coef
|
call damping_SCF
|
||||||
call save_mos
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -86,7 +86,7 @@ subroutine damping_SCF
|
|||||||
if ((E_half > E).and.(E_new < E)) then
|
if ((E_half > E).and.(E_new < E)) then
|
||||||
lambda = 1.d0
|
lambda = 1.d0
|
||||||
exit
|
exit
|
||||||
else if ((E_half > E).and.(lambda > 5.d-2)) then
|
else if ((E_half > E).and.(lambda > 5.d-4)) then
|
||||||
lambda = 0.5d0 * lambda
|
lambda = 0.5d0 * lambda
|
||||||
E_new = E_half
|
E_new = E_half
|
||||||
else
|
else
|
||||||
@ -119,7 +119,7 @@ subroutine damping_SCF
|
|||||||
write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '===='
|
write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '===='
|
||||||
write(output_hartree_fock,*)
|
write(output_hartree_fock,*)
|
||||||
|
|
||||||
call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label)
|
call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label,1)
|
||||||
|
|
||||||
call write_double(output_hartree_fock, E_min, 'Hartree-Fock energy')
|
call write_double(output_hartree_fock, E_min, 'Hartree-Fock energy')
|
||||||
call ezfio_set_hartree_fock_energy(E_min)
|
call ezfio_set_hartree_fock_energy(E_min)
|
||||||
|
@ -10,6 +10,10 @@
|
|||||||
integer, allocatable :: iwork(:)
|
integer, allocatable :: iwork(:)
|
||||||
double precision, allocatable :: work(:), F(:,:), S(:,:)
|
double precision, allocatable :: work(:), F(:,:), S(:,:)
|
||||||
|
|
||||||
|
|
||||||
|
if (mo_tot_num == ao_num) then
|
||||||
|
! Solve H.C = E.S.C in AO basis set
|
||||||
|
|
||||||
allocate(F(ao_num_align,ao_num), S(ao_num_align,ao_num) )
|
allocate(F(ao_num_align,ao_num), S(ao_num_align,ao_num) )
|
||||||
do j=1,ao_num
|
do j=1,ao_num
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
@ -29,10 +33,6 @@
|
|||||||
|
|
||||||
call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),&
|
call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),&
|
||||||
diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info)
|
diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info)
|
||||||
! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),&
|
|
||||||
! diagonal_Fock_matrix_mo, work, lwork, info)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (info /= 0) then
|
if (info /= 0) then
|
||||||
print *, irp_here//' failed : ', info
|
print *, irp_here//' failed : ', info
|
||||||
@ -42,15 +42,10 @@
|
|||||||
liwork = iwork(1)
|
liwork = iwork(1)
|
||||||
deallocate(work,iwork)
|
deallocate(work,iwork)
|
||||||
allocate(work(lwork), iwork(liwork) )
|
allocate(work(lwork), iwork(liwork) )
|
||||||
! deallocate(work)
|
|
||||||
! allocate(work(lwork))
|
|
||||||
|
|
||||||
call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),&
|
call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),&
|
||||||
diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info)
|
diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info)
|
||||||
|
|
||||||
! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),&
|
|
||||||
! diagonal_Fock_matrix_mo, work, lwork, info)
|
|
||||||
|
|
||||||
if (info /= 0) then
|
if (info /= 0) then
|
||||||
print *, irp_here//' failed : ', info
|
print *, irp_here//' failed : ', info
|
||||||
stop 1
|
stop 1
|
||||||
@ -62,6 +57,56 @@
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
deallocate(work, iwork, F, S)
|
deallocate(work, iwork, F, S)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! Solve H.C = E.C in MO basis set
|
||||||
|
|
||||||
|
allocate( F(mo_tot_num_align,mo_tot_num) )
|
||||||
|
do j=1,mo_tot_num
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
F(i,j) = Fock_matrix_mo(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
n = mo_tot_num
|
||||||
|
lwork = 1+6*n + 2*n*n
|
||||||
|
liwork = 3 + 5*n
|
||||||
|
|
||||||
|
allocate(work(lwork), iwork(liwork) )
|
||||||
|
|
||||||
|
lwork = -1
|
||||||
|
liwork = -1
|
||||||
|
|
||||||
|
call dsyevd( 'V', 'U', mo_tot_num, F, &
|
||||||
|
size(F,1), diagonal_Fock_matrix_mo, &
|
||||||
|
work, lwork, iwork, liwork, info)
|
||||||
|
|
||||||
|
if (info /= 0) then
|
||||||
|
print *, irp_here//' failed : ', info
|
||||||
|
stop 1
|
||||||
|
endif
|
||||||
|
lwork = int(work(1))
|
||||||
|
liwork = iwork(1)
|
||||||
|
deallocate(work,iwork)
|
||||||
|
allocate(work(lwork), iwork(liwork) )
|
||||||
|
|
||||||
|
call dsyevd( 'V', 'U', mo_tot_num, F, &
|
||||||
|
size(F,1), diagonal_Fock_matrix_mo, &
|
||||||
|
work, lwork, iwork, liwork, info)
|
||||||
|
|
||||||
|
if (info /= 0) then
|
||||||
|
print *, irp_here//' failed : ', info
|
||||||
|
stop 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
call dgemm('N','N',ao_num,mo_tot_num,mo_tot_num, 1.d0, &
|
||||||
|
mo_coef, size(mo_coef,1), F, size(F,1), &
|
||||||
|
0.d0, eigenvectors_Fock_matrix_mo, size(eigenvectors_Fock_matrix_mo,1))
|
||||||
|
deallocate(work, iwork, F)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, diagonal_Fock_matrix_mo_sum, (mo_tot_num)]
|
BEGIN_PROVIDER [double precision, diagonal_Fock_matrix_mo_sum, (mo_tot_num)]
|
||||||
@ -73,19 +118,19 @@ BEGIN_PROVIDER [double precision, diagonal_Fock_matrix_mo_sum, (mo_tot_num)]
|
|||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j
|
integer :: i,j
|
||||||
double precision :: accu
|
double precision :: accu
|
||||||
|
do j = 1,elec_alpha_num
|
||||||
|
accu = 0.d0
|
||||||
do i = 1, elec_alpha_num
|
do i = 1, elec_alpha_num
|
||||||
accu = 0.d0
|
|
||||||
do j = 1, elec_alpha_num
|
|
||||||
accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j)
|
accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j)
|
||||||
enddo
|
enddo
|
||||||
diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i)
|
diagonal_Fock_matrix_mo_sum(j) = accu + mo_mono_elec_integral(j,j)
|
||||||
enddo
|
enddo
|
||||||
do i = elec_alpha_num+1,mo_tot_num
|
do j = elec_alpha_num+1,mo_tot_num
|
||||||
accu = 0.d0
|
accu = 0.d0
|
||||||
do j = 1, elec_alpha_num
|
do i = 1, elec_alpha_num
|
||||||
accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j)
|
accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j)
|
||||||
enddo
|
enddo
|
||||||
diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i)
|
diagonal_Fock_matrix_mo_sum(j) = accu + mo_mono_elec_integral(j,j)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
@ -4,7 +4,7 @@ subroutine huckel_guess
|
|||||||
! Build the MOs using the extended Huckel model
|
! Build the MOs using the extended Huckel model
|
||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j
|
integer :: i,j
|
||||||
double precision :: tmp_matrix(ao_num_align,ao_num),accu
|
double precision :: accu
|
||||||
double precision :: c
|
double precision :: c
|
||||||
character*(64) :: label
|
character*(64) :: label
|
||||||
|
|
||||||
@ -13,20 +13,18 @@ subroutine huckel_guess
|
|||||||
label = "Guess"
|
label = "Guess"
|
||||||
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral, &
|
call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral, &
|
||||||
size(mo_mono_elec_integral,1), &
|
size(mo_mono_elec_integral,1), &
|
||||||
size(mo_mono_elec_integral,2),label)
|
size(mo_mono_elec_integral,2),label,1)
|
||||||
TOUCH mo_coef
|
TOUCH mo_coef
|
||||||
|
|
||||||
c = 0.5d0 * 1.75d0
|
c = 0.5d0 * 1.75d0
|
||||||
|
|
||||||
do j=1,ao_num
|
do j=1,ao_num
|
||||||
|
!DIR$ VECTOR ALIGNED
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
if (i.ne.j) then
|
Fock_matrix_ao(i,j) = c*ao_overlap(i,j)*(ao_mono_elec_integral_diag(i) + &
|
||||||
Fock_matrix_ao(i,j) = c*ao_overlap(i,j)*(ao_mono_elec_integral(i,i) + &
|
ao_mono_elec_integral_diag(j))
|
||||||
ao_mono_elec_integral(j,j))
|
|
||||||
else
|
|
||||||
Fock_matrix_ao(i,j) = Fock_matrix_alpha_ao(i,j)
|
|
||||||
endif
|
|
||||||
enddo
|
enddo
|
||||||
|
Fock_matrix_ao(j,j) = Fock_matrix_alpha_ao(j,j)
|
||||||
enddo
|
enddo
|
||||||
TOUCH Fock_matrix_ao
|
TOUCH Fock_matrix_ao
|
||||||
mo_coef = eigenvectors_fock_matrix_mo
|
mo_coef = eigenvectors_fock_matrix_mo
|
||||||
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 57 KiB |
5
plugins/MP2/EZFIO.cfg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[energy]
|
||||||
|
type: double precision
|
||||||
|
doc: MP2 energy
|
||||||
|
interface: ezfio
|
||||||
|
|
@ -6,5 +6,9 @@ from perturbation import perturbations
|
|||||||
s = H_apply("mp2")
|
s = H_apply("mp2")
|
||||||
s.set_perturbation("Moller_plesset")
|
s.set_perturbation("Moller_plesset")
|
||||||
print s
|
print s
|
||||||
|
|
||||||
|
s = H_apply("mp2_selection")
|
||||||
|
s.set_selection_pt2("Moller_plesset")
|
||||||
|
print s
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
|
@ -40,3 +40,49 @@ Needed Modules
|
|||||||
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
||||||
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/src/SingleRefMethod>`_
|
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/src/SingleRefMethod>`_
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `Perturbation <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation>`_
|
||||||
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/plugins/Selectors_full>`_
|
||||||
|
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/plugins/SingleRefMethod>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_mp2
|
||||||
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_mp2_diexc
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_mp2_diexcorg
|
||||||
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_mp2_diexcp
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
h_apply_mp2_monoexc
|
||||||
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
|
particles.
|
||||||
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
|
`mp2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/MP2/mp2.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
31
plugins/MP2/mp2_wf.irp.f
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
program mp2_wf
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Save the MP2 wave function
|
||||||
|
END_DOC
|
||||||
|
integer :: i,k
|
||||||
|
|
||||||
|
|
||||||
|
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:)
|
||||||
|
integer :: N_st, iter
|
||||||
|
N_st = N_states
|
||||||
|
allocate (pt2(N_st), norm_pert(N_st), H_pert_diag(N_st))
|
||||||
|
|
||||||
|
pt2 = 1.d0
|
||||||
|
selection_criterion = 1.e-12
|
||||||
|
selection_criterion_min = 1.e-12
|
||||||
|
TOUCH selection_criterion_min selection_criterion selection_criterion_factor
|
||||||
|
call H_apply_mp2_selection(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
|
psi_det = psi_det_sorted
|
||||||
|
psi_coef = psi_coef_sorted
|
||||||
|
touch N_det psi_det psi_coef
|
||||||
|
print*,'N_det = ',N_det
|
||||||
|
print*,'-----'
|
||||||
|
print *, 'PT2 = ', pt2(1)
|
||||||
|
print *, 'E = ', HF_energy
|
||||||
|
print *, 'E_before +PT2 = ', HF_energy+pt2(1)
|
||||||
|
N_det = min(N_det,N_det_max)
|
||||||
|
call save_wavefunction
|
||||||
|
call ezfio_set_mp2_energy(HF_energy+pt2(1))
|
||||||
|
deallocate(pt2,norm_pert,H_pert_diag)
|
||||||
|
end
|
BIN
plugins/MRCC_CASSD/tree_dependency.png
Normal file
After Width: | Height: | Size: 127 KiB |
@ -1,171 +1,3 @@
|
|||||||
===========
|
|
||||||
MRCC Module
|
|
||||||
===========
|
|
||||||
|
|
||||||
Needed Modules
|
|
||||||
==============
|
|
||||||
|
|
||||||
.. Do not edit this section. It was auto-generated from the
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
.. image:: tree_dependency.png
|
|
||||||
|
|
||||||
* `Perturbation <http://github.com/LCPQ/quantum_package/tree/master/src/Perturbation>`_
|
|
||||||
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
|
||||||
* `Generators_full <http://github.com/LCPQ/quantum_package/tree/master/src/Generators_full>`_
|
|
||||||
* `Psiref_Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Psiref_Utils>`_
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
=============
|
|
||||||
|
|
||||||
.. Do not edit this section. It was auto-generated from the
|
|
||||||
.. by the `update_README.py` script.
|
|
||||||
|
|
||||||
`ci_eigenvectors_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L166>`_
|
|
||||||
Eigenvectors/values of the CI matrix
|
|
||||||
|
|
||||||
|
|
||||||
`ci_eigenvectors_s2_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L167>`_
|
|
||||||
Eigenvectors/values of the CI matrix
|
|
||||||
|
|
||||||
|
|
||||||
`ci_electronic_energy_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L165>`_
|
|
||||||
Eigenvectors/values of the CI matrix
|
|
||||||
|
|
||||||
|
|
||||||
`ci_energy_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L232>`_
|
|
||||||
N_states lowest eigenvalues of the dressed CI matrix
|
|
||||||
|
|
||||||
|
|
||||||
`davidson_diag_hjj_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/davidson.irp.f#L56>`_
|
|
||||||
Davidson diagonalization with specific diagonal elements of the H matrix
|
|
||||||
.br
|
|
||||||
H_jj : specific diagonal H matrix elements to diagonalize de Davidson
|
|
||||||
.br
|
|
||||||
dets_in : bitmasks corresponding to determinants
|
|
||||||
.br
|
|
||||||
u_in : guess coefficients on the various states. Overwritten
|
|
||||||
on exit
|
|
||||||
.br
|
|
||||||
dim_in : leftmost dimension of u_in
|
|
||||||
.br
|
|
||||||
sze : Number of determinants
|
|
||||||
.br
|
|
||||||
N_st : Number of eigenstates
|
|
||||||
.br
|
|
||||||
iunit : Unit for the I/O
|
|
||||||
.br
|
|
||||||
Initial guess vectors are not necessarily orthonormal
|
|
||||||
|
|
||||||
|
|
||||||
`davidson_diag_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/davidson.irp.f#L1>`_
|
|
||||||
Davidson diagonalization.
|
|
||||||
.br
|
|
||||||
dets_in : bitmasks corresponding to determinants
|
|
||||||
.br
|
|
||||||
u_in : guess coefficients on the various states. Overwritten
|
|
||||||
on exit
|
|
||||||
.br
|
|
||||||
dim_in : leftmost dimension of u_in
|
|
||||||
.br
|
|
||||||
sze : Number of determinants
|
|
||||||
.br
|
|
||||||
N_st : Number of eigenstates
|
|
||||||
.br
|
|
||||||
iunit : Unit number for the I/O
|
|
||||||
.br
|
|
||||||
Initial guess vectors are not necessarily orthonormal
|
|
||||||
|
|
||||||
|
|
||||||
`delta_ii <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L104>`_
|
|
||||||
Dressing matrix in N_det basis
|
|
||||||
|
|
||||||
|
|
||||||
`delta_ij <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L103>`_
|
|
||||||
Dressing matrix in N_det basis
|
|
||||||
|
|
||||||
|
|
||||||
`diagonalize_ci_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L247>`_
|
|
||||||
Replace the coefficients of the CI states by the coefficients of the
|
|
||||||
eigenstates of the CI matrix
|
|
||||||
|
|
||||||
|
|
||||||
`find_triples_and_quadruples <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_dress.irp.f#L206>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/H_apply.irp.f_shell_27#L422>`_
|
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_diexc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/H_apply.irp.f_shell_27#L1>`_
|
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_monoexc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/H_apply.irp.f_shell_27#L273>`_
|
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
|
||||||
particles.
|
|
||||||
Assume N_int is already provided.
|
|
||||||
|
|
||||||
|
|
||||||
`h_matrix_dressed <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L140>`_
|
|
||||||
Dressed H with Delta_ij
|
|
||||||
|
|
||||||
|
|
||||||
`h_u_0_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/davidson.irp.f#L360>`_
|
|
||||||
Computes v_0 = H|u_0>
|
|
||||||
.br
|
|
||||||
n : number of determinants
|
|
||||||
.br
|
|
||||||
H_jj : array of <j|H|j>
|
|
||||||
|
|
||||||
|
|
||||||
`lambda_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L5>`_
|
|
||||||
cm/<Psi_0|H|D_m> or perturbative 1/Delta_E(m)
|
|
||||||
|
|
||||||
|
|
||||||
`lambda_mrcc_tmp <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L81>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`lambda_pert <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L6>`_
|
|
||||||
cm/<Psi_0|H|D_m> or perturbative 1/Delta_E(m)
|
|
||||||
|
|
||||||
|
|
||||||
`mrcc_dress <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_dress.irp.f#L15>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`mrcc_dress_simple <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_dress.irp.f#L160>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`mrcc_iterations <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_general.irp.f#L7>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`oscillations <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L86>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`pert_determinants <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_utils.irp.f#L1>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`psi_ref_lock <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_dress.irp.f#L3>`_
|
|
||||||
Locks on ref determinants to fill delta_ij
|
|
||||||
|
|
||||||
|
|
||||||
`run_mrcc <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_general.irp.f#L1>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`set_generators_bitmasks_as_holes_and_particles <http://github.com/LCPQ/quantum_package/tree/master/src/MRCC_Utils/mrcc_general.irp.f#L69>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
Needed Modules
|
Needed Modules
|
||||||
==============
|
==============
|
||||||
.. Do not edit this section It was auto-generated
|
.. Do not edit this section It was auto-generated
|
||||||
@ -258,10 +90,6 @@ Documentation
|
|||||||
N_states lowest eigenvalues of the dressed CI matrix
|
N_states lowest eigenvalues of the dressed CI matrix
|
||||||
|
|
||||||
|
|
||||||
`create_minilist <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L17>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`davidson_diag_hjj_mrcc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/davidson.irp.f#L59>`_
|
`davidson_diag_hjj_mrcc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/davidson.irp.f#L59>`_
|
||||||
Davidson diagonalization with specific diagonal elements of the H matrix
|
Davidson diagonalization with specific diagonal elements of the H matrix
|
||||||
.br
|
.br
|
||||||
@ -374,7 +202,7 @@ Documentation
|
|||||||
Find A.C = B
|
Find A.C = B
|
||||||
|
|
||||||
|
|
||||||
`find_triples_and_quadruples <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L271>`_
|
`find_triples_and_quadruples <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L245>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
@ -400,6 +228,22 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`gen_det_idx <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L237>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`gen_det_shortcut <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L235>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`gen_det_sorted <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L234>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`gen_det_version <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L236>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`get_pseudo_inverse <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/LinearAlgebra.irp.f#L95>`_
|
`get_pseudo_inverse <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/LinearAlgebra.irp.f#L95>`_
|
||||||
Find C = A^-1
|
Find C = A^-1
|
||||||
|
|
||||||
@ -435,26 +279,26 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/H_apply.irp.f_shell_27#L553>`_
|
h_apply_mrcc
|
||||||
Calls H_apply on the HF determinant and selects all connected single and double
|
Calls H_apply on the HF determinant and selects all connected single and double
|
||||||
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_diexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/H_apply.irp.f_shell_27#L3>`_
|
h_apply_mrcc_diexc
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_diexcorg <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/H_apply.irp.f_shell_27#L127>`_
|
h_apply_mrcc_diexcorg
|
||||||
Generate all double excitations of key_in using the bit masks of holes and
|
Generate all double excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_diexcp <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/H_apply.irp.f_shell_27#L100>`_
|
h_apply_mrcc_diexcp
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`h_apply_mrcc_monoexc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/H_apply.irp.f_shell_27#L399>`_
|
h_apply_mrcc_monoexc
|
||||||
Generate all single excitations of key_in using the bit masks of holes and
|
Generate all single excitations of key_in using the bit masks of holes and
|
||||||
particles.
|
particles.
|
||||||
Assume N_int is already provided.
|
Assume N_int is already provided.
|
||||||
@ -464,15 +308,7 @@ Documentation
|
|||||||
Dressed H with Delta_ij
|
Dressed H with Delta_ij
|
||||||
|
|
||||||
|
|
||||||
`h_u_0_mrcc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/davidson.irp.f#L371>`_
|
`h_u_0_mrcc <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/davidson.irp.f#L367>`_
|
||||||
Computes v_0 = H|u_0>
|
|
||||||
.br
|
|
||||||
n : number of determinants
|
|
||||||
.br
|
|
||||||
H_jj : array of <j|H|j>
|
|
||||||
|
|
||||||
|
|
||||||
`h_u_0_mrcc_org <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/davidson.irp.f#L475>`_
|
|
||||||
Computes v_0 = H|u_0>
|
Computes v_0 = H|u_0>
|
||||||
.br
|
.br
|
||||||
n : number of determinants
|
n : number of determinants
|
||||||
@ -781,10 +617,6 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`mrcc_dress_simple <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_dress.irp.f#L225>`_
|
|
||||||
Undocumented
|
|
||||||
|
|
||||||
|
|
||||||
`mrcc_iterations <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_general.irp.f#L7>`_
|
`mrcc_iterations <http://github.com/LCPQ/quantum_package/tree/master/plugins/MRCC_Utils/mrcc_general.irp.f#L7>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
@ -105,10 +105,7 @@ subroutine davidson_diag_hjj_mrcc(dets_in,u_in,H_jj,energies,dim_in,sze,N_st,Nin
|
|||||||
double precision :: to_print(2,N_st)
|
double precision :: to_print(2,N_st)
|
||||||
double precision :: cpu, wall
|
double precision :: cpu, wall
|
||||||
|
|
||||||
integer(bit_kind) :: dets_in_sorted(Nint,2,sze)
|
!PROVIDE det_connections
|
||||||
integer :: idx(sze), shortcut(0:sze+1),sh,ii,tmp
|
|
||||||
|
|
||||||
PROVIDE det_connections
|
|
||||||
|
|
||||||
call write_time(iunit)
|
call write_time(iunit)
|
||||||
call wall_time(wall)
|
call wall_time(wall)
|
||||||
@ -154,8 +151,6 @@ subroutine davidson_diag_hjj_mrcc(dets_in,u_in,H_jj,energies,dim_in,sze,N_st,Nin
|
|||||||
! ==============
|
! ==============
|
||||||
|
|
||||||
|
|
||||||
dets_in_sorted(:,:,:) = dets_in(:,:,:)
|
|
||||||
call sort_dets_ab(dets_in_sorted, idx, shortcut, sze, Nint)
|
|
||||||
|
|
||||||
k_pairs=0
|
k_pairs=0
|
||||||
do l=1,N_st
|
do l=1,N_st
|
||||||
@ -215,8 +210,7 @@ subroutine davidson_diag_hjj_mrcc(dets_in,u_in,H_jj,energies,dim_in,sze,N_st,Nin
|
|||||||
! ----------------------
|
! ----------------------
|
||||||
|
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
call H_u_0_mrcc(W(1,k,iter),U(1,k,iter),H_jj,sze,dets_in_sorted,shortcut,idx,Nint,istate)
|
call H_u_0_mrcc(W(1,k,iter),U(1,k,iter),H_jj,sze,dets_in,Nint,istate)
|
||||||
!call H_u_0_mrcc_org(W(1,k,iter),U(1,k,iter),H_jj,sze,dets_in,Nint,istate)
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! Compute h_kl = <u_k | W_l> = <u_k| H |u_l>
|
! Compute h_kl = <u_k | W_l> = <u_k| H |u_l>
|
||||||
@ -368,7 +362,9 @@ subroutine davidson_diag_hjj_mrcc(dets_in,u_in,H_jj,energies,dim_in,sze,N_st,Nin
|
|||||||
abort_here = abort_all
|
abort_here = abort_all
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint,istate)
|
|
||||||
|
|
||||||
|
subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,Nint,istate)
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
@ -389,8 +385,11 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint,istate)
|
|||||||
integer :: i,j,k,l, jj,ii
|
integer :: i,j,k,l, jj,ii
|
||||||
integer :: i0, j0
|
integer :: i0, j0
|
||||||
|
|
||||||
integer,intent(in) :: shortcut(0:n+1), sort_idx(n)
|
integer :: shortcut(0:n+1), sort_idx(n)
|
||||||
integer :: tmp, warp(2,0:n+1), sh, ni
|
integer(bit_kind) :: sorted(Nint,n), version(Nint,n)
|
||||||
|
|
||||||
|
|
||||||
|
integer :: sh, sh2, ni, exa, ext, org_i, org_j, endi, pass
|
||||||
!
|
!
|
||||||
|
|
||||||
ASSERT (Nint > 0)
|
ASSERT (Nint > 0)
|
||||||
@ -401,8 +400,10 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint,istate)
|
|||||||
|
|
||||||
|
|
||||||
!$OMP PARALLEL DEFAULT(NONE) &
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
!$OMP PRIVATE(i,hij,j,k,idx,jj,vt,ii,warp,tmp,sh) &
|
!$OMP PRIVATE(i,hij,j,k,idx,jj,vt,ii,sh, sh2, ni, exa, ext, org_i, org_j, endi, pass) &
|
||||||
!$OMP SHARED(n_det_ref,n_det_non_ref,idx_ref,idx_non_ref,n,H_jj,u_0,keys_tmp,Nint,v_0,istate,delta_ij,shortcut,sort_idx)
|
!$OMP SHARED(n_det_ref,n_det_non_ref,idx_ref,idx_non_ref,n,H_jj,u_0,keys_tmp,Nint,v_0,istate,delta_ij,sorted,shortcut,sort_idx,version)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(static)
|
!$OMP DO SCHEDULE(static)
|
||||||
do i=1,n
|
do i=1,n
|
||||||
@ -412,43 +413,73 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint,istate)
|
|||||||
|
|
||||||
allocate(idx(0:n), vt(n))
|
allocate(idx(0:n), vt(n))
|
||||||
Vt = 0.d0
|
Vt = 0.d0
|
||||||
|
|
||||||
|
|
||||||
|
!$OMP SINGLE
|
||||||
|
call sort_dets_ab_v(keys_tmp, sorted, sort_idx, shortcut, version, n, Nint)
|
||||||
|
!$OMP END SINGLE
|
||||||
|
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(dynamic)
|
!$OMP DO SCHEDULE(dynamic)
|
||||||
do sh=1,shortcut(0)
|
do sh=1,shortcut(0)
|
||||||
warp(1,0) = 0
|
do sh2=1,sh
|
||||||
do ii=1,sh!shortcut(0)
|
exa = 0
|
||||||
tmp = 0
|
|
||||||
do ni=1,Nint
|
do ni=1,Nint
|
||||||
tmp = popcnt(xor(keys_tmp(ni,1, shortcut(ii)), keys_tmp(ni,1,shortcut(sh))))
|
exa += popcnt(xor(version(ni,sh), version(ni,sh2)))
|
||||||
end do
|
end do
|
||||||
if(tmp <= 4) then
|
if(exa > 2) then
|
||||||
tmp = warp(1,0) + 1
|
cycle
|
||||||
warp(1,0) = tmp
|
end if
|
||||||
warp(1,tmp) = shortcut(ii)
|
|
||||||
warp(2,tmp) = shortcut(ii+1)-1
|
do i=shortcut(sh),shortcut(sh+1)-1
|
||||||
|
if(sh==sh2) then
|
||||||
|
endi = i-1
|
||||||
|
else
|
||||||
|
endi = shortcut(sh2+1)-1
|
||||||
|
end if
|
||||||
|
|
||||||
|
do j=shortcut(sh2),endi
|
||||||
|
ext = exa
|
||||||
|
do ni=1,Nint
|
||||||
|
ext += popcnt(xor(sorted(ni,i), sorted(ni,j)))
|
||||||
|
end do
|
||||||
|
if(ext <= 4) then
|
||||||
|
org_i = sort_idx(i)
|
||||||
|
org_j = sort_idx(j)
|
||||||
|
|
||||||
|
call i_H_j(keys_tmp(1,1,org_j),keys_tmp(1,1,org_i),Nint,hij)
|
||||||
|
vt (org_i) = vt (org_i) + hij*u_0(org_j)
|
||||||
|
vt (org_j) = vt (org_j) + hij*u_0(org_i)
|
||||||
end if
|
end if
|
||||||
end do
|
end do
|
||||||
|
|
||||||
do ii=shortcut(sh),shortcut(sh+1)-1
|
|
||||||
idx(0) = ii
|
|
||||||
|
|
||||||
|
|
||||||
!call filter_connected_davidson_mwen(keys_tmp,shortcut,keys_tmp(1,1,ii),Nint,ii-1,idx)
|
|
||||||
call filter_connected_davidson_warp(keys_tmp,warp,keys_tmp(1,1,ii),Nint,ii-1,idx)
|
|
||||||
i = sort_idx(ii)
|
|
||||||
|
|
||||||
do jj=1,idx(0)
|
|
||||||
j = sort_idx(idx(jj))
|
|
||||||
!j = idx(jj)
|
|
||||||
if ( (dabs(u_0(j)) > 1.d-7).or.((dabs(u_0(i)) > 1.d-7)) ) then
|
|
||||||
call i_H_j(keys_tmp(1,1,idx(jj)),keys_tmp(1,1,ii),Nint,hij)
|
|
||||||
vt (i) = vt (i) + hij*u_0(j)
|
|
||||||
vt (j) = vt (j) + hij*u_0(i)
|
|
||||||
endif
|
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
enddo
|
enddo
|
||||||
!$OMP END DO
|
!$OMP END DO
|
||||||
|
|
||||||
|
!$OMP SINGLE
|
||||||
|
call sort_dets_ba_v(keys_tmp, sorted, sort_idx, shortcut, version, n, Nint)
|
||||||
|
!$OMP END SINGLE
|
||||||
|
|
||||||
|
!$OMP DO SCHEDULE(dynamic)
|
||||||
|
do sh=1,shortcut(0)
|
||||||
|
do i=shortcut(sh),shortcut(sh+1)-1
|
||||||
|
do j=shortcut(sh),i-1
|
||||||
|
ext = 0
|
||||||
|
do ni=1,Nint
|
||||||
|
ext += popcnt(xor(sorted(ni,i), sorted(ni,j)))
|
||||||
|
end do
|
||||||
|
if(ext == 4) then
|
||||||
|
org_i = sort_idx(i)
|
||||||
|
org_j = sort_idx(j)
|
||||||
|
call i_H_j(keys_tmp(1,1,org_j),keys_tmp(1,1,org_i),Nint,hij)
|
||||||
|
vt (org_i) = vt (org_i) + hij*u_0(org_j)
|
||||||
|
vt (org_j) = vt (org_j) + hij*u_0(org_i)
|
||||||
|
end if
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(guided)
|
!$OMP DO SCHEDULE(guided)
|
||||||
@ -470,80 +501,3 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint,istate)
|
|||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
subroutine H_u_0_mrcc_org(v_0,u_0,H_jj,n,keys_tmp,Nint,istate)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
BEGIN_DOC
|
|
||||||
! Computes v_0 = H|u_0>
|
|
||||||
!
|
|
||||||
! n : number of determinants
|
|
||||||
!
|
|
||||||
! H_jj : array of <j|H|j>
|
|
||||||
END_DOC
|
|
||||||
integer, intent(in) :: n,Nint,istate
|
|
||||||
double precision, intent(out) :: v_0(n)
|
|
||||||
double precision, intent(in) :: u_0(n)
|
|
||||||
double precision, intent(in) :: H_jj(n)
|
|
||||||
integer(bit_kind),intent(in) :: keys_tmp(Nint,2,n)
|
|
||||||
integer, allocatable :: idx(:)
|
|
||||||
double precision :: hij
|
|
||||||
double precision, allocatable :: vt(:)
|
|
||||||
integer :: i,j,k,l, jj,ii
|
|
||||||
integer :: i0, j0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (n>0)
|
|
||||||
PROVIDE ref_bitmask_energy delta_ij
|
|
||||||
integer, parameter :: block_size = 157
|
|
||||||
!$OMP PARALLEL DEFAULT(NONE) &
|
|
||||||
!$OMP PRIVATE(i,hij,j,k,idx,jj,ii,vt) &
|
|
||||||
!$OMP SHARED(n_det_ref,n_det_non_ref,idx_ref,idx_non_ref,n,H_jj,u_0,keys_tmp,Nint,v_0,istate,delta_ij)
|
|
||||||
!$OMP DO SCHEDULE(static)
|
|
||||||
do i=1,n
|
|
||||||
v_0(i) = H_jj(i) * u_0(i)
|
|
||||||
enddo
|
|
||||||
!$OMP END DO
|
|
||||||
allocate(idx(0:n), vt(n))
|
|
||||||
Vt = 0.d0
|
|
||||||
!$OMP DO SCHEDULE(guided)
|
|
||||||
do i=1,n
|
|
||||||
idx(0) = i
|
|
||||||
call filter_connected_davidson(keys_tmp,keys_tmp(1,1,i),Nint,i-1,idx)
|
|
||||||
do jj=1,idx(0)
|
|
||||||
j = idx(jj)
|
|
||||||
! if ( (dabs(u_0(j)) > 1.d-7).or.((dabs(u_0(i)) > 1.d-7)) ) then
|
|
||||||
call i_H_j(keys_tmp(1,1,j),keys_tmp(1,1,i),Nint,hij)
|
|
||||||
hij = hij
|
|
||||||
vt (i) = vt (i) + hij*u_0(j)
|
|
||||||
vt (j) = vt (j) + hij*u_0(i)
|
|
||||||
! endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
!$OMP END DO
|
|
||||||
|
|
||||||
!$OMP DO SCHEDULE(guided)
|
|
||||||
do ii=1,n_det_ref
|
|
||||||
i = idx_ref(ii)
|
|
||||||
do jj = 1, n_det_non_ref
|
|
||||||
j = idx_non_ref(jj)
|
|
||||||
vt (i) = vt (i) + delta_ij(ii,jj,istate)*u_0(j)
|
|
||||||
vt (j) = vt (j) + delta_ij(ii,jj,istate)*u_0(i)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
!$OMP END DO
|
|
||||||
!$OMP CRITICAL
|
|
||||||
do i=1,n
|
|
||||||
v_0(i) = v_0(i) + vt(i)
|
|
||||||
enddo
|
|
||||||
!$OMP END CRITICAL
|
|
||||||
deallocate(idx,vt)
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
end
|
|
||||||
|
|
||||||
|
@ -14,54 +14,6 @@ BEGIN_PROVIDER [ integer(omp_lock_kind), psi_ref_lock, (psi_det_size) ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
subroutine create_minilist(key_mask, fullList, miniList, idx_miniList, N_fullList, N_miniList, Nint)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
integer(bit_kind), intent(in) :: fullList(Nint, 2, N_fullList)
|
|
||||||
integer, intent(in) :: N_fullList
|
|
||||||
integer(bit_kind),intent(out) :: miniList(Nint, 2, N_fullList)
|
|
||||||
integer,intent(out) :: idx_miniList(N_fullList), N_miniList
|
|
||||||
integer, intent(in) :: Nint
|
|
||||||
integer(bit_kind) :: key_mask(Nint, 2)
|
|
||||||
integer :: ni, i, n_a, n_b, e_a, e_b
|
|
||||||
|
|
||||||
|
|
||||||
n_a = 0
|
|
||||||
n_b = 0
|
|
||||||
do ni=1,nint
|
|
||||||
n_a = n_a + popcnt(key_mask(ni,1))
|
|
||||||
n_b = n_b + popcnt(key_mask(ni,2))
|
|
||||||
end do
|
|
||||||
|
|
||||||
if(n_a == 0) then
|
|
||||||
N_miniList = N_fullList
|
|
||||||
miniList(:,:,:) = fullList(:,:,:)
|
|
||||||
do i=1,N_fullList
|
|
||||||
idx_miniList(i) = i
|
|
||||||
end do
|
|
||||||
return
|
|
||||||
end if
|
|
||||||
|
|
||||||
N_miniList = 0
|
|
||||||
|
|
||||||
do i=1,N_fullList
|
|
||||||
e_a = n_a
|
|
||||||
e_b = n_b
|
|
||||||
do ni=1,nint
|
|
||||||
e_a -= popcnt(iand(fullList(ni, 1, i), key_mask(ni, 1)))
|
|
||||||
e_b -= popcnt(iand(fullList(ni, 2, i), key_mask(ni, 2)))
|
|
||||||
end do
|
|
||||||
|
|
||||||
if(e_a + e_b <= 2) then
|
|
||||||
N_miniList = N_miniList + 1
|
|
||||||
miniList(:,:,N_miniList) = fullList(:,:,i)
|
|
||||||
idx_miniList(N_miniList) = i
|
|
||||||
end if
|
|
||||||
end do
|
|
||||||
end subroutine
|
|
||||||
|
|
||||||
|
|
||||||
subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n_selected,det_buffer,Nint,iproc,key_mask)
|
subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n_selected,det_buffer,Nint,iproc,key_mask)
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
@ -75,11 +27,10 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n
|
|||||||
integer :: i,j,k,l
|
integer :: i,j,k,l
|
||||||
integer :: degree_alpha(psi_det_size)
|
integer :: degree_alpha(psi_det_size)
|
||||||
integer :: idx_alpha(0:psi_det_size)
|
integer :: idx_alpha(0:psi_det_size)
|
||||||
logical :: good
|
logical :: good, fullMatch
|
||||||
|
|
||||||
integer(bit_kind) :: tq(Nint,2,n_selected)
|
integer(bit_kind) :: tq(Nint,2,n_selected)
|
||||||
integer :: N_tq, c_ref ,degree
|
integer :: N_tq, c_ref ,degree
|
||||||
integer :: connected_to_ref
|
|
||||||
|
|
||||||
double precision :: hIk, hla, hIl, dIk(N_states), dka(N_states), dIa(N_states)
|
double precision :: hIk, hla, hIl, dIk(N_states), dka(N_states), dIa(N_states)
|
||||||
double precision, allocatable :: dIa_hla(:,:)
|
double precision, allocatable :: dIa_hla(:,:)
|
||||||
@ -91,11 +42,24 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n
|
|||||||
integer :: iint, ipos
|
integer :: iint, ipos
|
||||||
integer :: i_state, k_sd, l_sd, i_I, i_alpha
|
integer :: i_state, k_sd, l_sd, i_I, i_alpha
|
||||||
|
|
||||||
integer(bit_kind) :: miniList(Nint, 2, N_det_non_ref), key_mask(Nint, 2)
|
integer(bit_kind),allocatable :: miniList(:,:,:)
|
||||||
integer :: idx_miniList(N_det_non_ref), N_miniList
|
integer(bit_kind),intent(in) :: key_mask(Nint, 2)
|
||||||
|
integer,allocatable :: idx_miniList(:)
|
||||||
|
integer :: N_miniList, ni, leng
|
||||||
|
|
||||||
|
|
||||||
call find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq)
|
leng = max(N_det_generators, N_det_non_ref)
|
||||||
|
allocate(miniList(Nint, 2, leng), idx_miniList(leng))
|
||||||
|
|
||||||
|
!create_minilist_find_previous(key_mask, fullList, miniList, N_fullList, N_miniList, fullMatch, Nint)
|
||||||
|
call create_minilist_find_previous(key_mask, psi_det_generators, miniList, i_generator-1, N_miniList, fullMatch, Nint)
|
||||||
|
|
||||||
|
if(fullMatch) then
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
call find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_minilist)
|
||||||
|
|
||||||
allocate (dIa_hla(N_states,Ndet_non_ref))
|
allocate (dIa_hla(N_states,Ndet_non_ref))
|
||||||
|
|
||||||
@ -214,61 +178,24 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
deallocate (dIa_hla)
|
deallocate (dIa_hla)
|
||||||
|
deallocate(miniList, idx_miniList)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer(bit_kind), gen_det_sorted, (N_int,2,N_det_generators,2) ]
|
||||||
|
&BEGIN_PROVIDER [ integer, gen_det_shortcut, (0:N_det_generators,2) ]
|
||||||
|
&BEGIN_PROVIDER [ integer, gen_det_version, (N_int, N_det_generators,2) ]
|
||||||
|
&BEGIN_PROVIDER [ integer, gen_det_idx, (N_det_generators,2) ]
|
||||||
|
gen_det_sorted(:,:,:,1) = psi_det_generators(:,:,:N_det_generators)
|
||||||
|
gen_det_sorted(:,:,:,2) = psi_det_generators(:,:,:N_det_generators)
|
||||||
|
call sort_dets_ab_v(gen_det_sorted(:,:,:,1), gen_det_idx(:,1), gen_det_shortcut(0:,1), gen_det_version(:,:,1), N_det_generators, N_int)
|
||||||
|
call sort_dets_ba_v(gen_det_sorted(:,:,:,2), gen_det_idx(:,2), gen_det_shortcut(0:,2), gen_det_version(:,:,2), N_det_generators, N_int)
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_miniList)
|
||||||
|
|
||||||
|
|
||||||
subroutine mrcc_dress_simple(delta_ij_non_ref_,Ndet_non_ref,i_generator,n_selected,det_buffer,Nint,iproc)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
integer, intent(in) :: i_generator,n_selected, Nint, iproc
|
|
||||||
integer, intent(in) :: Ndet_non_ref
|
|
||||||
double precision, intent(inout) :: delta_ij_non_ref_(Ndet_non_ref,Ndet_non_ref,*)
|
|
||||||
|
|
||||||
integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected)
|
|
||||||
integer :: i,j,k,m
|
|
||||||
integer :: new_size
|
|
||||||
integer :: degree(psi_det_size)
|
|
||||||
integer :: idx(0:psi_det_size)
|
|
||||||
logical :: good
|
|
||||||
|
|
||||||
integer(bit_kind) :: tq(Nint,2,n_selected)
|
|
||||||
integer :: N_tq, c_ref
|
|
||||||
integer :: connected_to_ref
|
|
||||||
|
|
||||||
call find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq)
|
|
||||||
|
|
||||||
! Compute <k|H|a><a|H|j> / (E0 - Haa)
|
|
||||||
double precision :: hka, haa
|
|
||||||
double precision :: haj
|
|
||||||
double precision :: f(N_states)
|
|
||||||
|
|
||||||
do i=1,N_tq
|
|
||||||
call get_excitation_degree_vector(psi_non_ref,tq(1,1,i),degree,Nint,Ndet_non_ref,idx)
|
|
||||||
call i_h_j(tq(1,1,i),tq(1,1,i),Nint,haa)
|
|
||||||
do m=1,N_states
|
|
||||||
f(m) = 1.d0/(ci_electronic_energy(m)-haa)
|
|
||||||
enddo
|
|
||||||
do k=1,idx(0)
|
|
||||||
call i_h_j(tq(1,1,i),psi_non_ref(1,1,idx(k)),Nint,hka)
|
|
||||||
do j=k,idx(0)
|
|
||||||
call i_h_j(tq(1,1,i),psi_non_ref(1,1,idx(j)),Nint,haj)
|
|
||||||
do m=1,N_states
|
|
||||||
delta_ij_non_ref_(idx(k), idx(j),m) += haj*hka* f(m)
|
|
||||||
delta_ij_non_ref_(idx(j), idx(k),m) += haj*hka* f(m)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq)
|
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
@ -283,16 +210,22 @@ subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq
|
|||||||
|
|
||||||
integer(bit_kind), intent(out) :: tq(Nint,2,n_selected)
|
integer(bit_kind), intent(out) :: tq(Nint,2,n_selected)
|
||||||
integer, intent(out) :: N_tq
|
integer, intent(out) :: N_tq
|
||||||
integer :: c_ref
|
|
||||||
integer :: connected_to_ref
|
|
||||||
|
integer :: nt,ni
|
||||||
|
logical, external :: is_connected_to
|
||||||
|
|
||||||
|
|
||||||
|
integer(bit_kind),intent(in) :: miniList(Nint,2,N_det_generators)
|
||||||
|
integer,intent(in) :: N_miniList
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
N_tq = 0
|
N_tq = 0
|
||||||
do i=1,N_selected
|
|
||||||
c_ref = connected_to_ref(det_buffer(1,1,i),psi_det_generators,Nint, &
|
|
||||||
i_generator,N_det_generators)
|
|
||||||
|
|
||||||
if (c_ref /= 0) then
|
|
||||||
|
i_loop : do i=1,N_selected
|
||||||
|
if(is_connected_to(det_buffer(1,1,i), miniList, Nint, N_miniList)) then
|
||||||
cycle
|
cycle
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -316,8 +249,7 @@ subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq
|
|||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo i_loop
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 106 KiB |
@ -38,3 +38,39 @@ Needed Modules
|
|||||||
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
||||||
* `Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Utils>`_
|
* `Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Utils>`_
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
||||||
|
* `Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Utils>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
`print_mos <http://github.com/LCPQ/quantum_package/tree/master/plugins/Molden/print_mo.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`write_ao_basis <http://github.com/LCPQ/quantum_package/tree/master/plugins/Molden/print_mo.irp.f#L63>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`write_geometry <http://github.com/LCPQ/quantum_package/tree/master/plugins/Molden/print_mo.irp.f#L45>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`write_intro_gamess <http://github.com/LCPQ/quantum_package/tree/master/plugins/Molden/print_mo.irp.f#L26>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
`write_mo_basis <http://github.com/LCPQ/quantum_package/tree/master/plugins/Molden/print_mo.irp.f#L112>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
subroutine pt2_moller_plesset(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,n_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(n_st),e_2_pert(n_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution
|
|
||||||
!
|
|
||||||
! for the various n_st states.
|
|
||||||
!
|
|
||||||
! c_pert(i) = <psi(i)|H|det_pert>/(difference of orbital energies)
|
|
||||||
!
|
|
||||||
! e_2_pert(i) = <psi(i)|H|det_pert>^2/(difference of orbital energies)
|
|
||||||
!
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j
|
|
||||||
double precision :: diag_H_mat_elem
|
|
||||||
integer :: exc(0:2,2,2)
|
|
||||||
integer :: degree
|
|
||||||
double precision :: phase,delta_e,h
|
|
||||||
integer :: h1,h2,p1,p2,s1,s2
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
call get_excitation(ref_bitmask,det_pert,exc,degree,phase,Nint)
|
|
||||||
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
|
||||||
delta_e = Fock_matrix_diag_mo(h1) + Fock_matrix_diag_mo(h2) - &
|
|
||||||
(Fock_matrix_diag_mo(p1) + Fock_matrix_diag_mo(p2))
|
|
||||||
delta_e = 1.d0/delta_e
|
|
||||||
|
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det,psi_selectors_size,n_st,i_H_psi_array)
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
|
||||||
do i =1,n_st
|
|
||||||
H_pert_diag(i) = h
|
|
||||||
c_pert(i) = i_H_psi_array(i) *delta_e
|
|
||||||
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end
|
|
@ -107,92 +107,92 @@ Documentation
|
|||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_delta_rho_one_point <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L161>`_
|
perturb_buffer_by_mono_delta_rho_one_point
|
||||||
Applly pertubration ``delta_rho_one_point`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``delta_rho_one_point`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_dipole_moment_z <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L266>`_
|
perturb_buffer_by_mono_dipole_moment_z
|
||||||
Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_epstein_nesbet <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L371>`_
|
perturb_buffer_by_mono_epstein_nesbet
|
||||||
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_epstein_nesbet_2x2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L476>`_
|
perturb_buffer_by_mono_epstein_nesbet_2x2
|
||||||
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_epstein_nesbet_sc2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L791>`_
|
perturb_buffer_by_mono_epstein_nesbet_sc2
|
||||||
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L686>`_
|
perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected
|
||||||
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_epstein_nesbet_sc2_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L581>`_
|
perturb_buffer_by_mono_epstein_nesbet_sc2_projected
|
||||||
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_h_core <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L896>`_
|
perturb_buffer_by_mono_h_core
|
||||||
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_by_mono_moller_plesset <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L56>`_
|
perturb_buffer_by_mono_moller_plesset
|
||||||
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_delta_rho_one_point <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L110>`_
|
perturb_buffer_delta_rho_one_point
|
||||||
Applly pertubration ``delta_rho_one_point`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``delta_rho_one_point`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_dipole_moment_z <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L215>`_
|
perturb_buffer_dipole_moment_z
|
||||||
Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_epstein_nesbet <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L320>`_
|
perturb_buffer_epstein_nesbet
|
||||||
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_epstein_nesbet_2x2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L425>`_
|
perturb_buffer_epstein_nesbet_2x2
|
||||||
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_epstein_nesbet_sc2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L740>`_
|
perturb_buffer_epstein_nesbet_sc2
|
||||||
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_epstein_nesbet_sc2_no_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L635>`_
|
perturb_buffer_epstein_nesbet_sc2_no_projected
|
||||||
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_epstein_nesbet_sc2_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L530>`_
|
perturb_buffer_epstein_nesbet_sc2_projected
|
||||||
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_h_core <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L845>`_
|
perturb_buffer_h_core
|
||||||
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``h_core`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
|
|
||||||
`perturb_buffer_moller_plesset <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/perturbation.irp.f_shell_13#L5>`_
|
perturb_buffer_moller_plesset
|
||||||
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||||
routine.
|
routine.
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ Documentation
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
||||||
`pt2_epstein_nesbet <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/epstein_nesbet.irp.f#L1>`_
|
`pt2_epstein_nesbet <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L3>`_
|
||||||
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various N_st states.
|
for the various N_st states.
|
||||||
@ -250,7 +250,7 @@ Documentation
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
||||||
`pt2_epstein_nesbet_2x2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/epstein_nesbet.irp.f#L45>`_
|
`pt2_epstein_nesbet_2x2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L59>`_
|
||||||
compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
|
compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various N_st states.
|
for the various N_st states.
|
||||||
@ -261,7 +261,7 @@ Documentation
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
||||||
`pt2_epstein_nesbet_sc2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pert_sc2.irp.f#L186>`_
|
`pt2_epstein_nesbet_sc2 <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L353>`_
|
||||||
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various N_st states, but with the CISD_SC2 energies and coefficients
|
for the various N_st states, but with the CISD_SC2 energies and coefficients
|
||||||
@ -272,7 +272,7 @@ Documentation
|
|||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
||||||
`pt2_epstein_nesbet_sc2_no_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pert_sc2.irp.f#L87>`_
|
`pt2_epstein_nesbet_sc2_no_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L275>`_
|
||||||
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various N_st states,
|
for the various N_st states,
|
||||||
@ -296,7 +296,7 @@ Documentation
|
|||||||
H_pert_diag = <HF|H|det_pert> c_pert
|
H_pert_diag = <HF|H|det_pert> c_pert
|
||||||
|
|
||||||
|
|
||||||
`pt2_epstein_nesbet_sc2_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pert_sc2.irp.f#L2>`_
|
`pt2_epstein_nesbet_sc2_projected <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L181>`_
|
||||||
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various N_st states,
|
for the various N_st states,
|
||||||
@ -336,7 +336,7 @@ Documentation
|
|||||||
than pt2_max in absolute value
|
than pt2_max in absolute value
|
||||||
|
|
||||||
|
|
||||||
`pt2_moller_plesset <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/Moller_plesset.irp.f#L1>`_
|
`pt2_moller_plesset <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pt2_equations.irp.f_template_363#L120>`_
|
||||||
compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution
|
compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution
|
||||||
.br
|
.br
|
||||||
for the various n_st states.
|
for the various n_st states.
|
||||||
@ -352,7 +352,7 @@ Documentation
|
|||||||
provided.
|
provided.
|
||||||
|
|
||||||
|
|
||||||
`repeat_all_e_corr <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pert_sc2.irp.f#L156>`_
|
`repeat_all_e_corr <http://github.com/LCPQ/quantum_package/tree/master/plugins/Perturbation/pert_sc2.irp.f#L1>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pt2_delta_rho_one_point(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st)
|
subroutine pt2_delta_rho_one_point(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st,minilist,idx_minilist,N_minilist)
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
integer, intent(in) :: Nint,ndet,n_st
|
integer, intent(in) :: Nint,ndet,n_st
|
||||||
@ -7,6 +7,10 @@ subroutine pt2_delta_rho_one_point(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,nde
|
|||||||
double precision :: i_O1_psi_array(N_st)
|
double precision :: i_O1_psi_array(N_st)
|
||||||
double precision :: i_H_psi_array(N_st)
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
|
||||||
|
integer, intent(in) :: N_minilist
|
||||||
|
integer, intent(in) :: idx_minilist(0:N_det_selectors)
|
||||||
|
integer(bit_kind), intent(in) :: minilist(Nint,2,N_det_selectors)
|
||||||
|
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! compute the perturbatibe contribution to the Integrated Spin density at z = z_one point of one determinant
|
! compute the perturbatibe contribution to the Integrated Spin density at z = z_one point of one determinant
|
||||||
!
|
!
|
||||||
@ -46,7 +50,8 @@ subroutine pt2_delta_rho_one_point(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,nde
|
|||||||
! endif
|
! endif
|
||||||
call i_O1_psi_alpha_beta(mo_integrated_delta_rho_one_point,det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_O1_psi_array)
|
call i_O1_psi_alpha_beta(mo_integrated_delta_rho_one_point,det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_O1_psi_array)
|
||||||
|
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
h = diag_H_mat_elem(det_pert,Nint)
|
||||||
oii = diag_O1_mat_elem_alpha_beta(mo_integrated_delta_rho_one_point,det_pert,N_int)
|
oii = diag_O1_mat_elem_alpha_beta(mo_integrated_delta_rho_one_point,det_pert,N_int)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pt2_dipole_moment_z(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st)
|
subroutine pt2_dipole_moment_z(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st,minilist,idx_minilist,N_minilist)
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
integer, intent(in) :: Nint,ndet,n_st
|
integer, intent(in) :: Nint,ndet,n_st
|
||||||
@ -7,6 +7,10 @@ subroutine pt2_dipole_moment_z(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_
|
|||||||
double precision :: i_O1_psi_array(N_st)
|
double precision :: i_O1_psi_array(N_st)
|
||||||
double precision :: i_H_psi_array(N_st)
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
|
||||||
|
integer, intent(in) :: N_minilist
|
||||||
|
integer, intent(in) :: idx_minilist(0:N_det_selectors)
|
||||||
|
integer(bit_kind), intent(in) :: minilist(Nint,2,N_det_selectors)
|
||||||
|
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! compute the perturbatibe contribution to the dipole moment of one determinant
|
! compute the perturbatibe contribution to the dipole moment of one determinant
|
||||||
!
|
!
|
||||||
@ -46,7 +50,9 @@ subroutine pt2_dipole_moment_z(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_
|
|||||||
! endif
|
! endif
|
||||||
|
|
||||||
call i_O1_psi(mo_dipole_z,det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_O1_psi_array)
|
call i_O1_psi(mo_dipole_z,det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_O1_psi_array)
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
h = diag_H_mat_elem(det_pert,Nint)
|
||||||
oii = diag_O1_mat_elem(mo_dipole_z,det_pert,N_int)
|
oii = diag_O1_mat_elem(mo_dipole_z,det_pert,N_int)
|
||||||
|
|
||||||
|
@ -1,93 +0,0 @@
|
|||||||
subroutine pt2_epstein_nesbet(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
|
||||||
!
|
|
||||||
! for the various N_st states.
|
|
||||||
!
|
|
||||||
! c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
|
|
||||||
!
|
|
||||||
! e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
|
|
||||||
!
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j
|
|
||||||
double precision :: diag_H_mat_elem, h
|
|
||||||
PROVIDE selection_criterion
|
|
||||||
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
|
||||||
do i =1,N_st
|
|
||||||
if(CI_electronic_energy(i)>h.and.CI_electronic_energy(i).ne.0.d0)then
|
|
||||||
c_pert(i) = -1.d0
|
|
||||||
e_2_pert(i) = selection_criterion*selection_criterion_factor*2.d0
|
|
||||||
else if (dabs(CI_electronic_energy(i) - h) > 1.d-6) then
|
|
||||||
c_pert(i) = i_H_psi_array(i) / (CI_electronic_energy(i) - h)
|
|
||||||
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
|
||||||
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
|
||||||
else
|
|
||||||
c_pert(i) = -1.d0
|
|
||||||
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
|
||||||
H_pert_diag(i) = h
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
subroutine pt2_epstein_nesbet_2x2(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
|
|
||||||
!
|
|
||||||
! for the various N_st states.
|
|
||||||
!
|
|
||||||
! e_2_pert(i) = 0.5 * (( <det_pert|H|det_pert> - E(i) ) - sqrt( ( <det_pert|H|det_pert> - E(i)) ^2 + 4 <psi(i)|H|det_pert>^2 )
|
|
||||||
!
|
|
||||||
! c_pert(i) = e_2_pert(i)/ <psi(i)|H|det_pert>
|
|
||||||
!
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j
|
|
||||||
double precision :: diag_H_mat_elem,delta_e, h
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
PROVIDE CI_electronic_energy
|
|
||||||
|
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
|
||||||
do i =1,N_st
|
|
||||||
if (i_H_psi_array(i) /= 0.d0) then
|
|
||||||
delta_e = h - CI_electronic_energy(i)
|
|
||||||
if (delta_e > 0.d0) then
|
|
||||||
e_2_pert(i) = 0.5d0 * (delta_e - dsqrt(delta_e * delta_e + 4.d0 * i_H_psi_array(i) * i_H_psi_array(i)))
|
|
||||||
else
|
|
||||||
e_2_pert(i) = 0.5d0 * (delta_e + dsqrt(delta_e * delta_e + 4.d0 * i_H_psi_array(i) * i_H_psi_array(i)))
|
|
||||||
endif
|
|
||||||
if (dabs(i_H_psi_array(i)) > 1.d-6) then
|
|
||||||
c_pert(i) = e_2_pert(i)/i_H_psi_array(i)
|
|
||||||
else
|
|
||||||
c_pert(i) = 0.d0
|
|
||||||
endif
|
|
||||||
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
|
||||||
else
|
|
||||||
e_2_pert(i) = 0.d0
|
|
||||||
c_pert(i) = 0.d0
|
|
||||||
H_pert_diag(i) = 0.d0
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end
|
|
@ -1,158 +1,3 @@
|
|||||||
|
|
||||||
subroutine pt2_epstein_nesbet_SC2_projected(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
integer :: idx_repeat(0:ndet)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
|
||||||
!
|
|
||||||
! for the various N_st states,
|
|
||||||
!
|
|
||||||
! but with the correction in the denominator
|
|
||||||
!
|
|
||||||
! comming from the interaction of that determinant with all the others determinants
|
|
||||||
!
|
|
||||||
! that can be repeated by repeating all the double excitations
|
|
||||||
!
|
|
||||||
! : you repeat all the correlation energy already taken into account in CI_electronic_energy(1)
|
|
||||||
!
|
|
||||||
! that could be repeated to this determinant.
|
|
||||||
!
|
|
||||||
! In addition, for the perturbative energetic contribution you have the standard second order
|
|
||||||
!
|
|
||||||
! e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
|
|
||||||
!
|
|
||||||
! and also the purely projected contribution
|
|
||||||
!
|
|
||||||
! H_pert_diag = <HF|H|det_pert> c_pert
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j,degree,l
|
|
||||||
double precision :: diag_H_mat_elem,accu_e_corr,hij,h0j,h,delta_E
|
|
||||||
double precision :: repeat_all_e_corr,accu_e_corr_tmp,e_2_pert_fonda
|
|
||||||
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
|
|
||||||
call i_H_psi_SC2(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array,idx_repeat)
|
|
||||||
accu_e_corr = 0.d0
|
|
||||||
!$IVDEP
|
|
||||||
do i = 1, idx_repeat(0)
|
|
||||||
accu_e_corr = accu_e_corr + E_corr_per_selectors(idx_repeat(i))
|
|
||||||
enddo
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint) + accu_e_corr
|
|
||||||
delta_E = 1.d0/(CI_SC2_electronic_energy(1) - h)
|
|
||||||
|
|
||||||
|
|
||||||
c_pert(1) = i_H_psi_array(1) /(CI_SC2_electronic_energy(1) - h)
|
|
||||||
e_2_pert(1) = i_H_psi_array(1) * c_pert(1)
|
|
||||||
|
|
||||||
do i =2,N_st
|
|
||||||
H_pert_diag(i) = h
|
|
||||||
if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
|
||||||
c_pert(i) = i_H_psi_array(i) / (-dabs(CI_SC2_electronic_energy(i) - h))
|
|
||||||
e_2_pert(i) = (c_pert(i) * i_H_psi_array(i))
|
|
||||||
else
|
|
||||||
c_pert(i) = i_H_psi_array(i)
|
|
||||||
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
degree = popcnt(xor( ref_bitmask(1,1), det_pert(1,1))) + &
|
|
||||||
popcnt(xor( ref_bitmask(1,2), det_pert(1,2)))
|
|
||||||
!DEC$ NOUNROLL
|
|
||||||
do l=2,Nint
|
|
||||||
degree = degree+ popcnt(xor( ref_bitmask(l,1), det_pert(l,1))) + &
|
|
||||||
popcnt(xor( ref_bitmask(l,2), det_pert(l,2)))
|
|
||||||
enddo
|
|
||||||
if(degree==4)then
|
|
||||||
! <psi|delta_H|psi>
|
|
||||||
e_2_pert_fonda = e_2_pert(1)
|
|
||||||
H_pert_diag(1) = e_2_pert(1) * c_pert(1) * c_pert(1)
|
|
||||||
do i = 1, N_st
|
|
||||||
do j = 1, idx_repeat(0)
|
|
||||||
e_2_pert(i) += e_2_pert_fonda * psi_selectors_coef(idx_repeat(j),i) * psi_selectors_coef(idx_repeat(j),i)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
subroutine pt2_epstein_nesbet_SC2_no_projected(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
integer :: idx_repeat(0:ndet)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
|
||||||
!
|
|
||||||
! for the various N_st states,
|
|
||||||
!
|
|
||||||
! but with the correction in the denominator
|
|
||||||
!
|
|
||||||
! comming from the interaction of that determinant with all the others determinants
|
|
||||||
!
|
|
||||||
! that can be repeated by repeating all the double excitations
|
|
||||||
!
|
|
||||||
! : you repeat all the correlation energy already taken into account in CI_electronic_energy(1)
|
|
||||||
!
|
|
||||||
! that could be repeated to this determinant.
|
|
||||||
!
|
|
||||||
! In addition, for the perturbative energetic contribution you have the standard second order
|
|
||||||
!
|
|
||||||
! e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
|
|
||||||
!
|
|
||||||
! and also the purely projected contribution
|
|
||||||
!
|
|
||||||
! H_pert_diag = <HF|H|det_pert> c_pert
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j,degree,l
|
|
||||||
double precision :: diag_H_mat_elem,accu_e_corr,hij,h0j,h,delta_E
|
|
||||||
double precision :: repeat_all_e_corr,accu_e_corr_tmp,e_2_pert_fonda
|
|
||||||
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
|
|
||||||
call i_H_psi_SC2(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array,idx_repeat)
|
|
||||||
accu_e_corr = 0.d0
|
|
||||||
!$IVDEP
|
|
||||||
do i = 1, idx_repeat(0)
|
|
||||||
accu_e_corr = accu_e_corr + E_corr_per_selectors(idx_repeat(i))
|
|
||||||
enddo
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint) + accu_e_corr
|
|
||||||
delta_E = 1.d0/(CI_SC2_electronic_energy(1) - h)
|
|
||||||
|
|
||||||
|
|
||||||
c_pert(1) = i_H_psi_array(1) /(CI_SC2_electronic_energy(1) - h)
|
|
||||||
e_2_pert(1) = i_H_psi_array(1) * c_pert(1)
|
|
||||||
|
|
||||||
do i =2,N_st
|
|
||||||
H_pert_diag(i) = h
|
|
||||||
if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
|
||||||
c_pert(i) = i_H_psi_array(i) / (-dabs(CI_SC2_electronic_energy(i) - h))
|
|
||||||
e_2_pert(i) = (c_pert(i) * i_H_psi_array(i))
|
|
||||||
else
|
|
||||||
c_pert(i) = i_H_psi_array(i)
|
|
||||||
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
double precision function repeat_all_e_corr(key_in)
|
double precision function repeat_all_e_corr(key_in)
|
||||||
implicit none
|
implicit none
|
||||||
integer(bit_kind), intent(in) :: key_in(N_int,2)
|
integer(bit_kind), intent(in) :: key_in(N_int,2)
|
||||||
@ -182,47 +27,3 @@ double precision function repeat_all_e_corr(key_in)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
subroutine pt2_epstein_nesbet_sc2(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|
||||||
use bitmasks
|
|
||||||
implicit none
|
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
|
||||||
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
|
||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
|
||||||
double precision :: i_H_psi_array(N_st)
|
|
||||||
|
|
||||||
BEGIN_DOC
|
|
||||||
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
|
||||||
!
|
|
||||||
! for the various N_st states, but with the CISD_SC2 energies and coefficients
|
|
||||||
!
|
|
||||||
! c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
|
|
||||||
!
|
|
||||||
! e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
|
|
||||||
!
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: i,j
|
|
||||||
double precision :: diag_H_mat_elem, h
|
|
||||||
PROVIDE selection_criterion
|
|
||||||
|
|
||||||
ASSERT (Nint == N_int)
|
|
||||||
ASSERT (Nint > 0)
|
|
||||||
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
|
||||||
h = diag_H_mat_elem(det_pert,Nint)
|
|
||||||
do i =1,N_st
|
|
||||||
if(CI_SC2_electronic_energy(i)>h.and.CI_SC2_electronic_energy(i).ne.0.d0)then
|
|
||||||
c_pert(i) = -1.d0
|
|
||||||
e_2_pert(i) = selection_criterion*selection_criterion_factor*2.d0
|
|
||||||
else if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
|
||||||
c_pert(i) = i_H_psi_array(i) / (CI_SC2_electronic_energy(i) - h)
|
|
||||||
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
|
||||||
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
|
||||||
else
|
|
||||||
c_pert(i) = -1.d0
|
|
||||||
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
|
||||||
H_pert_diag(i) = h
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pt2_h_core(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
subroutine pt2_h_core(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
integer, intent(in) :: Nint,ndet,N_st
|
integer, intent(in) :: Nint,ndet,N_st
|
||||||
@ -6,6 +6,10 @@ subroutine pt2_h_core(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st)
|
|||||||
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag(N_st)
|
||||||
double precision :: i_H_psi_array(N_st)
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
|
||||||
|
integer, intent(in) :: N_minilist
|
||||||
|
integer, intent(in) :: idx_minilist(0:N_det_selectors)
|
||||||
|
integer(bit_kind), intent(in) :: minilist(Nint,2,N_det_selectors)
|
||||||
|
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
!
|
!
|
||||||
|
@ -2,7 +2,7 @@ BEGIN_SHELL [ /usr/bin/env python ]
|
|||||||
import perturbation
|
import perturbation
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint)
|
subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Applly pertubration ``$PERT`` to the buffer of determinants generated in the H_apply
|
! Applly pertubration ``$PERT`` to the buffer of determinants generated in the H_apply
|
||||||
@ -11,23 +11,47 @@ subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,c
|
|||||||
|
|
||||||
integer, intent(in) :: Nint, N_st, buffer_size, i_generator
|
integer, intent(in) :: Nint, N_st, buffer_size, i_generator
|
||||||
integer(bit_kind), intent(in) :: buffer(Nint,2,buffer_size)
|
integer(bit_kind), intent(in) :: buffer(Nint,2,buffer_size)
|
||||||
|
integer(bit_kind),intent(in) :: key_mask(Nint,2)
|
||||||
|
double precision, intent(in) :: fock_diag_tmp(2,0:mo_tot_num)
|
||||||
double precision, intent(inout) :: sum_norm_pert(N_st),sum_e_2_pert(N_st)
|
double precision, intent(inout) :: sum_norm_pert(N_st),sum_e_2_pert(N_st)
|
||||||
double precision, intent(inout) :: coef_pert_buffer(N_st,buffer_size),e_2_pert_buffer(N_st,buffer_size),sum_H_pert_diag(N_st)
|
double precision, intent(inout) :: coef_pert_buffer(N_st,buffer_size),e_2_pert_buffer(N_st,buffer_size),sum_H_pert_diag(N_st)
|
||||||
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
||||||
integer :: i,k, c_ref
|
integer :: i,k, c_ref, ni, ex
|
||||||
integer, external :: connected_to_ref
|
integer, external :: connected_to_ref
|
||||||
logical, external :: is_in_wavefunction
|
logical, external :: is_in_wavefunction
|
||||||
|
|
||||||
|
integer(bit_kind), allocatable :: minilist(:,:,:)
|
||||||
|
integer, allocatable :: idx_minilist(:)
|
||||||
|
integer :: N_minilist
|
||||||
|
|
||||||
|
integer(bit_kind), allocatable :: minilist_gen(:,:,:)
|
||||||
|
integer :: N_minilist_gen
|
||||||
|
logical :: fullMatch
|
||||||
|
logical, external :: is_connected_to
|
||||||
|
|
||||||
|
allocate( minilist(Nint,2,N_det_selectors), &
|
||||||
|
minilist_gen(Nint,2,N_det_generators), &
|
||||||
|
idx_minilist(N_det_selectors) )
|
||||||
|
|
||||||
|
|
||||||
ASSERT (Nint > 0)
|
ASSERT (Nint > 0)
|
||||||
ASSERT (Nint == N_int)
|
ASSERT (Nint == N_int)
|
||||||
ASSERT (buffer_size >= 0)
|
ASSERT (buffer_size >= 0)
|
||||||
ASSERT (minval(sum_norm_pert) >= 0.d0)
|
ASSERT (minval(sum_norm_pert) >= 0.d0)
|
||||||
ASSERT (N_st > 0)
|
ASSERT (N_st > 0)
|
||||||
|
|
||||||
|
call create_minilist(key_mask, psi_selectors, miniList, idx_miniList, N_det_selectors, N_minilist, Nint)
|
||||||
|
call create_minilist_find_previous(key_mask, psi_det_generators, miniList_gen, i_generator-1, N_minilist_gen, fullMatch, Nint)
|
||||||
|
|
||||||
|
if(fullMatch) then
|
||||||
|
deallocate( minilist, minilist_gen, idx_minilist )
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
do i=1,buffer_size
|
do i=1,buffer_size
|
||||||
|
|
||||||
c_ref = connected_to_ref(buffer(1,1,i),psi_det_generators,Nint,i_generator,N_det_generators)
|
if(is_connected_to(buffer(1,1,i), miniList_gen, Nint, N_minilist_gen)) then
|
||||||
|
|
||||||
if (c_ref /= 0) then
|
|
||||||
cycle
|
cycle
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -35,25 +59,25 @@ subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,c
|
|||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
|
|
||||||
integer :: degree
|
call pt2_$PERT(psi_det_generators(1,1,i_generator),buffer(1,1,i), fock_diag_tmp, &
|
||||||
call get_excitation_degree(HF_bitmask,buffer(1,1,i),degree,N_int)
|
c_pert,e_2_pert,H_pert_diag,Nint,N_minilist,n_st,minilist,idx_minilist,N_minilist)
|
||||||
call pt2_$PERT(buffer(1,1,i), &
|
|
||||||
c_pert,e_2_pert,H_pert_diag,Nint,N_det_selectors,n_st)
|
|
||||||
|
|
||||||
do k = 1,N_st
|
do k = 1,N_st
|
||||||
e_2_pert_buffer(k,i) = e_2_pert(k)
|
e_2_pert_buffer(k,i) = e_2_pert(k)
|
||||||
coef_pert_buffer(k,i) = c_pert(k)
|
coef_pert_buffer(k,i) = c_pert(k)
|
||||||
sum_norm_pert(k) += c_pert(k) * c_pert(k)
|
sum_norm_pert(k) = sum_norm_pert(k) + c_pert(k) * c_pert(k)
|
||||||
sum_e_2_pert(k) += e_2_pert(k)
|
sum_e_2_pert(k) = sum_e_2_pert(k) + e_2_pert(k)
|
||||||
sum_H_pert_diag(k) += H_pert_diag(k)
|
sum_H_pert_diag(k) = sum_H_pert_diag(k) + H_pert_diag(k)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
deallocate( minilist, minilist_gen, idx_minilist )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
subroutine perturb_buffer_by_mono_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint)
|
|
||||||
|
subroutine perturb_buffer_by_mono_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Applly pertubration ``$PERT`` to the buffer of determinants generated in the H_apply
|
! Applly pertubration ``$PERT`` to the buffer of determinants generated in the H_apply
|
||||||
@ -62,18 +86,44 @@ subroutine perturb_buffer_by_mono_$PERT(i_generator,buffer,buffer_size,e_2_pert_
|
|||||||
|
|
||||||
integer, intent(in) :: Nint, N_st, buffer_size, i_generator
|
integer, intent(in) :: Nint, N_st, buffer_size, i_generator
|
||||||
integer(bit_kind), intent(in) :: buffer(Nint,2,buffer_size)
|
integer(bit_kind), intent(in) :: buffer(Nint,2,buffer_size)
|
||||||
|
integer(bit_kind),intent(in) :: key_mask(Nint,2)
|
||||||
|
double precision, intent(in) :: fock_diag_tmp(2,0:mo_tot_num)
|
||||||
double precision, intent(inout) :: sum_norm_pert(N_st),sum_e_2_pert(N_st)
|
double precision, intent(inout) :: sum_norm_pert(N_st),sum_e_2_pert(N_st)
|
||||||
double precision, intent(inout) :: coef_pert_buffer(N_st,buffer_size),e_2_pert_buffer(N_st,buffer_size),sum_H_pert_diag(N_st)
|
double precision, intent(inout) :: coef_pert_buffer(N_st,buffer_size),e_2_pert_buffer(N_st,buffer_size),sum_H_pert_diag(N_st)
|
||||||
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
||||||
integer :: i,k, c_ref
|
integer :: i,k, c_ref, ni, ex
|
||||||
integer, external :: connected_to_ref_by_mono
|
integer, external :: connected_to_ref_by_mono
|
||||||
logical, external :: is_in_wavefunction
|
logical, external :: is_in_wavefunction
|
||||||
|
|
||||||
|
integer(bit_kind), allocatable :: minilist(:,:,:)
|
||||||
|
integer, allocatable :: idx_minilist(:)
|
||||||
|
integer :: N_minilist
|
||||||
|
|
||||||
|
integer(bit_kind), allocatable :: minilist_gen(:,:,:)
|
||||||
|
integer :: N_minilist_gen
|
||||||
|
logical :: fullMatch
|
||||||
|
logical, external :: is_connected_to
|
||||||
|
|
||||||
|
allocate( minilist(Nint,2,N_det_selectors), &
|
||||||
|
minilist_gen(Nint,2,N_det_generators), &
|
||||||
|
idx_minilist(N_det_selectors) )
|
||||||
|
|
||||||
|
|
||||||
ASSERT (Nint > 0)
|
ASSERT (Nint > 0)
|
||||||
ASSERT (Nint == N_int)
|
ASSERT (Nint == N_int)
|
||||||
ASSERT (buffer_size >= 0)
|
ASSERT (buffer_size >= 0)
|
||||||
ASSERT (minval(sum_norm_pert) >= 0.d0)
|
ASSERT (minval(sum_norm_pert) >= 0.d0)
|
||||||
ASSERT (N_st > 0)
|
ASSERT (N_st > 0)
|
||||||
|
|
||||||
|
call create_minilist(key_mask, psi_selectors, miniList, idx_miniList, N_det_selectors, N_minilist, Nint)
|
||||||
|
call create_minilist_find_previous(key_mask, psi_det_generators, miniList_gen, i_generator-1, N_minilist_gen, fullMatch, Nint)
|
||||||
|
|
||||||
|
if(fullMatch) then
|
||||||
|
deallocate( minilist, minilist_gen, idx_minilist )
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
do i=1,buffer_size
|
do i=1,buffer_size
|
||||||
|
|
||||||
c_ref = connected_to_ref_by_mono(buffer(1,1,i),psi_det_generators,Nint,i_generator,N_det)
|
c_ref = connected_to_ref_by_mono(buffer(1,1,i),psi_det_generators,Nint,i_generator,N_det)
|
||||||
@ -86,19 +136,19 @@ subroutine perturb_buffer_by_mono_$PERT(i_generator,buffer,buffer_size,e_2_pert_
|
|||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
|
|
||||||
integer :: degree
|
call pt2_$PERT(psi_det_generators(1,1,i_generator),buffer(1,1,i), fock_diag_tmp, &
|
||||||
call pt2_$PERT(buffer(1,1,i), &
|
c_pert,e_2_pert,H_pert_diag,Nint,N_minilist,n_st,minilist,idx_minilist,N_minilist)
|
||||||
c_pert,e_2_pert,H_pert_diag,Nint,N_det_selectors,n_st)
|
|
||||||
|
|
||||||
do k = 1,N_st
|
do k = 1,N_st
|
||||||
e_2_pert_buffer(k,i) = e_2_pert(k)
|
e_2_pert_buffer(k,i) = e_2_pert(k)
|
||||||
coef_pert_buffer(k,i) = c_pert(k)
|
coef_pert_buffer(k,i) = c_pert(k)
|
||||||
sum_norm_pert(k) += c_pert(k) * c_pert(k)
|
sum_norm_pert(k) = sum_norm_pert(k) + c_pert(k) * c_pert(k)
|
||||||
sum_e_2_pert(k) += e_2_pert(k)
|
sum_e_2_pert(k) = sum_e_2_pert(k) + e_2_pert(k)
|
||||||
sum_H_pert_diag(k) += H_pert_diag(k)
|
sum_H_pert_diag(k) = sum_H_pert_diag(k) + H_pert_diag(k)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
deallocate( minilist, minilist_gen, idx_minilist )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
367
plugins/Perturbation/pt2_equations.irp.f
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
BEGIN_TEMPLATE
|
||||||
|
|
||||||
|
subroutine pt2_epstein_nesbet ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
|
!
|
||||||
|
! for the various N_st states.
|
||||||
|
!
|
||||||
|
! c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
|
||||||
|
!
|
||||||
|
! e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
|
||||||
|
!
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j
|
||||||
|
double precision :: diag_H_mat_elem_fock, h
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
PROVIDE selection_criterion
|
||||||
|
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
|
||||||
|
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
do i =1,N_st
|
||||||
|
if(CI_electronic_energy(i)>h.and.CI_electronic_energy(i).ne.0.d0)then
|
||||||
|
c_pert(i) = -1.d0
|
||||||
|
e_2_pert(i) = selection_criterion*selection_criterion_factor*2.d0
|
||||||
|
else if (dabs(CI_electronic_energy(i) - h) > 1.d-6) then
|
||||||
|
c_pert(i) = i_H_psi_array(i) / (CI_electronic_energy(i) - h)
|
||||||
|
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
||||||
|
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
||||||
|
else
|
||||||
|
c_pert(i) = -1.d0
|
||||||
|
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
||||||
|
H_pert_diag(i) = h
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine pt2_epstein_nesbet_2x2 ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution
|
||||||
|
!
|
||||||
|
! for the various N_st states.
|
||||||
|
!
|
||||||
|
! e_2_pert(i) = 0.5 * (( <det_pert|H|det_pert> - E(i) ) - sqrt( ( <det_pert|H|det_pert> - E(i)) ^2 + 4 <psi(i)|H|det_pert>^2 )
|
||||||
|
!
|
||||||
|
! c_pert(i) = e_2_pert(i)/ <psi(i)|H|det_pert>
|
||||||
|
!
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j
|
||||||
|
double precision :: diag_H_mat_elem_fock,delta_e, h
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
PROVIDE CI_electronic_energy
|
||||||
|
|
||||||
|
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
do i =1,N_st
|
||||||
|
if (i_H_psi_array(i) /= 0.d0) then
|
||||||
|
delta_e = h - CI_electronic_energy(i)
|
||||||
|
if (delta_e > 0.d0) then
|
||||||
|
e_2_pert(i) = 0.5d0 * (delta_e - dsqrt(delta_e * delta_e + 4.d0 * i_H_psi_array(i) * i_H_psi_array(i)))
|
||||||
|
else
|
||||||
|
e_2_pert(i) = 0.5d0 * (delta_e + dsqrt(delta_e * delta_e + 4.d0 * i_H_psi_array(i) * i_H_psi_array(i)))
|
||||||
|
endif
|
||||||
|
if (dabs(i_H_psi_array(i)) > 1.d-6) then
|
||||||
|
c_pert(i) = e_2_pert(i)/i_H_psi_array(i)
|
||||||
|
else
|
||||||
|
c_pert(i) = 0.d0
|
||||||
|
endif
|
||||||
|
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
||||||
|
else
|
||||||
|
e_2_pert(i) = 0.d0
|
||||||
|
c_pert(i) = 0.d0
|
||||||
|
H_pert_diag(i) = 0.d0
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine pt2_moller_plesset ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution
|
||||||
|
!
|
||||||
|
! for the various n_st states.
|
||||||
|
!
|
||||||
|
! c_pert(i) = <psi(i)|H|det_pert>/(difference of orbital energies)
|
||||||
|
!
|
||||||
|
! e_2_pert(i) = <psi(i)|H|det_pert>^2/(difference of orbital energies)
|
||||||
|
!
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j
|
||||||
|
double precision :: diag_H_mat_elem_fock
|
||||||
|
integer :: exc(0:2,2,2)
|
||||||
|
integer :: degree
|
||||||
|
double precision :: phase,delta_e,h
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
integer :: h1,h2,p1,p2,s1,s2
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
call get_excitation(ref_bitmask,det_pert,exc,degree,phase,Nint)
|
||||||
|
if (degree == 2) then
|
||||||
|
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
||||||
|
delta_e = Fock_matrix_diag_mo(h1) + Fock_matrix_diag_mo(h2) - &
|
||||||
|
(Fock_matrix_diag_mo(p1) + Fock_matrix_diag_mo(p2))
|
||||||
|
delta_e = 1.d0/delta_e
|
||||||
|
else if (degree == 1) then
|
||||||
|
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
||||||
|
delta_e = Fock_matrix_diag_mo(h1) - Fock_matrix_diag_mo(p1)
|
||||||
|
delta_e = 1.d0/delta_e
|
||||||
|
else
|
||||||
|
delta_e = 0.d0
|
||||||
|
endif
|
||||||
|
|
||||||
|
call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det,psi_selectors_size,n_st,i_H_psi_array)
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
do i =1,n_st
|
||||||
|
H_pert_diag(i) = h
|
||||||
|
c_pert(i) = i_H_psi_array(i) *delta_e
|
||||||
|
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine pt2_epstein_nesbet_SC2_projected ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
|
!
|
||||||
|
! for the various N_st states,
|
||||||
|
!
|
||||||
|
! but with the correction in the denominator
|
||||||
|
!
|
||||||
|
! comming from the interaction of that determinant with all the others determinants
|
||||||
|
!
|
||||||
|
! that can be repeated by repeating all the double excitations
|
||||||
|
!
|
||||||
|
! : you repeat all the correlation energy already taken into account in CI_electronic_energy(1)
|
||||||
|
!
|
||||||
|
! that could be repeated to this determinant.
|
||||||
|
!
|
||||||
|
! In addition, for the perturbative energetic contribution you have the standard second order
|
||||||
|
!
|
||||||
|
! e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
|
||||||
|
!
|
||||||
|
! and also the purely projected contribution
|
||||||
|
!
|
||||||
|
! H_pert_diag = <HF|H|det_pert> c_pert
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
integer :: idx_repeat(0:ndet)
|
||||||
|
integer :: i,j,degree,l
|
||||||
|
double precision :: diag_H_mat_elem_fock,accu_e_corr,hij,h0j,h,delta_E
|
||||||
|
double precision :: repeat_all_e_corr,accu_e_corr_tmp,e_2_pert_fonda
|
||||||
|
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
|
||||||
|
call i_H_psi_SC2(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array,idx_repeat)
|
||||||
|
accu_e_corr = 0.d0
|
||||||
|
!$IVDEP
|
||||||
|
do i = 1, idx_repeat(0)
|
||||||
|
accu_e_corr = accu_e_corr + E_corr_per_selectors(idx_repeat(i))
|
||||||
|
enddo
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
h = h + accu_e_corr
|
||||||
|
delta_E = 1.d0/(CI_SC2_electronic_energy(1) - h)
|
||||||
|
|
||||||
|
|
||||||
|
c_pert(1) = i_H_psi_array(1) /(CI_SC2_electronic_energy(1) - h)
|
||||||
|
e_2_pert(1) = i_H_psi_array(1) * c_pert(1)
|
||||||
|
|
||||||
|
do i =2,N_st
|
||||||
|
H_pert_diag(i) = h
|
||||||
|
if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
||||||
|
c_pert(i) = i_H_psi_array(i) / (-dabs(CI_SC2_electronic_energy(i) - h))
|
||||||
|
e_2_pert(i) = (c_pert(i) * i_H_psi_array(i))
|
||||||
|
else
|
||||||
|
c_pert(i) = i_H_psi_array(i)
|
||||||
|
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
|
degree = popcnt(xor( ref_bitmask(1,1), det_pert(1,1))) + &
|
||||||
|
popcnt(xor( ref_bitmask(1,2), det_pert(1,2)))
|
||||||
|
!DEC$ NOUNROLL
|
||||||
|
do l=2,Nint
|
||||||
|
degree = degree+ popcnt(xor( ref_bitmask(l,1), det_pert(l,1))) + &
|
||||||
|
popcnt(xor( ref_bitmask(l,2), det_pert(l,2)))
|
||||||
|
enddo
|
||||||
|
if(degree==4)then
|
||||||
|
! <psi|delta_H|psi>
|
||||||
|
e_2_pert_fonda = e_2_pert(1)
|
||||||
|
H_pert_diag(1) = e_2_pert(1) * c_pert(1) * c_pert(1)
|
||||||
|
do i = 1, N_st
|
||||||
|
do j = 1, idx_repeat(0)
|
||||||
|
e_2_pert(i) += e_2_pert_fonda * psi_selectors_coef(idx_repeat(j),i) * psi_selectors_coef(idx_repeat(j),i)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine pt2_epstein_nesbet_SC2_no_projected ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
|
!
|
||||||
|
! for the various N_st states,
|
||||||
|
!
|
||||||
|
! but with the correction in the denominator
|
||||||
|
!
|
||||||
|
! comming from the interaction of that determinant with all the others determinants
|
||||||
|
!
|
||||||
|
! that can be repeated by repeating all the double excitations
|
||||||
|
!
|
||||||
|
! : you repeat all the correlation energy already taken into account in CI_electronic_energy(1)
|
||||||
|
!
|
||||||
|
! that could be repeated to this determinant.
|
||||||
|
!
|
||||||
|
! In addition, for the perturbative energetic contribution you have the standard second order
|
||||||
|
!
|
||||||
|
! e_2_pert = <psi_i|H|det_pert>^2/(Delta_E)
|
||||||
|
!
|
||||||
|
! and also the purely projected contribution
|
||||||
|
!
|
||||||
|
! H_pert_diag = <HF|H|det_pert> c_pert
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
integer :: idx_repeat(0:ndet)
|
||||||
|
integer :: i,j,degree,l
|
||||||
|
double precision :: diag_H_mat_elem_fock,accu_e_corr,hij,h0j,h,delta_E
|
||||||
|
double precision :: repeat_all_e_corr,accu_e_corr_tmp,e_2_pert_fonda
|
||||||
|
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
|
||||||
|
call i_H_psi_SC2(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array,idx_repeat)
|
||||||
|
accu_e_corr = 0.d0
|
||||||
|
!$IVDEP
|
||||||
|
do i = 1, idx_repeat(0)
|
||||||
|
accu_e_corr = accu_e_corr + E_corr_per_selectors(idx_repeat(i))
|
||||||
|
enddo
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
h = h + accu_e_corr
|
||||||
|
delta_E = 1.d0/(CI_SC2_electronic_energy(1) - h)
|
||||||
|
|
||||||
|
|
||||||
|
c_pert(1) = i_H_psi_array(1) /(CI_SC2_electronic_energy(1) - h)
|
||||||
|
e_2_pert(1) = i_H_psi_array(1) * c_pert(1)
|
||||||
|
|
||||||
|
do i =2,N_st
|
||||||
|
H_pert_diag(i) = h
|
||||||
|
if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
||||||
|
c_pert(i) = i_H_psi_array(i) / (-dabs(CI_SC2_electronic_energy(i) - h))
|
||||||
|
e_2_pert(i) = (c_pert(i) * i_H_psi_array(i))
|
||||||
|
else
|
||||||
|
c_pert(i) = i_H_psi_array(i)
|
||||||
|
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
subroutine pt2_epstein_nesbet_sc2 ($arguments)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
$declarations
|
||||||
|
BEGIN_DOC
|
||||||
|
! compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution
|
||||||
|
!
|
||||||
|
! for the various N_st states, but with the CISD_SC2 energies and coefficients
|
||||||
|
!
|
||||||
|
! c_pert(i) = <psi(i)|H|det_pert>/( E(i) - <det_pert|H|det_pert> )
|
||||||
|
!
|
||||||
|
! e_2_pert(i) = <psi(i)|H|det_pert>^2/( E(i) - <det_pert|H|det_pert> )
|
||||||
|
!
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j
|
||||||
|
double precision :: i_H_psi_array(N_st)
|
||||||
|
double precision :: diag_H_mat_elem_fock, h
|
||||||
|
PROVIDE selection_criterion
|
||||||
|
|
||||||
|
ASSERT (Nint == N_int)
|
||||||
|
ASSERT (Nint > 0)
|
||||||
|
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
|
||||||
|
|
||||||
|
|
||||||
|
h = diag_H_mat_elem_fock(det_ref,det_pert,fock_diag_tmp,Nint)
|
||||||
|
do i =1,N_st
|
||||||
|
if(CI_SC2_electronic_energy(i)>h.and.CI_SC2_electronic_energy(i).ne.0.d0)then
|
||||||
|
c_pert(i) = -1.d0
|
||||||
|
e_2_pert(i) = selection_criterion*selection_criterion_factor*2.d0
|
||||||
|
else if (dabs(CI_SC2_electronic_energy(i) - h) > 1.d-6) then
|
||||||
|
c_pert(i) = i_H_psi_array(i) / (CI_SC2_electronic_energy(i) - h)
|
||||||
|
H_pert_diag(i) = h*c_pert(i)*c_pert(i)
|
||||||
|
e_2_pert(i) = c_pert(i) * i_H_psi_array(i)
|
||||||
|
else
|
||||||
|
c_pert(i) = -1.d0
|
||||||
|
e_2_pert(i) = -dabs(i_H_psi_array(i))
|
||||||
|
H_pert_diag(i) = h
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUBST [ arguments, declarations ]
|
||||||
|
|
||||||
|
det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist ;
|
||||||
|
|
||||||
|
integer, intent(in) :: Nint
|
||||||
|
integer, intent(in) :: ndet
|
||||||
|
integer, intent(in) :: N_st
|
||||||
|
integer, intent(in) :: N_minilist
|
||||||
|
integer(bit_kind), intent(in) :: det_ref (Nint,2)
|
||||||
|
integer(bit_kind), intent(in) :: det_pert(Nint,2)
|
||||||
|
double precision , intent(in) :: fock_diag_tmp(2,mo_tot_num+1)
|
||||||
|
double precision , intent(out) :: c_pert(N_st)
|
||||||
|
double precision , intent(out) :: e_2_pert(N_st)
|
||||||
|
double precision, intent(out) :: H_pert_diag(N_st)
|
||||||
|
integer, intent(in) :: idx_minilist(0:N_det_selectors)
|
||||||
|
integer(bit_kind), intent(in) :: minilist(Nint,2,N_det_selectors)
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
END_TEMPLATE
|
||||||
|
|
||||||
|
! Note : If the arguments are changed here, they should also be changed accordingly in
|
||||||
|
! the perturbation.template.f file.
|
||||||
|
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.4 KiB |
1
plugins/QmcChem/.gitignore
vendored
@ -21,3 +21,4 @@ irpf90.make
|
|||||||
irpf90_entities
|
irpf90_entities
|
||||||
save_for_qmcchem
|
save_for_qmcchem
|
||||||
tags
|
tags
|
||||||
|
target_pt2_qmc
|
@ -66,6 +66,14 @@ Documentation
|
|||||||
title="f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \chi_i^{A} (r-r_A) d\Omega_C" />
|
title="f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \chi_i^{A} (r-r_A) d\Omega_C" />
|
||||||
|
|
||||||
|
|
||||||
|
`compute_energy <http://github.com/LCPQ/quantum_package/tree/master/plugins/QmcChem/target_pt2_qmc.irp.f#L80>`_
|
||||||
|
Compute an energy when a threshold is applied
|
||||||
|
|
||||||
|
|
||||||
|
`e_curve <http://github.com/LCPQ/quantum_package/tree/master/plugins/QmcChem/target_pt2_qmc.irp.f#L1>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
`mo_pseudo_grid <http://github.com/LCPQ/quantum_package/tree/master/plugins/QmcChem/pot_ao_pseudo_ints.irp.f#L56>`_
|
`mo_pseudo_grid <http://github.com/LCPQ/quantum_package/tree/master/plugins/QmcChem/pot_ao_pseudo_ints.irp.f#L56>`_
|
||||||
Grid points for f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \phi_i^{A} (r-r_A) d\Omega_C
|
Grid points for f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \phi_i^{A} (r-r_A) d\Omega_C
|
||||||
.br
|
.br
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
program save_for_qmc
|
program save_for_qmc
|
||||||
read_wf = .True.
|
read_wf = .True.
|
||||||
TOUCH read_wf
|
TOUCH read_wf
|
||||||
|
print *, "N_det = ", N_det
|
||||||
call write_spindeterminants
|
call write_spindeterminants
|
||||||
if (do_pseudo) then
|
if (do_pseudo) then
|
||||||
call write_pseudopotential
|
call write_pseudopotential
|
||||||
|
121
plugins/QmcChem/target_pt2_qmc.irp.f
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
program e_curve
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
integer :: i,j,k, nab, m, l, n_up, n_dn, n
|
||||||
|
double precision :: norm, E, hij, num, ci, cj
|
||||||
|
integer, allocatable :: iorder(:)
|
||||||
|
double precision , allocatable :: norm_sort(:), psi_bilinear_matrix_values_save(:)
|
||||||
|
nab = n_det_alpha_unique+n_det_beta_unique
|
||||||
|
|
||||||
|
allocate ( norm_sort(0:nab), iorder(0:nab), psi_bilinear_matrix_values_save(N_det) )
|
||||||
|
|
||||||
|
|
||||||
|
norm_sort(0) = 0.d0
|
||||||
|
iorder(0) = 0
|
||||||
|
do i=1,n_det_alpha_unique
|
||||||
|
norm_sort(i) = det_alpha_norm(i)
|
||||||
|
iorder(i) = i
|
||||||
|
enddo
|
||||||
|
|
||||||
|
do i=1,n_det_beta_unique
|
||||||
|
norm_sort(i+n_det_alpha_unique) = det_beta_norm(i)
|
||||||
|
iorder(i+n_det_alpha_unique) = -i
|
||||||
|
enddo
|
||||||
|
|
||||||
|
call dsort(norm_sort(1),iorder(1),nab)
|
||||||
|
|
||||||
|
if (.not.read_wf) then
|
||||||
|
stop 'Please set read_wf to true'
|
||||||
|
endif
|
||||||
|
|
||||||
|
psi_bilinear_matrix_values_save = psi_bilinear_matrix_values(:,1)
|
||||||
|
print *, '=========================================================='
|
||||||
|
print '(A8,2X,A8,2X,A12,2X,A10,2X,A12)', 'Thresh.', 'Ndet', 'Cost', 'Norm', 'E'
|
||||||
|
print *, '=========================================================='
|
||||||
|
integer(bit_kind), allocatable :: det_i(:,:), det_j(:,:)
|
||||||
|
|
||||||
|
double precision :: thresh, E_min, E_max, E_prev
|
||||||
|
thresh = 0.d0
|
||||||
|
call compute_energy(psi_bilinear_matrix_values_save,E_max,m,norm)
|
||||||
|
call i_h_j(psi_det_sorted(1,1,1), psi_det_sorted(1,1,1), N_int, E_min)
|
||||||
|
print *, E_min, E_max
|
||||||
|
|
||||||
|
n_up = nab
|
||||||
|
n_dn = 0
|
||||||
|
do while (n_up > n_dn)
|
||||||
|
n = n_dn + (n_up-n_dn)/2
|
||||||
|
psi_bilinear_matrix_values_save = psi_bilinear_matrix_values(:,1)
|
||||||
|
do j=1,n
|
||||||
|
i = iorder(j)
|
||||||
|
if (i<0) then
|
||||||
|
do k=1,n_det
|
||||||
|
if (psi_bilinear_matrix_columns(k) == -i) then
|
||||||
|
psi_bilinear_matrix_values_save(k) = 0.d0
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
else
|
||||||
|
do k=1,n_det
|
||||||
|
if (psi_bilinear_matrix_rows(k) == i) then
|
||||||
|
psi_bilinear_matrix_values_save(k) = 0.d0
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
call compute_energy(psi_bilinear_matrix_values_save,E,m,norm)
|
||||||
|
print '(E9.1,2X,I8,2X,F10.2,2X,F10.6,2X,F12.6)', norm_sort(n), m, &
|
||||||
|
dble( elec_alpha_num**3 + elec_alpha_num**2 * m ) / &
|
||||||
|
dble( elec_alpha_num**3 + elec_alpha_num**2 * n ), norm, E
|
||||||
|
if (E < target_energy) then
|
||||||
|
n_dn = n+1
|
||||||
|
else
|
||||||
|
n_up = n
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
print *, '=========================================================='
|
||||||
|
print *, norm_sort(n), target_energy
|
||||||
|
|
||||||
|
deallocate (iorder, norm_sort, psi_bilinear_matrix_values_save)
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine compute_energy(psi_bilinear_matrix_values_save, E, m, norm)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Compute an energy when a threshold is applied
|
||||||
|
END_DOC
|
||||||
|
double precision, intent(in) :: psi_bilinear_matrix_values_save(n_det)
|
||||||
|
integer(bit_kind), allocatable :: det_i(:,:), det_j(:,:)
|
||||||
|
integer :: i,j, k, l, m
|
||||||
|
double precision :: num, norm, ci, cj, hij, E
|
||||||
|
|
||||||
|
|
||||||
|
num = 0.d0
|
||||||
|
norm = 0.d0
|
||||||
|
m = 0
|
||||||
|
!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(k,l,det_i,det_j,ci,cj,hij) REDUCTION(+:norm,m,num)
|
||||||
|
allocate( det_i(N_int,2), det_j(N_int,2))
|
||||||
|
!$OMP DO schedule(guided)
|
||||||
|
do k=1,n_det
|
||||||
|
if (psi_bilinear_matrix_values_save(k) == 0.d0) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
ci = psi_bilinear_matrix_values_save(k)
|
||||||
|
det_i(:,1) = psi_det_alpha_unique(:,psi_bilinear_matrix_rows(k))
|
||||||
|
det_i(:,2) = psi_det_beta_unique(:,psi_bilinear_matrix_columns(k))
|
||||||
|
do l=1,n_det
|
||||||
|
if (psi_bilinear_matrix_values_save(l) == 0.d0) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
cj = psi_bilinear_matrix_values_save(l)
|
||||||
|
det_j(:,1) = psi_det_alpha_unique(:,psi_bilinear_matrix_rows(l))
|
||||||
|
det_j(:,2) = psi_det_beta_unique(:,psi_bilinear_matrix_columns(l))
|
||||||
|
call i_h_j(det_i, det_j, N_int, hij)
|
||||||
|
num = num + ci*cj*hij
|
||||||
|
enddo
|
||||||
|
norm = norm + ci*ci
|
||||||
|
m = m+1
|
||||||
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
deallocate (det_i,det_j)
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
E = num / norm + nuclear_repulsion
|
||||||
|
end
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
@ -20,3 +20,25 @@ Needed Modules
|
|||||||
|
|
||||||
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
||||||
|
|
||||||
|
Needed Modules
|
||||||
|
==============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
.. image:: tree_dependency.png
|
||||||
|
|
||||||
|
* `MO_Basis <http://github.com/LCPQ/quantum_package/tree/master/src/MO_Basis>`_
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
=============
|
||||||
|
.. Do not edit this section It was auto-generated
|
||||||
|
.. by the `update_README.py` script.
|
||||||
|
|
||||||
|
|
||||||
|
`loc_rasorb <http://github.com/LCPQ/quantum_package/tree/master/plugins/loc_cele/loc_cele.irp.f#L1>`_
|
||||||
|
This program performs a localization of the active orbitals
|
||||||
|
of a CASSCF wavefunction, reading the orbitals from a RASORB
|
||||||
|
file of molcas.
|
||||||
|
id1=max is the number of MO in a given symmetry.
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@
|
|||||||
|
|
||||||
enddo !big loop over symmetry
|
enddo !big loop over symmetry
|
||||||
|
|
||||||
10 format (4E18.12)
|
10 format (4E20.12)
|
||||||
|
|
||||||
|
|
||||||
! Now we copyt the newcmo into the mo_coef
|
! Now we copyt the newcmo into the mo_coef
|
||||||
|
@ -35,7 +35,9 @@ except ImportError:
|
|||||||
|
|
||||||
from qp_path import QP_ROOT, QP_SRC, QP_EZFIO
|
from qp_path import QP_ROOT, QP_SRC, QP_EZFIO
|
||||||
|
|
||||||
EZFIO_LIB = join(QP_ROOT, "lib", "libezfio.a")
|
LIB = "" # join(QP_ROOT, "lib", "rdtsc.o")
|
||||||
|
EZFIO_LIB = join(QP_ROOT, "lib", "libezfio_irp.a")
|
||||||
|
ZMQ_LIB = join(QP_ROOT, "lib", "libf77zmq.a") + " " + join(QP_ROOT, "lib", "libzmq.a") + " -lstdc++ -lrt"
|
||||||
ROOT_BUILD_NINJA = join(QP_ROOT, "config", "build.ninja")
|
ROOT_BUILD_NINJA = join(QP_ROOT, "config", "build.ninja")
|
||||||
|
|
||||||
header = r"""#
|
header = r"""#
|
||||||
@ -94,7 +96,7 @@ def ninja_create_env_variable(pwd_config_file):
|
|||||||
l_string.append(str_)
|
l_string.append(str_)
|
||||||
|
|
||||||
lib_lapack = get_compilation_option(pwd_config_file, "LAPACK_LIB")
|
lib_lapack = get_compilation_option(pwd_config_file, "LAPACK_LIB")
|
||||||
l_string.append("{0} = {1} {2}".format("LIB", lib_lapack, EZFIO_LIB))
|
l_string.append("LIB = {0} {1} {2} {3}".format(LIB, lib_lapack, EZFIO_LIB, ZMQ_LIB))
|
||||||
|
|
||||||
l_string.append("")
|
l_string.append("")
|
||||||
|
|
||||||
@ -260,7 +262,7 @@ def ninja_ezfio_rule():
|
|||||||
l_flag = ["export {0}='${0}'".format(flag)
|
l_flag = ["export {0}='${0}'".format(flag)
|
||||||
for flag in ["FC", "FCFLAGS", "IRPF90"]]
|
for flag in ["FC", "FCFLAGS", "IRPF90"]]
|
||||||
|
|
||||||
install_lib_ezfio = join(QP_ROOT, 'install', 'EZFIO', "lib", "libezfio.a")
|
install_lib_ezfio = join(QP_ROOT, 'install', 'EZFIO', "lib", "libezfio_irp.a")
|
||||||
l_cmd = ["cd {0}".format(QP_EZFIO)] + l_flag
|
l_cmd = ["cd {0}".format(QP_EZFIO)] + l_flag
|
||||||
l_cmd += ["rm -f make.config ; ninja && ln -sf {0} {1}".format(install_lib_ezfio, EZFIO_LIB)]
|
l_cmd += ["rm -f make.config ; ninja && ln -sf {0} {1}".format(install_lib_ezfio, EZFIO_LIB)]
|
||||||
|
|
||||||
@ -707,7 +709,7 @@ def ninja_dot_tree_rule():
|
|||||||
l_string = [
|
l_string = [
|
||||||
"rule build_dot_tree", " command = {0}".format(" ; ".join(l_cmd)),
|
"rule build_dot_tree", " command = {0}".format(" ; ".join(l_cmd)),
|
||||||
" generator = 1",
|
" generator = 1",
|
||||||
" description = Generate Png representtion of the Tree Dependencies of $module_rel",
|
" description = Generating Png representation of the Tree Dependencies of $module_rel",
|
||||||
""
|
""
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class H_apply(object):
|
|||||||
s["omp_master"] = "!$OMP MASTER"
|
s["omp_master"] = "!$OMP MASTER"
|
||||||
s["omp_end_master"] = "!$OMP END MASTER"
|
s["omp_end_master"] = "!$OMP END MASTER"
|
||||||
s["omp_barrier"] = "!$OMP BARRIER"
|
s["omp_barrier"] = "!$OMP BARRIER"
|
||||||
s["omp_do"] = "!$OMP DO SCHEDULE (static)"
|
s["omp_do"] = "!$OMP DO SCHEDULE (static,1)"
|
||||||
s["omp_enddo"] = "!$OMP ENDDO NOWAIT"
|
s["omp_enddo"] = "!$OMP ENDDO NOWAIT"
|
||||||
|
|
||||||
d = { True : '.True.', False : '.False.'}
|
d = { True : '.True.', False : '.False.'}
|
||||||
@ -99,7 +99,7 @@ class H_apply(object):
|
|||||||
deallocate(H_jj,iorder)
|
deallocate(H_jj,iorder)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
s["size_max"] = str(1024*128)
|
s["size_max"] = "256"
|
||||||
s["copy_buffer"] = """call copy_H_apply_buffer_to_wf
|
s["copy_buffer"] = """call copy_H_apply_buffer_to_wf
|
||||||
if (s2_eig) then
|
if (s2_eig) then
|
||||||
call make_s2_eigenfunction
|
call make_s2_eigenfunction
|
||||||
@ -131,10 +131,10 @@ class H_apply(object):
|
|||||||
def filter_vvvv_excitation(self):
|
def filter_vvvv_excitation(self):
|
||||||
self["filter_vvvv_excitation"] = """
|
self["filter_vvvv_excitation"] = """
|
||||||
key_union_hole_part = 0_bit_kind
|
key_union_hole_part = 0_bit_kind
|
||||||
call set_bite_to_integer(i_a,key_union_hole_part,N_int)
|
call set_bit_to_integer(i_a,key_union_hole_part,N_int)
|
||||||
call set_bite_to_integer(j_a,key_union_hole_part,N_int)
|
call set_bit_to_integer(j_a,key_union_hole_part,N_int)
|
||||||
call set_bite_to_integer(i_b,key_union_hole_part,N_int)
|
call set_bit_to_integer(i_b,key_union_hole_part,N_int)
|
||||||
call set_bite_to_integer(j_b,key_union_hole_part,N_int)
|
call set_bit_to_integer(j_b,key_union_hole_part,N_int)
|
||||||
do jtest_vvvv = 1, N_int
|
do jtest_vvvv = 1, N_int
|
||||||
if(iand(key_union_hole_part(jtest_vvvv),virt_bitmask(jtest_vvvv,1).ne.key_union_hole_part(jtest_vvvv)))then
|
if(iand(key_union_hole_part(jtest_vvvv),virt_bitmask(jtest_vvvv,1).ne.key_union_hole_part(jtest_vvvv)))then
|
||||||
b_cycle = .False.
|
b_cycle = .False.
|
||||||
@ -157,7 +157,6 @@ class H_apply(object):
|
|||||||
|
|
||||||
def set_filter_2h_2p(self):
|
def set_filter_2h_2p(self):
|
||||||
self["filter2h2p"] = """
|
self["filter2h2p"] = """
|
||||||
! ! DIR$ FORCEINLINE
|
|
||||||
if (is_a_two_holes_two_particles(key)) cycle
|
if (is_a_two_holes_two_particles(key)) cycle
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -201,11 +200,11 @@ class H_apply(object):
|
|||||||
"""
|
"""
|
||||||
self.data["size_max"] = "256"
|
self.data["size_max"] = "256"
|
||||||
self.data["initialization"] = """
|
self.data["initialization"] = """
|
||||||
PROVIDE CI_electronic_energy psi_selectors_coef psi_selectors E_corr_per_selectors psi_det_sorted_bit
|
PROVIDE psi_selectors_coef psi_selectors E_corr_per_selectors psi_det_sorted_bit
|
||||||
"""
|
"""
|
||||||
self.data["keys_work"] = """
|
self.data["keys_work"] = """
|
||||||
call perturb_buffer_%s(i_generator,keys_out,key_idx,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert, &
|
call perturb_buffer_%s(i_generator,keys_out,key_idx,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert, &
|
||||||
sum_norm_pert,sum_H_pert_diag,N_st,N_int)
|
sum_norm_pert,sum_H_pert_diag,N_st,N_int,key_mask,fock_diag_tmp)
|
||||||
"""%(pert,)
|
"""%(pert,)
|
||||||
self.data["finalization"] = """
|
self.data["finalization"] = """
|
||||||
"""
|
"""
|
||||||
@ -219,7 +218,7 @@ class H_apply(object):
|
|||||||
double precision, intent(inout):: norm_pert(N_st)
|
double precision, intent(inout):: norm_pert(N_st)
|
||||||
double precision, intent(inout):: H_pert_diag(N_st)
|
double precision, intent(inout):: H_pert_diag(N_st)
|
||||||
double precision :: delta_pt2(N_st), norm_psi(N_st), pt2_old(N_st)
|
double precision :: delta_pt2(N_st), norm_psi(N_st), pt2_old(N_st)
|
||||||
PROVIDE CI_electronic_energy N_det_generators
|
PROVIDE N_det_generators
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
pt2(k) = 0.d0
|
pt2(k) = 0.d0
|
||||||
norm_pert(k) = 0.d0
|
norm_pert(k) = 0.d0
|
||||||
@ -266,7 +265,7 @@ class H_apply(object):
|
|||||||
double precision, intent(inout) :: select_max_out"""
|
double precision, intent(inout) :: select_max_out"""
|
||||||
|
|
||||||
self.data["params_post"] += ", select_max(min(i_generator,size(select_max,1)))"
|
self.data["params_post"] += ", select_max(min(i_generator,size(select_max,1)))"
|
||||||
self.data["size_max"] = str(1024*128)
|
self.data["size_max"] = "256"
|
||||||
self.data["copy_buffer"] = """
|
self.data["copy_buffer"] = """
|
||||||
call copy_H_apply_buffer_to_wf
|
call copy_H_apply_buffer_to_wf
|
||||||
if (s2_eig) then
|
if (s2_eig) then
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
# Prints in stdout the name of a temporary file containing the basis set.
|
# Prints in stdout the name of a temporary file containing the basis set.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#DEBUG:
|
||||||
|
#echo $0 $@ 1>&2
|
||||||
|
|
||||||
if [[ -z ${QP_ROOT} ]]
|
if [[ -z ${QP_ROOT} ]]
|
||||||
then
|
then
|
||||||
|
@ -13,7 +13,6 @@ then
|
|||||||
fi
|
fi
|
||||||
source ${QP_ROOT}/scripts/qp_include.sh
|
source ${QP_ROOT}/scripts/qp_include.sh
|
||||||
|
|
||||||
|
|
||||||
function do_gitingore()
|
function do_gitingore()
|
||||||
{
|
{
|
||||||
cat << EOF > .gitignore
|
cat << EOF > .gitignore
|
||||||
|
@ -88,7 +88,7 @@ def get_l_module_descendant(d_child, l_module):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
print >> sys.stderr, "Error: "
|
print >> sys.stderr, "Error: "
|
||||||
print >> sys.stderr, "`{0}` is not a submodule".format(module)
|
print >> sys.stderr, "`{0}` is not a submodule".format(module)
|
||||||
print >> sys.stderr, "Check the typo (orthograph, case, '/', etc.) "
|
print >> sys.stderr, "Check the typo (spelling, case, '/', etc.) "
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return list(set(l))
|
return list(set(l))
|
||||||
@ -180,6 +180,11 @@ class ModuleHandler():
|
|||||||
def create_png(self, l_module):
|
def create_png(self, l_module):
|
||||||
"""Create the png of the dependency tree for a l_module"""
|
"""Create the png of the dependency tree for a l_module"""
|
||||||
|
|
||||||
|
# Don't update if we are not in the main repository
|
||||||
|
from is_master_repository import is_master_repository
|
||||||
|
if not is_master_repository:
|
||||||
|
return
|
||||||
|
|
||||||
basename = "tree_dependency"
|
basename = "tree_dependency"
|
||||||
path = '{0}.png'.format(basename)
|
path = '{0}.png'.format(basename)
|
||||||
|
|
||||||
@ -289,6 +294,12 @@ if __name__ == '__main__':
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
if arguments["create_git_ignore"]:
|
if arguments["create_git_ignore"]:
|
||||||
|
|
||||||
|
# Don't update if we are not in the main repository
|
||||||
|
from is_master_repository import is_master_repository
|
||||||
|
if not is_master_repository:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
path = os.path.join(module_abs, ".gitignore")
|
path = os.path.join(module_abs, ".gitignore")
|
||||||
|
|
||||||
with open(path, "w+") as f:
|
with open(path, "w+") as f:
|
||||||
|
@ -57,10 +57,48 @@ def save_new_module(path, l_child):
|
|||||||
f.write(D_KEY["needed_module"])
|
f.write(D_KEY["needed_module"])
|
||||||
f.write(D_KEY["documentation"])
|
f.write(D_KEY["documentation"])
|
||||||
|
|
||||||
|
with open(os.path.join(path, "%s.main.irp.f"%(module_name) ), "w") as f:
|
||||||
|
f.write("program {0}".format(module_name) )
|
||||||
|
f.write(""" implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! TODO
|
||||||
|
END_DOC
|
||||||
|
print *, ' _/ '
|
||||||
|
print *, ' -:\_?, _Jm####La '
|
||||||
|
print *, 'J"(:" > _]#AZ#Z#UUZ##, '
|
||||||
|
print *, '_,::./ %(|i%12XmX1*1XL _?, '
|
||||||
|
print *, ' \..\ _\(vmWQwodY+ia%lnL _",/ ( '
|
||||||
|
print *, ' .:< ]J=mQD?WXn<uQWmmvd, -.-:=!\'
|
||||||
|
print *, ' "{Z jC]QW|=3Zv)Bi3BmXv3 = _7'
|
||||||
|
print *, ' ]h[Z6)WQ;)jZs]C;|$BZv+, : ./ '
|
||||||
|
print *, ' -#sJX%$Wmm#ev]hinW#Xi:` c ; '
|
||||||
|
print *, ' #X#X23###1}vI$WWmX1>|,)nr" '
|
||||||
|
print *, ' 4XZ#Xov1v}=)vnXAX1nnv;1n" '
|
||||||
|
print *, ' ]XX#ZXoovvvivnnnlvvo2*i7 '
|
||||||
|
print *, ' "23Z#1S2oo2XXSnnnoSo2>v" '
|
||||||
|
print *, ' miX#L -~`""!!1}oSoe|i7 '
|
||||||
|
print *, ' 4cn#m, v221=|v[ '
|
||||||
|
print *, ' ]hI3Zma,;..__wXSe=+vo '
|
||||||
|
print *, ' ]Zov*XSUXXZXZXSe||vo2 '
|
||||||
|
print *, ' ]Z#><iiii|i||||==vn2( '
|
||||||
|
print *, ' ]Z#i<ii||+|=||=:{no2[ '
|
||||||
|
print *, ' ]ZUsiiiiivi|=||=vo22[ '
|
||||||
|
print *, ' ]XZvlliiIi|i=|+|vooo '
|
||||||
|
print *, ' =v1llli||||=|||||lii( '
|
||||||
|
print *, ' ]iillii||||||||=>=|< '
|
||||||
|
print *, ' -ziiiii||||||+||==+> '
|
||||||
|
print *, ' -%|+++||=|=+|=|==/ '
|
||||||
|
print *, ' -a>====+|====-:- '
|
||||||
|
print *, ' "~,- -- /- '
|
||||||
|
print *, ' -. )> '
|
||||||
|
print *, ' .~ +- '
|
||||||
|
print *, ' . .... : . '
|
||||||
|
print *, ' -------~ '
|
||||||
|
print *, ''
|
||||||
|
end
|
||||||
|
""")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def main(arguments):
|
||||||
arguments = docopt(__doc__)
|
|
||||||
|
|
||||||
if arguments["list"]:
|
if arguments["list"]:
|
||||||
|
|
||||||
if arguments["--installed"]:
|
if arguments["--installed"]:
|
||||||
@ -107,12 +145,14 @@ if __name__ == '__main__':
|
|||||||
save_new_module(path, l_child_reduce)
|
save_new_module(path, l_child_reduce)
|
||||||
|
|
||||||
print " [ OK ]"
|
print " [ OK ]"
|
||||||
print "Your module is created in the `plugins` directory."
|
|
||||||
print "You need to create some `.irp.f` to be able to install it."
|
|
||||||
# print "` {0} install {1} `".format(os.path.basename(__file__), name)
|
# print "` {0} install {1} `".format(os.path.basename(__file__), name)
|
||||||
print ""
|
print ""
|
||||||
|
arguments["create"]=False
|
||||||
|
arguments["install"]=True
|
||||||
|
main(arguments)
|
||||||
|
|
||||||
elif arguments["download"]:
|
elif arguments["download"]:
|
||||||
|
print "Not yet implemented"
|
||||||
pass
|
pass
|
||||||
# d_local = get_dict_child([QP_SRC])
|
# d_local = get_dict_child([QP_SRC])
|
||||||
# d_remote = get_dict_child(arguments["<path_folder>"])
|
# d_remote = get_dict_child(arguments["<path_folder>"])
|
||||||
@ -205,3 +245,8 @@ if __name__ == '__main__':
|
|||||||
except OSError:
|
except OSError:
|
||||||
print "%s is a core module which can't be removed" % module
|
print "%s is a core module which can't be removed" % module
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
arguments = docopt(__doc__)
|
||||||
|
main(arguments)
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ def get_url(path_module_rel):
|
|||||||
elif is_module(path_module_rel):
|
elif is_module(path_module_rel):
|
||||||
url = "http://github.com/LCPQ/quantum_package/tree/master/src"
|
url = "http://github.com/LCPQ/quantum_package/tree/master/src"
|
||||||
else:
|
else:
|
||||||
print "{0} Is not a valide module nor plugin".format(path_module_rel)
|
print "{0} Is not a valid module nor plugin".format(path_module_rel)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return os.path.join(url, path_module_rel)
|
return os.path.join(url, path_module_rel)
|
||||||
@ -155,10 +155,14 @@ def update_documentation(d_readmen, root_module):
|
|||||||
l_doc = []
|
l_doc = []
|
||||||
|
|
||||||
for irp in d_info[path]:
|
for irp in d_info[path]:
|
||||||
|
|
||||||
url = os.path.join(get_url(os.path.basename(path)), irp.file)
|
url = os.path.join(get_url(os.path.basename(path)), irp.file)
|
||||||
doc = extract_doc(root_module, irp.provider)
|
doc = extract_doc(root_module, irp.provider)
|
||||||
|
|
||||||
|
if ".irp.f_shell_" in irp.file:
|
||||||
|
l_doc += ["{0}".format(irp.provider),
|
||||||
|
doc,
|
||||||
|
""]
|
||||||
|
else:
|
||||||
l_doc += ["`{0} <{1}#L{2}>`_".format(irp.provider, url, irp.line),
|
l_doc += ["`{0} <{1}#L{2}>`_".format(irp.provider, url, irp.line),
|
||||||
doc,
|
doc,
|
||||||
""]
|
""]
|
||||||
@ -168,7 +172,15 @@ def update_documentation(d_readmen, root_module):
|
|||||||
|
|
||||||
d_readme[path]["documentation"] = "\n".join(l_doc_section)
|
d_readme[path]["documentation"] = "\n".join(l_doc_section)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
# Update documentation only if the remote repository is
|
||||||
|
# the main repository
|
||||||
|
from is_master_repository import is_master_repository
|
||||||
|
if not is_master_repository:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
arguments = docopt(__doc__)
|
arguments = docopt(__doc__)
|
||||||
|
|
||||||
if arguments["--root_module"]:
|
if arguments["--root_module"]:
|
||||||
@ -188,8 +200,8 @@ if __name__ == '__main__':
|
|||||||
fetch_splitted_data(d_readme, l_module_readme)
|
fetch_splitted_data(d_readme, l_module_readme)
|
||||||
except IOError:
|
except IOError:
|
||||||
print l_module_readme, "is not a module and/or",
|
print l_module_readme, "is not a module and/or",
|
||||||
print "have not a `README.rst` file inside"
|
print "has not a `README.rst` file inside"
|
||||||
print "Abort..."
|
print "Aborting..."
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
update_needed(d_readme)
|
update_needed(d_readme)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
name_to_elec = {"H": 1,
|
name_to_elec = {"X": 0,
|
||||||
|
"H": 1,
|
||||||
"He": 2,
|
"He": 2,
|
||||||
"Li": 3,
|
"Li": 3,
|
||||||
"Be": 4,
|
"Be": 4,
|
||||||
|
@ -58,6 +58,8 @@ def get_pseudo_str(l_atom):
|
|||||||
str_ = ""
|
str_ = ""
|
||||||
|
|
||||||
for a in l_atom:
|
for a in l_atom:
|
||||||
|
|
||||||
|
if a is not 'X':
|
||||||
l_cmd_atom = ["--atom", a]
|
l_cmd_atom = ["--atom", a]
|
||||||
|
|
||||||
l_cmd_head = [EMSL_path, "get_basis_data",
|
l_cmd_head = [EMSL_path, "get_basis_data",
|
||||||
@ -69,6 +71,22 @@ def get_pseudo_str(l_atom):
|
|||||||
stdout, _ = process.communicate()
|
stdout, _ = process.communicate()
|
||||||
str_ += stdout.strip() + "\n"
|
str_ += stdout.strip() + "\n"
|
||||||
|
|
||||||
|
else: # Dummy atoms
|
||||||
|
str_ += """Element Symbol: X
|
||||||
|
Number of replaced protons: 0
|
||||||
|
Number of projectors: 0
|
||||||
|
|
||||||
|
Pseudopotential data:
|
||||||
|
|
||||||
|
Local component:
|
||||||
|
Coeff. r^n Exp.
|
||||||
|
0.0 -1 0.
|
||||||
|
0.0 1 0.
|
||||||
|
0.0 0 0.
|
||||||
|
|
||||||
|
Non-local component:
|
||||||
|
Coeff. r^n Exp. Proj.
|
||||||
|
"""
|
||||||
return str_
|
return str_
|
||||||
|
|
||||||
|
|
||||||
|
14
scripts/utility/is_master_repository.py
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
pipe = subprocess.Popen("git config --get remote.origin.url", \
|
||||||
|
shell=True, stdout=subprocess.PIPE)
|
||||||
|
result = pipe.stdout.read()
|
||||||
|
is_master_repository = "LCPQ/quantum_package" in result
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
if is_master_repository:
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
sys.exit(-1)
|
@ -59,6 +59,7 @@
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!$OMP END PARALLEL DO
|
!$OMP END PARALLEL DO
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@ -262,13 +262,7 @@ END_PROVIDER
|
|||||||
logical :: exists
|
logical :: exists
|
||||||
integer :: j,i
|
integer :: j,i
|
||||||
integer :: i_hole,i_part,i_gen
|
integer :: i_hole,i_part,i_gen
|
||||||
PROVIDE ezfio_filename
|
|
||||||
!do j = 1, N_int
|
|
||||||
! inact_bitmask(j,1) = xor(generators_bitmask(j,1,1,1),cas_bitmask(j,1,1))
|
|
||||||
! inact_bitmask(j,2) = xor(generators_bitmask(j,2,1,1),cas_bitmask(j,2,1))
|
|
||||||
! virt_bitmask(j,1) = xor(generators_bitmask(j,1,2,1),cas_bitmask(j,1,1))
|
|
||||||
! virt_bitmask(j,2) = xor(generators_bitmask(j,2,2,1),cas_bitmask(j,2,1))
|
|
||||||
!enddo
|
|
||||||
n_inact_orb = 0
|
n_inact_orb = 0
|
||||||
n_virt_orb = 0
|
n_virt_orb = 0
|
||||||
if(N_generators_bitmask == 1)then
|
if(N_generators_bitmask == 1)then
|
||||||
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
@ -40,6 +40,12 @@ doc: Force the wave function to be an eigenfunction of S^2
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: False
|
default: False
|
||||||
|
|
||||||
|
[threshold_davidson]
|
||||||
|
type: Threshold
|
||||||
|
doc: Thresholds of Davidson's algorithm
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 1.e-8
|
||||||
|
|
||||||
[threshold_generators]
|
[threshold_generators]
|
||||||
type: Threshold
|
type: Threshold
|
||||||
doc: Thresholds on generators (fraction of the norm)
|
doc: Thresholds on generators (fraction of the norm)
|
||||||
@ -53,9 +59,10 @@ interface: ezfio,provider,ocaml
|
|||||||
default: 0.999
|
default: 0.999
|
||||||
|
|
||||||
[n_states_diag]
|
[n_states_diag]
|
||||||
type: integer
|
type: States_number
|
||||||
doc: n_states_diag
|
doc: n_states_diag
|
||||||
interface: ezfio,provider
|
default: 1
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
|
||||||
[n_int]
|
[n_int]
|
||||||
interface: ezfio
|
interface: ezfio
|
||||||
@ -89,24 +96,25 @@ doc: psi_det
|
|||||||
type: integer*8
|
type: integer*8
|
||||||
size: (determinants.n_int*determinants.bit_kind/8,2,determinants.n_det)
|
size: (determinants.n_int*determinants.bit_kind/8,2,determinants.n_det)
|
||||||
|
|
||||||
[det_num]
|
|
||||||
interface: ezfio,provider
|
|
||||||
doc: det_num
|
|
||||||
type: integer
|
|
||||||
|
|
||||||
[det_occ]
|
[det_occ]
|
||||||
interface: ezfio,provider
|
interface: ezfio,provider
|
||||||
doc: det_occ
|
doc: det_occ
|
||||||
type: integer
|
type: integer
|
||||||
size: (electrons.elec_alpha_num,determinants.det_num,2)
|
size: (electrons.elec_alpha_num,determinants.n_det,2)
|
||||||
|
|
||||||
[det_coef]
|
[det_coef]
|
||||||
interface: ezfio,provider
|
interface: ezfio,provider
|
||||||
doc: det_coef
|
doc: det_coef
|
||||||
type: double precision
|
type: double precision
|
||||||
size: (determinants.det_num)
|
size: (determinants.n_det)
|
||||||
|
|
||||||
[expected_s2]
|
[expected_s2]
|
||||||
interface: ezfio,provider
|
interface: ezfio,provider
|
||||||
doc: expcted_s2
|
doc: Expected value of S^2
|
||||||
type: double precision
|
type: double precision
|
||||||
|
|
||||||
|
[target_energy]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
doc: Energy that should be obtained when truncating the wave function (optional)
|
||||||
|
type: Energy
|
||||||
|
default: 0.
|
||||||
|
84
src/Determinants/Fock_diag.irp.f
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
subroutine build_fock_tmp(fock_diag_tmp,det_ref,Nint)
|
||||||
|
use bitmasks
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Build the diagonal of the Fock matrix corresponding to a generator
|
||||||
|
! determinant. F_00 is <i|H|i> = E0.
|
||||||
|
END_DOC
|
||||||
|
integer, intent(in) :: Nint
|
||||||
|
integer(bit_kind), intent(in) :: det_ref(Nint,2)
|
||||||
|
double precision, intent(out) :: fock_diag_tmp(2,mo_tot_num+1)
|
||||||
|
|
||||||
|
integer :: occ(Nint*bit_kind_size,2)
|
||||||
|
integer :: ne(2), i, j, ii, jj
|
||||||
|
double precision :: E0
|
||||||
|
|
||||||
|
! Compute Fock matrix diagonal elements
|
||||||
|
call bitstring_to_list_ab(det_ref,occ,Ne,Nint)
|
||||||
|
|
||||||
|
fock_diag_tmp = 0.d0
|
||||||
|
E0 = 0.d0
|
||||||
|
|
||||||
|
! Occupied MOs
|
||||||
|
do ii=1,elec_alpha_num
|
||||||
|
i = occ(ii,1)
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_mono_elec_integral(i,i)
|
||||||
|
E0 = E0 + mo_mono_elec_integral(i,i)
|
||||||
|
do jj=1,elec_alpha_num
|
||||||
|
j = occ(jj,1)
|
||||||
|
if (i==j) cycle
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj_anti(i,j)
|
||||||
|
E0 = E0 + 0.5d0*mo_bielec_integral_jj_anti(i,j)
|
||||||
|
enddo
|
||||||
|
do jj=1,elec_beta_num
|
||||||
|
j = occ(jj,2)
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj(i,j)
|
||||||
|
E0 = E0 + mo_bielec_integral_jj(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
do ii=1,elec_beta_num
|
||||||
|
i = occ(ii,2)
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_mono_elec_integral(i,i)
|
||||||
|
E0 = E0 + mo_mono_elec_integral(i,i)
|
||||||
|
do jj=1,elec_beta_num
|
||||||
|
j = occ(jj,2)
|
||||||
|
if (i==j) cycle
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj_anti(i,j)
|
||||||
|
E0 = E0 + 0.5d0*mo_bielec_integral_jj_anti(i,j)
|
||||||
|
enddo
|
||||||
|
do jj=1,elec_alpha_num
|
||||||
|
j = occ(jj,1)
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Virtual MOs
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
if (fock_diag_tmp(1,i) /= 0.d0) cycle
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_mono_elec_integral(i,i)
|
||||||
|
do jj=1,elec_alpha_num
|
||||||
|
j = occ(jj,1)
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj_anti(i,j)
|
||||||
|
enddo
|
||||||
|
do jj=1,elec_beta_num
|
||||||
|
j = occ(jj,2)
|
||||||
|
fock_diag_tmp(1,i) = fock_diag_tmp(1,i) + mo_bielec_integral_jj(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
do i=1,mo_tot_num
|
||||||
|
if (fock_diag_tmp(2,i) /= 0.d0) cycle
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_mono_elec_integral(i,i)
|
||||||
|
do jj=1,elec_beta_num
|
||||||
|
j = occ(jj,2)
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj_anti(i,j)
|
||||||
|
enddo
|
||||||
|
do jj=1,elec_alpha_num
|
||||||
|
j = occ(jj,1)
|
||||||
|
fock_diag_tmp(2,i) = fock_diag_tmp(2,i) + mo_bielec_integral_jj(i,j)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
fock_diag_tmp(1,mo_tot_num+1) = E0
|
||||||
|
fock_diag_tmp(2,mo_tot_num+1) = E0
|
||||||
|
|
||||||
|
end
|