見出し画像

数値計算・虎の穴#1 数値シミュレーション技法

 物理的な現象を解明したい場合、その現象を比較的単純な数学モデルで表現します。単純と言っても、式が単純に見えるだけで、その解は複雑です。この数学モデルが”解析的に解ける”と、計算が簡単になります。”解析的に解ける”というのは、”数式で表現できる”ということです。例えば、バネとおもりで構成されたバネの振動(単振動)は、簡単な一次元の微分方程式で表されます。この振動は、初期条件さえ与えれば、解析的に解くことができます。

 しかし、地盤の振動である地震動などを考えると、2次元や3次元の数学モデルを考える必要があります。数学モデル自体は、次元を増やしただけの単純な差異しかありませんが、”特殊な場合でない限り”これを解析に解くことはできません。そのような場合には、”解析的に解く”のではなく、”数値的に解く”必要があります。これが、いわゆる数値シミュレーションです。厳密に言えば、シミュレーションには”実験的なもの”と”数値的なもの”がありますから、多くの場合、シミュレーションは”数値シミュレーション”のことを指します。

 よくある間違いですが、シミュレーション(〇)をシュミレーション(×)という人がいます。英単語の綴りを知っていれば間違うことはありませんが、英語ではsimulationなので、シミュレーションが正解です。お間違えの無いように。

 数値シミュレーション技法の代表的なものに、差分法有限要素法があります。もともと(昔は)、差分法は何も付けずに”差分法”と呼ばれていましたが、有限要素法との対比で、最近では”有限差分法”とも呼ばれるようになっています。英語では、有限差分法がFinite Difference Method (FDM)、有限要素法がFinite Element Method (FEM)となります。この二つの技法が、数値シミュレーション界の二大巨頭です。その他には、境界要素法(BEM) などもありますが、2つの手法の使用頻度がズバ抜けています。 

 差分法は、簡単に言うと偏微分方程式の偏微分の部分を”有限の差分”で置き換える手法です。この方法は、理解がしやすいのでシミュレーション初心者には取っ付き易い方法です。しかし、差分の計算上、格子分割が直交していないといけません。そのため、複雑な境界や地形等がうまく表現できない場合も出てきます。

 有限要素法は、重み付き残差法の一種で、対象領域を、二次元の場合は三角形や四辺形、三次元の場合は四面体や六面体に分割します。有限要素法は差分法と比べると、柔軟な境界形状に対応していますが、理論がやや難しい傾向があります。また、計算結果が要素分割に依存する場合があるので、要素分割を適切に行う必要もあります。

 どちらを使うかは好みの問題ですが、流体などの流れの計算の場合には差分法が好まれ、構造系の計算では有限要素法が好まれる傾向があります。先程、差分法や有限要素法の短所めいたことを書きましたが、最近の研究ではこれらの短所が克服されつつあります。差分法では、直交格子ではない曲線状の格子分割ができるようになりました。また、有限要素法では、要素の自動分割を組み込んだ手法が開発されています。

 私が差分法や有限要素法を覚えて、独自のプログラムを作っていた頃とは、計算環境が大きく変わりました。PCのCPU速度が上がって、大型計算機を使わなくても複雑な計算ができるようになりました。また、CPUのマルチコアやGPUボードを利用した並列計算も、比較的簡単にできるようになりました。一昔前に比べて、現在は、数値シミュレーションをするには、天国のような環境になっています。

 今回は数値シミュレーション技法(の概要)を取り上げましたが、『数値計算』には様々な手法が存在します。無謀な挑戦ですが、できるだけ数式を使わずに『数値計算』について解説してみようと思います。

いいなと思ったら応援しよう!