以下を完成させよ.
001: #include <stdio.h> 002: #define MAXDIM 510 003: 004: void initialize(double u[][MAXDIM], int flag[][MAXDIM]); 005: void set_cordinate(int n,double x[][MAXDIM],double y[][MAXDIM]); 006: void set_boundary_wall_pot(int n, double u[][MAXDIM], int f[][MAXDIM]); 007: void set_circle(double x0, double y0, double r, double v, 008: int n, double x[][MAXDIM], double y[][MAXDIM], 009: double u[][MAXDIM], int f[][MAXDIM]); 010: void plot_3d(FILE *gp, char *data_file, 011: double rot_x, double rot_z); 012: 013: /*=====================================================================*/ 014: /* main */ 015: /*=====================================================================*/ 016: int main(void){ 017: double u[MAXDIM][MAXDIM]; 018: double x[MAXDIM][MAXDIM], y[MAXDIM][MAXDIM]; 019: int flag[MAXDIM][MAXDIM]; 020: int i,j; 021: int k, iteration; 022: int nlat; 023: char *plot_data_file; 024: FILE *fp; 025: FILE *gp; 026: 027: plot_data_file="result.txt"; 028: 029: nlat=100; 030: 031: initialize(u, flag); 032: set_cordinate(nlat,x,y); 033: set_boundary_wall_pot(nlat, u, flag); 034: set_circle(0.3, 0.3, 0.2, 20.0, nlat, x, y, u, flag); 035: set_circle(0.7, 0.6, 0.03, -20.0, nlat, x, y, u, flag); 036: 037: iteration=2000; 038: 039: /*---------------------------------*/ 040: /* ここにガウスザイデル法の計算を書く */ 041: /* 3重の繰り返し構造 */ 042: /*---------------------------------*/ 043: 044: 045: fp=fopen(plot_data_file,"w"); 046: 047: for(j=0; j<=nlat; j++){ 048: for(i=0; i<=nlat; i++){ 049: fprintf(fp, "%f\t%f\t%f\n",x[i][j],y[i][j],u[i][j]); 050: } 051: fprintf(fp,"\n"); 052: } 053: 054: fclose(fp); 055: 056: 057: gp = popen("gnuplot -persist","w"); 058: plot_3d(gp, plot_data_file, 30, 30); 059: plot_3d(gp, plot_data_file, 45, 30); 060: plot_3d(gp, plot_data_file, 60, 30); 061: plot_3d(gp, plot_data_file, 75, 30); 062: pclose(gp); 063: 064: return 0; 065: 066: } 067: 068: /*=====================================================================*/ 069: /* initialize function */ 070: /*=====================================================================*/ 071: void initialize(double u[][MAXDIM], int flag[][MAXDIM]){ 072: 073: 074: /*---------------------------------*/ 075: /* 繰り返しを使って、初期化する。 */ 076: /*---------------------------------*/ 077: 078: } 079: 080: /*=====================================================================*/ 081: /* set coordinate */ 082: /*=====================================================================*/ 083: void set_cordinate(int n,double x[][MAXDIM],double y[][MAXDIM]){ 084: 085: 086: /*-------------------------------------------*/ 087: /* 繰り返しを使って、格子点の座標を設定する。 */ 088: /*-------------------------------------------*/ 089: 090: 091: } 092: 093: /*=====================================================================*/ 094: /* set external boudary points */ 095: /*=====================================================================*/ 096: void set_boundary_wall_pot(int n, double u[][MAXDIM], int f[][MAXDIM]){ 097: 098: 099: /*---------------------------------------------------------*/ 100: /* 繰り返しを使って、外部境界のポテンシャルとフラグを設定する */ 101: /*---------------------------------------------------------*/ 102: 103: 104: 105: } 106: 107: /*=====================================================================*/ 108: /* set circler boundary */ 109: /*=====================================================================*/ 110: void set_circle(double x0, double y0, double r, double v, 111: int n, double x[][MAXDIM], double y[][MAXDIM], 112: double u[][MAXDIM], int f[][MAXDIM]){ 113: /*---------------------------------------------------------------*/ 114: /* 繰り返しを使って、電極内部の格子点のポテンシャルとフラグを設定する */ 115: /*---------------------------------------------------------------*/ 116: 117: } 118: 119: 120: /*==========================================================*/ 121: /* 3D plot */ 122: /*==========================================================*/ 123: void plot_3d(FILE *gp, char *data_file, 124: double rot_x, double rot_z){ 125: 126: 127: /* == flowing lines make a graph by using gnuplot == */ 128: 129: printf("start plot 3D\n"); 130: fprintf(gp, "reset\n"); 131: fprintf(gp, "set terminal postscript eps color\n"); 132: fprintf(gp, "set output \"graph.eps\"\n"); 133: fprintf(gp, "set view %f,%f\n", rot_x, rot_z); 134: fprintf(gp, "set contour base\n"); 135: fprintf(gp, "set cntrparam levels 20\n"); 136: fprintf(gp, "set hidden3d\n"); 137: fprintf(gp, "set nokey\n"); 138: fprintf(gp, "splot \"%s\" with lines\n", data_file); 139: fprintf(gp, "set terminal x11\n"); 140: fprintf(gp, "replot\n"); 141: 142: }
last update: