Commit Graph

16 Commits

Author SHA1 Message Date
François Coppens
b2b4756b53 Problem solved. Problems was caused by reading the inverse matrix S_inv the same way as the matrix S, but apparently what has been stored is transpose(S_inv) and not S_inv. Therefore it needs to be read transposed compared to S in order to for S*S_inv to give the Identity matrix.
TODO: Calls from C/C++ are still broken because inside the MaponiA3 algo there is compensation for the fact that Fortran sends it's arrays in column-major order. This must be resolved by  transposeing S_inv before it is passed to MaponiA3 and remove the compensations made there.
2021-02-22 15:43:27 +01:00
François Coppens
8d63dd1701 The algorithm now works for the following 4x4 example with 2 updates:
S = [1,0,1,-1; 0,1,1,0; -1,0,-1,0; 1,1,1,1]
S_inv = [1,-1,1,1; 1,0,2,1; -1,1,-2,-1; -1,0,-1,0]
u1 = [0,-2,0,0]
u2 = [0,-1,0,0]
upd_idx = [2,4]

To go from Maponi's examples where the number of updates is always equal
to the the dimension of the matrix, and the decomposition is always
diagonal, to cases with a non-diagonal decomposition and a number of
updates unequal to its size, the following changed needed to be made:

* in the calculation of the {y0k} an extra inner for-loop needs to be
  added to make it a full matrix-vector multiplication due to the fact
  that A0 is not a diagonal matrix

* in some places the use of the update-order vector p needs
  the be replaced with that of upd_idx to make sure the correct
  component of the ylk is selected and the proper rank-1 matrices are
  constructed

* when a matrix is passed from Fortran to C++ with 2D adressing, it is
  passed in colum-major order. The passed matrix needs to be transposed
  before passing to C++. Doing this inside the algorithm will break
  compatibility with called from C/C++.
2021-02-22 15:41:30 +01:00
François
48c27eb47e * Modified Maponi algo 3 so that it can be used with a number of updates
that is smaller than the size of the Slater-matrix
* Removed the Slater-matrix as an argument, since it is not used in the
  algo.
* Added a manual 4x4 example to debug MaponiA3 to work with a number of
  updates that is smaller than the size of the Slater-matrix
* Added a new Octave script to quickly check if the computes inverse is
  correct.
2021-02-22 15:34:34 +01:00
Pablo Oliveira
061c9b9f21 Add test infrastructure for datasets 2021-02-16 10:49:15 +01:00
François Coppens
90469df3c2 Put importing the dataset into a module. 2021-02-12 19:31:31 +01:00
François Coppens
1b3a1d9d22 Added QMCChem test dataset with 3 updates. Renamed files, added the Fortran program QMCChem_dataset_test.f90 to start testing the QMCChem dataset. Wrote and tested Fortran code to import the test dataset. 2021-02-12 12:04:21 +01:00
Pablo Oliveira
6f34f485d3 C++ redesign of data-structures
- Use flat arrays
- Use real type for all matrices
- Merge _f MaponiA3 files
2021-02-09 14:34:39 +01:00
François Coppens
3f6bca2b04 The Fortran interface to C++ fuction MaponiA3() works but the mechanism of passing the 2D arrays from Fortran to C++ must be improved. Now the passed 'linear' 2D arrays are copied and reshaped into usable 2D arrays. This needs to be replaced with some suitable casting mechanism. 2021-02-06 18:59:07 +01:00
François Coppens
7f7b23f7c4 Put more comments in Makefile. 2021-02-04 18:52:26 +01:00
François Coppens
f1641dd4e4 Solved linking problem by including C++ standard library '-lstdc++'. Also added a minimal working example of Fortran-C++ interfacing in dir 'mwe'. 2021-02-04 17:05:55 +01:00
François Coppens
84fffdb7fa Prepared the example matrix of Example 8 of the paper and its
decomposition in the Fortran code and made a basic call to the
subroutine MYSUBROUTINE, which is bound to the C++ void function
'Sherman-Morrison();. For now compilation fails with lots of undefined
references.'
2021-02-04 13:12:47 +01:00
François Coppens
090847247d Prepared the main Fortran infrastructure for the C++ calls. Updated the makefile. 2021-02-04 11:39:00 +01:00
François Coppens
7d55d7db77 Split the program in a header file and an implementation file and included them in main. Does not compile. Get the following error: ld: /tmp/icpcnmVxvw.o: in function void showMatrix<int>(int**, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 2021-02-02 17:06:32 +01:00
François Coppens
d45df44e5e C++ implementation of algo 3 is working. Not optimised yet. 2021-01-27 17:19:41 +01:00
François Coppens
daadf44eee Maponi algorithm 4 works for the modified Example 18 in the paper but not for general non-singlual NxN matrices yet. 2021-01-26 11:32:17 +01:00
François Coppens
d286e0d45e Added some initial data likle Makefiles and .gitignore. 2021-01-26 07:26:54 +01:00