mirror of
https://github.com/LCPQ/quantum_package
synced 2024-07-05 19:05:59 +02:00
Merge branch 'Pseudo'
This commit is contained in:
commit
1806b97cb8
|
@ -8,4 +8,4 @@ include Input_determinants_by_hand;;
|
||||||
include Input_electrons;;
|
include Input_electrons;;
|
||||||
include Input_mo_basis;;
|
include Input_mo_basis;;
|
||||||
include Input_nuclei;;
|
include Input_nuclei;;
|
||||||
include Input_auto_generated;;
|
include Input_auto_generated;;
|
||||||
|
|
|
@ -105,7 +105,7 @@ def write_ezfio(res, filename):
|
||||||
# Transformt H1 into H
|
# Transformt H1 into H
|
||||||
import re
|
import re
|
||||||
p = re.compile(ur'(\d*)$')
|
p = re.compile(ur'(\d*)$')
|
||||||
label = [p.sub("", x.name) for x in res.geometry]
|
label = [p.sub("", x.name).capitalize() for x in res.geometry]
|
||||||
ezfio.set_nuclei_nucl_label(label)
|
ezfio.set_nuclei_nucl_label(label)
|
||||||
|
|
||||||
ezfio.set_nuclei_nucl_coord(coord_x + coord_y + coord_z)
|
ezfio.set_nuclei_nucl_coord(coord_x + coord_y + coord_z)
|
||||||
|
|
27
scripts/ezfio_interface/upgrade_1.0_2.0.sh
Executable file
27
scripts/ezfio_interface/upgrade_1.0_2.0.sh
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Convert a old ezfio file (with option.irp.f ezfio_default)
|
||||||
|
# into a new EZFIO.cfg type
|
||||||
|
|
||||||
|
# Hartree Fock
|
||||||
|
# Changin the case, don't know if is needed or not
|
||||||
|
mv $1/Hartree_Fock $1/hartree_fock 2> /dev/null
|
||||||
|
|
||||||
|
mv $1/hartree_Fock/thresh_SCF $1/hartree_fock/thresh_scf 2> /dev/null
|
||||||
|
|
||||||
|
# BiInts
|
||||||
|
mv $1/bi_integrals $1/bielect_integrals 2> /dev/null
|
||||||
|
|
||||||
|
if [ -f $1/bielect_integrals/read_ao_integrals ]; then
|
||||||
|
if [ `cat $1/bielect_integrals/read_ao_integrals` -eq "True" ]
|
||||||
|
then
|
||||||
|
echo "Read" > $1/bielect_integrals/disk_access_ao_integrals
|
||||||
|
|
||||||
|
elif [ `cat bielect_integrals/write_ao_integrals` -eq "True" ]
|
||||||
|
then
|
||||||
|
echo "Write" > $1/bielect_integrals/disk_access_ao_integrals
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "None" > $1/bielect_integrals/disk_access_ao_integrals
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -42,9 +42,9 @@ then
|
||||||
echo "ERROR"
|
echo "ERROR"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
${EMSL_API_ROOT}/EMSL_api.py get_basis_data --treat_l --save --path="${tmpfile}" --basis="${basis}" $atoms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#${EMSL_API_ROOT}/EMSL_api.py get_basis_data --treat_l --save --path="${tmpfile}" --basis="${basis}"
|
||||||
|
|
||||||
|
${EMSL_API_ROOT}/EMSL_api.py get_basis_data --save --path="${tmpfile}" --basis="${basis}" --db_path="${EMSL_API_ROOT}/db/Pseudo.db"
|
12
scripts/pseudo/create_ez.sh
Executable file
12
scripts/pseudo/create_ez.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# $1 name
|
||||||
|
# $2 mult
|
||||||
|
|
||||||
|
echo "name" $1
|
||||||
|
echo "basis" $2
|
||||||
|
echo "mul" $3
|
||||||
|
echo "\`get_basis.sh\` need to be changed"
|
||||||
|
|
||||||
|
rm -R $1.ezfio
|
||||||
|
qp_create_ezfio_from_xyz $1.xyz -b $2 -m $3
|
||||||
|
~/quantum_package/scripts/pseudo/put_pseudo_in_ezfio.py $1.ezfio
|
118
scripts/pseudo/elts_num_ele.py
Normal file
118
scripts/pseudo/elts_num_ele.py
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
name_to_elec = {"H": 1,
|
||||||
|
"He": 2,
|
||||||
|
"Li": 3,
|
||||||
|
"Be": 4,
|
||||||
|
"B": 5,
|
||||||
|
"C": 6,
|
||||||
|
"N": 7,
|
||||||
|
"O": 8,
|
||||||
|
"F": 9,
|
||||||
|
"Ne": 10,
|
||||||
|
"Na": 11,
|
||||||
|
"Mg": 12,
|
||||||
|
"Al": 13,
|
||||||
|
"Si": 14,
|
||||||
|
"P": 15,
|
||||||
|
"S": 16,
|
||||||
|
"Cl": 17,
|
||||||
|
"Ar": 18,
|
||||||
|
"K": 19,
|
||||||
|
"Ca": 20,
|
||||||
|
"Sc": 21,
|
||||||
|
"Ti": 22,
|
||||||
|
"V": 23,
|
||||||
|
"Cr": 24,
|
||||||
|
"Mn": 25,
|
||||||
|
"Fe": 26,
|
||||||
|
"Co": 27,
|
||||||
|
"Ni": 28,
|
||||||
|
"Cu": 29,
|
||||||
|
"Zn": 30,
|
||||||
|
"Ga": 31,
|
||||||
|
"Ge": 32,
|
||||||
|
"As": 33,
|
||||||
|
"Se": 34,
|
||||||
|
"Br": 35,
|
||||||
|
"Kr": 36,
|
||||||
|
"Rb": 37,
|
||||||
|
"Sr": 38,
|
||||||
|
"Y": 39,
|
||||||
|
"Zr": 40,
|
||||||
|
"Nb": 41,
|
||||||
|
"Mo": 42,
|
||||||
|
"Tc": 43,
|
||||||
|
"Ru": 44,
|
||||||
|
"Rh": 45,
|
||||||
|
"Pd": 46,
|
||||||
|
"Ag": 47,
|
||||||
|
"Cd": 48,
|
||||||
|
"In": 49,
|
||||||
|
"Sn": 50,
|
||||||
|
"Sb": 51,
|
||||||
|
"Te": 52,
|
||||||
|
"I": 53,
|
||||||
|
"Xe": 54,
|
||||||
|
"Cs": 55,
|
||||||
|
"Ba": 56,
|
||||||
|
"La": 57,
|
||||||
|
"Ce": 58,
|
||||||
|
"Pr": 59,
|
||||||
|
"Nd": 60,
|
||||||
|
"Pm": 61,
|
||||||
|
"Sm": 62,
|
||||||
|
"Eu": 63,
|
||||||
|
"Gd": 64,
|
||||||
|
"Tb": 65,
|
||||||
|
"Dy": 66,
|
||||||
|
"Ho": 67,
|
||||||
|
"Er": 68,
|
||||||
|
"Tm": 69,
|
||||||
|
"Yb": 70,
|
||||||
|
"Lu": 71,
|
||||||
|
"Hf": 72,
|
||||||
|
"Ta": 73,
|
||||||
|
"W": 74,
|
||||||
|
"Re": 75,
|
||||||
|
"Os": 76,
|
||||||
|
"Ir": 77,
|
||||||
|
"Pt": 78,
|
||||||
|
"Au": 79,
|
||||||
|
"Hg": 80,
|
||||||
|
"Tl": 81,
|
||||||
|
"Pb": 82,
|
||||||
|
"Bi": 83,
|
||||||
|
"Po": 84,
|
||||||
|
"At": 85,
|
||||||
|
"Rn": 86,
|
||||||
|
"Fr": 87,
|
||||||
|
"Ra": 88,
|
||||||
|
"Ac": 89,
|
||||||
|
"Th": 90,
|
||||||
|
"Pa": 91,
|
||||||
|
"U": 92,
|
||||||
|
"Np": 93,
|
||||||
|
"Pu": 94,
|
||||||
|
"Am": 95,
|
||||||
|
"Cm": 96,
|
||||||
|
"Bk": 97,
|
||||||
|
"Cf": 98,
|
||||||
|
"Es": 99,
|
||||||
|
"Fm": 100,
|
||||||
|
"Md": 101,
|
||||||
|
"No": 102,
|
||||||
|
"Lr": 103,
|
||||||
|
"Rf": 104,
|
||||||
|
"Db": 105,
|
||||||
|
"Sg": 106,
|
||||||
|
"Bh": 107,
|
||||||
|
"Hs": 108,
|
||||||
|
"Mt": 109,
|
||||||
|
"Ds": 110,
|
||||||
|
"Rg": 111,
|
||||||
|
"Cn": 112,
|
||||||
|
"Uut": 113,
|
||||||
|
"Fl": 114,
|
||||||
|
"Uup": 115,
|
||||||
|
"Lv": 116,
|
||||||
|
"Uus": 117,
|
||||||
|
"Uuo": 118}
|
336
scripts/pseudo/put_pseudo_in_ezfio.py
Executable file
336
scripts/pseudo/put_pseudo_in_ezfio.py
Executable file
|
@ -0,0 +1,336 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Create the pseudo potential for a given atom
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
put_pseudo_in_ezfio.py <ezfio_path>
|
||||||
|
|
||||||
|
Help:
|
||||||
|
atom is the Abreviation of the atom
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from docopt import docopt
|
||||||
|
|
||||||
|
from subprocess import Popen, PIPE
|
||||||
|
|
||||||
|
qpackage_root = os.environ['QPACKAGE_ROOT']
|
||||||
|
|
||||||
|
EZFIO = "{0}/EZFIO".format(qpackage_root)
|
||||||
|
sys.path = [EZFIO + "/Python"] + sys.path
|
||||||
|
|
||||||
|
from ezfio import ezfio
|
||||||
|
|
||||||
|
import re
|
||||||
|
p = re.compile(ur'\|(\d+)><\d+\|')
|
||||||
|
|
||||||
|
|
||||||
|
def get_pseudo_str(l_atom):
|
||||||
|
"""
|
||||||
|
Run EMSL_local for geting the str of the speudo potential
|
||||||
|
|
||||||
|
str_ele :
|
||||||
|
Element Symbol: Na
|
||||||
|
Number of replaced protons: 10
|
||||||
|
Number of projectors: 2
|
||||||
|
|
||||||
|
Pseudopotential data:
|
||||||
|
|
||||||
|
Local component:
|
||||||
|
Coeff. r^n Exp.
|
||||||
|
1.00000000 -1 5.35838717
|
||||||
|
5.35838717 1 3.67918975
|
||||||
|
-2.07764789 0 1.60507673
|
||||||
|
|
||||||
|
Non-local component:
|
||||||
|
Coeff. r^n Exp. Proj.
|
||||||
|
10.69640234 0 1.32389367 |0><0|
|
||||||
|
10.11238853 0 1.14052020 |1><1|
|
||||||
|
"""
|
||||||
|
|
||||||
|
EMSL_root = "{0}/EMSL_Basis/".format(qpackage_root)
|
||||||
|
EMSL_path = "{0}/EMSL_api.py".format(EMSL_root)
|
||||||
|
db_path = "{0}/db/Pseudo.db".format(EMSL_root)
|
||||||
|
|
||||||
|
str_ = ""
|
||||||
|
|
||||||
|
for a in l_atom:
|
||||||
|
l_cmd_atom = ["--atom", a]
|
||||||
|
|
||||||
|
l_cmd_head = [EMSL_path, "get_basis_data",
|
||||||
|
"--db_path", db_path,
|
||||||
|
"--basis", "BFD-Pseudo"]
|
||||||
|
|
||||||
|
process = Popen(l_cmd_head + l_cmd_atom, stdout=PIPE, stderr=PIPE)
|
||||||
|
|
||||||
|
stdout, _ = process.communicate()
|
||||||
|
str_ += stdout.strip() + "\n"
|
||||||
|
|
||||||
|
return str_
|
||||||
|
|
||||||
|
|
||||||
|
def get_v_n_dz_local(str_ele):
|
||||||
|
"""
|
||||||
|
From a str_ele of the pseudo (aka only one ele in the str)
|
||||||
|
get the list ussefull for the Local potential : v_k n_k and dz_k
|
||||||
|
"""
|
||||||
|
l_v_k = []
|
||||||
|
l_n_k = []
|
||||||
|
l_dz_k = []
|
||||||
|
|
||||||
|
for l in str_ele.splitlines():
|
||||||
|
try:
|
||||||
|
v, n, dz = l.split()
|
||||||
|
v = float(v)
|
||||||
|
n = int(n)
|
||||||
|
dz = float(dz)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
l_v_k.append(v)
|
||||||
|
l_n_k.append(n)
|
||||||
|
l_dz_k.append(dz)
|
||||||
|
|
||||||
|
return l_v_k, l_n_k, l_dz_k
|
||||||
|
|
||||||
|
|
||||||
|
def get_v_n_dz_l_nonlocal(str_ele):
|
||||||
|
"""
|
||||||
|
From a str_ele of the pseudo (aka only one ele in the str)
|
||||||
|
get the list ussefull for the non Local potential
|
||||||
|
v_kl (v, l)
|
||||||
|
n_k (v, l)
|
||||||
|
dz_k (dz ,l)
|
||||||
|
"""
|
||||||
|
l_v_kl = []
|
||||||
|
l_n_kl = []
|
||||||
|
l_dz_kl = []
|
||||||
|
|
||||||
|
for l in str_ele.splitlines():
|
||||||
|
try:
|
||||||
|
v, n, dz, proj = l.split()
|
||||||
|
v = float(v)
|
||||||
|
n = int(n)
|
||||||
|
dz = float(dz)
|
||||||
|
l = int(p.match(proj).group(1))
|
||||||
|
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
l_v_kl.append([v])
|
||||||
|
l_n_kl.append([n])
|
||||||
|
l_dz_kl.append([dz])
|
||||||
|
|
||||||
|
if not l_v_kl:
|
||||||
|
l_v_kl.append([0.])
|
||||||
|
l_n_kl.append([0])
|
||||||
|
l_dz_kl.append([0.])
|
||||||
|
|
||||||
|
return l_v_kl, l_n_kl, l_dz_kl
|
||||||
|
|
||||||
|
|
||||||
|
def get_zeff_alpha_beta(str_ele):
|
||||||
|
"""
|
||||||
|
Return the the zeff, alpha num elec and beta num elec
|
||||||
|
Assert ezfio_set_file alredy defined
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
# ___
|
||||||
|
# | ._ o _|_
|
||||||
|
# _|_ | | | |_
|
||||||
|
#
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~ #
|
||||||
|
# s t r _ e l e #
|
||||||
|
# ~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
# m = re.search('Element Symbol: ([a-zA-Z]+)', str_ele)
|
||||||
|
# name = m.group(1).capitalize()
|
||||||
|
name = str_ele.split("\n")[0].strip().capitalize()
|
||||||
|
|
||||||
|
m = re.search('Number of replaced protons: (\d+)', str_ele)
|
||||||
|
z_remove = int(m.group(1))
|
||||||
|
|
||||||
|
# _
|
||||||
|
# |_) _. ._ _ _
|
||||||
|
# | (_| | _> (/_
|
||||||
|
#
|
||||||
|
|
||||||
|
from elts_num_ele import name_to_elec
|
||||||
|
z = name_to_elec[name]
|
||||||
|
|
||||||
|
z_eff = z - z_remove
|
||||||
|
|
||||||
|
alpha = (z_remove / 2)
|
||||||
|
beta = (z_remove / 2)
|
||||||
|
|
||||||
|
# _
|
||||||
|
# |_) _ _|_ ._ ._
|
||||||
|
# | \ (/_ |_ |_| | | |
|
||||||
|
#
|
||||||
|
|
||||||
|
return [z_eff, alpha, beta]
|
||||||
|
|
||||||
|
|
||||||
|
def add_zero(array, size, type):
|
||||||
|
for add in xrange(len(array), size):
|
||||||
|
array.append([type(0)])
|
||||||
|
|
||||||
|
return array
|
||||||
|
|
||||||
|
|
||||||
|
def make_it_square(matrix, dim, type=float):
|
||||||
|
"""
|
||||||
|
matix the matrix to squate
|
||||||
|
dim array [lmax, kmax]
|
||||||
|
type the null value you want
|
||||||
|
[[[28.59107316], [19.37583724]], [[50.25646328]]]
|
||||||
|
=>
|
||||||
|
[[[28.59107316], [19.37583724]], [[50.25646328], [0.0]]]
|
||||||
|
"""
|
||||||
|
|
||||||
|
lmax = dim[0]
|
||||||
|
kmax = dim[1]
|
||||||
|
|
||||||
|
for l_list in matrix:
|
||||||
|
|
||||||
|
l_list = add_zero(l_list, lmax, type)
|
||||||
|
|
||||||
|
for k_list in list_:
|
||||||
|
k_list = add_zero(k_list, kmax, type)
|
||||||
|
|
||||||
|
return matrix
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
arguments = docopt(__doc__)
|
||||||
|
# ___
|
||||||
|
# | ._ o _|_
|
||||||
|
# _|_ | | | |_
|
||||||
|
#
|
||||||
|
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
# E Z F I O #
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
|
||||||
|
ezfio_path = arguments["<ezfio_path>"]
|
||||||
|
ezfio_path = os.path.expanduser(ezfio_path)
|
||||||
|
ezfio_path = os.path.expandvars(ezfio_path)
|
||||||
|
ezfio_path = os.path.abspath(ezfio_path)
|
||||||
|
|
||||||
|
ezfio.set_file("{0}".format(ezfio_path))
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
# P s e u d o _ d a t a #
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
l_ele = ezfio.get_nuclei_nucl_label()
|
||||||
|
str_ = get_pseudo_str(l_ele)
|
||||||
|
|
||||||
|
# _
|
||||||
|
# |_) _. ._ _ _
|
||||||
|
# | (_| | _> (/_
|
||||||
|
#
|
||||||
|
|
||||||
|
l_str_ele = [str_ele for str_ele in str_.split("Element Symbol: ")
|
||||||
|
if str_ele]
|
||||||
|
|
||||||
|
for i in "l_zeff v_k n_k dz_k v_kl n_kl dz_kl".split():
|
||||||
|
exec("{0} = []".format(i))
|
||||||
|
|
||||||
|
alpha_tot = 0
|
||||||
|
beta_tot = 0
|
||||||
|
|
||||||
|
for str_ele in l_str_ele:
|
||||||
|
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
# S p l i t #
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
|
||||||
|
l = str_ele.find("Local component:")
|
||||||
|
nl = str_ele.find("Non-local component")
|
||||||
|
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
# L o c a l #
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
|
||||||
|
l_v, l_n, l_dz = get_v_n_dz_local(str_ele[l:nl])
|
||||||
|
|
||||||
|
v_k.append(l_v)
|
||||||
|
n_k.append(l_n)
|
||||||
|
dz_k.append(l_dz)
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~#~#~ #
|
||||||
|
# N o n _ L o c a l #
|
||||||
|
# ~#~#~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
l_v_kl, l_n_kl, l_dz_kl = get_v_n_dz_l_nonlocal(str_ele[nl:])
|
||||||
|
|
||||||
|
v_kl.append(l_v_kl)
|
||||||
|
n_kl.append(l_n_kl)
|
||||||
|
dz_kl.append(l_dz_kl)
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
# Z _ e f f , a l p h a / b e t a _ e l e c #
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
zeff, alpha, beta = get_zeff_alpha_beta(str_ele)
|
||||||
|
|
||||||
|
alpha_tot += alpha
|
||||||
|
beta_tot += beta
|
||||||
|
l_zeff.append(zeff)
|
||||||
|
# _
|
||||||
|
# /\ _| _| _|_ _ _ _ _|_ o _
|
||||||
|
# /--\ (_| (_| |_ (_) (/_ /_ | | (_)
|
||||||
|
#
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
# Z _ e f f , a l p h a / b e t a _ e l e c #
|
||||||
|
# ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
ezfio.nuclei_nucl_charge = l_zeff
|
||||||
|
|
||||||
|
alpha_tot = ezfio.get_electrons_elec_alpha_num() - alpha_tot
|
||||||
|
beta_tot = ezfio.get_electrons_elec_beta_num() - beta_tot
|
||||||
|
|
||||||
|
ezfio.electrons_elec_alpha_num = alpha_tot
|
||||||
|
ezfio.electrons_elec_beta_num = beta_tot
|
||||||
|
|
||||||
|
# Change all the array 'cause EZFIO
|
||||||
|
# v_kl (v, l) => v_kl(l,v)
|
||||||
|
# v_kl => zip(*_v_kl)
|
||||||
|
# [[7.0, 79.74474797, -49.45159098], [1.0, 5.41040609, -4.60151975]]
|
||||||
|
# [(7.0, 1.0), (79.74474797, 5.41040609), (-49.45159098, -4.60151975)]
|
||||||
|
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
# L o c a l #
|
||||||
|
# ~#~#~#~#~ #
|
||||||
|
|
||||||
|
klocmax = max([len(i) for i in v_k])
|
||||||
|
ezfio.pseudo_klocmax = klocmax
|
||||||
|
|
||||||
|
ezfio.pseudo_v_k = zip(*v_k)
|
||||||
|
ezfio.pseudo_n_k = zip(*n_k)
|
||||||
|
ezfio.pseudo_dz_k = zip(*dz_k)
|
||||||
|
|
||||||
|
# ~#~#~#~#~#~#~#~#~ #
|
||||||
|
# N o n _ L o c a l #
|
||||||
|
# ~#~#~#~#~#~#~#~#~ #
|
||||||
|
|
||||||
|
lmax = max([len(i) for i in v_kl])
|
||||||
|
kmax = max([len(sublist) for list_ in v_kl for sublist in list_])
|
||||||
|
|
||||||
|
ezfio.pseudo_lmaxpo = lmax
|
||||||
|
ezfio.pseudo_kmax = kmax
|
||||||
|
|
||||||
|
v_kl = make_it_square(v_kl, [lmax, kmax])
|
||||||
|
n_kl = make_it_square(n_kl, [lmax, kmax], int)
|
||||||
|
dz_kl = make_it_square(dz_kl, [lmax, kmax])
|
||||||
|
|
||||||
|
ezfio.pseudo_v_kl = zip(*v_kl)
|
||||||
|
ezfio.pseudo_n_kl = zip(*n_kl)
|
||||||
|
ezfio.pseudo_dz_kl = zip(*dz_kl)
|
|
@ -1,6 +1,6 @@
|
||||||
# Define here all new external source files and objects.Don't forget to prefix the
|
# Define here all new external source files and objects.Don't forget to prefix the
|
||||||
# object files with IRPF90_temp/
|
# object files with IRPF90_temp/
|
||||||
SRC=
|
SRC=int.f90
|
||||||
OBJ=
|
OBJ=IRPF90_temp/int.o
|
||||||
|
|
||||||
include $(QPACKAGE_ROOT)/src/Makefile.common
|
include $(QPACKAGE_ROOT)/src/Makefile.common
|
|
@ -57,44 +57,80 @@ Documentation
|
||||||
array of the mono electronic hamiltonian on the MOs basis
|
array of the mono electronic hamiltonian on the MOs basis
|
||||||
: sum of the kinetic and nuclear electronic potential
|
: sum of the kinetic and nuclear electronic potential
|
||||||
|
|
||||||
|
`a_coef <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L252>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`b_coef <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L257>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`ddfact2 <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L243>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`erf0 <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L105>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`gammln <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L271>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`gammp <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L133>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`gcf <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L211>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`gser <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L167>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`rinteg <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L47>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`rintgauss <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L31>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`sabpartial <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/need.irp.f#L2>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
`orthonormalize_mos <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/orthonormalize.irp.f#L1>`_
|
`orthonormalize_mos <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/orthonormalize.irp.f#L1>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`ao_nucl_elec_integral <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L1>`_
|
`ao_nucl_elec_integral <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L1>`_
|
||||||
interaction nuclear electron
|
interaction nuclear electron
|
||||||
|
|
||||||
`ao_nucl_elec_integral_per_atom <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L67>`_
|
`ao_nucl_elec_integral_per_atom <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L243>`_
|
||||||
ao_nucl_elec_integral_per_atom(i,j,k) = -<AO(i)|1/|r-Rk|AO(j)>
|
ao_nucl_elec_integral_per_atom(i,j,k) = -<AO(i)|1/|r-Rk|AO(j)>
|
||||||
where Rk is the geometry of the kth atom
|
where Rk is the geometry of the kth atom
|
||||||
|
|
||||||
`give_polynom_mult_center_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L214>`_
|
`ao_nucl_elec_integral_pseudo <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L72>`_
|
||||||
|
interaction nuclear electron
|
||||||
|
|
||||||
|
`give_polynom_mult_center_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L389>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`i_x1_pol_mult_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L342>`_
|
`i_x1_pol_mult_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L517>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`i_x2_pol_mult_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L413>`_
|
`i_x2_pol_mult_mono_elec <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L588>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`int_gaus_pol <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L484>`_
|
`int_gaus_pol <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L659>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`nai_pol_mult <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L135>`_
|
`nai_pol_mult <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L310>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`v_e_n <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L465>`_
|
`v_e_n <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L640>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`v_phi <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L529>`_
|
`v_phi <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L704>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`v_r <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L513>`_
|
`v_r <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L688>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`v_theta <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L542>`_
|
`v_theta <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L717>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`wallis <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L558>`_
|
`wallis <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_ao_ints.irp.f#L733>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`mo_nucl_elec_integral <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_mo_ints.irp.f#L1>`_
|
`mo_nucl_elec_integral <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/pot_mo_ints.irp.f#L1>`_
|
||||||
|
@ -215,5 +251,8 @@ Documentation
|
||||||
array of the integrals of MO_i * y^2 MO_j
|
array of the integrals of MO_i * y^2 MO_j
|
||||||
array of the integrals of MO_i * z^2 MO_j
|
array of the integrals of MO_i * z^2 MO_j
|
||||||
|
|
||||||
|
`compute_integrals_pseudo <http://github.com/LCPQ/quantum_package/tree/master/src/MonoInts/test_michel.irp.f#L58>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2101
src/MonoInts/int.f90
Normal file
2101
src/MonoInts/int.f90
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -4,63 +4,239 @@
|
||||||
END_DOC
|
END_DOC
|
||||||
implicit none
|
implicit none
|
||||||
double precision :: alpha, beta, gama, delta
|
double precision :: alpha, beta, gama, delta
|
||||||
integer :: i_c,num_A,num_B
|
integer :: num_A,num_B
|
||||||
double precision :: A_center(3),B_center(3),C_center(3)
|
double precision :: A_center(3),B_center(3),C_center(3)
|
||||||
integer :: power_A(3),power_B(3)
|
integer :: power_A(3),power_B(3)
|
||||||
integer :: i,j,k,l,n_pt_in,m
|
integer :: i,j,k,l,n_pt_in,m
|
||||||
double precision ::overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
|
double precision ::overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
|
||||||
integer :: nucl_numC
|
|
||||||
! Important for OpenMP
|
|
||||||
|
|
||||||
ao_nucl_elec_integral = 0.d0
|
ao_nucl_elec_integral = ao_nucl_elec_integral_pseudo ! 0.d0
|
||||||
|
|
||||||
|
! _
|
||||||
|
! /| / |_)
|
||||||
|
! | / | \
|
||||||
|
!
|
||||||
|
|
||||||
!$OMP PARALLEL &
|
!$OMP PARALLEL &
|
||||||
!$OMP DEFAULT (NONE) &
|
!$OMP DEFAULT (NONE) &
|
||||||
!$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,C_center,power_A,power_B, &
|
!$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,C_center,power_A,power_B, &
|
||||||
!$OMP num_A,num_B,Z,c,n_pt_in) &
|
!$OMP num_A,num_B,Z,c,n_pt_in) &
|
||||||
!$OMP SHARED (ao_num,ao_prim_num,ao_expo_transp,ao_power,ao_nucl,nucl_coord,ao_coef_transp, &
|
!$OMP SHARED (ao_num,ao_prim_num,ao_expo_transp,ao_power,ao_nucl,nucl_coord,ao_coef_transp, &
|
||||||
!$OMP n_pt_max_integrals,ao_nucl_elec_integral,nucl_num,nucl_charge)
|
!$OMP n_pt_max_integrals,ao_nucl_elec_integral,nucl_num,nucl_charge)
|
||||||
n_pt_in = n_pt_max_integrals
|
|
||||||
!$OMP DO SCHEDULE (guided)
|
n_pt_in = n_pt_max_integrals
|
||||||
do j = 1, ao_num
|
|
||||||
power_A(1)= ao_power(j,1)
|
!$OMP DO SCHEDULE (guided)
|
||||||
power_A(2)= ao_power(j,2)
|
|
||||||
power_A(3)= ao_power(j,3)
|
do j = 1, ao_num
|
||||||
num_A = ao_nucl(j)
|
num_A = ao_nucl(j)
|
||||||
A_center(1) = nucl_coord(num_A,1)
|
power_A(1:3)= ao_power(j,1:3)
|
||||||
A_center(2) = nucl_coord(num_A,2)
|
A_center(1:3) = nucl_coord(num_A,1:3)
|
||||||
A_center(3) = nucl_coord(num_A,3)
|
|
||||||
do i = 1, ao_num
|
do i = 1, ao_num
|
||||||
power_B(1)= ao_power(i,1)
|
|
||||||
power_B(2)= ao_power(i,2)
|
|
||||||
power_B(3)= ao_power(i,3)
|
|
||||||
num_B = ao_nucl(i)
|
num_B = ao_nucl(i)
|
||||||
B_center(1) = nucl_coord(num_B,1)
|
power_B(1:3)= ao_power(i,1:3)
|
||||||
B_center(2) = nucl_coord(num_B,2)
|
B_center(1:3) = nucl_coord(num_B,1:3)
|
||||||
B_center(3) = nucl_coord(num_B,3)
|
|
||||||
do l=1,ao_prim_num(j)
|
do l=1,ao_prim_num(j)
|
||||||
alpha = ao_expo_transp(l,j)
|
alpha = ao_expo_transp(l,j)
|
||||||
|
|
||||||
do m=1,ao_prim_num(i)
|
do m=1,ao_prim_num(i)
|
||||||
beta = ao_expo_transp(m,i)
|
beta = ao_expo_transp(m,i)
|
||||||
c = 0.d0
|
|
||||||
do k = 1, nucl_num
|
double precision :: c
|
||||||
double precision :: Z,c
|
c = 0.d0
|
||||||
Z = nucl_charge(k)
|
|
||||||
C_center(1) = nucl_coord(k,1)
|
do k = 1, nucl_num
|
||||||
C_center(2) = nucl_coord(k,2)
|
double precision :: Z
|
||||||
C_center(3) = nucl_coord(k,3)
|
Z = nucl_charge(k)
|
||||||
c = c+Z*NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)
|
|
||||||
|
C_center(1:3) = nucl_coord(k,1:3)
|
||||||
|
|
||||||
|
c = c - Z*NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)
|
||||||
|
|
||||||
|
enddo
|
||||||
|
ao_nucl_elec_integral(i,j) = ao_nucl_elec_integral(i,j) + &
|
||||||
|
ao_coef_transp(l,j)*ao_coef_transp(m,i)*c
|
||||||
|
enddo
|
||||||
enddo
|
enddo
|
||||||
ao_nucl_elec_integral(i,j) = ao_nucl_elec_integral(i,j) - &
|
|
||||||
ao_coef_transp(l,j)*ao_coef_transp(m,i)*c
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!$OMP END DO
|
!$OMP END DO
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, ao_nucl_elec_integral_pseudo, (ao_num_align,ao_num)]
|
||||||
|
BEGIN_DOC
|
||||||
|
! interaction nuclear electron
|
||||||
|
END_DOC
|
||||||
|
implicit none
|
||||||
|
double precision :: alpha, beta, gama, delta
|
||||||
|
integer :: num_A,num_B
|
||||||
|
double precision :: A_center(3),B_center(3),C_center(3)
|
||||||
|
integer :: power_A(3),power_B(3)
|
||||||
|
integer :: i,j,k,l,n_pt_in,m
|
||||||
|
double precision :: Vloc, Vpseudo
|
||||||
|
|
||||||
|
double precision :: cpu_1, cpu_2, wall_1, wall_2, wall_0
|
||||||
|
integer :: thread_num
|
||||||
|
|
||||||
|
ao_nucl_elec_integral_pseudo = 0.d0
|
||||||
|
|
||||||
|
!
|
||||||
|
! | _ _ _. |
|
||||||
|
! |_ (_) (_ (_| |
|
||||||
|
!
|
||||||
|
!! Parameters of the local part of pseudo:
|
||||||
|
|
||||||
|
integer klocmax
|
||||||
|
integer, allocatable :: n_k(:,:)
|
||||||
|
double precision, allocatable :: v_k(:,:), dz_k(:,:)
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_klocmax(klocmax)
|
||||||
|
|
||||||
|
allocate(n_k(nucl_num,klocmax),v_k(nucl_num,klocmax), dz_k(nucl_num,klocmax))
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_v_k(v_k)
|
||||||
|
call ezfio_get_pseudo_n_k(n_k)
|
||||||
|
call ezfio_get_pseudo_dz_k(dz_k)
|
||||||
|
|
||||||
|
!! Dump array
|
||||||
|
integer, allocatable :: n_k_dump(:)
|
||||||
|
double precision, allocatable :: v_k_dump(:), dz_k_dump(:)
|
||||||
|
|
||||||
|
allocate(n_k_dump(1:klocmax), v_k_dump(1:klocmax), dz_k_dump(1:klocmax))
|
||||||
|
|
||||||
|
|
||||||
|
!
|
||||||
|
! |\ | _ ._ | _ _ _. |
|
||||||
|
! | \| (_) | | | (_) (_ (_| |
|
||||||
|
!
|
||||||
|
!! Parameters of non local part of pseudo:
|
||||||
|
|
||||||
|
integer :: kmax,lmax
|
||||||
|
integer, allocatable :: n_kl(:,:,:)
|
||||||
|
double precision, allocatable :: v_kl(:,:,:), dz_kl(:,:,:)
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_lmaxpo(lmax)
|
||||||
|
call ezfio_get_pseudo_kmax(kmax)
|
||||||
|
!lmax plus one -> lmax
|
||||||
|
lmax = lmax - 1
|
||||||
|
|
||||||
|
allocate(n_kl(nucl_num,kmax,0:lmax), v_kl(nucl_num,kmax,0:lmax), dz_kl(nucl_num,kmax,0:lmax))
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_n_kl(n_kl)
|
||||||
|
call ezfio_get_pseudo_v_kl(v_kl)
|
||||||
|
call ezfio_get_pseudo_dz_kl(dz_kl)
|
||||||
|
|
||||||
|
|
||||||
|
!! Dump array
|
||||||
|
integer, allocatable :: n_kl_dump(:,:)
|
||||||
|
double precision, allocatable :: v_kl_dump(:,:), dz_kl_dump(:,:)
|
||||||
|
|
||||||
|
allocate(n_kl_dump(kmax,0:lmax), v_kl_dump(kmax,0:lmax), dz_kl_dump(kmax,0:lmax))
|
||||||
|
|
||||||
|
! _
|
||||||
|
! / _. | _ |
|
||||||
|
! \_ (_| | (_ |_| |
|
||||||
|
!
|
||||||
|
|
||||||
|
write(output_monoints,*) 'Providing the nuclear electron pseudo integrals '
|
||||||
|
|
||||||
|
call wall_time(wall_1)
|
||||||
|
call cpu_time(cpu_1)
|
||||||
|
|
||||||
|
!$OMP PARALLEL &
|
||||||
|
!$OMP DEFAULT (NONE) &
|
||||||
|
!$OMP PRIVATE (i,j,k,l,m,alpha,beta,A_center,B_center,C_center,power_A,power_B, &
|
||||||
|
!$OMP num_A,num_B,Z,c,n_pt_in, &
|
||||||
|
!$OMP v_k_dump,n_k_dump, dz_k_dump, n_kl_dump, v_kl_dump, dz_kl_dump, &
|
||||||
|
!$OMP wall_0,wall_2,thread_num, output_monoints) &
|
||||||
|
!$OMP SHARED (ao_num,ao_prim_num,ao_expo_transp,ao_power,ao_nucl,nucl_coord,ao_coef_transp, &
|
||||||
|
!$OMP n_pt_max_integrals,ao_nucl_elec_integral_pseudo,nucl_num,nucl_charge, &
|
||||||
|
!$OMP klocmax,lmax,kmax,v_k,n_k, dz_k, n_kl, v_kl, dz_kl, &
|
||||||
|
!$OMP wall_1)
|
||||||
|
|
||||||
|
n_pt_in = n_pt_max_integrals
|
||||||
|
|
||||||
|
!$OMP DO SCHEDULE (guided)
|
||||||
|
|
||||||
|
do j = 1, ao_num
|
||||||
|
|
||||||
|
num_A = ao_nucl(j)
|
||||||
|
power_A(1:3)= ao_power(j,1:3)
|
||||||
|
A_center(1:3) = nucl_coord(num_A,1:3)
|
||||||
|
|
||||||
|
do i = 1, ao_num
|
||||||
|
|
||||||
|
num_B = ao_nucl(i)
|
||||||
|
power_B(1:3)= ao_power(i,1:3)
|
||||||
|
B_center(1:3) = nucl_coord(num_B,1:3)
|
||||||
|
|
||||||
|
do l=1,ao_prim_num(j)
|
||||||
|
alpha = ao_expo_transp(l,j)
|
||||||
|
|
||||||
|
do m=1,ao_prim_num(i)
|
||||||
|
beta = ao_expo_transp(m,i)
|
||||||
|
double precision :: c
|
||||||
|
c = 0.d0
|
||||||
|
|
||||||
|
do k = 1, nucl_num
|
||||||
|
double precision :: Z
|
||||||
|
Z = nucl_charge(k)
|
||||||
|
|
||||||
|
C_center(1:3) = nucl_coord(k,1:3)
|
||||||
|
|
||||||
|
v_k_dump = v_k(k,1:klocmax)
|
||||||
|
n_k_dump = n_k(k,1:klocmax)
|
||||||
|
dz_k_dump = dz_k(k,1:klocmax)
|
||||||
|
|
||||||
|
c = c + Vloc(klocmax, v_k_dump,n_k_dump, dz_k_dump, &
|
||||||
|
A_center,power_A,alpha,B_center,power_B,beta,C_center)
|
||||||
|
|
||||||
|
|
||||||
|
n_kl_dump = n_kl(k,1:kmax,0:lmax)
|
||||||
|
v_kl_dump = v_kl(k,1:kmax,0:lmax)
|
||||||
|
dz_kl_dump = dz_kl(k,1:kmax,0:lmax)
|
||||||
|
|
||||||
|
c = c + Vpseudo(lmax,kmax,v_kl_dump,n_kl_dump,dz_kl_dump,A_center,power_A,alpha,B_center,power_B,beta,C_center)
|
||||||
|
|
||||||
|
enddo
|
||||||
|
ao_nucl_elec_integral_pseudo(i,j) = ao_nucl_elec_integral_pseudo(i,j) + &
|
||||||
|
ao_coef_transp(l,j)*ao_coef_transp(m,i)*c
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
call wall_time(wall_2)
|
||||||
|
if (thread_num == 0) then
|
||||||
|
if (wall_2 - wall_0 > 1.d0) then
|
||||||
|
wall_0 = wall_2
|
||||||
|
write(output_monoints,*) 100.*float(j)/float(ao_num), '% in ', &
|
||||||
|
wall_2-wall_1, 's'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
|
||||||
|
!$OMP END DO
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
|
|
||||||
|
! _
|
||||||
|
! | \ _ _. | | _ _ _. _|_ _
|
||||||
|
! |_/ (/_ (_| | | (_) (_ (_| |_ (/_
|
||||||
|
!
|
||||||
|
|
||||||
|
deallocate(n_k,v_k, dz_k)
|
||||||
|
deallocate(n_k_dump,v_k_dump, dz_k_dump)
|
||||||
|
|
||||||
|
deallocate(n_kl,v_kl, dz_kl)
|
||||||
|
deallocate(n_kl_dump,v_kl_dump, dz_kl_dump)
|
||||||
|
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +252,6 @@ END_PROVIDER
|
||||||
integer :: power_A(3),power_B(3)
|
integer :: power_A(3),power_B(3)
|
||||||
integer :: i,j,k,l,n_pt_in,m
|
integer :: i,j,k,l,n_pt_in,m
|
||||||
double precision ::overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
|
double precision ::overlap_x,overlap_y,overlap_z,overlap,dx,NAI_pol_mult
|
||||||
integer :: nucl_numC
|
|
||||||
! Important for OpenMP
|
! Important for OpenMP
|
||||||
|
|
||||||
ao_nucl_elec_integral_per_atom = 0.d0
|
ao_nucl_elec_integral_per_atom = 0.d0
|
||||||
|
|
11
src/MonoInts/pseudo.ezfio_config
Normal file
11
src/MonoInts/pseudo.ezfio_config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
pseudo
|
||||||
|
do_pseudo logical
|
||||||
|
klocmax integer
|
||||||
|
v_k double precision (nuclei_nucl_num,pseudo_klocmax)
|
||||||
|
n_k integer (nuclei_nucl_num,pseudo_klocmax)
|
||||||
|
dz_k double precision (nuclei_nucl_num,pseudo_klocmax)
|
||||||
|
lmaxpo integer
|
||||||
|
kmax integer
|
||||||
|
v_kl double precision (nuclei_nucl_num,pseudo_kmax,pseudo_lmaxpo)
|
||||||
|
n_kl integer (nuclei_nucl_num,pseudo_kmax,pseudo_lmaxpo)
|
||||||
|
dz_kl double precision (nuclei_nucl_num,pseudo_kmax,pseudo_lmaxpo)
|
200
src/MonoInts/test_michel.irp.f
Normal file
200
src/MonoInts/test_michel.irp.f
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
!!
|
||||||
|
!! Computation of Vps, matrix element of the
|
||||||
|
!! pseudo-potential centered at point C
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!! Vps= < Phi_A | Vloc(C) + Vpp(C) | Phi_B>
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!! Phi_M (M=A,B) Cartesian gaussian orbital centered at point M :
|
||||||
|
!! Phi_M = (x-M_x)**n^M_x *(y-M_y)**n^M_y *(z-M_z)**n^M_z exp(-g_M rM**2)
|
||||||
|
!! with rM**2=(x-M_x)**2 + (y-M_y)**2 + (z-M_z)**2
|
||||||
|
!!
|
||||||
|
!!** Vloc(C)= \sum_{k=1}^klocmax v_k rC**n_k exp(-dz_k rC**2)
|
||||||
|
!!
|
||||||
|
!!** Vpp(C)= \sum_{l=0}^lmax v_l(rC) \sum_{m=-l}^{m=l} |Y_lm> <Y_lm|
|
||||||
|
!!
|
||||||
|
!! v_l(rC) = \sum_{k=1}^kmax v_kl rC**n_kl exp(-dz_kl rC**2)
|
||||||
|
!!
|
||||||
|
!! Y_lm : real spherical harmonics:
|
||||||
|
!! Y_00 = sqrt(1/4pi)
|
||||||
|
!! Y_11 = sqrt(3/4pi) xchap
|
||||||
|
!! Y_10 = sqrt(3/4pi) ychap
|
||||||
|
!! Y_1-1 = sqrt(3/4pi) zchap
|
||||||
|
!! Y_22 = sqrt(15/16pi) (xchap**2-ychap**2)
|
||||||
|
!! Y_21 = sqrt(15/4pi) xchap*zchap
|
||||||
|
!! Y_20 = sqrt(15/16pi)(-xchap**2-ychap**2+ 2 zchap**2)
|
||||||
|
!! Y_2-1 = sqrt(15/4pi) ychap*zchap
|
||||||
|
!! Y_2-2 = sqrt(15/4pi) xchap*ychap
|
||||||
|
!! etc.
|
||||||
|
!! xchap=x/r ychap=y/r zchap=z/r
|
||||||
|
!!
|
||||||
|
!! Routine computing <Phi_A|Vpp(C)|Phi_B> :
|
||||||
|
!! function Vpseudo(lmax,kmax,v_kl,n_kl,dz_kl,a,n_a,g_a,b,n_b,g_b,c)
|
||||||
|
!! lmax of formula above
|
||||||
|
!! kmax of formula above
|
||||||
|
!! v_kl = array v_kl(kmax_max,0:lmax_max)
|
||||||
|
!! n_kl = array n_kl(kmax_max,0:lmax_max)
|
||||||
|
!! dz_kl = array dz_kl(kmax_max,0:lmax_max)
|
||||||
|
!! n_a(1),n_a(2),n_a(3)
|
||||||
|
!! a(1),a(2),a(3)
|
||||||
|
!! g_a
|
||||||
|
!! n_b(1),n_b(2),n_b(3)
|
||||||
|
!! b(1),b(2),b(3)
|
||||||
|
!! g_b
|
||||||
|
!! c(1),c(2),c(3)
|
||||||
|
!!
|
||||||
|
!! Routine computing <Phi_A|Vloc(C)|Phi_B> :
|
||||||
|
!! function Vloc(klocmax,v_k,n_k,dz_k,a,n_a,g_a,b,n_b,g_b,c)
|
||||||
|
!! klocmax of formula above
|
||||||
|
!! v_k = array v_k(klocmax_max)
|
||||||
|
!! n_k = array n_k(klocmax_max)
|
||||||
|
!! dz_k= array dz_k(klocmax_max)
|
||||||
|
!! Routine total matrix element <Phi_A|Vloc(C)+Vlpp(C)|Phi_B> :
|
||||||
|
!! function Vps(a,n_a,g_a,b,n_b,g_b,c,klocmax,v_k,n_k,dz_k,lmax,kmax,v_kl,n_kl,dz_kl)
|
||||||
|
!!
|
||||||
|
!! Routines Vps_num, Vpseudo_num, and Vloc_num = brute force numerical
|
||||||
|
!! estimations of the same integrals
|
||||||
|
|
||||||
|
|
||||||
|
program compute_integrals_pseudo
|
||||||
|
implicit none
|
||||||
|
integer n_a(3),n_b(3),npts
|
||||||
|
double precision g_a,g_b,a(3),b(3),c(3)
|
||||||
|
double precision Vpseudo,Vpseudo_num,Vloc,Vloc_num
|
||||||
|
double precision v3,v4
|
||||||
|
|
||||||
|
|
||||||
|
double precision vps,vps_num
|
||||||
|
|
||||||
|
! PSEUDOS
|
||||||
|
integer nptsgridmax,nptsgrid
|
||||||
|
double precision coefs_pseudo,ptsgrid
|
||||||
|
|
||||||
|
double precision rmax
|
||||||
|
double precision time_1,time_2,time_3,time_4,time_5
|
||||||
|
integer kga,kgb,na1,na2,na3,nb1,nb2,nb3
|
||||||
|
|
||||||
|
CALL RANDOM_SEED()
|
||||||
|
|
||||||
|
nptsgrid=50
|
||||||
|
call initpseudos(nptsgrid)
|
||||||
|
|
||||||
|
PROVIDE ezfio_filename
|
||||||
|
|
||||||
|
!
|
||||||
|
! | _ _ _. |
|
||||||
|
! |_ (_) (_ (_| |
|
||||||
|
!
|
||||||
|
|
||||||
|
integer klocmax
|
||||||
|
integer, allocatable :: n_k(:)
|
||||||
|
double precision, allocatable :: v_k(:), dz_k(:)
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_klocmax(klocmax)
|
||||||
|
|
||||||
|
allocate(n_k(klocmax),v_k(klocmax), dz_k(klocmax))
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_v_k(v_k)
|
||||||
|
call ezfio_get_pseudo_n_k(n_k)
|
||||||
|
call ezfio_get_pseudo_dz_k(dz_k)
|
||||||
|
|
||||||
|
print*, "klocmax", klocmax
|
||||||
|
|
||||||
|
print*, "n_k_ezfio", n_k
|
||||||
|
print*, "v_k_ezfio",v_k
|
||||||
|
print*, "dz_k_ezfio", dz_k
|
||||||
|
|
||||||
|
!
|
||||||
|
! |\ | _ ._ | _ _ _. |
|
||||||
|
! | \| (_) | | | (_) (_ (_| |
|
||||||
|
!
|
||||||
|
|
||||||
|
!! Parameters of non local part of pseudo:
|
||||||
|
|
||||||
|
integer :: kmax,lmax
|
||||||
|
integer, allocatable :: n_kl(:,:)
|
||||||
|
double precision, allocatable :: v_kl(:,:), dz_kl(:,:)
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_lmaxpo(lmax)
|
||||||
|
call ezfio_get_pseudo_kmax(kmax)
|
||||||
|
lmax = lmax - 1
|
||||||
|
|
||||||
|
allocate(n_kl(kmax,0:lmax), v_kl(kmax,0:lmax), dz_kl(kmax,0:lmax))
|
||||||
|
|
||||||
|
call ezfio_get_pseudo_n_kl(n_kl)
|
||||||
|
call ezfio_get_pseudo_v_kl(v_kl)
|
||||||
|
call ezfio_get_pseudo_dz_kl(dz_kl)
|
||||||
|
|
||||||
|
|
||||||
|
print*, "lmax",lmax
|
||||||
|
print*, "kmax", kmax
|
||||||
|
|
||||||
|
print*,"n_kl_ezfio", n_kl
|
||||||
|
print*,"v_kl_ezfio", v_kl
|
||||||
|
print*,"dz_kl_ezfio", dz_kl
|
||||||
|
|
||||||
|
! _
|
||||||
|
! / _. | _ |
|
||||||
|
! \_ (_| | (_ |_| |
|
||||||
|
!
|
||||||
|
|
||||||
|
! write(*,*)'a?'
|
||||||
|
! read*,a(1),a(2),a(3)
|
||||||
|
!write(*,*)'b?'
|
||||||
|
!read*,b(1),b(2),b(3)
|
||||||
|
! b(1)=-0.1d0
|
||||||
|
! b(2)=-0.2d0
|
||||||
|
! b(3)=0.3d0
|
||||||
|
! !write(*,*)'a?'
|
||||||
|
! !read*,c(1),c(2),c(3)
|
||||||
|
! c(1)=0.1d0
|
||||||
|
! c(2)=0.2d0
|
||||||
|
! c(3)=0.3d0
|
||||||
|
|
||||||
|
a(1)= 0.d0
|
||||||
|
a(2)= 0.d0
|
||||||
|
a(3)= 0.d0
|
||||||
|
|
||||||
|
b(1)= 0.d0
|
||||||
|
b(2)= 0.d0
|
||||||
|
b(3)= 0.d0
|
||||||
|
|
||||||
|
c(1)= 0.d0
|
||||||
|
c(2)= 0.d0
|
||||||
|
c(3)= 0.d0
|
||||||
|
|
||||||
|
print*,'ntps? rmax for brute force integration'
|
||||||
|
read*,npts,rmax
|
||||||
|
|
||||||
|
do kga=0,5
|
||||||
|
g_a=10.d0**kga
|
||||||
|
do kgb=0,5
|
||||||
|
g_b=10.d0**kgb
|
||||||
|
|
||||||
|
do na1=0,1
|
||||||
|
do na2=0,1
|
||||||
|
do na3=0,1
|
||||||
|
do nb1=0,1
|
||||||
|
do nb2=0,1
|
||||||
|
do nb3=0,1
|
||||||
|
n_a(1)=na1
|
||||||
|
n_a(2)=na2
|
||||||
|
n_a(3)=na3
|
||||||
|
n_b(1)=nb1
|
||||||
|
n_b(2)=nb2
|
||||||
|
n_b(3)=nb3
|
||||||
|
|
||||||
|
v3=Vps(a,n_a,g_a,b,n_b,g_b,c,klocmax,v_k,n_k,dz_k,lmax,kmax,v_kl,n_kl,dz_kl)
|
||||||
|
v4=Vps_num(npts,rmax,a,n_a,g_a,b,n_b,g_b,c,klocmax,v_k,n_k,dz_k,lmax,kmax,v_kl,n_kl,dz_kl)
|
||||||
|
print*,'Vps= ',v3,' Vps_num=',v4,' diff=',v4-v3
|
||||||
|
write(33,'(3f10.6)')v3,v4,v4-v3
|
||||||
|
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user