Conductorでの処理
Conductorが機能要素のツリーを管理し、積分計算を行う仕組みを解説します
処理順序
- conductorはRunnableをimplementsしている。
-
Runnable.run()ではまずVisitorを使って、NodeList, ReactorList, AnalyzerListを作成する。
instance treeが以下のようになる場合、
external cell NaChannel 4sGate 2sGate /NaChannel K1Channel /cell /external
全てのNodeをNodeListに登録する順序は、
external cell NaChannel 4sGate 2sGate K1Channel
ReactorをReactorListに登録する順序は、
4sGate 2sGate NaChannel K1Channel cell external
AnalyzerをAnalyzerListに登録する順序はReactorListと同じ。
- 次いで、NodeList.setLinks()を呼ぶ。
- start()が呼ばれると、計算中のflagを立て、integrate()を呼び出す。
- integrate()の最初にNodeList.prepare()を呼び出す。
- 各time step毎に、analyzers.analyze(double t), Reactors.calculate(double t), Variables.update(double t)を呼び出す。 (注: xml上でVariableに特定のクラスを指定すると、計算方式を変更できる。)
- Variablesでは、dy/yの設定を満たすtime stepを用いて、全てのVariableを更新する。time stepをConductorに返す。
- durationに設定された時間分だけ、計算をする。
- 最後に、NodeList.end()を呼び出す。
- conductorでは、Thread終了時にNodeList.quit()を呼び出す。