C言語でGnuplotを使って翼型を描く

C言語でGnuplotを使ってグラフを描けるようになるまでの備忘録

Gnuplotのインストールからテストプログラムの実行まで.筆者はガチ勢ではないので詳しいことは偉い人に聞いてほしい.

フローチャートとソースコード

参考にしたサイト
C言語でGnuplotを動かす・・・ベースにしたソースコード
4 C言語からgnuplotを操作する・・・配列の描画
工学ナビの中の人の研究と周辺 C言語のプログラムでgnuplotにグラフを描かせる(Windows)・・・LINUXとWindowsの違い
GNUPLOTを用いたグラフ作成・・・Gnuplotのコマンド
苦しんで覚えるC言語・・・C言語全般

フローチャートとソースコードを以下に示す

プログラムの解説

変数

以下の変数を使用する

*gpと*fpはファイルポインタ.C言語ではパイプとかいう機能を使ってGnuplotを動かせるらしい.すごいね

翼型名foil_nameはキーボードから入力し,ファイル形式file_formatと結合してファイル名file_name(翼型名.txt)を作る.動的配列にするのが面倒なのでそれなりに大きい配列を用意しておく

*chはテキストファイルから読み込んだ文字列を数値に分割するときのchar型のポインタ変数

カウンターはi,jを使い,翼型の座標点数はfile_sizeで計算する

テキストファイルから読み込んだ値はdouble型配列val[節点番号][xとy]に格納する

C言語はRow-major orderで多次元配列の値を格納しているらしいので,今後巨大な配列を扱うなら一番外側の次元からアクセスしていくと計算速度が速くなる(はず)

多次元配列のメモリレイアウト方式について – Qiita
【C言語】配列へのアクセス順序による処理速度の違い【キャッシュ】 _ だえうホームページ

翼型名を入力

翼型名をキーボードから入力する
1行の文字列として入力する – 苦しんで覚えるC言語・・・キーボード入力
文字列処理関数 – 苦しんで覚えるC言語・・・文字列の結合

キーボードからの入力はfgets関数を使うといい

ただし,fgets関数は入力した文字列の最後に改行コード”\n”を挿入するので,このままfoil_nameとfile_formatを結合すると,例えばfile_name=”DAE21\n.txt”のようにファイル名が2行にわたってしまう

これを防ぐために4行目のコードで改行コード”\n”を削除している
fgets()の改行を削除する _ 超兄貴の開発メモ

翼型のテキストファイルを開く
テキストファイルのデータを配列に格納する

テキストファイルを開いて翼型のデータを読み込み,配列に格納する
テキストファイルの読み書き – 苦しんで覚えるC言語・・・ファイルの開閉
1行の文字列として入力する – 苦しんで覚えるC言語・・・文字列の分割

fopen関数でfile_nameのファイルを開く.ファイルの取得に失敗したときはfopen関数がNULLを返してくれるので,if関数で場合分けして強制終了する

main.cがあるディレクトリ上にテキストファイルを置いておくことを忘れずに

テキストファイルを行ごとに読み込むにはfgets関数を使い,最終行までのファイルの読み込みはwhile文で行う

最終行に達して読み込むものがなくなったらfgets関数がNULLを返してくれるので,繰り返しを終了する

fgets関数ではテキストデータを文字列として読み込むので,strtok関数を使って区切り文字で分割してからatof関数でdouble型に変換して配列に格納する

詳しくは上に挙げたリンクを参照してほしい

Gnuplotを起動する
Gnuplotにコマンドを送る

Gnuplotを起動してコマンドを送り,グラフを描く

WindowsでGnuplotを開くには_popen関数を使う.Gnuplotの起動に失敗したときは強制終了する

8~15行目のような,Gnuplotでの細かい設定のコマンドなどは調べれば色々と出てくる
gnuplotコマンド集

Gnuplotのコマンドをfprintf関数を使ってファイルポインタgpに書き込めば,Gnuplotを操作することができる

ちなみに,XFLR5で出力したtxtファイルでは1行目に翼型名が入っているので,Gnuplotにデータを書き込むループ(12~14行)は2行目から開始している

プログラムの実行

実際にVS code上でプログラムを実行してみる

「Ctrl+@」でターミナルを開き,「gcc (プログラム名)」でコンパイル,「a.exe」で実行する

キーボードからの入力待ちになるので,翼型名を入力してEnterキーを押すとGnuplotが開く

再びVS codeのウィンドウをアクティブにして,何かしらのキーを押せばプログラムが終了する

まとめ

Gnuplotを使ってグラフを描画するサンプルコードを書いてみた

これからCFDのプログラムに挑戦しようと思うので,結果の可視化に浸かってみようと思う

Sponsored Link

コメント

タイトルとURLをコピーしました