Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1
動機付けプロジェクト(前半第4回)
演習課題 2019 年 10 月 15 日
(担当:柴田和也) 演習課題1.下記のホームページにアクセスし、レポートのテンプレートファイ
ルをダウンロードせよ。
(ダウンロード URL)
http://mps.q.t.u-tokyo.ac.jp/~shibata.kazuya/douki/
ファイル名: lecture4_report.docx
(補足)インターネットへの接続は「UTokyo WiFi(キャンパス内で利用出来る学内共通無
線 LAN サービス)」を利用できる。
http://www.u-tokyo.ac.jp/ja/administration/dics/service/wifi.html
演習課題2.以下のプログラミングに関する説明文章を読め。
<テクニック1>
コンピュータプログラムなどの欠陥を取り除く(修正する)作業をデバッグ
(debug)という。デバッグ時のエラーメッセージや警告文には、行数やその行の
何文字目でエラーが生じているかの情報が記載されている(ただし、コンパイラ
とエラーの内容による)。それを手がかりに修正する。
また複数のエラーがあるときは、プログラムの上側にあるエラーを修正する
と、それより下側にあるエラー文は無くなる場合が多いのでまずは上の行のエ
ラーから修正すると良い。
<テクニック2>
プログラムがどの時点までであれば正常に動くか、コメント文/* */を使って
調べると良い。コメント文とは、計算に関与しないただの説明文であり、プログ
ラムのある部分を/* */で囲むと、囲まれた部分がコメントになる。プログラム
で何らかのエラーが生じた場合は、不具合がある可能性がある箇所(仮に A と
呼ぶ)をコメント文にしてエラーが生じないか確認する。正常に動作すれば、そ
の A の中に不具合があることがわかる。
2
<テクニック3>
Visual Studio や Xcode などのデバッガといわれるソフトウェアを使用すると
ブレイクポイントを用いてテクニック2の操作を画面上で行うことができる。
<補足:よくあるエラーの理由>
プログラムのコンパイルには成功したものの、プログラムを実行すると途中
で異常終了する場合がある。Segmentation fault とエラーメッセージが表示される
場合がある。このエラーの理由として、確保したメモリ領域以外の領域にアクセ
スしたことが多い。具体的には配列を a[3]ととったときにアクセスできるのは
a[0],a[1],a[2]のみである(添え字は0から始まるので配列の大きさが3のとき、
0、1、2の範囲となる。)それ以外の領域(例えば a[-1],a[3],a[4]など)を操作
すると異常終了が生じる。Segmentation fault の他の理由として、ファイル操作の
ミスが挙げられる。ファイルを開いていないのにファイルに書き込もうとした
りファイルを閉じようとしたりすると異常終了(エラー)が生じる。書き込もう
としたファイルがエクセルなどで開かれているエラーが生じる。また入力ファ
イルを読み込む必要があるときに、入力ファイルが存在しなかったり、ファイル
の中に読み込む値が存在しない場合も Segmentation fault が生じる場合がある。
その他、ある数をゼロで割ると計算結果が inf(無限大)になるなど異常な計
算結果となってしまう。
3
演習課題3. 1次元熱伝導のシミュレーション
下記のプログラムを実行し、計算結果をエクセル等を用いてグラフ化せよ。
●プログラム名: thermalConduction_1dim.c
●プログラムの内容:以下の1次元熱伝導方程式の初期値・境界値問題(針金
の熱伝導)を解く。
𝜕𝑇𝜕𝑡
𝛼𝜕 𝑇𝜕𝑥
0 𝑥 1, 𝑡 0
𝑇 0, 𝑡 𝑇 1, 𝑡 0 𝑡 0
𝑇 𝑥, 0 𝑓 𝑥 1.0 0 𝑥 1
𝛼 0.001
<補足>
コンピュータは微分や積分などの演算は直接計算することができない。直
接計算できるのは四則演算(足し算、引き算、掛け算、割り算)である。もちろ
ん三角関数などの計算できるがそれらは数学ライブラリ(テイラー展開などを
用いている)を用いて四則演算に置き換えられて計算されている。
微分を計算する方法として、差分法が広く用いられている。差分法では微分
を例えば以下のように近似する(補足:左辺を右辺のように離散的な値で近似す
る。この操作を離散化するという)。
𝜕𝑇𝜕𝑡
≅𝑇 𝑇
𝛥𝑡
𝜕 𝑇𝜕𝑥
𝑇 2𝑇 𝑇𝛥𝑥
補足1:差分法にもいくつかの種類のモデルがあるが、よく用いられるのは上
述のモデルである。
補足2:離散化した標記において変数の右上の数 k はタイムステップ番号を
表す(補足:k はk 0,1,2,3, ⋯の整数あり、𝑡 𝑘𝛥𝑡の関係がある。ここで𝛥𝑡は十
分小さな時間刻み幅である)。右下の数 i は計算点の場所の添え字を表す。これ
らを用いると支配方程式(本課題の場合、 𝛼 )は次式のように離散化で
きる。
𝑇 𝑇𝛥𝑡
𝛼𝑇 2𝑇 𝑇
𝛥𝑥
変形すると
6
補足4:エクセルでグラフを描いた後にファイルを保存する際は、csv 形式
(comma-separated values 形式)ではなく、xlsx などの形式で保存する必要があ
る。理由は csv 形式ではグラフの情報が失われてしまうためである。
補足説明の図
(図の補足:新しいエクセルシートに行と列を反転させて貼り付ける際に、も
とのデータの表に空白行や空の列があると、うまく反転して貼り付けられない。
そのため、空行を事前に削除して表を詰めておくことをお勧めする。グラフ描画
する際は、反転したデータすべてを選択してグラフを挿入すると1行目がデー
タの系列名として認識され、また最も左の列が横座標として認識されるように
なり良い。一番左上のセル(A1 など)だけは空にしておいて良い。)
1.0 1.0
7
演習課題4. 1次元熱伝導のシミュレーション2
前の課題(演習課題3)のプログラムを以下のように変更し、計算結果をエクセ
ル等を用いてグラフ化せよ。
●プログラム名: thermalConduction_1dim2.c
●プログラムの内容:境界条件を以下のように変更する。
1, 1.0 0
0, 0 0
, 0 1.0 0 1
0.001
演習課題5.2次元熱伝導のシミュレーション
プログラム thermalConduction_1dim.c を以下のように2次元計算に拡張せよ。ま
た計算結果をグラフで描画し、作成したグラフのエクセルファイルを添付せよ。
エクセルのファイル名は thermalConduction_2dim.xlsx とせよ。
●プログラム名: thermalConduction_2dim.c
●プログラムの内容:以下の 2 次元熱伝導方程式の初期値・境界値問題(平板
の熱伝導)を解く。
0 1, 0 1, 0
, 0, , 1, 0 0 1, 0
0, , 1, , 0 0 1, 0
, , 0 , 1.0 0 1,0 1
0.001
<ヒント>
温度 T を表す配列 T[101]を
2次元配列 T[101][101]に変更すると良い。
<補足>
2次元計算なのでグラフの描画が難しいと思われる。どこかの1次元的な断
面(たとえば y=0.5 の断面など)をグラフで描画するのでも良い。例えば T[iX][50]
(ここで iX=0~100 の整数)の断面のみを描くと良い。つまり全ての T[iX][iY]
の値をファイル出力せずに T[iX][50]のみ(iX=0~100)出力すれば良い。
11
演習課題7.時間刻みの幅に関する以下の補足説明を読め。
時間刻みの幅Δt(プログラム中では dt)は、安定に計算できるように十分小
さな時間間隔(単位は通常、秒)に設定する。ただし、Δt が小さすぎるとシミ
ュレーションのタイムステップ数が増加して、それだけ計算時間が長くなりま
すので注意が必要である。どれくらい小さなΔt を用いれば良いかは、解く問題
に依存する。興味がある人は、「クーラン数」や「拡散数」などのキーワードで
調べると良い。
12
演習課題8. シミュレーションプログラムの検証方法に関する問題
演習課題3の1次元熱伝導のシミュレーション(プログラム名:
thermalConduction_1dim.c)の計算結果を解析解と比較せよ。比較の際には、エク
セル等の表計算ソフトを用いよ。
<補足>
シミュレーションプログラムや計算モデルを開発した後は、その正しさを必
ず検証する必要がある。検証方法として解析解(理論値)と比較することが通常
である。解析解がある簡単な計算条件を選び検証すると良い。解析解を求めるこ
とができない場合は、実験値と比較したり、正しいことが分かっている他のシミ
ュレーションプログラムの結果と比較したりすると良い。
検証方法として、エクセルファイル上で比較する方法、プログラム上で理論解
を計算して比較する方法がある。いずれでも良いが、今回はエクセル上で比較す
ると良い。
<ヒント>
下記の場所にテンプレートファイル(計算済みの理論値を含む)があるので用
いると良い。具体的には、Verification と書かれたエクセルシートの黄色に塗られ
たセルに差分法の計算結果をペーストすると、DB 列の20行付近にグラフが描
画され、解析解と比較することができる。(このように自分が良く使用する処理
のエクセルファイルをテンプレートファイルとしていくつか持っているとすぐ
に使えて良い。)
●テンプレートファイル名: lecture4_verificationTemplate.xlsx
●場所: http://mps.q.t.u-tokyo.ac.jp/~shibata.kazuya/douki/
<補足2>
演習課題3の1次元熱伝導のシミュレーションの解析解は、次式で表される。
T ∑ 𝑒
ここで
X/
, F/
,
β , , … , , …
である。詳細は、JSME テキストシリーズ 伝熱工学 の本(ISBN-13: 978-
4888981200)の p44 の式(2.152)を参照のこと。
13
演習課題9. 粒子法による流体シミュレーションの問題1
(1)以下の粒子法のプログラムをホームページからダウンロードせよ。
●プログラム名: emps.c
●ダウンロードサイト:
http://mps.q.t.u-
tokyo.ac.jp/~shibata.kazuya/lecture/001complex/doukizuke/emps.c
◎ID: complexsimulation
◎PassWord: gQ8FA$$6Cy3J
<補足:ダウンロードできない場合>
emps.c をうまくダウンロードできないときは URL をよく確認してくださ
い。URL をコピー&ペーストすると u-tokyo のハイフン記号『-』が消えてし
まうことがあります。
<注意:著作権について>
今日の授業で配布する粒子法に関するプログラムは、再配布してはいけま
せん。プログラムをホームページへのアップロードすることや、友人に譲渡する
こともいけません。粒子法のプログラムが欲しい人には、下記の書籍を紹介して
ください。(同等のサンプルプログラムが書籍に付いています。)
越塚 誠一 , 柴田 和也, 室谷 浩平, 粒子法入門, 丸善出版, 2014 年 6 月,
ISBN-13: 978-4621088340
14
(2) ダウンロードしたプログラムをコンパイルし、実行せよ。
<例>
gcc -O3 -Wall emps.c -lm -o emps
<補足>
-O3(マイナス オー スリー)は、プログラムの実行速度を高めるため
の最適化オプションの指定である。 -lm(マイナス エル エム)は、-l
でリンクするライブラリを指定することを表し、m で math.h(数学ライ
ブラリ)を指定している。環境によっては-lm がなくてもコンパイルで
きる。-o はコンパイルした結果のファイル(オブジェクトファイル)の
名前の指定であり(-o のあとの文字列がファイル名となる)、今回は emps
という名前に指定している。
参考:
http://itpro.nikkeibp.co.jp/article/COLUMN/20080528/304383/?rt=nocnt
(3) シミュレーション結果のファイル(particle_0000.vtu、particle_0001.vtu、・・・)
を ParaView というフリーソフトウェアを用いて可視化せよ。ParaView は下記の
サイトからダウンロードすることができる。
●ParaView のダウンロード: http://www.paraview.org/
●ParaView のマニュアル:授業用のホームページ参照
●注意: ParaView では日本語フォントは使用することができない。そのため、
フォルダ名、ファイル名、ユーザー名に日本語フォントが使われているとファイ
ルを開くことができない。その場合は、USB メモリに保存したり、C ドライブ
の直下に新たにディレクトリを作ってそこにファイルを保存したりすると良い。
<補足1>
授業用のホームページに掲載している ParaView のマニュアルでは、
初期設定(PointSprite を使用するための初期設定)を説明している、最新
の ParaVeiw では PointSprite の機能が無くなった。そのため PointSprite の
初期設定(プラグインを自動ロードする初期設定)は不要である。
PointSprite の代わりに PointGaussian を使用すると良い。粒子の大きさの変
更は、Gaussian Radius の値を変えることで行える。
15
<補足2>
PointSprite の機能はパソコンによっては使用することができない。その
ときは、他の描画方法を選択すれば良い。(例えば PointGausian を使用すると
良い。)
(4) 計算結果の動画を作成せよ。動画の作成方法は、ParaView のメニューから
File→Save Animationi を選択すればよい。ファイル名は movieOfDambreak.avi と
せよ。
<補足>パソコンによっては Save Animation を使用することができない。そ
のときは、その旨回答してくれれば結構である。
演習課題10. 粒子法による流体シミュレーションの問題2
演習課題7のプログラム(emps.c)を変更し、以下の条件で計算を行え。
●プログラム名: emps2_highResolution.c
●変更内容:
初期粒子間距離: 0.0125 (m)
<ヒント>
初 期 粒 子 間 距 離 の 設 定 は プ ロ グ ラ ム 中 の 1 4 行 目 の #define
PARTICLE_DISTANCE
の行で行なえる。
<補足>
初期粒子間距離は、粒子の大きさ(直径)に近い値を表す(厳密には少し異なる。詳細は書
籍『粒子法入門(丸善出版)』を読んでください。
#define は定義文である。例えば#define PARTICLE_DISTANCE 0.0125 と書くと
これはプログラム中で PARTICLE_DISTANCE と書いた文字列が、コンパイル時に 0.0125 と
いう文字列に置き換えられる。文字列の置換に近い処理であることに注意を要する(変数で
はないので、置換後の文字列を後で変更することはできない。また置換後の文字列に 1.0E-
6 などの指数を用いると演算の順番が変わってしまう場合があるため、(1.0E-6)と括弧でく
くることをお勧めする。)
初期粒子間距離を小さくしたときは、時間刻みの幅Δt を変更すると良いが、今回の場合
は元々のΔt が小さめの値であるため、変更しなくても計算できる。Δt を変更するには、プ
ログラム中の#define DT の行(15行目付近)で設定できる。(Δt の設定方法についての詳
細は、Wikipedia などで CFL 条件などのキーワードで調べると良い。)
16
演習課題11. 粒子法による流体シミュレーションの問題3
演習課題7のプログラム(emps.c)を変更し、以下の条件で計算を行え。
●プログラム名: emps3_highViscosity.c
●設定内容:
初期粒子間距離: 0.025 (m)
動粘性係数 ν: 1.0×10-1 (m2/s)
計算の終了時間: 5.0 (s)
<ヒント>
動粘性係数の設定は
#define KINEMATIC_VISCOSITY 1.0E-6
の行で行っている。(1.0E-6 は 1.0×10-6 を表す)
計算の終了時間は、
#define FINISH_TIME 1.5
で指定している(単位は『秒』である。)
<単位について>
プログラム内では SI 単位系を使用しており、質量は kg、長さはメートル
(m)、時間は秒(s)、力はニュートン(N)、圧力はパスカル(Pa)で表している。
演習課題12. 粒子法による流体シミュレーションの問題4
演習課題7のプログラム(emps.c)を変更し、以下の条件で計算を行え。
●プログラム名: emps4_center.c
●設定内容: 初期粒子間距離: 0.025 (m)
水の領域: x=0.4m~0.6m の領域に変更
y 方向の高さは変更なし。
17
(注:この画像の粒子の大きさは正しくない。もう少し小さくなるのが正しい。)
<ヒント>
流体粒子の領域の指定は、プログラム内の以下の行で行っている(170 行目付近にある。
文字列検索の機能で探すと良い)。
((x>0.0+EPS)&&(x<=0.25+EPS)) &&((y>0.0+EPS)&&(y<=0.50+EPS)) ){
補足:上のプログラムで EPS は小さな距離を表し、境界上で粒子を生成する
かどうかの判定に用いるための数である。
18
演習課題13. 粒子法による流体シミュレーションの問題5
演習課題7のプログラム(emps.c)を変更し、以下の条件で計算を行え。
●プログラム名: emps5_3dimensions.c
●設定内容:
・空間の次元数: 3
・初期粒子間距離: 0.05 (m)
・時間刻みの幅: 0.001 (秒)
・ファイルの出力間隔: 10 タイムステップごと
<ヒント>
空間の次元数の設定は、プログラムの 13 行目の #define DIM の行で行なえます。時
間刻みの幅の設定は、15 行目の#define DT の行で行なえます。ファイル出力間隔の設定は、
16 行目の#define OUTPUT_INTERVAL の行で行なえます。
演習課題14. Pov-Ray による可視化の問題
(1) Windows の場合のインストール
下記のサイトから Pov-Ray をダウンロードし、インストールせよ。
http://www.povray.org/
<Pov-Ray の参考ホームページ>
http://www.arch.oita-u.ac.jp/a-kse/povjp/
(2) 下記の2つのファイルを授業のホームページからダウンロードし、Pov-Ray
で描画せよ。
●ファイル名: shippingWater_blob.pov
shippingWater_marchingCube.pov
<macOS の場合のインストール方法>
macOS に Pov-Ray をインストールするには、次のコマンド((1),(2))をターミ
ナル上に実行すると良い(インターネットに接続している必要がある)。
(1) homebrew をインストールするために下記のコマンドをターミナル上
で実行する(インターネットに接続している必要があります)。
19
注意:MacPorts などの別のパッケージ管理ソフトウェアを既にインス
トールしていると、問題が生じますので気をつけてください。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ⏎
補足: homebrew(参考: http://brew.sh/index_ja.html )は macOS 用のパ
ッケージ管理ソフトウェアです。簡単なコマンドで様々なソフトウェアをイン
ストールできるようになります。
(2) Pov-Ray をインストールするために下記のコマンドをターミナル上で
実行する(インターネットに接続している必要があります)。
brew install povray ⏎
(3) Pov-Ray の実行は、以下のコマンドをターミナル上で行います。
povray +ifilename.pov ⏎
(補足: +i の後にスペースを空けずにファイル名を書いてください。
filename.pov がファイル名に相当しますので、適切に変更して
ください。)
<例>
povray +ishippingWater_blob.pov ⏎
補足1:カレントディレクトリ(ターミナル上で現在いる場所)に
shippingWater_blob.povというファイルが在る必要があります。
補足2:上記のコマンドを実行すると、shippingWater_blob.png という
画像ファイルがカレントディレクトリに作成されますので
ls ⏎ コマンドでファイルの存在を確認したり、
open *.png ⏎ コマンドでファイルを開くと良いと思います。
演習課題15. 動画作成
講義用のホームページから以下の圧縮ファイルをダウンロードし、このフォ
ルダの中にある画像をつなぎ合わせることで動画ファイル(Windows の場合は
avi ファイル、macOS の場合は mov ファイル)を作成せよ。動画を作成するのに
20
用いるソフトウェアはどのようなものでも良い。
●ファイル名: Figures.zip
<補足1>
Pov-Ray などのソフトウェアで描画した複数の画像をパラパラ漫画のよう
につなぎ合わせることで動画を作ることができる。
<補足2(Windows の場合)>
無料のソフトウェアとして、コマンドを用いる ffmpeg 、GUI を用いる
AVIMaker がある。コマンド操作に慣れている人にとっては、 ffmpeg の方が時
間と手間がかからないのでお勧めである。(AVIMaker の場合はマウス操作を多
くする必要があり、また画像の圧縮操作も別途必要である。)
●ffmpeg を用いる場合(Windows の場合)
Windows を使用している人は以下のホームページから実行ファイル
( FFmpeg for Windows )をダウンロードする(注意:macOS を使用してい
る人は、補足3の方法が良い)。
https://ffmpeg.org/download.html
ダウンロードの方法:
(i) https://ffmpeg.org/download.html にアクセスする。
(ii) Get the packages のところの Windows マークをクリックする。
(iii) Windows Builds をクリックする。
(iv) Linkig は Static を選択する。
(v) Download Build のボタンをクリックする。
(vi) ffmpeg-latest-win64-static.zip を解凍する。
(vii) bin フォルダの中の ffmpeg.exe をコピーして使う。
Ffmpeg による動画(avi ファイル)の作成方法:
(1) 画像ファイルを ffmpeg と同じフォルダに保存する。
(補足:逆に、ffmpeg を画像ファイルと同じフォルダに移動しても良い。)
(2) ターミナル上で以下のようなコマンドを実行する。
./ffmpeg -r 30 -i figure_%04d.bmp -b:v 10M -pix_fmt yuv420p movie.avi ⏎
上記のコマンドで figure_0000.bmp, figure_0001.bmp、・・・という連番
の画像ファイルをつなぎ合わせて動画ファイル( movie.avi)を作ること
21
ができる。ここで30はフレームレート、10M(Mはメガ)は解像度を
表す。(注意:bmp ファイルは ffmpeg と同じディレクトリ(フォルダ)
にある必要がある。ffmpeg の場合は bmp(ビットマップファイル)以外
にも PNG などの形式にも対応している。
●AviMaker を用いる場合(Windows 用)
(1) 以下のサイトから AviMaker をダウンロードする。
http://www.vector.co.jp/soft/win95/art/se121264.html
(2) AviMaker のアイコンをダブルクリックする。
(使用方法は AviMaker のホームページやダウンロードしたマニュアル
を参照のこと。)
<補足>
AviMaker で作成した動画のファイルサイズは大きいため、圧縮すると良
い。動画の圧縮ソフトには Windows Media エンコーダ x64 Edition
( https://www.microsoft.com/ja-jp/download/details.aspx?id=1786 )などが
ある。
<補足3(macOS の場合)>
macOS で ffmpeg をソースコードからコンパイルしてインストール
するには手間が多くかかる(必要なライブラリも多く、インストール
に失敗することが多い)ので、brew コマンドで ffmpeg をインストール
することをお勧めする。具体的には下記のコマンドをターミナル上で
実行する(改行せず1行で実行する。
brew install ffmpeg ⏎
上記のコマンドを実行するには、インターネットに接続している必要があ
る。最後の⏎は Enter Return キーを押すことを意味する。
ffmepeg で動画(mov ファイル)を作成するには、例えば下記のようなコマ
ンドを実行すると良い。(注意:ffmpeg というファイルが figure_0000.bmp
などのビットマップファイルと同じ場所に保存されている必要がある。)
22
ffmpeg -r 30 -i figure_%04d.bmp -b:v 10M -pix_fmt yuv420p movie.mov ⏎
上記のコマンドで figure_0000.bmp, figure_0001.bmp、・・・という連番
の画像ファイルをつなぎ合わせて動画ファイル( movie.avi)を作ること
ができる。ここで30はフレームレート、10M(Mはメガ)は解像度を
表す。(注意:bmp ファイルは ffmpeg と同じディレクトリ(フォルダ)
にある必要がある。ffmpeg の場合は 拡張子が bmp のファイル(ビット
マップファイル)以外にも、拡張子が png であるファイルの形式にも対
応している。
macOS の場合、拡張子が avi の動画ファイルは QuickTime で開けな
い場合があるので、上記のコマンドのように mov 形式のファイルを作
成して良い。