ここでは初期条件として温度が100、境界条件としてまわりの温度が0である2次元の系を考える。
#include <stdio.h> #define N 100 //正方形である2次元の系のそれぞれの辺の長さに値する int main() { int t,j,k,tmax; double T[2][N][N]; FILE *output; output=fopen("output.data","w"); /*最大繰り返し回数とは、時間的にどれくらい経過させるかのこと。*/ printf("最大繰り返し回数を入力してください。\n"); scanf("%d",&tmax); /*初期条件として全体の温度100*/ for(j=0;j<N;j++) { for(k=0;k<N;k++) { T[0][j][k]=100.0; } } for(t=0;t<tmax;t++) { /*境界条件として回りの温度0*/ for(j=0;j<N;j++) { T[0][0][j]=0.0; T[0][N-1][j]=0.0; T[0][j][0]=0.0; T[0][j][N-1]=0.0; } for(j=1;j<N-1;j++) { for(k=1;k<N-1;k++) { T[1][j][k]=T[0][j][k]+0.25*(T[0][j+1][k]+T[0][j-1][k]+T[0][j][k+1]+T[0][j][k-1]-4.0*T[0][j][k]); } } /*時間的に過去の情報は破棄するためと、この時間的forループの計算のために配列Tのデータ処理*/ for(j=1;j<N-1;j++) { for(k=0;k<N-1;k++) { T[0][j][k]=T[1][j][k]; } } } /*最終結果には境界条件である温度0の情報がはいってないため、ここで計算する。*/ for(j=0;j<N;j++) { T[1][0][j]=0.0; T[1][N-1][j]=0.0; T[1][j][0]=0.0; T[1][j][N-1]=0.0; } for(j=0;j<N;j++) { for(k=0;k<N;k++) { fprintf(output,"%d %d %f\n",j,k,T[1][j][k]); } fprintf(output,"\n"); } fclose(output); return 0; }