全体的な、OpenSeesプログラムの流れとしては、
Tcl_CreateCommand
で、OpenSeesとして使用するなコマンド(たとえば、Node,Element,wipeなど)が
実行するときに、どのファンクションを動作させるかを定義します。
次に
Tcl_EvalFile
で、tcl スクリプトファイルを読み込み、書いてある順に、
Tcl_CreateCommand でセットされたファンクションが一気に実行されます。
Tcl_CreateCommand は、以下の通りです。
Tcl_CreateCommand
(interp, "<Openseesコマンド>",
<OpenSeesコマンドを読み込むファンクション>,
(xxxxx)NULL, (xxxxxx)NULL);
たとえば
Tcl_CreateCommand(interp, "node", TclCommand_addNode, (ClientData)NULL, NULL);
は、 OpenSeesコマンドのとしてtclファイルに書かれているnodeの行を、プログラムの中にデータととして格納する時、ファンクション TclCommand_addNode( ) を使用してデータの格納を行います。
つまり、 TclCommand_addNode( )の中で、
Nodeクラスに OpenSeesコマンドのNodeのデータをセットしている、ということになります。
そして、最終的に実行する
Tcl_EvalFile
は、
OpenSees\SRC\tcl\tclmain.cpp
または
OpenSeesプロジェクトのtclmain.cpp
にあります。(緑丸部分)
Tcl_EvalFile(interp, tclStartupScriptFileName);
tclStartupScriptFileName には、OpenSeesをDOSコマンドプロンプトから動作させるときにセットして引数の、ファイル名が入っています。
OpenSeesのプログラムは、基本的にtcl スクリプトファイルに書かれている順に動作する、ということ。
Tcl_CreateCommand( )で定義されているコマンドは、OpenSees用のコマンドで、クラスとして定義されている、ということ。
もし、OpenSeesの計算結果などに対して、簡単な追加計算を行いたいならば、tcl スクリプトファイルに、tcl でプログラムを記載できる、ということ。
(tcl 言語についての説明は、ここのサイト が良くまとまっています)
もし、OpenSeesの計算結果などに対して、複雑な追加計算を行いたいならば、自分で新しいOpenSeesのコマンドをTcl_CreateCommand( )で定義できる、ということ。
ただし、C++ として正しくクラスを設計する必要があります。
次のページ →
OpenSees のソースコード解析に挑戦してみる : 目次 |
0 件のコメント:
コメントを投稿