ExaTN
tensor_leg.hpp
1 
13 #ifndef EXATN_NUMERICS_TENSOR_LEG_HPP_
14 #define EXATN_NUMERICS_TENSOR_LEG_HPP_
15 
16 #include "tensor_basic.hpp"
17 
18 #include <iostream>
19 #include <vector>
20 
21 namespace exatn{
22 
23 namespace numerics{
24 
25 inline LegDirection reverseLegDirection(LegDirection dir){
26  if(dir == LegDirection::INWARD) return LegDirection::OUTWARD;
27  if(dir == LegDirection::OUTWARD) return LegDirection::INWARD;
28  return LegDirection::UNDIRECT;
29 }
30 
31 
32 class TensorLeg{
33 public:
34 
36  TensorLeg(unsigned int tensor_id,
37  unsigned int dimensn_id,
38  LegDirection direction = LegDirection::UNDIRECT);
39 
40  TensorLeg(const TensorLeg & tens_leg) = default;
41  TensorLeg & operator=(const TensorLeg & tens_leg) = default;
42  TensorLeg(TensorLeg && tens_leg) noexcept = default;
43  TensorLeg & operator=(TensorLeg && tens_leg) noexcept = default;
44  virtual ~TensorLeg() = default;
45 
47  void printIt() const;
48 
50  unsigned int getTensorId() const;
51 
53  unsigned int getDimensionId() const;
54 
56  LegDirection getDirection() const;
57 
59  void resetConnection(unsigned int tensor_id,
60  unsigned int dimensn_id,
61  LegDirection direction = LegDirection::UNDIRECT);
62 
64  void resetTensorId(unsigned int tensor_id);
65 
67  void resetDimensionId(unsigned int dimensn_id);
68 
70  void resetDirection(LegDirection direction);
71 
73  void reverseDirection();
74 
75 private:
76 
77  unsigned int tensor_id_; //id of the connected tensor [0..*]
78  unsigned int dimensn_id_; //dimension id in the connected tensor [0..*]
79  LegDirection direction_; //direction of the leg: {UNDIRECT, INWARD, OUTWARD}, defaults to UNDIRECT
80 };
81 
82 
85 bool tensorLegsAreCongruent(const std::vector<TensorLeg> * legs0,
86  const std::vector<TensorLeg> * legs1);
87 
88 } //namespace numerics
89 
90 } //namespace exatn
91 
92 #endif //EXATN_NUMERICS_TENSOR_LEG_HPP_
exatn::numerics::TensorLeg::getDimensionId
unsigned int getDimensionId() const
Definition: tensor_leg.cpp:37
exatn::numerics::TensorLeg::resetDirection
void resetDirection(LegDirection direction)
Definition: tensor_leg.cpp:69
exatn::numerics::TensorLeg::resetConnection
void resetConnection(unsigned int tensor_id, unsigned int dimensn_id, LegDirection direction=LegDirection::UNDIRECT)
Definition: tensor_leg.cpp:47
exatn::numerics::TensorLeg::reverseDirection
void reverseDirection()
Definition: tensor_leg.cpp:75
exatn
Definition: DriverClient.hpp:10
exatn::numerics::TensorLeg::getTensorId
unsigned int getTensorId() const
Definition: tensor_leg.cpp:32
exatn::numerics::TensorLeg::resetTensorId
void resetTensorId(unsigned int tensor_id)
Definition: tensor_leg.cpp:57
exatn::numerics::TensorLeg::TensorLeg
TensorLeg(unsigned int tensor_id, unsigned int dimensn_id, LegDirection direction=LegDirection::UNDIRECT)
Definition: tensor_leg.cpp:13
exatn::numerics::TensorLeg
Definition: tensor_leg.hpp:32
exatn::numerics::TensorLeg::resetDimensionId
void resetDimensionId(unsigned int dimensn_id)
Definition: tensor_leg.cpp:63
exatn::numerics::TensorLeg::printIt
void printIt() const
Definition: tensor_leg.cpp:20
exatn::numerics::TensorLeg::getDirection
LegDirection getDirection() const
Definition: tensor_leg.cpp:42