Subject | : Re^6: SAD Update. V1.0.10.4.3a10. ElementValues |
Date | : 2010/03/02(Tue) 14:56:44 |
Contributor | : Akio Morita |
> > 今朝行ったcvs updateにより、今まで報告してきた異常が消えたことを確認しました。 > > > 設定済みの ElementValuesを参照出来ないのが最大のバグだと思うのですが? > > 例えば、 > ElementValues = {}; (* Clear coupling *) > AppendTo[ElementValues, "K1"["QFH"] :> 0.5 * "K1"["QF"]]; > AppendTo[ElementValues, "K1"["QDH"] :> 0.5 * "K1"["QD"]]; > などのように、一度に設定せずに設定を徐々に追加する場合、MAIN trunkの現状の実装では > 過去に設定した ElementValuesの値を参照する Getter proxyが存在しないので、非互換性が > 発生しています(過去に動いたものが動かないという意味で) > > 実用上の互換性から、次の用例をサポートすべきだと思います > o 複数のサブルーチンコールの内部で個別に追加設定する場合(Getter proxyが必要) > o ElementValues/FitWeight/FitValue/FitFunctionの定義をバックアップして、別の設定の元で計算し復元する場合 > (Getter proxy/Definition proxyが必要[With[{backup = ?ElementValues}, Clear[ElementValues]; foo; ReleaseHold[backup]]) > > 他にも > o ビームラインの設定に先立って ElementValuesを設定している場合に、Packages/Couple.n読み込み時点の > ElementValuesが反映されません。 > Packages/Couple.n読み込み時点で、設定済みのElementValuesを評価するか、ElementValuesの評価を > SetCoupledElementsの評価時点まで遅延する必要があります > o ビームライン定義に先立って設定される場合、ElementValues = l_Listの評価時点では、エレメントが存在しない > ((LINE|Element)["POSITION", _] === {})ケースもありえますので、EVSetFunの生成に失敗するケースが考えられます > 一応、上記のユースケースをサポートする実装を amorita branch側では開発していますが、 (Set|SetDelayed)[ElementValues, foo_, bar__]や(Set|SetDelayed)[foo__, ElementValues, bar___]な Setter proxyが未実装です。 あと、実装上のオプションとして BeamLineName[]をキーにして ElementValuesをビームライン毎に保持することが 可能ですが(名前付きビームラインを切り替えながら使うユースケースを想定)、需要はあるのでしょうか? # 新規のビームラインに移った際に、ElementValuesの初期値を空リスト{}にするか直前の値を継承するかという # 問題もありますが...