(57)【要約】      （修正有）【課題】複素対称行列の係数行列を有する連立一次方程式をより高速に解くための方法を提供する。【解決手段】連立一次方程式の解を反復的に決定する方法は、一種の非定常反復法を用いる。ここで、対象とする連立一次方程式は、Ｎ行×Ｎ列の係数行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表すことができる。特に、係数行列Ａが複素対称行列であるものを対象とする。反復解を初期値から残差ベクトルに基づき修正し、収束するまで反復処理する。【選択図】図４
2008269329.tif 000002
【特許請求の範囲】
【請求項１】
演算装置を用いて連立一次方程式の解を反復的に決定する方法であって、
前記演算装置は、演算処理部と、記憶部と、出力部とを含み、
前記連立一次方程式は、Ｎ行×Ｎ列の複素対称行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表わせ、
前記方法は、
前記演算処理部が、前記複素対称行列Ａと、前記係数行列ｂと、第１前処理行列および第２前処理行列とを前記記憶部に格納するステップと、
前記演算処理部が、前記連立一次方程式の反復解を予め定められた初期値に設定するステップと、
前記演算処理部が、前記連立一次方程式についての初期値に設定した前記反復解における残差ベクトルを算出するステップと、
前記演算処理部が、算出された前記反復解における残差ベクトルに基づいて、前記反復解を修正するステップと、
前記演算処理部が、前記連立一次方程式についての修正後の反復解における残差ベクトルを算出するステップと、
前記演算処理部が、算出された前記修正後の反復解における残差ベクトルの大きさに基づいて、反復処理が収束しているか否かを判断するステップと、
反復処理が収束していないと判断すると、前記演算処理部が、前記反復解を修正するステップと、前記修正後の反復解における残差ベクトルを算出するステップと、前記反復処理が収束しているか否かを判断するステップとを繰返すステップと、
反復処理が収束していると判断すると、前記演算処理部が、当該時点の反復解を前記連立一次方程式の解として前記出力部から出力するステップとを備え、
前記反復解を予め定められた初期値に設定するステップは、
前記演算処理部が、前記第１前処理行列の逆行列と前記初期値に設定した前記反復解における残差ベクトルとの積を第１ベクトル（μ１，μ２，・・・，μＮ）として算出するステップと、
前記演算処理部が、前記第２前処理行列の逆行列と第１ベクトルとの積を第２ベクトル（ν１，ν２，・・・，νＮ）として算出するステップと、
前記残差ベクトルを（δ１，δ２，・・・，δＮ）として、前記演算処理部が、第１修正係数としてΣδｋμｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップとを含み、
前記反復解を修正するステップは、
前記演算処理部が、前記第１ベクトルを前記複素対称行列Ａと前記第２ベクトルとの積に更新するステップと、
前記演算処理部が、第２修正係数としてΣμｋνｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップと、
前記演算処理部が、前記第１ベクトルと前記第１修正係数と前記第２修正係数とにより前記残差ベクトルを更新するステップと、
前記演算処理部が、前記第１ベクトルを前記第１前処理行列の逆行列と更新後の前記残差ベクトルとの積に更新するステップとを含み、
前記繰返すステップは、
前記演算処理部が、前記第２前処理行列の逆行列と前記第１ベクトルとの積を第３ベクトル（ξ１，ξ２，・・・，ξＮ）として算出するステップと、
前記演算処理部が、前記第１修正係数をΣδｋξｋ（ｋ＝１，２，・・・，Ｎ）に更新するステップと、
前記演算処理部が、前記第３ベクトル、ならびに更新前の前記第１修正係数および更新後の前記第１修正係数により前記第２ベクトルを更新するステップとを含む、連立一次方程式の解を反復的に決定する方法。
【請求項２】
相互に通信可能に構成された複数の演算装置を用いて連立一次方程式の解を反復的に決定する方法であって、
前記複数の演算装置の各々は、演算処理部と、記憶部とを含み、
前記連立一次方程式は、Ｎ行×Ｎ列の複素対称行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表わせ、
前記方法は、
前記複数の演算装置のうちの第１の演算装置の演算処理部が、外部入力される、前記複素対称行列Ａおよび前記係数行列ｂを対応の前記記憶部に格納するステップと、
前記第１の演算装置の演算処理部が、外部入力される、第１前処理行列および第２前処理行列を対応の前記記憶部に格納するステップと、
前記第１の演算装置の演算処理部が、複素対称行列の非零要素が対角位置に配置されるように、連立一次方程式Ａｘ＝ｂの行順序を並び替えるステップと、
前記第１の演算装置の演算処理部が、行順序の並び替え後の複素対称行列および係数行列を、前記複数の演算装置の残りの前記演算装置の各々に対応付けてそれぞれ複数の複素部分行列および係数部分行列に分割するステップと、
前記第１の演算装置の演算処理部が、前記複数の複素部分行列および係数部分行列に対応付けて、前記第１前処理行列および第２前処理行列を、それぞれ複数の第１前処理部分行列および第２前処理部分行列に分割するステップと、
前記第１の演算装置の演算処理部が、前記複数の複素部分行列および係数部分行列、ならびに前記第１および前記２前処理行列を、それぞれ対応する前記残りの前記演算装置に送信するステップと、
前記残りの前記演算装置の各演算処理部が、前記第１の演算装置から送信される、前記複数の複素部分行列および係数部分行列、ならびに前記第１および前記第２前処理行列を、対応の前記記憶部に格納するステップと、
前記残りの前記演算装置の各演算処理部が、対応の前記複素部分行列と、対応の前記係数部分行列とによって規定される部分連立一次方程式の反復解を予め定められた初期値に設定するステップと、
前記残りの前記演算装置の各演算処理部が、前記部分連立一次方程式についての前記反復解における残差ベクトルを算出するステップと、
前記残りの前記演算装置の各演算処理部が、算出された前記反復解における残差ベクトルに基づいて、前記反復解を修正するステップと、
前記残りの前記演算装置の各演算処理部が、前記部分連立一次方程式についての修正後の反復解における残差ベクトルを算出するステップと、
前記残りの前記演算装置の各演算処理部が、算出された前記修正後の反復解における残差ベクトルの大きさに基づいて、反復処理が収束しているか否かを判断するステップと、
反復処理が収束していないと判断すると、前記残りの前記演算装置の各演算処理部が、前記反復解を修正するステップと、前記修正後の反復解における残差ベクトルを算出するステップと、前記反復処理が収束しているか否かを判断するステップとを繰返すステップと、
反復処理が収束していると判断すると、前記残りの前記演算装置の各演算処理部が、当該時点の反復解を、前記第１の演算装置に送信するステップと、
前記第１の演算装置の演算処理部が、前記残りの前記演算装置の各々から送信された複数の前記反復解を結合するステップと、
前記第１の演算装置の演算処理部が、結合した前記複数の反復解を前記連立一次方程式の解として出力するステップとを備え、
前記反復解を予め定められた初期値に設定するステップは、
前記演算処理部が、前記第１前処理行列の逆行列と前記初期値に設定した前記反復解における残差ベクトルとの積を第１ベクトル（μ１，μ２，・・・，μＮ）として算出するステップと、
前記演算処理部が、前記第２前処理行列の逆行列と第１ベクトルとの積を第２ベクトル（ν１，ν２，・・・，νＮ）として算出するステップと、
前記残差ベクトルを（δ１，δ２，・・・，δＮ）として、前記演算処理部が、第１修正係数としてΣδｋμｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップとを含み、
前記反復解を修正するステップは、
前記演算処理部が、前記第１ベクトルを前記複素対称部分行列Ａと前記第２ベクトルとの積に更新するステップと、
前記演算処理部が、第２修正係数としてΣμｋνｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップと、
前記演算処理部が、前記第１ベクトルと前記第１修正係数と前記第２修正係数とにより前記残差ベクトルを更新するステップと、
前記演算処理部が、前記第１ベクトルを前記第１前処理部分行列の逆行列と更新後の前記残差ベクトルとの積に更新するステップとを含み、
前記繰返すステップは、
前記演算処理部が、前記第２前処理行列の逆行列と前記第１ベクトルとの積を第３ベクトル（ξ１，ξ２，・・・，ξＮ）として算出するステップと、
前記演算処理部が、前記第１修正係数をΣδｋξｋ（ｋ＝１，２，・・・，Ｎ）に更新するステップと、
前記演算処理部が、前記第３ベクトル、ならびに更新前の前記第１修正係数および更新後の前記第１修正係数により前記第２ベクトルを更新するステップとを含む、連立一次方程式の解を反復的に決定する方法。
【請求項３】
前記複数の複素部分行列および係数部分行列に分割するステップは、前記複素対称行列および前記係数行列の所定の行要素が隣接する２つの前記演算装置で共有されるように、前記複数の複素部分行列および係数部分行列を決定するステップを含み、
前記反復解を修正するステップは、前記残りの前記演算装置の各演算処理部が、対応の前記複素部分行列および係数部分行列に隣接する行列が割当てられた前記演算装置との間でデータの交換を行なうステップを含む、連立一次方程式の解を反復的に決定する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、大規模な連立一次方程式の解を反復的に決定する方法に関し、特に擬似残差に基づいて探索方向ベクトルを逐次生成することで、解を決定する非定常的な解法に関する。
【背景技術】
【０００２】
近年、高周波商品の開発や設計が盛んに行なわれており、高周波商品の電磁界解析を行なうのに電磁界解析ソフトが広く使用されるようになってきている。一般に、電磁界解析の解析手法としては、有限差分時間領域法（ＦＤＴＤ法：Finite Difference Time Domain Method）を代表とする時間領域での解法、モーメント法、および有限要素法の３種類に大きく分類できる。なお、モーメント法および有限要素法は、いずれも周波数領域での解法である。これらの解析手法の中で、有限要素法は、複雑なモデル形状に対して対応しやすいという特徴があり、電磁解解析の解析手法として採用されることが多い。
【０００３】
この有限要素法を用いた電磁界解析においては、大規模な連立一次方程式を解く必要がある。従来、電磁界解析には、ガウスの消去法と呼ばれる直接法しか適用できないため、計算時間が長くなるという問題が知られていた。
【０００４】
このような状況において、Ｍｕｌｔｉｇｒｉｄという解法が電磁界解析でも使えることが証明され、直接法ではなく、反復法を用いて、大規模な連立一次方程式を解くことが可能となった。このＭｕｌｔｉｇｒｉｄ法は、解析対象を細かな要素と粗い要素との２種類に分割し、粗い要素の解を利用して細かな要素の解を求めるものである。
【０００５】
さらに、国際公開第２００５／０５７４３４号パンフレット（特許文献１）には、Ｎｏｎ−ｎｅｓｔｅｄ  Ｍｅｓｈを使用したＭｕｌｔｉｇｒｉｄ法を用いて電磁界解析をより高速に実行する方法が開示されている。この方法によれば、反復法を用いて大規模な連立一次方程式を解くことができるので、直接法を用いて電磁界解析を実行する場合に比較して、計算時間を大幅に短縮できる。
【特許文献１】国際公開第２００５／０５７４３４号パンフレット
【非特許文献１】Roland W.Freund et al., "QMR:a Quasi-Minimal Residual Method for Non-Hermitian Linear Systems",Numer.Math.60, 1991, pp.315-339.
【非特許文献２】Roland W.Freund et al., "A NEW KRYLOV-SUBSPACE METHOD FOR SYMMETRIC INDEFINITE LINEAR SYSTEMS", Proceedings of the 14th IMACS World Congress on Computational and Applied Mathematics, pp.1253-1256, 1994.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、国際公開第２００５／０５７４３４号パンフレット（特許文献１）に開示される方法を用いた場合であっても、大規模な連立一次方程式を解く必要は依然として存在している。また、上記の方法では、解析対象を近似モデル化して扱うが、昨今の高周波分野の開発においては、解析対象をより実物に近い状態で電磁界解析することが要求されている。そこで、解析対象をより正確に３次元モデル化すると、モデルが複雑化し、解くべき連立一次方程式の規模はさらに大きくなる。すなわち、電磁界解析をより短時間で完了するためには、大規模な連立一次方程式をより高速に解く必要がある。
【０００７】
上述のような反復法の代表的な解法として、非特許文献１に開示されるようなＱＭＲ法（擬似的最小残差法：Quasi-Minimal Residual Method）が知られている。このＱＭＲ法は、正方行列である任意の係数行列をもつ連立一次方程式に対して適用可能である。すなわち、ＱＭＲ法が解くことのできる連立一次方程式は、その係数行列が正方行列であればいずれであってもよく、適用対象がエルミート行列や複素対称行列などに制限されることはない。
【０００８】
これに対して、非特許文献２には、係数行列がエルミート行列である連立一次方程式をより短時間に解く方法として、ＳＱＭＲ法（対称擬似的最小残差法：Quasi-Minimal Residual Method）が開示されている。このＳＱＭＲ法によれば、エルミート行列の係数行列をもつ連立一次方程式を、ＱＭＲ法に比較して高速に解くことが可能である。
【０００９】
しかしながら、国際公開第２００５／０５７４３４号パンフレット（特許文献１）に開示されるようなメッシュ化の手法を用いて電磁界解析を行なおうとする場合には、生成される連立一次方程式の係数行列は、複素対称行列となるため、ＳＱＭＲ法を採用することができない。その結果、このような電磁界解析には、ＱＭＲ法を使用せざるを得ず、処理時間を十分に短縮することができなかった。
【００１０】
そこで、この発明は、かかる問題を解決するためになされたものであり、その目的は、複素対称行列の係数行列を有する連立一次方程式をより高速に解くための方法を提供することである。
【課題を解決するための手段】
【００１１】
この発明のある局面に従えば、演算装置を用いて連立一次方程式の解を反復的に決定する方法であって、演算装置は、演算処理部と、記憶部と、出力部とを含み、連立一次方程式は、Ｎ行×Ｎ列の複素対称行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表わせる。そして、方法は、演算処理部が、複素対称行列Ａと、係数行列ｂと、第１前処理行列および第２前処理行列とを記憶部に格納するステップと、演算処理部が、連立一次方程式の反復解を予め定められた初期値に設定するステップと、演算処理部が、連立一次方程式についての初期値に設定した反復解における残差ベクトルを算出するステップと、演算処理部が、算出された反復解における残差ベクトルに基づいて、反復解を修正するステップと、演算処理部が、連立一次方程式についての修正後の反復解における残差ベクトルを算出するステップと、演算処理部が、算出された修正後の反復解における残差ベクトルの大きさに基づいて、反復処理が収束しているか否かを判断するステップと、反復処理が収束していないと判断すると、演算処理部が、反復解を修正するステップと、修正後の反復解における残差ベクトルを算出するステップと、反復処理が収束しているか否かを判断するステップとを繰返すステップと、反復処理が収束していると判断すると、演算処理部が、当該時点の反復解を連立一次方程式の解として出力部から出力するステップとを備える。反復解を予め定められた初期値に設定するステップは、演算処理部が、第１前処理行列の逆行列と初期値に設定した反復解における残差ベクトルとの積を第１ベクトル（μ１，μ２，・・・，μＮ）として算出するステップと、演算処理部が、第２前処理行列の逆行列と第１ベクトルとの積を第２ベクトル（ν１，ν２，・・・，νＮ）として算出するステップと、残差ベクトルを（δ１，δ２，・・・，δＮ）として、演算処理部が、第１修正係数としてΣδｋμｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップとを含む。反復解を修正するステップは、演算処理部が、第１ベクトルを複素対称部分行列Ａと第２ベクトルとの積に更新するステップと、演算処理部が、第２修正係数としてΣμｋνｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップと、演算処理部が、第１ベクトルと第１修正係数と第２修正係数とにより残差ベクトルを更新するステップと、演算処理部が、第１ベクトルを第１前処理部分行列の逆行列と更新後の残差ベクトルとの積に更新するステップとを含む。繰返すステップは、演算処理部が、第２前処理行列の逆行列と第１ベクトルとの積を第３ベクトル（ξ１，ξ２，・・・，ξＮ）として算出するステップと、演算処理部が、第１修正係数をΣδｋξｋ（ｋ＝１，２，・・・，Ｎ）に更新するステップと、演算処理部が、第３ベクトル、ならびに更新前の第１修正係数および更新後の第１修正係数により第２ベクトルを更新するステップとを含む。
【００１２】
この発明の別の局面に従えば、相互に通信可能に構成された複数の演算装置を用いて連立一次方程式の解を反復的に決定する方法であって、複数の演算装置の各々は、演算処理部と、記憶部とを含み、連立一次方程式は、Ｎ行×Ｎ列の複素対称行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表わせる。方法は、複数の演算装置のうちの第１の演算装置の演算処理部が、外部入力される、複素対称行列Ａおよび係数行列ｂを対応の記憶部に格納するステップと、第１の演算装置の演算処理部が、外部入力される、第１前処理行列および第２前処理行列を対応の記憶部に格納するステップと、第１の演算装置の演算処理部が、複素対称行列の非零要素が対角位置に配置されるように、連立一次方程式Ａｘ＝ｂの行順序を並び替えるステップと、第１の演算装置の演算処理部が、行順序の並び替え後の複素対称行列および係数行列を、複数の演算装置の残りの演算装置の各々に対応付けてそれぞれ複数の複素部分行列および係数部分行列に分割するステップと、第１の演算装置の演算処理部が、複数の複素部分行列および係数部分行列に対応付けて、第１前処理行列および第２前処理行列を、それぞれ複数の第１前処理部分行列および第２前処理部分行列に分割するステップと、第１の演算装置の演算処理部が、複数の複素部分行列および係数部分行列、ならびに第１および２前処理行列を、それぞれ対応する残りの演算装置に送信するステップと、残りの演算装置の各演算処理部が、第１の演算装置から送信される、複数の複素部分行列および係数部分行列、ならびに第１および第２前処理行列を、対応の記憶部に格納するステップと、残りの演算装置の各演算処理部が、対応の複素部分行列と、対応の係数部分行列とによって規定される部分連立一次方程式の反復解を予め定められた初期値に設定するステップと、残りの演算装置の各演算処理部が、部分連立一次方程式についての反復解における残差ベクトルを算出するステップと、残りの演算装置の各演算処理部が、算出された反復解における残差ベクトルに基づいて、反復解を修正するステップと、残りの演算装置の各演算処理部が、部分連立一次方程式についての修正後の反復解における残差ベクトルを算出するステップと、残りの演算装置の各演算処理部が、算出された修正後の反復解における残差ベクトルの大きさに基づいて、反復処理が収束しているか否かを判断するステップと、反復処理が収束していないと判断すると、残りの演算装置の各演算処理部が、反復解を修正するステップと、修正後の反復解における残差ベクトルを算出するステップと、反復処理が収束しているか否かを判断するステップとを繰返すステップと、反復処理が収束していると判断すると、残りの演算装置の各演算処理部が、当該時点の反復解を、第１の演算装置に送信するステップと、第１の演算装置の演算処理部が、残りの演算装置の各々から送信された複数の反復解を結合するステップと、第１の演算装置の演算処理部が、結合した複数の反復解を連立一次方程式の解として出力するステップとを備える。前記反復解を予め定められた初期値に設定するステップは、前記演算処理部が、前記第１前処理行列の逆行列と前記初期値に設定した前記反復解における残差ベクトルとの積を第１ベクトル（μ１，μ２，・・・，μＮ）として算出するステップと、前記演算処理部が、前記第２前処理行列の逆行列と第１ベクトルとの積を第２ベクトル（ν１，ν２，・・・，νＮ）として算出するステップと、前記残差ベクトルを（δ１，δ２，・・・，δＮ）として、前記演算処理部が、第１修正係数としてΣδｋμｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップとを含む。前記反復解を修正するステップは、前記演算処理部が、前記第１ベクトルを前記複素対称行列Ａと前記第２ベクトルとの積に更新するステップと、前記演算処理部が、第２修正係数としてΣμｋνｋ（ｋ＝１，２，・・・，Ｎ）を算出するステップと、前記演算処理部が、前記第１ベクトルと前記第１修正係数と前記第２修正係数とにより前記残差ベクトルを更新するステップと、前記演算処理部が、前記第１ベクトルを前記第１前処理行列の逆行列と更新後の前記残差ベクトルとの積に更新するステップとを含む。繰返すステップは、演算処理部が、第２前処理部分行列の逆行列と第１ベクトルとの積を第３ベクトルとして算出するステップと、演算処理部が、残差ベクトルと第３ベクトルとの内積により第１修正係数を更新するステップと、演算処理部が、第３ベクトル、ならびに更新前の第１修正係数および更新後の第１修正係数により第２ベクトルを更新するステップとを含む。
【００１３】
好ましくは、複数の複素部分行列および係数部分行列に分割するステップは、複素対称行列および係数行列の所定の行要素が隣接する２つの演算装置で共有されるように、複数の複素部分行列および係数部分行列を決定するステップを含み、反復解を修正するステップは、残りの演算装置の各演算処理部が、対応の複素部分行列および係数部分行列に隣接する行列が割当てられた演算装置との間でデータの交換を行なうステップを含む。
【発明の効果】
【００１４】
この発明によれば、複素対称行列の係数行列を有する連立一次方程式をより高速に解くことができる。
【発明を実施するための最良の形態】
【００１５】
この発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００１６】
［実施の形態１］
（ハードウェア構成）
本発明の実施の形態１に従う連立一次方程式の解を反復的に決定する方法は、代表的に、パーソナルコンピュータやワークステーションといったコンピュータ上で実行されるソフトウェアによって実現される。
【００１７】
図１は、この発明の実施の形態１に従う連立一次方程式の解を反復的に決定する方法を実現するための代表的なハードウェア構成であるコンピュータ１を示す斜視図である。
【００１８】
図１を参照して、コンピュータ１は、ＦＤ（Flexible Disk）駆動装置１１１およびＣＤ−ＲＯＭ（Compact Disk-Read Only Memory)駆動装置１１３を備えたコンピュータ本体１０１と、モニタ１０２と、キーボード１０３と、マウス１０４とを含む。
【００１９】
図２は、コンピュータ１のハードウェア構成を示す概略構成図である。
図２を参照して、コンピュータ本体１０１は、図１に示すＦＤ駆動装置１１１およびＣＤ−ＲＯＭ駆動装置１１３に加えて、相互にバスで接続された、ＣＰＵ（Central Processing Unit）１０５と、メモリ１０６と、固定ディスク１０７と、通信インターフェース１０９とを含む。
【００２０】
ＦＤ駆動装置１１１にはＦＤ１１２が装着され、ＣＤ−ＲＯＭ駆動装置１１３にはＣＤ−ＲＯＭ１１４が装着される。上述したように、本実施形態に従う方法は、ＣＰＵ１０５がメモリ１０６などのコンピュータハードウェアを用いて、ソフトウェアを実行することで実現される。一般的に、このようなソフトウェアは、ＦＤ１１２やＣＤ−ＲＯＭ１１４などの記録媒体に格納されて、またはネットワークなどを介して流通する。そして、このようなソフトウェアは、ＦＤ駆動装置１１１やＣＤ−ＲＯＭ駆動装置１１３などにより記録媒体から読取られて、または通信インターフェース１０９にて受信されて、固定ディスク１０７に格納される。さらに、固定ディスク１０７からメモリ１０６に読出されて、ＣＰＵ１０５により実行される。
【００２１】
モニタ１０２は、ＣＰＵ１０５が出力する情報を表示するための表示部であって、一例としてＬＣＤ（Liquid Crystal Display）やＣＲＴ（Cathode Ray Tube）などから構成される。マウス１０４は、クリックやスライドなどの動作に応じたユーザから指令を受付ける。キーボード１０３は、入力されるキーに応じたユーザから指令を受付ける。ＣＰＵ１０５は、プログラムされた命令を順次実行することで、各種の演算を実施する演算処理部である。メモリ１０６は、ＣＰＵ１０５のプログラム実行に応じて、各種の情報を記憶する。通信インターフェース１０９は、コンピュータ１と他の装置との間の通信を確立するための装置であり、ＣＰＵ１０５が出力した情報をたとえば電気信号に変換して他の装置へ送出するとともに、他の装置から電気信号を受信してＣＰＵ１０５が利用できる情報に変換する。固定ディスク１０７は、ＣＰＵ１０５が実行するプログラムや予め定められたデータなどを記憶する不揮発性の記憶装置である。また、コンピュータ１には、必要に応じて、プリンタなどの他の出力装置が接続されてもよい。
【００２２】
（処理の概略）
本実施の形態１に従う連立一次方程式の解を反復的に決定する方法は、一種の非定常反復法を用いる。ここで、対象とする連立一次方程式は、Ｎ行×Ｎ列の係数行列Ａと、Ｎ行×１列の係数行列ｂとを用いて、Ｎ行×１列の変数行列ｘについて、Ａｘ＝ｂと表わすことができる。そして、本実施の形態１に従う方法は、この連立一次方程式を満足する変数行列ｘを反復的に決定する。特に、本実施の形態１に従う方法は、係数行列Ａが複素対称行列であるものを対象とする。
【００２３】
なお、反復法とは、変数行列ｘを予め定められた初期値に設定し、その時の残差ベクトル（Ａｘ−ｂ）に基づいて、変数行列ｘを順次修正しながら、残差ベクトル（Ａｘ−ｂ）の各要素が略ゼロとなるまで繰返し計算を行なう方法である。そして、残差ベクトル（Ａｘ−ｂ）の各要素が略ゼロとなったときの変数行列ｘの値を解として決定する。
【００２４】
図３は、この発明の実施の形態１に従う方法を実現するための機能ブロック図である。図３に示す各機能ブロックは、ＣＰＵ１０５でプログラムが実行されることで、実現される。
【００２５】
図３を参照して、本実施の形態１に従うＣＰＵ１０５では、入力部２０と、記憶部２１と、初期値設定部２２と、初期残差ベクトル算出部２３と、ベクトル修正部２４と、残差ベクトル算出部２５と、判定部２６との機能が実現される。
【００２６】
入力部２０は、図示しないモデル化装置などから係数行列Ａと、係数行列ｂと、前処理行列Ｍ１，Ｍ２とを受入れ、それらを記憶部２１に格納する。また、記憶部２１は、メモリ１０６または固定ディスク１０７に配置される。
【００２７】
代表的なモデル化装置としては、電磁界解析を行なうために、解析対象を立体的もしくは平面的な複数の要素に分割（メッシュ化）した上で、隣接する要素間の境界条件に基づいて、複数の要素間にわたる連立一次方程式を生成する。入力部２０は、このように生成された連立一次方程式についての係数行列Ａおよび係数行列ｂを受入れる。このような電磁界解析を行なう際のメッシュ化については、国際公開第２００５／０５７４３４号パンフレット（特許文献１）に詳述されているように、Ｎｏｎ−ｎｅｓｔｅｄ  Ｍｅｓｈを使用したＭｕｌｔｉｇｒｉｄ法を用いることが好ましい。このようにＭｕｌｔｉｇｒｉｄ法を用いたメッシュ化によれば、係数行列Ａは複素対称行列となる。
【００２８】
また、前処理行列Ｍ１およびＭ２は、解の収束性を高めるために、対象とする連立一次方程式に応じて予め設定される。より具体的には、変数行列Ａに近似した前処理行列Ｍ（＝Ｍ１×Ｍ２）を所定の方法で決定した上で、この前処理行列の逆行列Ｍ−１を連立一次方程式Ａｘ＝ｂの両辺に乗じることにより、連立一次方程式Ｍ−１Ａｘ＝Ｍ−１ｂを得る。このように得られた係数行列Ｍ−１Ａでは、そのスペクトル特性を改善できるため、より解の収束性を高めることができる。このような一例の処理は「前処理」とも称される。
【００２９】
初期値設定部２２は、変数行列ｘの各要素値を予め設定された初期値に設定する。なお、以下では、計算過程における変数行列ｘを反復解ベクトルとも称す。初期残差ベクトル算出部２３は、初期値設定部２２において初期値に設定された反復解ベクトルの残差ベクトルを算出し、ベクトル修正部２４へ出力する。ベクトル修正部２４は、初期残差ベクトル算出部２３もしくは後述する残差ベクトル算出部２５から与えられる残差ベクトルに基づいて、各時点の反復解ベクトルを修正、すなわち反復解ベクトルに残差ベクトルに依存して算出される補正ベクトルを加算または減算し、新たな反復解ベクトルを算出する。残差ベクトル算出部２５は、ベクトル修正部２４が修正した反復解ベクトルについての残差ベクトルを算出する。判定部２６は、残差ベクトル算出部２５が算出した残差ベクトルの大きさに基づいて、反復処理が収束しているか否か、すなわち連立一次方程式の解が得られたか否かを判断する。ここで、反復処理が収束していると判断すると、判定部２６は、当該時点の反復解ベクトルを連立一次方程式の解として出力する。
【００３０】
一方、反復処理が収束していないと判断すると、判定部２６は、ベクトル修正部２４に残差ベクトルを与え、反復解ベクトルを再度修正する。
【００３１】
次に、図４を用いて、ＣＰＵ１０５が上述の各機能ブロックに相当する処理を実行する手順について説明する。
【００３２】
図４は、この発明の実施の形態１に従う方法に係る処理手順を示すフローチャートである。
【００３３】
図４を参照して、まず、ＣＰＵ１０５は、ＦＤ１１２やＣＤ−ＲＯＭ１１４などの記録媒体、または通信インターフェース１０９を介して、係数行列Ａと、係数行列ｂと、前処理行列Ｍ１，Ｍ２とを受入れ、それらを固定ディスク１０７またはメモリ１０６へ格納する（ステップＳ２）。続いて、ＣＰＵ１０５は、メモリ１０６に格納される反復解ベクトルの各要素値を予め設定された初期値に設定する（ステップＳ４）。そして、ＣＰＵ１０５は、係数行列Ａおよび係数行列ｂと、初期値に設定された反復解ベクトルとに基づいて、初期残差ベクトルを算出する（ステップＳ６）。さらに、ＣＰＵ１０５は、算出した初期残差ベクトルに基づいて、各時点の反復解ベクトルを修正する（ステップＳ８）。ＣＰＵ１０５は、この修正した反復解ベクトルについての残差ベクトルを算出する（ステップＳ１０）。
【００３４】
ＣＰＵ１０５は、算出した残差ベクトルの大きさに基づいて、反復処理が収束しているか否か、すなわち連立一次方程式の解が得られたか否かを判断する（ステップＳ１２）。なお、反復処理の収束とは、代表的に、残差ベクトルの大きさが予め定められた判定値より小さくなっていることを意味する。
【００３５】
反復処理が収束していないと判断すると（ステップＳ１２においてＮＯ）、ＣＰＵ１０５は、算出した残差ベクトルに基づいて、各時点の反復解ベクトルを再度修正し（ステップＳ８）、ステップＳ１０およびステップＳ１２の処理を繰返す。すなわち、ＣＰＵ１０５は、残差ベクトルに基づいて、反復解ベクトルを随時修正していき、連立一次方程式の解を探索する。
【００３６】
一方、反復処理が収束していると判断すると（ステップＳ１２においてＹＥＳ）、ＣＰＵ１０５は、当該時点の反復解ベクトルを連立一次方程式の解として出力する（ステップＳ１４）。そして、処理を終了する。なお、ここでいう出力とは、反復解ベクトルを示す値の固定ディスク１０７への格納、ＦＤ１１２やＣＤ−ＲＯＭ１１４などの記録媒体への格納、およびモニタ１０２への表示、通信インターフェース１０９を介した図示しない外部装置への送信などを含む。
【００３７】
（処理の詳細）
以下、図４に示す処理の詳細について、図５を用いて説明する。
【００３８】
図５は、図４に示すステップＳ４〜ステップＳ１２における詳細な処理手順を示すフローチャートである。
【００３９】
図５を参照して、ステップＳ４において、ＣＰＵ１０５は、反復解ベクトルｘを初期値ベクトルｘ０に設定する。ここで、初期値ベクトルｘ０は、Ｎ次元の複素数空間から任意に設定され得る。すなわち、ｘ０∈ＣＮの関係が成立する。
【００４０】
ステップＳ６において、ＣＰＵ１０５は、ステップＳ６０１〜ステップＳ６０７の処理を実行する。ステップＳ６０１において、ＣＰＵ１０５は、ｒ０＝ｂ−Ａｘ０のベクトル演算式に従って、初期残差ベクトルｒ０を算出する。ステップＳ６０２において、ＣＰＵ１０５は、ｔ＝Ｍ１−１ｒ０のベクトル演算式に従って、ベクトルｔを算出する。但し、式中の＜Ｍ１−１＞は、前処理行列Ｍ１の逆行列を示す。ステップＳ６０３において、ＣＰＵ１０５は、τ０＝‖ｔ‖２＝（Σ｜ｔｉ｜２）１／２の演算式に従って、ユークリッドノルムであるノルムτ０を算出する。但し、式中の＜ｔｉ＞は、ベクトルｔの各要素を示す。ステップＳ６０４において、ＣＰＵ１０５は、ｑ０＝Ｍ２−１ｔのベクトル演算式に従って、ベクトルｑ０を算出する。但し、式中の＜Ｍ２−１＞は、前処理行列Ｍ２の逆行列を示す。ステップＳ６０５において、ＣＰＵ１０５は、変数θ０を「０」に設定する。ステップＳ６０６において、ＣＰＵ１０５は、ρ０＝ｒ０Ｔｑ０のベクトル演算式に従って、変数ρ０を算出する。ここで、ベクトルｒ０，ベクトルｑ０は複素ベクトルである。一般に、要素が複素数である複素ベクトルの内積計算の場合、一方のベクトルの要素はその要素と複素共役な要素を用いて計算することとされているが、この計算においてはどちらの要素についても複素共役はとらないこととする。なお、式中の＜ｒ０Ｔ＞は、ベクトルｒ０の転置行列を示す。ステップＳ６０７において、ＣＰＵ１０５は、ループ変数ｎを初期値である「１」に設定する。
【００４１】
ステップＳ８において、ＣＰＵ１０５は、ステップＳ８０１〜ステップＳ８１１の処理を実行する。ステップＳ８０１において、ＣＰＵ１０５は、ｔ＝Ａｑｎ−１のベクトル演算式に従って、ベクトルｔを算出（更新）する。ステップＳ８０２において、ＣＰＵ１０５は、σｎ−１＝ｑｎ−１Ｔｔのベクトル演算式に従って、変数σｎ−１を算出する。ここで、ベクトルｑｎ−１，ベクトルｔは複素ベクトルである。一般に、要素が複素数である複素ベクトルの内積計算の場合、一方のベクトルの要素はその要素と複素共役な要素を用いて計算することとされているが、この計算においてはどちらの要素についても複素共役はとらないこととする。なお、式中の＜ｑｎ−１Ｔ＞は、ベクトルｑｎ−１の転置行列を示す。ステップＳ８０３において、ＣＰＵ１０５は、変数σｎ−１が「０」であるか否かを判断する。変数σｎ−１が「０」であれば（ステップＳ８０３においてＹＥＳ）、ＣＰＵ１０５は、後続の処理でいわゆるゼロ割が発生するため、以後の処理を中止する。このように処理が中止された場合には、反復解ベクトルなどの初期値を変更した上で、再度処理が実行されるようにしてもよい。変数σｎ−１が「０」でなければ（ステップＳ８０３においてＮＯ）、ＣＰＵ１０５は、以後の処理を継続する。ステップＳ８０４において、ＣＰＵ１０５は、αｎ−１＝ρｎ−１／σｎ−１の演算式に従って、変数αｎ−１を算出する。ステップＳ８０５において、ＣＰＵ１０５は、ｒｎ＝ｒｎ−１−αｎ−１ｔのベクトル演算式に従って、ベクトルｒｎを算出する。このベクトルｒｎが「擬似的な」残差ベクトルに相当する。ステップＳ８０６において、ＣＰＵ１０５は、ｔ＝Ｍ１−１ｒｎのベクトル演算式に従って、ベクトルｔを算出する。ステップＳ８０７において、ＣＰＵ１０５は、θｎ＝‖ｔ‖２／τｎ−１の演算式に従って、変数θを算出する。ステップＳ８０８において、ｃｎ＝１／（１＋θｎ２）１／２の演算式に従って、変数ｃｎを算出する。ステップＳ８０９において、ＣＰＵ１０５は、τｎ＝τｎ−１θｎｃｎの演算式に従って、ベクトルｒｎを算出（更新）する。ステップＳ８１０において、ＣＰＵ１０５は、ｄｎ＝ｃｎ２θｎ−１２ｄｎ−１＋ｃｎ２αｎ−１２ｑｎ−１のベクトル演算式に従って、修正ベクトルｄｎを算出する。ステップＳ８１１において、ＣＰＵ１０５は、ｘｎ＝ｘｎ−１＋ｄｎのベクトル演算式に従って、反復解ベクトルｘを修正する。
【００４２】
ステップＳ１０において、ＣＰＵ１０５は、ｒ＝ｂ−Ａｘｎのベクトル演算式に従って、残差ベクトルｒを算出する。
【００４３】
ステップＳ１２において、ＣＰＵ１０５は、ステップＳ１２０１〜ステップＳ１２０６の処理を実行する。ステップＳ１２０１において、ＣＰＵ１０５は、残差ベクトルｒのノルムが予め定められたしきい値以下であるか否かを判断する。残差ベクトルｒのノルムがしきい値以下であれば（ステップＳ１２０１においてＹＥＳ）、ＣＰＵ１０５は、反復処理が収束していると判断する（ステップＳ１２０２）。一方、残差ベクトルｒのノルムがしきい値以下でなければ（ステップＳ１２０１においてＮＯ）、ＣＰＵ１０５は、ＣＰＵ１０５は、反復処理が収束していないと判断する（ステップＳ１２０３）。そして、ステップＳ１２０４において、ＣＰＵ１０５は、変数ρｎ−１が「０」であるか否かを判断する。変数ρｎ−１が「０」であれば（ステップＳ１２０４においてＹＥＳ）、ＣＰＵ１０５は、後続の処理でいわゆるゼロ割が発生するため、以後の処理を中止する。変数ρｎ−１が「０」でなければ（ステップＳ１２０４においてＮＯ）、ＣＰＵ１０５は、以後の処理を継続する。ステップＳ１２０５において、ＣＰＵ１０５は、ｕｎ＝Ｍ２−１ｔのベクトル演算式に従って、ベクトルｕｎを算出する。ステップＳ１２０６において、ＣＰＵ１０５は、ρｎ＝ｒｎＴｕｎのベクトル演算式に従って、変数ρｎを算出する。ここで、ベクトルｒｎ，ベクトルｕｎは複素ベクトルである。一般に、要素が複素数である複素ベクトルの内積計算の場合、一方のベクトルの要素はその要素と複素共役な要素を用いて計算することとされているが、この計算においてはどちらの要素についても複素共役はとらないこととする。なお、式中の＜ｒｎＴ＞は、ベクトルｒｎの転置行列を示す。ステップＳ１２０７において、ＣＰＵ１０５は、βｎ＝ρｎ／ρｎ−１の演算式に従って、変数βｎを算出する。ステップＳ１２０８において、ＣＰＵ１０５は、ｑｎ＝ｕｎ＋βｎｑｎ−１のベクトル演算式（内積演算）に従って、ベクトルｑｎを算出する。ステップＳ１２０９において、ＣＰＵ１０５は、ループ変数ｎに「１」をインクリメントする。そして、処理は、ステップＳ８０１に戻される。
【００４４】
この発明の実施の形態１と本願発明との対応関係については、ベクトルｔが「第１ベクトル」に相当し、ベクトルｑ０が「第２ベクトル」に相当し、ベクトルｕｎが「第３ベクトル」に相当し、変数ρ０が「第１修正係数」に相当し、変数σｎ−１が「第２修正係数」に相当する。
【００４５】
この発明の実施の形態１によれば、Ｎｏｎ−ｎｅｓｔｅｄ  Ｍｅｓｈを使用したＭｕｌｔｉｇｒｉｄ法を用いて電磁界解析を行う場合などのように、複素対称行列を変数行列を有する連立一次方程式をより高速に解くことができる。
【００４６】
［実施の形態２］
上述のこの発明の実施の形態１においては、主として、単一のコンピュータを用いて本発明に係る方法を実行する構成について説明したが、大規模な（係数行列Ａの次元が相対的に大きい）連立一次方程式をより高速に解くために、複数のコンピュータを用いて分散処理することが望ましい。そこで、この発明の実施の形態２においては、この発明に従う方法を実現する分散コンピューティング環境について説明する。
【００４７】
（ハードウェア構成）
図６は、この発明の実施の形態２に従う連立一次方程式の解を反復的に決定する方法を実行するためのコンピュータシステム２１０の概略構成図である。
【００４８】
図６を参照して、本実施の形態２に従うコンピュータシステム２１０は、プリポストコンピュータ２００と、ファイルサーバ２０２と、クラスタコンピュータ２０４ａ〜２０４ｅとを含む。なお、図６には、５台のクラスタコンピュータ２０４ａ〜２０４ｅを図示するが、クラスタコンピュータの数はいずれであってもよい。以下では、各々のクラスタコンピュータをクラスタコンピュータ２０４とも総称する。また、少なくともプリポストコンピュータ２００およびファイルサーバ２０２は、第１ネットワーク２０８を介して相互に通信可能（データ授受可能）に構成されるとともに、この第１ネットワーク２０８を介して、図示しないモデル化装置などとも通信可能に構成される。さらに、プリポストコンピュータ２００と、ファイルサーバ２０２と、クラスタコンピュータ２０４ａ〜２０４ｅとは、第２ネットワーク２０６を介して相互に通信可能に構成される。後述するように、この第２ネットワーク２０６を介して、分割された連立一次方程式のデータや、各クラスタコンピュータ２０４が決定した解が伝送される。さらに、クラスタコンピュータ２０４ａ〜２０４ｅは、第３ネットワーク２１２を介して相互に通信可能に構成される。後述するように、この第３ネットワーク２１２を介して、各クラスタコンピュータ２０４が相互にデータを参照しながら、連立一次方程式の解を決定する。
【００４９】
プリポストコンピュータ２００は、図示しないモデル化装置などから入力される連立一次方程式を、各クラスタコンピュータ２０４で分散処理できるように分割し、各クラスタコンピュータ２０４に送信する。また、プリポストコンピュータ２００は、各クラスタコンピュータ２０４における算出結果（対象の連立一次方程式の部分解）を結合し、対象の連立一次方程式の解として出力する。また、各クラスタコンピュータ２０４は、プリポストコンピュータ２００から送信されたデータ（対象の連立一次方程式の一部）に基づいて、上述の本実施の形態１と同様の処理を実行し、解を決定する。そして、各クラスタコンピュータ２０４は、決定した解をプリポストコンピュータ２００へ戻す。ファイルサーバ２０２は、係数行列ＡおよびＮ行×１列の係数行列ｂ、ならびに決定された解を格納する。なお、ファイルサーバ２０２に相当する機能をプリポストコンピュータ２００に取り込んでもよい。
【００５０】
プリポストコンピュータ２００、ファイルサーバ２０２、およびクラスタコンピュータ２０４の各々のハードウェア構成については、図２と同様であるので、詳細な説明は繰返さない。
【００５１】
（処理の概略）
図７は、この発明の実施の形態２に従う方法を実現するための機能ブロック図である。図７に示す各機能ブロックは、ＣＰＵ１０５でプログラムが実行されることで、実現される。
【００５２】
図７を参照して、プリポストコンピュータ２００は、入力部３０と、記憶部３１と、並替部３２と、分割部３３と、送信部３４と、受信部３５と、結合部３６と、出力部３７との機能を実現する。代表的に、これらの機能（記憶部３１を除く）はプリポストコンピュータ２００のＣＰＵがプログラムを実行することで実現され、記憶部３１は、プリポストコンピュータ２００のメモリまたは固定ディスクに配置される。代替的に、記憶部３１を、ファイルサーバ２０２の固定ディスクに配置してよい。
【００５３】
一方、クラスタコンピュータ２０４の各々は、受信部４０と、記憶部４１と、初期値設定部４２と、初期残差ベクトル算出部４３と、ベクトル修正部４４と、残差ベクトル算出部４５と、判定部４６との機能を実現する。代表的に、これらの機能は各クラスタコンピュータ２０４のＣＰＵがプログラムを実行することで実現される。代表的に、これらの機能（記憶部４１を除く）はクラスタコンピュータ２０４のＣＰＵがプログラムを実行することで実現され、記憶部４１は、クラスタコンピュータ２０４のメモリまたは固定ディスクに配置される。代替的に、記憶部４１を、ファイルサーバ２０２の固定ディスクに配置してよい。なお、図７には、説明の便宜上、２台のクラスタコンピュータ２０４の機能のみを示すが、上述したように、クラスタコンピュータ２０４の台数は制限されるものではない。
【００５４】
まず、プリポストコンピュータ２００の「プリ処理」機能について説明する。
入力部３０は、図３に示す入力部２０と同様の機能を発揮し、図示しないモデル化装置などから係数行列Ａと、係数行列ｂと、前処理行列Ｍ１，Ｍ２とを受入れ、それらを記憶部３１に格納する。並替部３２は、係数行列Ａの非零要素が対角位置に配置されるように、連立一次方程式Ａｘ＝ｂの行順序を並び替える。この並替処理は、係数行列Ａのバンド幅を縮小することで、より処理を高速化するためのものである。この並替処理について図８を用いて説明する。
【００５５】
図８は、並替処理の概略を説明するための図である。
図８（ａ）は、モデル化装置から入力される連立一次方程式の係数行列Ａの状態を示す図である。図８（ｂ）は、行を並び替えた後の係数行列Ａの状態を示す図である。なお、図８（ａ）および図８（ｂ）では、非零要素が存在する位置（その値がゼロではない要素）が着色されている。
【００５６】
図８（ａ）を参照して、国際公開第２００５／０５７４３４号パンフレット（特許文献１）に記載されるようなＮｏｎ−ｎｅｓｔｅｄ  Ｍｅｓｈを使用したＭｕｌｔｉｇｒｉｄ法を用いると、生成される係数行列Ａは（複素）対称行列となる。そのため、係数行列Ａの対角線を中心として対称的に着色されていることが分かる。この係数行列Ａに対して、並替部３２は、対角位置に非零要素（着色された要素）が配置されるように、連立一次方程式全体の行の順序を逐次的に入れ替える。このような並替処理によって、並替後の係数行列Ａは、図８（ｂ）のようになる。なお、図示しないが、係数行列Ａの並替処理に伴って、対応する係数行列ｂについても並替処理が行なわれる。
【００５７】
なお、このような行の並替処理は、「オーダリング処理」とも称され、代表的には「ＲＣＭ（Reverse Chuthill-Mckee）オーダリング」などの手法を採用することができる。この「ＲＣＭオーダリング」の詳細については、文献（J.A.George. Computer implementation of the finite element method. Tech Rep. STAN-CS, 1971）などを参照されたい。
【００５８】
再度、図７を参照して、分割部３３は、並替部３２によって並び替えられた係数行列Ａおよび対応する係数行列ｂを、各クラスタコンピュータ２０４の各々に対応付けてそれぞれ複数の部分行列に分割する。この分割処理について、図８（ｂ）を参照して説明する。
【００５９】
図８（ｂ）を参照して、分割部３３は、並び替えられた係数行列Ａから、クラスタコンピュータ２０４の数（この場合には、一例として２台）に応じた数の部分行列Ａ１およびＡ２を決定する。ここで、部分行列Ａ１およびＡ２は、それぞれ、ｎ（１）行×ｎ（１）列およびｎ（２）行×ｎ（２）列（０＜ｎ（１），ｎ（２）＜Ｎ）の正方行列である。このように部分行列Ａ１およびＡ２を決定することで、部分行列Ａ１およびＡ２は、係数行列Ａの「複素対称行列」という特性を維持する。また、係数行列Ａの各要素のうち部分行列Ａ１およびＡ２に含まれない要素は、いずれもゼロとなるように最適化される。
【００６０】
なお、係数行列Ａの行要素のうち、所定の隣接する行要素が部分行列Ａ１およびＡ２で共有されるように、部分行列Ａ１およびＡ２が決定される。すなわち、部分行列Ａ１およびＡ２は互いの重複要素を含むように決定される。これは、後述するように、各クラスタコンピュータ２０４が演算過程の結果を相互に参照しながら処理を行なう必要があるためである。
【００６１】
再度、図７を参照して、上述のような手順に従って決定された部分行列Ａ１およびＡ２、ならびに対応する係数行列ｂの部分行列は、送信部３４によって、それぞれ目的のクラスタコンピュータ２０４へ送信される。これに加えて、前処理行列Ｍ１，Ｍ２の対応する要素（部分行列）についてもクラスタコンピュータ２０４へ送信される。
【００６２】
以上のように、入力部３０、並替部３２、分割部３３、および送信部３４で実行される処理は「プリ処理」とも称される。
【００６３】
次に、このプリ処理によって生成された部分行列を受信した各クラスタコンピュータ２０４では、上述した本発明の実施の形態１と同様の方法の処理が実行され、分担する連立一次方程式の解が決定される。具体的には、各クラスタコンピュータ２０４は、受信部４０と、記憶部４１と、初期値設定部４２と、初期残差ベクトル算出部４３と、ベクトル修正部４４と、残差ベクトル算出部４５と、判定部４６との機能を実現する。代表的に、これらの機能（記憶部４１を除く）は各クラスタコンピュータ２０４のＣＰＵがプログラムを実行することで実現され、記憶部４１は、各クラスタコンピュータ２０４のメモリまたは固定ディスクに配置される。代替的に、記憶部４１を、ファイルサーバ２０２の固定ディスクに配置してよい。
【００６４】
受信部４０は、プリポストコンピュータ２００から送信される係数行列Ａの部分行列および係数行列ｂの部分行列を受信し、それらを記憶部４１に格納する。初期値設定部４２と、初期残差ベクトル算出部４３と、ベクトル修正部４４と、残差ベクトル算出部４５と、判定部４６とについては、それぞれ図３に示す初期値設定部２２と、初期残差ベクトル算出部２３と、ベクトル修正部２４と、残差ベクトル算出部２５と、判定部２６と、以下の２つの相違点を除いて同様である。
【００６５】
第１の相違点としては、ベクトル修正部４４が係数行列Ａおよび係数行列ｂを共有する他のクラスコンピュータのベクトル修正部４４との間でデータを相互参照する点である。すなわち、一つのクラスタコンピュータ２０４は、割当てられた部分行列（たとえば、図８（ｂ）に示す部分行列Ａ１）に隣接する部分行列（たとえば、図８（ｂ）に示す部分行列Ａ２）が割当てられた他のクラスタコンピュータ２０４との間で、相互にデータを参照する。
【００６６】
第２の相違点としては、判定部４６では、反復処理が収束していると判断すると、決定した解ベクトルをプリポストコンピュータ２００へ送信する。すなわち、各クラスタコンピュータ２０４が、対象となる連立一次方程式の解を分散して決定するとともに、それぞれが決定した解がプリポストコンピュータ２００に集められる。
【００６７】
その他の構成については、図３と同様であるので、詳細な説明は繰返さない。
最後に、図７を参照して、プリポストコンピュータ２００の「ポスト処理」機能について説明する。
【００６８】
受信部３５は、各クラスタコンピュータ２０４から送信される連立一次方程式の解をそれぞれ受信し、結合部３６へ出力する。結合部３６は、クラスタコンピュータ２０４からそれぞれ送信される解を、部分行列を割当てた順に結合する。出力部３７は、結合された対象とする連立一次方程式の解をファイルサーバ２０２などへ出力する。
【００６９】
なお、上述の説明では、「プリ処理」と「ポスト処理」とを同一のコンピュータで実行する構成について説明したが、それぞれの処理を実行するためのコンピュータを別々に設けてもよい。
【００７０】
（処理フロー）
図９は、この発明の実施の形態２に従う方法に係るプリポストコンピュータ２００における処理手順を示すフローチャートである。
【００７１】
図９を参照して、まず、プリポストコンピュータ２００のＣＰＵは、通信インターフェースなどを介して、係数行列Ａと、係数行列ｂと、前処理行列Ｍ１，Ｍ２とを受入れ、それらを固定ディスクまたはメモリ、もしくはファイルサーバ２０２へ格納する（ステップＳ５２）。続いて、プリポストコンピュータ２００のＣＰＵは、係数行列Ａの非零要素が対角位置に配置されるように、連立一次方程式Ａｘ＝ｂの行順序を並び替える（ステップＳ５４）。さらに、プリポストコンピュータ２００のＣＰＵは、行順序の並び替え後の係数行列Ａおよび係数行列ｂを、各クラスタコンピュータ２０４に対応付けてそれぞれ部分行列に分割する（ステップＳ５６）。その後、プリポストコンピュータ２００のＣＰＵは、ステップＳ５６で分割した部分行列をそれぞれ対応するクラスタコンピュータ２０４に送信する（ステップＳ５８）。
【００７２】
その後、各クラスタコンピュータ２０４での連立一次方程式の解の探索処理が完了すするまで待つ。具体的には、プリポストコンピュータ２００のＣＰＵは、いずれかクラスタコンピュータ２０４から解データを受信するか否かを判断する（ステップＳ６０）。クラスタコンピュータ２０４から解データを受信していなければ（ステップＳ６０においてＮＯ）、プリポストコンピュータ２００のＣＰＵは、解データを受信するまで待つ。一方、クラスタコンピュータ２０４から解データを受信していれば（ステップＳ６０においてＹＥＳ）、プリポストコンピュータ２００のＣＰＵは、受信した解データを固定ディスクまたはメモリ、もしくはファイルサーバ２０２へ格納する（ステップＳ６２）。そして、プリポストコンピュータ２００のＣＰＵは、すべてのクラスタコンピュータ２０４からのデータ受信が完了したか否かを判断する（ステップＳ６４）。データ受信の完了していないクラスタコンピュータ２０４があれば（ステップＳ６４においてＮＯ）、処理はステップＳ６０に戻る。
【００７３】
これに対して、すべてのクラスタコンピュータ２０４からのデータ受信が完了していれば（ステップＳ６４においてＹＥＳ）、プリポストコンピュータ２００のＣＰＵは、各クラスタコンピュータ２０４から受信した複数の解データを結合する（ステップＳ６６）。そして、プリポストコンピュータ２００のＣＰＵは、結合した解データを連立一次方程式の解として出力する（ステップＳ６８）。
【００７４】
図１０は、この発明の実施の形態２に従う方法に係る各クラスタコンピュータ２０４における処理手順を示すフローチャートである。なお、図１０は、１つのクラスタコンピュータ２０４における処理について示したものであり、実際には、複数のクラスタコンピュータ２０４が図１０に記載の処理をそれぞれ実行する。
【００７５】
図１０を参照して、クラスタコンピュータ２０４のＣＰＵは、プリポストコンピュータ２００から割当てられた部分行列のデータを受信したか否かを判断する（ステップＳ８０）。すなわち、クラスタコンピュータ２０４のＣＰＵは、図９に示すステップＳ５８において、プリポストコンピュータ２００から送信される分割された部分行列を受信したか否かを判断する。
【００７６】
割当てられた部分行列のデータを受信していなければ（ステップＳ８０においてＮＯ）、クラスタコンピュータ２０４のＣＰＵは、当該データを受信するまで待つ。これに対して、割当てられた部分行列のデータを受信していれば（ステップＳ８０においてＹＥＳ）、クラスタコンピュータ２０４のＣＰＵは、受信した部分行列を固定ディスクまたはメモリへ格納する（ステップＳ８２）。続いて、クラスタコンピュータ２０４のＣＰＵは、メモリに格納される反復解ベクトルの各要素値を予め設定された初期値に設定する（ステップＳ８４）。そして、クラスタコンピュータ２０４のＣＰＵは、割当てられた係数行列Ａの部分行列および係数行列ｂの部分行列と、初期値に設定された反復解ベクトルとに基づいて、残差ベクトルを算出する（ステップＳ８６）。さらに、クラスタコンピュータ２０４のＣＰＵは、算出した残差ベクトルに基づいて、各時点の反復解ベクトルを修正する（ステップＳ８８）。クラスタコンピュータ２０４のＣＰＵは、この修正した反復解ベクトルについての残差ベクトルを算出する（ステップＳ９０）。さらに、クラスタコンピュータ２０４のＣＰＵは、算出した残差ベクトルの大きさに基づいて、反復処理が収束しているか否か、すなわち連立一次方程式の解が得られたか否かを判断する（ステップＳ９２）。
【００７７】
反復処理が収束していないと判断すると（ステップＳ９２においてＮＯ）、クラスタコンピュータ２０４のＣＰＵは、算出した残差ベクトルに基づいて、各時点の反復解ベクトルを再度修正し（ステップＳ８８）、ステップＳ９０およびステップＳ９２の処理を繰返す。
【００７８】
一方、反復処理が収束していると判断すると（ステップＳ９２においてＹＥＳ）、クラスタコンピュータ２０４のＣＰＵは、当該時点の反復解ベクトルを解データとしてプリポストコンピュータ２００へ送信する（ステップＳ９４）。そして、処理を終了する。
【００７９】
なお、クラスタコンピュータ２０４で実行される連立一次方程式の解の探索処理の詳細は、図４と同様であるので、詳細な説明は繰返さない。
【００８０】
この発明の実施の形態２によれば、クラスタコンピュータの数を比較的自由に増加させることができるので、解析対象をより正確に３次元モデル化して電磁界解析を行うような場合において、解くべき連立一次方程式の規模が大きくなったとしても、電磁界解析に要する時間の増加を抑制できる。
【００８１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００８２】
【図１】この発明の実施の形態１に従う連立一次方程式の解を反復的に決定する方法を実現するための代表的なハードウェア構成であるコンピュータを示す斜視図である。
【図２】コンピュータのハードウェア構成を示す概略構成図である。
【図３】この発明の実施の形態１に従う方法を実現するための機能ブロック図である。
【図４】この発明の実施の形態１に従う方法に係る処理手順を示すフローチャートである。
【図５】図４に示すステップＳ４〜ステップＳ１２における詳細な処理手順を示すフローチャートである。
【図６】この発明の実施の形態２に従う連立一次方程式の解を反復的に決定する方法を実行するためのコンピュータシステムの概略構成図である。
【図７】この発明の実施の形態２に従う方法を実現するための機能ブロック図である。
【図８】並替処理の概略を説明するための図である。
【図９】この発明の実施の形態２に従う方法に係るプリポストコンピュータにおける処理手順を示すフローチャートである。
【図１０】この発明の実施の形態２に従う方法に係る各クラスタコンピュータにおける処理手順を示すフローチャートである。
【符号の説明】
【００８３】
１  コンピュータ、２０，３０  入力部、２１，３１  記憶部、２２  初期値設定部、２３，４３  初期残差ベクトル算出部、２４，４４  ベクトル修正部、２５，４５  残差ベクトル算出部、２６，４６  判定部、３２  並替部、３３  分割部、３４  送信部、３５  受信部、３６  結合部、３７  出力部、４０  受信部、４１  記憶部、４２  初期値設定部、１０１  コンピュータ本体、１０２  モニタ、１０３  キーボード、１０４  マウス、１０６  メモリ、１０７  固定ディスク、１０９  通信インターフェース、１１１  駆動装置、１１３  駆動装置、２００  プリポストコンピュータ、２０２  ファイルサーバ、２０４，２０４ａ〜２０４ｅ  クラスタコンピュータ、２０６  第２ネットワーク、２０８  第１ネットワーク、２１０  コンピュータシステム、２１２  第３ネットワーク。
【図１】
2008269329.tif 000003
【図２】
2008269329.tif 000004
【図３】
2008269329.tif 000005
【図４】
2008269329.tif 000006
【図５】
2008269329.tif 000007
【図６】
2008269329.tif 000008
【図７】
2008269329.tif 000009
【図９】
2008269329.tif 000010
【図１０】
2008269329.tif 000011
【図８】
2008269329.tif 000012