数値計算法第3回レポート(ひこにゃん)

「数値計算法第3回レポート(ひこにゃん)」の編集履歴(バックアップ)一覧に戻る

数値計算法第3回レポート(ひこにゃん) - (2011/08/01 (月) 17:20:36) のソース

数値計算法第3回レポートです。前にオナーでやったやつだがどういうプログラムだか知らんかったので自分で作ってみた。相変わらず自分のプログラムが汚くて読む気しない。
-&ref(sglass.pdf)

スピンが全部と相互作用する場合は上のレポートに載せたので周り4つの場合をここに貼っておく。周期境界条件にするために、配列を20×20にしたのがミソのつもり。汚いのできっとみんな読む気なくす。ところで、乱数が初期化しないと使えないだなんてそんな意味分からん仕様なのは知らなかった。(2011.08.01)
#highlight(c,linenumber){{
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main(){
  int cell[10][10];
  int oldcell[20][20];
  int kabuto[20][20];
  int tuno[20][20];
  int i,j,k,l;
  int J1,J2,J3,J4; 
  int H1,H2;
  FILE *f1,*f2;

  f1=fopen("initial.txt","w");
  f2=fopen("final.txt","w");

  srand((unsigned)time(NULL));        /* 乱数の初期化はこう書くhttp://www.nmn.jp/~hidai/c/ */

  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      cell[i][j]=(rand() %2)*2-1;
    }
  }
  
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      kabuto[i][j]=-1;
      tuno[i][j]=-1;
    }
  }
  
  j=0;
  kabuto[3][j]=1;
  kabuto[4][j]=1;
  kabuto[6][j]=1;
  kabuto[7][j]=1;
  kabuto[8][j]=1;
  tuno[2][j]=1; 
  j=1;
  kabuto[2][j]=1;
  kabuto[3][j]=1;
  kabuto[4][j]=1;
  kabuto[5][j]=1;
  kabuto[8][j]=1;
  kabuto[9][j]=1;
  tuno[3][j]=1;
  j=2; 
  kabuto[1][j]=1;
  kabuto[2][j]=1;
  kabuto[5][j]=1;
  kabuto[7][j]=1;
  kabuto[9][j]=1;
  tuno[4][j]=1; 
  j=3;
  kabuto[0][j]=1;
  kabuto[4][j]=1;
  kabuto[7][j]=1;
  kabuto[9][j]=1;
  for(i=0; i<10; i++){
    tuno[i][j]=1;
  }
  
  j=4;
  kabuto[4][j]=1;
  kabuto[7][j]=1;
  kabuto[9][j]=1;
  kabuto[9][j]=1;
  j=5;
  kabuto[4][j]=1;
  kabuto[8][j]=1;
  kabuto[9][j]=1;
  j=6;
  kabuto[4][j]=1;
  kabuto[6][j]=1;
  kabuto[9][j]=1;
  j=7;
  kabuto[0][j]=1;
  kabuto[5][j]=1;
  kabuto[6][j]=1;
  kabuto[7][j]=1;
  kabuto[9][j]=1;
  j=8;
  kabuto[1][j]=1;
  kabuto[2][j]=1;
  kabuto[3][j]=1;
  kabuto[4][j]=1;
  kabuto[5][j]=1;
  kabuto[6][j]=1;
  kabuto[9][j]=1;
  j=9;
  kabuto[2][j]=1;
  kabuto[3][j]=1;
  kabuto[4][j]=1;
  kabuto[5][j]=1;
  kabuto[7][j]=1;
  kabuto[8][j]=1;
  
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      tuno[i][9-j]=tuno[i][j];
    }
  }

  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      kabuto[i+10][j]=kabuto[i][j];
      kabuto[i][j+10]=kabuto[i][j];
      kabuto[i+10][j+10]=kabuto[i][j];
      tuno[i+10][j]=tuno[i][j];
      tuno[i][j+10]=tuno[i][j];
      tuno[i+10][j+10]=tuno[i][j];
    }
  }
  
  
  for(i=0;i<10;i++){
    for(j=0;j<9;j++){
      fprintf(f1,"%d ",cell[i][j]); 
    }
   fprintf(f1,"%d\n",cell[i][9]); 
  }

  /*  initialize over */
  
  for(i=0;i<10;i++){
    for(j=0;j<10;j++){
      oldcell[i][j]=cell[i][j];
      oldcell[i+10][j]=cell[i][j];
      oldcell[i][j+10]=cell[i][j];
      oldcell[i+10][j+10]=cell[i][j];
    }
  }
  
  while(i<99999){
    k=rand()%10;
    l=rand()%10;
    
    J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l];
    J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9];
    J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1];
    J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l];
    
    H1=J1*cell[k][l]*oldcell[k+9][l]+J2*cell[k][l]*oldcell[k][l+9]+J3*cell[k][l]*oldcell[k][l+1]+J4*cell[k][l]*oldcell[k+1][l];
    H2=J1*(-cell[k][l])*oldcell[k+9][l]+J2*(-cell[k][l])*oldcell[k][l+9]+J3*(-cell[k][l])*oldcell[k][l+1]+J4*(-cell[k][l])*oldcell[k+1][l];
    
//    printf("%d,%d\n",H1,H2);
      if(H2>H1)
	cell[k][l]=-cell[k][l];

//    printf("%d,%d,%d\n",i,k,l) ;
   i++;
}


/*
  for(k=0;k<10;k++){
    for(l=0;l<10;l++){
      J1=kabuto[k][l]*kabuto[k+9][l]+tuno[k][l]*tuno[k+9][l];
      J2=kabuto[k][l]*kabuto[k][l+9]+tuno[k][l]*tuno[k][l+9];
      J3=kabuto[k][l]*kabuto[k][l+1]+tuno[k][l]*tuno[k][l+1];
      J4=kabuto[k][l]*kabuto[k+1][l]+tuno[k][l]*tuno[k+1][l];

      H1=J1*cell[k][l]*oldcell[k+9][l]+J2*cell[k][l]*oldcell[k][l+9]+J3*cell[k][l]*oldcell[k][l+1]+J4*cell[k][l]*oldcell[k+1][l];
   H2=J1*(-cell[k][l])*oldcell[k+9][l]+J2*(-cell[k][l])*oldcell[k][l+9]+J3*(-cell[k][l])*oldcell[k][l+1]+J4*(-cell[k][l])*oldcell[k+1][l];
 
     printf("%d,%d\n",H1,H2);   
      if(H2>H1)
	cell[k][l]=-cell[k][l];
    }
  }
 */

  for(i=0;i<10;i++){
    for(j=0;j<9;j++){
      fprintf(f2,"%d ",cell[i][j]); 
    }
    fprintf(f2,"%d\n",cell[i][9]); 
  }
  

  /*
  for(i=0;i<10;i++){
    for(j=0;j<9;j++){
      printf("%d ",kabuto[i][j]); 
    }
    printf("%d\n",kabuto[i][9]); 
  }
  for(i=0;i<10;i++){
    for(j=0;j<9;j++){
      printf("%d ",tuno[i][j]); 
    }
    printf("%d\n",tuno[i][9]); 
  }
  
*/

}

}}

#comment_num2()