講義ノート2006年度5E 計算機応用 → ラプラス方程式を解くプログラムの一部

ラプラス方程式を解くプログラムの一部


ラプラス方程式

以下を完成させよ.


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: 
011: /*=====================================================================*/
012: /*   main                                                              */
013: /*=====================================================================*/
014: int main(void){
015:    double u[MAXDIM][MAXDIM];
016:    double x[MAXDIM][MAXDIM], y[MAXDIM][MAXDIM];
017:    int flag[MAXDIM][MAXDIM];
018:    int i,j;
019:    int k, iteration;
020:    int nlat;
021:    FILE *fp;
022:    
023:    nlat=100;
024:    
025:    initialize(u, flag);
026:    set_cordinate(nlat,x,y);
027:    set_boundary_wall_pot(nlat, u, flag);
028:    set_circle(0.3, 0.3, 0.2,  20.0, nlat, x, y, u, flag);
029:    set_circle(0.7, 0.6, 0.03, -20.0, nlat, x, y, u, flag);
030:    
031:    iteration=2000;
032:    
033:    /*---------------------------------*/
034:    /*  ここにガウスザイデル法の計算を書く  */
035:    /*  3重の繰り返し構造               */
036:    /*---------------------------------*/
037:    
038:    
039:    fp=fopen("result.txt","w");
040:    
041:    for(j=0; j<=nlat; j++){
042:      for(i=0; i<=nlat; i++){
043:        fprintf(fp, "%f\t%f\t%f\n",x[i][j],y[i][j],u[i][j]);
044:      }
045:      fprintf(fp,"\n");
046:    }
047:    
048:    fclose(fp);
049:    
050:    return 0;
051:    
052: }
053: 
054: /*=====================================================================*/
055: /*   initialize function                                               */
056: /*=====================================================================*/
057: void initialize(double u[][MAXDIM], int flag[][MAXDIM]){
058: 
059: 
060:   /*---------------------------------*/
061:   /*  繰り返しを使って、初期化する。     */
062:   /*---------------------------------*/
063: 
064: }
065: 
066: /*=====================================================================*/
067: /*   set coordinate                                                    */
068: /*=====================================================================*/
069: void set_cordinate(int n,double x[][MAXDIM],double y[][MAXDIM]){
070: 
071: 
072:   /*-------------------------------------------*/
073:   /*  繰り返しを使って、格子点の座標を設定する。     */
074:   /*-------------------------------------------*/
075: 
076: 
077: }
078: 
079: /*=====================================================================*/
080: /*   set external boudary points                                       */
081: /*=====================================================================*/
082: void set_boundary_wall_pot(int n, double u[][MAXDIM], int f[][MAXDIM]){
083: 
084: 
085:   /*---------------------------------------------------------*/
086:   /*  繰り返しを使って、外部境界のポテンシャルとフラグを設定する     */
087:   /*---------------------------------------------------------*/
088: 
089: 
090:   
091: }
092: 
093: /*=====================================================================*/
094: /*   set circler boundary                                              */
095: /*=====================================================================*/
096: void set_circle(double x0, double y0, double r, double v,
097:         int n, double x[][MAXDIM], double y[][MAXDIM],
098:         double u[][MAXDIM], int f[][MAXDIM]){
099:   /*---------------------------------------------------------------*/
100:   /*  繰り返しを使って、電極内部の格子点のポテンシャルとフラグを設定する     */
101:   /*---------------------------------------------------------------*/
102: 
103: }
104: 


last update:



no counter