From 7f4483f19ef8a7c31a0a8d9cc95a6ef876ca217e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Coppens?= Date: Mon, 22 Feb 2021 18:18:00 +0100 Subject: [PATCH 1/4] - Made test.cpp use variable dataset. - Started cleanup and restructuring file tree. --- .gitignore | 2 +- QMCChem_dataset_test.f90 | 2 +- dataset.dat => datasets/update_cycle_13.dat | 0 test.dataset.dat | 0 tests/test.cpp | 3 +-- 5 files changed, 3 insertions(+), 4 deletions(-) rename dataset.dat => datasets/update_cycle_13.dat (100%) delete mode 100644 test.dataset.dat diff --git a/.gitignore b/.gitignore index ef210b4..84a179d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ QMCChem_dataset_test Slater* Updates* tests/test -datasets.hdf5 \ No newline at end of file +datasets/datasets.* \ No newline at end of file diff --git a/QMCChem_dataset_test.f90 b/QMCChem_dataset_test.f90 index 5fe549a..ecd01f9 100644 --- a/QMCChem_dataset_test.f90 +++ b/QMCChem_dataset_test.f90 @@ -10,7 +10,7 @@ program QMCChem_dataset_test real(c_double), dimension(:,:), allocatable :: Updates real(c_double), dimension(:,:), allocatable :: S, S_inv, S_inv_trans - call Read_dataset("dataset.dat", & + call Read_dataset("update_cycle_13.dat", & cycle_id, & dim, & n_updates, & diff --git a/dataset.dat b/datasets/update_cycle_13.dat similarity index 100% rename from dataset.dat rename to datasets/update_cycle_13.dat diff --git a/test.dataset.dat b/test.dataset.dat deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test.cpp b/tests/test.cpp index 1653f72..8e31c09 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -23,7 +23,6 @@ void read_double(H5File file, std::string key, double * data) { ds.close(); } - int test_cycle(H5File file, int cycle) { /* Read the data */ @@ -77,7 +76,7 @@ int main(int argc, char **argv) { int cycle = std::stoi(argv[1]); H5File file(FILE_NAME, H5F_ACC_RDONLY); - bool ok = test_cycle(file, 21); + bool ok = test_cycle(file, cycle); if (ok) { std::cerr << "ok -- cycle " << std::to_string(cycle) << std::endl; From 28f6de48eed0238f9db58bcb18428f6d38d581b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Coppens?= Date: Tue, 23 Feb 2021 08:28:09 +0100 Subject: [PATCH 2/4] TO BE AMENDED --- Utils_mod.f90 => Helpers_mod.f90 | 19 +++++++++++++++++-- Makefile | 10 +++++----- QMCChem_dataset_test.f90 | 18 ++++++++++-------- SM_MaponiA3.cpp | 6 +++--- SM_MaponiA3_mod.f90 | 1 + tests/convert-to-h5.py | 2 +- 6 files changed, 37 insertions(+), 19 deletions(-) rename Utils_mod.f90 => Helpers_mod.f90 (77%) diff --git a/Utils_mod.f90 b/Helpers_mod.f90 similarity index 77% rename from Utils_mod.f90 rename to Helpers_mod.f90 index dd1c364..50e5fe3 100644 --- a/Utils_mod.f90 +++ b/Helpers_mod.f90 @@ -1,4 +1,4 @@ -module Utils +module Helpers implicit none contains subroutine Read_dataset(filename, & @@ -53,4 +53,19 @@ module Utils !! End of reading the dataset from file close(1000) end subroutine Read_dataset -end module Utils \ No newline at end of file + + subroutine Transpose(S_inv, S_inv_transpose, dim) + use, intrinsic :: iso_c_binding, only : c_int, c_double + implicit none + + integer, intent(in) :: dim + real(c_double), allocatable, intent(in) :: S_inv(:,:) + real(c_double), allocatable, intent(inout) :: S_inv_transpose(:,:) + integer :: i, j + do i=1,dim + do j=1,dim + S_inv_transpose(i,j) = S_inv(j,i) + end do + end do + end subroutine Transpose + end module Helpers \ No newline at end of file diff --git a/Makefile b/Makefile index 5e01a20..39e1f27 100644 --- a/Makefile +++ b/Makefile @@ -2,12 +2,12 @@ ## Used compilers H5CXX = h5c++ -CXX = clang++ -FC = flang +CXX = icpc +FC = ifort ## Compiler flags & common obs & libs -CXXFLAGS = -O0 #-debug full -traceback -FFLAGS = -O0 #-debug full -traceback +CXXFLAGS = -O0 -debug full -traceback +FFLAGS = -O0 -debug full -traceback FLIBS = -lstdc++ OBJS = SM_MaponiA3.o @@ -15,7 +15,7 @@ OBJS = SM_MaponiA3.o cMaponiA3_test_3x3_3OBJ = cMaponiA3_test_3x3_3.o fMaponiA3_test_3x3_3OBJ = SM_MaponiA3_mod.o fMaponiA3_test_3x3_3.o fMaponiA3_test_4x4_2OBJ = SM_MaponiA3_mod.o fMaponiA3_test_4x4_2.o -QMCChem_dataset_testOBJ = Utils_mod.o SM_MaponiA3_mod.o QMCChem_dataset_test.o +QMCChem_dataset_testOBJ = Helpers_mod.o SM_MaponiA3_mod.o QMCChem_dataset_test.o ## Default build target: build everything diff --git a/QMCChem_dataset_test.f90 b/QMCChem_dataset_test.f90 index ecd01f9..4812290 100644 --- a/QMCChem_dataset_test.f90 +++ b/QMCChem_dataset_test.f90 @@ -1,16 +1,15 @@ program QMCChem_dataset_test - use Sherman_Morrison, only : MaponiA3 - use Utils, only : Read_dataset - use, intrinsic :: iso_c_binding, only : c_int, c_double + use Sherman_Morrison + use Helpers implicit none integer :: i, j, col !! Iterators integer :: cycle_id, dim, n_updates integer(c_int), dimension(:), allocatable :: Updates_index real(c_double), dimension(:,:), allocatable :: Updates - real(c_double), dimension(:,:), allocatable :: S, S_inv, S_inv_trans + real(c_double), dimension(:,:), allocatable :: S, S_inv, S_inv_t - call Read_dataset("update_cycle_13.dat", & + call Read_dataset("datasets/update_cycle_13.dat", & cycle_id, & dim, & n_updates, & @@ -18,7 +17,9 @@ program QMCChem_dataset_test S_inv, & Updates_index, & Updates) - + allocate(S_inv_t(dim,dim)) + call Transpose(S_inv, S_inv_t, dim) + !! Write current S and S_inv to file for check in Octave open(unit = 2000, file = "Slater_old.dat") open(unit = 3000, file = "Slater_old_inv.dat") @@ -52,7 +53,8 @@ program QMCChem_dataset_test end do !! Update S_inv - call MaponiA3(S_inv, dim, n_updates, Updates, Updates_index) + call MaponiA3(S_inv_t, dim, n_updates, Updates, Updates_index) + call Transpose(S_inv_t, S_inv, dim) !! Write new S and S_inv to file for check in Octave open(unit = 4000, file = "Slater.dat") @@ -68,5 +70,5 @@ program QMCChem_dataset_test close(4000) close(5000) - deallocate(S, S_inv, Updates, Updates_index) + deallocate(S, S_inv, S_inv_t, Updates, Updates_index) end program diff --git a/SM_MaponiA3.cpp b/SM_MaponiA3.cpp index 73f4d6b..beac559 100644 --- a/SM_MaponiA3.cpp +++ b/SM_MaponiA3.cpp @@ -30,7 +30,7 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, for (k = 1; k < N_updates + 1; k++) { for (i = 1; i < Dim + 1; i++) { for (j = 1; j < Dim + 1; j++) { - ylk[0][k][i] += Slater_inv[(i-1) + (j-1)*Dim] + ylk[0][k][i] += Slater_inv[(i-1)*Dim + (j-1)] * Updates[(k-1)*Dim + (j-1)]; } } @@ -70,7 +70,7 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, // a new pointer 'copy' that points to whereever 'Slater_inv' points to now. double *copy = Slater_inv; - Slater_inv = transpose(Slater_inv, Dim); + // Slater_inv = transpose(Slater_inv, Dim); // Construct A-inverse from A0-inverse and the ylk for (l = 0; l < N_updates; l++) { // l = 0, 1 @@ -85,7 +85,7 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, Slater_inv = matMul(Al, Slater_inv, Dim); } - Slater_inv = transpose(Slater_inv, Dim); + // Slater_inv = transpose(Slater_inv, Dim); // Assign the new values of 'Slater_inv' to the old values in 'copy[][]' for (i = 0; i < Dim; i++) { diff --git a/SM_MaponiA3_mod.f90 b/SM_MaponiA3_mod.f90 index e672372..a7105b2 100644 --- a/SM_MaponiA3_mod.f90 +++ b/SM_MaponiA3_mod.f90 @@ -1,4 +1,5 @@ module Sherman_Morrison + use, intrinsic :: iso_c_binding, only : c_int, c_double interface subroutine MaponiA3(Slater_inv, dim, n_updates, Updates, Updates_index) bind(C, name="MaponiA3_f") use, intrinsic :: iso_c_binding, only : c_int, c_double diff --git a/tests/convert-to-h5.py b/tests/convert-to-h5.py index 32068a4..e3dcaf9 100644 --- a/tests/convert-to-h5.py +++ b/tests/convert-to-h5.py @@ -7,7 +7,7 @@ def rl(rf): with h5py.File('datasets.hdf5', 'w') as f: - with open('dataset.dat', 'r') as rf: + with open('datasets.dat', 'r') as rf: while(1): line = rl(rf) if not line or not line.startswith('#START_PACKET'): From 225c841a8874e6e6150ceae99b45dbd00bfe66f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Coppens?= Date: Wed, 24 Feb 2021 18:41:48 +0100 Subject: [PATCH 3/4] * Fixed the 3x3 MaponiA3 C++ example. Update_index vector cannot have values that are smaller than 1 because the first colums in Fortran is stored at 1 and not 0. * Started debugging reading from HDF5 formatted datasets. Slater_inv needs to be transposed before sent to Maponi. Algo fails at the last step. Correct Slater and Inverse fail to produce the identity matrix. Suspect that the matMul function is not working correctly eventhough it looks like it does. --- .gitignore | 3 +- Helpers.hpp | 34 +- Makefile | 11 +- QMCChem_dataset_test.f90 | 8 +- SM_MaponiA3.cpp | 4 - cMaponiA3_test_3x3_3.cpp | 15 +- datasets/datasets.small.dat | 546 +++++++++++++++++++++++++++++++++ datasets/datasets.small.hdf5 | Bin 0 -> 30583 bytes datasets/update_cycle_8169.dat | 32 ++ fMaponiA3_test_3x3_3.f90 | 11 +- fMaponiA3_test_4x4_2.f90 | 22 +- tests/convert-to-h5.py | 2 +- tests/test.cpp | 25 +- 13 files changed, 662 insertions(+), 51 deletions(-) create mode 100644 datasets/datasets.small.dat create mode 100644 datasets/datasets.small.hdf5 create mode 100644 datasets/update_cycle_8169.dat diff --git a/.gitignore b/.gitignore index 84a179d..c4bd975 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ QMCChem_dataset_test Slater* Updates* tests/test -datasets/datasets.* \ No newline at end of file +datasets/datasets.* + diff --git a/Helpers.hpp b/Helpers.hpp index 3c361de..7bc5efd 100644 --- a/Helpers.hpp +++ b/Helpers.hpp @@ -39,11 +39,11 @@ void showMatrix(T *matrix, unsigned int M, string name) { for (unsigned int i = 0; i < M; i++) { cout << "["; for (unsigned int j = 0; j < M; j++) { - if (matrix[i*M+j] >= 0) { - cout << " " << matrix[i*M+j]; + if (matrix[i*M + j] >= 0) { + cout << " " << matrix[i*M + j]; } else { - cout << " " << matrix[i*M+j]; + cout << " " << matrix[i*M + j]; } } cout << " ]" << endl; @@ -51,19 +51,6 @@ void showMatrix(T *matrix, unsigned int M, string name) { cout << endl; } -template -void showMatrixT(T **matrix, unsigned int size, string name) { - cout << name << " = " << endl; - for (unsigned int i = 0; i < size; i++) { - cout << "[ "; - for (unsigned int j = 0; j < size; j++) { - cout << matrix[j][i] << " "; - } - cout << " ]" << endl; - } - cout << endl; -} - template T *transpose(T *A, unsigned int M) { T *B = new T[M*M]; @@ -88,6 +75,20 @@ T *matMul(T *A, T *B, unsigned int M) { return C; } +template +T *matMul2(T *A, T *B, unsigned int M) { + T *C = new T[M*M]; + for (unsigned int i = 0; i < M; i++) { + for (unsigned int j = 0; j < M; j++) { + for (unsigned int k = 0; k < M; k++) { + C[i*M+j] += A[i*M+k] * B[k*M+j]; + } + } + } + showMatrix(C,M,"C"); + return C; +} + template T1 *outProd(T1 *vec1, T2 *vec2, unsigned int M) { T1 *C = new T1[M*M]; @@ -135,7 +136,6 @@ T matDet(T **A, unsigned int M) { delete [] temp; } - template bool is_identity(T *A, unsigned int M, double tolerance) { for (unsigned int i = 0; i < M; i++) { diff --git a/Makefile b/Makefile index 39e1f27..127e584 100644 --- a/Makefile +++ b/Makefile @@ -6,15 +6,16 @@ CXX = icpc FC = ifort ## Compiler flags & common obs & libs -CXXFLAGS = -O0 -debug full -traceback -FFLAGS = -O0 -debug full -traceback +H5CXXFLAGS = -O0 -g +CXXFLAGS = -O0 -g -traceback +FFLAGS = -O0 -g -traceback FLIBS = -lstdc++ OBJS = SM_MaponiA3.o ## Deps & objs for C++ cMaponiA3_test_3x3_3 cMaponiA3_test_3x3_3OBJ = cMaponiA3_test_3x3_3.o fMaponiA3_test_3x3_3OBJ = SM_MaponiA3_mod.o fMaponiA3_test_3x3_3.o -fMaponiA3_test_4x4_2OBJ = SM_MaponiA3_mod.o fMaponiA3_test_4x4_2.o +fMaponiA3_test_4x4_2OBJ = Helpers_mod.o SM_MaponiA3_mod.o fMaponiA3_test_4x4_2.o QMCChem_dataset_testOBJ = Helpers_mod.o SM_MaponiA3_mod.o QMCChem_dataset_test.o @@ -32,7 +33,7 @@ all: cMaponiA3_test_3x3_3 fMaponiA3_test_3x3_3 fMaponiA3_test_4x4_2 QMCChem_data ## Explicit recipe to trigger rebuild and relinking when headerfile is changed SM_MaponiA3.o: SM_MaponiA3.cpp Helpers.hpp - $(CXX) $(ARCH) $(CXXFLAGS) -c -o $@ $< + $(CXX) $(ARCH) $(CXXFLAGS) -fPIC -c -o $@ $< ## Build tagets @@ -64,4 +65,4 @@ QMCChem_dataset_test: $(QMCChem_dataset_testOBJ) $(OBJS) $(FC) $(ARCH) $(FFLAGS) $(FLIBS) -o $@ $^ tests/test: tests/test.cpp SM_MaponiA3.o - $(H5CXX) $(ARCH) $(CXXFLAGS) -o $@ $^ + $(H5CXX) $(ARCH) $(H5CXXFLAGS) -o $@ $^ diff --git a/QMCChem_dataset_test.f90 b/QMCChem_dataset_test.f90 index 4812290..508c0f3 100644 --- a/QMCChem_dataset_test.f90 +++ b/QMCChem_dataset_test.f90 @@ -9,7 +9,7 @@ program QMCChem_dataset_test real(c_double), dimension(:,:), allocatable :: Updates real(c_double), dimension(:,:), allocatable :: S, S_inv, S_inv_t - call Read_dataset("datasets/update_cycle_13.dat", & + call Read_dataset("datasets/update_cycle_8169.dat", & cycle_id, & dim, & n_updates, & @@ -18,7 +18,6 @@ program QMCChem_dataset_test Updates_index, & Updates) allocate(S_inv_t(dim,dim)) - call Transpose(S_inv, S_inv_t, dim) !! Write current S and S_inv to file for check in Octave open(unit = 2000, file = "Slater_old.dat") @@ -53,7 +52,12 @@ program QMCChem_dataset_test end do !! Update S_inv + !! S_inv needs to be transposed first before it + !! goes to MaponiA3 + call Transpose(S_inv, S_inv_t, dim) call MaponiA3(S_inv_t, dim, n_updates, Updates, Updates_index) + !! S_inv_t needs to be transposed back before we + !! can multiply it with S to test unity call Transpose(S_inv_t, S_inv, dim) !! Write new S and S_inv to file for check in Octave diff --git a/SM_MaponiA3.cpp b/SM_MaponiA3.cpp index beac559..187ed65 100644 --- a/SM_MaponiA3.cpp +++ b/SM_MaponiA3.cpp @@ -70,8 +70,6 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, // a new pointer 'copy' that points to whereever 'Slater_inv' points to now. double *copy = Slater_inv; - // Slater_inv = transpose(Slater_inv, Dim); - // Construct A-inverse from A0-inverse and the ylk for (l = 0; l < N_updates; l++) { // l = 0, 1 k = l + 1; // k = 1, 2 @@ -85,8 +83,6 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, Slater_inv = matMul(Al, Slater_inv, Dim); } - // Slater_inv = transpose(Slater_inv, Dim); - // Assign the new values of 'Slater_inv' to the old values in 'copy[][]' for (i = 0; i < Dim; i++) { for (j = 0; j < Dim; j++) { diff --git a/cMaponiA3_test_3x3_3.cpp b/cMaponiA3_test_3x3_3.cpp index 8e9ffb4..525d15d 100644 --- a/cMaponiA3_test_3x3_3.cpp +++ b/cMaponiA3_test_3x3_3.cpp @@ -1,12 +1,9 @@ // main.cpp #include "SM_MaponiA3.hpp" #include "Helpers.hpp" -#include -#include int main() { - srand((unsigned) time(0)); unsigned int M = 3; // Dimension of the Slater-matrix unsigned int i, j; // Indices for iterators @@ -37,18 +34,16 @@ int main() { // the inverse of A0_inv of diagonal matrix A0_inv // and the update matrix Ar for (i = 0; i < M; i++) { - A0[i*M+i] = A[i*M+i]; - A0_inv[i*M+i] = 1.0/A[i*M+i]; - Ar_index[i] = i; + A0[i*M + i] = A[i*M + i]; + A0_inv[i*M + i] = 1.0/A[i*M + i]; + Ar_index[i] = i+1; // ! First column needs to start with 1 ! for (j = 0; j < M; j++) { - Ar[i*M+j] = A[i*M+j] - A0[i*M+j]; + Ar[i*M + j] = A[i*M + j] - A0[i*M + j]; } } // Define pointers dim and n_updates to use in Sherman-Morrison(...) function call - unsigned int dim = M; - unsigned int n_updates = M; - MaponiA3(A0_inv, dim, n_updates, Ar, Ar_index); + MaponiA3(A0_inv, M, M, Ar, Ar_index); showMatrix(A0_inv, M, "A0_inv"); // Deallocate all vectors and matrices diff --git a/datasets/datasets.small.dat b/datasets/datasets.small.dat new file mode 100644 index 0000000..c65fc95 --- /dev/null +++ b/datasets/datasets.small.dat @@ -0,0 +1,546 @@ +#START_PACKET +#CYCLE_ID: 13 +#SLATER_MATRIX_DIM: 21 +#NUPDATES: 3 +#SLATER_MATRIX: (i (outer), j (inner)), slater_matrix_alpha(i,j), ddet * slater_matrix_alpha_inv_det(i,j) / ddet +(01,01) -0.123240642249584E+00 0.311919238733319E+02 +(01,02) 0.150952935218811E+00 0.391211616261786E+02 +(01,03) 0.871514901518822E-01 0.230468185418855E+02 +(01,04) -0.150895461440086E+00 0.385544395586345E+02 +(01,05) -0.871202647686005E-01 0.233591113858616E+02 +(01,06) -0.123183816671371E+00 -0.312005871898339E+02 +(01,07) 0.100359566509724E+00 -0.751758654676229E+00 +(01,08) -0.135056734085083E+00 -0.440356424219148E+01 +(01,09) -0.744080543518066E-01 -0.157135293238612E+01 +(01,10) -0.120210982859135E+00 0.311608268850865E+01 +(01,11) -0.757721215486526E-01 0.269147143852639E+01 +(01,12) 0.525853671133518E-01 -0.295675853033276E+01 +(01,13) 0.102125488221645E+00 0.695722472661512E+01 +(01,14) -0.307190138846636E-01 -0.656548036745546E+01 +(01,15) 0.202103536576033E-01 0.357345834272637E+01 +(01,16) -0.211704343557358E+00 -0.127226560851769E+00 +(01,17) -0.152789223939180E-01 0.211510373691347E+01 +(01,18) -0.396802611649036E-01 0.225402683839516E+01 +(01,19) 0.156803593039513E+00 0.138095041843308E+00 +(01,20) 0.273103892803192E+00 0.144755926374198E+00 +(01,21) -0.666790679097176E-01 -0.129650521353452E+01 +(02,01) -0.383377403020859E+00 0.748881862107261E+02 +(02,02) 0.469519078731537E+00 0.913799202443389E+02 +(02,03) -0.271040737628937E+00 0.511079244308798E+02 +(02,04) 0.469401627779007E+00 0.908925159786654E+02 +(02,05) -0.271042704582214E+00 0.524296869618370E+02 +(02,06) 0.383267551660538E+00 -0.743781724291279E+02 +(02,07) 0.116775326430798E+00 -0.308858192791382E+01 +(02,08) -0.936452969908714E-01 -0.883914805747968E+01 +(02,09) 0.369134694337845E-01 -0.251520306199258E+01 +(02,10) -0.204805508255959E-01 0.120501905090525E+02 +(02,11) -0.173394829034805E-01 0.968749784123027E+01 +(02,12) -0.197960838675499E+00 -0.128360153025071E+02 +(02,13) 0.962643101811409E-01 0.124602848636645E+02 +(02,14) 0.274471193552017E+00 -0.108315097729706E+02 +(02,15) 0.145023554563522E+00 0.538637730088244E+01 +(02,16) -0.179225616157055E-01 -0.155954216668878E+01 +(02,17) 0.136946782469749E+00 0.733071759611877E+01 +(02,18) -0.174913182854652E+00 0.106785970043980E+02 +(02,19) -0.128193218261003E-01 -0.526404570077434E+00 +(02,20) 0.225567314773798E-01 0.126274276019119E+01 +(02,21) -0.171542761381716E-02 -0.176385334707397E+01 +(03,01) -0.109934650361538E+00 0.981074335673308E+01 +(03,02) 0.393143796827644E-03 0.142283742204400E+02 +(03,03) 0.155300989747047E+00 0.106061203769129E+02 +(03,04) -0.378105294657871E-03 0.142205894966935E+02 +(03,05) 0.154906913638115E+00 0.106658385090178E+02 +(03,06) 0.109414055943489E+00 -0.999705856360834E+01 +(03,07) 0.162110984325409E+00 -0.235530921594611E+01 +(03,08) -0.104241691529751E+00 -0.397822961500586E+01 +(03,09) -0.199010908603668E+00 -0.615755307417915E+00 +(03,10) -0.178463548421860E+00 0.302954990045915E+01 +(03,11) 0.115249522030354E+00 0.260774312202084E+01 +(03,12) -0.751317143440247E-01 -0.324474908269315E+01 +(03,13) -0.180085301399231E-01 0.506349143477028E+01 +(03,14) 0.776397660374641E-01 -0.403331084954255E+01 +(03,15) -0.162087708711624E+00 0.216159755322281E+01 +(03,16) 0.115154005587101E+00 -0.356236831434911E+00 +(03,17) -0.111836232244968E+00 0.229287231445069E+01 +(03,18) 0.215133726596832E+00 0.345423911992016E+01 +(03,19) -0.165389522910118E+00 -0.522840315767084E-01 +(03,20) -0.160914268344641E-01 -0.798660202084652E+00 +(03,21) -0.184740740805864E-01 -0.669484792656382E-01 +(04,01) -0.505007863044739E+00 -0.509168796576331E+00 +(04,02) -0.618503987789154E+00 -0.626061168716399E+00 +(04,03) 0.357068866491318E+00 0.106282405724139E+00 +(04,04) 0.618444144725800E+00 0.187208027678628E+00 +(04,05) -0.357080936431885E+00 -0.361241794759462E+00 +(04,06) -0.504969716072083E+00 -0.152171018401898E+00 +(04,07) 0.778413712978363E-01 0.786005474778943E-02 +(04,08) 0.487910546362400E-01 0.335536466772946E-01 +(04,09) -0.115782171487808E-01 0.204150929795949E-01 +(04,10) -0.530001707375050E-01 -0.431873457736125E-01 +(04,11) 0.214109313674271E-02 -0.266642681570363E-01 +(04,12) -0.194653034210205E+00 0.354230568719380E-01 +(04,13) -0.116052091121674E+00 -0.662672792520103E-01 +(04,14) -0.260605067014694E+00 0.541727654659900E-01 +(04,15) -0.137633457779884E+00 -0.215053141567270E-01 +(04,16) 0.422291792929173E-01 -0.313441408257335E-02 +(04,17) 0.133351176977158E+00 -0.360061392608368E-01 +(04,18) -0.170262515544891E+00 -0.364432600501005E-01 +(04,19) -0.304439514875412E-01 -0.281329679904227E-02 +(04,20) 0.533868409693241E-01 0.147042058872862E-01 +(04,21) 0.596583448350430E-02 0.983501095240267E-02 +(05,01) -0.947399914264679E+00 -0.515300150381945E+00 +(05,02) 0.440122239524499E-04 -0.414148002449120E+00 +(05,03) -0.133992493152618E+01 -0.483927352922599E+00 +(05,04) 0.392828042095061E-04 -0.414236968594294E+00 +(05,05) 0.134024262428284E+01 0.892894843202583E-02 +(05,06) -0.947782099246979E+00 0.163447351211741E+00 +(05,07) -0.155572161078453E+00 -0.263796606276840E-01 +(05,08) -0.790303274989128E-01 -0.422167712445766E-01 +(05,09) -0.178044617176056E+00 -0.244456092073667E-01 +(05,10) 0.141150355339050E+00 0.343720228179847E-01 +(05,11) -0.857104435563087E-01 0.188162844929908E-01 +(05,12) 0.108973577618599E+00 -0.227730288498809E-01 +(05,13) 0.100100971758366E-01 0.389866683213947E-01 +(05,14) 0.567631311714649E-01 -0.313257678215315E-01 +(05,15) -0.203381881117821E+00 0.166784616908835E-01 +(05,16) 0.391849316656590E-01 -0.748798889931418E-02 +(05,17) 0.140034869313240E+00 0.141492354958890E-01 +(05,18) -0.172185719013214E+00 0.166134715418269E-01 +(05,19) 0.583750754594803E-01 -0.569910669664292E-02 +(05,20) -0.916111283004284E-03 -0.139449114927599E-01 +(05,21) -0.292119309306145E-01 -0.277054057678700E-02 +(06,01) -0.351941259577870E-02 0.320422300739978E+02 +(06,02) -0.429157400503755E-02 0.396796238151428E+02 +(06,03) 0.200041988864541E-02 0.225744499599300E+02 +(06,04) 0.343890837393701E-02 0.385319291283625E+02 +(06,05) -0.242624944075942E-02 0.228620731935291E+02 +(06,06) -0.279381335712969E-02 -0.315787444812651E+02 +(06,07) 0.133628234267235E+00 -0.201688119637744E+01 +(06,08) 0.164535552263260E+00 -0.691868674131645E+01 +(06,09) -0.303669814020395E-01 -0.337527478391271E+01 +(06,10) 0.335082374513149E-01 0.737932786002596E+01 +(06,11) -0.115301951766014E+00 0.532046905755991E+01 +(06,12) -0.643811970949173E-01 -0.704646020919806E+01 +(06,13) 0.168905649334192E-01 0.116798006516197E+02 +(06,14) -0.131173312664032E+00 -0.103900446585121E+02 +(06,15) -0.228150542825460E-01 0.367492551215626E+01 +(06,16) -0.140278100967407E+00 0.541292498306359E+00 +(06,17) 0.121666260063648E+00 0.688933313780047E+01 +(06,18) -0.169033091515303E-01 0.643920432296654E+01 +(06,19) 0.515771955251694E-01 0.640069090766210E+00 +(06,20) -0.180635631084442E+00 -0.275193635264416E+01 +(06,21) 0.195857465267181E+00 -0.188561818645725E+01 +(07,01) -0.520476046949625E-02 0.236539170987535E+02 +(07,02) 0.580822164192796E-02 0.295003969224203E+02 +(07,03) -0.399843230843544E-02 0.174888381981832E+02 +(07,04) 0.576473958790302E-02 0.294531380129501E+02 +(07,05) -0.271833199076355E-02 0.175044078873038E+02 +(07,06) 0.426918268203735E-02 -0.241830822724836E+02 +(07,07) 0.147665038704872E+00 0.314282931518621E+01 +(07,08) -0.117447517812252E+00 0.403784215759159E+01 +(07,09) 0.147420719265938E+00 0.169155742879292E+01 +(07,10) 0.135893806815147E+00 -0.554066860884136E+01 +(07,11) 0.422651544213295E-01 -0.525713150347206E+01 +(07,12) -0.695310905575752E-01 0.394727380633284E+01 +(07,13) -0.168554261326790E-01 -0.641137465954821E+01 +(07,14) 0.921243280172348E-01 0.423388578775427E+01 +(07,15) 0.117380328476429E+00 0.306527904979264E-01 +(07,16) 0.138013571500778E+00 0.202300380704869E+01 +(07,17) -0.623580329120159E-01 -0.459569791294739E+01 +(07,18) -0.136343047022820E+00 -0.468425326686841E+01 +(07,19) 0.131682857871056E+00 0.121902516832242E+01 +(07,20) -0.132132634520531E+00 -0.707896318054816E+00 +(07,21) 0.119739077985287E+00 0.441694177169657E+00 +(08,01) -0.241280291229486E-01 -0.964925469634583E+02 +(08,02) 0.295925457030535E-01 -0.118149667679186E+03 +(08,03) 0.161907169967890E-01 -0.672201839913842E+02 +(08,04) -0.280807800590992E-01 -0.117411734713197E+03 +(08,05) -0.170978084206581E-01 -0.686625184338945E+02 +(08,06) -0.229465700685978E-01 0.961995663618476E+02 +(08,07) 0.170763313770294E+00 0.451976509920424E+01 +(08,08) -0.246933296322823E+00 0.100355852033043E+02 +(08,09) -0.118787530809641E-01 0.362241589185164E+01 +(08,10) -0.233876928687096E-01 -0.130069484167442E+02 +(08,11) -0.235260799527168E+00 -0.110760346601338E+02 +(08,12) -0.413223467767239E-01 0.139329830045770E+02 +(08,13) 0.334977582097054E-01 -0.153873537547839E+02 +(08,14) 0.146476894617081E+00 0.146103537661863E+02 +(08,15) 0.599658722057939E-02 -0.765612032914714E+01 +(08,16) -0.962516665458679E-01 0.886407137879243E+00 +(08,17) 0.239439934492111E+00 -0.705337777438639E+01 +(08,18) -0.289920177310705E-01 -0.116989846863909E+02 +(08,19) 0.406377874314785E-01 0.592924574459365E-01 +(08,20) 0.131046742200851E+00 -0.301336277255331E+00 +(08,21) 0.136250451207161E+00 0.221249720574218E+01 +(09,01) -0.887189060449600E-02 0.408696880275784E+02 +(09,02) -0.451377010904253E-03 0.498549177991145E+02 +(09,03) -0.123341614380479E-01 0.283099915956156E+02 +(09,04) -0.489434518385679E-03 0.498508177346691E+02 +(09,05) 0.119013069197536E-01 0.288351506046625E+02 +(09,06) -0.825028307735920E-02 -0.408181390328127E+02 +(09,07) 0.120959408581257E+00 0.274581588439313E+01 +(09,08) 0.899301841855049E-01 0.442598366847707E+01 +(09,09) 0.183146566152573E+00 0.258341971052896E+01 +(09,10) -0.167249992489815E+00 -0.343796285403762E+01 +(09,11) 0.150660663843155E+00 -0.176879400649229E+01 +(09,12) 0.621877647936344E-01 0.220820305885640E+01 +(09,13) 0.775983557105064E-01 -0.388855121748206E+01 +(09,14) -0.421430803835392E-01 0.313381413329812E+01 +(09,15) -0.270811710506678E-01 -0.180792375354553E+01 +(09,16) 0.361108258366585E-01 0.773423930388479E+00 +(09,17) 0.712988025043160E-03 -0.124926313426792E+01 +(09,18) 0.177535593509674E+00 -0.149560597825620E+01 +(09,19) 0.527953356504440E-01 0.612080363385255E+00 +(09,20) 0.141406338661909E-01 0.160255194437205E+01 +(09,21) -0.784571282565594E-02 0.260363897304434E+00 +(10,01) 0.852987250254955E-05 0.301411990266088E+03 +(10,02) 0.136617054522503E-04 0.368201194080180E+03 +(10,03) 0.202008941414533E-04 0.207873209289172E+03 +(10,04) 0.554962934984360E-05 0.367592383804457E+03 +(10,05) -0.211104361369507E-04 0.212546863836424E+03 +(10,06) 0.204913503694115E-04 -0.300694117440840E+03 +(10,07) 0.147012909874320E-01 0.516692929993857E+01 +(10,08) -0.299783907830715E-01 0.478244480753043E+01 +(10,09) 0.106510026380420E-01 0.190200983103669E+01 +(10,10) 0.321145392954350E-01 0.479668913780619E+01 +(10,11) -0.327010415494442E-01 -0.406712268774822E+01 +(10,12) 0.469501204788685E-01 -0.129331403067363E+02 +(10,13) -0.509594380855560E-01 -0.101318538315566E+02 +(10,14) -0.599967837333679E-01 -0.435269015938419E+01 +(10,15) -0.323531590402126E-01 0.642934255142023E+01 +(10,16) -0.460793916136026E-02 0.455735933529251E+00 +(10,17) -0.224983040243387E-01 -0.346483670488126E+01 +(10,18) 0.588687174022198E-01 0.108965933547002E+02 +(10,19) -0.269168405793607E-02 0.146020551701604E+01 +(10,20) 0.760632846504450E-02 0.935891778893215E+01 +(10,21) -0.926463399082422E-02 -0.109012901159488E+01 +(11,01) -0.162329792510718E-02 -0.439722468868773E+02 +(11,02) -0.155836262274534E-02 -0.536247043860828E+02 +(11,03) -0.135748169850558E-02 -0.303963712026272E+02 +(11,04) -0.150117883458734E-02 -0.528578708468503E+02 +(11,05) -0.450650841230527E-03 -0.306542964087078E+02 +(11,06) 0.917027471587062E-03 0.432088828086063E+02 +(11,07) 0.112307444214821E+00 0.284895856343348E+01 +(11,08) 0.859148427844048E-01 0.612570733710553E+01 +(11,09) 0.108720205724239E+00 0.319395569891390E+01 +(11,10) -0.932282283902168E-01 -0.756710064416565E+01 +(11,11) 0.284656975418329E-01 -0.555260155688967E+01 +(11,12) -0.560129657387733E-01 0.729138222067640E+01 +(11,13) -0.110948169603944E-01 -0.982617231657246E+01 +(11,14) -0.682298317551613E-01 0.839812251519917E+01 +(11,15) 0.883226171135902E-01 -0.269194027969023E+01 +(11,16) -0.131774798035622E+00 -0.226683480127203E+01 +(11,17) -0.403642915189266E-01 -0.641562127865956E+01 +(11,18) 0.920902267098427E-01 -0.680007273581139E+01 +(11,19) -0.128290548920631E+00 -0.197494901501065E+01 +(11,20) -0.114749923348427E+00 -0.173653424919703E+00 +(11,21) -0.100844800472260E+00 0.163116606552273E+01 +(12,01) -0.122732308227569E-03 -0.152518665905767E+03 +(12,02) 0.161253090482205E-03 -0.186570947710702E+03 +(12,03) -0.120117227197625E-03 -0.106601315763174E+03 +(12,04) 0.204894982744008E-03 -0.187054534721548E+03 +(12,05) -0.675647606840357E-04 -0.108517073248987E+03 +(12,06) 0.143623954500072E-03 0.153127156022849E+03 +(12,07) 0.312066711485386E-01 -0.123830418453637E+02 +(12,08) -0.353118106722832E-01 -0.304682312306106E+02 +(12,09) 0.467785857617855E-01 -0.686119827740334E+01 +(12,10) 0.669700726866722E-01 0.285727839324843E+02 +(12,11) 0.159731749445200E-01 0.272695375357948E+02 +(12,12) 0.522553734481335E-01 -0.145329020460164E+02 +(12,13) -0.301160980015993E-01 0.394519469582405E+02 +(12,14) -0.422964245080948E-01 -0.262032227418349E+02 +(12,15) -0.366332642734051E-01 0.440123540181984E+01 +(12,16) 0.137751828879118E-01 -0.480152374806063E+01 +(12,17) -0.348058715462685E-01 0.206844374870974E+02 +(12,18) 0.687717227265239E-02 0.176681540870106E+02 +(12,19) 0.186093822121620E-01 -0.322685179905062E+01 +(12,20) -0.138963768258691E-01 -0.693072145710399E+01 +(12,21) 0.271552260965109E-01 -0.299148354256703E+01 +(13,01) -0.116050858050585E-01 -0.974433821352575E+02 +(13,02) 0.380535630029044E-05 -0.118894186687256E+03 +(13,03) 0.164038110524416E-01 -0.678145724931819E+02 +(13,04) -0.270099262706935E-04 -0.120113847111271E+03 +(13,05) 0.164625588804483E-01 -0.697800218501777E+02 +(13,06) 0.116816693916917E-01 0.982709046226804E+02 +(13,07) 0.839531794190407E-01 0.183794147361240E+01 +(13,08) -0.290049593895674E-01 -0.211184933123850E+01 +(13,09) -0.165680781006813E+00 -0.341701670805002E+01 +(13,10) -0.581433475017548E-01 -0.617525955449609E+00 +(13,11) 0.208601281046867E+00 -0.107290136247085E+01 +(13,12) 0.179246842861176E+00 0.576311903496641E+01 +(13,13) -0.210931494832039E+00 0.348525089218890E+01 +(13,14) 0.144276302307844E-01 -0.182340900435565E+01 +(13,15) 0.231533348560333E+00 -0.196481152900671E+01 +(13,16) -0.211453773081303E-01 0.515398790870046E+01 +(13,17) 0.206030920147896E+00 0.612830413789551E+01 +(13,18) 0.661853179335594E-01 -0.330426561798086E+01 +(13,19) 0.334390364587307E-01 0.266628566506736E+01 +(13,20) 0.252219894900918E-02 -0.631641611962441E+01 +(13,21) 0.526576638221741E-01 -0.833732776936585E+01 +(14,01) -0.437273271381855E-02 -0.359695109817143E+02 +(14,02) -0.462692696601152E-02 -0.441431137577791E+02 +(14,03) -0.348892970941961E-02 -0.256068810893284E+02 +(14,04) -0.462776422500610E-02 -0.442923373719554E+02 +(14,05) -0.185345404315740E-02 -0.255716486578541E+02 +(14,06) 0.320841209031641E-02 0.361682912515179E+02 +(14,07) 0.167358413338661E+00 -0.106016872374744E+01 +(14,08) 0.120894066989422E+00 -0.188238211287414E+01 +(14,09) 0.146612733602524E+00 -0.994102032235108E+00 +(14,10) -0.114104241132736E+00 0.223591971782469E+01 +(14,11) 0.352907255291939E-01 0.159655429090737E+01 +(14,12) -0.118334278464317E+00 -0.205361173619823E+01 +(14,13) -0.409047538414598E-02 0.264356759617923E+01 +(14,14) -0.129458680748940E+00 -0.219743789511244E+01 +(14,15) 0.150047942996025E+00 0.750051299535086E+00 +(14,16) 0.104290992021561E+00 0.595419527031237E+00 +(14,17) -0.437837503850460E-01 0.164954543747536E+01 +(14,18) 0.142482638359070E+00 0.187932831454260E+01 +(14,19) 0.945448875427246E-01 0.525623994704737E+00 +(14,20) 0.911889076232910E-01 0.178475542825685E+00 +(14,21) 0.619743093848228E-01 -0.364538154174523E+00 +(15,01) -0.218217610381544E-02 -0.310917736032053E+01 +(15,02) -0.264662108384073E-02 -0.377923704249770E+01 +(15,03) 0.152970384806395E-02 -0.184422147463024E+01 +(15,04) 0.263672322034836E-02 -0.324061827036610E+01 +(15,05) -0.152716226875782E-02 -0.209529573424705E+01 +(15,06) -0.216715293936431E-02 0.269519062926751E+01 +(15,07) 0.769277736544609E-01 0.508196426964923E+00 +(15,08) 0.140253871679306E+00 0.117105367866777E+01 +(15,09) -0.757992193102837E-01 -0.908058618311773E-01 +(15,10) 0.182921692728996E+00 0.164352591385766E+00 +(15,11) -0.116774775087833E+00 -0.788766372658534E+00 +(15,12) 0.197751015424728E+00 0.116885552810645E+01 +(15,13) 0.239971160888672E+00 -0.215046535598994E+00 +(15,14) 0.236179351806641E+00 0.144881662476397E+01 +(15,15) 0.138329446315765E+00 0.178339724976908E+00 +(15,16) -0.386442616581917E-02 -0.116071749607031E+00 +(15,17) -0.119596652686596E+00 -0.909498295398762E+00 +(15,18) 0.228947326540947E+00 0.610646926717143E-01 +(15,19) 0.306998658925295E-02 -0.153530058087171E+00 +(15,20) -0.562079949304461E-02 0.286291057924642E+00 +(15,21) -0.900598522275686E-02 0.297948743912008E+00 +(16,01) -0.428344011306763E-01 -0.149205064262646E+02 +(16,02) -0.119414471555501E-03 -0.182142441709329E+02 +(16,03) 0.605285130441189E-01 -0.974811729836851E+01 +(16,04) 0.105399143649265E-03 -0.174196586571617E+02 +(16,05) 0.603122040629387E-01 -0.983403637118013E+01 +(16,06) 0.425829663872719E-01 0.148648771225544E+02 +(16,07) 0.147546008229256E+00 -0.335646648007986E+00 +(16,08) 0.401769354939461E-01 0.201470033855699E+01 +(16,09) -0.189309567213058E+00 0.104369831287472E+01 +(16,10) 0.683742910623550E-01 -0.121294114124208E+01 +(16,11) 0.125439286231995E+00 -0.829328960956144E+00 +(16,12) -0.422803349792957E-01 0.689052934581414E+00 +(16,13) -0.458180941641331E-01 -0.383226269716630E+01 +(16,14) -0.296942126005888E-01 0.373098537300082E+01 +(16,15) -0.109751708805561E+00 -0.170586149813142E+01 +(16,16) -0.193516850471497E+00 -0.193030177533155E+01 +(16,17) -0.665694326162338E-01 -0.168714597279047E+01 +(16,18) -0.817999318242073E-01 -0.547045141065854E+00 +(16,19) 0.279022544622421E+00 0.178195066309647E+01 +(16,20) -0.160081461071968E-01 0.313524660082812E+00 +(16,21) 0.335453636944294E-01 0.541301151089991E+00 +(17,01) -0.921052098274231E+00 -0.313781087163451E+02 +(17,02) 0.112806463241577E+01 -0.378487347233482E+02 +(17,03) -0.651386320590973E+00 -0.214243947749121E+02 +(17,04) 0.112832391262054E+01 -0.376461131371173E+02 +(17,05) -0.651349246501923E+00 -0.219732301247688E+02 +(17,06) 0.921293020248413E+00 0.311686483844811E+02 +(17,07) -0.129972562193871E+00 0.126800002733523E+01 +(17,08) 0.182197511196136E+00 0.365548308626798E+01 +(17,09) -0.253000296652317E-02 0.103660756397868E+01 +(17,10) -0.357133313082159E-02 -0.498166767375460E+01 +(17,11) 0.184675022959709E+00 -0.400092670381805E+01 +(17,12) 0.551109127700329E-01 0.531406946549384E+01 +(17,13) 0.231322161853313E-01 -0.514788968725777E+01 +(17,14) -0.134687021374702E+00 0.447991231100838E+01 +(17,15) -0.352683709934354E-02 -0.223730164941427E+01 +(17,16) 0.955944135785103E-01 0.638760991508856E+00 +(17,17) -0.204981788992882E+00 -0.302527057763186E+01 +(17,18) -0.310501866042614E-01 -0.441444840698545E+01 +(17,19) 0.732915475964546E-01 0.213306065587418E+00 +(17,20) -0.121698610484600E+00 -0.520607531935427E+00 +(17,21) 0.487866103649139E-01 0.730688376616387E+00 +(18,01) 0.845294289320009E-05 0.369665247269374E+03 +(18,02) 0.200470458366908E-04 0.451735937919445E+03 +(18,03) -0.500704288697307E-06 0.258293555787007E+03 +(18,04) -0.117598438009736E-04 0.455925831388285E+03 +(18,05) 0.122016963359783E-04 0.265784280467111E+03 +(18,06) 0.177297315531177E-04 -0.372418765344440E+03 +(18,07) 0.166253838688135E-01 -0.225545830162084E+01 +(18,08) -0.616515334695578E-02 0.124672280645443E+02 +(18,09) -0.348300337791443E-01 0.112465777171278E+02 +(18,10) -0.131978942081332E-01 -0.945248700625405E+00 +(18,11) 0.483418852090836E-01 0.332314552507453E+01 +(18,12) 0.501377508044243E-01 -0.139535378216261E+02 +(18,13) -0.548814050853252E-01 -0.195743707104671E+02 +(18,14) -0.183727266266942E-02 0.870092400349449E+01 +(18,15) 0.718188360333443E-01 0.100152523582761E+02 +(18,16) -0.103118065744638E-01 -0.171444008663923E+02 +(18,17) 0.654948502779007E-01 -0.218953533683405E+02 +(18,18) 0.109703140333295E-01 0.713189479375495E+01 +(18,19) 0.177329909056425E-01 -0.119032365190316E+02 +(18,20) 0.323858810588717E-02 0.251995942921836E+02 +(18,21) 0.499825514853001E-01 0.312135303090508E+02 +(19,01) -0.682211592793465E-01 0.765967706327448E+01 +(19,02) -0.430850574048236E-03 0.877594356269220E+01 +(19,03) 0.962435081601143E-01 0.415620530045576E+01 +(19,04) 0.422304205130786E-03 0.850982221207004E+01 +(19,05) 0.957677885890007E-01 0.445399360802617E+01 +(19,06) 0.675818175077438E-01 -0.745326318445295E+01 +(19,07) 0.202333241701126E+00 0.370654267814242E+01 +(19,08) 0.746065378189087E-01 0.561632690325829E+01 +(19,09) -0.223254755139351E+00 0.100203495234038E+01 +(19,10) 0.119545228779316E+00 -0.408091666676030E+01 +(19,11) 0.991457328200340E-01 -0.360166368714016E+01 +(19,12) -0.162345185875893E+00 0.392121124117465E+01 +(19,13) 0.185034181922674E-01 -0.644936945503097E+01 +(19,14) -0.627368614077568E-01 0.453191069282601E+01 +(19,15) -0.280645161867142E+00 -0.207986659450949E+01 +(19,16) 0.505855195224285E-01 0.914629091127449E+00 +(19,17) -0.182546600699425E+00 -0.370670813302335E+01 +(19,18) -0.147651746869087E+00 -0.476882671010381E+01 +(19,19) -0.701333060860634E-01 -0.148427101363476E+01 +(19,20) 0.668072421103716E-02 0.220237913196195E+01 +(19,21) 0.869733467698097E-02 0.117938679293896E+01 +(20,01) -0.449361046776175E-02 0.902376000084666E+00 +(20,02) 0.220308941788971E-02 -0.801193767960690E+00 +(20,03) 0.513966614380479E-02 -0.307272834790146E+01 +(20,04) -0.225867680273950E-02 -0.110857606565975E+01 +(20,05) 0.263794837519526E-02 -0.320007272165156E+01 +(20,06) 0.947628752328455E-03 -0.121510907580541E+01 +(20,07) 0.152274832129478E+00 -0.703746631901387E-01 +(20,08) -0.117567442357540E+00 -0.221727238903005E+01 +(20,09) -0.206277355551720E+00 -0.190035138613005E+01 +(20,10) -0.207551613450050E+00 0.118705706035607E+01 +(20,11) 0.124761372804642E+00 0.218395870949059E+01 +(20,12) 0.863072555512190E-02 -0.225848673886085E+01 +(20,13) -0.714888703078032E-02 0.183569641575782E+01 +(20,14) 0.456247404217720E-01 -0.103488813996630E+01 +(20,15) -0.708496421575546E-01 -0.190399084333949E+00 +(20,16) 0.107937427237630E-01 -0.149848769988273E+00 +(20,17) -0.103561900556087E+00 0.263149954374569E+00 +(20,18) 0.195673510432243E+00 0.226312056314707E+01 +(20,19) -0.138991530984640E-01 -0.215379472713573E+00 +(20,20) -0.738288741558790E-02 -0.717177684354636E+00 +(20,21) 0.119809703901410E-01 0.395015106415659E+00 +(21,01) -0.111714076995850E+01 -0.157006272972466E+01 +(21,02) 0.136832118034363E+01 -0.165695410559176E+01 +(21,03) 0.789960503578186E+00 -0.102464959222303E+01 +(21,04) -0.136850726604462E+01 -0.197490477262258E+01 +(21,05) -0.790138483047485E+00 -0.123963009795365E+01 +(21,06) -0.111746346950531E+01 0.127940329351346E+01 +(21,07) -0.158849164843559E+00 -0.115726516828563E-01 +(21,08) 0.157852247357368E+00 0.278837130191972E+00 +(21,09) 0.170709997415543E+00 0.100161817596371E+00 +(21,10) 0.214689865708351E+00 -0.726523579353106E-01 +(21,11) -0.167143829166889E-01 -0.678547976954667E-01 +(21,12) -0.241510886698961E-01 0.377502144275716E-01 +(21,13) -0.105082295835018E+00 -0.447407742013355E+00 +(21,14) 0.101131219416857E-01 0.419175912148910E+00 +(21,15) 0.525299832224846E-01 -0.233384037060628E+00 +(21,16) -0.143686249852180E+00 -0.418753822037995E-02 +(21,17) 0.132168933749199E+00 -0.856999606537821E-01 +(21,18) -0.693865939974785E-01 -0.714580334063162E-02 +(21,19) 0.104032047092915E+00 -0.161645225161624E-01 +(21,20) 0.185707733035088E+00 -0.856160510487734E-02 +(21,21) -0.296475943177938E-01 0.957054267749156E-01 +#COL_UPDATE_INDEX: 12 +#COL_UPDATE_COMP_(01): 0.102125488221645E+00 +#COL_UPDATE_COMP_(02): 0.962643101811409E-01 +#COL_UPDATE_COMP_(03): -0.180085301399231E-01 +#COL_UPDATE_COMP_(04): -0.116052091121674E+00 +#COL_UPDATE_COMP_(05): 0.100100971758366E-01 +#COL_UPDATE_COMP_(06): 0.168905649334192E-01 +#COL_UPDATE_COMP_(07): -0.168554261326790E-01 +#COL_UPDATE_COMP_(08): 0.334977582097054E-01 +#COL_UPDATE_COMP_(09): 0.775983557105064E-01 +#COL_UPDATE_COMP_(10): -0.509594380855560E-01 +#COL_UPDATE_COMP_(11): -0.110948169603944E-01 +#COL_UPDATE_COMP_(12): -0.301160980015993E-01 +#COL_UPDATE_COMP_(13): -0.210931494832039E+00 +#COL_UPDATE_COMP_(14): -0.409047538414598E-02 +#COL_UPDATE_COMP_(15): 0.239971160888672E+00 +#COL_UPDATE_COMP_(16): -0.458180941641331E-01 +#COL_UPDATE_COMP_(17): 0.231322161853313E-01 +#COL_UPDATE_COMP_(18): -0.548814050853252E-01 +#COL_UPDATE_COMP_(19): 0.185034181922674E-01 +#COL_UPDATE_COMP_(20): -0.714888703078032E-02 +#COL_UPDATE_COMP_(21): -0.105082295835018E+00 +#COL_UPDATE_INDEX: 13 +#COL_UPDATE_COMP_(01): -0.727039668709040E-02 +#COL_UPDATE_COMP_(02): -0.329451821744442E-01 +#COL_UPDATE_COMP_(03): 0.230633586645126E+00 +#COL_UPDATE_COMP_(04): 0.322856456041336E-01 +#COL_UPDATE_COMP_(05): 0.188164815306664E+00 +#COL_UPDATE_COMP_(06): 0.976034477353096E-01 +#COL_UPDATE_COMP_(07): 0.124376058578491E+00 +#COL_UPDATE_COMP_(08): -0.241902604699135E+00 +#COL_UPDATE_COMP_(09): -0.214029267430305E+00 +#COL_UPDATE_COMP_(10): -0.164923388510942E-01 +#COL_UPDATE_COMP_(11): -0.796175077557564E-01 +#COL_UPDATE_COMP_(12): 0.552074126899242E-01 +#COL_UPDATE_COMP_(13): 0.794003605842590E-01 +#COL_UPDATE_COMP_(14): -0.999749153852463E-01 +#COL_UPDATE_COMP_(15): 0.135955372825265E-01 +#COL_UPDATE_COMP_(16): -0.876737236976624E-01 +#COL_UPDATE_COMP_(17): 0.210409909486771E+00 +#COL_UPDATE_COMP_(18): 0.177621953189373E-01 +#COL_UPDATE_COMP_(19): -0.151124328374863E+00 +#COL_UPDATE_COMP_(20): 0.247122272849083E+00 +#COL_UPDATE_COMP_(21): -0.161797225475311E+00 +#COL_UPDATE_INDEX: 21 +#COL_UPDATE_COMP_(01): -0.817385390400887E-01 +#COL_UPDATE_COMP_(02): 0.108162150718272E-02 +#COL_UPDATE_COMP_(03): 0.693925749510527E-02 +#COL_UPDATE_COMP_(04): 0.493063451722264E-02 +#COL_UPDATE_COMP_(05): -0.334013439714909E-01 +#COL_UPDATE_COMP_(06): 0.323923602700233E-01 +#COL_UPDATE_COMP_(07): 0.120032556355000E+00 +#COL_UPDATE_COMP_(08): -0.119067849591374E-01 +#COL_UPDATE_COMP_(09): -0.334841385483742E-01 +#COL_UPDATE_COMP_(10): 0.125436363741755E-01 +#COL_UPDATE_COMP_(11): -0.145120620727539E+00 +#COL_UPDATE_COMP_(12): -0.101416520774364E-01 +#COL_UPDATE_COMP_(13): -0.723919421434402E-01 +#COL_UPDATE_COMP_(14): 0.134314149618149E+00 +#COL_UPDATE_COMP_(15): -0.125767393037677E-01 +#COL_UPDATE_COMP_(16): 0.361425074515864E-03 +#COL_UPDATE_COMP_(17): -0.351854860782623E-01 +#COL_UPDATE_COMP_(18): -0.506495498120785E-01 +#COL_UPDATE_COMP_(19): -0.291761625558138E-01 +#COL_UPDATE_COMP_(20): -0.932136957999319E-03 +#COL_UPDATE_COMP_(21): -0.500183776021004E-01 +#END_PACKET + +#START_PACKET +#CYCLE_ID: 8169 +#SLATER_MATRIX_DIM: 4 +#NUPDATES: 2 +#SLATER_MATRIX: (i (outer), j (inner)), slater_matrix_alpha(i,j), ddet * slater_matrix_alpha_inv_det(i,j) / ddet +(01,01) 0.100000000000000E+01 0.100000000000000E+01 +(01,02) 0.000000000000000E+00 0.100000000000000E+01 +(01,03) 0.100000000000000E+01 -0.100000000000000E+01 +(01,04) -0.100000000000000E+01 -0.100000000000000E+01 +(02,01) 0.000000000000000E+00 -0.100000000000000E+01 +(02,02) 0.100000000000000E+01 0.000000000000000E+00 +(02,03) 0.100000000000000E+01 0.100000000000000E+01 +(02,04) 0.000000000000000E+00 0.000000000000000E+00 +(03,01) -0.100000000000000E+01 0.100000000000000E+01 +(03,02) 0.000000000000000E+00 0.200000000000000E+01 +(03,03) -0.100000000000000E+01 -0.200000000000000E+01 +(03,04) 0.000000000000000E+00 -0.100000000000000E+01 +(04,01) 0.100000000000000E+01 0.100000000000000E+01 +(04,02) 0.100000000000000E+01 0.100000000000000E+01 +(04,03) 0.100000000000000E+01 -0.100000000000000E+01 +(04,04) 0.100000000000000E+01 0.000000000000000E+00 +#COL_UPDATE_INDEX: 2 +#COL_UPDATE_COMP_(01): 0.000000000000000E+00 +#COL_UPDATE_COMP_(02): -0.200000000000000E+01 +#COL_UPDATE_COMP_(03): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#COL_UPDATE_INDEX: 4 +#COL_UPDATE_COMP_(01): 0.000000000000000E+00 +#COL_UPDATE_COMP_(02): -0.100000000000000E+01 +#COL_UPDATE_COMP_(03): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#END_PACKET diff --git a/datasets/datasets.small.hdf5 b/datasets/datasets.small.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..2c0ba2e104a6345d80789f2f66e9cc4fd25c4cf8 GIT binary patch literal 30583 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 G;Qs(aZ=8|< literal 0 HcmV?d00001 diff --git a/datasets/update_cycle_8169.dat b/datasets/update_cycle_8169.dat new file mode 100644 index 0000000..da61bcd --- /dev/null +++ b/datasets/update_cycle_8169.dat @@ -0,0 +1,32 @@ +#START_PACKET +#CYCLE_ID: 8169 +#SLATER_MATRIX_DIM: 4 +#NUPDATES: 2 +#SLATER_MATRIX: (i (outer), j (inner)), slater_matrix_alpha(i,j), ddet * slater_matrix_alpha_inv_det(i,j) / ddet +(01,01) 0.100000000000000E+01 0.100000000000000E+01 +(01,02) 0.000000000000000E+00 0.100000000000000E+01 +(01,03) 0.100000000000000E+01 -0.100000000000000E+01 +(01,04) -0.100000000000000E+01 -0.100000000000000E+01 +(02,01) 0.000000000000000E+00 -0.100000000000000E+01 +(02,02) 0.100000000000000E+01 0.000000000000000E+00 +(02,03) 0.100000000000000E+01 0.100000000000000E+01 +(02,04) 0.000000000000000E+00 0.000000000000000E+00 +(03,01) -0.100000000000000E+01 0.100000000000000E+01 +(03,02) 0.000000000000000E+00 0.200000000000000E+01 +(03,03) -0.100000000000000E+01 -0.200000000000000E+01 +(03,04) 0.000000000000000E+00 -0.100000000000000E+01 +(04,01) 0.100000000000000E+01 0.100000000000000E+01 +(04,02) 0.100000000000000E+01 0.100000000000000E+01 +(04,03) 0.100000000000000E+01 -0.100000000000000E+01 +(04,04) 0.100000000000000E+01 0.000000000000000E+00 +#COL_UPDATE_INDEX: 2 +#COL_UPDATE_COMP_(01): 0.000000000000000E+00 +#COL_UPDATE_COMP_(02): -0.200000000000000E+01 +#COL_UPDATE_COMP_(03): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#COL_UPDATE_INDEX: 4 +#COL_UPDATE_COMP_(01): 0.000000000000000E+00 +#COL_UPDATE_COMP_(02): -0.100000000000000E+01 +#COL_UPDATE_COMP_(03): 0.000000000000000E+00 +#COL_UPDATE_COMP_(04): 0.000000000000000E+00 +#END_PACKET diff --git a/fMaponiA3_test_3x3_3.f90 b/fMaponiA3_test_3x3_3.f90 index f63d88a..bbc921c 100644 --- a/fMaponiA3_test_3x3_3.f90 +++ b/fMaponiA3_test_3x3_3.f90 @@ -1,6 +1,5 @@ program Interface_test - use Sherman_Morrison, only : MaponiA3 - use, intrinsic :: iso_c_binding, only : c_int, c_double + use Sherman_Morrison implicit none integer i, j !! Iterators @@ -24,6 +23,14 @@ program Interface_test A(3,2) = 0.0d0 A(3,3) = -1.0d0 + do i=1,Dim + do j=1,Dim + write(*,"(F3.0,3X)", advance="no") A(i,j) + end do + write(*,*) + end do + write(*,*) + !! Prepare the diagonal matrix S and the update matrix Updates do i=1,Dim Updates_index(i) = i diff --git a/fMaponiA3_test_4x4_2.f90 b/fMaponiA3_test_4x4_2.f90 index 2ca2350..863b87b 100644 --- a/fMaponiA3_test_4x4_2.f90 +++ b/fMaponiA3_test_4x4_2.f90 @@ -1,17 +1,17 @@ program Interface_test - use Sherman_Morrison, only : MaponiA3 - use, intrinsic :: iso_c_binding, only : c_int, c_double + use Sherman_Morrison + use Helpers implicit none integer i, j, col !! Iterators integer(c_int) :: Dim, N_updates integer(c_int), dimension(:), allocatable :: Updates_index real(c_double), dimension(:,:), allocatable :: S, A, Updates - real(c_double), dimension(:,:), allocatable :: S_inv, A_inv + real(c_double), dimension(:,:), allocatable :: S_inv, S_inv_t, A_inv Dim = 4 N_updates = 2 - allocate( S(Dim,Dim), S_inv(Dim,Dim), A(Dim,Dim), A_inv(Dim,Dim), & + allocate( S(Dim,Dim), S_inv(Dim,Dim), S_inv_t(Dim,Dim), A(Dim,Dim), A_inv(Dim,Dim), & Updates(Dim,N_updates), Updates_index(N_updates)) !! Initialize S, S_inv, A and A_inv @@ -110,6 +110,16 @@ program Interface_test close(2000) close(3000) + !! Write Updates to file to check + open(unit = 2000, file = "Updates.dat") + do i=1,dim + do j=1,n_updates + write(2000,"(E23.15, 1X)", advance="no") Updates(i,j) + end do + write(2000,*) + end do + close(2000) + !! Update S do i=1,N_updates do j=1,Dim @@ -119,7 +129,9 @@ program Interface_test end do !! Update S_inv - call MaponiA3(S_inv, Dim, N_updates, Updates, Updates_index) + call Transpose(S_inv, S_inv_t, Dim) + call MaponiA3(S_inv_t, Dim, N_updates, Updates, Updates_index) + call Transpose(S_inv_t, S_inv, Dim) !! Write new S and S_inv to file for check in Octave open(unit = 4000, file = "Slater.dat") diff --git a/tests/convert-to-h5.py b/tests/convert-to-h5.py index e3dcaf9..72a1173 100644 --- a/tests/convert-to-h5.py +++ b/tests/convert-to-h5.py @@ -7,7 +7,7 @@ def rl(rf): with h5py.File('datasets.hdf5', 'w') as f: - with open('datasets.dat', 'r') as rf: + with open('datasets.short.dat', 'r') as rf: while(1): line = rl(rf) if not line or not line.startswith('#START_PACKET'): diff --git a/tests/test.cpp b/tests/test.cpp index 8e31c09..199bdef 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -9,7 +9,7 @@ using namespace H5; #define DEBUG 1 -const H5std_string FILE_NAME( "datasets.hdf5" ); +const H5std_string FILE_NAME( "datasets.small.hdf5" ); void read_int(H5File file, std::string key, unsigned int * data) { DataSet ds = file.openDataSet(key); @@ -29,7 +29,7 @@ int test_cycle(H5File file, int cycle) { std::string group = "cycle_" + std::to_string(cycle); - unsigned int dim, nupdates; + unsigned int dim, nupdates, col, i, j; read_int(file, group + "/slater_matrix_dim", &dim); read_int(file, group + "/nupdates", &nupdates); @@ -38,6 +38,7 @@ int test_cycle(H5File file, int cycle) { double * slater_inverse = new double[dim*dim]; read_double(file, group + "/slater_inverse", slater_inverse); + slater_inverse = transpose(slater_inverse, dim); unsigned int * col_update_index = new unsigned int[nupdates]; read_int(file, group + "/col_update_index", col_update_index); @@ -50,13 +51,28 @@ int test_cycle(H5File file, int cycle) { showMatrix(slater_matrix, dim, "Slater"); #endif +#ifdef DEBUG + showMatrix(slater_inverse, dim, "Inverse"); +#endif + + for (j = 0; j < nupdates; j++) { + for (i = 0; i < dim; i++) { + col = col_update_index[j]; + slater_matrix[i*dim + (col - 1)] += updates[i + j*dim]; + } + } + MaponiA3(slater_inverse, dim, nupdates, updates, col_update_index); +#ifdef DEBUG + showMatrix(slater_matrix, dim, "Slater"); +#endif + #ifdef DEBUG showMatrix(slater_inverse, dim, "Inverse"); #endif - double * res = matMul(slater_matrix, slater_inverse, dim); + double * res = matMul2(slater_matrix, slater_inverse, dim); bool ok = is_identity(res, dim, 1.0e-8); #ifdef DEBUG @@ -80,7 +96,8 @@ int main(int argc, char **argv) { if (ok) { std::cerr << "ok -- cycle " << std::to_string(cycle) << std::endl; - } else { + } + else { std::cerr << "failed -- cycle " << std::to_string(cycle) << std::endl; } return ok; From 3df8d33bfabe8dcb59784d20971ccbbaca7bdcd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Coppens?= Date: Thu, 25 Feb 2021 12:17:45 +0100 Subject: [PATCH 4/4] Problems with MaponiA3 when calling from C++ with HDF5 datasets is fixed. Bug was caused by uninitialised values of NEWed variables at several places. There are still a few remaining memory leaks. Explore with: valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all --- Helpers.hpp | 22 ++++------------------ QMCChem_dataset_test.f90 | 2 +- SM_MaponiA3.cpp | 30 ++++++++++++++++++------------ tests/test.cpp | 21 ++++++++++++--------- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/Helpers.hpp b/Helpers.hpp index 7bc5efd..6dab844 100644 --- a/Helpers.hpp +++ b/Helpers.hpp @@ -7,9 +7,9 @@ using namespace std; template unsigned int getMaxIndex(T *vector, unsigned int size) { - unsigned int i; - unsigned int max = vector[0]; - unsigned int maxi = 0; + unsigned int i = 0; + unsigned int maxi = i; + unsigned int max = vector[maxi]; for (i = 1; i < size; i++) { if (vector[i] > max) { max = vector[i]; @@ -64,7 +64,7 @@ T *transpose(T *A, unsigned int M) { template T *matMul(T *A, T *B, unsigned int M) { - T *C = new T[M*M]; + T *C = new T[M*M] {0}; for (unsigned int i = 0; i < M; i++) { for (unsigned int j = 0; j < M; j++) { for (unsigned int k = 0; k < M; k++) { @@ -75,20 +75,6 @@ T *matMul(T *A, T *B, unsigned int M) { return C; } -template -T *matMul2(T *A, T *B, unsigned int M) { - T *C = new T[M*M]; - for (unsigned int i = 0; i < M; i++) { - for (unsigned int j = 0; j < M; j++) { - for (unsigned int k = 0; k < M; k++) { - C[i*M+j] += A[i*M+k] * B[k*M+j]; - } - } - } - showMatrix(C,M,"C"); - return C; -} - template T1 *outProd(T1 *vec1, T2 *vec2, unsigned int M) { T1 *C = new T1[M*M]; diff --git a/QMCChem_dataset_test.f90 b/QMCChem_dataset_test.f90 index 508c0f3..e4c4986 100644 --- a/QMCChem_dataset_test.f90 +++ b/QMCChem_dataset_test.f90 @@ -9,7 +9,7 @@ program QMCChem_dataset_test real(c_double), dimension(:,:), allocatable :: Updates real(c_double), dimension(:,:), allocatable :: S, S_inv, S_inv_t - call Read_dataset("datasets/update_cycle_8169.dat", & + call Read_dataset("datasets/update_cycle_13.dat", & cycle_id, & dim, & n_updates, & diff --git a/SM_MaponiA3.cpp b/SM_MaponiA3.cpp index 187ed65..6a1e6e7 100644 --- a/SM_MaponiA3.cpp +++ b/SM_MaponiA3.cpp @@ -4,15 +4,17 @@ #include "SM_MaponiA3.hpp" #include "Helpers.hpp" -void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, - double *Updates, unsigned int *Updates_index) { +void MaponiA3(double *Slater_inv, unsigned int Dim, + unsigned int N_updates, double *Updates, + unsigned int *Updates_index) { unsigned int k, l, lbar, i, j, tmp, component; - unsigned int *p = new unsigned int[N_updates + 1]; + unsigned int *p = new unsigned int[N_updates + 1] {0}; double alpha, beta; - double *breakdown = new double[N_updates + 1]; + double *breakdown = new double[N_updates + 1] {0}; double *Al = new double[Dim * Dim]; - p[0] = 0; + + // Populate update-order vector for (i = 0; i < N_updates; i++) { p[i + 1] = i + 1; } @@ -43,8 +45,8 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, breakdown[j] = abs(1 + ylk[l - 1][p[j]][component]); } lbar = getMaxIndex(breakdown, N_updates + 1); - // Reset breakdown back to 0 for next round to avoid case where its - // first element is always the largest + // Reset breakdown back to 0 for next round to avoid case where + // its first element is always the largest for (i = 0; i < N_updates + 1; i++) { breakdown[i] = 0; } @@ -60,14 +62,16 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, for (k = l + 1; k < N_updates + 1; k++) { alpha = ylk[l - 1][p[k]][component] / beta; for (i = 1; i < Dim + 1; i++) { - ylk[l][p[k]][i] = ylk[l - 1][p[k]][i] - alpha * ylk[l - 1][p[l]][i]; + ylk[l][p[k]][i] = ylk[l - 1][p[k]][i] + - alpha * ylk[l - 1][p[l]][i]; } } } // Keep the memory location of the passed array 'Slater_inv' before - // 'Slater_inv' gets reassigned by 'matMul(...)' in the next line, by creating - // a new pointer 'copy' that points to whereever 'Slater_inv' points to now. + // 'Slater_inv' gets reassigned by 'matMul(...)' in the next line, + // by creating a new pointer 'copy' that points to whereever + // 'Slater_inv' points to now. double *copy = Slater_inv; // Construct A-inverse from A0-inverse and the ylk @@ -77,13 +81,15 @@ void MaponiA3(double *Slater_inv, unsigned int Dim, unsigned int N_updates, beta = 1 + ylk[l][p[k]][component]; for (i = 0; i < Dim; i++) { for (j = 0; j < Dim; j++) { - Al[i * Dim + j] = (i == j) - (j == component - 1) * ylk[l][p[k]][i + 1] / beta; + Al[i*Dim + j] = (i == j) - (j == component-1) + * ylk[l][p[k]][i + 1] / beta; } } Slater_inv = matMul(Al, Slater_inv, Dim); } - // Assign the new values of 'Slater_inv' to the old values in 'copy[][]' + // Assign the new values of 'Slater_inv' to the old values + // in 'copy[][]' for (i = 0; i < Dim; i++) { for (j = 0; j < Dim; j++) { copy[i * Dim + j] = Slater_inv[i * Dim + j]; diff --git a/tests/test.cpp b/tests/test.cpp index 199bdef..01ae2b5 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -48,11 +48,11 @@ int test_cycle(H5File file, int cycle) { /* Test */ #ifdef DEBUG - showMatrix(slater_matrix, dim, "Slater"); + showMatrix(slater_matrix, dim, "OLD Slater"); #endif #ifdef DEBUG - showMatrix(slater_inverse, dim, "Inverse"); + showMatrix(slater_inverse, dim, "OLD Inverse"); #endif for (j = 0; j < nupdates; j++) { @@ -65,21 +65,22 @@ int test_cycle(H5File file, int cycle) { MaponiA3(slater_inverse, dim, nupdates, updates, col_update_index); #ifdef DEBUG - showMatrix(slater_matrix, dim, "Slater"); + showMatrix(slater_matrix, dim, "NEW Slater"); #endif #ifdef DEBUG - showMatrix(slater_inverse, dim, "Inverse"); + showMatrix(slater_inverse, dim, "NEW Inverse"); #endif - double * res = matMul2(slater_matrix, slater_inverse, dim); - bool ok = is_identity(res, dim, 1.0e-8); + double * res = matMul(slater_matrix, slater_inverse, dim); + bool ok = is_identity(res, dim, 0.5e-4); #ifdef DEBUG showMatrix(res, dim, "Result"); #endif - delete [] res, updates, col_update_index, slater_matrix, slater_inverse; + delete [] res, updates, col_update_index, + slater_matrix, slater_inverse; return ok; } @@ -95,10 +96,12 @@ int main(int argc, char **argv) { bool ok = test_cycle(file, cycle); if (ok) { - std::cerr << "ok -- cycle " << std::to_string(cycle) << std::endl; + std::cerr << "ok -- cycle " << std::to_string(cycle) + << std::endl; } else { - std::cerr << "failed -- cycle " << std::to_string(cycle) << std::endl; + std::cerr << "failed -- cycle " << std::to_string(cycle) + << std::endl; } return ok; }