トップ «前の日記(2008-03-19) 最新 次の日記(2008-03-21)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

2008-03-19 [長年日記]

_ [SAD]calc.y修正

先日の日記で書いてた calc.y回りの保守を実施。

新しいコードでは、src/yylex_.c

  • Frotranから呼び出すyyparse_,yypushtoken_,yypoptoken_
  • calc.yから呼び出すトークンリーダーyylex

を実装し、calc.yからyaccにてcalc.hcalc.cを生成し そのまま使います。

yaccの出力を Cコンパイラに渡すために、calc.yのアクションは FortranからCへ書き換えて有ります。

calc.yの文法に関しては、 ";",")",ID型トークンによる exprの終端を 受け入れる(YYACCEPTする)構文に変更しています。 これは、calc.yが解析する構文が、部分構文で次のトークンが 構文定義に含まれないために、SADの MAINレベル的には正常な構文に対して 構文解析器が必ずsyntax errorで終了するという問題への修正です。

_ [SAD]itopenbuf_のデフォルトを変更

Revision 1500から USE_NEW_FORTRAN_OPEN_SIM=YESな状態が デフォルトになりました。

古い実装を使いたい場合は、USE_OLD_FORTRAN_OPEN_SIM=YESsad.confに追加してください。

_ [SAD]SPAC系フラグに関連するコード

なんか、SAPC系のフラグが乱立しているので、状況を整理してみる

  • PSPAC
    • tfsetparam.f(PSPAC*変数の読み込み)
    • tturn.f(tspac_ルーチンの呼び出し @ トラッキング)
  • WSPAC
    • track.f(WSPACフラグの初期化)
    • tturn.f(twspac_ルーチンの呼び出し @ トラッキング)
    • qtwiss.f(Space Charge付きのOptics計算)
    • temit.f(Space Charge付きのEmittance表示)
    • tintrb.f(Space Charge付きのEmittance計算)
  • SPAC
    • track.f(SPACフラグの初期化)
    • tturn.f(DRIFTエレメントに対してspdrift_を呼び出す)
    • tmulti.f(spkick_spapert_を呼び出す)
    • tsol.f(DRIFTエレメントに対してspdrift_を呼び出す)
    • tftrack.f(SPACフラグ付きの場合は、NPARAを殺している)

なお、Space Charge関連と思われるtspac.fにある tspac_ルーチンは、呼び出されない。

ざっと眺めた感じでは、次の問題がありそう

  • PSPACWSPACSPACは同時にオンに出来る
  • PSPACWSPACに関しては、NPARA>1の際にトラッキングが並列化される。
    • 並列実行時は、エレメント毎でのプロセス間同期は保証されないので、粒子間相互作用や、粒子分布の統計量を使う計算は「結果が保証できない」はず

カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記