計算材料力学特論 参考ファイル
2022年度 齋藤賢一

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年度版)
修正Dec.24th, 2018 (2018年度版)
修正Dec.23rd, 2019 (2019年度版)
修正Dec.21st, 2020 (2020年度版)FEMのURL・文言など変更
修正Dec.20th, 2021 (2021年度版)
修正Dec.23rd, 2022 (2022年度版)


レポート課題に関して:

パート1の1(MDプログラム)について

テキスト(pp.304-314)の分子動力学プログラム演習用のプログラム
問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);

※(2018/1/23追記)MinGWなどをwindowsで使っている場合はやはりスタックサイズで実行時エラーになりやすいので、以下のようにコマンドプロンプト(別名:黒画面)でスタックサイズを変えてコンパイルするとよい。
gcc -Wl,--stack,10485760 answer07.c (stack memory size=10MBのとき)




パート1の2: 有限要素ソフトウェアの演習:サイト情報と使い方

FEMソフトは数あります(詳しくは別にネット検索してください)が、 以下のVisualFEAはいかがでしょうか?

VisualFEA: GUIが充実した汎用FEMソフトウェア。有償であるが、トライアル版がダウンロードできる。二次元−3次元、ソリッド−トラス、の各モデルが選べる。自動メッシュ生成、各種コンター、アニメーションなどもできる点が優れている。Windowsに載る。確かではないが、韓国の会社と思われるが、ソフトのメニューおよびドキュメント類は英語で用意される。(サイトへ



パート1の3: ランダムウォーク(酔っ払い)プログラム演習 (2014〜2022)

乱数に従い,1次元の格子上を移動するプログラム(2,3次元に拡張もできる).

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

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

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

    →今回2022年度の皆さんの演習になります(上の1.のソースを修正する/作り直すかして,コンパイルして,計算を各自でやってください)

以上


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