Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject その1
Date: 2006/01/30(Mon) 19:58:50
ContributorKentaro Harada < >

放射光源の原田です。SADの解説を書いてある人にメールしたことがあるん
ですが、それをそのまま引用してみます。お役に立てば幸いです。
あっているかどうか保証しません。(エキスパートの皆様へ:いい加減なこと
書いてあっても、責めないで下さい……)

その1:SADの走らせ方と必要なファイル
 
(実行方法と渡すファイル) 
 
  SADの実行形式は sad1.exe で、実行すると、最初に初期化の為の
スクリプト init.n など自動で読み込みます。初期化やSAD自体の変数
定義、GUIの為のボタンやスイッチ画像などはSADフォルダの下のサブ
フォルダにあります。SADを実行する為には、どのフォルダに何がある
かの環境変数定義がまず必要で、それを含めたSAD実行の為のスクリプトが
"gs" です。(普通は gs はゴーストスクリプトを呼んでしまいますので、
path を変えるか、full path で呼んでください。)

*******gs************* 

#!/bin/csh -f
cd .
setenv SADROOT /SAD
limit stacksize 6250
setenv TCL_LIBRARY ""
setenv TK_LIBRARY ""
setenv UNIX95 ''
setenv SAD_PACKAGES $SADROOT/share/Packages
setenv KBFRAMEDIR $SADROOT/share/KBFrame
ln -fs $1 fort.77
setenv ftn77 $1
setenv FORT77 $ftn77
$SADROOT/bin/`$SADROOT/bin/HostArch`/sad1.exe "OFF CTIME LOG;READ 77; " $2 $3
 (ここで sad1.exe を呼び出し、コマンド(とラティス)を書いたファイルを
 渡します。"HostArch"は CPU (OS) を判定するスクリプトで、ここでは "Linux" が
 返されます。つまり、 $SADROOT/bin/`$SADROOT/bin/HostArch`/sad1.exe は、
 /SAD/bin/Linux/sad1.exe と同じこと。)
exit

***********************
 
  SADファイルでラティスとコマンドは完全に分けることが可能です。
(コマンド上からラティスを定義することも可能ですが、普通はまず
ラティスを定義し、その上で計算をします。) 個人的にはラティスと
コマンドを分けたファイルにしていますが、それは単に最初にSADを
教えてくれた人がそうしていたというだけで、両者を繋げて扱っている
人も大勢います。(2分割する場合、

cat $1 >/scratch/$1_$2.exe
cat $2 >>/scratch/$1_$2.exe
/SAD/bin/gs < /scratch/$1_$2.exe

などと別にシェルスクリプトを用意して、ファイルを1つにまとめてから
gs に渡す必要があります。
  いずれにせよ、gs に渡すファイルは1つで、前半(ラティス部分)と
後半(コマンド部分)に分けられます。
 
(ラティスファイル)
 
  以下は先日のメールで書いたラティスファイルです。これは「トップ
レベル」で読み込まれます。SADプログラムには2つの段階があり、
「トップレベル」と「FFS」です。コマンドの最初に大抵は ffs と
書きますが、この"ffs"以降はSADの中で ffs という「スクリプト言語
インタープリタ」が立ち上がった状態になります。「トップレベル直接」と
「FFS上」ではラティスもコマンドも書き方(文法)が違います。
(どちらでも同じ内容の計算が出来ることもありますが、ラティスは
トップレベルで渡した方が簡単、コマンドはFFSを使った方が簡単です。)
SADのコマンドと言う場合、多くはFFS上の関数、FFS上の
スクリプトになります。
  なお、FFSとは Final Focus System (最終収束系)のことで、
生出さんがリニアコライダーの衝突点オプティクス設計を前提に開発した
言語なのでそう呼ばれています。
 
 
(ラティスファイルの例)
  (トップレベルに読み込まれます。)
!********************************************************************
!*
!* NSLS XRING
!*
!********************************************************************
  (行の中で!以降はコメントアウトになります。トップレベルでもFFS
でも同じです。)
MOMENTUM=2.8GeV
;
MARK MKN =()
MKL =()
  (マーク。計算では "LINE(ラティスのある部分)" を選んで計算をします。
   その"LINE"の最初は必ず MARK 要素である必要があります。MARK 要素は
   SADの為の要素で、中身を表示させる(例えば type MKN;)と、
    MARK MKN =(AX =1.00353875799E-14 BX =1.5971069053692
    AY =-1.045786698E-15 BY =.4347850999073 EX =-3.10233731805E-6
    EPX =-1.2621474416E-15 DP =.01 SIGZ =.0555606415224
    EMITX =1.262173642876E-7 EMITY =1E-12 )
   などとなります。つまり、その点のトゥイスパラメータ、中心軌道、運動量の
   ずれ、マッチングの時に考える運動量幅、エミッタンスなどが格納されています。)
;
CAVI CAVI=(VOLT= 1.12MV HARM = 30)
   (空洞。周波数、もしくはハーモニック数のどちらかを入れるともう片方が
    自動的に決まります。ちなみに58.88MHz だとハーモニクスが整数にならな
    かったのですが、このファイルは周長が違っているでしょうか。)
;
BEND B =(L = 2.7 K1 = -0.0724921758 ANGLE = .39269908 E1 = 0.5 E2=0.5)
   (偏向磁石。ステアリングとメインの偏向磁石の区別はありません。変数の定義で
    区別します。ANGLE は「中心軌道」を曲げ、K0 は中心軌道は曲げずに、
    「COD」を作ります。ANGLE も K0 も rad で数字としては同じですが、
    ステアリングは K0 に角度を入れます。勿論、「度」でもよくて、
    ANGLE = 22.5 DEG でもよいです。E1、E2 は端の角度で、E1 が入り口、E2 が
    出口、偏向電磁石の曲げ角に対しての割合で入力します。
    E1=0.5 E2=0.5 が矩形、E1=0 E2=0 はセクタになります。
    ちなみに偏向磁石を2に割った場合、
     BH1 =(L = 2.7/2 K1 = -0.0724921758/2 ANGLE = .39269908/2 E1=1 E2=0)
     BH2 =(L = 2.7/2 K1 = -0.0724921758/2 ANGLE = .39269908/2 E1=0 E2=1)
    の様に、前半と後半で E の値を変える必要があります。)
;
QUAD
Q1 =(L = .45 K1 = -0.675839592 )
Q2 =(L = .8 K1 = 1.069849888 )
Q3 =(L = .4132 K1 = -0.57926284872 )
Q4 =(L = .225 K1 = 0.2923738695 )
   (4極電磁石。特に難しい話はありません。Fは正、Dは負。K1は
    仰るとおり、 (B'L)/(B rho)です。以下、K2もK3も同じです。)
;
SEXT SF =(L =0 K2 = 0 )
SD =(L =0 K2 = 0 )
   (長さを0.2にしたら、両脇のドリフトスペースを0.1ずつ削ればいいだけ
    です。実は薄レンズかどうかでSAD内部で呼び出すサブルーチンが変わるの
    ですが、コマンドやラティス上は何も変わりません。)
;
DRIFT D1 =(L = 2.25 )
D2 =(L = 0.685 )
D3 =(L = 0.3484 )
D4 =(L = 0.70825)
D5 =(L = 0.9 )
D6 =(L = 0.25 )
  (ドリフトスペースです。)
;
LINE
NCELLH =(MKN D1 Q1 D2 Q2 D3 Q3 D4
B
D5 SD D5 SF D6 Q4
MKL)
NCELL =(NCELLH -NCELLH)
RING =(4*NCELL CAVI 4*NCELL )
   (計算に使うラインを定義します。SADではビームラインといいます。
    頭に - を付けると、後ろからひっくり返して(偏向磁石の E1 と E2 の
    方向なども含めて)並べます。すなわち、-MARKを見ると、アルファや
    分散ダッシュの符号は MARK の逆になります。同じセルを並べたい場合、
    4*NCELL などとすることができます。(かけ算は頭に付けること。))

;
 
  以上がラティスの定義です。


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)