66 debug_constructor_printf(1);
68 if(this->
totalSpace().sysSize() == 0) {
return; }
69
71 debug_printf("%s:\n\t this->totalSpace().dim()=%d, this->totalSpace().transEqDim()=%d, "
72 "this->totalSpace().transPeriod().sum()=%d\n",
76
80 Eigen::ArrayX<bool> calculated;
81 calculated = Eigen::ArrayX<bool>::Constant(this->
totalSpace().transEqDim(),
false);
83 if(calculated(eqClass)) continue;
84 calculated(eqClass) = true;
88 calculated(reversed) = true;
89
90
91
94 }
96 std::cout <<
"m_parity = " <<
m_parity <<
", dim = " <<
dim
98
99#ifdef __CUDA_ARCH__
101
102 int nonZeroId = 0, classIdx = 0;
104 calculated = Eigen::ArrayX<bool>::Constant(this->
totalSpace().transEqDim(),
false);
106 if(calculated(eqClass)) continue;
107 calculated(eqClass) = true;
111 calculated(reversed) = true;
112 if(eqClass != reversed) continue;
113
119 = 1.0 / RealType(sqrt(RealType(this->
totalSpace().transPeriod(eqClass))));
120 ++nonZeroId;
121 }
122 ++classIdx;
123 }
124 }
125
126 calculated = Eigen::ArrayX<bool>::Constant(this->
totalSpace().transEqDim(),
false);
128 if(calculated(eqClass)) continue;
129 calculated(eqClass) = true;
133 calculated(reversed) = true;
134 if(eqClass == reversed) continue;
135
141 = 1.0 / RealType(sqrt(RealType(2 * this->
totalSpace().transPeriod(eqClass))));
142 ++nonZeroId;
143 }
149 ++nonZeroId;
150 }
151 ++classIdx;
152 }
153 assert(
dim == classIdx &&
"dim == classIdx");
156 for(
int eqClass = 0; eqClass !=
dim; ++eqClass) {
157 thrust::sort_by_key(
158 thrust::seq, this->
basis().innerIndexPtr() + this->
basis().outerIndexPtr()[eqClass],
159 this->
basis().innerIndexPtr() + this->
basis().outerIndexPtr()[eqClass + 1],
160 this->
basis().valuePtr() + this->
basis().outerIndexPtr()[eqClass]);
161 }
162#else
164 this->
basis().reserve(Eigen::VectorXi::Constant(
dim, 2 * L));
165
166 int classIdx = 0;
168 calculated = Eigen::ArrayX<bool>::Constant(this->
totalSpace().transEqDim(),
false);
170 if(calculated(eqClass)) continue;
171 calculated(eqClass) = true;
175 calculated(reversed) = true;
176 if(eqClass != reversed) continue;
177
180 this->
basis().insert(state, classIdx)
181 = 1.0 / RealType(sqrt(RealType(this->
totalSpace().transPeriod(eqClass))));
182 }
183 ++classIdx;
184 }
185 }
186
187 calculated = Eigen::ArrayX<bool>::Constant(this->
totalSpace().transEqDim(),
false);
189 if(calculated(eqClass)) continue;
190 calculated(eqClass) = true;
194 calculated(reversed) = true;
195 if(eqClass == reversed) continue;
196
199 this->
basis().insert(state, classIdx)
200 = 1.0 / RealType(sqrt(RealType(2 * this->
totalSpace().transPeriod(eqClass))));
201 }
204 this->
basis().insert(state, classIdx)
206 }
207 ++classIdx;
208 }
209
210 this->
basis().makeCompressed();
211#endif
212}
Definition mytypes.hpp:147
__host__ __device__ int dim() const
Definition HilbertSpace.hpp:34
__host__ __device__ Vector_t const & stateToTransEqClass() const
Definition HilbertSpace.hpp:320
__host__ __device__ Vector_t const & transPeriod() const
Definition HilbertSpace.hpp:317
__host__ __device__ int transEqDim() const
Definition HilbertSpace.hpp:309
__host__ __device__ void computeTransEqClass() const
Definition HilbertSpace.hpp:357
__host__ __device__ int reverse(int state) const
Reverse the input state.
Definition HilbertSpace.hpp:347
__host__ __device__ int sysSize() const
Definition HilbertSpace.hpp:265
__host__ __device__ Vector_t const & transEqClassRep() const
Definition HilbertSpace.hpp:311
int m_parity
Definition ParityTransSector.hpp:21
int m_numParityPairs
Definition ParityTransSector.hpp:22
__host__ __device__ constexpr int parity() const
Definition ParityTransSector.hpp:47
__host__ __device__ int * innerIndexPtr() const
Definition MatrixUtils.cuh:421
__host__ __device__ void resize(int rows, int cols, int reserved=1)
Definition MatrixUtils.cuh:353
__host__ __device__ int & setNonZeros(int input)
Definition MatrixUtils.cuh:417
__host__ __device__ int * outerIndexPtr() const
Definition MatrixUtils.cuh:420
__host__ __device__ Scalar_t * valuePtr() const
Definition MatrixUtils.cuh:422
Definition HilbertSpace.hpp:568
__host__ __device__ Matrix_t & basis()
Definition HilbertSpace.hpp:668
__host__ __device__ TotalSpace const & totalSpace() const
Definition HilbertSpace.hpp:671