Skip to content

tJDistributed

A block in a \(t-J\) type Hilbert space, i.e. fermions with \(\uparrow, \downarrow\) spin excluding doubly occupied sites with distributed computing capabilities.

Sources: tj_distributed.hpp · tj_distributed.cpp

Constructors

tJDistributed(int64_t nsites, int64_t nup, int64_t ndn);
Name Description Default
nsites number of sites (integer)
nup number of "up" electrons (integer)
ndn number of "dn" electrons (integer)

Local configurations and operators

A tJDistributed block describes the same local Hilbert space as the shared-memory tJ block, only the basis states are distributed across MPI processes. The local configuration encoding (0 = empty, 1 = ↑, 2 = ↓) is therefore identical to the tJ block.

Unlike the shared-memory block, the distributed block only supports the operators that have a dedicated distributed kernel. These are:

Cdagup, Cup, Cdagdn, Cdn, Hopup, Hopdn, HopupAsym, HopdnAsym, Nup, Ndn, NtotNtot, SzSz, tJSzSz, Exchange, ExchangeAsym, and Id.

Their definitions are given in the tJ operators table.

Iteration

An tJDistributed block can be iterated over, where at each iteration a ProductState representing the corresponding basis state is returned.

auto block = tJDistributed(4, 2, 1);
for (auto pstate : block) {
    Log("{} {}", to_string(pstate), block.index(pstate));
}

Methods

index

Returns the index of a given ProductState in the basis of the tJDistributed block.

int64_t tJDistributed::index(ProductState const &pstate);

nsites

Returns the number of sites of the block.

int64_t nsites(tJDistributed const &block);

size

Returns the size of the block on a local process.

int64_t size(tJDistributed const &block) const;

dim

Returns the dimension of the block, i.e. the sum of all sizes across all processes.

int64_t dim(tJDistributed const &block) const;

isreal

Returns whether the block can be used with real arithmetic. Complex arithmetic is needed when a Representation is genuinely complex.

bool isreal(tJDistributed const &block);