色々プログラムあそーと

作ったプログラムの中で見ていて面白い物を選んで載せる事にします。

本当は、一番力を入れていたのは流体だったのですが、動作が重いし、余り良い結果が出なかったので…それらは載せられません…。 それで、急遽慌てて掻き集めたのが此処にある物なので、何れも不完全な感じのプログラムですが、皆それなりに見て楽しめる物と思います。

最新版はこの頁です。因みに他の班員の最新版プログラムに関しては Physics Lab 2009 計算機 から御覧下さい。

理学部物理学科四年 村瀬

Ising Model - Monte Carlo Method

プログラム

バイナリ: [Ising.zip; 38KiB]

使用言語その他: C++/CLI, .NET Framework 2.0

解説

イジング模型をモンテカルロ法によって解く様子を表示します。 磁化とか相関距離とか具体的な計算はしていません…。 見て楽しむ物と思って下さい。悪しからず

パラメータ T は温度を表しています。 パラメータ J は隣接スピンとの相互作用を表しています。 J<0 の時は反磁性に対応します。 パラメータ H は外場を表しています。

画面

高温の時の様子。外場無し。

くしゃくしゃとしている様子が見られます。

ising
臨界点付近の様子。外場無し。

黒い部分が増えそうになったり、白い部分が増えそうになったり不安定です。

ising
低温の時の様子。外場無し。 (平衡状態には到っていません)

はっきりとしたドメインが出来ます。その内に、黒か白のどちらかが勝ってほぼ一色になります。

ising
反磁性、外場無し、低温の時。 (平衡状態には到っていません)

パラメータの設定は以下の様にしました。 ドメインとドメインの間の欠陥が紐の様に見えます。

  • T = 1.0
  • J = -1.5
  • H = 0
ising
反磁性、外場あり、低温の時の一例。

パラメータの設定は以下の様にしました。 高温から一気に低温にすると右の様になります。

  • T = 0.1
  • J = -1.5
  • H = 4
ising

気液相転移模型? - Monte Carlo Method

プログラム

バイナリ: [PhaseTrans.zip; 40KiB]

使用言語その他: C++/CLI, .NET Framework 2.0

解説

粒子数を保存する様にして、隣接セルに存在する粒子との相互作用、 及び重力を設定してモンテカルロ法によって計算している様子を表示します。 こちらも具体的な統計は一切行っていません。

画面

比較的温度の低い時の様子。

液体の様に見えます。

パラメータの設定は以下の様にしました。

  • T = 10
  • B = 10
  • G = 1
ising
高温の時の様子です。

重力の位置エネルギーによる Maxwell 分布を実現している様に見えます。 (ちゃんと検証していないので、断定は出来ませんが。) 気体の様な物と言って良いと思います。

パラメータの設定は以下の様にしました。

  • T = 200
  • B = 10
  • G = 1
ising
高温から低温に急激に冷やした直後の様子です。

上半分の領域にある塊たちは、露の様な物です。冷やした瞬間に結露して幾つか出来上がった後に、下へ落ちていきます。

ising

Conway's Game of Life - Cell Automata

プログラム

バイナリ: [GameOfLife.zip; 879KiB]

使用言語その他: C++/CLI, .NET Framework 2.0, OpenMP, SSE

解説

これは、物理系のシミュレーションではありませんが、 簡単な割に面白いので GUI/OpenMP 等の例として作成しました。

Conway's Game of Life は「ライフゲーム」という名前でよく知られています。 これは、碁盤などに石を幾つか並べた状態を考えて頂くと分かり易いと思います。 ライフゲームは、前の盤面の状態から次の盤面の状態を決めるルールがあって、 そのルールに従ってどんどんと盤面を変化させていくゲームです。 ルールは、それぞれの升目について、

  1. 前の盤面の周りの八つの升目の内、石の於いてある物の数を数えて n とする
  2. n = 3 の場合には、次の盤面でその升目には意思がある事が決定します。
  3. また、n = 2 で且つ、前の盤面で石が置いてあった場合は、次の盤面でも石が残ります。
  4. それ以外の場合には、次の盤面ではその升目に石は置きません。

と言う物です。「n が幾つの時に、次の盤面で石が置かれるか」といった ルールには色々なバリエーションがありますが、 最も良く知られているものは上記の物です。

※ 今回のプログラムでは、上のルールを採用し、周期境界条件で計算を行っています。

画面

準定常な状態の拡大図

→の物は、実際のプログラムの画面を拡大した物です。 色々なパターンが存在している事が分かります。 ライフゲームという名前は、これらの多様な個体パターンの様子が、 色々な種を有する現実の生物界の様に見える事から名付けられています。

(この拡大図を見ていると、顕微鏡で微生物を覗いて居る様な気分です…。)

ising
パターン "spacefiller" が周期境界で自分自身と衝突して砕ける瞬間。

spacefiller というのはライフゲームに於いて無限に成長を続けていくパターンとして知られているものの一つです。 このプログラムでは周期境界条件で計算をしている為に、無限に成長していく事は敵わずに、途中で砕けてしまいます。

ising

粒子法擬き - 分子動力学

プログラム

バイナリ: [Particles.zip; 17KiB]

使用言語その他: C++/CLI, .NET Framework 2.0

解説

これは…慌てて DVD 収録用に作ろうとした好い加減なプログラムです。 流体の粒子法「擬き」です。実体は、単なる二体相互作用を入れた分子動力学に過ぎません。 残念ながら SPH でも MPS でもないのです。

系としては、箱の中に粒子を 500 個入れて計算しています。更に、其れっぽく見せる為に、箱を横に振動させています。

画面

粒子たちの様子。

右の方で山の様になっている部分は、 右の壁にぶつかった後、跳ね上がった粒子達です。

※ 赤い粒子と青い粒子に区別はありません。 赤い粒子は全体的な流れを見やすくする為のマーカです。

ising
粒子密度で表示した場合。

少しは水の様な物に見えるでしょうか…?

こちらは描画が遅くて「かくかく」するので、 ここで提供するプログラムではこの表示は出来ない様にしてあります。 描画を改善しました。Particles[density].exe が、此方の表示の仕方を使用した物です。

ising

参考文献

此処に載せているプログラムは何れも適当に作った物なので、参考文献は存在しません。