質問編集履歴

4

解決

2022/12/19 06:15

投稿

kisara11235
kisara11235

スコア18

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
- printf("%2f\n", ribbon_length);
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<Q){
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
- fprintf(fp_2,"%2f\n",u_8[i]/(P+1));
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

コメントから

2022/12/19 05:49

投稿

kisara11235
kisara11235

スコア18

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 10 // 存在するサイト数
21
+ #define M 6 // 存在するサイト数
22
- #define N 20 //サイト数×2 A+Bの個数
22
+ #define N 12 //サイト数×2 A+Bの個数
23
- #define L 40 //対角化に必要 N*2
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
-  FILE* fp_3;
57
+ FILE* fp_3;
58
-
58
+
59
-   if ((fp = fopen("zigintene.txt", "w")) == NULL)
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]; for(int i=0;i<=P;i++){
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
- printf("%f\n",min_gap);
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
- for(int i=0;i<=P;i++){
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

最終的にエネルギーを書く

2022/12/19 05:37

投稿

kisara11235
kisara11235

スコア18

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を一回だけにした。

2022/12/19 05:31

投稿

kisara11235
kisara11235

スコア18

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
- FILE* fp_3;
57
+  FILE* fp_3;
58
-
59
- int z;
58
+
60
- while(z<Q){
61
- if ((fp = fopen("zigintene.txt", "w")) == NULL)
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");