(57)【要約】【課題】電力系統シミュレーション手法である動態安定度計算の回路網方程式の求解を高速に実行できる連立一次方程式の求解処理方式を提供する。【解決手段】係数行列の三角分解を行い、その結果に基づいて前進消去処理と、これに続く後退代入処理とを実行する。その際、係数行列の三角化処理は三重ループの一番内側の処理対象を複数のＣＰＵに按分して独立して並列処理を実行し、次に前進消去処理は処理前に複数のＣＰＵによる並列処理の可否に関する並列処理フラグを作成し、処理中に上記並列処理フラグを参照して、並列処理が可能な要素は並列処理を実行し、並列処理が不可の要素は関連する要素の終了を確認して処理を実行する一方、後退代入処理は前後２つの処理に分け、前段の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、後段の処理では一台のＣＰＵで直列処理を実行する。【選択図】図７
2008165694.tif 000002
【特許請求の範囲】
【請求項１】
連立一次方程式の求解において、係数行列の三角化分解を実行する際に、三重ループの一番内側の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行することを特徴とする連立一次方程式の求解処理方式。
【請求項２】
連立一次方程式の求解において、係数行列の三角化分解を行い、その結果に基づいて前進消去処理を実行する際に、処理前に複数のＣＰＵによる並列処理の可否に関する並列処理フラグを作成し、処理中に上記並列処理フラグを参照して、並列処理が可能な要素は並列処理を実行し、並列処理が不可の要素は関連する要素の終了を確認して処理を実行することを特徴とする連立一次方程式の求解処理方式。
【請求項３】
連立一次方程式の求解において、係数行列の三角化分解を行い、その結果に基づいて前進消去処理を実行した後、引き続いて後退代入処理を実行する際に、この後退代入処理を前後２つの処理に分け、前段の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、後段の処理では一台のＣＰＵで直列処理を実行することを特徴とする連立一次方程式の求解処理方式。
【請求項４】
連立一次方程式の求解において、係数行列の三角化分解を実行する際に、三重ループの一番内側の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、その結果に基づいて前進消去処理と、これに続く後退代入処理とをそれぞれ実行する際に、上記前進消去処理については、処理前に複数のＣＰＵによる並列処理の可否に関する並列処理フラグを作成し、処理中に上記並列処理フラグを参照して、並列処理が可能な要素は並列処理を実行し、並列処理が不可の要素は関連する要素の終了を確認して処理を実行する一方、上記後退代入処理については、前後２つの処理に分け、前段の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、後段の処理では一台のＣＰＵで直列処理を実行することを特徴とする連立一次方程式の求解処理方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、給電指令所、制御所等の運転員の平常時や事故時における系統運用に関する技術、技能などの維持・向上を図るための訓練シミュレータの系統シミュレーション手法の一つである動態安定度計算の回路網方程式である連立一次方程式の求解を効率良く行うための求解処理方式に関する。
【背景技術】
【０００２】
従来の電力系統シミュレーション計算は、連立一次方程式を解く際の、前進・後退代入計算の一部分をＬＵ分解の分解パスグラフの幹に相当する部分を逆行列因子による計算に置き換えて並列計算するようにしている（例えば、特許文献１参照）。なお、ここにＬＵ分解とは、係数行列を二つの行列ＬとＵに分解するものであり、また、分解パスグラフとは、ＬＵ分解した行列の要素の関係を示すものである。以下、従来の連立一次方程式の求解の方法について説明する。
【０００３】
回路網方程式は、次の式（１）の連立一次方程式を解くものである。
Ｙ・Ｖ＝Ｉ                                              （１）
ただし、Ｙはノードアドミタンス行列（係数行列）、Ｖはノード電圧の変数ベクトル、Ｉはノード電流の定数ベクトルである。
【０００４】
ＬＵ分解は、式（１）のノードアドミタンス行列Ｙを次の式（２）のように二つの行列ＬとＵに分解するものである。
Ｙ＝Ｌ・Ｕ                                                （２）
ここで、Ｌは下三角行列、Ｕは上三角行列である。ノードアドミタンス行列Ｙは、系統構成状態が変化した時のみ変わるので、その時だけＬＵ分解を行えばよい。
【０００５】
前進・後退代入は、式（２）のようにＬＵ分解した結果を用いて、次の式（３）、式（４）を解くものである。
Ｌ・Ｘ＝Ｉ                                              （３）
Ｕ・Ｖ＝Ｘ                                              （４）
ただし、Ｘは変数ベクトルである。
【０００６】
この場合、式（３）は行列Ｌが下三角になっているため、逆行列を計算しなくても代入操作によってＸの上の要素から順番に解ける。これを前進代入という。また、式（４）も同様に、Ｖの下の要素から順番に代入操作で解が得られる。これを後退代入という。しかし、代入操作は、ある程度の順番を守らないといけないので、これを単純に並列化することはできない。以下、この部分を並列化する方法について述べる。
【０００７】
図１１に示すような電力系統について、ＬＵ分解を行った際の分解パスグラフの一例を図１２に示す。分解パスグラフとは、前述のように、ＬＵ分解した行列の要素の関係を示すもので、前進代入はグラフの上から順番に、後退代入はグラフの下から順番に行う必要がある。例えば、母線ｄについての前進代入は母線ａについての前進代入の後で行う必要がある。逆に母線ａと母線ｃは関係がないので独立に前進代入ができる。
【０００８】
例えば、図１２のＰ１、Ｐ２、Ｐ３のように独立した枝葉の部分と、幹の部分Ｗとにグラフを分割する。そして、図１３のフロー図に示すように、Ｐ１〜Ｐ３の部分についての前進代入（ステップ７３）、Ｗの部分についての逆行列因子による計算（ステップ７３）、およびＰ１〜Ｐ３の部分についての後退代入（ステップ７５）（図１４参照）の順序で計算する。このうち、ステップ７４の前進代入とステップ７５の後退代入については、Ｐ１〜Ｐ３はそれぞれ独立しているのでプロセッサ毎に並列に計算できる。
【０００９】
ステップ７４における逆行列因子による計算は、以下のように行う。
逆行列因子とは、行列Ｌ、Ｕまたはそれらをさらに分解した行列の逆行列のことであるが、ここでは図１２の符号Ｗの部分に対応する逆行列因子を計算する。
【００１０】
まず、式（５）のように、行列Ｌを二つの行列ＬＰとＬＷに分解する。
【数１】
2008165694.tif 000003
なお、ＬＰはｎｐ×ｎｐの行列であり、ＬＷはｎｗ×ｎｗの行列である。また、ｎｐはＰ１〜Ｐ３に含まれる母線数、ｎｗは幹であるＷに含まれる母線数である。
【００１１】
ここで、ＬＰはＰ１〜Ｐ３に含まれる母線に対応する列はＬと同じで、それ以外の列は対角要素のみ１がある行列、ＬＷは逆にＷに含まれる母線に対応する列はＬと同じで、それ以外の列は対角要素のみが１の行列である。
【００１２】
同様に行列Ｕも式（６）のように二つの行列ＵＷとＵＰに分解する。
【数２】
2008165694.tif 000004
なお、ＵＰはｎｐ×ｎｐの行列であり、ＵＷ＝はｎｗ×ｎｗの行列である。また、ｎｐはＰ１〜Ｐ３に含まれる母線数、ｎｗは幹であるＷに含まれる母線数である。
【００１３】
式（６）と式（１），式（２），式（５）から、次の式（７）が得られる。
Ｖ＝ＵＰ−１・ＵＷ−１・ＬＷ−１・ＬＰ−１・Ｉ                    （７）
ここで、式（８）のようにおくと、ＷＢがＷについての逆行列因子になる。
【数３】
2008165694.tif 000005
ここで、ＬＰの逆行列を掛ける部分はＰ１〜Ｐ３の前進代入計算に相当し、ＵＰの逆行列を掛ける部分は同じくＰ１〜Ｐ３の後退代入計算に相当する。
【００１４】
ＬＰの逆行列とＩとの積の結果は、既に前進代入計算で得られているので（ステップ７３）、これに逆行列因子ＷＢを掛け合わせればＷの前進後退代入に相当する計算ができることになる。ここで、行列とベクトルの積は行列の各行毎に独立して計算できることを利用して、各行毎にプロセッサで並列に処理する。
【００１５】
【特許文献１】特開平６−２６１４５３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
従来の連立一次方程式の求解処理は、上記の手順で実施されているが、以下の問題点がある。
【００１７】
従来の連立一次方程式の求解処理方式は、並列処理を行うために、まず、電力系統の分解パスグラフを算出して枝葉の部分と幹の部分を確定した上で、枝葉の部分は並列処理を行い、幹の部分は逆行列因子により計算を行うが、分解パスグラフの算出は全ノードと全ブランチの接続関係をサーチするものであり、並列処理ができず直列処理となる。このため、系統規模が大きくなるに伴い、処理時間がノード数のＮ乗（Ｎ＞１）に比例するため、非常に処理時間がかかる。
【００１８】
また、逆行列因子による計算は、本来は密な行列の逆行列をＬｐ、Ｕｐ、Ｌｗ、Ｕｗと４回計算する必要があり、ノード数が５，０００〜２０，０００と想定される基幹系統においては、４個の中の最大処理時間を要する逆行列計算時間以下にすることはできず、膨大な計算量のために計算時間が非常にかかり、高速処理が難しい。これらのために、従来の方式では、連立一次方程式の求解を高速に実行することが困難であった。
【００１９】
本発明は、上述の課題を解決するためになされたもので、連立一次方程式を高速に求解できる求解処理方式を得るものである。
【課題を解決するための手段】
【００２０】
本発明に係る連立一次方程式の求解処理方式は、係数行列の三角化分解を実行する際に、三重ループの一番内側の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、その結果に基づいて前進消去処理と、これに続く後退代入処理とをそれぞれ実行する際に、上記前進消去処理については、処理前に複数のＣＰＵによる並列処理の可否に関する並列処理フラグを作成し、処理中に上記並列処理フラグを参照して、並列処理が可能な要素は並列処理を実行し、並列処理が不可の要素は関連する要素の終了を確認して処理を実行する一方、上記後退代入処理については、前後２つの処理に分け、前段の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、後段の処理では一台のＣＰＵで直列処理を実行することを特徴とするものである。
【発明の効果】
【００２１】
本発明の連立一次方程式の求解処理方式は、係数行列の三角化分解を実行する際に、三重ループの一番内側の処理では処理対象を複数のＣＰＵに平均的に按分して独立して並列処理を実行し、その結果に基づいて前進消去処理と、これに続く後退代入処理とをそれぞれ実行するが、その際、上記前進消去処理および前段の後退代入処理については、フラグ管理によって各ＣＰＵの処理順序と処理終了を遵守し、後段の後退代入処理については一台のＣＰＵで直列処理を実行するので、円滑かつ高速に三角化分解の処理、前進消去処理と後退代入処理の継続連続実行と全体処理の終了を行うことが可能となり、動態安定度計算における回路網方程式の求解を高速に得ることができる。
【発明を実施するための最良の形態】
【００２２】
実施の形態１．
図１は、本発明を適用する訓練シミュレータの構成図である。まず、訓練を実施するための訓練の問題となる系統構成状態、発電機・負荷条件と事故発生条件等から成る訓練シナリオをトレーナが訓練管理サーバ群１とトレーナ卓４とを使用して作成、登録する。
【００２３】
訓練実施時には、トレーナがトレーナ卓４から登録した訓練シナリオを選択して実時間で実行するが、それに伴い、系統摸擬サーバ群２で系統シミュレーションが実行され、その計算結果がトレーナ卓４、トレーニ卓５、および大画面系統盤６にそれぞれ表示される。トレーニ（被訓練者）は、自動化摸擬サーバ群３、トレーニ卓５、大画面系統盤６を使用して事故発生状況を確認、把握し、事故復旧操作のための復旧指令、復旧操作等を行い、停電している負荷の復旧等を行う。
【００２４】
一方、訓練実施中の系統シミュレーションは、系統摸擬サーバ群２で実行されるが、本発明の連立一次方程式の求解処理方式を適用した系統の静的、動的特性をシミュレーションするソフトウェアは、この系統摸擬サーバ群２に実装されて動作する。訓練管理サーバ群１、系統摸擬サーバ群２、自動化摸擬サーバ群３の相互間の情報の送受信や、トレーナ卓４、トレーニ卓５、大画面系統盤６へのデータ送信はシステムＬＡＮ７を介して行われる。
【００２５】
図２は、本発明の連立一次方程式の求解処理を行う系統摸擬サーバ群２を構成する計算機の一例を示すブロック図である。
【００２６】
この計算機８は、対称型マルチＣＰＵ構成の計算機であって、複数のＣＰＵ１〜ｎと、各ＣＰＵ１〜ＣＰＵｎが共通にアクセス可能な共有メモリ１２とから構成される。なお、各ＣＰＵ１〜ＣＰＵｎはキャッシュメモリ、ローカルメモリと外部記憶装置を実装しており、システムＬＡＮ７に共通に接続されている。
【００２７】
図３は、系統摸擬機能サーバ群２に実装されて系統シミュレーションを行う動態安定度計算の処理例を示すフロー図である。動態安定度計算は、積分刻み毎（通常１０ｍｓｅｃ）に回路網方程式の求解と、発電機の微分方程式の求解とを交互に行い、電力系統の母線電圧、位相角、周波数、有効電力、無効電力と発電機の内部位相角等を計算する。
【００２８】
まず、初期処理として、計算時刻の初期化処理（ステップ１３）と、Ｙ行列の作成、三角化分解処理（ステップ１４）を行う。次に、回路網方程式の求解を行うが、まず、系統構成変化の有無を判定し（ステップ１５）、変化がある場合は、Ｙ行列の修正、三角化分解を行い（ステップ１６）、その後、回路網方程式の電流項である発電機の等価電流源の計算処理（ステップ１７）と、非線形負荷の等価電流源の計算処理を行い（ステップ１８）、ステップ１５または１６と１７、１８の結果から回路網方程式の求解を行って（ステップ１９）、母線電圧Ｖを得る。そして、計算結果である回路網の母線電圧Ｖの収束の判定を行い（ステップ２０）、未収束の場合は、ステップ１８に分岐し、計算結果の母線電圧Ｖを使用して非線形負荷の等価電流源の計算を行い（ステップ１８）、回路網方程式の求解処理（ステップ１９）を繰返す。
【００２９】
ステップ１９で回路網方程式の求解が収束すれば、次に、発電機の微分方程式の求解を行う。すなわち、まず、発電機の動揺方程式の求解を行い（ステップ２１）、発電機内部位相角を算出し、次に発電機のＡＶＲ、ガバナ等の制御系と発電機の電機子回路等について、発電機微分方程式の求解を行って発電機内部電圧等を算出し（ステップ２２）、その発電機の内部電圧の収束の判定を行う（ステップ２３）。このとき未収束の場合は、ステップ１７に分岐して回路網方程式の求解と発電機微分方程式の求解を繰返す。
【００３０】
ステップ２３で回路網の電圧と発電機の内部電圧が収束した場合は、動態安定度計算の計算時刻更新を行い（ステップ２４）、計算終了の判定を行い（ステップ２５）、計算終了時間に至っておれば処理を終了するが、計算終了時間に至っていない場合は、ステップ１５に分岐して回路網方程式の求解と発電機微分方程式の求解を繰返す。
ここに、本発明の連立一次方程式の求解処理方式は、図３に示したステップ１９における回路網方程式の求解処理を高速に処理するために適用されるものである。
【００３１】
図４は本発明における連立一次方程式の求解のための三角化分解の元になる基本的な処理を示す図である。処理はｉ，ｊ，ｋの三重のループで構成されており、ループｉではステップ２６，２７の処理を、ループｊではステップ２８，２９の処理を、また、ループｋではステップ３０の処理を行う。
なお、従来では、図４に示す三角化分解過程の処理を一つのＣＰＵが受け持って順序通りに逐次行っているが、本発明では、図４に示すこれらの各処理を複数のＣＰＵが受け持って並列処理できるアルゴリズムを提供するものである。
【００３２】
図５は、本発明における連立一次方程式の求解のための前進消去・後退代入処理の元になる基本的な処理を示すフロー図であって、前進消去過程と、後退代入過程１、および後退代入過程２より構成されている。そして、前進消去過程は、ステップ３１〜ステップ３３で行い、後退代入過程１の処理はステップ３４〜ステップ３６で行い、後退代入過程２の処理はステップ３７〜ステップ３９で行う。
【００３３】
なお、従来では、図５に示す前進消去過程、および後退代入過程１，２の各処理を一つのＣＰＵが受け持って順序通りに逐次行っているが、本発明では、図４に示すこれらの各処理を複数のＣＰＵが受け持って並列処理できるアルゴリズムを提供するものである。
【００３４】
図６は、本発明における連立一次方程式の求解の前進消去・後退代入の元になる処理を説明する場合の系統例である。なお、円内の数字はノード番号を示す。また、図７は、本発明の連立一次方程式の求解を並列処理する場合の具体的なフロー図である。
【００３５】
各ＣＰＵ１〜ＣＰＵｎには、同じプログラムを実装するが、各ＣＰＵ１〜ＣＰＵｎには、事前に独立したＣＰＵ番号を割り付けておく。図７の処理は、図４に示す三角化分解過程と、図５に示す前進消去過程の処理と後退代入である後退代入過程１、後退代入過程２の処理に対応するが、これらの処理を行う場合、全体の制御を行うＣＰＵが必要であり、本例ではそれをＣＰＵ１が担当し、他のＣＰＵ２〜ＣＰＵｎは、与えられた処理を並列処理するということで機能分担を行う。また、ＣＰＵ１は、全体の制御のみならず、ＣＰＵ２〜ＣＰＵｎが担当する処理も同様に分担する。
【００３６】
図７において、最初に三角化分解過程の処理を行うが、先ず当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、フラグ類の処理化処理を行い（ステップ４１）、次にＣＰＵ２〜ＣＰＵの起動を行う（ステップ４２）。続いて、三角化分解の処理に入るが、これらの処理はループｉ、ループｊ、ループｋの３重構造になっている。この３重ループの一番内側であるループｋの処理については、複数のＣＰＵで並列に独立して処理を行い、ループｉ、ループｊの処理は、直列処理としてＣＰＵ１のみで処理を担当する。まず、ループｉの先頭において当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、ループｉの計算式を実行する（ステップ４３）。次に、ループｊの先頭において当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、ループｊの計算式を実行し（ステップ４４）、ＣＰＵ１〜ＣＰＵｎのＣＰＵ起動フラグの設定を行う（ステップ４５）。次に、各ＣＰＵが自分のＣＰＵ起動フラグが設定済みかを判定し（ステップ４６）、未設定の場合は、継続してチェックを行う。自分のＣＰＵ起動フラグが設定済みの場合は、自分の処理対象のａｊｋ群（配列ｋの何番から何番までを担当）を設定し（ステップ４７）、それに基づきループｋの計算式を実行し（ステップ４８）、計算終了後に自分のＣＰＵ起動フラグをゼロクリアする（ステップ４９）。次に、当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、ループｋの終了を判定し（ステップ５０）、未終了であれば継続してチェックを行い、終了していればループｊの終了を判定し（ステップ５１）、終了していない場合は、ｊを１だけ増加させてループｊの先頭に分岐する。終了している場合は、ループｉの終了を判定し（ステップ５３）、終了していない場合は、ｉを１だけ増加させて（ステップ５４）、ループｉの先頭に分岐する。終了している場合は、三角分解が終了になるので、次の前進代入過程の処理に関連して、全ＣＰＵ処理フラグに「−１」を設定し、三角化分解フラグに「１」を設定し（ステップ５５）、次の前進消去の処理に移る。ステップ４０で、当該ＣＰＵがＣＰＵ１でない場合は、三角化分解フラグ゛が正かを判定し（ステップ５６）、正であれば三角化分解の処理が終了しているので、前進消去の処理に移る。三角化分解フラグが正でない場合、継続して処理を行う必要があるため、ステップ４６に分岐する。
【００３７】
次に、前進消去過程の処理を行うが、まず、当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、フラグ類の初期化処理を行い（ステップ４１）、次に、前進消去過程の各要素が並列処理可能であることを示すＣＰＵ実行フラグの作成、また、不可の場合の関連する要素の終了確認をするためのＣＰＵ参照フラグの作成からなる並列処理フラグの作成を行う（ステップ５７）。続いて、全ＣＰＵ１〜ＣＰＵｎが分担して、前進代入の処理を並列に実行するが、まず、各ＣＰＵの処理順序を示すｋの設定を行い（ステップ５８）、それに基づき処理対象のｂｊを設定し（ステップ５９）、そのｂｊが並列処理可能か否かの判定を行う（ステップ６０）。このとき、Ｙｅｓであればステップ６２に分岐する。一方、Ｎｏの場合は、関連するｂｉ要素が処理済であるかをステップ６１で判定し、Ｙｅｓであれば前進消去過程の計算を行い（ステップ６２）、ＣＰＵ処理フラグを設定する（ステップ６３）。ステップ６１でＮｏの場合は、関連するｂｉ要素の処理が終了するまで継続してチェックを行う。最後に、前進消去過程の処理が全て終了しているかを前進消去過程終了でチェックし（ステップ６４）、終了していない場合は、ＣＰＵ処理フラグをゼロクリアし（ステップ６５）、ステップ５８に分岐する。ステップ６４でチェックが終了していれば前進消去過程の処理を終了として、次の後退代入過程１の処理に移る。
【００３８】
後退代入過程１の処理は独立しており、各ＣＰＵで並列処理が可能である。従って、まず、当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１であれば、フラグ類の初期化処理を行う（ステップ４１）。次に、ＣＰＵ毎の処理対象Ｘｉ群の設定を行う（ステップ６６）。基本的には均等に分担するが、計算対象のノード数をＣＰＵ台数（ＣＰＵｎ）分だけ割当てた場合、余りが生じることがある。その場合、余りはＣＰＵ１で処理するようにし、ＣＰＵ２〜ＣＰＵｎでは均等に分担するようにする。
【００３９】
次に、各ＣＰＵの処理対象に従って、後退代入過程１の計算（ステップ６７）、およびＣＰＵの処理フラグの設定処理を行う（ステップ６３）。その後に、後退代入過程１の終了判定を行い（ステップ６８）、終了していない場合は終了同期を取る。終了していれば、後退代入の最後の処理である後退代入過程２の処理に移行する。
【００４０】
後退代入過程２の処理は、全て直列処理となるため、ＣＰＵ１のみでこの処理を実行する。まず、当該ＣＰＵで、自分がＣＰＵ１であるかどうかを判定し（ステップ４０）、ＣＰＵ１でない場合は、すべての処理を終了する。一方、ＣＰＵ１であれば、処理順序ｋの初期値設定を行い（ステップ６９）、次に、後退代入過程２の計算を行い（ステップ７０）、処理が終了したか否かの判定を行う（ステップ７１）。Ｙｅｓであれば全ての処理を終了する。Ｎｏであれば、処理順序ｋを一つ減らして（ステップ７２）、再びステップ７０に移行する。
【００４１】
連立一次方程式の求解については、種々の手法が提案されているが、例えば、電気学会論文誌Ｂ、１０５巻、５号、第４１９〜４２６頁に記載されている方法がある。今、ガウスの消去法による連立一次方程式の求解を、グラフ理論の上から眺めてみると、回路網方程式において、ノード（母線）を逐次縮約していく過程とみなすことができる。
【００４２】
例として、図５に示した電力系統に対応する、連立一次方程式Ａｘ＝ｂを採る。
【数４】
2008165694.tif 000006
【００４３】
今、ノード１を縮約し方程式の次数を下げる。すなわち、次の（１０）式より（１１）式を得て、（１２）式に代入する操作を行う。
ａ１１・ｘ１＋ａ１２・ｘ２＝ｂ１                          （１０）
ｘ１＝ｂ１／ａ１１−ｘ２・ａ１２／ａ１１                  （１１）
ａ２１・ｘ１＋ａ２２・ｘ２＋ａ２３・ｘ３＝ｂ２            （１２）
すると、（１２）式は次のようになる。
ａ２２’・ｘ２＋ａ２３・ｘ３＝ｂ２’                      （１３）
ただし、
ａ２２’＝ａ２２−ａ２１・ａ１２／ａ１１                  （１４）
ｂ２’＝ｂ２−ｂ１・ａ２１／ａ１１                        （１５）
【００４４】
この母線の縮約過程の中で、係数行列に関する式（１４）を取出したのが、三角化の過程であり、ｘとｂを含む式（１５）、（１１）の計算を行うのが、前進消去・後退代入の過程である。三角化過程は、ｘとｂに関係なく計算できるので先に行い、その後で代入過程を行う方法がガウスの消去法に代表される直接解法である。
【００４５】
この方法は、係数行列の三角化分解と前進消去・後退代入の処理を以下の手順で行い、その途中結果Ｃ（ｉ）、Ｄ（ｌ）、Ｐ（ｌ）、Ｑ（ｌ）の値を全てベクトルの形で格納するものである（後の表１を参照）。その際、Ｄ（ｌ）、Ｐ（ｌ）、Ｑ（ｌ）は同じベクトル長で格納する。次に、具体例を示す。
【００４６】
（ａ）三角化過程
【数５】
2008165694.tif 000007
【００４７】
（ｂ）前進消去・後退代入過程
【数６】
2008165694.tif 000008
【００４８】
【表１】
2008165694.tif 000009
【００４９】
動態安定度計算における回路網方程式の求解は、アドミタンス行列の三角化分解と三角化分解された結果を用いて、前進消去・後退代入を行い、ノード電圧を得る。しかし、アドミタンス行列の三角化分解は、事故発生時、事故除去時、また操作等に伴うＣＢの開閉状態の変化が発生した時点で行う必要があるが、ノード電圧を求める前進消去・後退代入の処理は、負荷が定電力特性、または定電流特性の場合、収束計算が必要となり、平常時でも数回程度、特に、事故発生時、事故除去時点では平常時の数倍程度の収束回数が必要となる。従って、積分刻み１０ｍｓｅｃで実行する回路網方程式の求解においては、系統状態変化時に行うアドミタンス行列の三角化分解処理を１秒に１回行うと想定した場合でも、回路網方程式の求解は１秒間に、１００×（５〜２５）となり、圧倒的に、前進消去・後退代入の処理の実行回数が多くなるが、三角化分解は２次元の係数行列を扱うため１回当たりの処理時間は大きく、一方、前進消去、後退代入の処理は１次元のベクトルを扱うため１回当たりの処理時間は小さい。
本発明は、回路網方程式求解の高速化を狙いとしており、この係数行列の三角化分解過程と、前進消去・後退代入過程とを複数のＣＰＵで並列処理するアルゴリズムにより、高速な処理を実現するものである。
【００５０】
次に、図７に示した係数行列の三角化分解過程、前進消去過程、後退代入過程１，２の各処理を各ＣＰＵが受け持って実行するアルゴリズムについて具体的に説明する。なお、ここでは適用計算機は対称型マルチプロセッサ（ＳＭＰ型）とし、また、ＣＰＵの台数は４台とし、各ＣＰＵ１〜ＣＰＵ４は共有メモリ１２で結合されている。また、前述のように、各ＣＰＵ１〜ＣＰＵ４は必要に応じて処理を分担するが、ＣＰＵ１は全体の制御も同時に担当するものとする。
【００５１】
まず、係数行列の三角化分解過程は、図４に示すように、ｉ，ｊ，ｋの３重ループの処理になるが、この一番内側になるループｋの処理が、右辺のＤ（Ｌ）、ａｉｋ要素と左辺のａｊｋ要素とが独立であるため、並列処理が可能となる。従って、処理対象の要素数を各ＣＰＵで均等に分担して並列処理を行う。しかし、均等に按分する時点で余りが発生する場合は、本例では、ＣＰＵ１で処理させるものとする。このように、三角化分解過程を複数のＣＰＵで並列処理を行う場合、各ＣＰＵの実行可否の管理、処理するａｊｋ要素の決定、各ＣＰＵの処理が終了したことの検出方法を定める必要がある。
【００５２】
（ａ）ＣＰＵ起動フラグ、ＣＰＵ処理フラグの管理（図８参照）
三角化分解の処理を各ＣＰＵで並列処理するには、各ＣＰＵの実行可否を管理するＣＰＵ起動フラグと各ＣＰＵの処理（ループｋの１回分）が終了したことをＣＰＵ処理フラグにより管理する必要がある。
・初期化：
ＣＰＵ１が、全ＣＰＵのＣＰＵ起動フラグとＣＰＵ処理フラグを「０」で初期化する。
・ＣＰＵ起動フラグの設定：
ＣＰＵ１は、ＣＰＵ２〜ＣＰＵｎの実行が可能になれば、各ＣＰＵ起動フラグに当該ＣＰＵに割り当てられたＣＰＵ番号をセットする。
・ＣＰＵ処理フラグの設定：
各ＣＰＵは、ＣＰＵ起動フラグの内容が自ＣＰＵのＣＰＵ番号と一致すれば、与えられた処理を実行し、担当の処理が終了した時点で、ＣＰＵ処理フラグに自ＣＰＵ番号を書き込み、かつ、ＣＰＵ起動フラグをゼロクリアする。
・処理終了の確認：
ＣＰＵ１は、自分の処理が終了した時点に、他のＣＰＵのＣＰＵ処理フラグが正になったことを検出し、三角分解（１回分）が終了したことを確認する。
【００５３】
（ｂ）処理対象となるａｊｋ要素の決定
各ＣＰＵが処理するａｊｋ要素を下記の式により算出する（ｊは前段の処理ループｊで決まっており、従って、処理対象としてはｋを決めることが必要である）。
・各ＣＰＵの平均処理量：  ｋ０＝（ｎｍａｘ−ｉ）／ＣＰＵｍａｘ
・余り：  ｋ１＝（ｎｍａｘ−ｉ）−ｋ０・ＣＰＵｍａｘ
・ＣＰＵ１の処理量：  ｉ＝１〜ｋ０＋ｋ１
・ＣＰＵ２〜ＣＰＵｎの処理量：  ｉ＝（ｋ０＋ｋ１）＋（ＣＰＵｉ―２）＊ｋ０＋１〜（ｋ０＋ｋ１）＋（ＣＰＵｉ―１）＊ｋ０
ただし、ｎｍａｘはａｊｋ要素の要素数、ＣＰＵｍａｘは並列処理するＣＰＵの台数、ＣＰＵｉはＣＰＵ番号（ＣＰＵ１＝１，…，ＣＰＵｎ＝ＣＰＵｍａｘ）である。
【００５４】
三角化分解過程の並列処理の処理手順は、以下の通りである。
（１）まず、ＣＰＵ１は、全ＣＰＵのＣＰＵ起動フラグ、ＣＰＵ処理フラグを「０」で初期化する。→（２）次に、ｉループの処理内容は、全てＣＰＵ１のみで実施する。→（３）次に、ｊループの処理内容は、ＣＰＵ１のみで実施する。→（４）次に、ｋループの処理を全てのＣＰＵで分担して実行するために、まず、ＣＰＵ１が各ＣＰＵのＣＰＵ起動フラグをセットする。→（５）各ＣＰＵは、ＣＰＵ起動フラグをチェックし、起動可であれば、各ＣＰＵが処理対象ａｊｋを決定し、分担する処理を行い、ＣＰＵ処理フラグに自分のＣＰＵ番号をセットし、合わせてＣＰＵ起動フラグをゼロクリアする。→（６）ＣＰＵ１は、全ＣＰＵ処理フラグが正になった場合、今回のｋループの処理を終了し、ｊループの処理、ｉループの処理の終了判定を行い、終了していない場合は、配列を１だけ増加させて、各ループの先頭に分岐する。→（７）ｉループの処理が終了している場合は、三角化分解過程が終了となるので、前進消去過程の処理に移る前に、全ＣＰＵのＣＰＵ処理フラグに「−１」を設定し、三角化分解フラグに「１」を設定し、次の前進消去過程の処理に移る。ＣＰＵ１以外のＣＰＵ２〜ＣＰＵｎは、三角化分解フラグをチェックし、正でない場合は、ループｋの計算式の処理に分岐する。一方、三角化分解フラグが正の場合は、三角化分解処理を終了し、次の前進消去過程に移る。
【００５５】
次に、前進消去過程において、複数のＣＰＵで並列処理を行う場合、処理の順序を守るために、ＣＰＵ実行フラグ、およびＣＰＵ参照フラグが必要であり、さらに、各ＣＰＵの処理するｂｉ，ｂj要素の決定、各ＣＰＵの処理が終了したことの検出方法、また、全行の処理が終了したことの検出方法を定める必要がある。
【００５６】
（ａ）ＣＰＵ実行フラグ、ＣＰＵ参照フラグ
下の表２は前述の表１から一部を抜粋して示したもので、１回目は、ｍ＝１をＣＰＵ１が、ｍ＝２をＣＰＵ２が、ｍ＝３をＣＰＵ３が、ｍ＝４をＣＰＵ４が処理することになる。しかし、ＣＰＵ２は、Ｑ（２）＝２となり、ＣＰＵ１のＰ（１）＝２と一致するため、並列には処理できず、ＣＰＵ１がＰ（１）＝２の処理を終了した後にＣＰＵ２の処理を行う必要がある。ＣＰＵ３、ＣＰＵ４については、ＣＰＵ１と並列に処理可能である。従って、全ＣＰＵが同時に処理するＱ（ｍ）、Ｐ（ｍ）のテーブルをチェックし、Ｑ（ｍ）の値とＰ（ｍ）の値が一致する場合は、そのＱ（ｍ）を処理するＣＰＵは、当該のＰ（ｍ）を処理するＣＰＵの処理が終了した後で、処理を行うようにする必要がある。この並列処理をＣＰＵ実行フラグ、ＣＰＵ参照フラグにより実現する。
【表２】
2008165694.tif 000010
【００５７】
（ｂ）処理対象となるｂｉ，ｂｊ要素の決定
各ＣＰＵが処理するｂｉ，ｂｊ要素を下記の式により算出する。
ｍ＝（ｋ−１）＊ＣＰＵｍａｘ＋ＣＰＵｉ
ｉ＝Ｑ（ｍ）
ｊ＝Ｐ（ｍ）
ただし、ｋは各ＣＰＵの計算回数（ＣＰＵ１が初期化。初期値は１）、ＣＰＵｍａｘは並列処理するＣＰＵの台数、ＣＰＵｉはＣＰＵ番号（ＣＰＵ１＝１，…，ＣＰＵｎ＝ＣＰＵｍａｘ）である。
【００５８】
（ｃ）ＣＰＵ処理フラグの管理（図９参照）
ＣＰＵ１が各ＣＰＵの計算回数ｋの更新を行うためには、各ＣＰＵの処理が終了したことを確認する必要がある。これをＣＰＵ処理フラグと定義する。
・初期化：
ＣＰＵ１が、全ＣＰＵのＣＰＵ処理フラグを、「０」で初期化する。
・ＣＰＵ処理フラグの設定：
各ＣＰＵが、担当の処理が終了した時点で、ＣＰＵ処理フラグに対して自己に予め割り当てられたＣＰＵ番号を書き込む。
・計算回数ｋのカウントアップ：
ＣＰＵ１は、全ＣＰＵのＣＰＵ処理フラグが正になった時点で、ｋを１だけアップし、全ＣＰＵのＣＰＵ処理フラグをリセットする。
【００５９】
（ｄ）前進消去過程終了フラグの管理（図９参照）
前進消去過程の処理終了の判定は、各ＣＰＵが行う。
・初期化：
ＣＰＵ１が、前進消去過程終了フラグを、「０」で初期化する。
・前進消去過程終了フラグの設定：
最終行の検出し各ＣＰＵが処理するｂｊ要素の行番号が、行サイズｎｍａｘと一致した場合、最終行の処理をしたと判断し、それを検出したＣＰＵ（この例ではＣＰＵ３）は、前進消去過程終了フラグに自己のＣＰＵ番号をセットする。
・前進消去過程の終了：
各ＣＰＵは、前進消去過程終了フラグが正の場合、前進消去過程の処理が終了したものと判断し、次の後退代入過程１の処理に移行する。
【００６０】
処理手順は次の通である。
（１）まず、ＣＰＵ１は、全ＣＰＵ実行フラグ、ＣＰＵ参照フラグを「０」で初期化する。→（２）次に、ＣＰＵ１は、処理手順ｋの各ステップで、全ＣＰＵが処理するＱ（ｍ）、Ｐ（ｍ）のテーブルを参照し、Ｑ（ｍ）の値とＰ（ｍ）の値が一致するかチェックする。このとき、一致する場合は、並列処理ができないので、直列処理を行うために、一致するＱ（ｍ）を処理するＣＰＵのＣＰＵ参照フラグに、一致したＰ（ｍ）を処理するＣＰＵ番号を書き込む。一方、一致しないＣＰＵについては、並列処理が可能であり、そのＣＰＵのＣＰＵ実行フラグに、そのＣＰＵのＣＰＵ番号を書き込む。→（３）その後、各ＣＰＵは、自分のＣＰＵ実行フラブをチェックし、自分のＣＰＵ番号と一致する場合は、所定の処理を実行し、終了後に、ＣＰＵ処理フラグに自分のＣＰＵ番号を書き込む。一致しないＣＰＵは、ＣＰＵ参照フラグをみて、ＣＰＵ参照フラグが示すＣＰＵ番号のＣＰＵ処理フラグが正かチェックし、正の場合、自分の所定の処理を実行し、終了後に、ＣＰＵ処理フラグに自分のＣＰＵ処理番号を書き込む。ＣＰＵ処理フラグが正でない場合は、継続して監視を行う。→（４）ＣＰＵ１は、全ＣＰＵ処理フラグをチェックし、全てが正の場合は、ＣＰＵ処理フラグを「０」で初期化し、ｋを１増加して計算を繰返す。  
【００６１】
前進消去過程の並列処理手順は、以下の通りである。
（１）ＣＰＵ１が各ＣＰＵのＣＰＵ処理フラグ、ＣＰＵ実行フラグ、ＣＰＵ参照フラグを初期化する。→（２）ＣＰＵ１が全てのＣＰＵ実行フラグ、ＣＰＵ参照フラグをセットする。→（３）各ＣＰＵが、処理対象となるｂｉ，ｂｊ要素を決定する。→（４）各ＣＰＵが、ＣＰＵ実行フラグをチェックし、自分のＣＰＵ番号と一致する場合はｂｊ要素の計算を行い、ＣＰＵ処理フラグをセットする。なお、ｂｉ要素と掛け算となるＤ要素がゼロの場合は、その処理をスキップする。自分のＣＰＵ番号と一致しない場合は、ＣＰＵ参照フラグが示すＣＰＵ番号について、そのＣＰＵ処理フラグをチェックし、正の場合は、ｂｊ要素の処理を行い、ＣＰＵ処理フラグをセットする。そのＣＰＵ処理フラグが正でない場合は、継続してチェックを行う。→（５）ＣＰＵ１が、全ＣＰＵ処理フラグが正であることを確認し、全ＣＰＵのＣＰＵ処理フラグをゼロクリアし、ｋを１アップして（３）に戻る。→（６）各ＣＰＵは、自分が最終行を処理した場合、前進消去終了フラグをセットする。→（７）各ＣＰＵは、前進消去終了フラグが正の場合、前進消去を終了し、次の後退代入過程１に進む。
【００６２】
次に、後退代入過程１，２の並列処理を行う。
まず、後退代入過程１の処理は、図５に示したように、Ｃ（ｉ）とｂｉを掛けて、Ｘｉに代入する処理（ステップ３０）であり、３者間に依存関係はなく、独立して並列処理が可能である。複数のＣＰＵで並列処理を行う場合、各ＣＰＵの処理するｘｉ要素の決定、各ＣＰＵの処理が終了したことの検出方法、また、全行の処理が終了したことの検出方法を決める必要がある。
【００６３】
（ａ）処理対象となるｘｉの決定
・各ＣＰＵが処理するｘｉを下記の式により算出する。
各ＣＰＵの平均処理量：  ｋ０＝ｎｍａｘ／ＣＰＵｍａｘ
余り：  ｋ００＝ｎｍａｘ−ｋ０・ＣＰＵｍａｘ
ＣＰＵ１の処理量：  ｉ＝１〜ｋ０＋ｋ００
ＣＰＵ２〜ＣＰＵｎの処理量：  ｉ＝（ｋ０＋ｋ００）＋（ＣＰＵｉ―２）＊ｋ０＋１〜（ｋ０＋ｋ００）＋（ＣＰＵｉ―１）＊ｋ０
【００６４】
（ｂ）ＣＰＵ処理フラグ、後退代入過程１フラグの管理（図１０参照）
後退代入過程１の処理が終了したことをチェックするためには、各ＣＰＵの処理が終了したことを確認する必要がある。
・初期化：
ＣＰＵＩが、全ＣＰＵのＣＰＵ処理フラグ、後退代入過程１終了フラグを、０で初期化する。
・ＣＰＵ処理フラグの設定：
各ＣＰＵが、担当の処理が終了した時点で、ＣＰＵ処理フラグに自ＣＰＵ番号を書き込む。
・後退代入過程１終了フラグの設定：
ＣＰＵ１は、自分の処理が終了した時点に、他ＣＰＵのＣＰＵ処理フラグが正になったことを検出し、後退代入過程１終了フラグをセットする。
【００６５】
後退代入過程１の並列処理手順は、以下の通りである。
（１）各ＣＰＵが、処理対象ｘｉ要素を決定する。→（２）各ＣＰＵが、担当分の処理を終了した時点に、ＣＰＵ処理フラグに自分のＣＰＵ番号をセットする。→（３）ＣＰＵ１は、他ＣＰＵのＣＰＵ処理フラグが全て正であることを確認して、後退代入過程１の終了フラグを設定する。→（４）各ＣＰＵは、後退代入過程１終了フラグが正の場合、後退代入過程１の処理が終了したことを認識し、次の後退代入過程２の処理に進む。
【００６６】
この後退代入過程２の処理については、全てが直列処理になるため、並列処理を実行しても高速化が実現できないので、一台のＣＰＵ１のみで実行する。
【００６７】
（ａ）初期化
初期値  ｋ＝ｎｍａｘ
ただし、ｎｍａｘ：ｘｉの最大要素数
（ｂ）計算式
ｉ＝Ｐ（ｋ）
ｊ＝Ｑ（ｋ）
Ｘｉ＝Ｘｉ−Ｄ（ｋ）・Ｘｊ
ただし、Ｐ（ｋ）、Ｑ（ｋ）、Ｄ（ｋ）は、表１に示す。
（ｃ）処理手順
ｋ＝ｎｍａｘとして、（ｂ）の計算を行う。次にｋ≦１の判定を行い、Ｙｅｓであれば終了し、Ｎｏであれば、ｋ＝ｋ−１の後、（ｂ）の計算を行う。
図６は、上記の処理をフローで示したものである。
【００６８】
以上のように、本発明の連立一次方程式の求解処理方式は、係数行列の三角分解を行い、その結果に基づいて前進消去処理と、これに続く後退代入処理とをそれぞれ実行するが、その際、上記係数行列の三角化分解処理、前進消去処理および前段の後退代入処理については、フラグ管理によって各ＣＰＵの処理順序と処理終了と遵守し、後段の後退代入処理については一台のＣＰＵで直列処理を実行するので、円滑かつ高速に係数行列の三角化分解処理、前進消去処理と後退代入処理の連続処理と全体処理の終了を行うことが可能となり、動態安定度計算における回路網方程式の求解を高速に得ることができる。
【図面の簡単な説明】
【００６９】
【図１】本発明の実施の形態１における訓練シミュレータの構成図である。
【図２】本発明の実施の形態１における連立一次方程式の求解処理を行う計算機の構成を示すブロック図である。
【図３】本発明において、系統シミュレーションを行う動態安定度計算の処理例を示すフロー図である。
【図４】本発明における連立一次方程式の求解のための係数行列の三角化分解処理の元になる処理手順を示すフロー図である。
【図５】本発明における連立一次方程式の求解のための前進消去・後退代入処理の元になる処理手順を示すフロー図である。
【図６】本発明の連立一次方程式の求解のための前進消去・後退代入処理の元になる処理手順を説明する場合の電力系統の一例を示す説明図である。
【図７】本発明の実施の形態１における連立一次方程式の求解処理を行う処理内容を説明するフロー図である。
【図８】係数行列の三角化分解過程において各ＣＰＵが並列処理する際のフラグ管理の説明図である。
【図９】前進消去過程において各ＣＰＵが並列処理する際のフラグ管理の説明図である。
【図１０】後退代入過程１において各ＣＰＵが並列処理する際のフラグ管理の説明図である。
【図１１】従来の方法の説明に供する電力系統の一例を示す図である。
【図１２】従来方法の前進代入の処理順序の説明図である。
【図１３】従来方法の処理内容を説明するフロー図である。
【図１４】従来方法の後退代入の処理順序の説明図である。
【符号の説明】
【００７０】
１  訓練管理サーバ群、２  系統摸擬サーバ群、３  自動化模擬サーバ群、
４  トレーナ卓、５  トレーニ卓、６  大画面系統盤、７  システムＬＡＮ、
８  計算機（ＣＰＵ１〜ＣＰＵｎ）、１２  共有メモリ。
【図１】
2008165694.tif 000011
【図２】
2008165694.tif 000012
【図３】
2008165694.tif 000013
【図４】
2008165694.tif 000014
【図５】
2008165694.tif 000015
【図６】
2008165694.tif 000016
【図７】
2008165694.tif 000017
【図８】
2008165694.tif 000018
【図９】
2008165694.tif 000019
【図１０】
2008165694.tif 000020
【図１１】
2008165694.tif 000021
【図１２】
2008165694.tif 000022
【図１３】
2008165694.tif 000023
【図１４】
2008165694.tif 000024