(57)【要約】【課題】生成できる数値計算アルゴリズムの拡張が効率的に行える数値計算プログラム生成システムを実現する。【解決手段】問題定義入力装置１０により取り込まれた定義情報１１、プログラム様式情報１２から構文解析装置２０が構文解析情報２１を作成し、アルゴリズム格納装置４０は、数値計算アルゴリズムの疑似コードの順序列によって表現されるアルゴリズム情報４１を格納し、様式別テンプレートプログラム格納装置５０は、各疑似コードに対する様式別テンプレートプログラム情報５１を格納し、計算式生成装置６０は、構文解析情報２１から数値計算プログラムに必要な計算式情報６１を生成し、プログラム生成制御装置３０は、構文解析情報２１、アルゴリズム情報４１、様式別テンプレートプログラム情報５１、計算式情報６１から生成プログラム７０を生成する。【選択図】　　　図１
2004086760.tif 000002
【特許請求の範囲】
【請求項１】
数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手段を有することを特徴とする数値計算プログラム生成システム。
【請求項２】
前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手段を有することを特徴とする請求項１記載の数値計算プログラム生成システム。
【請求項３】
前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手段を有することを特徴とする請求項２記載の数値計算プログラム生成システム。
【請求項４】
数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手順を含むことを特徴とする数値計算プログラム生成方法。
【請求項５】
前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手順を含むことを特徴とする請求項４記載の数値計算プログラム生成方法。
【請求項６】
前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手順を含むことを特徴とする請求項５記載の数値計算プログラム生成方法。
【請求項７】
数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする数値計算プログラム生成プログラム。
【請求項８】
前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする請求項７記載の数値計算プログラム生成プログラム。
【請求項９】
前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする請求項８記載の数値計算プログラム生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、数値計算プログラム生成システム、数値計算プログラム生成方法、および、数値計算プログラム生成プログラムに関し、特に生成できる数値計算アルゴリズムの拡張の容易性を有し、生成されるプログラムが対応する計算機アーキテクチャに柔軟性を有する数値計算プログラム生成システム、数値計算プログラム生成方法、および、数値計算プログラム生成プログラムに関する。
【０００２】
【従来の技術】
従来の数値計算プログラム生成システムでは、偏微分方程式などをテキストで表現した入力情報から、数学的手法に従ってコンピュータ上で作成した偏微分方程式の数値計算プログラムに必要となる計算式を、あらかじめ用意されている決まった形式のテンプレートプログラムに穴埋め的に埋め込んだり、インタープリタ的に解釈したりすることにより数値計算プログラムを生成、または、インタープリタ的に実行していた（たとえば、特許文献１、特許文献２）。
【０００３】
また、この例として、米国におけるソフトウェアであるＥＬＬＰＡＣＫ（エルパック）、ＰＤＥ／ＰＲＯＴＲＡＮ（ピーディーイープロトラン）などがある。
【０００４】
［特許文献１］
特開平６−１８０６４４号公報
［特許文献２］
特開平６−５９８６８号公報
【０００５】
【発明が解決しようとする課題】
第１の問題点は、数値計算プログラム生成システムに、新たに生成できる計算アルゴリズムを追加することに手間がかかることである。
【０００６】
その理由は、従来の数値計算プログラム生成方法では、数学的手続きに従ってコンピュータ上で作成した計算式部品を、アルゴリズムの細部の構造を考慮せずに、用意された穴空きプログラムへの穴埋め処理的に生成するだけだからである。生成されるプログラムの内部構造を考慮しないプログラム生成方法では、入力される偏微分方程式などに現れる式の係数の違いしか扱うことが出来なかった。
【０００７】
そのため、生成する計算アルゴリズムを増やすには、穴うめ的なプログラム生成に用いる新たなテンプレートプログラムを用意する必要があり、多くの手間を要していた。
【０００８】
第２の問題点は、数値計算プログラム生成システムが生成するプログラムの対象となる計算機アーキテクチャや行列のデータ構造などを増やす場合、数値計算プログラム生成システムを拡張するのに手間がかかるということである。
【０００９】
その理由は、第１の問題点と同じく、生成されるプログラムのデータ構造の変化を考慮しない穴埋め的なプログラム生成手法では、数学的な計算アルゴリズムが同一であっても、従来のプログラム生成方法では、プログラム生成の際に穴埋め的に用いるプログラムのテンプレートをまた新たに用意する必要があるからである。たとえば、スカラー計算機向けのプログラム生成システムに並列計算機向けのプログラム生成機能を加える場合、数学的な計算アルゴリズムは同一でも生成すべきプログラムが扱うデータ構造などが異なるため、従来の数値計算プログラム生成システムの穴埋め的なプログラム生成方法では対応できなかった。
【００１０】
本発明の目的は、数値計算プログラム生成システムが生成できる数値計算アルゴリズムの拡張が効率的に行える数値計算プログラム生成システムを実現することである。
【００１１】
本発明の他の目的は、一つの数学的な数値計算アルゴリズムの情報から、計算機アーキテクチャや行列構造の違いなどの複数のプログラム様式にそった数値計算プログラムの生成を可能にして、数値計算プログラム生成システムの拡張を容易にすることである。
【００１２】
【課題を解決するための手段】
本発明の第１の数値計算プログラム生成システムは、数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手段を有することを特徴とする。
【００１３】
本発明の第２の数値計算プログラム生成システムは、前記第１の数値計算プログラム生成システムであって、前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手段を有することを特徴とする。
【００１４】
本発明の第３の数値計算プログラム生成システムは、前記第２の数値計算プログラム生成システムであって、前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手段を有することを特徴とする。
【００１５】
本発明の第１の数値計算プログラム生成方法は、数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手順を含むことを特徴とする。
【００１６】
本発明の第２の数値計算プログラム生成方法は、前記第１の数値計算プログラム生成方法であって、前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手順を含むことを特徴とする。
【００１７】
本発明の第３の数値計算プログラム生成方法は、前記第２の数値計算プログラム生成方法であって、前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手順を含むことを特徴とする。
【００１８】
本発明の第１の数値計算プログラム生成プログラムは、数値計算アルゴリズムに関する問題定義情報、プログラム様式情報を第１の記憶装置から入力し、生成する数値計算プログラムの数値計算アルゴリズムを疑似コードの順序列で表現したものからプログラム生成を行うことにより、既に定義されている疑似コードを利用して新たな数値計算アルゴリズムに対応する疑似コードの順序列を作り、数値計算プログラム生成システムが生成する数値計算アルゴリズムを増やし、数値計算プログラムを第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする。
【００１９】
本発明の第２の数値計算プログラム生成プログラムは、前記第１の数値計算プログラム生成プログラムであって、前記第１の記憶装置に入力されたプログラム様式情報の指定に従って各疑似コードに対応している様式別テンプレートプログラム情報を選択して数値計算プログラムを生成することにより、同じ疑似コードの順序列から複数のプログラム様式情報の組み合わせの数値計算プログラムを前記第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする。
【００２０】
本発明の第３の数値計算プログラム生成プログラムは、前記第２の数値計算プログラム生成プログラムであって、前記第１の入力装置に入力された問題定義情報から生成された構文解析情報に基づき、問題定義情報で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データを第３の記憶装置に格納されるアルゴリズム情報から呼び出し、さらに、疑似コードごとにプログラム様式情報で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報を第４の記憶装置から呼び出し、すべての擬似コードに対し第５の記憶装置に格納される計算式情報とともに各数値計算アルゴリズムのプログラム部品を生成し、数値計算プログラムを前記第２の記憶装置に生成する手順をコンピュータに実行させることを特徴とする。
【００２１】
【発明の実施の形態】
次に、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００２２】
図１は、本発明の第１の実施の形態の構成を示すブロック図である。
【００２３】
図１を参照すると、本発明の第１の実施の形態は、キーボードや外部記憶装置などから構成される問題定義入力装置１０と、プログラム制御により動作し構文解析情報２１を作成する構文解析装置２０と、構文解析情報２１を元にプログラム生成の制御を行うプログラム生成制御装置３０と、数値計算アルゴリズムを疑似コードで表現したアルゴリズム情報４１を格納するメモリ等で構成されるアルゴリズム格納装置４０と、様式別に疑似コードに対応するテンプレートプログラム情報である様式別テンプレートプログラム情報５１を格納するメモリ等で構成される様式別テンプレートプログラム格納装置５０と、問題定義情報１１で与えられた偏微分方程式を離散化して得られる計算式など、個別の数値計算プログラムのデータとなる計算式を生成する計算式生成装置６０と、記憶装置等に生成される生成プログラム７０とを含む。
【００２４】
問題定義入力装置１０、アルゴリズム格納装置４０、様式別テンプレートプログラム格納装置５０は、１つの記憶装置であってよい。また、構文解析装置２０、プログラム生成制御装置３０、計算式生成装置６０も、１つの情報処理装置であってよい。
【００２５】
問題定義入力装置１０は、ユーザーが与える問題定義情報１１、プログラム様式情報１２を格納している。問題定義情報１１は、数値計算に現れるアルゴリズムの指定、アルゴリズムに付随するパラメータ、および計算式などの数学的アルゴリズムから構成されるデータである。このようなデータで表されるアルゴリズムとしては、代入処理としての補間、線形偏微分方程式の求解、非線型方程式のニュートン法、可視化ライブラリの呼び出しなどである。一般に、問題定義情報１１は、複数の数値計算アルゴリズムの集合である。プログラム様式情報１２は、生成するプログラムに用いるプログラミング言語名、生成される数値計算プログラムでのデータ表現の扱い方を指定する識別名、行列、特に、疎行列のデータ表現形式名、線形ソルバーや可視化プログラムの名称など、数値計算アルゴリズムを実際にプログラミング言語によってインプリメントする際に必要な属性情報である。
【００２６】
構文解析装置２０は、問題定義情報１１、プログラム様式情報１２からプログラム生成制御装置３０の処理のための構文解析情報２１を作成し、プログラム生成制御装置３０に与える。
【００２７】
アルゴリズム格納装置４０は、疑似コードの順序集合で表現されたアルゴリズム情報４１を格納する。疑似コードとは、抽象的な数値計算アルゴリズムを、プログラミング言語でインプリメンテーションする場合に現れる、具体的なプログラムの様式の要因によって細分化されたアルゴリズムのステップのことである。
【００２８】
様式別テンプレートプログラム格納装置５０には、アルゴリズム情報４１で用いられる各疑似コードに対して、様式ごとのプログラムを生成するためのテンプレートプログラム情報が、様式別テンプレートプログラム情報５１として格納される。各疑似コードには様式別にプログラム生成を行うためのテンプレートプログラム情報が複数存在可能である。これらの様式の例として、プログラミング言語様式、プログラム構造・データ表現様式、行列構造様式、ライブラリ呼び出し様式などがある。
【００２９】
計算式生成装置６０は、プログラム生成制御装置３０から起動され、各数値計算アルゴリズムに対応する数値計算プログラムの生成に必要な計算式や変数名リストなどを数式処理などのデータ処理によって作成し、計算式情報６１としてプログラム生成制御装置３０に供給する。計算式情報６１は、アルゴリズムに現れる変数リスト、座標変換の関数形、数値積分点での計算式など、個別のアルゴリズムの属性となる計算式である。生成するプログラムにより必ずしも計算式生成装置６０が必要ではない。
【００３０】
プログラム生成制御装置３０は、構文解析装置２０が解析した構文解析情報２１に基づき、問題定義情報１１で指定されている各数値計算アルゴリズムのそれぞれに対し、そのアルゴリズムを表現している疑似コードの順序集合データをアルゴリズム情報４１から呼び出し、さらに、疑似コードごとにプログラム様式情報１２で指定された様式に従って、各疑似コードに対応しているプログラム生成のための様式別テンプレートプログラム情報５１を呼び出し、必要な場合には、計算式情報６１とともに各数値計算アルゴリズムのプログラム部品を生成する。この操作を指定されたアルゴリズムを構成する疑似コード全てについて行う。以上の処理を問題定義情報１１、プログラム様式情報１２で指定されている全ての数値計算アルゴリズムに対して行うことにより生成プログラム７０を生成する。
【００３１】
次に、本発明の第１の実施の形態の動作について図面を参照して説明する。
【００３２】
図２は、ユーザーの有限要素法を利用した数値計算問題を記述する問題定義情報１１、および、プログラム様式情報１２の具体例を示す説明図である。
【００３３】
図２を参照すると、２０４の補間を伴う代入処理、２０５の線形偏微分方程式の求解処理、２０６の可視化処理という３つの数値計算アルゴリズムに関する処理が問題定義情報１１のアルゴリズムに関する指定として表現されている。
【００３４】
また、Ｓ２０１、Ｓ２０２は問題記述に用いる変数に関する問題定義情報１１である。Ｓ２０１では変数ｕは補間関数名Ｔ１で補間すること、Ｓ２０２では変数ｒｈｏはｔｅｔ３で定義される数値積分法の積分点で値を有することが指定されている。
【００３５】
Ｓ２０３はプログラム様式情報１２の指定の一例で、プログラム様式としてｆｅｅｌｆｅｍ９０という様式名の有限要素法のプログラム様式が指定されている。
【００３６】
この例では、プログラミング言語としてＦＯＲＴＲＡＮ９０、有限要素法のデータ表現・プログラム形式としてｆｅｅｌｆｅｍ９０と呼ばれる形式が指定されたことになる。線形偏微分方程式の指定Ｓ２０５の内部では、未知変数と試験関数シンボルの指定Ｓ２０５ａ、領域の数値積分法の指定Ｓ２０５ｂ、線形ソルバーの指定Ｓ２０５ｃ、変分方程式の指定Ｓ２０５ｄ、ディリクレ型境界条件の指定Ｓ２０５ｅ、ノイマン型境界条件の指定Ｓ２０５ｆが記述されている。Ｓ２０５ｃのソルバーの指定はプログラム様式情報１２に属している。
【００３７】
図３は、問題定義情報１１の例を示す説明図である。
【００３８】
図４は、問題定義情報１１の例を示す説明図である。
【００３９】
図５は、プログラム生成制御装置３０の基本動作を示すフローチャートである。
【００４０】
図５を参照すると、問題定義入力装置１０に入力された、問題定義情報１１のテキストデータは、構文解析装置２０に供給される。構文解析装置２０は、問題定義情報１１、および、プログラム様式情報１２の構文解析情報２１をプログラム生成制御装置３０に供給する。プログラム生成制御装置３０は、構文解析情報２１から、個々の数値計算アルゴリズムに関するデータを取り出す（図５ステップＡ０１）。プログラム生成制御装置３０は、取り出した数値計算アルゴリズムに対応する数値計算プログラム部品を生成する（図５ステップＡ０２）。この個々の数値計算アルゴリズムプログラム部品の生成を問題定義情報１１とプログラム様式情報１２とに記述された全ての数値計算アルゴリズムに対して繰り返す（図５ステップＡ０３）。次に、ステップＡ０２で生成した数値計算アルゴリズムプログラム部品をつなぎ合わせて完全な生成プログラム７０を生成する（図５ステップＡ０４）。
【００４１】
図６は、図５のステップＡ０２の詳細を示すフローチャートである。
【００４２】
図５のステップＡ０１で取り出された一つの数値計算アルゴリズム（以後、処理する数値計算アルゴリズムと記述）に対して計算式生成装置６０により作成された必要となる計算式、変数名リストなどの計算式情報６１を取り出す（図６ステップＢ０１）。処理する数値計算アルゴリズムに対し、対応する疑似コードの順序集合によって表現されるアルゴリズム情報４１を、アルゴリズム格納装置４０から取り出す（図６ステップＢ０２）。
【００４３】
アルゴリズム情報４１から取り出した数値計算アルゴリズムを表現する擬似コードの順序集合から擬似コードを一つずつ順に取り出す（図６ステップＢ０３）。
次に、ステップＢ０３で取り出した擬似コードと、構文解析情報２１のその擬似コードに指定されているプログラム様式情報１２から、対応する様式別テンプレートプログラム情報５１を様式別テンプレートプログラム格納装置５０より取り出す（図６ステップＢ０４）。
【００４４】
この取り出した様式別テンプレートプログラム情報５１と計算式情報６１とから、取り出した疑似コードに対応した数値計算プログラム対応部分を生成する（図６ステップＢ０５）。処理する計算アルゴリズムを表現する全ての疑似コードに対して繰り返す（図６ステップＢ０６）。
【００４５】
このようにして、疑似コードの順序集合の形で格納されている各数値計算アルゴリズムに対応するプログラムの生成は、アルゴリズムを構成する疑似コードごとに、ユーザーの入力情報で指定されるプログラム様式情報１２から、その疑似コードに対して指定されたプログラム様式の様式別テンプレートプログラム情報５１と、プログラム様式に依存しない計算式情報６１とから生成される。
【００４６】
このため、プログラム生成の対象となる数値計算アルゴリズムを新たに増やす場合、既にシステムに登録されているアルゴリズム情報４１を構成する疑似コードを再利用して、新たに増やす数値計算アルゴリズムの疑似コードの順序集合表現を構成することができる。その場合、再利用した疑似コードの部分に関しては新規にシステムを拡張する必要がないため、新たな数値計算アルゴリズムを増やすことが少ない手間で可能となる。
【００４７】
また、システムが既にプログラム生成機能を有する数値計算アルゴリズムに対し、新たなプログラム様式によるプログラム生成機能を追加しようとする場合、システムの拡張作業は、新たに追加しようとするプログラム様式に関連する疑似コードにだけ、その疑似コードに対応する様式別テンプレートプログラム情報５１を個別に追加することによって実現される。
【００４８】
そのため、一つの数値計算アルゴリズムに対して複数のプログラム様式の属性を持つ数値計算プログラム生成が少ない手間で可能となり、システムの拡張管理も容易となる。
【００４９】
次に、本発明の第１の実施例について図面を参照して説明する。
【００５０】
第１の実施例は、問題定義入力装置１０としてキーボードを、構文解析装置２０、プログラム生成制御装置３０、計算式生成装置６０としてパーソナル・コンピュータを、アルゴリズム格納装置４０、様式別テンプレートプログラム格納装置５０として磁気ディスク装置を備えている。
【００５１】
パーソナル・コンピュータは、構文解析装置２０、プログラム生成制御装置３０、計算式生成装置６０としての論理的処理を行う中央演算装置を有しており、また各磁気ディスク記憶装置には、それぞれ、アルゴリズム情報４１と、様式別テンプレートプログラム情報５１が格納されている。
【００５２】
第１の実施例では生成する生成プログラム７０の例として、有限要素法による線形偏微分方程式の数値計算法を扱う。この時、未知関数はある補間関数の線形結合によって近似され、変分問題として数値的に解を求める。その際、近似に用いる補間関数の形、変分問題を扱うための数値積分法、ディリクレ型およびノイマン型の境界条件が、問題定義情報１１となる。これらは特定のインプリメンテーションに依存しない数学的なものである。この他の特定のインプリメンテーションを行うのに必要な入力情報を、プログラム様式情報１２とよぶ。
【００５３】
図２は、問題定義情報１１およびプログラム様式情報１２の例を示す説明図である。
【００５４】
図３は、問題定義情報１１およびプログラム様式情報１２の例を示す説明図である。
【００５５】
図４は、問題定義情報１１およびプログラム様式情報１２の例を示す説明図である。
【００５６】
図２を参照すると、数値計算アルゴリズムを伴う計算処理としては、補間を伴う代入処理に関するもの（図２Ｓ２０４）、線形偏微分方程式の求解処理に関するもの（図２Ｓ２０５）、可視化処理に関するもの（図２Ｓ２０６）が指定されている。プログラム様式情報１２（図２Ｓ２０３、Ｓ２０５ｃ）以外の、その他の記述は問題定義情報１１に属している。
【００５７】
Ｓ２０１では、変数ｕがＴ１という名称を持つ補間関数によって補間される関数変数であることが指定されている。Ｓ２０２では、変数ｒｈｏはｔｅｔ３という名称で定義される数値積分法の各積分点で値を有する関数変数であることが指定されている。Ｓ２０３では、プログラム様式情報１２としてｆｅｅｌｆｅｍ９０という名称のプログラム様式が指定されている。この例では、プログラミング言語としてＦＯＲＴＲＡＮ９０、有限要素法のデータ表現・プログラム形式としてｆｅｅｌｆｅｍ９０と呼ばれる形式が指定されている。
【００５８】
Ｓ２０５は、線形偏微分方程式の問題定義情報１１である。Ｓ２０５ａでは、ｓｏｌｖｅによって偏微分方程式問題であること、未知変数を表すシンボルがｕ、試験関数を表すシンボルがｔｕとそれぞれ指定されている。Ｓ２０５ｂでは、この偏微分方程式を解く際に用いる数値積分法がｔｅｔ３という名称で定義される数値積分法であることが指定されている。
【００５９】
Ｓ２０５ｃでは、離散化によって現れる連立一次方程式を解くソルバーにａｍｇという名称で定義されているソルバーを使用することを指定している。Ｓ２０５ｃはプログラム様式情報１２で、用いるソルバーのライブラリの種別と、それに従属して連立一次方程式の行列のデータ構造が陰的に指定されている。Ｓ２０５ｄでは、線形偏微分方程式の変分問題形式が積分の形で指定されている。ｉｎｔｅｇｒａｌ（被積分関数）によって指定されている項が領域積分項で、要素剛性行列、および要素荷重ベクトルの計算式情報６１が指定されている。ｂｉｎｔｅｇｒａｌ（被積分関数）によって指定される項は境界積分項で、ノイマン型境界条件に関する計算式情報６１が指定されている。Ｓ２０５ｅではディリクレ型境界条件の計算式情報６１であるｕ＝１０００と条件を課す境界の名称ａｂ，ｂｃが指定されている。
【００６０】
Ｓ２０５ｆでは、ノイマン型境界条件の計算式情報６１であるｇ＝ｕ−１００と、この条件を課す境界の名称ｅｇが指定されている。Ｓ２０６では、関数量ｕ＊１００に対し、コンター図を出力することが指定されている。
【００６１】
図３を参照すると、Ｓ２０１で用いられている補間法Ｔ１に関する補間関数が、名称Ｔ１、要素形状ｔｅｔｒａ（四面体）、および参照要素における座標とその補間関数が、ｒ，ｓ，ｔの多項式との組で指定されている。また、別の補間法Ｔ２もＴ１に続いて指定されている。
【００６２】
図４を参照すると、Ｓ２０２で用いられている数値積分法の名前ｔｅｔ３に関する情報が、参照要素における数値積分点とその重みの組として指定されている。
【００６３】
これらの入力情報は、構文解析装置２０によって解析され、構文解析情報２１が作成される。
【００６４】
図７は、図２、図３、図４に対する構文解析情報２１の例を示す説明図である。
【００６５】
７０１は、Ｓ２０３のＰｒｏｇｒａｍＭｏｄｅｌ文で指定される基本プログラム様式情報１２である。７１１、７１２、７２１、７２２は、それぞれ、図３、図４、Ｓ２０１、Ｓ２０２の入力情報から作られ、数値計算プログラム生成の際の、離散化の数学的な属性情報として利用される。７１１ａと７１２ａはそれぞれ図３、図４のうち、座標や数式がなどの数式情報リストの内部表現が格納されている。
【００６６】
図２のｓｃｈｅｍｅブロックのＳ２０４、Ｓ２０５、Ｓ２０６がそれぞれ独立の数値計算処理を指定した入力情報で、それぞれの構文解析情報２１は、７３０、７４０、７５０として、計算処理単位ごとにまとめられている。各計算処理単位は一つまたは複数の、数値計算アルゴリズムを含む。
【００６７】
説明を明瞭にするため、Ｓ２０５の有限要素法による線形偏微分方程式の数値解法処理をｓｏｌｖｅブロックと名づける。このｓｏｌｖｅブロックは第１の実施例での数値計算アルゴリズムという点からは、３つのサブ処理とそのサブ処理を統括するｓｏｌｖｅブロックの制御の処理の、合わせて４つの数値計算アルゴリズムから構成されている。一つ目のサブ処理の数値計算アルゴリズムは有限要素法の要素剛性行列と要素荷重ベクトルを計算して全体行列と全体荷重ベクトルに足しこむ処理で、構文解析情報２１の７４５に対応する。二つめのサブ処理はノイマン型境界条件を処理する数値計算アルゴリズムで構文解析情報２１の７４６に対応する。三つ目のサブ処理はディリクレ型境界条件を処理する数値計算アルゴリズムで構文解析情報２１の７４７に対応する。ｓｏｌｖｅブロックの制御の処理は構文解析情報２１の７４０から生成される。
【００６８】
プログラム生成制御装置３０は、図５のフローチャートに従って、構文解析情報２１から数値計算アルゴリズムの種別情報のリストである７３１、７４１、７４５ａ、７４６ａ、７４７ａ、７５１を取り出し、順に数値計算プログラムの部品を生成する。この個別の数値計算アルゴリズムに対応する数値計算プログラムの生成処理は図６のフローチャートに従ってプログラム生成制御装置３０が実行する。
【００６９】
ここで、図６のフローチャートの処理を詳細に説明する例として、この前記のｓｏｌｖｅブロックの制御に関する処理の数値計算アルゴリズムをとりあげて説明する。
【００７０】
第１の実施例の処理方法である数値計算アルゴリズムを疑似コードの順序列で表現し、各疑似コードに様式別テンプレートプログラム情報５１を作成してプログラム生成を行う処理は他の３つの数値計算アルゴリズムにも同様に適用できる。
【００７１】
図６のフローチャートの動作を説明するに先立ち、第１の実施例でのｓｏｌｖｅブロックの制御に関する数値計算アルゴリズムの、アルゴリズム情報４１での実装方法の一例について具体的に説明する。
【００７２】
図８は、Ｓ２０５に関するｓｏｌｖｅブロックの制御に関する数値計算アルゴリズムの内容を示すフローチャートである。
【００７３】
このｓｏｌｖｅブロックの制御に関するアルゴリズムは、実装するプログラミング言語や計算機のアーキテクチャなどのプログラム様式には依存しない抽象的なものである。
【００７４】
図８を参照すると、微分方程式を離散化することによって現れる疎行列のデータ構造を、要素と節点の結合関係や各節点での自由度から求める（図８ステップＤ０１）。Ｄ０１によって構造が確定してメモリにアロケーションされた全体行列を格納する配列に、要素毎に計算された要素剛性行列、要素荷重ベクトルを足し合わせる（図８ステップＤ０２）。ノイマン型の境界条件によって規定される境界積分の評価量からの寄与を全体行列に足しこむ（図８ステップＤ０３）。
【００７５】
ディレクレ条件によって値が指定される自由度に対しての処理を行う（図８ステップＤ０４）。構成した連立一次方程式をソルバーによって解く。ステップＤ０６では、選られた解を物理量別に分ける等の後処理を行う（図８ステップＤ０５）。
【００７６】
図８のフローチャートで表される抽象的なアルゴリズムの各ステップを、プログラム様式のレベルへの依存関係によって細分化した小ステップに分割し、その分割された各ステップを一つの疑似コードと呼ぶ。そして、プログラム生成の対象となる数値計算アルゴリズムを、疑似コードの順序列で作られるリストによって表現する。
【００７７】
図９は、図８のフローチャートの疑似コードへの分解の一例を表す疑似コードレベルのフローチャートである。
【００７８】
図９の説明に先立ち、疑似コードを具体例で説明する。図８に現れるような抽象的アルゴリズムの各ステップを実際にコンピュータ言語でインプリメントする場合、実際のインプリメンテーションを確定するためには、色々なレベルに対してそのプログラム様式を決定しなければいけない。
【００７９】
たとえば、用いるコンピュータのプログラミング言語や、各種のデータ構造である。第１の実施例ではこのプログラム様式のクラスのレベルとして、ＦＯＲＴＲＡＮ７７やＣ＋＋など、生成する数値計算プログラムで用いるプログラミング言語の第一のレベル、生成する数値計算プログラムで扱うデータ構造やその表現に関するＰｒｏｇｒａｍＭｏｄｅｌと呼ぶ第２のレベル、データ構造のうち特に行列成分の格納形式に関するデータ構造の表現を扱う第３のレベル、連立一次方程式を解くソルバーなど汎用ライブラリルーチンの呼び出し方法の違いを扱う第４のレベルの、以上４つのレベルを考える。
【００８０】
この時、第４のレベルは第３レベル、第３は第２、第２は第１のレベルにも依存することに注意を要する。このプログラム様式の階層構造に注目し、以後これをインプリメンテーションのレベルと言う。実際のインプリメンテーションは、これら４つのレベルそれぞれに対してプログラム様式がそれぞれ指定されて可能となる。
【００８１】
具体的な例で説明すると、図８のステップＤ０１の「自由度の計算から疎行列を格納する配列を割り当てる」という処理は、「自由度を計算する」という第二のプログラム様式のレベルと、「疎行列を格納する配列を割り当てる」という第三のプログラム様式のレベルに分けることが可能である。このように分けると、ステップＤ０１に対する数値計算プログラムの生成処理を、第二のレベルに依存する部分と、第三のレベルに依存する部分に分離して細分化することができる。そして、この細分化されたプログラム生成処理は、そのレベルに指定されるプログラム様式の個別様式によって定まる。このプログラム様式のレベルによって細分化された、プログラム生成の最小処理単位が本発明で言う疑似コードである。また、本発明では、プログラムソースコードの構造的な構成部品となる、「サブルーチン宣言を行う」や「変数宣言を行う」などのプログラムの宣言文にあたる単位も、プログラム様式のレベル別に分離してそれぞれを疑似コードとしてとり扱う。
【００８２】
アルゴリズムのステップの疑似コードへの分割には任意性があるが、抽象的なアルゴリズムのステップを、なるべくレベルの低いプログラム様式に依存する部分を切り分けて疑似コード分離することが効果的である。なぜなら、たとえば、線形ソルバーの例でいうと、ソルバーの呼び出しという第４のレベルと、第３のレベルの行列格納方法を疑似コードで完全に分離しておけば、同じ行列格納方法を用いるソルバーの取り替えであれば、生成する数値計算プログラムの変更は第４のレベルに関する疑似コードだけに局在化されるからである。
【００８３】
第１の実施例では、４つのレベルに分けたもので説明するが、レベルの数が変わっても同様である。たとえば、メッシュデータなどの入出力データファイルフォーマットは数値計算アルゴリズムとは独立なので、このレベルを追加して５つのレベルにすることも可能である。その場合、ファイル入出力方法が異なるプログラムを生成するシステムを作ることが容易になる。
【００８４】
図９を参照すると、図８のアルゴリズムの疑似コードによる表現は、ステップＥ０１〜Ｅ１５の１５個のステップから構成される。このプログラム様式のレベルに従って分けられた、Ｅ０１〜Ｅ１５の疑似コードのステップはプログラム様式の具体的な指定には依存しないことが重要である。次に、このステップを説明する。以後用語として、Ｅ０１からＥ１５のステップに対応して生成されるプログラムのモジュールをｓｏｌｖｅサブルーチンと言う。
【００８５】
ステップＥ０１は、図８のアルゴリズムが実現されるｓｏｌｖｅサブルーチンを書き出すソースファイルを作成することに対応する疑似コードである。ステップＥ０２は、宣言手続き文など、ｓｏｌｖｅサブルーチンのヘッダー部を生成することに対応する疑似コードである。
【００８６】
ステップＥ０３は、問題依存のパラメータなどの実行前に定まる定数などの宣言文を生成することに対応する疑似コードである。ステップＥ０４は、ｓｏｌｖｅサブルーチン内で用いるローカル変数を宣言することに対応する疑似コードである。ステップＥ０５は、ｓｏｌｖｅサブルーチンで変数の初期化を行うことに対応する疑似コードである。
【００８７】
ステップＥ０６は、行列構造を決定するために必要な未知変数の自由度・方程式番号を計算することに対応する疑似コードである。ステップＥ０７は、境界条件のデータを用意することに対応する疑似コードである。ステップＥ０８は、ｓｏｌｖｅサブルーチンの処理に必要になる行列やベクトルを格納するメモリを割り当てることに対応する疑似コードである。ステップＥ０９は、有限要素法による微分方程式の数値解法で要素行列・要素荷重の計算とそのアセンブルの処理を呼び出すことに対応する疑似コードである。
【００８８】
ステップＥ１０は、ノイマン型境界条件を処理するサブルーチンを呼び出すことに対応する疑似コードである。ステップＥ１１は、ディリクレ型境界条件を処理するサブルーチンを呼び出すことに対応する疑似コードである。ステップＥ１２は、微分方程式を離散化して選られる連立一次方程式を解くソルバーライブラリを呼び出すことに対応する疑似コードである。ステップＥ１３は、ソルバーライブラリを呼び出した後の後処理を呼び出すことに対応する疑似コードである。ステップＥ１４は、ｓｏｌｖｅサブルーチンを終了するにあたっての処理を行うことに対応する疑似コードである。ステップＥ１５は、ｓｏｌｖｅサブルーチンを書き出したファイルを閉じることに対応した疑似コードである。
【００８９】
図１０は、図９の各疑似コードをＣ＋＋の仮想関数とし、それらを順番に呼び出す関数手続きとして図９のフローチャートを実装した図１のアルゴリズム情報４１の実現方法の一例を示す説明図である。
【００９０】
図１０では関数手続きとして実装しているが、リスト・データで表現してインタープリタ的処理により扱うことも可能である。
【００９１】
図９のフローチャートは、クラスＳｏｌｖｅＳｃｈｅｍｅのメンバ関数ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍによって表現されている。図９のフローチャートを表す疑似コードの順序列は、図１０を参照すると、ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍ関数の中の、仮想関数の呼び出し手続き１００１として実現されている。
【００９２】
１００１の呼び出し関数のリストは図９のＥ０１〜Ｅ１５の各ステップに一対一に対応している。つまり、Ｅ０１はＲｏｕｔｉｎｅＩｎｉｔｉａｌｉｚｅ（ｓｏｌｖｅＰｔｒ）、Ｅ０２はＲｏｕｔｉｎｅＨｅａｄｅｒ（ｓｏｌｖｅＰｔｒ）の順にＥ１５のＲｏｕｔｉｎｅＴｅｒｍｉｎａｔｅ（ｓｏｌｖｅＰｔｒ）まで、図９の１５の擬似コードに対応するステップは、それぞれ１００１の各仮想関数に対応する。
【００９３】
次に、プログラム生成制御装置３０による動作について図面を参照して、さらに詳細に説明する。
【００９４】
図１１は、数値計算アルゴリズム処理関数テーブルの内容を示す説明図である。
【００９５】
前記の例では、図７の構文解析情報２１のうち、図７の７４０のテーブルが選択されて、図５のステップＡ０２の処理、つまり図６のステップＢ０１〜Ｂ０６が開始される。ステップＢ０１では、計算処理種別情報７４１のＳＯＬＶＥから、出現変数テーブル７４２が計算式生成装置６０に渡され、計算式情報６１が生成される。ｓｏｌｖｅブロックの制御の数値計算アルゴリズムの場合、計算式情報６１はリスト７４２がそのまま計算式情報６１となる。計算式情報６１の数式処理などによる生成は、構文解析情報２１の７４５のＡＳＳＥＭＢＬＥの数値計算アルゴリズムに対応する数値計算プログラムを生成する場合に必要であるが、本発明の本質には無関係である。この計算式生成処理に関しては、たとえば、「特開平０６−１８０６４４」に記載がある。
【００９６】
図６ステップＢ０２の処理は、７４１の計算処理種別情報から、数値計算アルゴリズム処理関数テーブル（図１１）を参照して、対応する数値計算アルゴリズム処理関数が呼び出すことによって実行される。Ｓｏｌｖｅブロックの制御のアルゴリズムの場合、処理種別名ＳＯＬＶＥからＳｏｌｖｅＳｃｈｅｍｅ：：ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍが呼び出される。また、ステップＢ０３の擬似コードを順に取り出す処理は、ＳｏｌｖｅＳｃｈｅｍｅ：：ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍの実行文１００１が順に実行されることによって実現される。つまり、擬似コードによるアルゴリズム表現は１００１の呼び出し関数のリストに相当する。
【００９７】
図６ステップＢ０４およびステップＢ０５の実現方法は、第１の実施例ではＣ＋＋の仮想関数とポリモーフィズムのメカニズムによる。
【００９８】
まず、ポリモーフィズムの前提となる、仮想関数とその実体関数の実装の構成を、図面を参照して説明する。
【００９９】
図１２は、擬似コード・プログラム様式レベル依存テーブルの内容を示す説明図である。
【０１００】
図１３は、プログラム様式のレベルのグループ分けに対応する仮想関数を示す説明図である。
【０１０１】
図１４は、プログラム様式レベル間の依存関係テーブルの内容を示す説明図である。
【０１０２】
図１５は、実体関数のクラス分けを示す説明図である。
【０１０３】
図１６は、第１の実施例のＣ＋＋のクラス宣言に関する実装例を示した説明図である。
【０１０４】
図１７は、様式別テンプレートプログラム情報の実装例を示す説明図である。
【０１０５】
図１０の関数ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍ内で呼び出される１００１の各関数は、クラスＳｏｌｖｅＳｃｈｅｍｅの仮想関数として宣言される。これらの仮想関数は、擬似コードとしては、図１２に示す擬似コード・プログラム様式存在テーブルに示すような４つのプログラム様式（Ｌａｎｇｕａｇｅ、ＰｒｏｇｒａｍＭｏｄｅｌ、ＭａｔｒｉｘＭｏｄｅｌ、Ｌｉｂｒａｒｙ）のレベルにグループ分けされる。図１３に示す仮想関数のグループ分けと同じく、実体関数は、１つのグループが一つのクラスとして実装される。
【０１０６】
図２の入力例でのプログラム様式の指定は、図２Ｓ２０５ｃで第４のライブラリのプログラム様式のレベルにａｍｇという名称のソルバーライブラリ、図２Ｓ２０３で第２のプログラム様式のレベルにはｆｅｅｌｆｅｍ９０という名称の２つのプログラム様式が陽に指定されている。第３のレベルの行列構造と、第１のレベルのプログラミング言語のレベルは、それぞれ第４、第２のレベルから決定されるため、図１４に示すプログラム様式レベル間の依存関係テーブルから、行列構造のプログラム様式としてＣＲＳという名称が、プログラミング言語の様式としてＦｏｒｔｒａｎ９０が決定されている。
【０１０７】
これから、図２の具体例では、仮想関数に対応する実体関数は、図１５に示されるように、ｃｌａｓｓ　Ｆｏｒｔｒａｎ９０（図１５Ｇ０１）、ｃｌａｓｓ　ｆｅｅｌｆｅｍ９０（図１５Ｇ０２）、ｃｌａｓｓ　ＣＲＳ（図１５Ｇ０３）、ｃｌａｓｓ　ａｍｇ（図１５Ｇ０４）の四つのクラスに実装される。
【０１０８】
上記の構成から、図６ステップＢ０４の機構を実現することができる。それを示すものが、図１６である。図１０の１００１の関数手続きは、クラスＳｏｌｖｅＳｃｈｅｍｅ内の仮想関数として宣言されているが、対応する実体関数は、図１６Ｈ０１のパブリック宣言によって、テンプレート宣言されるクラスＬ１，Ｌ２、Ｌ３、Ｌ４内に実装することが可能になる。このＬ１、Ｌ２、Ｌ３、Ｌ４の組み合わせを指定することによって、プログラム様式情報１２から実体関数の選択が可能になる。たとえば、図２の指定されている例が、図１５と図１６Ｈ０３とであり、テンプレート宣言のＬ１、Ｌ２、Ｌ３、Ｌ４、それぞれがＦｏｒｔｒａｎ９０、ｆｅｅｌｆｅｍ９０、ＣＲＳ、ａｍｇと指定されることにより、図６ステップＢ０４の選択の処理が実現される。
【０１０９】
第１の実施例では、上記の通り図６ステップＢ０４の「疑似コードに対応する様式別テンプレートプログラム情報５１」は、プログラム様式のレベル別に宣言されるクラスごとにまとめられた仮想関数に対応する実体関数の実行文という形で格納されている。これは具体的には、図１７で表されるようなＣ＋＋の実行文である。図１７Ｊ０１のリストは、行列構造のプログラム様式にＣＲＳ形式が指定された時に呼び出される、図９ステップＥ０８に対応するテンプレートプログラム情報である。このように、第１の実施例では様式別テンプレートプログラム情報５１は、Ｃ＋＋のｐｒｉｎｔｆ文の形で実現されている。
【０１１０】
図６ステップＢ０２〜ステップＢ０６の処理を示すのが、図１５、図１６のリストである。つまり、図６ステップＢ０２の疑似コードによるアルゴリズム情報４１をアルゴリズム格納装置４０から取り出す処理は、図１６Ｈ０４に相当する。図１６Ｈ０４の、ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍ関数が実行されると、図１０の１００１が実行されるため、図６ステップＢ０３の疑似コードを順に取り出す処理が実現できる。図６ステップＢ０４のプログラム様式情報１２から様式別テンプレートプログラム情報５１を取り出す処理は、実行文である図１６Ｈ０３のＣ＋＋での仮想関数のポリモーフィズムの機構によって実現される。図６ステップＢ０５の数値計算プログラム対応部分を生成する処理は、各仮想関数の実体関数（図１７Ｊ０１、Ｊ０２など）が実行され、ｐｒｉｎｔｆ文によってディスク装置などに生成プログラム７０の部分が順に書き出されることにより、生成プログラム７０の生成が実現される。
【０１１１】
図１８は、上記の手順によって出力された、生成プログラム７０の一例である。図１８に示されるように、疑似コードに対応する図１０の関数ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍが呼び出されて１００１の仮想関数が順に実行されると、図１５で示されている実体関数がポリモーフィズムの機構によって指定されたプログラム様式に従って順に呼ばれてプログラムの部品を順にファイル等に書き出すことによって、生成プログラム７０のソースファイルが生成される。
【０１１２】
偏微分方程式の数値解法は主として連立一次方程式を解くことに帰着して解く。一般にこの計算に現れる行列は次元の大きい疎行列になるので行列を効率的に記憶することが必要であるが、偏微分方程式の性質や計算を行う計算機のアーキテクチャ、または連立一次方程式を解く線形ソルバーによって効果的な行列の記憶の仕方に違いがある。そのため、特に新たに考案された行列のデータ構造に対応した計算プログラムを生成することが、数値計算プログラム生成システムにとって産業上有用である。
【０１１３】
本発明の第１の実施の形態でのプログラム生成の処理単位は、インプリメンテーション上のプログラム様式別の基本単位に細分化され、それぞれが一つの疑似コードとして表現されている。すなわち、行列構造のレベルに関する疑似コードに対してのみ、新たな行列構造様式、つまり、新たなプログラム様式に対応したテンプレートプログラム情報を用意すれば、新たな行列構造に対応した数値計算プログラム生成システムに拡張できる。
【０１１４】
図１９は、テンプレートプログラム情報を拡張する方法を示す説明図である。
【０１１５】
図１９を参照すると、第３の行列構造のレベルに属する図９Ｅ０８の擬似コードに対し、ＣＲＳ形式に加えてＳｋｙｌｉｎｅ形式のプログラム様式である様式別テンプレートプログラム情報が付け加えられている。この操作を残りの同じく第３の行列構造のレベルに属する擬似コード図９Ｅ０９、Ｅ１０、Ｅ１１に行えば、第１のプログラミング言語レベルに属する擬似コード図９Ｅ０１、Ｅ０５、Ｅ１５、及び、第２のＰｒｏｇｒａｍＭｏｄｅｌレベルに属する擬似コード図９Ｅ０２、Ｅ０３、Ｅ０４、Ｅ０６、Ｅ０７、Ｅ１３、Ｅ１４に関する数値計算プログラム生成システムの変更は不要で、関数ＳｏｌｖｅＳｃｈｅｍｅ：：ＮｏｒｍａｌＬｉｎｅａｒＰｒｏｂｌｅｍを呼ぶことによって、図２の入力情報Ｓ２０５ｃに対する行列構造がＳｋｙｌｉｎｅ形式の生成プログラム７０が生成可能となり、数値計算プログラム生成システムの拡張が容易になる。具体的には、図１７のＪ０１に、Ｊ０２を付け加えるだけでよい。
【０１１６】
以上、行列構造レベルに関する拡張について述べたが、プログラミング言語レベル、ＰｒｏｇｒａｍＭｏｄｅｌレベル、ライブラリレベルでも同様で、プログラム様式を拡張する場合、第１の実施例のように必要最小限の追加によって数値計算プログラム生成システムの拡張が実現される。
【０１１７】
本発明では、ある数値計算アルゴリズムに対応する数値計算プログラムは、擬似コードの順序列からなる制御情報から生成される。この方式の数値計算プログラム生成システムに、新たな数値計算アルゴリズムに対応する数値計算プログラムの生成機能を加える場合、既に実装された擬似コードを使って数値計算アルゴリズムを追加することが可能である。例として、線形偏微分方程式の制御アルゴリズム（図９）の数値計算プログラムを生成する機能を利用して、Ｎｅｗｔｏｎ法を用いて非線形偏微分方程式を数値的に解く制御アルゴリズムの数値計算プログラムを生成する機能を付け加える場合を説明する。
【０１１８】
図２０は、非線形問題を扱う擬似コードの順序列が線形問題の擬似コードを使って表現されることを示す説明図である。
【０１１９】
非線形方程式をＮｅｗｔｏｎ法で解く場合、方程式を線形化し、繰り返し線形問題を解くことによって解を求める。図９で示される線形問題の制御プログラムのフローチャートを非線型問題に拡張する際に必要なものは、図９Ｅ０８と図９Ｅ０９との間に非線型問題の初期化とループに関する制御を入れることと、図９Ｅ１３のソルバーの後処理を非線型問題の際のソルバーの後処理に変更するだけで、残りの図９Ｅ０１〜Ｅ０８、Ｅ１０〜Ｅ１２、Ｅ１４〜Ｅ１５の処理はまったく同じでよい。つまり、図２０に示すように、非線型問題特有の疑似コード（図２０Ｋ０１、Ｋ０２）を新たに用意して、それに対応するプログラム部品生成機能を付け加えればよい。
【０１２０】
このように、既存の擬似コードを再利用することによって、必要な擬似コードの追加だけでプログラム生成システムで扱える数値計算アルゴリズムの拡張が可能となり、数値計算プログラム生成システムが扱えるアルゴリズムの追加が容易に行うことができる。本実施例では有限要素法の場合について述べたが、差分法や有限体積法でも同様な手法でプログラム生成システムを作成することができる。
【０１２１】
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【０１２２】
本発明の第２の実施の形態は、本発明の第１の実施の形態の各処理のステップ（たとえば、図５、図６、図８、図９の各ステップ）を含む方法である。
【０１２３】
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。
【０１２４】
本発明の第３の実施の形態は、本発明の第２の実施の形態の各処理のステップ（たとえば、図５、図６、図８、図９の各ステップ）をコンピュータ（たとえば、構文解析装置２０、計算式生成装置６０、プログラム生成制御装置３０）に実施させるプログラムである。
【０１２５】
【発明の効果】
第１の効果は、既に実装されている数値計算アルゴリズムの数値計算プログラム生成システムに、新たなプログラム様式を持った数値計算プログラムの生成機能を付け加えることが容易なことである。
【０１２６】
その理由は、ある数値計算アルゴリズムに対応する数値計算プログラムの生成は、擬似コードの順序列によって制御されているが、新たなプログラム様式を追加する場合そのプログラム様式が関連する擬似コードに対してのみ、対応するテンプレートプログラム情報を追加するだけでよいからである。つまり、擬似コードの順序列という数学的なアルゴリズムを反映する数値計算プログラムの制御構造は、個別のプログラム様式に依存せずそのまま使うことができるからである。
【０１２７】
また、プログラム様式の追加は、関連する擬似コードだけに追加の必要性が局在化することもプログラム生成システムの構築に有用である。
【０１２８】
第２の効果は、プログラム生成可能な数値計算アルゴリズムの追加が容易なことである。
【０１２９】
その理由は、数値計算アルゴリズムに対応する数値計算プログラムの生成が、インプリメンテーションのレベルを考慮した擬似コードの順序列によって表現されているため、新しい数値計算アルゴリズムを表現する擬似コードの順序列を作る際に、既に定義されている擬似コードを再利用して使えるからである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】ユーザーの有限要素法を利用した数値計算問題を記述する問題定義情報、および、プログラム様式情報の具体例を示す説明図である。
【図３】図３は、補間法Ｔ１に関するデータを示す説明図である。
【図４】図４は、数値積分法ｔｅｔ３に関するデータの一部を示す説明図である。
【図５】図５は、プログラム生成制御装置の基本動作を示すフローチャートである。
【図６】図５のステップＡ０２の詳細を示すフローチャートである。
【図７】図２、図３、図４に対する構文解析情報の例を示す説明図である。
【図８】ｓｏｌｖｅブロックの制御に関する数値計算アルゴリズムの内容を示すフローチャートである。
【図９】図８のフローチャートの疑似コードへの分解の一例を表す疑似コードレベルのフローチャートである。
【図１０】図９のフローチャートを実装した図１のアルゴリズム情報の実現方法の一例を示す説明図である。
【図１１】数値計算アルゴリズム処理関数テーブルの内容を示す説明図である。
【図１２】擬似コード・プログラム様式レベル依存テーブルの内容を示す説明図である。
【図１３】プログラム様式のレベルのグループ分けに対応する仮想関数を示す説明図である。
【図１４】プログラム様式レベル間の依存関係テーブルの内容を示す説明図である。
【図１５】実体関数のクラス分けを示す説明図である。
【図１６】実施例１のＣ＋＋のクラス宣言に関する実装例を示した説明図である。
【図１７】様式別テンプレートプログラム情報の実装例を示す説明図である。
【図１８】生成プログラムの例を示す説明図である。
【図１９】テンプレートプログラム情報を拡張する方法を示す説明図である。
【図２０】非線形問題を扱う擬似コードの順序列が線形問題の擬似コードを使って表現されることを示す説明図である。
【符号の説明】
１０　　問題定義入力装置
１１　　問題定義情報
１２　　プログラム様式情報
２０　　構文解析装置
２１　　構文解析情報
３０　　プログラム生成制御装置
４０　　アルゴリズム格納装置
４１　　アルゴリズム情報
５０　　様式別テンプレートプログラム格納装置
５１　　様式別テンプレートプログラム情報
６０　　計算式生成装置
６１　　計算式情報
７０　　生成プログラム
【図１】
2004086760.tif 000003
【図２】
2004086760.tif 000004
【図３】
2004086760.tif 000005
【図４】
2004086760.tif 000006
【図５】
2004086760.tif 000007
【図６】
2004086760.tif 000008
【図７】
2004086760.tif 000009
【図８】
2004086760.tif 000010
【図９】
2004086760.tif 000011
【図１０】
2004086760.tif 000012
【図１１】
2004086760.tif 000013
【図１２】
2004086760.tif 000014
【図１３】
2004086760.tif 000015
【図１４】
2004086760.tif 000016
【図１５】
2004086760.tif 000017
【図１６】
2004086760.tif 000018
【図１７】
2004086760.tif 000019
【図１８】
2004086760.tif 000020
【図１９】
2004086760.tif 000021
【図２０】
2004086760.tif 000022