UnitTests_DMRGBlock_SetDiskStorage.cpp
1 static char help[] =
2  "Test code for DMRGBlock module on saving and retrieving blocks from disk \n";
3 
4 #include <slepceps.h>
5 #include "DMRGBlock.hpp"
6 #include "linalg_tools.hpp"
7 #include <iostream>
8 
9 PETSC_EXTERN PetscErrorCode SetRow(const Mat& A, const PetscInt& row, const std::vector<PetscInt>& idxn);
10 PETSC_EXTERN PetscErrorCode Makedir(const std::string& dir_name);
11 PETSC_EXTERN PetscErrorCode SetSz0(const Mat& Sz);
12 PETSC_EXTERN PetscErrorCode SetSp0(const Mat& Sp);
13 PETSC_EXTERN PetscErrorCode SetSz1(const Mat& Sz);
14 PETSC_EXTERN PetscErrorCode SetSp1(const Mat& Sp);
15 PETSC_EXTERN PetscErrorCode Makedir(const std::string& dir_name);
16 
17 PetscErrorCode Test()
18 {
19  PetscErrorCode ierr;
20  PetscMPIInt nprocs, rank;
21  ierr = MPI_Comm_size(PETSC_COMM_WORLD, &nprocs); CHKERRQ(ierr);
22  ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank); CHKERRQ(ierr);
23 
24  Block::SpinBase blk;
25  ierr = blk.Initialize(PETSC_COMM_WORLD, 2, {1.5,0.5,-0.5,-1.5}, {2,3,2,1});CHKERRQ(ierr);
26  ierr = blk.CheckSectors(); CHKERRQ(ierr);
27  ierr = Makedir("trash_block_test_save01"); CHKERRQ(ierr);
28  ierr = Makedir("trash_block_test_save02"); CHKERRQ(ierr);
29  ierr = Makedir("trash_block_test_save03"); CHKERRQ(ierr);
30 
31  ierr = blk.SetDiskStorage("trash_block_test_save01","trash_block_test_save01"); CHKERRQ(ierr);
32 
33  /* Set the entries of the operators */
34  ierr = SetSz0(blk.Sz(0)); CHKERRQ(ierr);
35  ierr = SetSp0(blk.Sp(0)); CHKERRQ(ierr);
36  ierr = SetSz1(blk.Sz(1)); CHKERRQ(ierr);
37  ierr = SetSp1(blk.Sp(1)); CHKERRQ(ierr);
38  ierr = blk.AssembleOperators(); CHKERRQ(ierr);
39 
40  ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing data to: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
41  ierr = blk.EnsureSaved(); CHKERRQ(ierr);
42 
43  ierr = PetscPrintf(PETSC_COMM_WORLD,"\nSetting read_dir as: \"%s\" and write_dir as: \"%s\"\n",
44  "trash_block_test_save01","trash_block_test_save02"); CHKERRQ(ierr);
45  ierr = blk.SetDiskStorage("trash_block_test_save01","trash_block_test_save02"); CHKERRQ(ierr);
46  ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading data from: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
47  ierr = blk.EnsureRetrieved(); CHKERRQ(ierr);
48  ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing data to: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
49  ierr = blk.EnsureSaved(); CHKERRQ(ierr);
50  ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading data from: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
51  ierr = blk.EnsureRetrieved(); CHKERRQ(ierr);
52  ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing data to: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
53  ierr = blk.EnsureSaved(); CHKERRQ(ierr);
54 
55  ierr = PetscPrintf(PETSC_COMM_WORLD,"\nSetting read_dir as: \"%s\" and write_dir as: \"%s\"\n",
56  "trash_block_test_save02","trash_block_test_save03"); CHKERRQ(ierr);
57  ierr = blk.SetDiskStorage("trash_block_test_save02","trash_block_test_save03"); CHKERRQ(ierr);
58  ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading data from: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
59  ierr = blk.EnsureRetrieved(); CHKERRQ(ierr);
60  ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing data to: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
61  ierr = blk.EnsureSaved(); CHKERRQ(ierr);
62  ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading data from: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
63  ierr = blk.EnsureRetrieved(); CHKERRQ(ierr);
64  ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing data to: %s\n", blk.SaveDir().c_str()); CHKERRQ(ierr);
65  ierr = blk.EnsureSaved(); CHKERRQ(ierr);
66 
67  ierr = blk.Destroy(); CHKERRQ(ierr);
68  return(0);
69 }
70 
71 int main(int argc, char **argv)
72 {
73  PetscErrorCode ierr = 0;
74  PetscMPIInt nprocs, rank;
75  ierr = SlepcInitialize(&argc, &argv, (char*)0, help); CHKERRQ(ierr);
76  ierr = MPI_Comm_size(PETSC_COMM_WORLD, &nprocs); CHKERRQ(ierr);
77  ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank); CHKERRQ(ierr);
78 
79  ierr = Test(); CHKERRQ(ierr);
80 
81  ierr = SlepcFinalize(); CHKERRQ(ierr);
82  return ierr;
83 }
PetscErrorCode EnsureRetrieved()
Ensures that the block matrices have been retrieved if the block is initialized, otherwise does nothi...
Definition: DMRGBlock.cpp:1098
PETSC_EXTERN PetscErrorCode Makedir(const std::string &dir_name)
Creates a directory named dir_name.
Definition: MiscTools.cpp:306
std::string SaveDir() const
Returns the value of save_dir where the block data will be read from/written.
Definition: DMRGBlock.hpp:287
Base class for the implementation of a block of spin sites.
Definition: DMRGBlock.hpp:79
PetscErrorCode AssembleOperators()
Ensures that all operators are assembled.
Definition: DMRGBlock.cpp:825
PetscErrorCode EnsureSaved()
Ensures that the block matrices have been saved if the block is initialized, otherwise does nothing...
Definition: DMRGBlock.cpp:1090
PetscErrorCode SetDiskStorage(const std::string &read_dir_in, const std::string &write_dir_in)
Tells where to read from and save the operators and data about the block.
Definition: DMRGBlock.cpp:857
PetscErrorCode CheckSectors() const
Checks whether sector indexing was done properly.
Definition: DMRGBlock.cpp:429
Mat Sz(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.
Definition: DMRGBlock.hpp:353
PetscErrorCode Destroy()
Destroys all operator matrices and frees memory.
Definition: DMRGBlock.cpp:655
PetscErrorCode Initialize(const MPI_Comm &comm_in)
Initializes block object&#39;s MPI attributes.
Definition: DMRGBlock.cpp:31
Mat Sp(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.
Definition: DMRGBlock.hpp:359
This site was generated by Sphinx using Doxygen with a customized theme from doxygen-bootstrapped.