4
1
mirror of https://github.com/pfloos/quack synced 2024-10-19 22:41:50 +02:00

v0 of FeatherBench

This commit is contained in:
Abdallah Ammar 2024-08-30 20:15:39 +02:00
parent 2ca8557cb3
commit 2c312cfc57
7 changed files with 223 additions and 100 deletions

View File

@ -72,38 +72,43 @@ subroutine ppLR(TDA, nOO, nVV, Bpp, Cpp, Dpp, Om1, X1, Y1, Om2, X2, Y2, EcRPA)
M( 1:nVV ,nVV+1:nOO+nVV) = - Bpp(1:nVV,1:nOO)
M(nVV+1:nOO+nVV, 1:nVV) = + transpose(Bpp(1:nVV,1:nOO))
!! Diagonalize the p-p matrix
!if(nOO+nVV > 0) call diagonalize_general_matrix(nOO+nVV, M, Om, Z)
!! Split the various quantities in p-p and h-h parts
!call sort_ppRPA(nOO, nVV, Om, Z, Om1, X1, Y1, Om2, X2, Y2)
if((nOO .eq. 0) .or. (nVV .eq. 0)) then
! Diagonalize the p-p matrix
if(nOO+nVV > 0) call diagonalize_general_matrix(nOO+nVV, M, Om, Z)
! Split the various quantities in p-p and h-h parts
call sort_ppRPA(nOO, nVV, Om, Z, Om1, X1, Y1, Om2, X2, Y2)
thr_d = 1d-6 ! to determine if diagonal elements of L.T x R are close enouph to 1
thr_nd = 1d-6 ! to determine if non-diagonal elements of L.T x R are close enouph to 1
thr_deg = 1d-8 ! to determine if two eigenvectors are degenerate or not
imp_bio = .True. ! impose bi-orthogonality
verbose = .False.
call diagonalize_nonsym_matrix(N, M, Z, Om, thr_d, thr_nd, thr_deg, imp_bio, verbose)
else
do i = 1, nOO
Om2(i) = Om(i)
do j = 1, nVV
X2(j,i) = Z(j,i)
enddo
do j = 1, nOO
Y2(j,i) = Z(nVV+j,i)
enddo
enddo
thr_d = 1d-6 ! to determine if diagonal elements of L.T x R are close enouph to 1
thr_nd = 1d-6 ! to determine if non-diagonal elements of L.T x R are close enouph to 1
thr_deg = 1d-8 ! to determine if two eigenvectors are degenerate or not
imp_bio = .True. ! impose bi-orthogonality
verbose = .False.
call diagonalize_nonsym_matrix(N, M, Z, Om, thr_d, thr_nd, thr_deg, imp_bio, verbose)
do i = 1, nOO
Om2(i) = Om(i)
do j = 1, nVV
X2(j,i) = Z(j,i)
enddo
do j = 1, nOO
Y2(j,i) = Z(nVV+j,i)
enddo
enddo
do i = 1, nVV
Om1(i) = Om(nOO+i)
do j = 1, nVV
X1(j,i) = M(j,nOO+i)
enddo
do j = 1, nOO
Y1(j,i) = M(nVV+j,nOO+i)
enddo
enddo
do i = 1, nVV
Om1(i) = Om(nOO+i)
do j = 1, nVV
X1(j,i) = M(j,nOO+i)
enddo
do j = 1, nOO
Y1(j,i) = M(nVV+j,nOO+i)
enddo
enddo
endif
end if

26
test/export_tobench.py Normal file
View File

@ -0,0 +1,26 @@
import sys
def read_quantities_from_file(filename):
quantities = {}
with open(filename, 'r') as file:
lines = file.readlines()
for i in range(0, len(lines), 2):
# Remove any leading or trailing whitespace/newline characters
quantity_name = lines[i].strip()
quantity_value = float(lines[i+1].strip())
quantities[quantity_name] = quantity_value
return quantities
def print_quantities(quantities):
for key, value in quantities.items():
print(f'"{key}": {value},')
filename = sys.argv[1]
quantities = read_quantities_from_file(filename)
print_quantities(quantities)

View File

@ -1,12 +1,39 @@
import sqlite3
import argparse
from molecule import save_molecules_to_json, load_molecules_from_json
from molecule import create_database, add_molecule_to_db
from molecule import create_database, add_molecule_to_db, remove_database
from feather_bench import FeatherBench
parser = argparse.ArgumentParser(description="Benchmark Data Sets")
parser.add_argument(
'-s', '--set_type',
choices=['light', 'medium', 'heavy'],
default='light',
help="Specify the type of data set: light (default), medium, or heavy."
)
args = parser.parse_args()
if args.set_type == 'light':
bench = 'FeatherBench'
bench_title = "\n\nSelected Light Benchmark: {}\n\n".format(bench)
elif args.set_type == 'medium':
bench = 'BalanceBench'
bench_title = "\n\nSelected Medium Benchmark: {}\n\n".format(bench)
elif args.set_type == 'heavy':
bench = 'TitanBench'
bench_title = "\n\nSelected Heavy Benchmark: {}\n\n".format(bench)
else:
bench_title = "\n\nSelected Light Benchmark: {}\n\n".format(bench)
db_name = '{}.db'.format(bench)
# Save molecules to JSON
#save_molecules_to_json(FeatherBench, 'FeatherBench.json')
@ -15,8 +42,8 @@ from feather_bench import FeatherBench
#loaded_molecules = load_molecules_from_json('FeatherBench.json')
#print(loaded_molecules)
# Create a database and add molecules
db_name = 'FeatherBench.db'
#remove_database(db_name)
create_database(db_name)
for molecule in FeatherBench:
add_molecule_to_db(db_name, molecule)

View File

@ -11,43 +11,35 @@ He = Molecule(
properties={
"properties_rhf":{
"6-31g": {
"RHF energy": -2.855160426884076,
"RHF HOMO energy": -0.914126628614305,
"RHF LUMO energy": 1.399859335225087,
"RHF dipole moment": 0.000000000000000,
"RMP2 correlation energy": -0.011200122910187,
"CCD correlation energy": -0.014985063408247,
"DCD correlation energy": -0.014985062907429,
"CCSD correlation energy": -0.015001711549550,
"drCCD correlation energy": -0.018845374502248,
"rCCD correlation energy": -0.016836324636164,
"crCCD correlation energy": 0.008524677369855,
"lCCD correlation energy": -0.008082420815100,
"pCCD correlation energy": -0.014985062519068,
"RCIS singlet excitation energy": 1.911193619935257,
"RCIS triplet excitation energy": 1.455852629402236,
"phRRPA correlation energy": -0.018845374129105,
"phRRPAx correlation energy": -0.015760565121283,
"crRRPA correlation energy": -0.008868581132405,
"ppRRPA correlation energy": -0.008082420815100,
"RG0F2 correlation energy": -0.011438430540374,
"RG0F2 HOMO energy": -0.882696116247871,
"RG0F2 LUMO energy": 1.383080391811630,
"evRGF2 correlation energy": -0.011448483158486,
"evRGF2 HOMO energy": -0.881327878713477,
"evRGF2 LUMO energy": 1.382458968133448,
"RG0W0 correlation energy": -0.019314094399756,
"RG0W0 HOMO energy": -0.870533880190454,
"RG0W0 LUMO energy": 1.377171287010956,
"evRGW correlation energy": -0.019335511771724,
"evRGW HOMO energy": -0.868460640957913,
"evRGW LUMO energy": 1.376287581471769,
"RG0T0pp correlation energy": -0.008082420815100,
"RG0T0pp HOMO energy": -0.914126628614305,
"RG0T0pp LUMO energy": 1.399859335225087,
"evRGTpp correlation energy": -0.008082420815100,
"evRGTpp HOMO energy": -0.914126628614305,
"evRGTpp LUMO energy": 1.399859335225087
"RHF energy": -2.855160426154444,
"RHF HOMO energy": -0.914126628640145,
"RHF LUMO energy": 1.399859335255765,
"RHF dipole moment": 0.0,
"MP2 correlation energy": -0.011200122909934,
"CCD correlation energy": -0.014985063116,
"CCSD correlation energy": -0.015001711549092,
"drCCD correlation energy": -0.01884537385338,
"rCCD correlation energy": -0.016836322809386,
"crCCD correlation energy": 0.008524676641474,
"lCCD correlation energy": -0.00808242082105,
"CIS singlet excitation energy": 1.911193619991987,
"CIS triplet excitation energy": 1.455852629458543,
"phRPA correlation energy": -0.018845374128748,
"phRPAx correlation energy": -0.015760565120758,
"crRPA correlation energy": -0.008868581132249,
"ppRPA correlation energy": -0.008082420814972,
"G0F2 correlation energy": -0.011438430540104,
"G0F2 HOMO energy": -0.882696116274599,
"G0F2 LUMO energy": 1.383080391842522,
"G0W0 correlation energy": -0.019314094399372,
"G0W0 HOMO energy": -0.87053388021722,
"G0W0 LUMO energy": 1.377171287041735,
"evGW correlation energy": -0.019335511771337,
"evGW HOMO energy": -0.868460640984803,
"evGW LUMO energy": 1.376287581502582,
"G0T0pp correlation energy": -0.008161908540634,
"G0T0pp HOMO energy": -0.898869172597701,
"G0T0pp LUMO energy": 1.383928087417952,
}
},
"properties_uhf":{
@ -58,8 +50,51 @@ He = Molecule(
"6-31g": {
}
},
"properties_rohf":{
"6-31g": {
}
)
# ---
H2O = Molecule(
name="H2O",
multiplicity=1,
geometry=[
{"element": "O", "x": 0.0000, "y": 0.0000, "z": 0.0000},
{"element": "H", "x": 0.7571, "y": 0.0000, "z": 0.5861},
{"element": "H", "x": -0.7571, "y": 0.0000, "z": 0.5861}
],
properties={
"properties_rhf":{
"cc-pvdz": {
"RHF energy": -85.21935817501823,
"RHF HOMO energy": -0.493132793449897,
"RHF LUMO energy": 0.185534869842355,
"RHF dipole moment": 0.233813698748474,
"MP2 correlation energy": -0.203978216774657,
"CCD correlation energy": -0.212571260121257,
"CCSD correlation energy": -0.213302190845899,
"drCCD correlation energy": -0.231281853419338,
"rCCD correlation energy": -0.277238348710547,
"crCCD correlation energy": 0.18014617422324,
"lCCD correlation energy": -0.15128653432796,
"CIS singlet excitation energy": 0.338828950934568,
"CIS triplet excitation energy": 0.304873339484139,
"phRPA correlation energy": -0.231281866582435,
"phRPAx correlation energy": -0.310796738307943,
"crRPA correlation energy": -0.246289801609294,
"ppRPA correlation energy": -0.151286536255888,
"G0F2 correlation energy": -0.217807591229668,
"G0F2 HOMO energy": -0.404541451101377,
"G0F2 LUMO energy": 0.16650398400197,
"G0W0 correlation energy": -0.23853664665404,
"G0W0 HOMO energy": -0.446828623007469,
"G0W0 LUMO energy": 0.173026609033024,
"evGW correlation energy": -0.239414217281308,
"evGW HOMO energy": -0.443076613314424,
"evGW LUMO energy": 0.172691758111392,
"G0T0pp correlation energy": -0.156214864467344,
"G0T0pp HOMO energy": -0.452117482732615,
"G0T0pp LUMO energy": 0.16679206983464,
}
}
}
@ -67,24 +102,9 @@ He = Molecule(
# ---
#H2O = Molecule(
# name="H2O",
# multiplicity=1,
# geometry=[
# {"element": "O", "x": 0.0000, "y": 0.0000, "z": 0.0000},
# {"element": "H", "x": 0.7571, "y": 0.0000, "z": 0.5861},
# {"element": "H", "x": -0.7571, "y": 0.0000, "z": 0.5861}
# ],
# properties={
# "cc-pvdz": {
# }
#)
# ---
FeatherBench = [
He,
#H2O
H2O
]

View File

@ -3,7 +3,7 @@
# MP2 MP3
T T
# CCD pCCD DCD CCSD CCSD(T)
T T T T F
T F F T F
# drCCD rCCD crCCD lCCD
T T T T
# CIS CIS(D) CID CISD FCI
@ -11,11 +11,11 @@
# phRPA phRPAx crRPA ppRPA
T T T T
# G0F2 evGF2 qsGF2 ufGF2 G0F3 evGF3
T T F F F F
T F F F F F
# G0W0 evGW qsGW SRG-qsGW ufG0W0 ufGW
T T F F F F
# G0T0pp evGTpp qsGTpp ufG0T0pp
T T F F
T F F F
# G0T0eh evGTeh qsGTeh
F F F
# Rtest Utest Gtest

View File

@ -181,7 +181,7 @@ class Quack_Job:
if(diff <= THRESH):
print_col(f" 🙂 {key}: ✔️ ", "green")
else:
print_col(f" ☹️ {key}: ❌ {data_ref[key]}{data_new[key]}", "red")
print_col(f" ☹️ {key}: ❌ {data_ref[key]}{data_new[key]}", "red")
except FileNotFoundError:
print_col(f"Error: The file '{filepath}' does not exist.", "red")
sys.exist(1)

View File

@ -1,7 +1,11 @@
import os
import json
import sqlite3
from utils import print_col
class Molecule:
def __init__(self, name, multiplicity, geometry, properties):
self.name = name
@ -38,23 +42,64 @@ def load_molecules_from_json(filename):
def create_database(db_name):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS molecules
(name TEXT, multiplicity INTEGER, geometry TEXT, properties TEXT)''')
conn.commit()
conn.close()
if os.path.exists(db_name):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
# Check if the table already exists
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='molecules';")
table_exists = cursor.fetchone()
if table_exists:
print_col(f"Database '{db_name}' already exists and table 'molecules' is already created.", "yellow")
else:
# Create the table if it does not exist
cursor.execute('''CREATE TABLE molecules
(name TEXT, multiplicity INTEGER, geometry TEXT, properties TEXT)''')
conn.commit()
print_col(f"Table 'molecules' created in existing database '{db_name}' successfully.", "green")
conn.close()
else:
# Create the database and table
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE molecules
(name TEXT, multiplicity INTEGER, geometry TEXT, properties TEXT)''')
conn.commit()
conn.close()
print_col(f"Database '{db_name}' created and table 'molecules' added successfully.", "green")
def add_molecule_to_db(db_name, molecule):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
# Convert geometry and properties to JSON strings
geometry_str = json.dumps(molecule.geometry)
energies_str = json.dumps(molecule.properties)
cursor.execute("INSERT INTO molecules VALUES (?, ?, ?, ?)",
(molecule.name, molecule.multiplicity, geometry_str, energies_str))
conn.commit()
# Check if the molecule already exists
cursor.execute("SELECT COUNT(*) FROM molecules WHERE name = ?", (molecule.name,))
count = cursor.fetchone()[0]
if count > 0:
print_col(f"Molecule '{molecule.name}' already exists in {db_name}.", "yellow")
else:
# Insert the molecule if it does not exist
cursor.execute("INSERT INTO molecules (name, multiplicity, geometry, properties) VALUES (?, ?, ?, ?)",
(molecule.name, molecule.multiplicity, geometry_str, energies_str))
conn.commit()
print_col(f"'{molecule.name}' added to {db_name} successfully.", "green")
conn.close()
def remove_database(db_name):
if os.path.exists(db_name):
os.remove(db_name)
print_col(f"Database '{db_name}' removed successfully.", "red")
else:
print_col(f"Database '{db_name}' does not exist.", "red")
def get_molecules_from_db(db_name):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()