質問編集履歴
4
解決
test
CHANGED
File without changes
|
test
CHANGED
@@ -66,11 +66,19 @@
|
|
66
66
|
printf("Cannot open the file\n");
|
67
67
|
exit(1);
|
68
68
|
}
|
69
|
-
if ((fp_2 = fopen("zigintnup.txt", "w")) == NULL)
|
69
|
+
if ((fp_2 = fopen("zigintnup_1.txt", "w")) == NULL)
|
70
70
|
{
|
71
71
|
printf("Cannot open the file\n");
|
72
72
|
exit(1);
|
73
73
|
}
|
74
|
+
fp_3 = fopen("zigintnup.txt", "r");
|
75
|
+
if(fp_3 == NULL) {
|
76
|
+
printf("ファイルを開くことが出来ませんでした.¥n");
|
77
|
+
}
|
78
|
+
for(int i=0;i<N;i++){
|
79
|
+
fscanf(fp_3, "%lf", &(n_up[i]));
|
80
|
+
}
|
81
|
+
double omori=0; //0 or 1
|
74
82
|
|
75
83
|
//刻み幅
|
76
84
|
for(int i=0;i<=P;i++){
|
@@ -80,19 +88,22 @@
|
|
80
88
|
|
81
89
|
//リボン幅
|
82
90
|
ribbon_length=0.246*pow(3,0.5)/2*(N-2)/2;
|
91
|
+
|
92
|
+
//初期条件
|
83
|
-
|
93
|
+
/*for(int i=0;i<N;i++){
|
94
|
+
if(i%2==1){
|
95
|
+
n_up[i]=0.4;
|
96
|
+
}
|
97
|
+
else if(i%4==3){
|
98
|
+
n_up[i]=-0.3;
|
99
|
+
}
|
100
|
+
else{
|
101
|
+
n_up[i]=0;
|
102
|
+
}
|
103
|
+
}*/
|
84
104
|
|
85
|
-
int z;
|
105
|
+
int z=0;
|
86
|
-
while(z<
|
106
|
+
while(z<4){
|
87
|
-
fp_3 = fopen("zigintnup.txt", "r");
|
88
|
-
if(fp_3 == NULL) {
|
89
|
-
printf("ファイルを開くことが出来ませんでした.¥n");
|
90
|
-
}
|
91
|
-
for(int i=0;i<N;i++){
|
92
|
-
fscanf(fp_3, "%lf", &(n_up[i]));
|
93
|
-
}
|
94
|
-
double omori=0; //0 or 1
|
95
|
-
|
96
107
|
//行列計算
|
97
108
|
for(int r=0;r<=P;r++){
|
98
109
|
t_4 = 1;
|
@@ -107,18 +118,6 @@
|
|
107
118
|
T_2 = t_2 + t_3;
|
108
119
|
T_3 = -1 * T_1;
|
109
120
|
T_4 = -1 * T_2;
|
110
|
-
|
111
|
-
/*for(int i=0;i<N;i++){
|
112
|
-
if(i%2==1){
|
113
|
-
n_up[i]=0.4;
|
114
|
-
}
|
115
|
-
else if(i%4==3){
|
116
|
-
n_up[i]=-0.3;
|
117
|
-
}
|
118
|
-
else{
|
119
|
-
n_up[i]=0;
|
120
|
-
}
|
121
|
-
}*/
|
122
121
|
|
123
122
|
for (int k = 0;k < N;k++) {
|
124
123
|
for (int h = 0;h < N;h++) {
|
@@ -353,20 +352,15 @@
|
|
353
352
|
for(int i=0;i<N;i++){
|
354
353
|
if(i%4==omori+1){
|
355
354
|
u_8[i]=n_up[i];
|
356
|
-
//u_8[i]=u_7[i];
|
357
355
|
}
|
358
356
|
else if(i%4==omori+2){
|
359
357
|
u_8[i]=n_up[i];
|
360
|
-
//u_8[i]=u_7[i];
|
361
358
|
}
|
362
359
|
else{
|
363
360
|
u_8[i]=u_7[i];
|
364
361
|
}
|
365
362
|
u_8[i]=u_7[i];
|
366
|
-
}
|
367
|
-
|
368
|
-
for(int i=0;i<N;i++){
|
369
|
-
|
363
|
+
n_up[i]=u_8[i]/(P+1);
|
370
364
|
}
|
371
365
|
|
372
366
|
z++;
|
@@ -380,6 +374,10 @@
|
|
380
374
|
for(int i=0;i<=P;i++){
|
381
375
|
fprintf(fp_1, "%2f %lf\n",e[i],dd[i]); //状態密度
|
382
376
|
}
|
377
|
+
for(int i=0;i<N;i++){
|
378
|
+
fprintf(fp_2,"%2f\n",u_8[i]/(P+1));
|
379
|
+
}
|
380
|
+
|
383
381
|
printf("リボン長:%2f\n", ribbon_length);
|
384
382
|
printf("最小ギャップ:%f\n",min_gap);
|
385
383
|
|
3
コメントから
test
CHANGED
File without changes
|
test
CHANGED
@@ -18,9 +18,9 @@
|
|
18
18
|
#include <complex.h>
|
19
19
|
#include <stdlib.h>
|
20
20
|
|
21
|
-
#define M
|
21
|
+
#define M 6 // 存在するサイト数
|
22
|
-
#define N 2
|
22
|
+
#define N 12 //サイト数×2 A+Bの個数
|
23
|
-
#define L 4
|
23
|
+
#define L 24 //対角化に必要 N*2
|
24
24
|
#define P 400 //リボン長 全電子数 P*L
|
25
25
|
#define EPS 0.000001 //収束範囲
|
26
26
|
#define Q 10 //回数
|
@@ -34,10 +34,10 @@
|
|
34
34
|
double Energy[P+1][N];
|
35
35
|
double DOS[P+1][P+1][N];
|
36
36
|
double ddd[P+1][P+1],dd[P+1];
|
37
|
-
|
38
37
|
double fermi[P+1][N],fermisum_1[P+1],f[P+1];
|
39
38
|
double complex u[P+1][N][N]; //固有ベクトル
|
40
39
|
double u_2[P+1][N],u_3[P+1],u_4[P+1],u_5[P+1][N][N],u_6[P+1][N],u_7[N],u_8[N];
|
40
|
+
double gap[P+1],meow[P+1][N],min_gap; //Eg,フェルミエネルギーバンド、最小Eg
|
41
41
|
|
42
42
|
int main(int argc, char** argv){
|
43
43
|
b_pi=M_PI;
|
@@ -54,9 +54,9 @@
|
|
54
54
|
FILE* fp;
|
55
55
|
FILE* fp_1;
|
56
56
|
FILE* fp_2;
|
57
|
-
|
57
|
+
FILE* fp_3;
|
58
|
-
|
58
|
+
|
59
|
-
|
59
|
+
if ((fp = fopen("zigintene.txt", "w")) == NULL)
|
60
60
|
{
|
61
61
|
printf("Cannot open the file\n");
|
62
62
|
exit(1);
|
@@ -71,6 +71,17 @@
|
|
71
71
|
printf("Cannot open the file\n");
|
72
72
|
exit(1);
|
73
73
|
}
|
74
|
+
|
75
|
+
//刻み幅
|
76
|
+
for(int i=0;i<=P;i++){
|
77
|
+
e[i]=ene+6.0/P*i;
|
78
|
+
k_x[i]=k_xx+2.0*b_pi/P*i;
|
79
|
+
}
|
80
|
+
|
81
|
+
//リボン幅
|
82
|
+
ribbon_length=0.246*pow(3,0.5)/2*(N-2)/2;
|
83
|
+
printf("%2f\n", ribbon_length);
|
84
|
+
|
74
85
|
int z;
|
75
86
|
while(z<Q){
|
76
87
|
fp_3 = fopen("zigintnup.txt", "r");
|
@@ -82,16 +93,6 @@
|
|
82
93
|
}
|
83
94
|
double omori=0; //0 or 1
|
84
95
|
|
85
|
-
//刻み幅
|
86
|
-
for(int i=0;i<=P;i++){
|
87
|
-
e[i]=ene+6.0/P*i;
|
88
|
-
k_x[i]=k_xx+2.0*b_pi/P*i;
|
89
|
-
}
|
90
|
-
|
91
|
-
//リボン長
|
92
|
-
ribbon_length=0.246*pow(3,0.5)/2*(N-2)/2;
|
93
|
-
printf("%2f\n", ribbon_length);
|
94
|
-
|
95
96
|
//行列計算
|
96
97
|
for(int r=0;r<=P;r++){
|
97
98
|
t_4 = 1;
|
@@ -233,15 +234,7 @@
|
|
233
234
|
|
234
235
|
for (j = 0;j < L;j++) {
|
235
236
|
a[j][p] = a[p][j];
|
236
|
-
a[j][q] = a[q][j];
|
237
|
+
a[j][q] = a[q][j];
|
237
|
-
for(int j=0;j<N;j++){
|
238
|
-
fprintf(fp, "%2f %lf %lf %lf\n",k_x[i],Energy[i][j]-meow[i][j],Energy[i][M-1]-meow[i][j],Energy[i][M]-meow[i][j]);
|
239
|
-
//fprintf(fp, "%2f %lf %lf\n",k_x[i],Energy[i][M-1],Energy[i][M]); //最低バンド
|
240
|
-
}
|
241
|
-
}
|
242
|
-
for(int i=0;i<=P;i++){
|
243
|
-
fprintf(fp_1, "%2f %lf\n",e[i],dd[i]); //状態密度
|
244
|
-
}
|
245
238
|
}
|
246
239
|
|
247
240
|
w = 2.0 * wb * s * c;
|
@@ -277,17 +270,16 @@
|
|
277
270
|
}
|
278
271
|
}
|
279
272
|
|
280
|
-
double gap[P+1],meow[P+1][N],min_gap;
|
281
|
-
for (int i=0; i<=P; i++) {
|
273
|
+
/*for (int i=0; i<=P; i++) {
|
282
274
|
gap[i]=Energy[i][M]-Energy[i][M-1];
|
275
|
+
//printf( "%2f %2f %2f\n",Energy[i][M-1],Energy[i][M],gap[i]);
|
283
276
|
}
|
284
277
|
for(int i = 0; i <=P; i++){
|
285
278
|
if(min_gap > gap[i])
|
286
279
|
{
|
287
280
|
min_gap = gap[i];
|
288
281
|
}
|
289
|
-
}
|
290
|
-
|
282
|
+
}*/
|
291
283
|
|
292
284
|
//フェルミエネルギー
|
293
285
|
for(int i=0;i<=P;i++){
|
@@ -379,7 +371,7 @@
|
|
379
371
|
|
380
372
|
z++;
|
381
373
|
}
|
382
|
-
|
374
|
+
for(int i=0;i<=P;i++){
|
383
375
|
for(int j=0;j<N;j++){
|
384
376
|
fprintf(fp, "%2f %lf %lf %lf\n",k_x[i],Energy[i][j]-meow[i][j],Energy[i][M-1]-meow[i][j],Energy[i][M]-meow[i][j]);
|
385
377
|
//fprintf(fp, "%2f %lf %lf\n",k_x[i],Energy[i][M-1],Energy[i][M]); //最低バンド
|
@@ -388,6 +380,8 @@
|
|
388
380
|
for(int i=0;i<=P;i++){
|
389
381
|
fprintf(fp_1, "%2f %lf\n",e[i],dd[i]); //状態密度
|
390
382
|
}
|
383
|
+
printf("リボン長:%2f\n", ribbon_length);
|
384
|
+
printf("最小ギャップ:%f\n",min_gap);
|
391
385
|
|
392
386
|
fclose(fp);
|
393
387
|
fclose(fp_1);
|
2
最終的にエネルギーを書く
test
CHANGED
File without changes
|
test
CHANGED
@@ -233,7 +233,15 @@
|
|
233
233
|
|
234
234
|
for (j = 0;j < L;j++) {
|
235
235
|
a[j][p] = a[p][j];
|
236
|
-
a[j][q] = a[q][j];
|
236
|
+
a[j][q] = a[q][j]; for(int i=0;i<=P;i++){
|
237
|
+
for(int j=0;j<N;j++){
|
238
|
+
fprintf(fp, "%2f %lf %lf %lf\n",k_x[i],Energy[i][j]-meow[i][j],Energy[i][M-1]-meow[i][j],Energy[i][M]-meow[i][j]);
|
239
|
+
//fprintf(fp, "%2f %lf %lf\n",k_x[i],Energy[i][M-1],Energy[i][M]); //最低バンド
|
240
|
+
}
|
241
|
+
}
|
242
|
+
for(int i=0;i<=P;i++){
|
243
|
+
fprintf(fp_1, "%2f %lf\n",e[i],dd[i]); //状態密度
|
244
|
+
}
|
237
245
|
}
|
238
246
|
|
239
247
|
w = 2.0 * wb * s * c;
|
@@ -365,6 +373,12 @@
|
|
365
373
|
u_8[i]=u_7[i];
|
366
374
|
}
|
367
375
|
|
376
|
+
for(int i=0;i<N;i++){
|
377
|
+
fprintf(fp_2,"%2f\n",u_8[i]/(P+1));
|
378
|
+
}
|
379
|
+
|
380
|
+
z++;
|
381
|
+
}
|
368
382
|
for(int i=0;i<=P;i++){
|
369
383
|
for(int j=0;j<N;j++){
|
370
384
|
fprintf(fp, "%2f %lf %lf %lf\n",k_x[i],Energy[i][j]-meow[i][j],Energy[i][M-1]-meow[i][j],Energy[i][M]-meow[i][j]);
|
@@ -374,12 +388,6 @@
|
|
374
388
|
for(int i=0;i<=P;i++){
|
375
389
|
fprintf(fp_1, "%2f %lf\n",e[i],dd[i]); //状態密度
|
376
390
|
}
|
377
|
-
for(int i=0;i<N;i++){
|
378
|
-
fprintf(fp_2,"%2f\n",u_8[i]/(P+1));
|
379
|
-
}
|
380
|
-
|
381
|
-
z++;
|
382
|
-
}
|
383
391
|
|
384
392
|
fclose(fp);
|
385
393
|
fclose(fp_1);
|
1
fopenを一回だけにした。
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,11 +54,9 @@
|
|
54
54
|
FILE* fp;
|
55
55
|
FILE* fp_1;
|
56
56
|
FILE* fp_2;
|
57
|
-
|
57
|
+
FILE* fp_3;
|
58
|
-
|
59
|
-
|
58
|
+
|
60
|
-
while(z<Q){
|
61
|
-
|
59
|
+
if ((fp = fopen("zigintene.txt", "w")) == NULL)
|
62
60
|
{
|
63
61
|
printf("Cannot open the file\n");
|
64
62
|
exit(1);
|
@@ -73,6 +71,8 @@
|
|
73
71
|
printf("Cannot open the file\n");
|
74
72
|
exit(1);
|
75
73
|
}
|
74
|
+
int z;
|
75
|
+
while(z<Q){
|
76
76
|
fp_3 = fopen("zigintnup.txt", "r");
|
77
77
|
if(fp_3 == NULL) {
|
78
78
|
printf("ファイルを開くことが出来ませんでした.¥n");
|