(57)【要約】【課題】  本発明の課題は、原子間結合次数を自動設定可能な分子構造構築システム及び方法を提供することを目的とする。【解決手段】  上記課題は、分子の原子配置に基づいて配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを有するデータ構造と、前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算することによって末端原子になると前記結合フラグを更新するσ結合手段と、前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行うπ結合手段とを有する分子構造構築システムにより達成される。【選択図】  図３
2011198221.tif 000002
【特許請求の範囲】
【請求項１】
分子の原子配置に基づいて、配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを少なくとも有するデータ構造を記憶した記憶領域と、
前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算し、該減算によって末端原子になると前記結合フラグを更新するσ結合手段と、
前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行い、該電子数及び軌道数を１ずつ減算し、前記結合次数を１加算するπ結合手段と、
を有することを特徴とする分子構造構築システム。
【請求項２】
前記データ構造は、更に、元素毎に少なくとも結合半径を対応させた元素データ構造を有し、
前記距離閾値は、前記原子間の距離が各元素の前記結合半径に基づいて定められる前記閾値であることを特徴とする請求項１記載の分子構造構築システム。
【請求項３】
前記σ結合された２原子の各原子に対して、孤立電子対として電子数２に対して軌道数１の割合で、前記原子データ構造における該各原子の前記電子数及び前記軌道数を減算する孤立電子対処理手段を有することを特徴とする請求項１又は２記載の分子構造構築システム。
【請求項４】
前記原子間の前記σ結合及び前記π結合後の前記電子数及び前記軌道数を用いて原子電荷を設定する原子電荷設定手段を有することを特徴とする付記１乃至３のいずれか一項記載の分子構造構築システム。
【請求項５】
前記原子間の前記σ結合及び前記π結合を、前記結合次数を示して表示ユニットに表示させる結合結果表示手段を有することを特徴とする請求項１乃至４のいずれか一項記載の分子構造構築システム。
【請求項６】
コンピュータが分子構造を構築する分子構造構築方法であって、該コンピュータは、
分子の原子配置に基づいて、配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを少なくとも有するデータ構造を記憶した記憶領域を有し、
前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算し、該減算によって末端原子になると前記結合フラグを更新するσ結合手順と、
前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行い、該電子数及び軌道数を１ずつ減算し、前記結合次数を１加算するπ結合手順と、
を実行することを特徴とする分子構造構築方法。
【請求項７】
分子構造を構築する分子構造構築装置としてコンピュータを機能させるためのコンピュータ実行可能なプログラムであって、該コンピュータに、
分子の原子配置に基づいて、配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを少なくとも有するデータ構造を記憶領域に生成するデータ構造生成手順と、
前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算し、該減算によって末端原子になると前記結合フラグを更新するσ結合手順と、
前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行い、該電子数及び軌道数を１ずつ減算し、前記結合次数を１加算するπ結合手順と、
を実行させることを特徴とするコンピュータ実行可能なプログラム。
【請求項８】
分子構造を構築する分子構造構築装置としてコンピュータを機能させるためのプログラムを記憶したコンピュータ読取可能な記憶媒体であって、該コンピュータに、
分子の原子配置に基づいて、配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを少なくとも有するデータ構造を記憶領域に生成するデータ構造生成手順と、
前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算し、該減算によって末端原子になると前記結合フラグを更新するσ結合手順と、
前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行い、該電子数及び軌道数を１ずつ減算し、前記結合次数を１加算するπ結合手順と、
を実行させることを特徴とするコンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、原子間の結合次数を自動設定可能な分子構造構築システム、方法、プログラム、及び、記憶媒体に関する。
【背景技術】
【０００２】
コンピュータの高性能化に伴い、ドラッグデザインなどの先端研究における分子軌道計算、分子動力学計算など理論化学計算のニーズが高まっている。これらの理論化学計算を実行するには、計算手法のみならず計算対象となる分子の構造を入力データに用いる必要がある。ドラッグデザインなどの先端研究では、分子動力学的手法を用いて物性を算出する状況が多々生じることから、適切な初期分子構造を構築する必要性が増している。このようなニーズから、分子構造構築の作業効率を向上させることを目的として、グラフィック表示機能を利用した分子設計システムが実用化されている。
【０００３】
分子動力学計算では原子間に働く力場ポテンシャルを設定するために、適切な結合次数の情報を必要とする。従来より、ユーザがＧＵＩ上で結合軸を選択し、各結合軸について適切な結合次数を一つ一つ設定することが行われているが、原子数が多く構造が複雑な場合にはユーザへの負担が大きい。
【０００４】
また単なる負担だけでは済まない問題として、低分子の場合には目視による結合軸の判別と修正が可能であっても、高分子では目視での判定が非常に困難な場合が生じる場面もある。このような問題に対して、結合次数の自動判定法として、任意に選択した２個の原子対の結合の強さを示す結合次数を計算し、その結果を用いて原子間の結合の有無を判定することが提案されている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−２８２０９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来の手法では、事前に分子軌道計算を実行する必要が生じ、構造を表示するためだけに多大な計算が必要になってしまう。また結合次数の判定基準として特許文献１の段落００１８に示されている数１は、実際には2つの原子軌道に関する電子密度を表現しており、全ての原子軌道の考慮が必要な結合次数の判定に用いることは適切でない。
【０００７】
従って、各原子に設定されている原子軌道数と電子数を考慮した手法ではないため、各原子間結合に対して結合次数を適切に判定することができない、また、高分子であってもユーザに負担をかけることなく分子を設計することができない等の問題があった。
【課題を解決するための手段】
【０００８】
開示の分子構造構築システムは、分子の原子配置に基づいて、配置された原子毎に電子数及び軌道数と結合後の末端状態を示す結合フラグとを対応させた原子データ構造と、原子間を結合する結合軸毎に結合次数を対応させた結合軸データ構造とを少なくとも有するデータ構造を記憶した記憶領域と、前記原子間を結合可能な距離閾値に従ってσ結合を行い、前記結合次数を１加算し、該σ結合された原子の電子数及び軌道数を１ずつ減算し、該減算によって末端原子になると前記結合フラグを更新するσ結合手段と、前記結合フラグを参照して、第一原子に前記σ結合される第二原子のうち、一の第二原子を残して他第二原子が末端である場合、該第一原子と該一の第二原子とにπ結合を行い、該電子数及び軌道数を１ずつ減算し、前記結合次数を１加算するπ結合手段と、を有するように構成される。
【０００９】
上記手段を機能としてコンピュータが処理する方法、上記手段を機能としてコンピュータに実行させるためのプログラム、及び、そのプログラムを記憶したコンピュータ読み取り可能な記憶媒体とすることもできる。
【発明の効果】
【００１０】
開示の分子構造構築システムによって、分子の３次元構造構築に際し、構造に応じて原子間の結合次数を自動的に判断できるため、分子設計を容易に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】分子構造構築システムのハードウェア構成を示す図である。
【図２】分子の３次元構造構築を説明するための図である。
【図３】分子の３次元構造構築処理の全体フローを示す図である。
【図４】データ構造を示す図である。
【図５】データ構造の初期化処理を説明するためのフローチャート図である。
【図６】分子の３次元構造構築処理の詳細フローを示す図である。
【図７】分子の３次元構造構築処理の詳細フローを示す図（続き）である。
【図８】分子の３次元構造構築処理の詳細フローを示す図（続き）である。
【図９】電子配置と結合結果の例を示す図である。
【図１０】Ｃ２Ｈ４（エチレン）の場合の状態遷移例を示す図である。
【図１１】Ｃ６Ｈ５ＣＨＯ（ベンズアルデヒド）の場合の状態遷移例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態を図面に基づいて説明する。原子間結合に対して結合次数の自動判定を可能とする本実施例に係る分子の３次元構造構築処理を実行する分子構造構築システムは、図１に示されるようなハードウェア構成を成す。図１は、分子構造構築システムのハードウェア構成を示す図である。図１において、分子構造構築システム１００は、コンピュータによって制御される端末であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、通信ユニット１６と、記憶装置１７と、ドライバ１８とを有し、システムバスＢに接続される。
【００１３】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従って分子構造構築システム１００を制御する。メモリユニット１２には、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００１４】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、利用者からの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザが分子構造構築システム１００が処理を行なうための必要な各種情報を入力するために用いられる。通信ユニット１６は、例えばインターネット、ＬＡＮ（Local Area Network）等に接続し、外部装置との間の通信制御をするための装置である。記憶装置１７には、例えば、ハードディスクユニットが用いられ、各種処理を実行するプログラム等のデータを格納する。
【００１５】
分子構造構築システム１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって分子構造構築システム１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。本実施例に係る処理を実現するプログラムは、通信ユニット１６によってネットワークを介してダウンロードし、記憶装置１７にインストールするようにしても良い。また、ＵＳＢ対応の分子構造構築システム１００であれば、ＵＳＢ接続可能な外部記憶装置からインストールするようにしても良い。更に、ＳＤカード等のフラッシュメモリ対応の分子構造構築システム１００であれば、そのようなメモリカードからインストールするようにしても良い。
【００１６】
先ず、３次元分子構造構築について概要を図２で説明する。図２は、分子の３次元構造構築を説明するための図である。分子構造構築システム１００において、最初に、表示ユニット１３に表示されたＧＵＩ上に、ユーザによって原子配置が行われる（ステップＳＩ）。
【００１７】
表示ユニット１３のスクリーン上に作業用のメインウィンドウを持ち、メインウィンドウに表示される3次元分子構造の原子アイテムを、マウスなどのポインティングデバイスのクリックやドラッグアンドドロップかキーボード操作によって選択し、さらにメインウィンドウ上の3次元分子構造に対するマウスなどのポインティングデバイスのドラッグアンドドロップ、またはメインウィンドウのコマンドメニューに対するポインティングデバイスやキーボードでの選択、メインウィンドウ上のコマンドエリアに対するポインティングデバイスのドラッグアンドドロップ、もしくはキーボードによるファイルなどの入力により、ユーザによる原子配置、また、以降必要に応じてこのようにユーザによる操作が行われる。
【００１８】
次に、ＣＰＵ１１が、ユーザによって成された原子配置に係る情報に基づいて、距離がしき値以下となる原子間に結合軸を設定して（ステップＳＩＩ）、軌道数及び電子数に基づいて結合次数を設定し、結合次数を示した分子構造を表示ユニットに表示させる（ステップＳＩＩＩ）。
【００１９】
ＣＰＵ１１によって実行されるステップＳＩＩ及びＳＩＩＩに係る分子の３次元構造構築処理は、図３に示す手順で行われる。図３は、分子の３次元構造構築処理の全体フローを示す図である。
【００２０】
図３において、ＣＰＵ１１は、ユーザによって成された原子配置に係る情報に基づいて、後述される図４に示すデータ構造３０に値を設定し（ステップＳ１）、また、原子座標を読み込む（ステップＳ２）。
【００２１】
次に、ＣＰＵ１１は、距離がしきい値以下の原子間毎に結合軸を設定する（ステップＳ３）。ＣＰＵ１１は、データ構造３０において、距離がしきい値以下となる原子対の原子毎に、結合軸に係る情報を設定する。
【００２２】
そして、ＣＰＵ１１は、軸端原子対の１軌道１電子ずつをσ結合に設定する（ステップＳ４）。ＣＰＵ１１は、データ構造３０において、ステップＳ２で特定した原子対の原子毎に、σ結合に係る情報を設定する。
【００２３】
また、ＣＰＵ１１は、軸端原子の１軌道２電子を孤立電子対に設定する（ステップＳ５）。ＣＰＵ１１は、データ構造３０において、原子対の原子毎に、孤立電子対に係る情報を設定する。
【００２４】
更に、ＣＰＵ１１は、軸端原子対の１軌道１電子ずつをπ結合に設定する（ステップＳ６）。ＣＰＵ１１は、データ構造３０において、原子対の原子毎に、π結合に係る情報を設定する。
【００２５】
そして、ＣＰＵ１１は、電子数と軌道数の残りから原子電荷を設定する（ステップＳ７）。ＣＰＵ１１は、データ構造３０において、原子対の原子毎に、原子電荷に係る情報を設定する。
【００２６】
原子電荷を設定した後、ＣＰＵ１１は、原子対間の全結合数を軸の結合次数に設定する（ステップＳ８）。ＣＰＵ１１は、データ構造３０において、結合軸毎に、結合次数係る情報を設定する。そして、ＣＰＵ１１は、この処理を終了する。
【００２７】
次に、分子の３次元構造構築処理にて使用されるデータ構造３０について図４で説明する。図４は、データ構造を示す図である。図４に示すデータ構造３０は、メモリユニット１２又は記憶装置１７の記憶領域（以下、単に記憶領域と言う）に展開され、分子の３次元構造構築処理にて情報を格納することによって設定し、又は、格納された情報を参照するためのデータ構造である。
【００２８】
データ構造３０は、ヘッダ３１と、分子データ３２と、元素データ３３とを有する。また、分子データ３２は、更に、分子メイン３２ｍと、原子データ３２ａと、結合軸データ３２ｂとを有する。
【００２９】
ヘッダ３１は、分子データポインタ（Ｍ）と、元素データポインタ（Ｅｌ）と、イベントデータポインタ（Ｅ）とによるデータ構造を有する。分子データポインタ（Ｍ）は、分子データ３２が格納されている先頭アドレスを示すポインタであり、元素データポインタ（Ｅｌ）は、元素データ３３が格納されている先頭アドレスを示すポインタであり、イベントデータポインタ（Ｅ）は、イベントデータが格納されている先頭アドレスを示すポインタである。
【００３０】
分子データ３２に関して、分子メイン３２ｍは、原子データポインタ（Ａ）と、結合軸データポインタ（Ｂ）と、原子数（ｎ）と、結合軸数（ｎｂ）とによるデータ構造を有する。原子データポインタ（Ａ）は、原子データ３２ａが格納されている先頭アドレスを示すポインタであり、結合軸データポインタ（Ｂ）は、結合軸データ３２ｂが格納されている先頭アドレスを示すポインタである。分子データ３２のデータ構造を、分子データ構造Ｍとする。
【００３１】
また、原子数（ｎ）は、この分子データ３２で管理される原子の個数、つまり、ユーザがＧＵＩ上に配置した原子の個数であり、また、原子データ３２ａの数に相当する。結合軸数（ｎｂ）は、この分子データ３２で管理される結合軸の個数、つまり、分子の３次元構造構築処理で自動的に設定した結合軸の個数であり、結合軸データ３２ｂの数に相当する。
【００３２】
原子データ３２ａは、原子順序番号（ａ）と、原子元素番号（Ｎ）と、位置座標（ｃ）と、電子数（ｎ）と、軌道数（ｍ）と、結合フラグ（ｂｆ）と、含有結合軸数（ｎｂ）と、含有結合軸番号（ｂ）と、原子電荷（ｑ）とによるデータ構造を有する。原子データ３２ａのデータ構造を、原子データ構造Ａとする。
【００３３】
結合フラグ（ｂｆ）は、結合軸を設定可能かどうかという状態を表すフラグである。例えば、結合フラグ（ｂｆ）の初期値をＦとし、軌道数（ｍ）と電子数（ｎ）とがゼロであれが「Ｆ」、また、軌道数（ｍ）か含有結合軸数（ｎｂ）がゼロでなく、含有結合軸番号（ｂ）に関与する他の原子ｊについて結合フラグ（ｂｆ）が「Ｆ」となる結合が１つ、残りの結合はすべて「Ｔ」の場合には値を「Ｃ」とする。処理の過程において、他の原子ｊについて結合フラグ（ｂｆ）が「Ｃ」となる結合が１つ、残りの結合はすべて「Ｔ」の場合にも値を「Ｃ」とする。
【００３４】
結合軸データ３２ｂは、結合軸順序番号（ｂ）と、ベクトル（ｖ）と、結合次数（ｂｔ）と、両端原子番号（ａ）とによるデータ構造を有する。結合軸データ３２ｂのデータ構造を、結合軸データ構造Ｂとする。
【００３５】
元素データ３３は、基準電子数設定（ｎ０）と、基準軌道数設定（ｍ０）と、結合半径（ｒ）とによるデータ構造を元素毎に有する。元素データ３３のデータ構造を、元素データ構造Ｅｌとする。
【００３６】
図４のデータ構造３０において、例えば、ある原子の原子データＡの結合フラグｂｆは、「Ａ−＞ｂｆ」というポインタで表現できる。また、例えば、元素データ３３について、各元素（ｉと表現する）について少なくともＥｌ［ｉ］−＞ｒ、Ｅｌ［ｉ］−＞ｎ０、Ｅｌ［ｉ］−＞ｍ０という要素を持つと表現できる。
【００３７】
原子データ構造Ａについて、原子順序番号Ａ−＞ａは内部座標における識別番号である。原子元素番号Ａ−＞Ｎは元素記号もしくは元素の原子番号である。含有結合軸数Ａ−＞ｎｂは原子が有する他原子との結合軸数である。Ａ−＞ｎｂの値は、入力構造から原子半径Ｅｌ−＞ｒを元に、原子対を成していると推定される結合軸の数を表す。結合軸識別番号Ａ−＞ｂ［ｎｂ］は、結合軸数に含まれる各結合軸の含有結合軸番号ｂの集合データである。
【００３８】
位置座標Ａ−＞ｃ［３］は原子の３次元座標の各成分である。電子数Ａ−＞ｎは図３の処理動作によって初期値Ｅｌ−＞ｎ０から０にまで変動し得る。軌道数Ａ−＞ｍは図３の処理動作によって初期値Ｅｌ−＞ｍ０から０にまで変動し得る。
【００３９】
結合フラグＡ−＞ｂｆは、結合軸を設定可能かどうかという状態を表すフラグである。設定例としてはＡ−＞ｂｆの初期値をＦとし、Ａ−＞ｍとＡ−＞ｎがゼロであればＴ、またＡ−＞ｍかＡ−＞ｎｂがゼロでなく、Ａ−＞ｂに関与する他の原子ｊについてＡ［ｊ］−＞ｂｆがＦとなる結合が１つ、残りの結合はすべてＴの場合には、値をＣとする。またＡ−＞ｑは原子上の電荷を表す。
【００４０】
結合軸データ構造Ｂについて、結合軸順序番号Ｂ−＞ｂは全ての結合軸を１対１対応させるために必要な識別番号である。両端原子番号Ｂ−＞ａ［２］は、結合軸の両末端に存在する原子順序番号Ａ−＞ａの部分集合データである。結合次数Ｂ−＞ｂｔについて、初期値は０であり、図３の処理動作によって適切な結合次数へと変動する。ベクトルＢ−＞ｖについては、結合軸を３次元ベクトルと１対１に対応させたものである。
【００４１】
元素データ構造Ｅｌの各要素は、結合半径Ｅｌ−＞ｒ、基準電子数Ｅｌ−＞ｎ０、基準軌道数Ｅｌ−＞ｍ０と表される。
【００４２】
図５は、データ構造の初期化処理を説明するためのフローチャート図である。図５において、ＣＰＵ１１は、分子データ構造Ｍ及び元素データ構造Ｅｌを構築する（ステップＳ１１）。
【００４３】
元素データ構造Ｅｌについて、例えば、原子番号１の水素から９２のウランまで設定する場合には、元素データ構造ＥｌについてＥｌ［１：９２］に必要な記憶領域を確保する。原子半径と基準電子数、基準軌道数については各元素に適切な値を設定する。例えば、原子半径Ｅｌ−＞ｒは各元素のファンデアワールス半径とし、電子数Ｅｌ−＞ｎ０と軌道数Ｅｌ−＞ｍ０は最外殻の数値とする。この場合、水素原子についてはＥｌ［１］−＞ｎ０＝１、Ｅｌ［１］−＞ｍ０＝１であり、炭素原子についてはＥｌ［６］−＞ｎ０＝４、Ｅｌ［６］−＞ｍ０＝４、酸素原子についてはＥｌ［８］−＞ｎ０＝６、Ｅｌ［８］−＞ｍ０＝４となる。
【００４４】
分子データ構造Ｍについて、原子データ構造ＡへのポインタＭ−＞Ａ、及び結合軸データ構造ＢへのポインタＭ−＞Ｂに必要な記憶領域を確保し、更に、全原子数Ｍ−＞ｎと全結合軸数Ｍ−＞ｎｂ用の記憶領域を確保する。よって、分子メイン３２ｍの記憶領域が確保される。なお支障がなければポインタＭ−＞Ａ、及びＭ−＞Ｂを設定しなくても良い。
【００４５】
次に、ＣＰＵ１１は、原子の位置座標を入力し（ステップＳ１２）、入力した原子の位置座標の個数に基づいて、原子数ｎを原子数Ｍ−＞ｎに設定する（ステップＳ１３）。そして、ＣＰＵ１１は、原子数ｎ分の原子データ構造Ｍ−＞Ａ［１：Ｍ−＞ｎ］の記憶領域を確保する（ステップＳ１４）。
【００４６】
ＣＰＵ１１は、原子を順番に指定する原子順番変数ｉ（以下、単に原子ｉと言う）をゼロに、また、含有結合軸数Ａ−＞ｎｂをゼロに初期化する（ステップＳ１５）。ＣＰＵ１１は、原子ｉを１増やして次の原子を指定し、原子ｉの結合対象となる原子ｊを原子ｉとし（ステップＳ１６）、更に、結合対象の原子ｊを１増やしておく（ステップＳ１７）。
【００４７】
そして、ＣＰＵ１１は、原子ｉと原子ｊの距離が夫々の結合半径ｒから定まる閾値より小さいか否かを判断する（ステップＳ１８）。閾値以上の場合、ＣＰＵ１１は、原子ｊを原子ｉの結合対象とせずにステップＳ１７へ戻り、上述同様の処理を繰り返す。一方、閾値より小さい場合、ＣＰＵ１１は、結合軸数Ｍ−＞ｎｂを１増やす。
【００４８】
そして、ＣＰＵ１１は、原子ｉに対する結合対象の原子ｊとして原子数Ｍ−＞ｎ分の処理を終了したか否かを判断する（ステップＳ２０）。原子ｉに対する結合対象の原子ｊ全てに対して処理を終了していない場合、ＣＰＵ１１は、ステップＳ１４へ戻り、上述同様の処理を繰り返す。
【００４９】
一方、原子ｉに対する結合対象の原子ｊ全てに対して処理を終了した場合、ＣＰＵ１１は、原子数Ｍ−＞ｎから１減算した個数分の原子ｉ全てに対して処理を終了したか否かを更に判断する（ステップＳ２１）。原子ｉ全てに対して処理を終了していない場合、ＣＰＵ１１は、ステップＳ１３へ戻り、上述同様の処理を繰り返す。
【００５０】
一方、原子ｉ全てに対して処理を終了した場合、含有結合軸数が決定したことになるため、ＣＰＵ１１は、含有結合軸数ｎｂ分の結合軸データ構造Ｍ−＞Ｂ［１：Ｍ−＞ｎｂ］の記憶領域を確保して（ステップＳ２２）、このデータ構造の初期化処理を終了する。
【００５１】
つまり、原子データ構造Ａと結合軸データ構造Ｂ用の記憶領域に関しては、与えられた原子とその座標情報を元に生成される。先ず、原子データ構造Ａに関しては原子数をＭ−＞ｎに設定後、原子数分の原子データ構造Ａ［１：Ｍ−＞ｎ］の記憶領域を確保する。次に、結合軸データ構造Ｂに関しては、原子の位置座標をＡ−＞ｃに設定後、原子ｉと原子ｊ間の距離を計算し、その距離が、原子ｉの結合半径Ｅｌ［Ａ［ｉ］−＞Ｎ］−＞ｒと原子ｊの結合半径Ｅｌ［Ａ［ｊ］−＞Ｎ］−＞ｒから定まる閾値よりも小さい場合に結合軸を持つとしてＭ−＞ｎｂの値を１増やす。この処理を全２原子間について実行することで、全結合軸数Ｍ−＞ｎｂが決まり、結合軸数分の結合軸データ構造Ｂ［１：Ｍ−＞ｎｂ］の記憶領域を確保する。
【００５２】
次に、分子の３次元構造構築処理の詳細フローについて図６から図８で説明する。図６、図７、及び図８は、分子の３次元構造構築処理の詳細フローを示す図である。図６から図８で、ＣＰＵ１１によって行われる結合次数設定に係る一連の処理が示される。
【００５３】
（初期データ設定及びσ結合の設定）
先ず、ステップＳ３１からステップＳ５６における処理の概要を説明する。原子データの設定について、原子ｉの順序番号Ａ［ｉ］−＞ａには入力した順番号を設定する。原子番号Ａ［ｉ］−＞Ｎには入力原子の原子番号を、座標Ａ［ｉ］−＞ｃには入力原子のＣａｒｔｅｓｉａｎ座標を設定する。また初期電子数にはＡ［ｉ］−＞ｎ＝Ｅ［Ａ［ｉ］−＞Ｎ］−＞ｎ０を、初期軌道数にはＡ［ｉ］−＞ｍ＝Ｅｌ［Ａ［ｉ］−＞Ｎ］−＞ｍ０を設定する。初期電荷についてはＡ［ｉ］−＞ｑ＝０とし、初期結合フラグについてはＡ［ｉ］−＞ｂｆ＝Ｆとする。含有結合軸数および含有結合軸番号については、結合軸データＢの初期設定と同時に設定する。
【００５４】
結合軸データについては、原子ｉと原子ｊの距離が閾値以下と判定した原子間について、判定した順序で設定する。例えば結合軸がそれまでにｋ−１個設定されている場合に、原子ｉと原子ｊの距離が閾値以下と判定された場合には、ｉｊ間の結合軸をＢ［ｋ］として設定する。ここでＢ［ｋ］−＞ｂ＝ｋ、Ｂ［ｋ］−＞ａ［１］＝ｉ、Ｂ［ｋ］−＞ａ［２］＝ｊと設定し、その他にＡ［ｉ］−＞ｎｂ＝Ａ［ｉ］−＞ｎｂ＋１、Ａ［ｊ］−＞ｎｂ＝Ａ［ｊ］−＞ｎｂ＋１、Ａ［ｉ］−＞ｂ［ｎｂ］＝ｋ、Ａ［ｊ］−＞ｂ［ｎｂ］＝ｋと設定する。
【００５５】
結合軸の設定はσ結合の設定と同値と考え、原子ｉとｊの軌道数と電子数を１ずつ減らし、結合軸ｋの結合次数を１増やす。具体的にはＡ［ｉ］−＞ｍ＝Ａ［ｉ］−＞ｍ−＞１、Ａ［ｊ］−＞ｍ＝Ａ［ｊ］−＞ｍ−１、Ａ［ｉ］−＞ｎ＝Ａ［ｉ］−＞ｎ−＞１、Ａ［ｊ］−＞ｎ＝Ａ［ｊ］−＞ｎ−１、Ｂ［ｋ］−＞ｂｔ＝１と設定する。設定後に原子ｉの電子数か軌道数が０になった場合には、Ａ［ｉ］−＞ｂｆ＝Ｔと設定する。また電子数も軌道数も０でなく、結合軸Ｂ［Ａ［ｉ］−＞ｂ］−＞ａに関与する他の原子Ａ［Ｂ［Ａ［ｉ］−＞ｂ］−＞ａ［１，２］］−＞ｂｆが「Ｆ」となるものが１つ、残りはすべて「Ｔ」の場合には、値を「Ｃ」に設定する。
【００５６】
以下にステップ毎に詳述する。ＣＰＵ１１は、データ構造Ｍ、Ｅｌ、Ａ、及びＢを構築し（ステップＳ３１）、原子の位置座標を読み込む（ステップＳ３２）。そして、ＣＰＵ１１は、原子データ構造Ａ［1１：Ｍ−＞ｎ］に、配置された原子を所定順序番号に従って、各原子に関する値を含有結合軸番号Ａ−＞ｂを除いて設定する（ステップＳ３３）。
【００５７】
ＣＰＵ１１は、原子を順番に指定する原子順番変数ｉ（以下、単に原子ｉと言う）をゼロに、また、結合軸を順番に指定する軸順番変数ｋ（以下、単に結合軸ｋと言う）をゼロに初期化する（ステップＳ３４）。ＣＰＵ１１は、原子ｉを１増やして次の原子を指定し、原子ｉの結合対象となる原子ｊを原子ｉとし（ステップＳ３５）、更に、結合対象の原子ｊを１増やしておく（ステップＳ３６）。
【００５８】
そして、ＣＰＵ１１は、原子ｉと原子ｊの距離が夫々の結合半径ｒから定まる閾値より小さいか否かを判断する（ステップＳ３７）。閾値以上の場合、ＣＰＵ１１は、原子ｊを原子ｉの結合対象とせずにステップＳ３６へ戻り、上述同様の処理を繰り返す。一方、閾値より小さい場合、ＣＰＵ１１は、原子データ構造Ａにおける、原子ｉと原子ｊ間の軌道数ｍ及び電子数ｎを１減算し（ステップＳ３８）、原子ｉと原子ｊ間の含有結合軸数ｎｂを１増やす（ステップＳ３９）。
【００５９】
次に、ＣＰＵ１１は、結合軸ｋに１を加算して次の結合軸を指定する（ステップＳ４０）。そして、ＣＰＵ１１は、結合軸ｋの結合次数Ｂ［ｋ］−＞ｂｔに１を設定し、原子ｉの含有結合軸番号Ａ［ｉ］−＞ｂ及び原子ｊの含有結合軸番号Ａ［ｊ］−＞ｂに結合軸ｋを追加する（ステップＳ４１）。
【００６０】
ＣＰＵ１１は、原子ｉに対する結合対象の原子ｊとして原子数Ｍ−＞ｎ分の処理を終了したか否かを判断する（ステップＳ４２）。原子ｉに対する結合対象の原子ｊ全てに対して処理を終了していない場合、ＣＰＵ１１は、ステップＳ３６へ戻り、上述同様の処理を繰り返す。
【００６１】
一方、原子ｉに対する結合対象の原子ｊ全てに対して処理を終了した場合、ＣＰＵ１１は、原子数Ｍ−＞ｎから１減算した個数分の全ての原子ｉに対して処理を終了したか否かを更に判断する（ステップＳ４３）。全ての原子ｉに対して処理を終了していない場合、ＣＰＵ１１は、ステップＳ３５へ戻り、上述同様の処理を繰り返す。
【００６２】
一方、全ての原子ｉに対して処理を終了した場合、含有結合軸数が決定したことになり、σ結合を設定するための処理（図３のステップＳ４）を行うために、ＣＰＵ１１は、原子ｉをゼロに初期化した後（ステップＳ４４）、１加算して原子ｉを設定する（ステップＳ４５）。
【００６３】
ＣＰＵ１１は、原子データ構造Ａにおいて、原子ｉの軌道数Ａ［ｉ］−＞ｍ又は電子数Ａ［ｉ］−＞ｎの少なくとも一方がゼロであるか否かを判断する（ステップＳ４６）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ４９へと進む。一方、少なくとも一方がゼロであるである場合、原子ｉの結合フラグＡ［ｉ］−＞ｂｆを「Ｔ」に設定し（ステップＳ４７）、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｔ」のみが設定されているか否かを判断する（ステップＳ４８）。「Ｔ」以外を含む場合、ＣＰＵ１１は、ステップＳ４３へと戻り、次の原子ｉ＋１について上述同様の処理を行う。
【００６４】
一方、ステップＳ４８にて、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｔ」のみが設定されている場合は、ＣＰＵ１１は、原子ｉに対する結合対象の原子ｊをゼロに初期化し、原子ｉの含有結合軸数Ａ−＞ｎｂを結合軸ｋに設定する（ステップＳ４９）。
【００６５】
そして、ＣＰＵ１１は、ｊを１増加させた原子ｊを原子ｉに対する次の結合対象とする（ステップＳ５０）。ＣＰＵ１１は、原子ｉの結合対象としての原子ｊの含有結合軸番号ｂによって特定される結合軸の両端原子番号ａに関し、原子データ構造Ａの結合フラグｂｆに「Ｔ」が含まれているか否かを判断する（ステップＳ５１）。ＣＰＵ１１は、「Ｔ」が含まれていない場合、ステップＳ５０へ戻り、次の結合対象について上述同様の処理を行う。
【００６６】
一方、ステップＳ５１にて、原子データ構造Ａの結合フラグｂｆに「Ｔ」が含まれていると判断した場合、ＣＰＵ１１は、結合軸ｋを１減算し（ステップＳ５２）、原子ｊが原子ｉの含有結合軸数Ａ−＞ｎｂに一致するか否かを判断することによって、全ての含有結合軸について処理を終了したか否かを判断する（ステップＳ５３）。一致しない場合、ＣＰＵ１１は、ステップＳ５０へ戻り、上述同様の処理を行う。
【００６７】
一方、ステップＳ５３にて、ＣＰＵ１１は、結合軸ｋが１であるか否かを判断する（ステップＳ５４）。結合軸ｋが１でない場合、ＣＰＵ１１は、ステップＳ５６へと進む。一方、結合軸ｋが１の場合、ＣＰＵ１１は、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｃ」を設定する（ステップＳ５５）。そして、ＣＰＵ１１は、原子ｉが原子数Ｍ−＞ｎに一致するか否かを判断することによって、全ての原子ｉについて処理を終了したか否かを判断する（ステップＳ５６）。終了していない場合、ＣＰＵ１１は、ステップＳ４５に戻り、上述同様の処理を行う。
【００６８】
（孤立電子対の設定）
先ず、ステップＳ５７からステップＳ６３における処理の概要を説明する。σ結合の設定が終了した後、原子ｉについて軌道数１に対し電子数が２確保できる場合には、Ａ［ｉ］−＞ｍ＝Ａ［ｉ］−＞ｍ−１、Ａ［ｉ］−＞ｎ＝Ａ［ｉ］−＞ｎ−２と設定する。この処理を繰り返し、もし軌道数か電子数が０になった場合にはＡ［ｉ］−＞ｂｔ＝Ｔと設定する。
【００６９】
以下にステップ毎に詳述する。全ての原子ｉに対して処理を終了した場合、軸端原子対の１軌道１電子ずつをσ結合に設定したことになり、軸端原子の１軌道２電子を孤立電子対に設定するための処理（図３のステップＳ５）を行うために、ＣＰＵ１１は、原子ｉをゼロに初期化した後（ステップＳ５７）、１加算して原子ｉを設定する（ステップＳ５８）。
【００７０】
ＣＰＵ１１は、原子ｉの、軌道数Ａ［ｉ］−＞ｍ−１がゼロ以上、かつ、電子数Ａ［ｉ］−＞ｎ−２がゼロ以上であるか否かを判断することによって、軸端原子の１軌道２電子を孤立電子対が存在するか否かを判断する（ステップＳ５９）。片方又は両方がゼロ以上でない場合、ＣＰＵ１１は、孤立電子対が存在しないと判断し、ステップＳ６２へと進む。一方、両方がゼロ以上である場合、ＣＰＵ１１は、孤立電子対が存在すると判断し、原子ｉから１軌道２電子を減算する（ステップＳ６０）。すなわち、原子ｉの軌道数Ａ［ｉ］−＞ｍから１減算し、電子数Ａ［ｉ］−＞ｎから２減算する。
【００７１】
そして、ＣＰＵ１１は、原子ｉが原子数Ｍ−＞ｎに一致するか否かを判断することによって、全ての原子ｉについて処理を終了したか否かを判断する（ステップＳ６１）。終了していない場合、ＣＰＵ１１は、ステップＳ５８に戻り、上述同様の処理を行う。全ての原子ｉに対して処理を終了した場合、ＣＰＵ１１は、原子ｉの軌道数Ａ［ｉ］−＞ｍがゼロ、又は、電子数Ａ［ｉ］−＞ｎがゼロであるか否かを判断する（ステップＳ６２）。いずれもゼロでないと判断した場合、ＣＰＵ１１は、ステップＳ６４へと進む。いずれか一方がゼロである場合、ＣＰＵ１１は、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｔ」を設定する（ステップＳ６３）。
【００７２】
（π結合の設定及び原子電荷の設定）
先ず、ステップＳ６４からステップＳ１１４における処理の概要を説明する。孤立電子対用に軌道数と電子数を減らした後、結合軸ｉについて、結合両端原子Ｂ［ｉ］−＞ａ［１］、Ｂ［ｉ］−＞ａ［２］の結合フラグＡ［Ｂ［ｉ］−＞ａ［１］］−＞ｂｆまたはＡ［Ｂ［ｉ］−＞ａ［２］］−＞ｂｆが「Ｃ」か「Ｆ」であり、かつ両端原子の軌道数と電子数が０でないならばＡ［Ｂ［ｉ］−＞ａ［１］］−＞ｍ＝Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｍ−１、Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｍ＝Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｍ−１、Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｎ＝Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｎ−１、Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｎ＝Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｎ−１と設定し、結合次数についてもＢ［ｉ］−＞ｂｔ＝Ｂ［ｉ］−＞ｂｔ＋１と設定する。各原子の軌道数と電子数が０になる場合にはその原子の結合フラグを「Ｔ」に設定する。もし結合両端原子の結合フラグに「Ｃ」が存在しない場合には、結合フラグが両方とも「Ｆ」の結合軸に関して、上記処理を実施する。
【００７３】
その後、原子ｉの電子数も軌道数も０でなく、結合軸Ｂ［Ａ［ｉ］−＞ｂ］−＞ａに関与する他の原子Ａ［Ｂ［Ａ［ｉ］−＞ｂ］−＞ａ［１，２］］−＞ｂｆがＦとなるものが１つ、残りはすべてＴの場合には、値を「Ｃ」に設定する。これまでの処理を繰り返し、最終的に結合両端原子の結合フラグについて、「Ｃ」か「Ｆ」で構成される組が存在しなくなるまで処理を実施する。原子ｉについて電子数が０で軌道数が０でない場合、Ａ［ｉ］−＞ｑ＝Ａ［ｉ］−＞ｍ、Ａ［ｉ］−＞ｍ＝０、Ａ［ｉ］−＞ｂｆ＝Ｔと設定する。逆に軌道数が０で電子数が０でない場合、Ａ［ｉ］−＞ｑ＝Ａ［ｉ］−＞ｎ＊（−１）、Ａ［ｉ］−＞ｎ＝０、Ａ［ｉ］−＞ｂｆ＝Ｔと設定する。軌道数と電子数のどちらも０でない場合には、どちらかが０になるまでそれぞれの値を減らし、その後で上記の電荷設定処理を実施する。
【００７４】
以下にステップ毎に詳述する。全ての原子ｉについて軸端原子の１軌道２電子を孤立電子対として設定する処理を終了し、次に、軸端原子対の１軌道１電子ずつをπ結合に設定するための処理（図３のステップＳ６）を行うために、ＣＰＵ１１は、結合軸ｉ及び変数ｌをゼロに初期化した後（ステップＳ６４）、１加算して結合軸ｉを設定する（ステップＳ６５）。ＣＰＵ１１は、結合軸ｉの両端原子番号ａの各々に関し、原子データ構造Ａの結合フラグｂｆに「Ｃ」及び「Ｆ」が在るか否かを判断する（ステップＳ６６）。「Ｃ」及び「Ｆ」が在る場合、ＣＰＵ１１は、ステップＳ６５へ戻り、次の結合軸ｉ＋１について上述同様の処理を行う。
【００７５】
一方、「Ｃ」及び「Ｆ」がない場合、ＣＰＵ１１は、変数ｌに１を設定する（ステップＳ６７）。ＣＰＵ１１は、結合軸ｉの両端原子の軌道数Ａ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｍ夫々から１ずつ減算し（ステップＳ６８）、また、結合軸ｉの両端原子の軌道数Ａ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｎ夫々から１ずつ減算する（ステップＳ６９）。そして、ＣＰＵ１１は、結合軸ｉの結合次数Ｂ［ｉ］−＞ｂｔを１加算する（ステップＳ７０）。
【００７６】
続けて、ＣＰＵ１１は、両端原子の一方の軌道数Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｍ又は電子数Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｎがゼロか否かを判断する（ステップＳ７１）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ７３へと進む。一方、いずれか一方がゼロの場合、ＣＰＵ１１は、その一方の原子の結合フラグＡ［Ｂ［ｉ］−＞ａ［１］］−＞ｂｆに「Ｔ」を設定する（ステップＳ７２）。
【００７７】
更に、ＣＰＵは、両端原子の他方の軌道数Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｍ又は電子数Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｎがゼロか否かを判断する（ステップＳ７３）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ７５へと進む。一方、いずれか一方がゼロの場合、ＣＰＵ１１は、その他方の原子の結合フラグＡ［Ｂ［ｉ］−＞ａ［２］］−＞ｂｆに「Ｔ」を設定する（ステップＳ７４）。
【００７８】
そして、ＣＰＵ１１は、両端原子夫々の結合フラグＡ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｂｆに「Ｔ」が含まれているか否かを判断する（ステップＳ７５）。「Ｔ」が含まれていない場合、ＣＰＵ１１は、ステップＳ６８へ戻り、上述同様の処理を行う。一方、「Ｔ」が含まれている場合、ＣＰＵ１１は、全ての含有結合軸Ｍ−＞ｎｂについて処理を終了したか否かを判断する（ステップＳ７６）。終了していない場合、ＣＰＵ１１は、ステップＳ６６へ戻り、上述同様の処理を行う。一方、終了している場合、ＣＰＵ１１は、変数ｌがゼロであるか否かを判断する（ステップＳ７７）。ゼロの場合、ＣＰＵ１１は、ステップＳ９１へと進む。
【００７９】
一方、ゼロでない場合、ＣＰＵ１１は、原子ｉをゼロに初期化して（ステップＳ７８）、１加算して原子ｉを設定する（ステップＳ７９）。
【００８０】
ＣＰＵ１１は、原子ｉの原子データ構造Ａにおいて、軌道数Ａ［ｉ］−＞ｍ又は電子数Ａ［ｉ］−＞ｎの少なくとも一方がゼロであるか否かを判断する（ステップＳ８０）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ８３へと進む。一方、少なくとも一方がゼロであるである場合、原子ｉの結合フラグＡ［ｉ］−＞ｂｆを「Ｔ」に設定し（ステップＳ８１）、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｔ」のみが設定されているか否かを判断する（ステップＳ８２）。「Ｔ」以外を含む場合、ＣＰＵ１１は、ステップＳ７９へと戻り、次の原子ｉ＋１について上述同様の処理を行う。
【００８１】
一方、ステップＳ８２にて、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｔ」のみが設定されている場合は、ＣＰＵ１１は、原子ｉに対する結合対象の原子ｊをゼロに初期化し、原子ｉの含有結合軸数Ａ−＞ｎｂを結合軸ｋに設定する（ステップＳ８３）。
【００８２】
そして、ＣＰＵ１１は、ｊを１増加させた原子ｊを原子ｉに対する次の結合対象とする（ステップＳ８４）。ＣＰＵ１１は、原子ｉの結合対象としての原子ｊの含有結合軸番号ｂによって特定される結合軸の両端原子番号ａに関し、原子データ構造Ａの結合フラグｂｆに「Ｔ」が含まれているか否かを判断する（ステップＳ８５）。ＣＰＵ１１は、「Ｔ」が含まれていない場合、ステップＳ８４へ戻り、次の結合対象について上述同様の処理を行う。
【００８３】
一方、ステップＳ８５にて、原子データ構造Ａの結合フラグｂｆに「Ｔ」が含まれていると判断した場合、ＣＰＵ１１は、結合軸ｋを１減算し（ステップＳ８６）、原子ｊが原子ｉの含有結合軸数Ａ−＞ｎｂに一致するか否かを判断することによって、全ての含有結合軸について処理を終了したか否かを判断する（ステップＳ８７）。一致しない場合、ＣＰＵ１１は、ステップＳ８４へ戻り、上述同様の処理を行う。
【００８４】
一方、ステップＳ８７にて、ＣＰＵ１１は、結合軸ｋが１であるか否かを判断する（ステップＳ８８）。結合軸ｋが１でない場合、ＣＰＵ１１は、ステップＳ９０へと進む。一方、結合軸ｋが１の場合、ＣＰＵ１１は、原子ｉの結合フラグＡ［ｉ］−＞ｂｆに「Ｃ」を設定する（ステップＳ８９）。そして、ＣＰＵ１１は、原子ｉが原子数Ｍ−＞ｎに一致するか否かを判断することによって、全ての原子ｉについて処理を終了したか否かを判断する（ステップＳ９０）。終了していない場合、ＣＰＵ１１は、ステップＳ７９に戻り、上述同様の処理を行う。
【００８５】
全ての原子ｉに対して処理を終了した場合、ＣＰＵ１１は、結合軸ｉをゼロに初期化した後（ステップＳ９１）、１加算して結合軸ｉを設定する（ステップＳ９２）。ＣＰＵ１１は、結合軸ｉの両端原子番号ａの各々に関し、原子データ構造Ａの結合フラグｂｆが「Ｆ」であるか否かを判断する（ステップＳ９３）。「Ｆ」である場合、ＣＰＵ１１は、ステップＳ９２へ戻り、次の結合軸ｉ＋１について上述同様の処理を行う。
【００８６】
一方、「Ｆ」である場合、ＣＰＵ１１は、変数ｌに１を設定する（ステップＳ９４）。ＣＰＵ１１は、ＣＰＵ１１は、結合軸ｉの両端原子の軌道数Ａ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｍ夫々から１ずつ減算し（ステップＳ９５）、また、結合軸ｉの両端原子の軌道数Ａ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｎ夫々から１ずつ減算する（ステップＳ９６）。そして、ＣＰＵ１１は、結合軸ｉの結合次数Ｂ［ｉ］−＞ｂｔを１加算する（ステップＳ９７）。
【００８７】
続けて、ＣＰＵ１１は、両端原子の一方の軌道数Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｍ又は電子数Ａ［Ｂ［ｉ］−＞ａ［１］］−＞ｎがゼロか否かを判断する（ステップＳ９８）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ７３へと進む。一方、いずれか一方がゼロの場合、ＣＰＵ１１は、その一方の原子の結合フラグＡ［Ｂ［ｉ］−＞ａ［１］］−＞ｂｆに「Ｔ」を設定する（ステップＳ９９）。
【００８８】
更に、ＣＰＵは、両端原子の他方の軌道数Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｍ又は電子数Ａ［Ｂ［ｉ］−＞ａ［２］］−＞ｎがゼロか否かを判断する（ステップＳ１００）。いずれもゼロでない場合、ＣＰＵ１１は、ステップＳ７５へと進む。一方、いずれか一方がゼロの場合、ＣＰＵ１１は、その他方の原子の結合フラグＡ［Ｂ［ｉ］−＞ａ［２］］−＞ｂｆに「Ｔ」を設定する（ステップＳ１０１）。
【００８９】
そして、ＣＰＵ１１は、両端原子夫々の結合フラグＡ［Ｂ［ｉ］−＞ａ［１，２］］−＞ｂｆに「Ｔ」が含まれているか否かを判断する（ステップＳ０２）。「Ｔ」が含まれていない場合、ＣＰＵ１１は、ステップＳ９５へ戻り、上述同様の処理を行う。ＣＰＵ１１は、変数ｌがゼロであるか否かを判断する（ステップＳ０３）。ゼロでない場合、ＣＰＵ１１は、ステップＳ７８へと戻り、上述同様の処理を行う。
【００９０】
一方、ゼロの場合、ＣＰＵ１１は、原子ｉをゼロに初期化して（ステップＳ１０４）、１加算して原子ｉを設定し（ステップＳ１０５）、電子数と軌道数の残りから原子電荷を設定するための処理（図３のステップＳ７）を行う。
【００９１】
ＣＰＵ１１は、原子ｉの原子データ構造Ａにおいて、軌道数Ａ［ｉ］−＞ｍはゼロではなく、かつ、電子数Ａ［ｉ］−＞ｎがゼロであるが成立するかを判断する（ステップＳ１０６）。不成立の場合、ＣＰＵ１１は、ステップＳ１０８へと進む。成立する場合、ＣＰＵ１１は、原子ｉの原子電荷Ａ［ｉ］−＞ｑに軌道数Ａ［ｉ］−＞ｍ＊１を設定して、軌道数Ａ［ｉ］−＞ｍをゼロにする（ステップＳ１０７）。原子ｉの電荷として軌道数が設定される。
【００９２】
ＣＰＵ１１は、原子ｉの原子データ構造Ａにおいて、軌道数Ａ［ｉ］−＞ｍはゼロであり、かつ、電子数Ａ［ｉ］−＞ｎがゼロではないが成立するかを判断する（ステップＳ１０８）。不成立の場合、ＣＰＵ１１は、ステップＳ１１０へと進む。成立する場合、ＣＰＵ１１は、原子ｉの原子電荷Ａ［ｉ］−＞ｑに電子数Ａ［ｉ］−＞ｎ＊（−１）を設定して、電子数Ａ［ｉ］−＞ｎをゼロにする（ステップＳ１０９）。原子ｉの電荷として負の電子数が設定される。
【００９３】
ＣＰＵ１１は、原子ｉの原子データ構造Ａにおいて、軌道数Ａ［ｉ］−＞ｍはゼロではなく、かつ、電子数Ａ［ｉ］−＞ｎがゼロではないが成立するかを判断する（ステップＳ１１０）。不成立の場合、ＣＰＵ１１は、ステップＳ１１２へと進む。成立する場合、ＣＰＵ１１は、原子ｉの軌道数Ａ［ｉ］−＞ｍを１減算し、また、電子数Ａ［ｉ］−＞ｎを１減算にする（ステップＳ１１１）。
【００９４】
ＣＰＵ１１は、原子ｉの軌道数Ａ［ｉ］−＞ｍがゼロ、かつ、電子数Ａ［ｉ］−＞ｎがゼロであるが成立するかを判断する（ステップＳ１１２）。成立しない場合、ＣＰＵ１１は、ステップＳ１０６へ戻り、上述同様の処理を行う。不成立の場合、ＣＰＵ１１は、原子ｉの結合フラグｂｆに「Ｔ」を設定する（ステップＳ１１３）。
【００９５】
そして、ＣＰＵ１１は、分子Ｍの原子数Ｍ−＞ｎの原子ｉ全てに対して処理を終了したか否かを判断する（ステップＳ１１４）。ＣＰＵ１１は、原子ｉ全てに対して処理を終了していない場合、ステップＳ１０５に戻り、上述同様の処理を行う。一方、原子ｉ全てに対して処理を終了した場合、ＣＰＵ１１は、この処理を終了する。
【００９６】
（結合次数の設定）
σ結合毎に加算された結合次数（ステップＳ７０）、及び、π結合毎に加算された結合次数（ステップＳ９７）によって、原子対間の全結合数が軸の結合次数として設定される。
【００９７】
［実施例１］
次に、上述した分子の３次元構造構築処理による実施例を説明する。先ず、実施例１として、図９に示すように、Ｃ２Ｈ４（エチレン）の原子配置８０に対して、元素Ｃが２次結合された結合結果８９が、上述した分子の３次元構造構築処理によって自動的に正しく得られることを図１０で説明する。
【００９８】
図１０は、Ｃ２Ｈ４（エチレン）の場合の状態遷移例を示す図である。図１０中、データ構造３０に基づいて記憶領域に展開された情報のうち、各状態の説明に必要な部分をテーブルＴ１０で示し、理解を容易にするため、状態遷移毎のテーブルＴ１０に対応させて結合次数が設定される様子を例示させている。
【００９９】
＜状態１＞
図１０において、図９に示すようなＣ２Ｈ４（エチレン）の原子配置８０がユーザによって成されると、ＣＰＵ１１は、この原子配置８０用にデータ構造３０をテーブルＴ１０として記憶領域内に構築し、原子データ構造Ａを作成した段階である。原子はＡ［１］からＡ［６］まで、原子順序番号については例えばＡ［１］−＞Ｎ＝６のように設定されている。この段階ではまだ結合軸データ構造Bは記憶領域のみ確保された段階である。
【０１００】
＜状態２＞
原子Ａ［１］と原子Ａ［２］の距離が閾値以下と判断されて、テーブルＴ１０に最初の結合軸が設定された段階である。結合軸Ｂ［１］は同時にσ結合の設定をＢ［１］−＞ｂｔ＝１で意味し、結合形成のために両端原子Ａ［１］とＡ［２］の軌道数と電子数は１ずつ減少している。
【０１０１】
＜状態３＞
原子Ａ［１］と原子Ａ［３］の距離が閾値以下と判定されて、テーブルＴ１０に結合軸Ｂ［２］が設定された段階である。この時、Ｂ［２］−＞ｂｔ＝１となり、両端原子の軌道数と電子数は１ずつ減少している。ここで、Ａ［３］−＞ｍ＝０、Ａ［３］−＞ｎ＝０となったため、Ａ［３］−＞ｂｆ＝Ｔと設定される。
【０１０２】
＜状態４＞
原子Ａ［１］と原子Ａ［４］の距離が閾値以下と判定されて、テーブルＴ１０に結合軸Ｂ［３］が設定された段階である。この時、Ｂ［３］−＞ｂｔ＝１となり、両端原子の軌道数と電子数は１ずつ減少している。ここで、Ａ［３］−＞ｍ＝０、Ａ［３］−＞ｎ＝０となったため、Ａ［３］→ｂｆ＝Ｔと設定される。さらにこの時、Ａ［１］−＞ｍ＝１、Ａ［１］−＞ｎ＝１とどちらも０でなく、Ａ［１］の属する結合軸の逆端原子Ａ［３］、Ａ［４］の結合フラグが「Ｔ」となっている。逆端原子の結合フラグが「Ｔ」でないのは原子Ａ［２］のみであるため、Ａ［１］−＞ｂｆ＝Ｃと設定される。
【０１０３】
＜状態５＞
原子Ａ［２］とＡ［５］の距離が閾値以下と判定されて、テーブルＴ１０に結合軸Ｂ［４］が設定された段階である。この時、Ｂ［５］−＞ｂｔ＝１となり、両端原子の軌道数と電子数は１ずつ減少している。ここでＡ［５］−＞ｍ＝０、Ａ［５］−＞ｎ＝０となったため、Ａ［５］−＞ｂｆ＝Ｔと設定される。
【０１０４】
＜状態６＞
原子Ａ［２］と原子Ａ［６］の距離が閾値以下と判定されて、テーブルＴ１０に結合軸Ｂ［５］が設定された段階である。この時、Ｂ［６］−＞ｂｔ＝１となり、両端原子の軌道数と電子数は１ずつ減少している。ここで、Ａ［６］−＞ｍ＝０、Ａ［６］−＞ｎ＝０となったため、Ａ［６］−＞ｂｆ＝Ｔと設定される。さらにこの時、Ａ［２］−＞ｍ＝１、Ａ［２］−＞ｎ＝１とどちらも０でなく、Ａ［２］の属する結合軸の逆端原子Ａ［５］、Ａ［６］の結合フラグが「Ｔ」となっている。逆端原子の結合フラグが「Ｔ」でないのはＡ［１］のみであるため、Ａ［２］−＞ｂｆ＝Ｃと設定される。
【０１０５】
＜状態７＞
結合軸Ｂ［１］の両端原子Ａ［１］とＡ［２］について、結合フラグが両方ともＣであることから、テーブルＴ１０にπ結合を設定する段階である。具体的には、軌道数と電子数を１ずつ減少し、結合次数Ｂ［１］−＞ｂｔは１増大して２に設定される。この時、Ａ［１］−＞ｍ＝０、Ａ［１］−＞ｎ＝０、Ａ［２］−＞ｍ＝０、Ａ［２］−＞ｎ＝０であることから、Ａ［１］−＞ｂｆ＝Ｔ、Ａ［２］−＞ｂｆ＝Ｔに設定される。
【０１０６】
従って、テーブルＴ１０によって、図９に示すような適切に結合次数が設定された結合結果８９を得ることが可能なことを確認できる。
【０１０７】
［実施例２］
次に、実施例２として、Ｃ６Ｈ５ＣＨＯ（ベンズアルデヒド）の原子配置９０に対して、結合次数が設定された結合結果９９が、上述した分子の３次元構造構築処理によって自動的に正しく得られることを図１１で説明する。
【０１０８】
図１１は、Ｃ６Ｈ５ＣＨＯ（ベンズアルデヒド）の場合の状態遷移例を示す図である。図１１中、データ構造３０に基づいて記憶領域に展開された情報のうち、各状態の説明に必要な部分をテーブルＴ１１で示し、理解を容易にするため、状態遷移毎のテーブルＴ１０に対応させて結合次数が設定される様子を例示させている。
【０１０９】
＜状態１＞
図１１において、Ｃ６Ｈ５ＣＨＯ（ベンズアルデヒド）の原子配置９０がユーザによって成されると、ＣＰＵ１１は、この原子配置９０用にデータ構造３０をテーブルＴ１１として記憶領域内に構築し、原子データ構造Ａを作成した段階である。原子はＡ［１］からＡ［１４］まで、原子順序番号については例えばＡ［１］−＞Ｎ＝６のように設定されている。この段階ではまだ結合軸データ構造Bは記憶領域のみ確保された段階である。
【０１１０】
＜状態２＞
図１０と同様の処理により各原子間距離が閾値以下と判定されて、σ結合が設定された段階である。１４個の結合軸について、結合次数はＢ［１：１４］−＞ｂｔ＝１と設定されている。また炭素原子の軌道数と電子数はすべて１となり、水素原子の軌道数と電子数はすべて０となる。そのため水素原子の結合フラグはすべて「Ｔ」と設定されている。この時、酸素原子Ａ［８］についてはＡ［８］−＞ｍ＝３、Ａ［８］−＞ｎ＝５、Ａ［８］−＞ｂｆ＝Ｃと設定されている。ここまでは図１０の処理とまったく同様に進めることができる。
【０１１１】
＜状態３＞
酸素原子の軌道数１に対して電子数２となる組を２つ考慮することができることから、考慮した数の組を孤立電子対として減少させた段階である。具体的にはＡ［８］−＞ｍ＝Ａ［８］−＞ｍ−２＝１、Ａ［８］−＞ｎ＝Ａ［８］−＞ｎ−２＊２＝−＞１と設定される。
【０１１２】
＜状態４＞
両端原子の結合フラグの組が「Ｃ」と「Ｆ」の組であるＢ［８］について、π結合が設定された段階である。具体的にはＢ［８］−＞ｂｔ＝Ｂ［８］−＞ｂｔ＋１＝２と設定され、両端原子Ａ［７］とＡ［８］の軌道数と電子数が１ずつ減少される。結果としてＡ［７］−＞ｍ＝０、Ａ［７］−＞ｎ＝０、Ａ［８］−＞ｍ＝０、Ａ［８］−＞ｎ＝０と設定され、この時Ａ［７］−＞ｂｆ＝Ｔ、Ａ［８］−＞ｂｆ＝Ｔと設定される。
【０１１３】
＜状態５＞
両端原子の結合フラグの組が「Ｆ」同士の組である結合軸についてπ結合が設定され、その後で「Ｃ」と「Ｆ」による組の結合軸についてπ結合が設定され、「Ｃ」か「Ｆ」の組である結合軸が存在しなくなるまでπ結合の設定を進めた段階である。具体的にはすべての原子について、軌道数と電子数が０と設定され、結合フラグは「Ｔ」と設定されている。
【０１１４】
＜状態６＞
従って、テーブルＴ１１によって、適切に結合次数が設定された結合結果９９を得ることが可能なことを確認できる。
【０１１５】
以上より、分子構造構築システムにおいて、上述した分子の３次元構造構築処理によって、各原子が末端か否かを原子データ構造Ａの結合フラグｂｆを利用して判定することによって、末端からπ結合の設定を行うことができ、共役系の結合次数を矛盾なく設定することができる。
【０１１６】
従来手法を用いた場合と異なり、分子構造の構築に関して、例えば、マウスによる結合軸の選択、結合次数の選択、結合軸の選択解除などのユーザによる操作数を削減し、特に巨大分子系における構造の変更設定など、個別の選択操作に困難を生じる系の分子設計を容易に進めることが可能になる。また付随して、従来手法で生じる結合次数設定ミスによる分子物性計算の異常動作を解消し、計算への連携をスムーズに進めることも可能になる。
【０１１７】
従って、分子構造をＧＵＩなどで構築する際に、各原子に設定されている原子の軌道数と電子数の情報に基づき、各原子間の結合に対して結合次数を自動判定でき、高分子であってもユーザに負担をかけることなく分子設計を容易とし、更には分子物性計算などについても正常動作を可能とする。
【０１１８】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１１９】
１１        ＣＰＵ
１２        メモリユニット
１３        表示ユニット
１４        出力ユニット
１５        入力ユニット
１６        通信ユニット
１７        記憶装置
１８        ドライバ
１９        記憶媒体
３０        データ構造
８０、９０  原子配置
８９、９９  結合結果
１００      分子構造構築システム
Ｔ１０、Ｔ１１  テーブル
【図１】
2011198221.tif 000003
【図２】
2011198221.tif 000004
【図３】
2011198221.tif 000005
【図４】
2011198221.tif 000006
【図５】
2011198221.tif 000007
【図６】
2011198221.tif 000008
【図７】
2011198221.tif 000009
【図８】
2011198221.tif 000010
【図９】
2011198221.tif 000011
【図１０】
2011198221.tif 000012
【図１１】
2011198221.tif 000013