97 {
98 int i,j,k,l,m;
99 int x,y;
101 int n = 11;
103 int *spin;
105 double complex **translation, **eigenvectors, **temp;
106
107 char trans = 'T', ntrans = 'N', ctrans = 'C';
110
111
112 #wave_number = alloc_ivector(dim_tot);
113 n_momentum = alloc_ivector(n);
114 calculated = alloc_ivector(dim_tot);
115 spin = alloc_ivector(n);
116
117
119
120 printf("\r(n = %d) Initializing.", n);
121 fflush(stdout);
122 for (i = 0;i < n; ++i) n_momentum[i] = 0;
123 for (i = 0;i < dim_tot; ++i) calculated[i] = 0;
124
125 printf("\r(n = %d) Calculating the number of Eigenvectors.", n);
126 fflush(stdout);
127
128 m = 0;
129 for (i = 0;i < dim_tot; ++i) {
130 if (calculated[i] == 1) {
131
132 continue;
133 }
135
136
137
138
139
140
141
142
143 j = 1;
144 while (j != 0) {
145 k = 0;
146 while (spin[(k+j)%n] == spin[k] && k < n) {
147
148 k += 1;
149 }
150 if (k == n) break;
151 j += 1;
152 }
153 y = n/j;
154 for (k = 0;k < j; ++k) {
155 n_momentum[k*y] += 1;
156 for (l = 0;l < j; ++l) {
158 calculated[x] = 1;
159
160
161 }
162 m += 1;
163 if (m > dim_tot) {
164 printf("m = %d > dim_tot = %d.\n", m, dim_tot);
165 exit(1);
166 }
167 }
168 }
169
170 printf("\r(n = %d) Calculating the Eigenvectors with p=0.", n);
171 fflush(stdout);
172 for (i = 0;i < dim_tot; ++i) calculated[i] = 0;
174 m = 0;
175 for (i = 0;i < dim_tot; ++i) {
176 if (calculated[i] == 1) continue;
178
179 j = 1;
180 while (j != 0) {
181 k = 0;
182 while (spin[(k+j)%n] == spin[k] && k < n) k += 1;
183 if (k == n) break;
184 j += 1;
185 }
186 y = n/j;
187 for (k = 0;k < j; ++k) {
188 for (l = 0;l < j; ++l) {
190 if(k == 0) eigenvectors[m][x] = 1.0/sqrt(1.0*j);
191 calculated[x] = 1;
192
193
194 }
195 }
196 m += 1;
197 }
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220 printf("\n");
221 for (i = 0;i < n; ++i) {
222 printf("n_momentum[%d] = %d\n", i, n_momentum[i]);
223 }
224
226 free_ivector(n_momentum);
227 free_ivector(calculated);
228
229 free_ivector(spin);
230
233
234 return 0;
235}
constexpr Integer_t wave_number
Definition TranslationInvariantSectors.cpp:1
void free_zmatrix(double complex **mat)
Definition translation.c:73
void i_to_spin(int i, int *spin, int dim_loc, int n)
Definition translation.c:78
double complex ** alloc_zmatrix(int m, int n)
Definition translation.c:54
int spin_to_i(int *const spin, int dim_loc, int n, int trans)
Definition translation.c:86