diff --git a/Makefile b/Makefile index b60d165..838b143 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ fMaponiA3_testOBJ = SM_MaponiA3.o SM_MaponiA3_mod.o fMaponiA3_test.o fMaponiA3_testLIB = -lstdc++ ## Deps & objs for Fortran QMCChem_dataset_test -QMCChem_dataset_testDEP = QMCChem_dataset_test.f90 SM_MaponiA3_mod.f90 -QMCChem_dataset_testOBJ = SM_MaponiA3.o SM_MaponiA3_mod.o QMCChem_dataset_test.o +QMCChem_dataset_testDEP = QMCChem_dataset_test.f90 SM_MaponiA3_mod.f90 Utils_mod.f90 +QMCChem_dataset_testOBJ = SM_MaponiA3.o Utils_mod.o SM_MaponiA3_mod.o QMCChem_dataset_test.o QMCChem_dataset_testLIB = -lstdc++ ## Compile recipes for C++ cMaponiA3_test diff --git a/QMCChem_dataset_test.f90 b/QMCChem_dataset_test.f90 index 33e258e..d53bd01 100644 --- a/QMCChem_dataset_test.f90 +++ b/QMCChem_dataset_test.f90 @@ -1,5 +1,6 @@ program QMCChem_dataset_test use Sherman_Morrison, only : MaponiA3 + use Utils, only : Read_dataset use, intrinsic :: iso_c_binding, only : c_int, c_double implicit none @@ -7,37 +8,15 @@ program QMCChem_dataset_test integer :: cycle_id, dim, n_updates integer(c_int), dimension(:), allocatable :: Updates_index real(c_double), dimension(:,:), allocatable :: S, S_inv, Updates - character (len = 32) :: ignore - !! Start of reading the dataset from file - open(unit = 1000, file = "test.dataset.dat") - read(1000,*) - read(1000,*) ignore, cycle_id - read(1000,*) ignore, dim - read(1000,*) ignore,n_updates - - allocate(Updates_index(n_updates), S(dim,dim), & - S_inv(dim,dim), Updates(dim,n_updates)) - - !! Read S and S_inv - read(1000,*) - do i=1,dim - do j=1,dim - read(1000,*) ignore, ignore, S(i,j), S_inv(i,j) - end do - end do - - !! Read the updates Updates and Updates_index - do j=1,n_updates - read(1000,*) ignore, Updates_index(j) - do i=1,dim - read(1000,*) ignore, Updates(i,j) - end do - end do - - read(1000,*) ignore - close(1000) - !! End of reading the dataset from file + call Read_dataset("test.dataset.dat", & + cycle_id, & + dim, & + n_updates, & + S, & + S_inv, & + Updates_index, & + Updates) !! Write current S and S_inv to file for check in Octave open(unit = 2000, file = "Slater_old.dat") diff --git a/Utils_mod.f90 b/Utils_mod.f90 index 2f96a26..d933dd8 100644 --- a/Utils_mod.f90 +++ b/Utils_mod.f90 @@ -1,15 +1,21 @@ module Utils implicit none - contains - subroutine Read_dataset(filename, cycle_id, dim, n_updates & + subroutine Read_dataset(filename, cycle_id, dim, n_updates, & S, S_inv, Updates_index, Updates) + use, intrinsic :: iso_c_binding, only : c_int, c_double + implicit none - character (len = 64), intent(in) :: filename - - + character (len = *), intent(in) :: filename + integer, intent(inout) :: cycle_id, dim, n_updates + integer(c_int), allocatable, intent(inout) :: Updates_index(:) + real(c_double), allocatable, intent(inout) :: S(:,:), S_inv(:,:) + real(c_double), allocatable, intent(inout) :: Updates(:,:) + integer :: i, j + character (len = 32) :: ignore + !! Start of reading the dataset from file - open(unit = 1000, file = "test.dataset.dat") + open(unit = 1000, file = filename) read(1000,*) read(1000,*) ignore, cycle_id read(1000,*) ignore, dim @@ -38,7 +44,4 @@ module Utils close(1000) !! End of reading the dataset from file end subroutine Read_dataset - end module Utils - - -end module Sherman_Morrison +end module Utils \ No newline at end of file