ExaTN
tensor_connected.hpp
1 
19 #ifndef EXATN_NUMERICS_TENSOR_CONNECTED_HPP_
20 #define EXATN_NUMERICS_TENSOR_CONNECTED_HPP_
21 
22 #include "tensor_basic.hpp"
23 #include "tensor_leg.hpp"
24 #include "tensor.hpp"
25 
26 #include <memory>
27 #include <vector>
28 
29 namespace exatn{
30 
31 namespace numerics{
32 
33 class TensorConn{
34 public:
35 
37  TensorConn(std::shared_ptr<Tensor> tensor, //in: co-owned pointer to the tensor
38  unsigned int id, //in: tensor id in the tensor network
39  const std::vector<TensorLeg> & legs, //in: tensor legs: Connections to other tensors in the tensor network
40  bool conjugated = false); //in: whether or not the tensor enters a tensor network as complex conjugated
41 
42  TensorConn(const TensorConn &) = default;
43  TensorConn & operator=(const TensorConn &) = default;
44  TensorConn(TensorConn &&) noexcept = default;
45  TensorConn & operator=(TensorConn &&) noexcept = default;
46  virtual ~TensorConn() = default;
47 
49  void printIt() const;
50 
52  unsigned int getNumLegs() const;
53 
55  bool isComplexConjugated() const;
56 
58  std::shared_ptr<Tensor> getTensor();
59 
61  unsigned int getTensorId() const;
62 
64  const TensorLeg & getTensorLeg(unsigned int leg_id) const;
65 
67  const std::vector<TensorLeg> & getTensorLegs() const;
68 
70  DimExtent getDimExtent(unsigned int dim_id) const;
71 
73  std::pair<SpaceId,SubspaceId> getDimSpaceAttr(unsigned int dim_id) const;
74 
76  void resetLeg(unsigned int leg_id, //in: leg id to reset
77  TensorLeg tensor_leg); //in: new leg configuration
78 
80  void deleteLeg(unsigned int leg_id); //in: leg id to delete
82  void deleteLegs(std::vector<unsigned int> & leg_ids); //inout: vector of leg ids to delete
83 
85  void appendLeg(std::pair<SpaceId,SubspaceId> subspace, //in: subspace defining the new leg
86  DimExtent dim_extent, //in: dimension extent of the new leg
87  TensorLeg tensor_leg); //in: new leg configuration
88  void appendLeg(DimExtent dim_extent,
89  TensorLeg tensor_leg);
90 
93  void conjugate();
94 
95 private:
96 
97  std::shared_ptr<Tensor> tensor_; //co-owned pointer to the tensor
98  unsigned int id_; //tensor id in the tensor network
99  std::vector<TensorLeg> legs_; //tensor legs: Connections to other tensors
100  bool conjugated_; //complex conjugation flag
101 };
102 
103 } //namespace numerics
104 
105 } //namespace exatn
106 
107 #endif //EXATN_NUMERICS_TENSOR_CONNECTED_HPP_
exatn::numerics::TensorConn::resetLeg
void resetLeg(unsigned int leg_id, TensorLeg tensor_leg)
Definition: tensor_connected.cpp:78
exatn::numerics::TensorConn::getDimSpaceAttr
std::pair< SpaceId, SubspaceId > getDimSpaceAttr(unsigned int dim_id) const
Definition: tensor_connected.cpp:73
exatn::numerics::TensorConn::getTensor
std::shared_ptr< Tensor > getTensor()
Definition: tensor_connected.cpp:47
exatn::numerics::TensorConn::TensorConn
TensorConn(std::shared_ptr< Tensor > tensor, unsigned int id, const std::vector< TensorLeg > &legs, bool conjugated=false)
Definition: tensor_connected.cpp:18
exatn::numerics::TensorConn::getTensorLeg
const TensorLeg & getTensorLeg(unsigned int leg_id) const
Definition: tensor_connected.cpp:57
exatn
Definition: DriverClient.hpp:10
exatn::numerics::TensorConn::isComplexConjugated
bool isComplexConjugated() const
Definition: tensor_connected.cpp:42
exatn::numerics::TensorConn
Definition: tensor_connected.hpp:33
exatn::numerics::TensorConn::getTensorId
unsigned int getTensorId() const
Definition: tensor_connected.cpp:52
exatn::numerics::TensorLeg
Definition: tensor_leg.hpp:32
exatn::numerics::TensorConn::getTensorLegs
const std::vector< TensorLeg > & getTensorLegs() const
Definition: tensor_connected.cpp:63
exatn::numerics::TensorConn::printIt
void printIt() const
Definition: tensor_connected.cpp:26
exatn::numerics::TensorConn::deleteLegs
void deleteLegs(std::vector< unsigned int > &leg_ids)
Definition: tensor_connected.cpp:95
exatn::numerics::TensorConn::conjugate
void conjugate()
Definition: tensor_connected.cpp:121
exatn::numerics::TensorConn::deleteLeg
void deleteLeg(unsigned int leg_id)
Definition: tensor_connected.cpp:87
exatn::numerics::TensorConn::appendLeg
void appendLeg(std::pair< SpaceId, SubspaceId > subspace, DimExtent dim_extent, TensorLeg tensor_leg)
Definition: tensor_connected.cpp:108
exatn::numerics::TensorConn::getNumLegs
unsigned int getNumLegs() const
Definition: tensor_connected.cpp:37
exatn::numerics::TensorConn::getDimExtent
DimExtent getDimExtent(unsigned int dim_id) const
Definition: tensor_connected.cpp:68