2 "Test code for DMRGKron routines\n";
5 #include "linalg_tools.hpp" 6 #include "DMRGKron.hpp" 10 PETSC_EXTERN PetscErrorCode InitSingleSiteOperator(
const MPI_Comm& comm,
const PetscInt dim, Mat* mat);
13 PETSC_EXTERN PetscErrorCode SetRow(
const Mat& A,
const PetscInt& row,
const std::vector<PetscInt>& idxn);
14 PETSC_EXTERN PetscErrorCode CheckRow(
const Mat& A,
const char* label,
const PetscInt& row,
const std::vector<PetscInt>& idxn,
15 const std::vector<PetscScalar>& v);
16 PETSC_EXTERN
const char hborder[];
18 #define PrintHeader(COMM,TEXT) PetscPrintf((COMM), "%s\n%s\n%s\n", hborder, (TEXT), hborder) 20 static PetscBool verbose = PETSC_FALSE;
23 PetscErrorCode TestKron01();
26 PetscErrorCode TestKron02();
28 int main(
int argc,
char **argv)
30 PetscErrorCode ierr = 0;
31 ierr = SlepcInitialize(&argc, &argv, (
char*)0, help); CHKERRQ(ierr);
32 ierr = PetscOptionsGetBool(NULL,NULL,
"-verbose",&verbose,NULL); CHKERRQ(ierr);
34 ierr = TestKron02(); CHKERRQ(ierr);
35 ierr = SlepcFinalize(); CHKERRQ(ierr);
39 PetscErrorCode TestKron01()
41 PetscErrorCode ierr = 0;
42 MPI_Comm& comm = PETSC_COMM_WORLD;
43 PetscMPIInt nprocs, rank;
44 ierr = MPI_Comm_size(comm, &nprocs); CHKERRQ(ierr);
45 ierr = MPI_Comm_rank(comm, &rank); CHKERRQ(ierr);
49 ierr = LeftBlock.
Initialize(PETSC_COMM_WORLD, 3, {+0.5,-0.5}, {2,1}); CHKERRQ(ierr);
51 SetRow( LeftBlock.
Sz(0),0, {0, 1 });
52 SetRow( LeftBlock.
Sz(0),1, { 1 });
53 SetRow( LeftBlock.
Sz(0),2, { 2 });
55 SetRow( LeftBlock.
Sz(1),0, {0 });
56 SetRow( LeftBlock.
Sz(1),1, { 1 });
57 SetRow( LeftBlock.
Sz(1),2, { 2 });
59 SetRow( LeftBlock.
Sz(2),0, { 1 });
60 SetRow( LeftBlock.
Sz(2),1, { });
61 SetRow( LeftBlock.
Sz(2),2, { 2 });
63 SetRow( LeftBlock.
Sp(0),0, { 2 });
64 SetRow( LeftBlock.
Sp(0),1, { });
65 SetRow( LeftBlock.
Sp(0),2, { });
67 SetRow( LeftBlock.
Sp(1),0, { 2 });
68 SetRow( LeftBlock.
Sp(1),1, { 2 });
69 SetRow( LeftBlock.
Sp(1),2, { });
71 SetRow( LeftBlock.
Sp(2),0, { });
72 SetRow( LeftBlock.
Sp(2),1, { 2 });
73 SetRow( LeftBlock.
Sp(2),2, { });
75 ierr = RightBlock.
Initialize(PETSC_COMM_WORLD, 2, {+1.,0.,-1.}, {1,2,1}); CHKERRQ(ierr);
77 SetRow(RightBlock.
Sz(0),0, {0 });
78 SetRow(RightBlock.
Sz(0),1, { 1 });
79 SetRow(RightBlock.
Sz(0),2, { 1, 2 });
80 SetRow(RightBlock.
Sz(0),3, { 3});
82 SetRow(RightBlock.
Sz(1),0, {0 });
83 SetRow(RightBlock.
Sz(1),1, { 1, 2 });
84 SetRow(RightBlock.
Sz(1),2, { 2 });
85 SetRow(RightBlock.
Sz(1),3, { });
87 SetRow(RightBlock.
Sp(0),0, { 1 });
88 SetRow(RightBlock.
Sp(0),1, { 3});
89 SetRow(RightBlock.
Sp(0),2, { 3});
90 SetRow(RightBlock.
Sp(0),3, { });
92 SetRow(RightBlock.
Sp(1),0, { 1, 2 });
93 SetRow(RightBlock.
Sp(1),1, { });
94 SetRow(RightBlock.
Sp(1),2, { 3});
95 SetRow(RightBlock.
Sp(1),3, { });
101 ierr = MatPeek(BlockOut.
Sz(0),
"BlockOut.Sz(0)"); CHKERRQ(ierr);
102 ierr = MatPeek(BlockOut.
Sz(1),
"BlockOut.Sz(1)"); CHKERRQ(ierr);
103 ierr = MatPeek(BlockOut.
Sz(2),
"BlockOut.Sz(2)"); CHKERRQ(ierr);
104 ierr = MatPeek(BlockOut.
Sz(3),
"BlockOut.Sz(3)"); CHKERRQ(ierr);
105 ierr = MatPeek(BlockOut.
Sz(4),
"BlockOut.Sz(4)"); CHKERRQ(ierr);
107 ierr = MatPeek(BlockOut.
Sp(0),
"BlockOut.Sp(0)"); CHKERRQ(ierr);
108 ierr = MatPeek(BlockOut.
Sp(1),
"BlockOut.Sp(1)"); CHKERRQ(ierr);
109 ierr = MatPeek(BlockOut.
Sp(2),
"BlockOut.Sp(2)"); CHKERRQ(ierr);
110 ierr = MatPeek(BlockOut.
Sp(3),
"BlockOut.Sp(3)"); CHKERRQ(ierr);
111 ierr = MatPeek(BlockOut.
Sp(4),
"BlockOut.Sp(4)"); CHKERRQ(ierr);
117 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 0, {0,1}, {0,1}); CHKERRQ(ierr);
118 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 1, {1}, {1}); CHKERRQ(ierr);
119 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 2, {2,4}, {0,1}); CHKERRQ(ierr);
120 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 3, {3,5}, {0,1}); CHKERRQ(ierr);
121 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 4, { 4}, { 1}); CHKERRQ(ierr);
122 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 5, { 5}, { 1}); CHKERRQ(ierr);
123 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 6, {6}, {2}); CHKERRQ(ierr);
124 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 7, {7,8}, {0,1}); CHKERRQ(ierr);
125 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 8, {8}, {1}); CHKERRQ(ierr);
126 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 9, {9}, {2}); CHKERRQ(ierr);
127 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 10, {10}, {2}); CHKERRQ(ierr);
128 ierr = CheckRow(BlockOut.
Sz(0),
"BlockOut.Sz(0)", 11, {11}, {2}); CHKERRQ(ierr);
130 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 0, {0}, {0}); CHKERRQ(ierr);
131 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 1, {1}, {1}); CHKERRQ(ierr);
132 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 2, {2}, {0}); CHKERRQ(ierr);
133 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 3, {3}, {0}); CHKERRQ(ierr);
134 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 4, {4}, {1}); CHKERRQ(ierr);
135 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 5, {5}, {1}); CHKERRQ(ierr);
136 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 6, {6}, {2}); CHKERRQ(ierr);
137 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 7, {7}, {0}); CHKERRQ(ierr);
138 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 8, {8}, {1}); CHKERRQ(ierr);
139 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 9, {9}, {2}); CHKERRQ(ierr);
140 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 10, {10}, {2}); CHKERRQ(ierr);
141 ierr = CheckRow(BlockOut.
Sz(1),
"BlockOut.Sz(1)", 11, {11}, {2}); CHKERRQ(ierr);
143 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 0, {1}, {1}); CHKERRQ(ierr);
144 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 1, {}, {}); CHKERRQ(ierr);
145 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 2, {4}, {1}); CHKERRQ(ierr);
146 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 3, {5}, {1}); CHKERRQ(ierr);
147 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 4, {}, {}); CHKERRQ(ierr);
148 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 5, {}, {}); CHKERRQ(ierr);
149 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 6, {6}, {2}); CHKERRQ(ierr);
150 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 7, {8}, {1}); CHKERRQ(ierr);
151 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 8, {}, {}); CHKERRQ(ierr);
152 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 9, {9}, {2}); CHKERRQ(ierr);
153 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 10, {10}, {2}); CHKERRQ(ierr);
154 ierr = CheckRow(BlockOut.
Sz(2),
"BlockOut.Sz(2)", 11, {11}, {2}); CHKERRQ(ierr);
156 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 0, {6}, {2}); CHKERRQ(ierr);
157 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 1, {}, {}); CHKERRQ(ierr);
158 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 2, {9}, {2}); CHKERRQ(ierr);
159 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 3, {10}, {2}); CHKERRQ(ierr);
160 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 4, {}, {}); CHKERRQ(ierr);
161 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 5, {}, {}); CHKERRQ(ierr);
162 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 6, {}, {}); CHKERRQ(ierr);
163 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 7, {11}, {2}); CHKERRQ(ierr);
164 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 8, {}, {}); CHKERRQ(ierr);
165 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 9, {}, {}); CHKERRQ(ierr);
166 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 10, {}, {}); CHKERRQ(ierr);
167 ierr = CheckRow(BlockOut.
Sp(0),
"BlockOut.Sp(0)", 11, {}, {}); CHKERRQ(ierr);
169 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 0, {6}, {2}); CHKERRQ(ierr);
170 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 1, {6}, {2}); CHKERRQ(ierr);
171 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 2, {9}, {2}); CHKERRQ(ierr);
172 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 3, {10}, {2}); CHKERRQ(ierr);
173 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 4, {9}, {2}); CHKERRQ(ierr);
174 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 5, {10}, {2}); CHKERRQ(ierr);
175 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 6, {}, {}); CHKERRQ(ierr);
176 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 7, {11}, {2}); CHKERRQ(ierr);
177 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 8, {11}, {2}); CHKERRQ(ierr);
178 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 9, {}, {}); CHKERRQ(ierr);
179 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 10, {}, {}); CHKERRQ(ierr);
180 ierr = CheckRow(BlockOut.
Sp(1),
"BlockOut.Sp(1)", 11, {}, {}); CHKERRQ(ierr);
182 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 0, {}, {}); CHKERRQ(ierr);
183 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 1, {6}, {2}); CHKERRQ(ierr);
184 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 2, {}, {}); CHKERRQ(ierr);
185 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 3, {}, {}); CHKERRQ(ierr);
186 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 4, {9}, {2}); CHKERRQ(ierr);
187 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 5, {10}, {2}); CHKERRQ(ierr);
188 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 6, {}, {}); CHKERRQ(ierr);
189 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 7, {}, {}); CHKERRQ(ierr);
190 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 8, {11}, {2}); CHKERRQ(ierr);
191 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 9, {}, {}); CHKERRQ(ierr);
192 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 10, {}, {}); CHKERRQ(ierr);
193 ierr = CheckRow(BlockOut.
Sp(2),
"BlockOut.Sp(2)", 11, {}, {}); CHKERRQ(ierr);
195 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 0, {0}, {0}); CHKERRQ(ierr);
196 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 1, {1}, {0}); CHKERRQ(ierr);
197 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 2, {2}, {1}); CHKERRQ(ierr);
198 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 3, {2, 3}, {1, 2}); CHKERRQ(ierr);
199 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 4, {4}, {1}); CHKERRQ(ierr);
200 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 5, {4,5}, {1,2}); CHKERRQ(ierr);
201 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 6, {6}, {0}); CHKERRQ(ierr);
202 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 7, {7}, {3}); CHKERRQ(ierr);
203 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 8, {8}, {3}); CHKERRQ(ierr);
204 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 9, {9}, {1}); CHKERRQ(ierr);
205 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 10, {9,10}, {1,2}); CHKERRQ(ierr);
206 ierr = CheckRow(BlockOut.
Sz(3),
"BlockOut.Sz(3)", 11, {11}, {3}); CHKERRQ(ierr);
208 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 0, {0}, {0}); CHKERRQ(ierr);
209 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 1, {1}, {0}); CHKERRQ(ierr);
210 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 2, {2,3}, {1,2}); CHKERRQ(ierr);
211 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 3, {3}, {2}); CHKERRQ(ierr);
212 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 4, {4,5}, {1,2}); CHKERRQ(ierr);
213 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 5, {5}, {2}); CHKERRQ(ierr);
214 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 6, {6}, {0}); CHKERRQ(ierr);
215 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 7, {}, {}); CHKERRQ(ierr);
216 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 8, {}, {}); CHKERRQ(ierr);
217 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 9, {9,10}, {1,2}); CHKERRQ(ierr);
218 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 10, {10}, {2}); CHKERRQ(ierr);
219 ierr = CheckRow(BlockOut.
Sz(4),
"BlockOut.Sz(4)", 11, {}, {}); CHKERRQ(ierr);
221 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 0, {2}, {1}); CHKERRQ(ierr);
222 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 1, {4}, {1}); CHKERRQ(ierr);
223 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 2, {7}, {3}); CHKERRQ(ierr);
224 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 3, {7}, {3}); CHKERRQ(ierr);
225 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 4, {8}, {3}); CHKERRQ(ierr);
226 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 5, {8}, {3}); CHKERRQ(ierr);
227 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 6, {9}, {1}); CHKERRQ(ierr);
228 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 7, {}, {}); CHKERRQ(ierr);
229 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 8, {}, {}); CHKERRQ(ierr);
230 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 9, {11}, {3}); CHKERRQ(ierr);
231 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 10, {11}, {3}); CHKERRQ(ierr);
232 ierr = CheckRow(BlockOut.
Sp(3),
"BlockOut.Sp(3)", 11, {}, {}); CHKERRQ(ierr);
234 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 0, {2,3}, {1,2}); CHKERRQ(ierr);
235 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 1, {4,5}, {1,2}); CHKERRQ(ierr);
236 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 2, {}, {}); CHKERRQ(ierr);
237 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 3, {7}, {3}); CHKERRQ(ierr);
238 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 4, {}, {}); CHKERRQ(ierr);
239 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 5, {8}, {3}); CHKERRQ(ierr);
240 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 6, {9,10}, {1,2}); CHKERRQ(ierr);
241 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 7, {}, {}); CHKERRQ(ierr);
242 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 8, {}, {}); CHKERRQ(ierr);
243 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 9, {}, {}); CHKERRQ(ierr);
244 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 10, {11}, {3}); CHKERRQ(ierr);
245 ierr = CheckRow(BlockOut.
Sp(4),
"BlockOut.Sp(4)", 11, {}, {}); CHKERRQ(ierr);
247 ierr = RightBlock.
Destroy(); CHKERRQ(ierr);
248 ierr = LeftBlock.
Destroy(); CHKERRQ(ierr);
249 ierr = BlockOut.
Destroy(); CHKERRQ(ierr);
255 PetscErrorCode TestKron02()
258 PetscErrorCode ierr = 0;
259 MPI_Comm& comm = PETSC_COMM_WORLD;
260 PetscMPIInt nprocs, rank;
261 ierr = MPI_Comm_size(comm, &nprocs); CHKERRQ(ierr);
262 ierr = MPI_Comm_rank(comm, &rank); CHKERRQ(ierr);
266 ierr = LeftBlock.
Initialize(PETSC_COMM_WORLD, 1, PETSC_DEFAULT); CHKERRQ(ierr);
267 ierr = RightBlock.
Initialize(PETSC_COMM_WORLD, 1, PETSC_DEFAULT); CHKERRQ(ierr);
269 ierr =
KronEye_Explicit(LeftBlock, RightBlock, {}, BlockOut); CHKERRQ(ierr);
271 ierr = RightBlock.
Destroy(); CHKERRQ(ierr);
272 ierr = LeftBlock.
Destroy(); CHKERRQ(ierr);
273 ierr = BlockOut.
Destroy(); CHKERRQ(ierr);
Base class for the implementation of a block of spin sites.
PetscErrorCode KronEye_Explicit(Block::SpinBase &LeftBlock, Block::SpinBase &RightBlock, const std::vector< Hamiltonians::Term > &Terms, Block::SpinBase &BlockOut)
Calculates a new block combining two spin-1/2 blocks.
PetscErrorCode CheckOperatorBlocks() const
Checks whether all matrix blocks follow the correct sector indices using MatCheckOperatorBlocks() ...
Mat Sz(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.
PetscErrorCode Destroy()
Destroys all operator matrices and frees memory.
PetscErrorCode Initialize(const MPI_Comm &comm_in)
Initializes block object's MPI attributes.
Mat Sp(const PetscInt &Isite) const
Returns the matrix pointer to the operator at site Isite.