計算材料力学特論 参考ファイル
2017年度 齋藤賢一
Dec. 27th, 2012
追記Jan.15th, 2012
再追記Jan.16th, 2012
再々追記Jan.21st, 2012 (malloc関数バージョン追記)
修正Dec.25th, 2014 (テキスト表記修正とランダムウォーク例)
修正Dec.17th, 2015 (2015年度版)
修正Dec.15th, 2016 (2016年度版)
追記Jan.23rd, 2017 (2016年度版)追記
修正Dec.25th, 2017 (2017年度版)
レポート課題に関して:
パート1の1(MDプログラム)について
テキスト(pp.305-306) の分子動力学プログラム演習用のプログラム
問1〜問6の解答例のプログラム
問1 問2 問3 問4 問5 問6
参考
- 初期座標を作るプログラム
こちらです。 コンパイル方法のスクリプトはここです。 入力データ例はここです。
- 分子動力学計算のプログラム サンプル
(※テキストの解答例は2次元用なので、上記の3次元データは扱えません。)
使える3次元のプログラムはコレ!
3次元用分子動力学プログラムはこちら
この場合の初期配置用の入力データは、こちら がいいです。(メモ)
これで初期座標(と初期速度)を作ると、こちら のようになります。
これで1000ステップの分子動力学計算をすると、この図 の出力例のようになります。
※(2013/1/15追記)座標・速度ファイル(out-coordvelo.txt)から読み込む場合
※(2013/1/16追記)
Visual Studio C++ (2010)などの場合、スタックサイズエラーが出て実行できない場合があります。その場合にはスタック(メモリーの一種)サイズの利用枠を広げます。Visual Studio C++ 2010の場合には、コンパイル時に、"Solution Explorer"にて、
[Project]->[Properties]->[Linker]->[Command Line]
の[Additional Options]に、"/STACK:10000000"などと記載して、スタック(メモリの一種)サイズを拡張(この場合は10,000,000=10MByteで足りる)してみてください。
※なお、windowsのコマンドラインにて、visual studio C++で作った.exeファイル(実行モジュール)のあるところに移動し、
program.exe < out-coordvelo.txt > out
とコマンドを打ち込んでやれば、ファイルを介さずに標準入力(<)と標準出力(>)がそのまま利用できます(相対パス、絶対パスどちらでもOK)。
※もともと、stackサイズオーバーフローは、windowsなどでのCコンパイラが大きなスタック、つまり配列確保の方式を用いていないことによる。
大規模数値計算ではメモリをシステムのぎりぎりまで使うので、予め配列確保しておいたほうがよいのだが、小計算が占めるwindowsでは思想が異なるようである。
windowsなどの場合、stackの設定無しにすんなりと使いたい向きには、
malloc()による動的メモリ割り当てをコードに入れよう。
その場合のプログラムは
こちら
。
例えば、倍精度で配列変数 x[NM] をとりたいとき、
double x[NM];
とせずに、ポインターのみ定義して、
double *x;
あとで、malloc変数として設定する(多くの場合、stdlib.hを#includeしておくとよい)。
x = (double *)malloc(sizeof(double) * natom);
原子数natomが決まった時点で配列サイズが決まるので、余分な配列枠はない。
このポインタ変数*xは、i=natomまでであれば、普通に配列x[i]として使える。
ただし、malloc()で割り当てたメモリは、使用後、free関数で解放すべき。
free(x);
※(2017/1/23追記)MinGWなどをwindowsで使っている場合はやはりスタックサイズで実行時エラーになりやすいので、以下のようにコマンドプロンプト(別名:黒画面)でスタックサイズを変えてコンパイルするとよい。
gcc -Wl,--stack,10485760 answer07.c (stack memory size=10MBのとき)
有限要素ソフトウェアの演習:サイト情報と使い方
FEMソフトは数ありますが、以下のVisualFEAはいかがでしょうか?
VisualFEA: GUIが充実した汎用FEMソフトウェア。有償であるが、トライアル版がダウンロードできる。二次元−3次元、ソリッド−トラス、の各モデルが選べる。自動メッシュ生成、各種コンター、アニメーションなどもできる点が優れている。Windowsに載る。確かではないが、韓国の会社と思われるが、ソフトのメニューおよびドキュメント類は英語で用意される。(サイトへ)
ランダムウォークプログラム演習 (2014〜2017)
乱数に従い,格子上を移動するプログラム.
-
左(-1)・右(+1)のみの移動の場合(1ステップあたり,1/2ずつの確率で進む)
サンプルプログラム(乱数の関数やヘッダー・ライブラリなどはシステムにより変わります)
頻度分布(例)
-
左(-1)・停止(0)・右(+1)の移動の場合(1ステップあたり,1/3ずつの確率で進むまたは停止)
→今回2017の演習です(各自ソース作り直して,コンパイルして,計算やってください)
以上
Email: saitou[at]kansai-u.ac.jp