CheMPS2
|
#include <TensorOperator.h>
Public Member Functions | |
TensorOperator (const int boundary_index, const int two_j, const int n_elec, const int n_irrep, const bool moving_right, const bool prime_last, const bool jw_phase, const SyBookkeeper *bk_up, const SyBookkeeper *bk_down) | |
Constructor. More... | |
virtual | ~TensorOperator () |
Destructor. | |
int | gNKappa () const |
Get the number of symmetry blocks. More... | |
double * | gStorage () |
Get the pointer to the storage. More... | |
int | gKappa (const int N1, const int TwoS1, const int I1, const int N2, const int TwoS2, const int I2) const |
Get the index corresponding to a certain tensor block. More... | |
int | gKappa2index (const int kappa) const |
Get the storage jump corresponding to a certain tensor block. More... | |
double * | gStorage (const int N1, const int TwoS1, const int I1, const int N2, const int TwoS2, const int I2) |
Get the pointer to the storage of a certain tensor block. More... | |
int | gIndex () const |
Get the boundary index. More... | |
int | get_2j () const |
Get twice the spin of the tensor operator. More... | |
int | get_nelec () const |
Get how many electrons there are more in the symmetry sector of the lower leg compared to the upper leg. More... | |
int | get_irrep () const |
Get the (real-valued abelian) point group irrep difference between the symmetry sectors of the lower and upper legs (see Irreps.h) More... | |
void | update (TensorOperator *previous, TensorT *mps_tensor_up, TensorT *mps_tensor_down, double *workmem) |
Clear and update. More... | |
void | daxpy (double alpha, TensorOperator *to_add) |
daxpy for TensorOperator More... | |
void | daxpy_transpose_tensorCD (const double alpha, TensorOperator *to_add) |
daxpy_transpose for C- and D-tensors (with special spin-dependent factors) More... | |
void | clear () |
Set all storage variables to 0.0. | |
double | inproduct (TensorOperator *buddy, const char trans) const |
Make the in-product of two TensorOperator. More... | |
Protected Member Functions | |
void | update_moving_right (const int ikappa, TensorOperator *previous, TensorT *mps_tensor_up, TensorT *mps_tensor_down, double *workmem) |
Update moving right. More... | |
void | update_moving_left (const int ikappa, TensorOperator *previous, TensorT *mps_tensor_up, TensorT *mps_tensor_down, double *workmem) |
Update moving left. More... | |
Protected Attributes | |
const SyBookkeeper * | bk_up |
The bookkeeper of the upper MPS. | |
const SyBookkeeper * | bk_down |
The bookkeeper of the lower MPS. | |
int | two_j |
Twice the spin of the tensor operator. | |
int | n_elec |
How many electrons there are more in the symmetry sector of the lower leg compared to the upper leg. | |
int | n_irrep |
The (real-valued abelian) point group irrep difference between the symmetry sectors of the lower and upper legs (see Irreps.h) | |
bool | moving_right |
Whether or not moving right. | |
int * | sector_nelec_up |
The up particle number sector. | |
int * | sector_irrep_up |
The up spin symmetry sector. | |
int * | sector_spin_up |
The up spin symmetry sector. | |
int * | sector_spin_down |
The down spin symmetry sector (pointer points to sectorTwoS1 if two_j == 0) | |
bool | prime_last |
Convention in which the tensor operator is stored (see class information) | |
bool | jw_phase |
Whether or not to include a Jordan-Wigner phase due to the fermion anti-commutation relations. | |
Protected Attributes inherited from CheMPS2::Tensor | |
int | index |
Index of the Tensor object. For TensorT: a site index; for other tensors: a boundary index. | |
double * | storage |
The actual variables. Tensor block kappa begins at storage+kappa2index[kappa] and ends at storage+kappa2index[kappa+1]. | |
int | nKappa |
Number of Tensor blocks. | |
int * | kappa2index |
kappa2index[kappa] indicates the start of tensor block kappa in storage. kappa2index[nKappa] gives the size of storage. | |
TensorOperator class.
The TensorOperator class is a storage and update class for tensor operators with a given:
It replaces the previous classes TensorDiag, TensorSwap, TensorS0Abase, TensorS1Bbase, TensorF0Cbase, TensorF1Dbase, TensorA, TensorB, TensorC, and TensorD. Their storage and update functions have a common origin. The boolean prime_last denotes whether in which convention the tensor operator is stored:
This determines the specific reduced update formulae when contracting with the Clebsch-Gordan coefficients of the reduced MPS tensors.
Definition at line 42 of file TensorOperator.h.
CheMPS2::TensorOperator::TensorOperator | ( | const int | boundary_index, |
const int | two_j, | ||
const int | n_elec, | ||
const int | n_irrep, | ||
const bool | moving_right, | ||
const bool | prime_last, | ||
const bool | jw_phase, | ||
const SyBookkeeper * | bk_up, | ||
const SyBookkeeper * | bk_down | ||
) |
Constructor.
boundary_index | The boundary index |
two_j | Twice the spin of the tensor operator |
n_elec | How many electrons there are more in the symmetry sector of the lower leg compared to the upper leg |
n_irrep | The (real-valued abelian) point group irrep difference between the symmetry sectors of the lower and upper legs (see Irreps.h) |
moving_right | If true: sweep from left to right. If false: sweep from right to left. |
prime_last | Convention in which the tensor operator is stored (see class information) |
jw_phase | Whether or not to include a Jordan-Wigner phase due to the fermion anti-commutation relations |
bk_up | Symmetry bookkeeper of the upper MPS |
bk_down | Symmetry bookkeeper of the lower MPS |
Definition at line 29 of file TensorOperator.cpp.
void CheMPS2::TensorOperator::daxpy | ( | double | alpha, |
TensorOperator * | to_add | ||
) |
daxpy for TensorOperator
alpha | The prefactor |
to_add | The TensorOperator x which should be added: this <– this + alpha * to_add |
Definition at line 407 of file TensorOperator.cpp.
void CheMPS2::TensorOperator::daxpy_transpose_tensorCD | ( | const double | alpha, |
TensorOperator * | to_add | ||
) |
daxpy_transpose for C- and D-tensors (with special spin-dependent factors)
alpha | The prefactor |
to_add | The TensorOperator x which should be added: this <– this + alpha * special_spin_dependent_factor * to_add^T |
Definition at line 416 of file TensorOperator.cpp.
int CheMPS2::TensorOperator::get_2j | ( | ) | const |
Get twice the spin of the tensor operator.
Definition at line 151 of file TensorOperator.cpp.
int CheMPS2::TensorOperator::get_irrep | ( | ) | const |
Get the (real-valued abelian) point group irrep difference between the symmetry sectors of the lower and upper legs (see Irreps.h)
Definition at line 155 of file TensorOperator.cpp.
int CheMPS2::TensorOperator::get_nelec | ( | ) | const |
Get how many electrons there are more in the symmetry sector of the lower leg compared to the upper leg.
Definition at line 153 of file TensorOperator.cpp.
|
virtual |
Get the boundary index.
Implements CheMPS2::Tensor.
Definition at line 149 of file TensorOperator.cpp.
|
virtual |
Get the index corresponding to a certain tensor block.
N1 | The up particle number sector |
TwoS1 | The up spin symmetry sector |
I1 | The up irrep sector |
N2 | The down particle number sector |
TwoS2 | The down spin symmetry sector |
I2 | The down irrep sector |
Implements CheMPS2::Tensor.
Definition at line 119 of file TensorOperator.cpp.
|
virtual |
Get the storage jump corresponding to a certain tensor block.
kappa | The symmetry block |
Implements CheMPS2::Tensor.
Definition at line 139 of file TensorOperator.cpp.
|
virtual |
Get the number of symmetry blocks.
Implements CheMPS2::Tensor.
Definition at line 115 of file TensorOperator.cpp.
|
virtual |
Get the pointer to the storage.
return pointer to the storage
Implements CheMPS2::Tensor.
Definition at line 117 of file TensorOperator.cpp.
|
virtual |
Get the pointer to the storage of a certain tensor block.
N1 | The up particle number sector |
TwoS1 | The up spin symmetry sector |
I1 | The up irrep sector |
N2 | The down particle number sector |
TwoS2 | The down spin symmetry sector |
I2 | The down irrep sector |
Implements CheMPS2::Tensor.
Definition at line 141 of file TensorOperator.cpp.
double CheMPS2::TensorOperator::inproduct | ( | TensorOperator * | buddy, |
const char | trans | ||
) | const |
Make the in-product of two TensorOperator.
buddy | The second tensor |
trans | If trans == 'N' a regular ddot is taken. If trans == 'T' and n_elec==0, the in-product with buddy's transpose is made. |
Definition at line 457 of file TensorOperator.cpp.
void CheMPS2::TensorOperator::update | ( | TensorOperator * | previous, |
TensorT * | mps_tensor_up, | ||
TensorT * | mps_tensor_down, | ||
double * | workmem | ||
) |
Clear and update.
previous | The previous TensorOperator needed for the update |
mps_tensor_up | The upper MPS tensor needed for the update |
mps_tensor_down | The lower MPS tensor needed for the update |
workmem | Work memory |
Definition at line 163 of file TensorOperator.cpp.
|
protected |
Update moving left.
ikappa | The tensor block which should be updated |
previous | The previous TensorOperator needed for the update |
mps_tensor_up | The upper MPS tensor needed for the update |
mps_tensor_down | The lower MPS tensor needed for the update |
workmem | Work memory |
Definition at line 293 of file TensorOperator.cpp.
|
protected |
Update moving right.
ikappa | The tensor block which should be updated |
previous | The previous TensorOperator needed for the update |
mps_tensor_up | The upper MPS tensor needed for the update |
mps_tensor_down | The lower MPS tensor needed for the update |
workmem | Work memory |
Definition at line 179 of file TensorOperator.cpp.