ToDo:
追いかけ回せした結果だが、NPARA>1で並列処理に入るために fork(2)する際にFortran側の Output Bufferが Dirtyな場合、 fork(2)後の子プロセス側でも Bufferの書き出しが発生しているのが 原因の模様。子プロセス側では、write文は実行されないのだが 並列処理を合流させるために子プロセスがSTOPする際に Dirty Bufferが出力されているのかな?
対処法としては、fork(2)前に全ての Dirty Bufferを フラッシュすれば良いわけだが...効率的で移植性のある方法が有りません!
Fortran2003から実装された flush文は装置番号が必要だし、 引数なしで全てのI/Oをフラッシュするflushサブルーチンは ベンダ拡張なので存在が保証されない。また、新しいFortran規格では ストリームと接続可能な装置番号は0〜2^31-1までの整数に 拡張されているので、inquire文ですべて調べるコストは 極めて高いと思われる。
コード内のopen文に渡される装置番号をモニターして 最大値を割り出す必要があるか? ただし、open文を使わずにwrite文へ未接続の装置番号を 渡して、デフォルトのファイル名で出力しているコードが有るとNG。 write文の装置番号も追跡しないといけないのか...Orz
な話が、持ち込まれて検討中。(厳密にはLHCではなく、CTF3の ビームトランスポートが合わないらしい)
フィット自体は走るのだが結果が思わしくないので、第一原理に戻って よく考えてみると、Transport Lineの場合周期境界条件が無いので、 β(s)/φ(s)が Beamlineの特徴量になっていない(Transport入り口の β(0),α(0)に依存する関数)ので、仮に軌道レスポンスのフィットが 成功してもそこから得られるβ(s)/φ(s)は、あるβ(0),α(0)を Transportに与えた際のβ(s)/φ(s)を得ていることになる。 (厳密には、任意定数λ,Cを含んだλβ(s)とφ(s)+Cが得られる訳だが...)
よく考えれば、当たり前のことだったりする
Transport Lineの場合は、三番目の条件が無いので、軌道レスポンスに β(s)/φ(s)をフィットする操作は、R^2の広さを持ったTransport Lineの β(s)/φ(s)の集合から一個の元を拾い上げる操作で、何らかの拘束条件を 課して固定しない限り、望みの解が得られる確率は激しく低い。
フィットの繰り返しの途中で、暫定解を拘束関数で変換するのが 一番簡単な実装と思われるが、線形変換(λ,C)の自由度があるので その変換は非線形変換か sに関して不連続な変換である必要が有る。 また、完全に拘束するには最低2自由度の拘束が必要と思われる。
_ Mr.X [KEKB Linac ではほぼ完成している話らしい。(最近)]
シングルキックの軌道レスポンスを解析して KEKB Linacの Q Fudgeを 補正してモデルとマシンの一致が改善したという話が、 LCGのMLに流れているのは読んだのだが、内容的にはモデルでの 軌道レスポンスを実測したレスポンスへ合わせる Qパラメータを 推定しているようだ。この場合、多数のレスポンスから転送行列を 推定して、モデルの転送行列との差を補正していることになる。
インタラクティブなモデルが無く、静的なテーブルで渡される (MADXのTWISSテーブルダンプが標準みたい)という状況下で、 離散的なモニターの場所毎の光学関数のモデル値は既知だが、 モニター間の構造物の知識(Quadや Bendがどこに有るか)が無い場合に、 どうやって誤差を含んだマシンのレスポンスからマシンの 光学関数を復元するかという問題は、かなり厄介な気がする。
十分な数の位相の異なるレスポンスを集まれば、未知数と連立方程式の 数からは転送行列を決定出来はずだが、光学関数を復元には最低2個の 既知なパラメータ(最上流のα&βなど)が必要だが、それ自体が測定が 必要な観測量なわけで... Orz
周期境界条件が無い場合は、光学関数はビームラインの固有量に なっていないから、それ指標にモデルと実測を比較して誤差を 論じようという考え自体に無理があるのでは無いだろうか? (私が聞いたのは、「Transportのβを測りたい」という話なのだが)
コアエンジンの内部で CELL/INSモードの切り替えを行わないように改造して、 位相差 φ(s)-φ(s')の符号関数を差し替えて可能にして、 Transport Lineも扱えるようにする作業は、先週のうちに終わっているので、 モデルからレスポンスを生成してはフィットエンジンの挙動をチェックする 作業を行う。
結論から言えば、ほぼ予測通りの結果
実用上の障害は、β(0)/α(0)の不定性のため、 インタラクティブなモデルで無いと比較出来ない。
また、再構築された情報にはα(s)が含まれないために、それ自体だけでは β(0)/α(0)に合わせて変換することが出来ない。
メリットは、転送行列よりも情報量が少ないので再構築に必要な レスポンスセットが小さいことかな?(未知数と方程式数の比較から転送行列 の再構築には最低限4種類のレスポンスが必要だが、β/φなら3種類で十分)
2時すぎに始まって終わったのが5時半...長かったが結構面白い話題だった。 内容的には、Chromaticity correctionとか Off-momentum β beating correctionの話題
Arc部の SD/SFのファミリを組み替え&セルの位相を調整して SDファミリに対して 2φ(s)を揃えて Off-momentum β beatingを補正するとか、 SD/SFの高次効果を抑制すれるという提案。 Arc単位でやってるみたいだけど、内容的にはKEKBの SD/SFペア毎に 転送行列を-I'にして高次効果を抑制してまま Chromaticity correctionする 話と同じ原理に思える。こっちでは Phasingとか呼ぶみたい
これの副産物で、SDが強くできる(Designパラメータの定格を越えているが)ので Arc部のバンプ軌道でIPの交差バンプが生成する Dispersionを補正可能になる らしい(正確には、許容出来る高さのバンプで補正できるだが)。
LHCの Design Latticeを見て気になっていたIPの交差バンプが作る Vertical DispersionとかHorizontal Dispersionの乱れだが、 スライドを見る限り 10年前から問題になっていたようだ
そんなに前から問題だったなら、なんでVertical Dispersion Suppressorが 入って無いんだろう?
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記
_ 管理人さん [-ftree-vectorize is going to be turned on under -O3.]