mirror of
https://github.com/TREX-CoE/Sherman-Morrison.git
synced 2024-12-26 06:15:08 +01:00
Restructuring complete. Updated makefile.
This commit is contained in:
parent
5d4a7af01a
commit
8e0aef7717
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,10 +1,7 @@
|
|||||||
*.o
|
*.o
|
||||||
*.mod
|
*.mod
|
||||||
.vscode
|
.vscode
|
||||||
cMaponiA3_test*
|
|
||||||
fMaponiA3_test*
|
|
||||||
QMCChem_dataset_test
|
|
||||||
Slater*
|
Slater*
|
||||||
Updates*
|
Updates*
|
||||||
tests/test
|
|
||||||
datasets/datasets.*
|
datasets/datasets.*
|
||||||
|
bin/
|
||||||
|
107
Makefile
107
Makefile
@ -1,49 +1,36 @@
|
|||||||
SRC_DIR := src
|
## Compilers
|
||||||
INC_DIR := include
|
|
||||||
OBJ_DIR := build
|
|
||||||
BIN_DIR := bin
|
|
||||||
|
|
||||||
## Used compilers
|
|
||||||
ARCH = -xCORE-AVX2
|
ARCH = -xCORE-AVX2
|
||||||
H5CXX = h5c++
|
H5CXX = h5c++
|
||||||
CXX = icpc
|
CXX = icpc
|
||||||
FC = ifort
|
FC = ifort
|
||||||
|
|
||||||
## Compiler flags & common obs & libs
|
## Compiler flags
|
||||||
H5CXXFLAGS = -O0 -g
|
H5CXXFLAGS = -O0 -g
|
||||||
CXXFLAGS = -O0 -g -traceback
|
CXXFLAGS = -O0 -g -traceback
|
||||||
FFLAGS = -O0 -g -traceback
|
FFLAGS = -O0 -g -traceback
|
||||||
INCLUDE = -I$(INC_DIR)
|
|
||||||
|
INCLUDE = -I $(INC_DIR)/
|
||||||
|
DEPS_CXX = $(OBJ_DIR)/SM_MaponiA3.o
|
||||||
|
DEPS_F = $(DEPS_CXX) $(OBJ_DIR)/SM_MaponiA3_mod.o $(OBJ_DIR)/Helpers_mod.o
|
||||||
FLIBS = -lstdc++
|
FLIBS = -lstdc++
|
||||||
|
|
||||||
## Deps & objs for C++ cMaponiA3_test_3x3_3
|
SRC_DIR := src
|
||||||
OBJS = $(OBJ_DIR)/SM_MaponiA3.o
|
TST_DIR := tests
|
||||||
cMaponiA3_test_3x3_3OBJ = cMaponiA3_test_3x3_3.o
|
INC_DIR := include
|
||||||
fMaponiA3_test_3x3_3OBJ = SM_MaponiA3_mod.o fMaponiA3_test_3x3_3.o
|
OBJ_DIR := build
|
||||||
fMaponiA3_test_4x4_2OBJ = Helpers_mod.o SM_MaponiA3_mod.o fMaponiA3_test_4x4_2.o
|
BIN_DIR := bin
|
||||||
QMCChem_dataset_testOBJ = Helpers_mod.o SM_MaponiA3_mod.o QMCChem_dataset_test.o
|
|
||||||
|
|
||||||
|
|
||||||
## Default build target: build everything
|
|
||||||
all: cMaponiA3_test_3x3_3 fMaponiA3_test_3x3_3 fMaponiA3_test_4x4_2 QMCChem_dataset_test tests/test
|
|
||||||
|
|
||||||
|
|
||||||
## Compile recipes for C++
|
|
||||||
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
|
|
||||||
$(CXX) $(ARCH) $(CXXFLAGS) $(INCLUDE) -c -o $@ $<
|
|
||||||
|
|
||||||
## Compile recepies for Fortran
|
|
||||||
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.f90 | $(OBJ_DIR)
|
|
||||||
$(FC) $(ARCH) $(FFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
## Explicit recipe to trigger rebuild and relinking when headerfile is changed
|
|
||||||
$(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/Helpers.hpp| $(OBJ_DIR)
|
|
||||||
$(CXX) $(ARCH) $(CXXFLAGS) $(INCLUDE) -fPIC -c -o $@ $<
|
|
||||||
|
|
||||||
|
EXEC := $(BIN_DIR)/cMaponiA3_test_3x3_3 \
|
||||||
|
$(BIN_DIR)/test_h5 \
|
||||||
|
$(BIN_DIR)/fMaponiA3_test_3x3_3 \
|
||||||
|
$(BIN_DIR)/fMaponiA3_test_4x4_2 \
|
||||||
|
$(BIN_DIR)/QMCChem_dataset_test
|
||||||
|
|
||||||
## Build tagets
|
## Build tagets
|
||||||
.PHONY: all clean distclean
|
.PHONY: all clean distclean
|
||||||
|
|
||||||
|
all: $(EXEC)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@rm -vrf $(OBJ_DIR)
|
@rm -vrf $(OBJ_DIR)
|
||||||
|
|
||||||
@ -52,22 +39,46 @@ distclean: clean
|
|||||||
Slater* Updates.dat
|
Slater* Updates.dat
|
||||||
|
|
||||||
|
|
||||||
## Linking the C++ example program
|
#### COMPILING
|
||||||
$(BIN_DIR)/cMaponiA3_test_3x3_3: $(OBJ_DIR)/$(cMaponiA3_test_3x3_3OBJ) $(OBJS) | $(BIN_DIR)
|
|
||||||
$(CXX) $(ARCH) $(CXXFLAGS) $(INCLUDE) -o $@ $^
|
|
||||||
|
|
||||||
## Linking Fortran example program calling the C++ function
|
|
||||||
$(BIN_DIR)/fMaponiA3_test_3x3_3: $(OBJ_DIR)/$(fMaponiA3_test_3x3_3OBJ) $(OBJS) | $(BIN_DIR)
|
|
||||||
$(FC) $(ARCH) $(FFLAGS) $(FLIBS) -o $@ $^
|
|
||||||
|
|
||||||
$(BIN_DIR)/fMaponiA3_test_4x4_2: $(OBJ_DIR)/$(fMaponiA3_test_4x4_2OBJ) $(OBJS) | $(BIN_DIR)
|
|
||||||
$(FC) $(ARCH) $(FFLAGS) $(FLIBS) -o $@ $^
|
|
||||||
|
|
||||||
$(BIN_DIR)/QMCChem_dataset_test: $(OBJ_DIR)/$(QMCChem_dataset_testOBJ) $(OBJS) | $(BIN_DIR)
|
|
||||||
$(FC) $(ARCH) $(FFLAGS) $(FLIBS) -o $@ $^
|
|
||||||
|
|
||||||
$(BIN_DIR)/test: $(SRC_DIR)/test.cpp $(OBJS) | $(BIN_DIR)
|
|
||||||
$(H5CXX) $(H5CXXFLAGS) $(INCLUDE) -o $@ $^
|
|
||||||
|
|
||||||
$(BIN_DIR) $(OBJ_DIR):
|
$(BIN_DIR) $(OBJ_DIR):
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|
||||||
|
### IMPLICIT BUILD RULES
|
||||||
|
## C++ objects
|
||||||
|
$(OBJ_DIR)/%.o: $(TST_DIR)/%.cpp $(INC_DIR)/* | $(OBJ_DIR)
|
||||||
|
$(CXX) $(CXXFLAGS) $(ARCH) $(INCLUDE) -c -o $@ $<
|
||||||
|
|
||||||
|
## HDF5/C++ objects
|
||||||
|
$(OBJ_DIR)/%_h5.o: $(TST_DIR)/%_h5.cpp $(INC_DIR)/* | $(OBJ_DIR)
|
||||||
|
$(H5CXX) $(H5CXXFLAGS) $(INCLUDE) -c -o $@ $<
|
||||||
|
|
||||||
|
## Fortran modules
|
||||||
|
$(OBJ_DIR)/%_mod.o: $(SRC_DIR)/%_mod.f90 | $(OBJ_DIR)
|
||||||
|
$(FC) $(FFLAGS) $(ARCH) -module $(OBJ_DIR)/ -c -o $@ $<
|
||||||
|
|
||||||
|
## Fortran objects
|
||||||
|
$(OBJ_DIR)/%.o: $(TST_DIR)/%.f90 | $(OBJ_DIR)
|
||||||
|
$(FC) $(FFLAGS) $(ARCH) -I $(OBJ_DIR)/ -c -o $@ $<
|
||||||
|
|
||||||
|
### EXPLICIT BUILD RULES
|
||||||
|
## special compiler flag -fPIC otherwise h5c++ builds fail
|
||||||
|
$(OBJ_DIR)/SM_MaponiA3.o: $(SRC_DIR)/SM_MaponiA3.cpp $(INC_DIR)/* | $(OBJ_DIR)
|
||||||
|
$(CXX) $(CXXFLAGS) -fPIC $(ARCH) $(INCLUDE) -c -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### LINKING
|
||||||
|
$(BIN_DIR)/cMaponiA3_test_3x3_3: $(OBJ_DIR)/cMaponiA3_test_3x3_3.o $(DEPS_CXX) | $(BIN_DIR)
|
||||||
|
$(CXX) -o $@ $^
|
||||||
|
|
||||||
|
$(BIN_DIR)/test_h5: $(OBJ_DIR)/test_h5.o $(DEPS_CXX) | $(BIN_DIR)
|
||||||
|
$(H5CXX) -o $@ $^
|
||||||
|
|
||||||
|
$(BIN_DIR)/fMaponiA3_test_3x3_3: $(DEPS_F) $(OBJ_DIR)/fMaponiA3_test_3x3_3.o | $(BIN_DIR)
|
||||||
|
$(FC) $(FLIBS) -o $@ $^
|
||||||
|
|
||||||
|
$(BIN_DIR)/fMaponiA3_test_4x4_2: $(DEPS_F) $(OBJ_DIR)/fMaponiA3_test_4x4_2.o | $(BIN_DIR)
|
||||||
|
$(FC) $(FLIBS) -o $@ $^
|
||||||
|
|
||||||
|
$(BIN_DIR)/QMCChem_dataset_test: $(DEPS_F) $(OBJ_DIR)/QMCChem_dataset_test.o | $(BIN_DIR)
|
||||||
|
$(FC) $(FLIBS) -o $@ $^
|
||||||
|
36
build.sh
36
build.sh
@ -1,36 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
mkdir build/ bin/
|
|
||||||
|
|
||||||
## compile tests/test.cpp
|
|
||||||
icpc -O0 -fPIC -c src/SM_MaponiA3.cpp -o build/SM_MaponiA3.o -I include/
|
|
||||||
|
|
||||||
## compile tests/fMaponiA3_test_3x3_3.f90
|
|
||||||
ifort -c src/SM_MaponiA3_mod.f90 -o build/SM_MaponiA3_mod.o -module build
|
|
||||||
ifort -c tests/fMaponiA3_test_3x3_3.f90 -o build/fMaponiA3_test_3x3_3.o -I build/
|
|
||||||
## link bin/QMCChem_dataset_test
|
|
||||||
ifort -o bin/fMaponiA3_test_3x3_3 build/fMaponiA3_test_3x3_3.o build/SM_MaponiA3_mod.o build/SM_MaponiA3.o -lstdc++
|
|
||||||
|
|
||||||
## compile tests/fMaponiA3_test_4x4_2.f90
|
|
||||||
ifort -c src/SM_MaponiA3_mod.f90 -o build/SM_MaponiA3_mod.o -module build
|
|
||||||
ifort -c src/Helpers_mod.f90 -o build/Helpers_mod.o -module build
|
|
||||||
ifort -c tests/fMaponiA3_test_4x4_2.f90 -o build/fMaponiA3_test_4x4_2.o -I build/
|
|
||||||
## link bin/QMCChem_dataset_test
|
|
||||||
ifort -o bin/fMaponiA3_test_4x4_2 build/fMaponiA3_test_4x4_2.o build/SM_MaponiA3_mod.o build/Helpers_mod.o build/SM_MaponiA3.o -lstdc++
|
|
||||||
|
|
||||||
## compile tests/QMCChem_dataset_test.f90
|
|
||||||
ifort -c src/SM_MaponiA3_mod.f90 -o build/SM_MaponiA3_mod.o -module build
|
|
||||||
ifort -c src/Helpers_mod.f90 -o build/Helpers_mod.o -module build
|
|
||||||
ifort -c tests/QMCChem_dataset_test.f90 -o build/QMCChem_dataset_test.o -I build/
|
|
||||||
## link bin/QMCChem_dataset_test
|
|
||||||
ifort -o bin/QMCChem_dataset_test build/QMCChem_dataset_test.o build/SM_MaponiA3_mod.o build/Helpers_mod.o build/SM_MaponiA3.o -lstdc++
|
|
||||||
|
|
||||||
## compile tests/test.cpp
|
|
||||||
h5c++ -c tests/test.cpp -o build/test.o -I include/
|
|
||||||
## link bin/test
|
|
||||||
h5c++ -o bin/test build/test.o build/SM_MaponiA3.o
|
|
||||||
|
|
||||||
## compile tests/cMaponiA3_test_3x3_3.cpp
|
|
||||||
icpc -c tests/cMaponiA3_test_3x3_3.cpp -o build/cMaponiA3_test_3x3_3.o -I include/
|
|
||||||
## link bin/cMaponiA3_test_3x3_3
|
|
||||||
icpc -o bin/cMaponiA3_test_3x3_3 build/cMaponiA3_test_3x3_3.o build/SM_MaponiA3.o
|
|
53
tests/cMaponiA3_test_3x3_3.cpp
Normal file
53
tests/cMaponiA3_test_3x3_3.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// main.cpp
|
||||||
|
#include "SM_MaponiA3.hpp"
|
||||||
|
#include "Helpers.hpp"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
unsigned int M = 3; // Dimension of the Slater-matrix
|
||||||
|
unsigned int i, j; // Indices for iterators
|
||||||
|
|
||||||
|
// Declare, allocate all vectors and matrices and fill them with zeros
|
||||||
|
unsigned int *Ar_index = new unsigned int[M];
|
||||||
|
double *A = new double[M*M]; // The matrix to be inverted
|
||||||
|
double *A0 = new double[M*M]; // A diagonal matrix with the digonal elements of A
|
||||||
|
double *Ar = new double[M*M]; // The update matrix
|
||||||
|
double *A0_inv = new double[M*M]; // The inverse
|
||||||
|
|
||||||
|
// Fill with zeros
|
||||||
|
for (i = 0; i < M; i++) {
|
||||||
|
for (j = 0; j < M; j++) {
|
||||||
|
A0[i*M+j] = 0;
|
||||||
|
Ar[i*M+j] = 0;
|
||||||
|
A0_inv[i*M+j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize A with M=3 and fill acc. to Eq. (17) from paper
|
||||||
|
A[0] = 1; A[3] = 1; A[6] = -1;
|
||||||
|
A[1] = 1; A[4] = 1; A[7] = 0;
|
||||||
|
A[2] = -1; A[5] = 0; A[8] = -1;
|
||||||
|
|
||||||
|
showMatrix(A, M, "A");
|
||||||
|
|
||||||
|
// Initialize the diagonal matrix A0,
|
||||||
|
// 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+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];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define pointers dim and n_updates to use in Sherman-Morrison(...) function call
|
||||||
|
MaponiA3(A0_inv, M, M, Ar, Ar_index);
|
||||||
|
showMatrix(A0_inv, M, "A0_inv");
|
||||||
|
|
||||||
|
// Deallocate all vectors and matrices
|
||||||
|
delete [] A, A0, A0_inv, Ar, Ar_index;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
59
tests/fMaponiA3_test_3x3_3.f90
Normal file
59
tests/fMaponiA3_test_3x3_3.f90
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
program Interface_test
|
||||||
|
use Sherman_Morrison
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
integer i, j !! Iterators
|
||||||
|
integer(c_int) :: Dim, N_updates
|
||||||
|
integer(c_int), dimension(:), allocatable :: Updates_index
|
||||||
|
real(c_double), dimension(:,:), allocatable :: A, S, Updates
|
||||||
|
real(c_double), dimension(:,:), allocatable :: S_inv
|
||||||
|
|
||||||
|
Dim = 3
|
||||||
|
N_updates = 3
|
||||||
|
allocate(Updates_index(Dim), A(Dim,Dim), S(Dim,Dim), Updates(Dim,Dim), S_inv(Dim,Dim))
|
||||||
|
|
||||||
|
!! Initialize A with M=3 and fill acc. to Eq. (17) from paper
|
||||||
|
A(1,1) = 1.0d0
|
||||||
|
A(1,2) = 1.0d0
|
||||||
|
A(1,3) = -1.0d0
|
||||||
|
A(2,1) = 1.0d0
|
||||||
|
A(2,2) = 1.0d0
|
||||||
|
A(2,3) = 0.0d0
|
||||||
|
A(3,1) = -1.0d0
|
||||||
|
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
|
||||||
|
do j=1,Dim
|
||||||
|
if (i == j) then
|
||||||
|
S(i,j) = A(i,j)
|
||||||
|
S_inv(i,j) = 1.0d0 / S(i,j)
|
||||||
|
else
|
||||||
|
S(i,j) = 0.0d0
|
||||||
|
S_inv(i,j) = 0.0d0
|
||||||
|
end if
|
||||||
|
Updates(i,j) = A(i,j) - S(i,j)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
call MaponiA3(S_inv, Dim, N_updates, Updates, Updates_index)
|
||||||
|
|
||||||
|
do i=1,Dim
|
||||||
|
do j=1,Dim
|
||||||
|
write(*,"(F3.0,3X)", advance="no") S_inv(i,j)
|
||||||
|
end do
|
||||||
|
write(*,*)
|
||||||
|
end do
|
||||||
|
|
||||||
|
deallocate(Updates_index, A, S, Updates, S_inv)
|
||||||
|
end program
|
151
tests/fMaponiA3_test_4x4_2.f90
Normal file
151
tests/fMaponiA3_test_4x4_2.f90
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
program Interface_test
|
||||||
|
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, S_inv_t, A_inv
|
||||||
|
|
||||||
|
Dim = 4
|
||||||
|
N_updates = 2
|
||||||
|
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
|
||||||
|
S(1,1) = 1.0d0
|
||||||
|
S(1,2) = 0.0d0
|
||||||
|
S(1,3) = 1.0d0
|
||||||
|
S(1,4) = -1.0d0
|
||||||
|
S(2,1) = 0.0d0
|
||||||
|
S(2,2) = 1.0d0
|
||||||
|
S(2,3) = 1.0d0
|
||||||
|
S(2,4) = 0.0d0
|
||||||
|
S(3,1) = -1.0d0
|
||||||
|
S(3,2) = 0.0d0
|
||||||
|
S(3,3) = -1.0d0
|
||||||
|
S(3,4) = 0.0d0
|
||||||
|
S(4,1) = 1.0d0
|
||||||
|
S(4,2) = 1.0d0
|
||||||
|
S(4,3) = 1.0d0
|
||||||
|
S(4,4) = 1.0d0
|
||||||
|
|
||||||
|
S_inv(1,1) = 1.0d0
|
||||||
|
S_inv(1,2) = -1.0d0
|
||||||
|
S_inv(1,3) = 1.0d0
|
||||||
|
S_inv(1,4) = 1.0d0
|
||||||
|
S_inv(2,1) = 1.0d0
|
||||||
|
S_inv(2,2) = 0.0d0
|
||||||
|
S_inv(2,3) = 2.0d0
|
||||||
|
S_inv(2,4) = 1.0d0
|
||||||
|
S_inv(3,1) = -1.0d0
|
||||||
|
S_inv(3,2) = 1.0d0
|
||||||
|
S_inv(3,3) = -2.0d0
|
||||||
|
S_inv(3,4) = -1.0d0
|
||||||
|
S_inv(4,1) = -1.0d0
|
||||||
|
S_inv(4,2) = 0.0d0
|
||||||
|
S_inv(4,3) = -1.0d0
|
||||||
|
S_inv(4,4) = 0.0d0
|
||||||
|
|
||||||
|
A(1,1) = 1.0d0
|
||||||
|
A(1,2) = 0.0d0
|
||||||
|
A(1,3) = 1.0d0
|
||||||
|
A(1,4) = -1.0d0
|
||||||
|
A(2,1) = 0.0d0
|
||||||
|
A(2,2) = -1.0d0
|
||||||
|
A(2,3) = 1.0d0
|
||||||
|
A(2,4) = -1.0d0
|
||||||
|
A(3,1) = -1.0d0
|
||||||
|
A(3,2) = 0.0d0
|
||||||
|
A(3,3) = -1.0d0
|
||||||
|
A(3,4) = 0.0d0
|
||||||
|
A(4,1) = 1.0d0
|
||||||
|
A(4,2) = 1.0d0
|
||||||
|
A(4,3) = 1.0d0
|
||||||
|
A(4,4) = 1.0d0
|
||||||
|
|
||||||
|
A_inv(1,1) = 0.0d0
|
||||||
|
A_inv(1,2) = -1.0d0
|
||||||
|
A_inv(1,3) = -2.0d0
|
||||||
|
A_inv(1,4) = -1.0d0
|
||||||
|
A_inv(2,1) = 1.0d0
|
||||||
|
A_inv(2,2) = 0.0d0
|
||||||
|
A_inv(2,3) = 2.0d0
|
||||||
|
A_inv(2,4) = 1.0d0
|
||||||
|
A_inv(3,1) = 0.0d0
|
||||||
|
A_inv(3,2) = 1.0d0
|
||||||
|
A_inv(3,3) = 1.0d0
|
||||||
|
A_inv(3,4) = 1.0d0
|
||||||
|
A_inv(4,1) = -1.0d0
|
||||||
|
A_inv(4,2) = 0.0d0
|
||||||
|
A_inv(4,3) = -1.0d0
|
||||||
|
A_inv(4,4) = 0.0d0
|
||||||
|
|
||||||
|
!! Prepare Updates and Updates_index
|
||||||
|
Updates(1,1) = 0
|
||||||
|
Updates(1,2) = 0
|
||||||
|
Updates(2,1) = -2
|
||||||
|
Updates(2,2) = -1
|
||||||
|
Updates(3,1) = 0
|
||||||
|
Updates(3,2) = 0
|
||||||
|
Updates(4,1) = 0
|
||||||
|
Updates(4,2) = 0
|
||||||
|
|
||||||
|
Updates_index(1) = 2
|
||||||
|
Updates_index(2) = 4
|
||||||
|
|
||||||
|
!! 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")
|
||||||
|
do i=1,dim
|
||||||
|
do j=1,dim
|
||||||
|
write(2000,"(E23.15, 1X)", advance="no") S(i,j)
|
||||||
|
write(3000,"(E23.15, 1X)", advance="no") S_inv(i,j)
|
||||||
|
end do
|
||||||
|
write(2000,*)
|
||||||
|
write(3000,*)
|
||||||
|
end do
|
||||||
|
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
|
||||||
|
col = Updates_index(i)
|
||||||
|
S(j,col) = S(j,col) + Updates(j,i)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
!! Update S_inv
|
||||||
|
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")
|
||||||
|
open(unit = 5000, file = "Slater_inv.dat")
|
||||||
|
do i=1,dim
|
||||||
|
do j=1,dim
|
||||||
|
write(4000,"(E23.15, 1X)", advance="no") S(i,j)
|
||||||
|
write(5000,"(E23.15, 1X)", advance="no") S_inv(i,j)
|
||||||
|
end do
|
||||||
|
write(4000,*)
|
||||||
|
write(5000,*)
|
||||||
|
end do
|
||||||
|
close(4000)
|
||||||
|
close(5000)
|
||||||
|
|
||||||
|
deallocate(Updates_index, A, A_inv, S, Updates, S_inv)
|
||||||
|
end program
|
Loading…
Reference in New Issue
Block a user