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 (realvalued 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 Dtensors (with special spindependent factors) More...  
void  clear () 
Set all storage variables to 0.0.  
double  inproduct (TensorOperator *buddy, const char trans) const 
Make the inproduct 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 (realvalued 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 JordanWigner phase due to the fermion anticommutation 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 ClebschGordan 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 (realvalued 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 JordanWigner phase due to the fermion anticommutation 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 Dtensors (with special spindependent 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 (realvalued 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 inproduct of two TensorOperator.
buddy  The second tensor 
trans  If trans == 'N' a regular ddot is taken. If trans == 'T' and n_elec==0, the inproduct 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.