From a38376e543b7c2539ca787e620d4ca71a101997c Mon Sep 17 00:00:00 2001 From: phillanl Date: Tue, 11 Aug 2026 09:56:53 -0600 Subject: [PATCH] Added big_hamiltonian_diagonalizer This adds functionality to diagonalize large hamiltonians from 20 to 30 qubits. --- .../ListOf20to30qConfigs.txt | 1240 +++++++++++++++++ big_hamiltonian_diagonalizer/README.md | 628 +++++++++ .../RunAllHamgensExampleScript.cmd | 6 + ...RunFCIAllDiagonalizationsExampleScript.cmd | 6 + .../proc3LowestEnergiesFromH.cmd | 34 + .../qhat_low_energies_fci.py | 443 ++++++ .../qhat_pauli_matrix_free.py | 1018 ++++++++++++++ big_hamiltonian_diagonalizer/requirements.txt | 15 + 8 files changed, 3390 insertions(+) create mode 100644 big_hamiltonian_diagonalizer/ListOf20to30qConfigs.txt create mode 100644 big_hamiltonian_diagonalizer/README.md create mode 100644 big_hamiltonian_diagonalizer/RunAllHamgensExampleScript.cmd create mode 100644 big_hamiltonian_diagonalizer/RunFCIAllDiagonalizationsExampleScript.cmd create mode 100644 big_hamiltonian_diagonalizer/proc3LowestEnergiesFromH.cmd create mode 100644 big_hamiltonian_diagonalizer/qhat_low_energies_fci.py create mode 100644 big_hamiltonian_diagonalizer/qhat_pauli_matrix_free.py create mode 100644 big_hamiltonian_diagonalizer/requirements.txt diff --git a/big_hamiltonian_diagonalizer/ListOf20to30qConfigs.txt b/big_hamiltonian_diagonalizer/ListOf20to30qConfigs.txt new file mode 100644 index 00000000..85cbfbb1 --- /dev/null +++ b/big_hamiltonian_diagonalizer/ListOf20to30qConfigs.txt @@ -0,0 +1,1240 @@ +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-018_JW.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-014_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-020_JW.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-018_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-020_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-022_JW.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-012_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-022_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-012_JW.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-016_JW.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-016_BK.config +./library/Be-Be/2.31/hgbs-5/Be-Be_2.31_hgbs-5_as-008-014_JW.config +./library/Be-Be/2.31/sto-6g/Be-Be_2.31_sto-6g_as-008-012_BK.config +./library/Be-Be/2.31/sto-6g/Be-Be_2.31_sto-6g_as-008-012_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-016_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-018_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-014_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-014_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-022_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-012_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-020_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-020_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-016_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-012_BK.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-018_JW.config +./library/Be-Be/1.22/hgbs-5/Be-Be_1.22_hgbs-5_as-008-022_JW.config +./library/Be-Be/1.22/sto-6g/Be-Be_1.22_sto-6g_as-008-012_BK.config +./library/Be-Be/1.22/sto-6g/Be-Be_1.22_sto-6g_as-008-012_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-016_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-018_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-014_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-012_BK.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-020_BK.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-016_BK.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-018_BK.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-014_BK.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-022_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-012_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-020_JW.config +./library/Be-Be/3.40/hgbs-5/Be-Be_3.40_hgbs-5_as-008-022_BK.config +./library/Be-Be/3.40/sto-6g/Be-Be_3.40_sto-6g_as-008-012_BK.config +./library/Be-Be/3.40/sto-6g/Be-Be_3.40_sto-6g_as-008-012_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-014_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-022_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-022_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-012_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-016_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-020_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-016_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-014_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-018_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-018_BK.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-012_JW.config +./library/Be-Be/5.03/hgbs-5/Be-Be_5.03_hgbs-5_as-008-020_JW.config +./library/Be-Be/5.03/sto-6g/Be-Be_5.03_sto-6g_as-008-012_JW.config +./library/Be-Be/5.03/sto-6g/Be-Be_5.03_sto-6g_as-008-012_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-014_JW.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-016_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-020_JW.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-012_JW.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-020_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-018_JW.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-012_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-018_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-014_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-022_BK.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-016_JW.config +./library/Be-Be/5.58/hgbs-5/Be-Be_5.58_hgbs-5_as-008-022_JW.config +./library/Be-Be/5.58/sto-6g/Be-Be_5.58_sto-6g_as-008-012_BK.config +./library/Be-Be/5.58/sto-6g/Be-Be_5.58_sto-6g_as-008-012_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-018_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-014_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-018_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-016_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-012_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-020_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-020_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-022_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-022_JW.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-014_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-016_BK.config +./library/Be-Be/3.94/hgbs-5/Be-Be_3.94_hgbs-5_as-008-012_JW.config +./library/Be-Be/3.94/sto-6g/Be-Be_3.94_sto-6g_as-008-012_BK.config +./library/Be-Be/3.94/sto-6g/Be-Be_3.94_sto-6g_as-008-012_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-020_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-022_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-018_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-014_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-012_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-014_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-016_JW.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-012_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-016_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-022_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-020_BK.config +./library/Be-Be/6.12/hgbs-5/Be-Be_6.12_hgbs-5_as-008-018_JW.config +./library/Be-Be/6.12/sto-6g/Be-Be_6.12_sto-6g_as-008-012_BK.config +./library/Be-Be/6.12/sto-6g/Be-Be_6.12_sto-6g_as-008-012_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-014_BK.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-016_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-018_BK.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-022_BK.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-022_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-016_BK.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-018_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-020_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-012_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-020_BK.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-014_JW.config +./library/Be-Be/4.49/hgbs-5/Be-Be_4.49_hgbs-5_as-008-012_BK.config +./library/Be-Be/4.49/sto-6g/Be-Be_4.49_sto-6g_as-008-012_BK.config +./library/Be-Be/4.49/sto-6g/Be-Be_4.49_sto-6g_as-008-012_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-022_BK.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-016_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-012_BK.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-018_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-020_BK.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-020_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-022_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-012_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-016_BK.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-014_BK.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-014_JW.config +./library/Be-Be/1.77/hgbs-5/Be-Be_1.77_hgbs-5_as-008-018_BK.config +./library/Be-Be/1.77/sto-6g/Be-Be_1.77_sto-6g_as-008-012_JW.config +./library/Be-Be/1.77/sto-6g/Be-Be_1.77_sto-6g_as-008-012_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-014_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-018_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-020_JW.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-022_JW.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-018_JW.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-014_JW.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-012_JW.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-022_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-016_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-020_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-012_BK.config +./library/Be-Be/2.86/hgbs-5/Be-Be_2.86_hgbs-5_as-008-016_JW.config +./library/Be-Be/2.86/sto-6g/Be-Be_2.86_sto-6g_as-008-012_BK.config +./library/Be-Be/2.86/sto-6g/Be-Be_2.86_sto-6g_as-008-012_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-017_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-019_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-021_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-025_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-023_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-017_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-023_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-025_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-015_JW.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-019_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-015_BK.config +./library/Be-H/0.80/hgbs-5/Be-H_0.80_hgbs-5_as-005-021_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-021_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-019_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-015_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-017_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-017_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-023_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-015_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-025_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-019_JW.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-023_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-025_BK.config +./library/Be-H/2.59/hgbs-5/Be-H_2.59_hgbs-5_as-005-021_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-023_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-021_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-021_BK.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-017_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-015_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-025_BK.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-019_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-023_BK.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-019_BK.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-017_BK.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-025_JW.config +./library/Be-H/1.52/hgbs-5/Be-H_1.52_hgbs-5_as-005-015_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-023_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-019_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-021_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-019_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-023_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-015_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-025_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-017_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-015_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-021_JW.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-025_BK.config +./library/Be-H/2.95/hgbs-5/Be-H_2.95_hgbs-5_as-005-017_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-025_JW.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-025_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-015_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-023_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-023_JW.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-019_JW.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-019_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-017_JW.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-017_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-021_BK.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-021_JW.config +./library/Be-H/1.88/hgbs-5/Be-H_1.88_hgbs-5_as-005-015_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-021_BK.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-017_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-019_BK.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-025_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-017_BK.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-025_BK.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-015_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-019_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-023_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-021_JW.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-015_BK.config +./library/Be-H/2.23/hgbs-5/Be-H_2.23_hgbs-5_as-005-023_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-015_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-025_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-021_JW.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-023_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-019_JW.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-019_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-021_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-017_BK.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-025_JW.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-015_JW.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-017_JW.config +./library/Be-H/3.31/hgbs-5/Be-H_3.31_hgbs-5_as-005-023_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-021_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-015_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-017_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-023_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-025_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-019_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-019_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-025_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-017_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-021_JW.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-015_BK.config +./library/Be-H/4.02/hgbs-5/Be-H_4.02_hgbs-5_as-005-023_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-025_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-021_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-023_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-023_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-019_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-015_JW.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-015_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-021_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-017_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-025_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-019_BK.config +./library/Be-H/3.66/hgbs-5/Be-H_3.66_hgbs-5_as-005-017_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-021_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-021_BK.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-023_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-015_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-025_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-017_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-019_BK.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-019_JW.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-015_BK.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-017_BK.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-023_BK.config +./library/Be-H/1.16/hgbs-5/Be-H_1.16_hgbs-5_as-005-025_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-018_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-020_JW.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-022_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-020_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-024_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-016_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-014_JW.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-024_JW.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-014_BK.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-018_JW.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-022_JW.config +./library/Li-Li/2.31/hgbs-5/Li-Li_2.31_hgbs-5_as-006-016_JW.config +./library/Li-Li/2.31/sto-6g/Li-Li_2.31_sto-6g_as-006-014_JW.config +./library/Li-Li/2.31/sto-6g/Li-Li_2.31_sto-6g_as-006-014_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-024_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-022_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-016_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-018_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-020_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-014_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-024_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-016_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-018_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-020_JW.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-014_BK.config +./library/Li-Li/4.43/hgbs-5/Li-Li_4.43_hgbs-5_as-006-022_BK.config +./library/Li-Li/4.43/sto-6g/Li-Li_4.43_sto-6g_as-006-014_BK.config +./library/Li-Li/4.43/sto-6g/Li-Li_4.43_sto-6g_as-006-014_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-020_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-022_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-024_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-022_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-014_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-016_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-016_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-018_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-020_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-024_JW.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-014_BK.config +./library/Li-Li/3.72/hgbs-5/Li-Li_3.72_hgbs-5_as-006-018_JW.config +./library/Li-Li/3.72/sto-6g/Li-Li_3.72_sto-6g_as-006-014_JW.config +./library/Li-Li/3.72/sto-6g/Li-Li_3.72_sto-6g_as-006-014_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-014_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-020_JW.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-024_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-018_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-024_JW.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-018_JW.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-016_JW.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-020_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-014_JW.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-016_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-022_BK.config +./library/Li-Li/6.56/hgbs-5/Li-Li_6.56_hgbs-5_as-006-022_JW.config +./library/Li-Li/6.56/sto-6g/Li-Li_6.56_sto-6g_as-006-014_BK.config +./library/Li-Li/6.56/sto-6g/Li-Li_6.56_sto-6g_as-006-014_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-024_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-016_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-016_BK.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-020_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-020_BK.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-022_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-014_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-014_BK.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-018_BK.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-022_BK.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-018_JW.config +./library/Li-Li/1.60/hgbs-5/Li-Li_1.60_hgbs-5_as-006-024_BK.config +./library/Li-Li/1.60/sto-6g/Li-Li_1.60_sto-6g_as-006-014_JW.config +./library/Li-Li/1.60/sto-6g/Li-Li_1.60_sto-6g_as-006-014_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-020_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-016_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-018_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-022_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-018_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-014_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-024_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-024_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-014_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-022_JW.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-016_BK.config +./library/Li-Li/7.98/hgbs-5/Li-Li_7.98_hgbs-5_as-006-020_BK.config +./library/Li-Li/7.98/sto-6g/Li-Li_7.98_sto-6g_as-006-014_JW.config +./library/Li-Li/7.98/sto-6g/Li-Li_7.98_sto-6g_as-006-014_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-020_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-014_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-014_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-020_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-022_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-018_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-024_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-018_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-016_BK.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-016_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-022_JW.config +./library/Li-Li/5.14/hgbs-5/Li-Li_5.14_hgbs-5_as-006-024_BK.config +./library/Li-Li/5.14/sto-6g/Li-Li_5.14_sto-6g_as-006-014_JW.config +./library/Li-Li/5.14/sto-6g/Li-Li_5.14_sto-6g_as-006-014_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-020_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-022_JW.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-018_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-022_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-024_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-014_JW.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-024_JW.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-016_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-020_JW.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-016_JW.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-014_BK.config +./library/Li-Li/7.27/hgbs-5/Li-Li_7.27_hgbs-5_as-006-018_JW.config +./library/Li-Li/7.27/sto-6g/Li-Li_7.27_sto-6g_as-006-014_BK.config +./library/Li-Li/7.27/sto-6g/Li-Li_7.27_sto-6g_as-006-014_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-018_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-016_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-018_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-016_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-014_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-020_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-020_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-022_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-022_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-014_JW.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-024_BK.config +./library/Li-Li/3.01/hgbs-5/Li-Li_3.01_hgbs-5_as-006-024_JW.config +./library/Li-Li/3.01/sto-6g/Li-Li_3.01_sto-6g_as-006-014_BK.config +./library/Li-Li/3.01/sto-6g/Li-Li_3.01_sto-6g_as-006-014_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-016_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-020_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-024_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-018_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-016_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-014_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-024_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-020_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-022_JW.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-022_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-014_BK.config +./library/Li-Li/5.85/hgbs-5/Li-Li_5.85_hgbs-5_as-006-018_JW.config +./library/Li-Li/5.85/sto-6g/Li-Li_5.85_sto-6g_as-006-014_JW.config +./library/Li-Li/5.85/sto-6g/Li-Li_5.85_sto-6g_as-006-014_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-018_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-014_JW.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-016_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-008-014_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-008-012_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-020_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-008-014_JW.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-020_JW.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-008-012_JW.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-016_JW.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-014_BK.config +./library/B-B/3.74/hgbs-5/B-B_3.74_hgbs-5_as-010-018_JW.config +./library/B-B/3.74/sto-6g/B-B_3.74_sto-6g_as-010-010_BK.config +./library/B-B/3.74/sto-6g/B-B_3.74_sto-6g_as-010-010_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-008-012_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-014_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-008-014_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-020_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-020_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-016_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-014_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-018_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-016_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-008-014_BK.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-008-012_JW.config +./library/B-B/5.10/hgbs-5/B-B_5.10_hgbs-5_as-010-018_JW.config +./library/B-B/5.10/sto-6g/B-B_5.10_sto-6g_as-010-010_BK.config +./library/B-B/5.10/sto-6g/B-B_5.10_sto-6g_as-010-010_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-008-012_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-008-012_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-018_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-014_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-016_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-016_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-014_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-020_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-018_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-010-020_JW.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-008-014_BK.config +./library/B-B/3.29/hgbs-5/B-B_3.29_hgbs-5_as-008-014_JW.config +./library/B-B/3.29/sto-6g/B-B_3.29_sto-6g_as-010-010_JW.config +./library/B-B/3.29/sto-6g/B-B_3.29_sto-6g_as-010-010_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-016_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-008-014_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-014_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-018_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-016_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-014_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-008-012_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-020_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-008-014_JW.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-020_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-010-018_BK.config +./library/B-B/1.02/hgbs-5/B-B_1.02_hgbs-5_as-008-012_BK.config +./library/B-B/1.02/sto-6g/B-B_1.02_sto-6g_as-010-010_JW.config +./library/B-B/1.02/sto-6g/B-B_1.02_sto-6g_as-010-010_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-018_JW.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-008-012_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-016_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-014_JW.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-008-012_JW.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-018_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-020_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-016_JW.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-008-014_JW.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-008-014_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-014_BK.config +./library/B-B/1.93/hgbs-5/B-B_1.93_hgbs-5_as-010-020_JW.config +./library/B-B/1.93/sto-6g/B-B_1.93_sto-6g_as-010-010_JW.config +./library/B-B/1.93/sto-6g/B-B_1.93_sto-6g_as-010-010_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-008-012_JW.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-008-014_JW.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-008-012_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-016_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-016_JW.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-018_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-018_JW.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-014_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-014_JW.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-008-014_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-020_BK.config +./library/B-B/4.19/hgbs-5/B-B_4.19_hgbs-5_as-010-020_JW.config +./library/B-B/4.19/sto-6g/B-B_4.19_sto-6g_as-010-010_BK.config +./library/B-B/4.19/sto-6g/B-B_4.19_sto-6g_as-010-010_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-018_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-008-012_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-014_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-014_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-008-014_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-008-012_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-008-014_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-016_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-020_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-016_BK.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-018_JW.config +./library/B-B/2.38/hgbs-5/B-B_2.38_hgbs-5_as-010-020_JW.config +./library/B-B/2.38/sto-6g/B-B_2.38_sto-6g_as-010-010_JW.config +./library/B-B/2.38/sto-6g/B-B_2.38_sto-6g_as-010-010_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-008-012_JW.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-018_JW.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-020_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-008-014_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-014_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-008-012_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-008-014_JW.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-014_JW.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-018_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-016_JW.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-016_BK.config +./library/B-B/4.65/hgbs-5/B-B_4.65_hgbs-5_as-010-020_JW.config +./library/B-B/4.65/sto-6g/B-B_4.65_sto-6g_as-010-010_BK.config +./library/B-B/4.65/sto-6g/B-B_4.65_sto-6g_as-010-010_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-018_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-014_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-008-012_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-014_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-008-014_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-020_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-018_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-008-014_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-008-012_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-016_BK.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-020_JW.config +./library/B-B/1.47/hgbs-5/B-B_1.47_hgbs-5_as-010-016_JW.config +./library/B-B/1.47/sto-6g/B-B_1.47_sto-6g_as-010-010_JW.config +./library/B-B/1.47/sto-6g/B-B_1.47_sto-6g_as-010-010_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-008-014_JW.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-008-014_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-008-012_JW.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-020_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-014_JW.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-020_JW.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-014_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-008-012_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-016_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-018_BK.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-018_JW.config +./library/B-B/2.83/hgbs-5/B-B_2.83_hgbs-5_as-010-016_JW.config +./library/B-B/2.83/sto-6g/B-B_2.83_sto-6g_as-010-010_BK.config +./library/B-B/2.83/sto-6g/B-B_2.83_sto-6g_as-010-010_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-027_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-019_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-025_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-021_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-023_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-021_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-017_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-019_BK.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-017_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-027_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-023_JW.config +./library/He-H/0.68/hgbs-5/He-H_0.68_hgbs-5_as-003-025_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-019_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-017_BK.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-023_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-025_BK.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-025_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-027_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-019_BK.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-021_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-017_JW.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-023_BK.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-021_BK.config +./library/He-H/0.88/hgbs-5/He-H_0.88_hgbs-5_as-003-027_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-021_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-025_JW.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-027_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-019_JW.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-021_JW.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-027_JW.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-019_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-017_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-025_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-017_JW.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-023_BK.config +./library/He-H/1.92/hgbs-5/He-H_1.92_hgbs-5_as-003-023_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-021_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-023_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-027_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-019_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-025_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-023_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-017_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-019_JW.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-025_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-027_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-017_BK.config +./library/He-H/2.13/hgbs-5/He-H_2.13_hgbs-5_as-003-021_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-027_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-019_BK.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-025_BK.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-027_BK.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-019_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-025_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-017_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-023_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-021_JW.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-017_BK.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-023_BK.config +./library/He-H/2.34/hgbs-5/He-H_2.34_hgbs-5_as-003-021_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-027_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-023_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-019_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-023_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-017_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-025_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-021_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-025_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-019_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-017_JW.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-027_BK.config +./library/He-H/1.72/hgbs-5/He-H_1.72_hgbs-5_as-003-021_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-017_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-019_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-027_JW.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-021_JW.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-023_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-025_JW.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-019_JW.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-025_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-023_JW.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-021_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-027_BK.config +./library/He-H/1.30/hgbs-5/He-H_1.30_hgbs-5_as-003-017_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-021_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-023_BK.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-017_BK.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-021_BK.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-019_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-027_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-017_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-023_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-025_BK.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-025_JW.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-027_BK.config +./library/He-H/1.09/hgbs-5/He-H_1.09_hgbs-5_as-003-019_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-023_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-023_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-025_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-021_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-019_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-025_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-027_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-019_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-017_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-017_BK.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-027_JW.config +./library/He-H/0.47/hgbs-5/He-H_0.47_hgbs-5_as-003-021_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-025_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-023_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-021_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-027_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-019_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-025_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-019_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-021_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-023_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-027_BK.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-017_JW.config +./library/He-H/1.51/hgbs-5/He-H_1.51_hgbs-5_as-003-017_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-022_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-014_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-020_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-024_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-022_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-016_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-016_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-024_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-018_JW.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-014_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-020_BK.config +./library/B-H/1.64/hgbs-5/B-H_1.64_hgbs-5_as-006-018_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-020_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-024_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-022_JW.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-018_JW.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-018_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-024_JW.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-022_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-014_JW.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-016_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-014_BK.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-020_JW.config +./library/B-H/2.89/hgbs-5/B-H_2.89_hgbs-5_as-006-016_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-014_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-014_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-022_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-022_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-024_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-024_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-016_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-016_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-018_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-020_BK.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-018_JW.config +./library/B-H/1.01/hgbs-5/B-H_1.01_hgbs-5_as-006-020_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-020_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-016_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-018_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-024_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-014_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-018_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-016_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-022_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-024_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-014_BK.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-020_JW.config +./library/B-H/1.95/hgbs-5/B-H_1.95_hgbs-5_as-006-022_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-020_BK.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-020_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-022_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-024_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-018_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-016_BK.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-024_BK.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-016_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-022_BK.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-014_BK.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-014_JW.config +./library/B-H/2.57/hgbs-5/B-H_2.57_hgbs-5_as-006-018_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-014_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-022_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-024_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-020_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-016_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-016_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-018_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-024_JW.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-020_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-014_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-018_BK.config +./library/B-H/2.26/hgbs-5/B-H_2.26_hgbs-5_as-006-022_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-016_JW.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-020_JW.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-022_JW.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-024_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-020_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-018_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-024_JW.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-016_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-022_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-014_JW.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-014_BK.config +./library/B-H/0.70/hgbs-5/B-H_0.70_hgbs-5_as-006-018_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-024_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-014_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-016_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-018_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-020_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-016_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-024_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-020_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-018_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-022_BK.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-022_JW.config +./library/B-H/1.33/hgbs-5/B-H_1.33_hgbs-5_as-006-014_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-016_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-022_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-018_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-020_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-024_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-014_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-016_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-024_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-018_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-020_JW.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-014_BK.config +./library/B-H/3.20/hgbs-5/B-H_3.20_hgbs-5_as-006-022_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-024_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-022_BK.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-018_BK.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-020_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-016_BK.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-016_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-014_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-022_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-018_JW.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-024_BK.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-020_BK.config +./library/B-H/3.51/hgbs-5/B-H_3.51_hgbs-5_as-006-014_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-020_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-022_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-024_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-024_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-016_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-016_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-022_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-018_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-026_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-026_BK.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-020_JW.config +./library/Li-H/2.31/hgbs-5/Li-H_2.31_hgbs-5_as-004-018_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-016_JW.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-022_JW.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-016_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-024_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-026_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-018_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-020_JW.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-022_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-020_BK.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-024_JW.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-018_JW.config +./library/Li-H/1.43/hgbs-5/Li-H_1.43_hgbs-5_as-004-026_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-018_BK.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-026_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-026_BK.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-020_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-018_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-024_BK.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-016_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-020_BK.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-022_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-022_BK.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-024_JW.config +./library/Li-H/3.19/hgbs-5/Li-H_3.19_hgbs-5_as-004-016_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-016_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-024_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-020_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-016_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-018_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-024_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-022_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-018_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-022_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-026_JW.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-026_BK.config +./library/Li-H/2.75/hgbs-5/Li-H_2.75_hgbs-5_as-004-020_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-018_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-026_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-018_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-020_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-024_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-024_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-020_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-016_BK.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-016_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-022_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-026_JW.config +./library/Li-H/4.95/hgbs-5/Li-H_4.95_hgbs-5_as-004-022_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-022_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-020_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-024_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-018_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-026_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-016_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-018_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-020_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-016_JW.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-026_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-022_BK.config +./library/Li-H/3.63/hgbs-5/Li-H_3.63_hgbs-5_as-004-024_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-020_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-016_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-018_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-020_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-026_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-022_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-026_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-024_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-024_JW.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-016_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-022_BK.config +./library/Li-H/0.99/hgbs-5/Li-H_0.99_hgbs-5_as-004-018_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-026_JW.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-022_JW.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-020_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-024_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-020_JW.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-022_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-026_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-018_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-018_JW.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-016_BK.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-016_JW.config +./library/Li-H/4.07/hgbs-5/Li-H_4.07_hgbs-5_as-004-024_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-024_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-020_BK.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-022_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-026_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-018_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-016_BK.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-020_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-018_BK.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-016_JW.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-026_BK.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-024_BK.config +./library/Li-H/4.51/hgbs-5/Li-H_4.51_hgbs-5_as-004-022_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-020_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-018_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-026_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-026_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-016_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-022_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-016_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-024_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-022_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-018_JW.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-024_BK.config +./library/Li-H/1.87/hgbs-5/Li-H_1.87_hgbs-5_as-004-020_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-026_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-018_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-020_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-018_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-024_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-026_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-024_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-016_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-022_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-022_BK.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-016_JW.config +./library/He-He/2.51/hgbs-5/He-He_2.51_hgbs-5_as-004-020_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-018_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-026_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-022_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-024_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-026_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-020_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-020_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-024_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-022_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-016_JW.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-018_BK.config +./library/He-He/0.80/hgbs-5/He-He_0.80_hgbs-5_as-004-016_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-024_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-024_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-026_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-018_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-020_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-016_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-016_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-018_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-020_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-022_JW.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-026_BK.config +./library/He-He/2.76/hgbs-5/He-He_2.76_hgbs-5_as-004-022_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-022_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-026_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-022_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-016_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-020_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-024_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-024_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-018_BK.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-018_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-026_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-020_JW.config +./library/He-He/1.78/hgbs-5/He-He_1.78_hgbs-5_as-004-016_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-016_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-024_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-020_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-022_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-024_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-026_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-022_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-018_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-016_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-018_JW.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-026_BK.config +./library/He-He/2.27/hgbs-5/He-He_2.27_hgbs-5_as-004-020_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-020_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-020_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-018_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-022_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-024_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-022_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-024_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-016_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-018_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-026_JW.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-016_BK.config +./library/He-He/2.02/hgbs-5/He-He_2.02_hgbs-5_as-004-026_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-026_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-018_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-020_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-022_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-026_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-018_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-024_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-016_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-024_BK.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-020_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-016_JW.config +./library/He-He/1.04/hgbs-5/He-He_1.04_hgbs-5_as-004-022_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-022_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-022_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-024_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-024_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-026_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-026_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-016_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-018_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-020_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-018_JW.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-016_BK.config +./library/He-He/0.55/hgbs-5/He-He_0.55_hgbs-5_as-004-020_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-024_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-018_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-026_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-024_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-018_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-022_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-016_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-022_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-020_JW.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-026_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-016_BK.config +./library/He-He/1.29/hgbs-5/He-He_1.29_hgbs-5_as-004-020_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-022_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-026_JW.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-016_JW.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-024_JW.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-018_JW.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-020_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-018_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-024_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-026_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-020_JW.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-016_BK.config +./library/He-He/1.53/hgbs-5/He-He_1.53_hgbs-5_as-004-022_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-017_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-015_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-015_BK.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-023_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-019_BK.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-013_BK.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-021_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-013_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-019_JW.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-017_BK.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-021_BK.config +./library/atoms/N/hgbs-5/N_atom_hgbs-5_as-007-023_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-022_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-018_JW.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-014_JW.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-014_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-020_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-016_JW.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-022_JW.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-024_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-024_JW.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-016_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-018_BK.config +./library/atoms/C/hgbs-5/C_atom_hgbs-5_as-006-020_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-013_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-015_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-015_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-007-013_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-017_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-007-013_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-019_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-013_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-017_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-021_BK.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-021_JW.config +./library/atoms/F/hgbs-5/F_atom_hgbs-5_as-009-019_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-023_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-021_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-017_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-027_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-023_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-025_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-019_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-017_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-027_BK.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-019_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-021_JW.config +./library/atoms/Li/hgbs-5/Li_atom_hgbs-5_as-003-025_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-025_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-021_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-015_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-019_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-019_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-017_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-015_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-023_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-025_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-017_JW.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-023_BK.config +./library/atoms/B/hgbs-5/B_atom_hgbs-5_as-005-021_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-020_BK.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-022_BK.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-014_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-012_BK.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-014_BK.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-018_BK.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-018_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-016_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-020_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-012_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-022_JW.config +./library/atoms/O/hgbs-5/O_atom_hgbs-5_as-008-016_BK.config +./library/atoms/He/hgbs-5/He_atom_hgbs-5_as-002-018_JW.config +./library/atoms/He/hgbs-5/He_atom_hgbs-5_as-002-020_BK.config +./library/atoms/He/hgbs-5/He_atom_hgbs-5_as-002-018_BK.config +./library/atoms/He/hgbs-5/He_atom_hgbs-5_as-002-020_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-014_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-018_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-020_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-008-012_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-014_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-008-012_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-020_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-016_JW.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-016_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-008-014_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-010-018_BK.config +./library/atoms/Ne/hgbs-5/Ne_atom_hgbs-5_as-008-014_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-020_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-016_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-022_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-020_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-024_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-016_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-024_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-026_JW.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-018_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-022_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-026_BK.config +./library/atoms/Be/hgbs-5/Be_atom_hgbs-5_as-004-018_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-026_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-024_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-020_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-028_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-020_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-022_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-018_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-022_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-028_BK.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-018_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-026_JW.config +./library/H-H/0.73/hgbs-5/H-H_0.73_hgbs-5_as-002-024_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-020_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-028_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-020_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-018_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-024_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-018_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-026_JW.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-028_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-024_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-026_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-022_BK.config +./library/H-H/1.24/hgbs-5/H-H_1.24_hgbs-5_as-002-022_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-022_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-018_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-024_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-018_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-026_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-020_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-020_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-024_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-028_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-028_JW.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-022_BK.config +./library/H-H/1.92/hgbs-5/H-H_1.92_hgbs-5_as-002-026_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-028_BK.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-024_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-018_BK.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-026_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-020_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-022_BK.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-022_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-028_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-026_BK.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-018_JW.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-024_BK.config +./library/H-H/1.07/hgbs-5/H-H_1.07_hgbs-5_as-002-020_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-028_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-018_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-024_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-022_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-026_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-024_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-020_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-018_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-022_BK.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-028_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-020_JW.config +./library/H-H/1.58/hgbs-5/H-H_1.58_hgbs-5_as-002-026_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-024_JW.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-020_JW.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-020_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-022_JW.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-018_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-022_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-018_JW.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-026_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-028_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-024_BK.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-026_JW.config +./library/H-H/1.41/hgbs-5/H-H_1.41_hgbs-5_as-002-028_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-026_BK.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-022_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-018_BK.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-020_BK.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-020_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-026_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-028_BK.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-022_BK.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-024_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-028_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-018_JW.config +./library/H-H/0.38/hgbs-5/H-H_0.38_hgbs-5_as-002-024_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-018_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-022_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-028_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-020_JW.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-026_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-018_JW.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-026_JW.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-022_JW.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-024_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-024_JW.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-020_BK.config +./library/H-H/0.55/hgbs-5/H-H_0.55_hgbs-5_as-002-028_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-018_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-024_BK.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-028_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-026_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-018_BK.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-024_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-020_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-022_JW.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-026_BK.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-028_BK.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-022_BK.config +./library/H-H/0.90/hgbs-5/H-H_0.90_hgbs-5_as-002-020_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-018_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-022_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-028_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-028_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-024_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-024_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-020_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-022_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-026_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-018_JW.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-026_BK.config +./library/H-H/1.75/hgbs-5/H-H_1.75_hgbs-5_as-002-020_BK.config diff --git a/big_hamiltonian_diagonalizer/README.md b/big_hamiltonian_diagonalizer/README.md new file mode 100644 index 00000000..63fa90c8 --- /dev/null +++ b/big_hamiltonian_diagonalizer/README.md @@ -0,0 +1,628 @@ +# Large-Matrix Low-Energy Diagonalization Workflow + +This directory contains a workflow for: + +1. generating QHAT/OpenFermion Hamiltonian pickle files from `.config` inputs, +2. computing a small number of the lowest-energy eigenvalues without constructing the full many-body Hamiltonian matrix, +3. running several diagonalizations in batch, and +4. collecting the results into a tab-separated table. + +The central diagonalization script is `qhat_low_energies_fci.py`. It converts an OpenFermion-style `InteractionOperator` pickle back to spatial-orbital integrals and uses PySCF's direct FCI solver in a fixed `(N_alpha, N_beta)` electron sector. + +> **Important method note:** large sparse Hermitian eigenproblems are commonly approached with the **Lanczos method**, and this README emphasizes that Krylov-subspace viewpoint. The supplied Python code itself currently uses PySCF's **Davidson** solver (`direct_spin1.FCI` with `davidson_only = True`), not a literal Lanczos recurrence. Davidson and Lanczos are related iterative subspace methods, but they are not the same algorithm. A Lanczos algorithm that requires a GPGPU is also in this directory but is of limited use as it requires more that 96GB of VRAM to get past 30 qubit diagonalizations, its name is qhat_pauli_matrix_free.py. + +--- + +## 1. Why use an iterative method for large Hamiltonians? + +A Hamiltonian acting on `n` qubits has a formal Hilbert-space dimension of + +```text +2^n +``` + +so explicitly constructing and storing the entire matrix quickly becomes impractical. + +For the molecular/Fermionic problem handled here, the calculation can instead be restricted to a fixed electron-number and spin sector. If there are `norb` spatial orbitals with `N_alpha` alpha electrons and `N_beta` beta electrons, the CI-vector dimension is + +```text +C(norb, N_alpha) * C(norb, N_beta) +``` + +The supplied solver works directly with Hamiltonian-vector contractions in this sector. It does **not** construct the full `2^n x 2^n` Hamiltonian matrix. + +This is exactly the kind of problem for which iterative eigensolvers such as Lanczos or Davidson are useful: usually only a few extremal eigenvalues, especially the ground state and a few low-lying excited states, are wanted. + +--- + +## 2. Lanczos diagonalization: the key idea + +For a large sparse Hermitian matrix `H`, the Lanczos method starts from a normalized vector `v1` and builds a Krylov subspace + +```text +K_m(H, v1) = span{v1, H v1, H^2 v1, ..., H^(m-1) v1}. +``` + +Rather than diagonalizing `H` directly, Lanczos constructs a much smaller tridiagonal matrix representing `H` in this Krylov basis. Its eigenvalues are Ritz approximations to eigenvalues of the original problem. Extremal eigenvalues, including the lowest energies, often converge long before the full spectrum is known. + +The ideal Lanczos recurrence is a short three-term relation, + +```text +beta_(j+1) v_(j+1) = H v_j - alpha_j v_j - beta_j v_(j-1), +``` + +which means the main expensive operation is repeatedly applying `H` to a vector. + +### Why that matters here + +The essential benefit is that a matrix-free implementation only needs an operation equivalent to + +```text +vector_out = H @ vector_in +``` + +without storing all elements of `H`. + +That is also the central strategy of the supplied diagonalizer. PySCF contracts the Hamiltonian with CI vectors directly, avoiding construction of the full many-body sparse matrix. + +### Davidson versus Lanczos in this repository + +The supplied `qhat_low_energies_fci.py` uses the **Davidson method** through PySCF, not Lanczos. Davidson also builds a low-dimensional trial subspace and extracts Ritz eigenpairs, but it expands the subspace using preconditioned residual vectors rather than the strict Lanczos three-term recurrence. + +For this workflow, the practical message is the same: + +- do not form the enormous full Hamiltonian matrix, +- work in the physically relevant electron/spin sector, +- request only the lowest few roots, +- iteratively apply the Hamiltonian to trial vectors, and +- control convergence with the subspace size, tolerance, and iteration limit. + +If a future implementation is changed to an explicit Lanczos solver, the surrounding config -> pickle -> batch -> table workflow can remain essentially the same. + +--- + +## 3. Files used by the workflow + +The supplied files are: + +```text +qhat_low_energies_fci.py # main low-energy Davidson/FCI diagonalizer +RunAllHamgens.cmd # batch generation of Hamiltonian pickles +RunFCIAllDiagonalizationsK3.cmd # batch of k=3 low-energy diagonalizations +proc3LowestEnergiesFromH.cmd # builds a TSV table from diagonalization log files +proc3_lowest_energies.py # extracts 3 energies from one output directory +requirements.txt # Python dependencies +``` + +The uploaded diagonalizer was named `qhat_low_energies_fci(1).py`, while `RunFCIAllDiagonalizationsK3.cmd` calls `qhat_low_energies_fci.py`. Rename the file if necessary: + +```bash +mv 'qhat_low_energies_fci(1).py' qhat_low_energies_fci.py +``` + +### `.cmd` files are Bash scripts here + +Despite their `.cmd` extension, the supplied batch files use Bash syntax such as `|&`, `time`, and `shopt`. Run them with Bash on Linux, a Linux cluster, WSL, or another Bash environment. Do not assume they are Windows `cmd.exe` batch files. + +--- + +## 4. Python version and virtual environment + +Use Python 3.10 or newer. The diagonalizer uses modern Python type syntax and should be run in a clean virtual environment. + +### Create the environment + +From the project directory: + +```bash +python3 -m venv .venv +source .venv/bin/activate +``` + +Upgrade packaging tools: + +```bash +python -m pip install --upgrade pip setuptools wheel +``` + +Install the dependencies: + +```bash +python -m pip install -r requirements.txt +``` + +Verify the important packages: + +```bash +python -c "import numpy, scipy, openfermion, pyscf; print('Python environment OK')" +``` + +When returning to the project later, reactivate the environment with: + +```bash +source .venv/bin/activate +``` + +Leave it with: + +```bash +deactivate +``` + +### Why OpenFermion is included + +The main solver does not explicitly import OpenFermion for its normal solve path, but it unpickles an OpenFermion `InteractionOperator`-like object. Python usually needs the class's defining package available while unpickling. OpenFermion is also required by the optional `--validate-small` cross-check. + +### Possible additional `hamgen.py` dependencies + +`hamgen.py` itself was not included with the supplied files, so its complete dependency set cannot be verified here. If it imports additional project-specific or chemistry packages, add them to `requirements.txt` or install them into the same virtual environment. + +--- + +## 5. Step 1: go from `.config` files to Hamiltonian `.pickle` files + +`RunAllHamgens.cmd` runs commands of the form + +```bash +time python hamgen.py ../../F-F_1.00_hgbs-5_as-010-010_JW.config \ + |& tee OutputF-F_1.00_hgbs-5_as-010-010_JW.txt +``` + +The supplied batch file contains six such cases. + +### Expected setup + +Run the batch file from a directory where: + +- `hamgen.py` is available as `./hamgen.py`, and +- the config files are reachable using the relative paths written in `RunAllHamgens.cmd`, currently `../../.config`. + +Because the paths are relative to the **current working directory**, check your location before running: + +```bash +pwd +ls hamgen.py +ls ../../F-F_1.00_hgbs-5_as-010-010_JW.config +``` + +Then run: + +```bash +bash RunAllHamgens.cmd +``` + +Each `hamgen.py` run is timed and its terminal output is copied to an `Output*.txt` log by `tee`. + +### Expected pickle names + +The following diagonalization batch expects these pickle files: + +```text +F-F_1.00_hgbs-5_as-010-010.pickle +F-F_1.00_hgbs-5_as-010-012.pickle +F-F_1.00_hgbs-5_as-012-012.pickle +F-F_1.00_hgbs-5_as-012-014.pickle +F-F_1.00_hgbs-5_as-014-014.pickle +F-F_1.00_hgbs-5_as-014-016.pickle +``` + +Confirm that Hamiltonian generation actually produced them: + +```bash +ls -lh *.pickle +``` + +The attached files do not include `hamgen.py`, so this README cannot verify exactly how its config parser chooses the output filename or what every config field means. The config-to-pickle step above reflects the actual commands in `RunAllHamgens.cmd` and the pickle names expected by the diagonalization batch. + +--- + +## 6. Step 2: inspect one Hamiltonian before solving + +Before starting an expensive run, use the main script's `--inspect-only` option. For example: + +```bash +python qhat_low_energies_fci.py \ + F-F_1.00_hgbs-5_as-012-012.pickle \ + -o test_inspect \ + --num-electrons 12 \ + --spin 0 \ + -k 3 \ + --threads 32 \ + --inspect-only +``` + +The script reports quantities including: + +- number of spin orbitals/qubits, +- number of spatial orbitals, +- `N_alpha` and `N_beta`, +- CI-sector dimension, +- memory for one `float64` CI vector, +- requested number of roots, +- integral storage, +- PySCF memory limit, and +- thread count. + +This is useful for detecting a calculation that is too large before entering the iterative solve. + +--- + +## 7. Step 3: diagonalize one Hamiltonian + +A representative command is: + +```bash +python qhat_low_energies_fci.py \ + F-F_1.00_hgbs-5_as-012-012.pickle \ + -o FCI-F-F_1.00_hgbs-5_as-012-012-24q_lowest3 \ + --num-electrons 12 \ + --spin 0 \ + -k 3 \ + --threads 32 \ + --tol 1e-9 +``` + +### Important options + +`--num-electrons N` +: Total active electrons in the calculation. + +`--spin S` +: `N_alpha - N_beta = 2*S_z`, **not** spin multiplicity. For an even-electron singlet sector, use `0`. + +`-k`, `--num-roots K` +: Number of lowest-energy roots to request. + +`--threads N` +: Sets the OpenMP/BLAS thread count used by the solver. + +`--tol VALUE` +: Davidson convergence tolerance. The supplied batch uses `1e-9`. + +`--max-cycle N` +: Maximum number of Davidson cycles. Default: `100`. + +`--max-space N` +: Maximum Davidson trial-subspace size before restart. Default: `20`. + +`--max-memory-mb N` +: Explicit PySCF memory limit. If omitted or zero, the script attempts to use about 80% of physical memory. + +`--save-vectors` +: Also save each returned CI eigenvector. This can require substantial disk space. + +`--inspect-only` +: Load and analyze the Hamiltonian and sector dimensions but do not solve. + +`--validate-small` +: For small problems, compare the roots against an OpenFermion number-preserving sparse solve. The script restricts this check to at most 18 spin orbitals and currently supports `--spin 0` for the automatic comparison. + +--- + +## 8. Output from one diagonalization + +The output directory contains: + +```text +eigenvalues.npy # returned low-energy eigenvalues +lowest_energies.txt # human-readable root index and energy table +diagonal_values.npy # same returned low-energy values; NOT the full spectrum +metadata.json # solver, sector, convergence, timing, and memory metadata +ci_vector_*.npy # only when --save-vectors is requested +``` + +The script also writes progress and the final roots to standard output. The batch files pipe this output into `OutFCITrace-*.txt` logs. + +A successful final section looks conceptually like: + +```text +Lowest energies (Hartree): + 0 converged + 1 converged + 2 converged +Solve time: s +Output: +``` + +If one or more roots do not meet the convergence tolerance, the script warns and exits with status `2`. Typical responses are to request fewer roots, increase `--max-cycle`, or increase `--max-space` while watching memory use. + +--- + +## 9. Step 4: run all diagonalizations + +The supplied `RunFCIAllDiagonalizationsK3.cmd` runs six calculations with `k=3` and 32 threads. + +Run it under Bash: + +```bash +bash RunFCIAllDiagonalizationsK3.cmd +``` + +Each line follows the pattern + +```bash +time python qhat_low_energies_fci.py INPUT.pickle \ + -o OUTPUT_DIRECTORY \ + --num-electrons N \ + --spin 0 \ + -k 3 \ + --threads 32 \ + --tol 1e-9 \ + |& tee OutFCITrace-CASE-k3.txt +``` + +### Check the electron counts carefully + +The supplied batch uses: + +```text +010-010 -> 10 electrons +010-012 -> 10 electrons +012-012 -> 12 electrons +012-014 -> 12 electrons +014-014 -> 14 electrons +014-016 -> 14 electrons +``` + +These values are part of the physical sector selection, so they should be verified against the intended active-space definition before a long production run. + +### Note about output-directory labels + +Several output-directory names in the supplied batch contain the repeated text + +```text +...as-012-012-...q_lowest3 +``` + +even when the input pickle is another active-space case. This does not change the input Hamiltonian passed to the solver, but it can make the resulting directory names misleading. Consider correcting those `-o` names before running a new production batch. + +--- + +## 10. Step 5: turn completed runs into a table + +There are two supplied `proc3*` approaches. + +### Recommended: `proc3LowestEnergiesFromH.cmd` + +This is the more complete table generator. It reads the `OutFCITrace-*.txt` files and prints these columns: + +```text +Filename +Qubits +Orbitals +MaxMemoryMB +LowestEnergy0 +LowestEnergy1 +LowestEnergy2 +SolveTime +``` + +After all six diagonalizations finish, run: + +```bash +bash proc3LowestEnergiesFromH.cmd OutFCITrace-*.txt > lowest_energies_summary.tsv +``` + +**Do not quote the wildcard** in this particular invocation. Bash should expand `OutFCITrace-*.txt` into the individual filenames before passing them to the script. + +Inspect the result: + +```bash +cat lowest_energies_summary.tsv +``` + +If the `column` utility is installed, a convenient terminal view is: + +```bash +column -t -s $'\t' lowest_energies_summary.tsv +``` + +This is the `proc3*` file to use when you want one combined table with run metadata and timings. + +### Alternative: `proc3_lowest_energies.py` + +This Python script reads one diagonalization output directory, loads its `eigenvalues.npy`, sorts the values, and prints one tab-separated row containing + +```text +directory_name lowest_0 lowest_1 lowest_2 +``` + +For one directory: + +```bash +python proc3_lowest_energies.py FCI-F-F_1.00_hgbs-5_as-012-012-24q_lowest3 +``` + +To aggregate several output directories: + +```bash +{ + printf 'Directory\tLowestEnergy0\tLowestEnergy1\tLowestEnergy2\n' + shopt -s nullglob + for d in FCI-*lowest3; do + python proc3_lowest_energies.py "$d" + done +} > lowest_energies_from_npy.tsv +``` + +This route is useful when the log files are missing but the output directories and `eigenvalues.npy` files are intact. It does **not** include qubit count, orbital count, memory, or solve time. + +--- + +## 11. Suggested end-to-end workflow + +Activate the environment: + +```bash +source .venv/bin/activate +``` + +Generate all Hamiltonian pickles: + +```bash +bash RunAllHamgens.cmd +``` + +Confirm the pickles exist: + +```bash +ls -lh *.pickle +``` + +Optionally inspect the largest case first: + +```bash +python qhat_low_energies_fci.py \ + F-F_1.00_hgbs-5_as-014-016.pickle \ + -o inspect_014_016 \ + --num-electrons 14 \ + --spin 0 \ + -k 3 \ + --threads 32 \ + --inspect-only +``` + +Run all diagonalizations: + +```bash +bash RunFCIAllDiagonalizationsK3.cmd +``` + +Check for convergence warnings: + +```bash +grep -H -E 'NOT CONVERGED|WARNING:|ERROR:' OutFCITrace-*.txt +``` + +A grep command that prints nothing is a good sign, but the final energies and metadata should still be checked. + +Build the summary table: + +```bash +bash proc3LowestEnergiesFromH.cmd OutFCITrace-*.txt > lowest_energies_summary.tsv +``` + +Display it: + +```bash +column -t -s $'\t' lowest_energies_summary.tsv +``` + +--- + +## 12. Convergence and performance notes + +### Request only the roots you need + +The supplied production batch asks for only three roots: + +```bash +-k 3 +``` + +For very large CI spaces, asking for many roots increases both time and subspace/vector storage. + +### Use `--inspect-only` before very large jobs + +The script estimates the CI dimension and memory for a single vector. This is a useful first safety check because a matrix-free algorithm avoids the full Hamiltonian matrix but still needs CI vectors and Davidson work vectors. + +### Threads + +`--threads 32` sets common BLAS/OpenMP environment variables and asks PySCF to use that thread count. More threads do not always provide linear speedup; use a value appropriate to the node allocation. + +### Davidson subspace + +If convergence is difficult: + +```bash +--max-cycle 200 --max-space 30 +``` + +may help, but larger subspaces require more memory. Change one parameter at a time and keep the logs for comparison. + +### Saved eigenvectors + +Do not use `--save-vectors` unless the CI vectors are actually needed. A single vector has one `float64` value per determinant in the selected sector, so storage can become large. + +--- + +## 13. Common problems + +### `python: can't open file 'qhat_low_energies_fci.py'` + +The uploaded file may still be named `qhat_low_energies_fci(1).py`. Rename it: + +```bash +mv 'qhat_low_energies_fci(1).py' qhat_low_energies_fci.py +``` + +### Pickle fails to load because an OpenFermion module/class is missing + +Make sure the virtual environment is active and OpenFermion is installed: + +```bash +python -m pip install -r requirements.txt +``` + +### `hamgen.py` cannot find a config file + +The config paths in `RunAllHamgens.cmd` are relative to the directory from which the script is launched. Check: + +```bash +pwd +ls ../../*.config +``` + +and edit the batch file paths if the project was moved. + +### Spin-block validation error + +The diagonalizer checks whether the tensors look like the standard OpenFermion even/odd alpha/beta spin-orbital ordering. Do not bypass this validation with `--skip-spin-block-check` unless the tensor convention is independently known and verified. + +### One or more roots are not converged + +Look for `NOT CONVERGED` in the log. Consider increasing `--max-cycle`, increasing `--max-space` if memory allows, or reducing `-k`. + +### Post-processing table is empty + +For the Bash postprocessor, make sure the wildcard expands: + +```bash +ls OutFCITrace-*.txt +bash proc3LowestEnergiesFromH.cmd OutFCITrace-*.txt +``` + +Do not use a quoted literal glob such as: + +```bash +# Not recommended here: +bash proc3LowestEnergiesFromH.cmd 'OutFCITrace-*.txt' +``` + +because the script expects actual file arguments. + +--- + +## 14. Reproducibility recommendations + +For production calculations, keep together: + +- the exact `.config` files, +- the generated `.pickle` files or a reproducible way to regenerate them, +- `hamgen.py`, +- `qhat_low_energies_fci.py`, +- the batch scripts, +- `requirements.txt`, +- all `Output*.txt` Hamiltonian-generation logs, +- all `OutFCITrace-*.txt` diagonalization logs, +- the FCI output directories and `metadata.json` files, and +- the final `.tsv` summary table. + +It is also useful to save the environment snapshot: + +```bash +python --version > python-version.txt +python -m pip freeze > requirements-lock.txt +``` + +`requirements.txt` remains the human-maintained dependency list, while `requirements-lock.txt` records the exact versions used for a particular run. diff --git a/big_hamiltonian_diagonalizer/RunAllHamgensExampleScript.cmd b/big_hamiltonian_diagonalizer/RunAllHamgensExampleScript.cmd new file mode 100644 index 00000000..01547e0d --- /dev/null +++ b/big_hamiltonian_diagonalizer/RunAllHamgensExampleScript.cmd @@ -0,0 +1,6 @@ +time python hamgen.py ../../F-F_1.00_hgbs-5_as-010-010_JW.config |& tee OutputF-F_1.00_hgbs-5_as-010-010_JW.txt +time python hamgen.py ../../F-F_1.00_hgbs-5_as-010-012_JW.config |& tee OutputF-F_1.00_hgbs-5_as-010-012_JW.txt +time python hamgen.py ../../F-F_1.00_hgbs-5_as-012-012_JW.config |& tee OutputF-F_1.00_hgbs-5_as-012-012_JW.txt +time python hamgen.py ../../F-F_1.00_hgbs-5_as-012-014_JW.config |& tee OutputF-F_1.00_hgbs-5_as-012-014_JW.txt +time python hamgen.py ../../F-F_1.00_hgbs-5_as-014-014_JW.config |& tee OutputF-F_1.00_hgbs-5_as-014-014_JW.txt +time python hamgen.py ../../F-F_1.00_hgbs-5_as-014-016_JW.config |& tee OutputF-F_1.00_hgbs-5_as-014-016_JW.txt diff --git a/big_hamiltonian_diagonalizer/RunFCIAllDiagonalizationsExampleScript.cmd b/big_hamiltonian_diagonalizer/RunFCIAllDiagonalizationsExampleScript.cmd new file mode 100644 index 00000000..2894842c --- /dev/null +++ b/big_hamiltonian_diagonalizer/RunFCIAllDiagonalizationsExampleScript.cmd @@ -0,0 +1,6 @@ +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-010-010.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-20q_lowest3 --num-electrons 10 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-010-010-k3.txt +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-010-012.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-22q_lowest3 --num-electrons 10 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-010-012-k3.txt +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-012-012.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-24q_lowest3 --num-electrons 12 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-012-012-k3.txt +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-012-014.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-26q_lowest3 --num-electrons 12 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-012-014-k3.txt +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-014-014.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-28q_lowest3 --num-electrons 14 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-014-014-k3.txt +time python qhat_low_energies_fci.py F-F_1.00_hgbs-5_as-014-016.pickle -o FCI-F-F_1.00_hgbs-5_as-012-012-30q_lowest3 --num-electrons 14 --spin 0 -k 3 --threads 32 --tol 1e-9 |& tee OutFCITrace-F-F_1.00_hgbs-5_as-014-016-k3.txt diff --git a/big_hamiltonian_diagonalizer/proc3LowestEnergiesFromH.cmd b/big_hamiltonian_diagonalizer/proc3LowestEnergiesFromH.cmd new file mode 100644 index 00000000..baeab0c7 --- /dev/null +++ b/big_hamiltonian_diagonalizer/proc3LowestEnergiesFromH.cmd @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# Enable nullglob so the loop doesn't run with the literal pattern if no files match +shopt -s nullglob + +if [ $# -eq 0 ]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +# Print header +echo -e "Filename\tQubits\tOrbitals\tMaxMemoryMB\tLowestEnergy0\tLowestEnergy1\tLowestEnergy2\tSolveTime" + +for file in "$@"; do + [ -f "$file" ] || continue + + filename=$(basename "$file") + + # Extract fields + qubits=$(grep "^Spin orbitals/qubits:" "$file" | awk '{print $NF}') + orbitals=$(grep "^Spatial orbitals:" "$file" | awk '{print $NF}') + memory=$(grep "^PySCF max_memory:" "$file" | awk '{print $(NF-1)}') + + # Extract the three lowest energies + energy0=$(grep -A4 "^Lowest energies" "$file" | awk '$1=="0" {print $2}') + energy1=$(grep -A4 "^Lowest energies" "$file" | awk '$1=="1" {print $2}') + energy2=$(grep -A4 "^Lowest energies" "$file" | awk '$1=="2" {print $2}') + + # Extract solve time (0.945 is field 3: "Solve" $1, "time:" $2, "0.945" $3) + solvetime=$(grep "^Solve time:" "$file" | awk '{print $3}') + + # Output formatted row + echo -e "${filename}\t${qubits}\t${orbitals}\t${memory}\t${energy0}\t${energy1}\t${energy2}\t${solvetime}" +done + diff --git a/big_hamiltonian_diagonalizer/qhat_low_energies_fci.py b/big_hamiltonian_diagonalizer/qhat_low_energies_fci.py new file mode 100644 index 00000000..d8cb4931 --- /dev/null +++ b/big_hamiltonian_diagonalizer/qhat_low_energies_fci.py @@ -0,0 +1,443 @@ +#!/usr/bin/env python3 +"""Memory-efficient lowest-energy solver for QHAT/OpenFermion InteractionOperator pickles. + +This program avoids constructing the 2**n_qubits by 2**n_qubits sparse matrix. +Instead, it converts the spin-orbital tensors in an OpenFermion +InteractionOperator back to spatial-orbital integrals and calls PySCF's direct +FCI Davidson solver in a fixed (N_alpha, N_beta) electron sector. + +The method is CPU based. It intentionally leaves the GPU mostly idle because +building the full OpenFermion sparse matrix is the operation that exhausted +host RAM. PySCF contracts H with CI vectors directly and never stores the full +Hamiltonian matrix. + +Typical use: + python qhat_low_energies_fci.py hamiltonian.pickle -o q24_fci \ + --num-electrons 10 --spin 0 -k 10 --threads 32 + +Here --spin means N_alpha - N_beta = 2*S_z. For an even-electron singlet use 0. +For a doublet use 1, for a triplet M_s=1 sector use 2, and so on. +""" + +from __future__ import annotations + +import argparse +import json +import math +import os +import pickle +import sys +import time +import traceback +from pathlib import Path +from typing import Any + +import numpy as np + + +def human_bytes(n: int | float) -> str: + x = float(n) + for unit in ("B", "KiB", "MiB", "GiB", "TiB", "PiB"): + if x < 1024.0 or unit == "PiB": + return f"{x:.3f} {unit}" + x /= 1024.0 + return f"{x:.3f} PiB" + + +def parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description=( + "Compute the lowest energies of a QHAT/OpenFermion " + "InteractionOperator without constructing the full sparse matrix." + ), + ) + p.add_argument("input", type=Path, help="QHAT/OpenFermion pickle") + p.add_argument("-o", "--output-dir", type=Path, default=Path("fci_output")) + p.add_argument("-k", "--num-roots", type=int, default=5, + help="Number of lowest energies/eigenstates") + p.add_argument("--num-electrons", type=int, required=True, + help="Total number of active electrons") + p.add_argument("--spin", type=int, default=0, + help="N_alpha - N_beta (twice S_z), not spin multiplicity") + p.add_argument("--threads", type=int, default=0, + help="OpenMP/BLAS threads; 0 leaves environment unchanged") + p.add_argument("--tol", type=float, default=1e-9, + help="Davidson convergence tolerance") + p.add_argument("--max-cycle", type=int, default=100) + p.add_argument("--max-space", type=int, default=20, + help="Maximum Davidson subspace size before restart") + p.add_argument("--lindep", type=float, default=1e-14) + p.add_argument("--level-shift", type=float, default=1e-3) + p.add_argument("--pspace-size", type=int, default=400, + help="Small determinant-space preconditioner size") + p.add_argument("--max-memory-mb", type=int, default=0, + help="PySCF memory limit in MB; 0 uses 80%% of physical RAM") + p.add_argument("--verbose", type=int, default=5, + help="PySCF verbosity; 4-5 shows Davidson progress") + p.add_argument("--save-vectors", action="store_true", + help="Save CI eigenvectors; energies are always saved") + p.add_argument("--inspect-only", action="store_true") + p.add_argument("--imag-tol", type=float, default=1e-10, + help="Maximum allowed imaginary integral magnitude") + p.add_argument("--spin-block-tol", type=float, default=1e-8, + help="Tolerance used to validate even/odd spin blocks") + p.add_argument("--skip-spin-block-check", action="store_true", + help="Skip validation that the pickle uses OpenFermion even/odd spin ordering") + p.add_argument("--validate-small", action="store_true", + help="For small cases, compare PySCF roots with an OpenFermion sector sparse solve") + return p.parse_args() + + +def physical_memory_bytes() -> int: + try: + pages = os.sysconf("SC_PHYS_PAGES") + page_size = os.sysconf("SC_PAGE_SIZE") + return int(pages * page_size) + except (ValueError, OSError, AttributeError): + return 0 + + +def configure_threads(nthreads: int) -> None: + if nthreads <= 0: + return + text = str(nthreads) + for name in ( + "OMP_NUM_THREADS", "OPENBLAS_NUM_THREADS", "MKL_NUM_THREADS", + "BLIS_NUM_THREADS", "NUMEXPR_NUM_THREADS", + ): + os.environ[name] = text + + +def load_interaction_operator(path: Path) -> Any: + if not path.is_file(): + raise FileNotFoundError(path) + with path.open("rb") as f: + obj = pickle.load(f) + required = ("constant", "one_body_tensor", "two_body_tensor") + missing = [name for name in required if not hasattr(obj, name)] + if missing: + raise TypeError( + f"Input type {type(obj)!r} is not an InteractionOperator-like object; " + f"missing attributes: {missing}" + ) + return obj + + +def split_electrons(nelec: int, spin: int, norb: int) -> tuple[int, int]: + if nelec < 0 or nelec > 2 * norb: + raise ValueError(f"--num-electrons must be between 0 and {2*norb}") + if abs(spin) > nelec: + raise ValueError("abs(--spin) cannot exceed --num-electrons") + if (nelec + spin) % 2 != 0: + raise ValueError( + "--num-electrons and --spin must have the same parity so that " + "N_alpha=(N+spin)/2 is an integer" + ) + nalpha = (nelec + spin) // 2 + nbeta = nelec - nalpha + if nalpha > norb or nbeta > norb or nalpha < 0 or nbeta < 0: + raise ValueError( + f"Invalid sector for {norb} spatial orbitals: " + f"N_alpha={nalpha}, N_beta={nbeta}" + ) + return nalpha, nbeta + + +def max_abs(a: np.ndarray) -> float: + return float(np.max(np.abs(a))) if a.size else 0.0 + + +def validate_spin_blocks(one: np.ndarray, two: np.ndarray, tol: float) -> dict[str, float]: + """Validate OpenFermion's default even/odd spin-orbital ordering. + + MolecularData.get_molecular_hamiltonian uses indices 2*p and 2*p+1 for + alpha/beta versions of spatial orbital p. The one-body alpha and beta + blocks should agree and spin-flip blocks should vanish. The same-spin + samples of the two-body tensor should also agree. + """ + even = slice(0, None, 2) + odd = slice(1, None, 2) + metrics = { + "one_alpha_beta_difference": max_abs(one[even, even] - one[odd, odd]), + "one_spin_flip_even_odd": max_abs(one[even, odd]), + "one_spin_flip_odd_even": max_abs(one[odd, even]), + "two_eeee_oooo_difference": max_abs( + two[even, even, even, even] - two[odd, odd, odd, odd] + ), + } + worst = max(metrics.values()) + if worst > tol: + details = ", ".join(f"{k}={v:.3e}" for k, v in metrics.items()) + raise ValueError( + "The tensors do not look like a standard spin-independent molecular " + "InteractionOperator in even/odd spin ordering. " + details + ". " + "Do not bypass this check unless you know the tensor convention." + ) + return metrics + + +def interaction_to_pyscf(obj: Any, imag_tol: float, spin_tol: float, + skip_check: bool) -> tuple[float, np.ndarray, np.ndarray, dict[str, float]]: + """Convert OpenFermion InteractionOperator tensors to PySCF spatial integrals. + + OpenFermion MolecularData creates the InteractionOperator as + one_body_tensor = spinorb_from_spatial(h1) + two_body_tensor = 0.5 * spinorb_from_spatial(h2_openfermion) + + Therefore the spatial OpenFermion tensor is recovered from an all-alpha + block by multiplying by two. OpenFermion's spatial two-electron tensor is + converted to chemist ordering for PySCF with transpose(0,3,1,2). + """ + one = np.asarray(obj.one_body_tensor) + two = np.asarray(obj.two_body_tensor) + if one.ndim != 2 or one.shape[0] != one.shape[1]: + raise ValueError(f"Unexpected one_body_tensor shape {one.shape}") + nspin = one.shape[0] + if nspin % 2: + raise ValueError(f"Expected an even number of spin orbitals; got {nspin}") + if two.shape != (nspin, nspin, nspin, nspin): + raise ValueError(f"Unexpected two_body_tensor shape {two.shape}") + + imag = max(max_abs(np.asarray(obj.constant).imag), max_abs(one.imag), max_abs(two.imag)) + if imag > imag_tol: + raise ValueError( + f"Complex integrals detected (maximum imaginary magnitude {imag:.3e}). " + "This script currently targets the real molecular Hamiltonians handled " + "efficiently by PySCF direct_spin1." + ) + one = np.asarray(one.real, dtype=np.float64, order="C") + two = np.asarray(two.real, dtype=np.float64, order="C") + + metrics: dict[str, float] = {} + if not skip_check: + metrics = validate_spin_blocks(one, two, spin_tol) + + # Default OpenFermion ordering is alpha,beta,alpha,beta,... + h1 = np.asarray(one[0::2, 0::2], dtype=np.float64, order="C") + h2_of = np.asarray(2.0 * two[0::2, 0::2, 0::2, 0::2], dtype=np.float64) + # OpenFermion spatial ordering -> chemist ordering (pq|rs). + eri = np.asarray(h2_of.transpose(0, 3, 1, 2), dtype=np.float64, order="C") + ecore = float(np.real(obj.constant)) + return ecore, h1, eri, metrics + + +def sector_size(norb: int, nalpha: int, nbeta: int) -> tuple[int, int, int]: + na = math.comb(norb, nalpha) + nb = math.comb(norb, nbeta) + return na, nb, na * nb + + +def normalize_roots(energies: Any, vectors: Any, k: int) -> tuple[np.ndarray, list[np.ndarray]]: + e = np.atleast_1d(np.asarray(energies, dtype=np.float64)) + if k == 1: + vecs = [np.asarray(vectors)] + else: + vecs = [np.asarray(v) for v in vectors] + order = np.argsort(e) + return e[order], [vecs[int(i)] for i in order] + + +def save_results(args: argparse.Namespace, energies: np.ndarray, + vectors: list[np.ndarray], metadata: dict[str, Any]) -> None: + out = args.output_dir + out.mkdir(parents=True, exist_ok=True) + np.save(out / "eigenvalues.npy", energies) + np.savetxt( + out / "lowest_energies.txt", + np.column_stack((np.arange(energies.size), energies)), + header="root_index energy_hartree", + fmt=["%d", "%.16e"], + ) + # This is the returned low-energy diagonal only, not a full-spectrum matrix. + np.save(out / "diagonal_values.npy", energies) + if args.save_vectors: + for i, vec in enumerate(vectors): + np.save(out / f"ci_vector_{i:04d}.npy", vec) + with (out / "metadata.json").open("w", encoding="utf-8") as f: + json.dump(metadata, f, indent=2) + + +def validate_against_openfermion(obj: Any, energies: np.ndarray, nspin: int, + nelec: int, spin: int, k: int) -> dict[str, Any]: + """Optional small-problem cross-check against OpenFermion sector matrix.""" + if nspin > 18: + raise ValueError("--validate-small is restricted to at most 18 spin orbitals") + try: + from openfermion.transforms import get_fermion_operator + from openfermion.linalg import get_number_preserving_sparse_operator + from scipy.sparse.linalg import eigsh + except ImportError as exc: + raise RuntimeError("Validation requires OpenFermion and SciPy") from exc + + if spin != 0: + raise ValueError( + "The automatic validation currently supports --spin 0 only because " + "OpenFermion's helper is being used with spin_preserving=True." + ) + fermion = get_fermion_operator(obj) + reference = np.zeros(nspin, dtype=bool) + nalpha = nelec // 2 + # OpenFermion even indices are alpha and odd are beta. + reference[2 * np.arange(nalpha)] = True + reference[2 * np.arange(nalpha) + 1] = True + h = get_number_preserving_sparse_operator( + fermion, + num_qubits=nspin, + num_electrons=nelec, + spin_preserving=True, + reference_determinant=reference, + ).tocsr() + kval = min(k, h.shape[0] - 1) + ref = np.sort(eigsh(h, k=kval, which="SA", return_eigenvectors=False)) + err = float(np.max(np.abs(ref - energies[:kval]))) + return { + "validation_sector_shape": list(h.shape), + "validation_max_abs_energy_difference": err, + "validation_reference_energies": ref.tolist(), + } + + +def main() -> int: + args = parse_args() + configure_threads(args.threads) + + try: + from pyscf import fci, lib + except ImportError as exc: + raise RuntimeError( + "PySCF is required. Install it with: python -m pip install pyscf" + ) from exc + + if args.threads > 0: + lib.num_threads(args.threads) + + t0 = time.perf_counter() + obj = load_interaction_operator(args.input) + load_seconds = time.perf_counter() - t0 + ecore, h1, eri, spin_metrics = interaction_to_pyscf( + obj, args.imag_tol, args.spin_block_tol, args.skip_spin_block_check + ) + nspin = int(np.asarray(obj.one_body_tensor).shape[0]) + del obj + norb = h1.shape[0] + nalpha, nbeta = split_electrons(args.num_electrons, args.spin, norb) + na, nb, dim = sector_size(norb, nalpha, nbeta) + + print(f"Spin orbitals/qubits: {nspin}", flush=True) + print(f"Spatial orbitals: {norb}", flush=True) + print(f"Electron sector: N_alpha={nalpha}, N_beta={nbeta}, total={nalpha+nbeta}", flush=True) + print(f"CI dimension: C({norb},{nalpha}) * C({norb},{nbeta}) = {na:,} * {nb:,} = {dim:,}", flush=True) + print(f"One float64 CI vector: {human_bytes(dim * 8)}", flush=True) + print(f"Requested roots: {args.num_roots}", flush=True) + print(f"Saved-root storage if requested: {human_bytes(dim * 8 * args.num_roots)}", flush=True) + print(f"Integral storage: h1={human_bytes(h1.nbytes)}, eri={human_bytes(eri.nbytes)}", flush=True) + + if args.num_roots < 1 or args.num_roots > dim: + raise ValueError(f"-k/--num-roots must be in [1, {dim}]") + + if args.max_memory_mb <= 0: + phys = physical_memory_bytes() + max_memory_mb = int(0.80 * phys / (1024**2)) if phys else 120000 + else: + max_memory_mb = args.max_memory_mb + print(f"PySCF max_memory: {max_memory_mb:,} MB", flush=True) + print(f"PySCF/OpenMP threads: {lib.num_threads()}", flush=True) + + if args.inspect_only: + return 0 + + solver = fci.direct_spin1.FCI() + solver.verbose = args.verbose + solver.conv_tol = args.tol + solver.max_cycle = args.max_cycle + solver.max_space = args.max_space + solver.lindep = args.lindep + solver.level_shift = args.level_shift + solver.pspace_size = args.pspace_size + solver.max_memory = max_memory_mb + solver.nroots = args.num_roots + solver.davidson_only = True + + print("Starting direct FCI Davidson solve; no full Hamiltonian matrix is constructed.", flush=True) + solve_start = time.perf_counter() + energies_raw, vectors_raw = solver.kernel( + h1, + eri, + norb, + (nalpha, nbeta), + ecore=ecore, + nroots=args.num_roots, + ) + solve_seconds = time.perf_counter() - solve_start + energies, vectors = normalize_roots(energies_raw, vectors_raw, args.num_roots) + + converged_raw = solver.converged + if isinstance(converged_raw, (list, tuple, np.ndarray)): + converged = [bool(x) for x in converged_raw] + else: + converged = [bool(converged_raw)] + + metadata: dict[str, Any] = { + "input": str(args.input), + "method": "PySCF direct_spin1 FCI Davidson, matrix-free Hamiltonian contraction", + "spin_orbitals": nspin, + "spatial_orbitals": norb, + "num_electrons": args.num_electrons, + "spin_nalpha_minus_nbeta": args.spin, + "nalpha": nalpha, + "nbeta": nbeta, + "ci_dimension": dim, + "num_roots_requested": args.num_roots, + "num_roots_returned": int(energies.size), + "converged": converged, + "conv_tol": args.tol, + "max_cycle": args.max_cycle, + "max_space": args.max_space, + "threads": int(lib.num_threads()), + "max_memory_mb": max_memory_mb, + "constant_energy": ecore, + "spin_block_validation": spin_metrics, + "load_and_conversion_seconds": load_seconds, + "solve_seconds": solve_seconds, + "total_seconds": time.perf_counter() - t0, + "vectors_saved": bool(args.save_vectors), + "diagonal_meaning": "Only the returned lowest-energy diagonal entries, not the complete spectrum", + } + + if args.validate_small: + metadata.update(validate_against_openfermion( + load_interaction_operator(args.input), energies, nspin, + args.num_electrons, args.spin, args.num_roots + )) + + save_results(args, energies, vectors, metadata) + + print("\nLowest energies (Hartree):", flush=True) + for i, energy in enumerate(energies): + flag = "converged" if i < len(converged) and converged[i] else "NOT CONVERGED" + print(f" {i:4d} {energy: .16e} {flag}", flush=True) + print(f"Solve time: {solve_seconds:.3f} s", flush=True) + print(f"Output: {args.output_dir.resolve()}", flush=True) + + if not all(converged): + print( + "WARNING: one or more roots did not meet the requested convergence tolerance. " + "Increase --max-cycle and/or --max-space, or request fewer roots.", + file=sys.stderr, + flush=True, + ) + return 2 + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except KeyboardInterrupt: + print("Interrupted.", file=sys.stderr, flush=True) + raise SystemExit(130) + except Exception as exc: + print(f"ERROR: {exc}", file=sys.stderr, flush=True) + traceback.print_exc() + raise SystemExit(1) diff --git a/big_hamiltonian_diagonalizer/qhat_pauli_matrix_free.py b/big_hamiltonian_diagonalizer/qhat_pauli_matrix_free.py new file mode 100644 index 00000000..86e89200 --- /dev/null +++ b/big_hamiltonian_diagonalizer/qhat_pauli_matrix_free.py @@ -0,0 +1,1018 @@ +#!/usr/bin/env python3 +"""Matrix-free GPU low-energy solver for QHAT/OpenFermion Hamiltonians. + +The program reads the same QHAT pickle used by qhat_gpu_diagonalize_v2.py, +converts an InteractionOperator/FermionOperator to an OpenFermion +QubitOperator, and applies the Pauli sum directly to vectors on an NVIDIA GPU. +It NEVER constructs the exponentially large Hamiltonian as a dense or CSR +matrix. + +Two basis modes are supported: + +1. Full qubit space (default): dimension 2**n_qubits. +2. Fixed-particle-number space (--num-electrons N): dimension C(n_qubits, N). + This is strongly recommended for QHAT molecular Hamiltonians. The Pauli + action is projected into that sector, which is exact when the Hamiltonian + conserves particle number. + +Outputs (same core layout as qhat_gpu_diagonalize_v2.py): + eigenvalues.npy + eigenvectors.npy unless --values-only + diagonal_sparse.npz diagonal matrix of returned eigenvalues + residuals.npy + metadata.json + timing.json + pauli_terms.npz with --save-hamiltonian/--save-pauli-terms + +Important limitations +--------------------- +* This computes only the requested lowest k eigenpairs. It does not produce + the complete spectrum unless k is essentially the full dimension, which is + not practical for large systems. +* Matrix-free removes the huge CSR allocation, but every Krylov vector still + has one value per basis state. Therefore ncv and k still determine GPU + memory use. +* A Pauli-sum matvec can be compute intensive. The implementation groups terms + with the same X/Y flip mask so that basis-index mapping is performed once per + group rather than once per Pauli term. + +Tested target environment: + Python 3.11, CuPy 14.x, CUDA 13.x, NVIDIA Blackwell. +""" + +from __future__ import annotations + +import argparse +import json +import math +import os +import pickle +import sys +import threading +import time +import traceback +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Optional + +import numpy as np + + +# ------------------------------- utilities --------------------------------- + + +def human_bytes(value: int | float) -> str: + x = float(value) + for unit in ("B", "KiB", "MiB", "GiB", "TiB", "PiB"): + if x < 1024.0 or unit == "PiB": + return f"{x:.3f} {unit}" + x /= 1024.0 + return f"{x:.3f} PiB" + + +@dataclass +class Timings: + start: float = field(default_factory=time.perf_counter) + stages: dict[str, float] = field(default_factory=dict) + _last: float = field(init=False) + + def __post_init__(self) -> None: + self._last = self.start + + def mark(self, name: str) -> None: + now = time.perf_counter() + self.stages[name] = now - self._last + self._last = now + print(f"[{now-self.start:10.3f} s total] {name}", flush=True) + + def as_dict(self) -> dict[str, Any]: + return { + "total_seconds": time.perf_counter() - self.start, + "stage_seconds": self.stages, + } + + +class SolverHeartbeat: + def __init__(self, operator: "PauliMatrixFreeOperator", interval: float) -> None: + self.operator = operator + self.interval = max(1.0, interval) + self.stop_event = threading.Event() + self.thread: Optional[threading.Thread] = None + self.start = 0.0 + + def __enter__(self) -> "SolverHeartbeat": + self.start = time.perf_counter() + + def worker() -> None: + while not self.stop_event.wait(self.interval): + elapsed = time.perf_counter() - self.start + print( + f"[working {elapsed:10.1f} s] eigsh; " + f"matrix-free Hx calls={self.operator.matvec_calls}, " + f"last Hx={self.operator.last_matvec_seconds:.3f} s", + flush=True, + ) + + self.thread = threading.Thread(target=worker, daemon=True) + self.thread.start() + return self + + def __exit__(self, exc_type, exc, tb) -> None: + self.stop_event.set() + if self.thread is not None: + self.thread.join(timeout=2.0) + + +def parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description=( + "Find low energies of a QHAT/OpenFermion Hamiltonian with a " + "matrix-free GPU Pauli-string operator." + ), + ) + p.add_argument("input", type=Path, help="QHAT/OpenFermion pickle") + p.add_argument("-o", "--output-dir", type=Path, default=Path("diag_output")) + p.add_argument("--gpu", type=int, default=0) + p.add_argument("--inspect-only", action="store_true") + p.add_argument("--n-qubits", type=int, default=None) + + # Keep compatible names with the earlier program. + p.add_argument( + "--solver", + choices=("auto", "sparse", "matrix-free"), + default="auto", + help="All choices select the matrix-free eigsh implementation.", + ) + p.add_argument( + "-k", "--num-eigenpairs", type=int, default=8, + help="Number of lowest energies/eigenpairs to return.", + ) + p.add_argument("--values-only", action="store_true") + p.add_argument("--dtype", choices=("complex128", "complex64"), default="complex128") + p.add_argument("--tol", type=float, default=1e-9) + p.add_argument("--maxiter", type=int, default=None) + p.add_argument( + "--ncv", type=int, default=None, + help="Krylov subspace size. Must be greater than k." + ) + p.add_argument("--heartbeat", type=float, default=15.0) + p.add_argument( + "--progress-every", type=int, default=1, + help="Synchronize/timestamp every N matrix-free Hx calls; 0 disables." + ) + + p.add_argument( + "--num-electrons", "--num_electrons", type=int, default=None, + help=( + "Restrict to this fixed Hamming-weight/electron-number sector. " + "For QHAT use the active occupied single-occupancy count from the .dat file." + ), + ) + p.add_argument( + "--dat-file", type=Path, default=None, + help="Read --num-electrons automatically from the matching QHAT .dat header." + ) + p.add_argument( + "--full-space", action="store_true", + help="Explicitly use all 2**n basis states even if --dat-file is supplied." + ) + + p.add_argument("--check-hermitian", action="store_true") + p.add_argument("--residual-checks", type=int, default=5) + p.add_argument( + "--save-hamiltonian", action="store_true", + help="Compatibility flag: saves compact Pauli terms, not a CSR matrix." + ) + p.add_argument("--save-pauli-terms", action="store_true") + p.add_argument( + "--validate-small", action="store_true", + help="For dimension <= 65536, compare random Hx products with OpenFermion CSR." + ) + p.add_argument( + "--memory-fraction", type=float, default=0.80, + help="Refuse an estimated eigsh workspace above this fraction of free VRAM." + ) + p.add_argument("--force-memory", action="store_true") + p.add_argument( + "--threads-per-block", type=int, default=128, + help="CUDA kernel threads per block." + ) + return p.parse_args() + + +def import_dependencies() -> tuple[Any, Any, Any, Any]: + try: + import scipy.sparse as sp + except ImportError as exc: + raise RuntimeError("Missing SciPy: python -m pip install scipy") from exc + + try: + import cupy as cp + import cupyx.scipy.sparse.linalg as cpx_linalg + except ImportError as exc: + raise RuntimeError( + "Missing CuPy CUDA 13 wheel: python -m pip install cupy-cuda13x" + ) from exc + + try: + from openfermion import count_qubits + from openfermion.ops import QubitOperator + from openfermion.transforms import jordan_wigner + except ImportError as exc: + raise RuntimeError( + "Missing OpenFermion: python -m pip install openfermion" + ) from exc + + return sp, cp, cpx_linalg, (count_qubits, QubitOperator, jordan_wigner) + + +def read_num_electrons_from_dat(path: Path) -> int: + needle = "number of active, occupied, single-occupancy orbitals" + with path.open("r", encoding="utf-8", errors="replace") as f: + for line in f: + if needle in line: + try: + return int(line.rsplit("=", 1)[1].strip()) + except (IndexError, ValueError) as exc: + raise ValueError(f"Could not parse electron count from: {line.rstrip()}") from exc + raise ValueError(f"Did not find '{needle}' in {path}") + + +def load_pickle(path: Path) -> Any: + if not path.is_file(): + raise FileNotFoundError(path) + with path.open("rb") as f: + return pickle.load(f) + + +def infer_qubits(obj: Any, count_qubits: Any) -> int: + for attr in ("n_qubits", "num_qubits"): + value = getattr(obj, attr, None) + if isinstance(value, (int, np.integer)): + return int(value) + return int(count_qubits(obj)) + + +# -------------------------- Pauli term preparation -------------------------- + + +@dataclass +class PreparedPauliTerms: + n_qubits: int + identity: complex + group_x: np.ndarray # uint64, one per unique X/Y flip mask + group_offsets: np.ndarray # int32, len(groups)+1 + term_z: np.ndarray # uint64, grouped by X mask + term_coeff: np.ndarray # complex128; includes i**nY phase + raw_term_count: int + + @property + def group_count(self) -> int: + return int(self.group_x.size) + + @property + def nonidentity_count(self) -> int: + return int(self.term_z.size) + + +def prepare_pauli_terms( + qubit_operator: Any, + n_qubits: int, + hermitian_tolerance: float = 1e-10, +) -> PreparedPauliTerms: + """Convert OpenFermion terms to grouped bit masks. + + For a basis bitstring s, a Pauli term maps it to s xor xmask with phase + (i ** number_of_Y) * (-1) ** popcount(s & zmask), + where zmask contains both Y and Z locations. + """ + identity = 0.0 + 0.0j + grouped: dict[int, list[tuple[int, complex]]] = {} + raw_count = len(qubit_operator.terms) + + max_supported = 63 + if n_qubits > max_supported: + raise ValueError( + f"This implementation currently supports <= {max_supported} qubits " + "because basis states are encoded in uint64 masks." + ) + + for term, coefficient in qubit_operator.terms.items(): + coefficient = complex(coefficient) + if not term: + identity += coefficient + continue + + xmask = 0 + zmask = 0 + ny = 0 + for qubit, action in term: + q = int(qubit) + if q < 0 or q >= n_qubits: + raise ValueError(f"Term references qubit {q}, outside n_qubits={n_qubits}") + bit = 1 << q + if action == "X": + xmask |= bit + elif action == "Y": + xmask |= bit + zmask |= bit + ny += 1 + elif action == "Z": + zmask |= bit + else: + raise ValueError(f"Unsupported Pauli action: {action!r}") + + effective = coefficient * (1j ** ny) + grouped.setdefault(xmask, []).append((zmask, effective)) + + # Place diagonal xmask=0 first; otherwise sort by mask for reproducibility. + masks = sorted(grouped, key=lambda m: (m != 0, m)) + group_x: list[int] = [] + offsets = [0] + zs: list[int] = [] + coeffs: list[complex] = [] + + for xmask in masks: + group_x.append(xmask) + # Combine any accidental duplicate z masks. + merged: dict[int, complex] = {} + for zmask, coeff in grouped[xmask]: + merged[zmask] = merged.get(zmask, 0.0j) + coeff + for zmask in sorted(merged): + coeff = merged[zmask] + if abs(coeff) > 1e-15: + zs.append(zmask) + coeffs.append(coeff) + offsets.append(len(zs)) + + # For a Hermitian QubitOperator the original Pauli coefficients should be + # real. effective coefficients can be imaginary because Y action phases + # are folded into them. + max_imag = max((abs(complex(c).imag) for c in qubit_operator.terms.values()), default=0.0) + if max_imag > hermitian_tolerance: + print( + f"WARNING: maximum imaginary part of original Pauli coefficient is {max_imag:.3e}; " + "verify Hermiticity.", + flush=True, + ) + + return PreparedPauliTerms( + n_qubits=n_qubits, + identity=identity, + group_x=np.asarray(group_x, dtype=np.uint64), + group_offsets=np.asarray(offsets, dtype=np.int32), + term_z=np.asarray(zs, dtype=np.uint64), + term_coeff=np.asarray(coeffs, dtype=np.complex128), + raw_term_count=raw_count, + ) + + +def save_compact_terms(path: Path, terms: PreparedPauliTerms) -> None: + np.savez_compressed( + path, + n_qubits=np.asarray(terms.n_qubits, dtype=np.int32), + identity=np.asarray(terms.identity, dtype=np.complex128), + group_x=terms.group_x, + group_offsets=terms.group_offsets, + term_z=terms.term_z, + term_coeff=terms.term_coeff, + ) + + +# ------------------------------- CUDA kernel -------------------------------- + + +def cuda_source(dtype_name: str, fixed_weight: bool) -> str: + if dtype_name == "complex128": + ctype = "cuDoubleComplex" + make = "make_cuDoubleComplex" + cadd = "cuCadd" + cmul = "cuCmul" + else: + ctype = "cuFloatComplex" + make = "make_cuFloatComplex" + cadd = "cuCaddf" + cmul = "cuCmulf" + + common = f""" +#include +extern "C" {{ + +__device__ __forceinline__ int parity64(unsigned long long x) {{ + return __popcll(x) & 1; +}} + +__device__ __forceinline__ {ctype} negate_complex({ctype} z) {{ + return {make}(-z.x, -z.y); +}} +""" + + if not fixed_weight: + body = f""" +__global__ void pauli_matvec_full( + const {ctype}* __restrict__ x, + {ctype}* __restrict__ y, + const unsigned long long dimension, + const unsigned long long* __restrict__ group_x, + const int* __restrict__ group_offsets, + const unsigned long long* __restrict__ term_z, + const {ctype}* __restrict__ term_coeff, + const int group_count, + const {ctype} identity) +{{ + unsigned long long out = + (unsigned long long)blockDim.x * blockIdx.x + threadIdx.x; + if (out >= dimension) return; + + {ctype} acc = {cmul}(identity, x[out]); + for (int g = 0; g < group_count; ++g) {{ + unsigned long long in_state = out ^ group_x[g]; + {ctype} amplitude = {make}(0.0, 0.0); + int begin = group_offsets[g]; + int end = group_offsets[g + 1]; + for (int t = begin; t < end; ++t) {{ + {ctype} c = term_coeff[t]; + if (parity64(in_state & term_z[t])) c = negate_complex(c); + amplitude = {cadd}(amplitude, c); + }} + acc = {cadd}(acc, {cmul}(amplitude, x[in_state])); + }} + y[out] = acc; +}} +}} // extern C +""" + return common + body + + body = f""" +__device__ __forceinline__ unsigned long long choose_value( + const unsigned long long* __restrict__ table, + const int stride, + const int n, + const int k) +{{ + if (n < 0 || k < 0 || k > n) return 0ULL; + return table[n * stride + k]; +}} + +// Colexicographic unranking: rank -> n-bit word with exactly weight bits. +__device__ __forceinline__ unsigned long long unrank_colex( + unsigned long long rank, + const int n, + const int weight, + const unsigned long long* __restrict__ binom, + const int stride) +{{ + unsigned long long state = 0ULL; + int x = n - 1; + for (int j = weight; j >= 1; --j) {{ + while (x >= j && choose_value(binom, stride, x, j) > rank) --x; + state |= (1ULL << x); + rank -= choose_value(binom, stride, x, j); + --x; + }} + return state; +}} + +// n-bit word with fixed Hamming weight -> colexicographic rank. +__device__ __forceinline__ unsigned long long rank_colex( + unsigned long long state, + const int n, + const unsigned long long* __restrict__ binom, + const int stride) +{{ + unsigned long long rank = 0ULL; + int j = 1; + while (state) {{ + int pos = __ffsll((long long)state) - 1; + rank += choose_value(binom, stride, pos, j); + state &= (state - 1ULL); + ++j; + }} + return rank; +}} + +__global__ void pauli_matvec_sector( + const {ctype}* __restrict__ x, + {ctype}* __restrict__ y, + const unsigned long long dimension, + const int n_qubits, + const int weight, + const unsigned long long* __restrict__ binom, + const int binom_stride, + const unsigned long long* __restrict__ group_x, + const int* __restrict__ group_offsets, + const unsigned long long* __restrict__ term_z, + const {ctype}* __restrict__ term_coeff, + const int group_count, + const {ctype} identity) +{{ + unsigned long long out_rank = + (unsigned long long)blockDim.x * blockIdx.x + threadIdx.x; + if (out_rank >= dimension) return; + + unsigned long long out_state = + unrank_colex(out_rank, n_qubits, weight, binom, binom_stride); + {ctype} acc = {cmul}(identity, x[out_rank]); + + for (int g = 0; g < group_count; ++g) {{ + unsigned long long in_state = out_state ^ group_x[g]; + if (__popcll(in_state) != weight) continue; + + {ctype} amplitude = {make}(0.0, 0.0); + int begin = group_offsets[g]; + int end = group_offsets[g + 1]; + for (int t = begin; t < end; ++t) {{ + {ctype} c = term_coeff[t]; + if (parity64(in_state & term_z[t])) c = negate_complex(c); + amplitude = {cadd}(amplitude, c); + }} + unsigned long long in_rank = + rank_colex(in_state, n_qubits, binom, binom_stride); + acc = {cadd}(acc, {cmul}(amplitude, x[in_rank])); + }} + y[out_rank] = acc; +}} +}} // extern C +""" + return common + body + + +def make_binomial_table(n: int, k: int) -> np.ndarray: + table = np.zeros((n + 1, k + 1), dtype=np.uint64) + for i in range(n + 1): + table[i, 0] = 1 + for j in range(1, min(i, k) + 1): + table[i, j] = math.comb(i, j) + return table + + +class PauliMatrixFreeOperator: + def __init__( + self, + cp: Any, + terms: PreparedPauliTerms, + dtype_name: str, + num_electrons: Optional[int], + threads_per_block: int, + progress_every: int, + ) -> None: + self.cp = cp + self.terms = terms + self.dtype_name = dtype_name + self.dtype = cp.complex128 if dtype_name == "complex128" else cp.complex64 + self.num_electrons = num_electrons + self.threads = threads_per_block + self.progress_every = max(0, progress_every) + self.matvec_calls = 0 + self.last_matvec_seconds = 0.0 + + n = terms.n_qubits + if num_electrons is None: + self.dimension = 1 << n + source = cuda_source(dtype_name, fixed_weight=False) + self.kernel = cp.RawKernel( + source, + "pauli_matvec_full", + options=("--std=c++17",), + ) + self.binom_gpu = None + self.binom_stride = 0 + else: + if not 0 <= num_electrons <= n: + raise ValueError("--num-electrons must satisfy 0 <= N <= n_qubits") + self.dimension = math.comb(n, num_electrons) + table = make_binomial_table(n, num_electrons) + self.binom_gpu = cp.asarray(table) + self.binom_stride = table.shape[1] + source = cuda_source(dtype_name, fixed_weight=True) + self.kernel = cp.RawKernel( + source, + "pauli_matvec_sector", + options=("--std=c++17",), + ) + + coeff_dtype = np.complex128 if dtype_name == "complex128" else np.complex64 + self.group_x_gpu = cp.asarray(terms.group_x) + self.group_offsets_gpu = cp.asarray(terms.group_offsets) + self.term_z_gpu = cp.asarray(terms.term_z) + self.term_coeff_gpu = cp.asarray(terms.term_coeff.astype(coeff_dtype, copy=False)) + self.identity_gpu_scalar = coeff_dtype(terms.identity) + self.blocks = (self.dimension + self.threads - 1) // self.threads + + def matvec(self, x: Any) -> Any: + cp = self.cp + x = cp.asarray(x, dtype=self.dtype).reshape(-1) + if x.size != self.dimension: + raise ValueError(f"matvec expected length {self.dimension}, got {x.size}") + y = cp.empty_like(x) + + timed = self.progress_every > 0 and (self.matvec_calls % self.progress_every == 0) + if timed: + cp.cuda.Stream.null.synchronize() + t0 = time.perf_counter() + + if self.num_electrons is None: + self.kernel( + (self.blocks,), + (self.threads,), + ( + x, + y, + np.uint64(self.dimension), + self.group_x_gpu, + self.group_offsets_gpu, + self.term_z_gpu, + self.term_coeff_gpu, + np.int32(self.terms.group_count), + self.identity_gpu_scalar, + ), + ) + else: + self.kernel( + (self.blocks,), + (self.threads,), + ( + x, + y, + np.uint64(self.dimension), + np.int32(self.terms.n_qubits), + np.int32(self.num_electrons), + self.binom_gpu, + np.int32(self.binom_stride), + self.group_x_gpu, + self.group_offsets_gpu, + self.term_z_gpu, + self.term_coeff_gpu, + np.int32(self.terms.group_count), + self.identity_gpu_scalar, + ), + ) + + self.matvec_calls += 1 + if timed: + cp.cuda.Stream.null.synchronize() + self.last_matvec_seconds = time.perf_counter() - t0 + print( + f"[Hx {self.matvec_calls:6d}] {self.last_matvec_seconds:.3f} s", + flush=True, + ) + return y + + def matmat(self, x: Any) -> Any: + cp = self.cp + x = cp.asarray(x, dtype=self.dtype) + if x.ndim == 1: + return self.matvec(x) + columns = [self.matvec(x[:, i]) for i in range(x.shape[1])] + return cp.stack(columns, axis=1) + + +# ------------------------- validation and output ---------------------------- + + +def validate_small_operator( + obj: Any, + qubit_operator: Any, + operator: PauliMatrixFreeOperator, + cp: Any, + num_electrons: Optional[int], +) -> float: + """Compare matrix-free Hx to OpenFermion's explicit sparse matrix. + + Fixed-sector validation builds the full matrix only for small full-space + dimensions and extracts the selected Hamming-weight rows/columns. + """ + if (1 << operator.terms.n_qubits) > 65536: + raise ValueError("--validate-small is limited to full dimension <= 65536") + + from openfermion.linalg import get_sparse_operator + + h_full = get_sparse_operator(qubit_operator, n_qubits=operator.terms.n_qubits).tocsr() + rng = np.random.default_rng(12345) + + if num_electrons is None: + h_ref = h_full + else: + states = np.asarray( + [i for i in range(1 << operator.terms.n_qubits) if i.bit_count() == num_electrons], + dtype=np.int64, + ) + # Reorder to the colex rank used by the CUDA kernel. + def colex_rank(state: int) -> int: + rank = 0 + j = 1 + for pos in range(operator.terms.n_qubits): + if (state >> pos) & 1: + rank += math.comb(pos, j) + j += 1 + return rank + order = np.argsort([colex_rank(int(s)) for s in states]) + states = states[order] + h_ref = h_full[states][:, states] + + x = rng.normal(size=operator.dimension) + 1j * rng.normal(size=operator.dimension) + x = x.astype(np.complex128 if operator.dtype_name == "complex128" else np.complex64) + y_ref = h_ref @ x + y_gpu = cp.asnumpy(operator.matvec(cp.asarray(x))) + relative = float(np.linalg.norm(y_ref - y_gpu) / max(np.linalg.norm(y_ref), 1e-300)) + print(f"Matrix-free validation relative Hx error: {relative:.6e}", flush=True) + return relative + + +def estimate_workspace_bytes( + dimension: int, + itemsize: int, + k: int, + ncv: int, + values_only: bool, +) -> int: + # ARPACK/CuPy implementation details can change. This deliberately uses a + # conservative count rather than claiming exact allocation behavior. + vector_count = ncv + 10 + (0 if values_only else k) + return dimension * itemsize * vector_count + + +def save_vectors_incrementally(path: Path, vectors_gpu: Any, cp: Any) -> None: + shape = tuple(int(x) for x in vectors_gpu.shape) + mmap = np.lib.format.open_memmap( + path, mode="w+", dtype=np.dtype(vectors_gpu.dtype.name), shape=shape + ) + for i in range(shape[1]): + mmap[:, i] = cp.asnumpy(vectors_gpu[:, i]) + mmap.flush() + print(f"Saved eigenvector {i+1}/{shape[1]}", flush=True) + del mmap + + +def compute_residuals( + operator: PauliMatrixFreeOperator, + eigenvalues_gpu: Any, + eigenvectors_gpu: Any, + checks: int, + cp: Any, +) -> np.ndarray: + if eigenvectors_gpu is None or checks <= 0: + return np.empty(0, dtype=np.float64) + count = min(checks, int(eigenvalues_gpu.size)) + residuals = np.empty(count, dtype=np.float64) + for i in range(count): + v = eigenvectors_gpu[:, i] + hv = operator.matvec(v) + numerator = cp.linalg.norm(hv - eigenvalues_gpu[i] * v) + denominator = cp.maximum(cp.linalg.norm(hv), cp.asarray(1e-300)) + residuals[i] = float((numerator / denominator).get()) + print( + f"Residual eigenpair {i}: {residuals[i]:.3e}; " + f"energy={float(cp.real(eigenvalues_gpu[i]).get()):.16g}", + flush=True, + ) + return residuals + + +def main() -> int: + args = parse_args() + timings = Timings() + sp, cp, cpx_linalg, of_deps = import_dependencies() + count_qubits, QubitOperator, jordan_wigner = of_deps + + if args.dat_file is not None and args.num_electrons is None and not args.full_space: + args.num_electrons = read_num_electrons_from_dat(args.dat_file) + print(f"Read --num-electrons {args.num_electrons} from {args.dat_file}", flush=True) + if args.full_space: + args.num_electrons = None + + cp.cuda.Device(args.gpu).use() + props = cp.cuda.runtime.getDeviceProperties(args.gpu) + gpu_name = props["name"] + if isinstance(gpu_name, bytes): + gpu_name = gpu_name.decode(errors="replace") + free_vram, total_vram = cp.cuda.runtime.memGetInfo() + print(f"GPU {args.gpu}: {gpu_name}", flush=True) + print(f"CuPy: {cp.__version__}", flush=True) + print(f"CUDA runtime seen by CuPy: {cp.cuda.runtime.runtimeGetVersion()}", flush=True) + print(f"VRAM: {human_bytes(free_vram)} free / {human_bytes(total_vram)} total", flush=True) + + obj = load_pickle(args.input) + timings.mark("Input loaded") + print(f"Input object type: {type(obj)!r}", flush=True) + + n_qubits = args.n_qubits if args.n_qubits is not None else infer_qubits(obj, count_qubits) + print(f"Number of qubits: {n_qubits}", flush=True) + + if isinstance(obj, QubitOperator): + qop = obj + else: + print("Applying OpenFermion Jordan-Wigner transform (compact Pauli representation)", flush=True) + qop = jordan_wigner(obj) + del obj + timings.mark("Pauli representation ready") + + terms = prepare_pauli_terms(qop, n_qubits) + print(f"Raw Pauli terms including identity: {terms.raw_term_count:,}", flush=True) + print(f"Nonidentity Pauli terms after merging: {terms.nonidentity_count:,}", flush=True) + print(f"Unique X/Y flip-mask groups: {terms.group_count:,}", flush=True) + print(f"Identity coefficient: {terms.identity!r}", flush=True) + + if args.check_hermitian: + max_imag = max((abs(complex(c).imag) for c in qop.terms.values()), default=0.0) + print(f"Maximum imaginary part of Pauli coefficients: {max_imag:.6e}", flush=True) + if max_imag > 1e-9: + raise ValueError("Pauli coefficients are not real within Hermitian tolerance") + del qop + + if args.num_electrons is None: + dimension = 1 << n_qubits + basis_label = "full_qubit_space" + else: + dimension = math.comb(n_qubits, args.num_electrons) + basis_label = "fixed_particle_number" + + itemsize = np.dtype(args.dtype).itemsize + print(f"Basis mode: {basis_label}", flush=True) + if args.num_electrons is not None: + print(f"Active electrons/Hamming weight: {args.num_electrons}", flush=True) + print(f"Operator dimension: {dimension:,}", flush=True) + print(f"One {args.dtype} vector: {human_bytes(dimension * itemsize)}", flush=True) + + k = args.num_eigenpairs + if not 1 <= k < dimension: + raise ValueError(f"-k must satisfy 1 <= k < dimension ({dimension:,})") + ncv = args.ncv if args.ncv is not None else min(dimension, max(2 * k + 1, 20)) + if not k < ncv <= dimension: + raise ValueError(f"--ncv must satisfy k < ncv <= dimension; got k={k}, ncv={ncv}") + + workspace = estimate_workspace_bytes(dimension, itemsize, k, ncv, args.values_only) + print( + f"Conservative eigsh vector-workspace estimate: {human_bytes(workspace)} " + f"(k={k}, ncv={ncv})", + flush=True, + ) + if workspace > args.memory_fraction * free_vram and not args.force_memory: + raise MemoryError( + f"Estimated matrix-free eigsh workspace {human_bytes(workspace)} exceeds " + f"{args.memory_fraction:.0%} of free VRAM ({human_bytes(free_vram)}). " + "Reduce k/ncv, use --num-electrons, use --values-only, or override with " + "--force-memory at your own risk." + ) + + if args.inspect_only: + print("Inspection complete; no eigensolver was run.", flush=True) + return 0 + + args.output_dir.mkdir(parents=True, exist_ok=True) + if args.save_hamiltonian or args.save_pauli_terms: + save_compact_terms(args.output_dir / "pauli_terms.npz", terms) + timings.mark("Compact Pauli terms saved") + + operator = PauliMatrixFreeOperator( + cp=cp, + terms=terms, + dtype_name=args.dtype, + num_electrons=args.num_electrons, + threads_per_block=args.threads_per_block, + progress_every=args.progress_every, + ) + timings.mark("GPU matrix-free operator initialized") + + # Force JIT compilation and benchmark one Hx before entering eigsh. + rng = cp.random.RandomState(12345) + trial = rng.standard_normal(operator.dimension, dtype=cp.float64) + trial = trial.astype(operator.dtype) + trial /= cp.linalg.norm(trial) + print("Compiling/benchmarking one matrix-free Hx operation...", flush=True) + _ = operator.matvec(trial) + cp.cuda.Stream.null.synchronize() + del trial, _ + cp.get_default_memory_pool().free_all_blocks() + timings.mark("First matrix-free Hx completed") + + validation_error = None + if args.validate_small: + # Reload because the original object was deliberately freed. + validation_obj = load_pickle(args.input) + validation_qop = validation_obj if isinstance(validation_obj, QubitOperator) else jordan_wigner(validation_obj) + validation_error = validate_small_operator( + validation_obj, validation_qop, operator, cp, args.num_electrons + ) + del validation_obj, validation_qop + timings.mark("Small-system validation completed") + + linear_operator = cpx_linalg.LinearOperator( + shape=(dimension, dimension), + matvec=operator.matvec, + rmatvec=operator.matvec, + matmat=operator.matmat, + dtype=operator.dtype, + ) + + print( + f"Running matrix-free GPU eigsh: k={k}, ncv={ncv}, which='SA', " + f"tol={args.tol:g}, maxiter={args.maxiter}", + flush=True, + ) + v0 = cp.ones(dimension, dtype=operator.dtype) + v0 /= cp.linalg.norm(v0) + + with SolverHeartbeat(operator, args.heartbeat): + result = cpx_linalg.eigsh( + linear_operator, + k=k, + which="SA", + v0=v0, + ncv=ncv, + maxiter=args.maxiter, + tol=args.tol, + return_eigenvectors=not args.values_only, + ) + cp.cuda.Stream.null.synchronize() + del v0 + timings.mark("Matrix-free eigsh completed") + + if args.values_only: + eigenvalues_gpu = result + eigenvectors_gpu = None + else: + eigenvalues_gpu, eigenvectors_gpu = result + + order = cp.argsort(cp.real(eigenvalues_gpu)) + eigenvalues_gpu = eigenvalues_gpu[order] + if eigenvectors_gpu is not None: + eigenvectors_gpu = eigenvectors_gpu[:, order] + + residuals = compute_residuals( + operator, eigenvalues_gpu, eigenvectors_gpu, args.residual_checks, cp + ) + timings.mark("Residual checks completed") + + eigenvalues = cp.asnumpy(eigenvalues_gpu) + np.save(args.output_dir / "eigenvalues.npy", eigenvalues) + np.savetxt( + args.output_dir / "lowest_energies.txt", + np.column_stack((np.arange(eigenvalues.size), np.real(eigenvalues))), + header="state_index energy", + fmt=["%d", "%.17e"], + ) + sp.save_npz( + args.output_dir / "diagonal_sparse.npz", + sp.diags(eigenvalues, offsets=0, format="csr"), + ) + np.save(args.output_dir / "residuals.npy", residuals) + + if eigenvectors_gpu is not None: + save_vectors_incrementally( + args.output_dir / "eigenvectors.npy", eigenvectors_gpu, cp + ) + timings.mark("Numerical outputs saved") + + metadata = { + "input": str(args.input), + "dat_file": None if args.dat_file is None else str(args.dat_file), + "gpu_index": args.gpu, + "gpu_name": str(gpu_name), + "cupy_version": cp.__version__, + "cuda_runtime": int(cp.cuda.runtime.runtimeGetVersion()), + "n_qubits": n_qubits, + "num_electrons": args.num_electrons, + "basis_mode": basis_label, + "dimension": int(dimension), + "raw_pauli_terms": terms.raw_term_count, + "nonidentity_pauli_terms": terms.nonidentity_count, + "flip_mask_groups": terms.group_count, + "dtype": args.dtype, + "k": k, + "ncv": ncv, + "tol": args.tol, + "maxiter": args.maxiter, + "values_only": args.values_only, + "matvec_calls": operator.matvec_calls, + "last_matvec_seconds": operator.last_matvec_seconds, + "workspace_estimate_bytes": int(workspace), + "validation_relative_error": validation_error, + "lowest_energy": float(np.real(eigenvalues[0])), + "highest_returned_energy": float(np.real(eigenvalues[-1])), + } + with (args.output_dir / "metadata.json").open("w", encoding="utf-8") as f: + json.dump(metadata, f, indent=2) + with (args.output_dir / "timing.json").open("w", encoding="utf-8") as f: + json.dump(timings.as_dict(), f, indent=2) + + timings.mark("Metadata saved") + print("", flush=True) + print(f"Returned {eigenvalues.size} lowest energy value(s)", flush=True) + for i, value in enumerate(eigenvalues): + print(f"E[{i:4d}] = {value:.17g}", flush=True) + print(f"Output directory: {args.output_dir}", flush=True) + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except KeyboardInterrupt: + print("\nInterrupted by user.", file=sys.stderr, flush=True) + raise SystemExit(130) + except Exception as exc: + print(f"\nERROR: {exc}", file=sys.stderr, flush=True) + traceback.print_exc() + raise SystemExit(1) diff --git a/big_hamiltonian_diagonalizer/requirements.txt b/big_hamiltonian_diagonalizer/requirements.txt new file mode 100644 index 00000000..56ed2668 --- /dev/null +++ b/big_hamiltonian_diagonalizer/requirements.txt @@ -0,0 +1,15 @@ +# Core numerical dependency +numpy + +# PySCF provides the direct_spin1 FCI Davidson solver used by qhat_low_energies_fci.py +pyscf + +# OpenFermion defines the InteractionOperator objects stored in the input pickles +# and is also used by the optional --validate-small check. +openfermion + +# Used by the optional OpenFermion sparse validation path (scipy.sparse.linalg.eigsh). +scipy + +# NOTE: hamgen.py was not included with the supplied files. If hamgen.py imports +# additional project-specific or chemistry packages, add them here as needed.