計算材料力学特論 参考ファイル
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

参考

  1. 初期座標を作るプログラム
    こちらです。 コンパイル方法のスクリプトはここです。 入力データ例はここです。

  2. 分子動力学計算のプログラム サンプル
    (※テキストの解答例は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ステップあたり,1/2ずつの確率で進む)

    サンプルプログラム(乱数の関数やヘッダー・ライブラリなどはシステムにより変わります) 頻度分布(例)

  2. 左(-1)・停止(0)・右(+1)の移動の場合(1ステップあたり,1/3ずつの確率で進むまたは停止)

    →今回2017の演習です(各自ソース作り直して,コンパイルして,計算やってください)

以上


Email: saitou[at]kansai-u.ac.jp