2012年6月9日土曜日

[GSL]ベッセル関数

現在、非構造格子の数値解析の結果をParaViewにvtkで読ませるノウハウを構築中
1時点ののスカラーデータの読み込みと表示は何とかできるようになった。


次は、複数の時点のデータでアニメーションの作成。これは、連番のvtkファイルを読ませることで出きることが分かっている。
問題は、お題。いろいろ考えた結果、太鼓などの膜の振動にすることにした。
数学的なことは、全然わからないがベッセル関数というのがその解らしいということを以前gnuplotの某有名サイト( http://t16web.lanl.gov/Kawano/gnuplot/ )で見たことがあったのでこれにした。

とりあえず課題用のデータを作ることに、CのGNUによる科学技術計算ライブラリ「GNU Scientific Library」を使うことにした。
以下のソースを 「gcc -lgsl -lgslcblas -lm -I /usr/local/include/ bessel.c」でコンパイルで
2次元データ作成用プログラムは、完成。




#include<stdio.h>

#include<stdlib.h>

#include<gsl/gsl_sf_bessel.h>



int main(int argc,char** argv){

   int min,max,num,i,j;

   double x,xmin,xmax,xdel;

   double *result;



   max=100;

   min=1;

   num=max-min+1;

   xmin=0;

   xmax=50;

   xdel=0.5;

   result=malloc(sizeof(double)*num);

   for(x=xmin;x<=xmax;x+=xdel){

      gsl_sf_bessel_Jn_array(min,max,x,result);

      printf("%f ",x);

      for(j=0;j<=num-1;j++){

         printf("%f ",result[j]);

      }

      printf("\n");

   }

   free(result);

 return 0;

}



0 件のコメント:

コメントを投稿