#3
by Meta3 » 3年前
コード:
/*
************************************************************************
* laplace.c: Solution of Laplace equation with finite differences *
* *
* comment: Output data is saved in 3D grid format used by gnuplot *
************************************************************************
*/
#include <stdio.h>
#include <math.h>
#define maxx 40 /* number of grid points */
#define maxy 40 /* number of grid points */
main()
{
double p[maxx][maxy], pnew, dp, dpmax, omega;
int i, j, iter;
FILE *output; /* save data in laplace.dat */
FILE *file; /* save data in laplace_dp.dat */
output = fopen("laplace.dat","w");
file = fopen("laplace_dp.dat","w");
for(i=0; i<maxx; i++) /* clear the array */
{
for (j=0; j<maxy; j++) p[i][j] = 0;
}
for(i=0; i<maxx; i++) p[i][0] = 100.0; /* p[i][0] = 100 V */
for(iter=0; iter<1000; iter++) /* iterations */
{
dpmax=0.0;
for(i=1; i<(maxx-1); i++) /* x-direction */
{
for(j=1; j<(maxy-1); j++) /* y-direction */
{
pnew = 0.25*(p[i+1][j]+p[i-1][j]+p[i][j+1]+p[i][j-1]);
dp=pnew-p[i][j];
if(fabs(dp) > dpmax) dpmax=fabs(dp);
p[i][j] = pnew;
}
}
fprintf(file, "%d\t%f\n",iter,dpmax);
}
for (i=0; i<maxx ; i++) /* write data gnuplot 3D format */
{
for (j=0; j<maxy; j++)
{
fprintf(output, "%f\n",p[i][j]);
}
fprintf(output, "\n"); /* empty line for gnuplot */
}
printf("data stored in laplace.dat\n");
fclose(output);
fclose(file);
}
[code]/*
************************************************************************
* laplace.c: Solution of Laplace equation with finite differences *
* *
* comment: Output data is saved in 3D grid format used by gnuplot *
************************************************************************
*/
#include <stdio.h>
#include <math.h>
#define maxx 40 /* number of grid points */
#define maxy 40 /* number of grid points */
main()
{
double p[maxx][maxy], pnew, dp, dpmax, omega;
int i, j, iter;
FILE *output; /* save data in laplace.dat */
FILE *file; /* save data in laplace_dp.dat */
output = fopen("laplace.dat","w");
file = fopen("laplace_dp.dat","w");
for(i=0; i<maxx; i++) /* clear the array */
{
for (j=0; j<maxy; j++) p[i][j] = 0;
}
for(i=0; i<maxx; i++) p[i][0] = 100.0; /* p[i][0] = 100 V */
for(iter=0; iter<1000; iter++) /* iterations */
{
dpmax=0.0;
for(i=1; i<(maxx-1); i++) /* x-direction */
{
for(j=1; j<(maxy-1); j++) /* y-direction */
{
pnew = 0.25*(p[i+1][j]+p[i-1][j]+p[i][j+1]+p[i][j-1]);
dp=pnew-p[i][j];
if(fabs(dp) > dpmax) dpmax=fabs(dp);
p[i][j] = pnew;
}
}
fprintf(file, "%d\t%f\n",iter,dpmax);
}
for (i=0; i<maxx ; i++) /* write data gnuplot 3D format */
{
for (j=0; j<maxy; j++)
{
fprintf(output, "%f\n",p[i][j]);
}
fprintf(output, "\n"); /* empty line for gnuplot */
}
printf("data stored in laplace.dat\n");
fclose(output);
fclose(file);
}
[/code]