この度初めて掲示板の皆様の御助力をお借りしたく書き込ませていただきました。
次のプログラム(非常に長いのでmain関数以外は省きました)はシリコン結晶上面に放射線を当てたとき、底面で回折した放射線の底面の各部ごとの放射線強度を計算するものでq,jはその座標を示しています。
このプログラムはあらかじめ設定してある入射角度のときの回折強度とプラスマイナス1/36000°ずれた(このずれた角度はプログラム中のdyで操作できます)回折強度を計算してそれぞれの角度ごとに3つのファイルに保存するように作られれています。
今回やりたいことはこの3つの数値データの平均を出力できるプログラムに変更したいということです。
しかしC言語初心者の私ではプログラム変更してもうまくコンパイルすらできない状況です。
どうか力を貸してください。
OSはLinux、コンパイラはgccです。
なおプログラム内のVMAX,HMAXは4090に,tateは200に定義しています。
変更前のプログラム(こちらはコンパイルと実行ができます。)は
main()
{
FILE *f0, *f10, *f20;
int j, q, warisu;
double hachou, theta_d; /* wave length of X-ray */
complex y[VMAX][HMAX], z[VMAX][HMAX];
complex Zero;
double wkaisetu, wtouka;
double dy, dyr, dyst, dysp, dyh, plus,ddd,r;
double mul_ref, reflect, delta, ddelta, rdelta;
double hachoumin, hachoumax;
double dystrmin, dystrmax;
Zero.re = 0.0000001;
Zero.im = 0;
f0=fopen("./teimen.txt","w");
f10=fopen("./1+.txt","w");
f20=fopen("./1-.txt","w");
hachou = w_length; /* wave length of X-ray(WB) */
hachoumax = hachou + HachouMax;
hachoumin = hachou - HachouMin;
dy=0;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
q=tate;
for (j = 1; j <= q + haba - 1; ++j) {
fprintf(f0, "%2.15lf\n",comabs(z[q][j])*comabs(z[q][j]));
}
fclose (f0);
dy=1.388888889e-5;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
q=tate;
for (j = 1; j <= q + haba - 1; ++j) {
fprintf(f10, "%2.15lf\n", comabs(z[q][j])*comabs(z[q][j]));
}
fclose (f10);
dy=-1.388888889e-5;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
q=tate;
for (j = 1; j <= q + haba - 1; ++j) {
fprintf(f20, "%2.15lf\n", comabs(z[q][j])*comabs(z[q][j]));
}
fclose (f20);
printf("\n\n\n");
printf("end :\n ");
system("date");
}
main()
FILE *f0;
int j, q, warisu;
double hachou, theta_d; /* wave length of X-ray */
complex y[VMAX][HMAX], z[VMAX][HMAX];
complex k0[VMAX][HMAX], k10[VMAX][HMAX], k20[VMAX][HMAX];
complex Zero;
double wkaisetu, wtouka;
double dy, dyr, dyst, dysp, dyh, plus,ddd,r;
double mul_ref, reflect, delta, ddelta, rdelta;
double hachoumin, hachoumax;
double dystrmin, dystrmax;
Zero.re = 0.0000001;
Zero.im = 0;
f0=fopen("./heikin.txt","w");
/* wave length of X-ray(WB) */
hachou = w_length;
hachoumax = hachou + HachouMax;
hachoumin = hachou - HachouMin;
dy=0;
q=tate;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
for (j = 1; j <= q + haba - 1; ++j) {
comabs(z[q][j])*comabs(z[q][j])=k0[q][j];
}
dy=1.388888889e-5;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
for (j = 1; j <= q + haba - 1; ++j) {
comabs(z[q][j])*comabs(z[q][j])=k10[q][j];
}
dy=-1.388888889e-5;
for (q = 1; q <= tate; ++q) {
for (j = 1; j <= q + haba - 1; ++j) {
crystal(q, j, dy, hachou, y, z);
}
}
for (j = 1; j <= q + haba - 1; ++j) {
comabs(z[q][j])*comabs(z[q][j])=k20[q][j];
}
for (j = 1; j <= q + haba - 1; ++j) {
fprintf(f0, "%2.15lf\n", (k0[j]+k10[j]+k20[j])/3);
}
fclose (f0);
printf("\n\n\n");
printf("end :\n ");
system("date");
}