2 "Test code for DMRGBlock module\n";
5 #include "DMRGBlock.hpp" 6 #include "linalg_tools.hpp" 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);
16 static char hborder[] =
18 "------------------------------------------------------------" 19 "------------------------------------------------------------";
21 #define PrintHeader(COMM,TEXT) \ 22 ierr = PetscPrintf((COMM), "%s\n%s\n%s\n", hborder, (TEXT), hborder); CHKERRQ(ierr); 26 PetscErrorCode Test_InitAndCopy()
28 PetscErrorCode ierr = 0;
31 ierr = blk.
Initialize(PETSC_COMM_WORLD, 2, {1.5,0.5,-0.5,-1.5}, {2,3,2,1});CHKERRQ(ierr);
36 ierr = SetSz0(blk.
Sz(0)); CHKERRQ(ierr);
37 ierr = MatPeek(blk.
Sz(0),
"blk.Sz(0)"); CHKERRQ(ierr);
41 ierr = SetSp0(blk.
Sp(0)); CHKERRQ(ierr);
42 ierr = MatPeek(blk.
Sp(0),
"blk.Sp(0)"); CHKERRQ(ierr);
46 ierr = SetSz1(blk.
Sz(1)); CHKERRQ(ierr);
47 ierr = MatPeek(blk.
Sz(1),
"blk.Sz(1)"); CHKERRQ(ierr);
51 ierr = SetSp1(blk.
Sp(1)); CHKERRQ(ierr);
52 ierr = MatPeek(blk.
Sp(1),
"blk.Sp(1)"); CHKERRQ(ierr);
59 ierr = MatPeek(blk2.
Sz(0),
"blk2.Sz(0)"); CHKERRQ(ierr);
60 ierr = MatPeek(blk2.
Sp(0),
"blk2.Sp(0)"); CHKERRQ(ierr);
61 ierr = MatPeek(blk2.
Sz(1),
"blk2.Sz(1)"); CHKERRQ(ierr);
62 ierr = MatPeek(blk2.
Sp(1),
"blk2.Sp(1)"); CHKERRQ(ierr);
70 ierr = blk2.
Destroy(); CHKERRQ(ierr);
76 PetscErrorCode Test_MatOpCheckOperatorBlocks()
78 PetscErrorCode ierr = 0;
81 ierr = blk.
Initialize(PETSC_COMM_WORLD, 2, {1.5,0.5,-0.5,-1.5}, {2,3,2,1});CHKERRQ(ierr);
85 ierr = SetRow(blk.
Sz(0), 0, {0,1}); CHKERRQ(ierr);
86 ierr = SetRow(blk.
Sz(0), 1, {1}); CHKERRQ(ierr);
87 ierr = SetRow(blk.
Sz(0), 2, {2,3,4}); CHKERRQ(ierr);
88 ierr = SetRow(blk.
Sz(0), 3, {3}); CHKERRQ(ierr);
89 ierr = SetRow(blk.
Sz(0), 4, {2,4}); CHKERRQ(ierr);
90 ierr = SetRow(blk.
Sz(0), 5, {5,6}); CHKERRQ(ierr);
91 ierr = SetRow(blk.
Sz(0), 7, {7}); CHKERRQ(ierr);
92 ierr = MatPeek(blk.
Sz(0),
"blk.Sz(0)"); CHKERRQ(ierr);
96 ierr = SetRow(blk.
Sp(0), 0, {2,3,4}); CHKERRQ(ierr);
97 ierr = SetRow(blk.
Sp(0), 1, {2,4}); CHKERRQ(ierr);
98 ierr = SetRow(blk.
Sp(0), 2, {5,6}); CHKERRQ(ierr);
99 ierr = SetRow(blk.
Sp(0), 3, {5}); CHKERRQ(ierr);
100 ierr = SetRow(blk.
Sp(0), 4, {6}); CHKERRQ(ierr);
101 ierr = SetRow(blk.
Sp(0), 6, {7}); CHKERRQ(ierr);
102 ierr = MatPeek(blk.
Sp(0),
"blk.Sp(0)"); CHKERRQ(ierr);
106 ierr = SetRow(blk.
Sz(1), 0, {0,1}); CHKERRQ(ierr);
107 ierr = SetRow(blk.
Sz(1), 1, {1}); CHKERRQ(ierr);
108 ierr = SetRow(blk.
Sz(1), 2, {2,3,4}); CHKERRQ(ierr);
109 ierr = SetRow(blk.
Sz(1), 3, {3}); CHKERRQ(ierr);
110 ierr = SetRow(blk.
Sz(1), 4, {2,4}); CHKERRQ(ierr);
111 ierr = SetRow(blk.
Sz(1), 5, {5,6}); CHKERRQ(ierr);
112 ierr = SetRow(blk.
Sz(1), 7, {1,7}); CHKERRQ(ierr);
113 ierr = MatPeek(blk.
Sz(1),
"blk.Sz(1)"); CHKERRQ(ierr);
117 PetscInt rstart, rend;
118 MatGetOwnershipRange(blk.
Sz(1), &rstart, &rend);
119 if(rstart <= 7 && 7 < rend){
120 if(ierr!=PETSC_ERR_ARG_OUTOFRANGE){
121 SETERRQ(PETSC_COMM_SELF, 1,
"Failed test");
123 printf(
"%s\n",hborder);
124 printf(
"%s Exception caught.\n",__FUNCTION__);
125 printf(
"%s\n",hborder);
129 ierr = blk.
Destroy(); CHKERRQ(ierr);
133 PetscErrorCode Test_SavingBlocks()
135 PetscErrorCode ierr = 0;
137 ierr =
Makedir(
"trash_block_test/"); CHKERRQ(ierr);
140 ierr = blk.
Initialize(PETSC_COMM_WORLD, 2, {1.5,0.5,-0.5,-1.5}, {2,3,2,1});CHKERRQ(ierr);
145 ierr = SetSz0(blk.
Sz(0)); CHKERRQ(ierr);
149 ierr = SetSp0(blk.
Sp(0)); CHKERRQ(ierr);
153 ierr = SetSz1(blk.
Sz(1)); CHKERRQ(ierr);
157 ierr = SetSp1(blk.
Sp(1)); CHKERRQ(ierr);
164 for(PetscInt isite = 0; isite < blk.
NumSites(); ++isite){
165 if(blk.
Sz(isite)!=NULL) SETERRQ1(PETSC_COMM_SELF,1,
"Matrix Sz(%d) must be null.", isite);
166 if(blk.
Sp(isite)!=NULL) SETERRQ1(PETSC_COMM_SELF,1,
"Matrix Sp(%d) must be null.", isite);
168 if(blk.
H!=NULL) SETERRQ(PETSC_COMM_SELF,1,
"Matrix H must be null.");
170 ierr = blk.
Retrieve(); CHKERRQ(ierr);
174 ierr = blk2.
Initialize(PETSC_COMM_WORLD, 2, {1.5,0.5,-0.5,-1.5}, {2,3,2,1});CHKERRQ(ierr);
178 ierr = SetSz0(blk2.
Sz(0)); CHKERRQ(ierr);
179 ierr = SetSp0(blk2.
Sp(0)); CHKERRQ(ierr);
180 ierr = SetSz1(blk2.
Sz(1)); CHKERRQ(ierr);
181 ierr = SetSp1(blk2.
Sp(1)); CHKERRQ(ierr);
184 ierr = MatEqual(blk2.
Sz(0), blk.
Sz(0), &flg); CHKERRQ(ierr);
185 if(!flg) SETERRQ(PETSC_COMM_WORLD,1,
"Wrong retrieval of matrix Sz0");
186 ierr = MatEqual(blk2.
Sp(0), blk.
Sp(0), &flg); CHKERRQ(ierr);
187 if(!flg) SETERRQ(PETSC_COMM_WORLD,1,
"Wrong retrieval of matrix Sp0");
188 ierr = MatEqual(blk2.
Sz(1), blk.
Sz(1), &flg); CHKERRQ(ierr);
189 if(!flg) SETERRQ(PETSC_COMM_WORLD,1,
"Wrong retrieval of matrix Sz1");
190 ierr = MatEqual(blk2.
Sp(1), blk.
Sp(1), &flg); CHKERRQ(ierr);
191 if(!flg) SETERRQ(PETSC_COMM_WORLD,1,
"Wrong retrieval of matrix Sp1");
193 ierr = blk2.
Destroy(); CHKERRQ(ierr);
196 ierr = blk.
Destroy(); CHKERRQ(ierr);
202 int main(
int argc,
char **argv)
204 PetscErrorCode ierr = 0;
205 PetscMPIInt nprocs, rank;
206 MPI_Comm& comm = PETSC_COMM_WORLD;
209 ierr = SlepcInitialize(&argc, &argv, (
char*)0, help); CHKERRQ(ierr);
210 ierr = MPI_Comm_size(comm, &nprocs); CHKERRQ(ierr);
211 ierr = MPI_Comm_rank(comm, &rank); CHKERRQ(ierr);
213 PrintHeader(comm,
"Test 01: Test_InitAndCopy");
214 ierr = Test_InitAndCopy(); CHKERRQ(ierr);
215 PrintHeader(comm,
"Test 02: Test_SavingBlocks");
216 ierr = Test_SavingBlocks(); CHKERRQ(ierr);
217 PrintHeader(comm,
"Test 03: Test_MatOpCheckOperatorBlocks");
218 ierr = Test_MatOpCheckOperatorBlocks(); CHKERRQ(ierr);
220 ierr = SlepcFinalize(); CHKERRQ(ierr);
PetscErrorCode InitializeSave(const std::string &save_dir_in)
Initializes the writing of the block matrices to file.
PETSC_EXTERN PetscErrorCode Makedir(const std::string &dir_name)
Creates a directory named dir_name.
Base class for the implementation of a block of spin sites.
PetscErrorCode AssembleOperators()
Ensures that all operators are assembled.
Mat H
Matrix representation of the Hamiltonian operator.
PetscErrorCode CheckSectors() const
Checks whether sector indexing was done properly.
PetscErrorCode Retrieve()
Retrieve all the matrix operators that were written to file by SaveAndDestroy()
Mat Sz(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.
PetscErrorCode SaveAndDestroy()
Save all the matrix operators to file and destroy the current storage.
PetscErrorCode Destroy()
Destroys all operator matrices and frees memory.
PetscErrorCode MatOpCheckOperatorBlocks(const Op_t &op_t, const PetscInt &isite) const
Checks the block indexing in the matrix operator op_t on site isite.
PetscErrorCode Initialize(const MPI_Comm &comm_in)
Initializes block object's MPI attributes.
PetscInt NumSites() const
Gets the number of sites that are currently initialized.
Mat Sp(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.