Electron
Representation of a block in a Electron (spinful fermion) Hilbert space.
Source electron.hpp
Constructors
Name | Description | |
---|---|---|
n_sites | number of sites (integer) | |
n_up | number of "up" electrons (integer) | |
n_dn | number of "dn" electrons (integer) | |
group | PermutationGroup defining the permutation symmetries | |
irrep | Irreducible Representation of the symmetry group |
Iteration
An Electron block can be iterated over, where at each iteration a ProductState representing the corresponding basis state is returned.
Methods
index
Returns the index of a given ProductState in the basis of the Electron block.
1-indexing
In the C++ version, the index count starts from "0" whereas in Julia the index count starts from "1".
permutation_group
Returns the PermutationGroup of the block, if defined.
irrep
Returns the Representation of the block, if defined.
dim
Returns the dimension of the block, same as "size" for non-distributed blocks.
isreal
Returns whether the block can be used with real arithmetic. Complex arithmetic is needed when a Representation is genuinely complex.
Usage Example
N = 4
nup = 2
ndn = 1
# without number conservation
block = Electron(N)
@show block
# with number conservation
block_np = Electron(N, nup, ndn)
@show block_np
# with symmetries, without number conservation
p1 = Permutation([1, 2, 3, 4])
p2 = Permutation([2, 3, 4, 1])
p3 = Permutation([3, 4, 1, 2])
p4 = Permutation([4, 1, 2, 3])
group = PermutationGroup([p1, p2, p3, p4])
rep = Representation([1, -1, 1, -1])
block_sym = Electron(N, group, rep)
@show block_sym
# with symmetries and number conservation
block_sym_np = Electron(N, nup, ndn, group, rep)
@show block_sym_np
@show n_sites(block_sym_np)
@show size(block_sym_np)
# Iteration
for pstate in block_sym_np
@show pstate, index(block_sym_np, pstate)
end
@show permutation_group(block_sym_np)
@show irrep(block_sym_np)
int N = 4;
int nup = 2;
int ndn = 1;
// without number conservation
auto block = Electron(N);
XDIAG_SHOW(block);
// with number conservation
auto block_np = Electron(N, nup, ndn);
XDIAG_SHOW(block_np);
// with symmetries, without number conservation
auto p1 = Permutation({0, 1, 2, 3});
auto p2 = Permutation({1, 2, 3, 0});
auto p3 = Permutation({2, 3, 0, 1});
auto p4 = Permutation({3, 0, 1, 2});
auto group = PermutationGroup({p1, p2, p3, p4});
auto irrep = Representation({1, -1, 1, -1});
auto block_sym = Electron(N, group, irrep);
XDIAG_SHOW(block_sym);
// with symmetries and number conservation
auto block_sym_np = Electron(N, nup, ndn, group, irrep);
XDIAG_SHOW(block_sym_np);
XDIAG_SHOW(block_sym_np.n_sites());
XDIAG_SHOW(block_sym_np.size());
// Iteration
for (auto pstate : block_sym_np) {
Log("{} {}", to_string(pstate), block_sym_np.index(pstate));
}
XDIAG_SHOW(block_sym_np.permutation_group());
XDIAG_SHOW(block_sym_np.irrep());