SPRKKR

  ここでは、MCDの計算が可能なSPRKKRコードと計算方法を解説する。
Please, see "hoc16_tasksheet" on http://olymp.cup.uni-muenchen.de/index.php?option=com_remository&Itemid=20&func=startdown&id=845&lang=en
------------------------------------------------------------------------------
■ Akai-KKRとSPR-KKRの違い(27/Sep/2016)
◇ オススメのコードは?
・最初に扱うのはAkai-KKRの方が良いです。なぜならば、コンパイルし易いのと、計算での収束性が良いこと、バンド分散の計算も安定していることが挙げられます。
・マニアックな計算をしたいという方はSPR-KKRです。フルポテンシャル法が使えるので、水素原子が入るような隙間が沢山ある結晶構造の計算に適しています。
(Akai-KKRもそうですが、マフィンティンポテンシャルを使う場合は、水素原子が入りそうな隙間には原子番号0の原子を指定して計算の精度を高めることができます。GaAsやZrNiSnなどが代表例)
※ 注意点として、SPR-KKRのはマニュアルを読んだだけでは分からないことが多くあります。セミナーの内容を調べたり、開発者に相談したりする苦労も必要になります。

◇ Akai-KKRとSPR-KKRが出来ること
・CPA計算が可能(単位胞で元素置換した系の計算が可能)
・SCFとDOSの計算が可能
・全エネルギーやスピンモーメントを計算可能
 得られたデータから相の安定性や形成エネルギーを算出可能

◇ Akai-KKRが得意
・収束が安定している
・バンド分散の計算が安定している

◇ SPR-KKRが可能なこと
・非等価な原子位置(Akai-KKRでのnatmに対応)を十数以上入力可能
(Fe2VAlのnatmは4なのでAkai-KKRでも十分余裕がある)
・WIEN2kのように空間群から入力ファイルを作れる
・フルポテンシャル計算が可能
・LDA+U, GGA+Uが計算可能
・数多くの物性が計算可能(XAS, XPS(core-level and valence band), ARPES, XES, MXO, AES)
 Residual Resistivity of Alloys, Spin- and Orbital Momentsなど
 http://ebert.cup.uni-muenchen.de/index.php?option=com_content&view=article&id=8&catid=4&Itemid=7
 や
 http://ebert.cup.uni-muenchen.de/index.php?option=com_remository&Itemid=20&func=startdown&id=51&lang=en
 のマニュアルを見ると良い。
・クラスターや界面の計算が可能
------------------------------------------------------------------------------
■ MCDが計算可能なコード
1) SPRKKR : http://olymp.cup.uni-muenchen.de/index.php?option=com_content&view=frontpage&Itemid=1&lang=en
2) WIEN2k : http://www.wien2k.at/
3) AkaiKKR : http://kkr.phys.sci.osaka-u.ac.jp/jp/
------------------------------------------------------------------------------
■ SPRKKR 6.3 ( Fedora18 x86_64 Xfce, CentOS 6.4 x86_64 minimal Desktop で確認 )
1) download Foxit Reader : http://www.click-assist.com/blog/compare.php 
2) 下記 SPRKKR HPより LicenseファイルをダウンロードしFoxit J-Reader で開く
  http://olymp.cup.uni-muenchen.de/index.php?option=com_content&view=frontpage&Itemid=1&lang=en
3) 必要事項を記入し、編集→画像を追加→枠で囲って画像を挿入して、SAVE
4) License ファイルのpdfを下記HPを参考にして送る
  http://www.post.japanpost.jp/navi/main.html
5) H. Ebert 教授から SPR-KKRがあなたの研究に役立つかどうかを考察して頂けるので、簡潔な文章でどんな物質のどんな結果を得たいかを教えて欲しいとメールが送られてくることがある。丁寧に返答する。
6) Ph. D. だとMr. 扱いだという御話をある方から聞きました
  Ph. D の場合はアドヴァイザーのサインが追加で必要になる
7) web上で登録をするとメールにてコードが送られてくる

■ Attention !: Linux を 日本語版で使用している場合の注意
 日本語などのフォントの文字が入力されているとエラーとなります。
 特に case.pot ファイルの冒頭にある HEADER の後に 日本語などのフォントの文字が無いかを調べてください。日本語などのフォントが存在する場合はその部分を削除します。

■ On CentOS 6.4 x86_64 minimal Desktop,  Openmpi calculation is success.
execution time for last iteration (Core i7-2700K)
1 CPU: 44.709 sec
4 CPU(-np 4): 12.377 sec

■ xband
0) install
  yum install tk
  yum install tcl
  yum install tclx
  yum install gnuplot
  yum install grace
  yum install xterm
  yum install python-argparse
1) mkdir sprkkr
2) cd sprkkr
3) mkdir xband
4) cd xband
5) cp $HOME/Downloads/xband_6.3.tar.gz .
6) tar -zxvf xband_6.3.tar.gz
7) gedit ~/.bashrc
   export XBANDPATH=$HOME/sprkkr/xband
   export PATH=$PATH:$XBANDPATH:
   export XLIB_SKIP_ARGB_VISUALS=1
8) gfortran case
   gedit geometry/Makefile:FC=ifort -> FC=gfortran-4.9
   gedit graphics/makefile:linuxFC=ifort -> linuxFC=gfortran-4.9, linux-gnuFC = ifort -> linux-gnuFC = gfortran-4.9, FC=ifort -O2 -> FC=gfortran-4.9 -O2
   gedit spheres/makefile:linuxFC=ifort -> linuxFC=gfortran-4.9, FC=ifort -O2 -> FC=gfortran-4.9 -O2
   gedit symmetry/makefile:linuxFC = ifort -> linuxFC = gfortran-4.9, FC=ifort -> FC=gfortran-4.9 -O2
9) bash
10) xband

■ OpenMPI ( success Fedora18 x86_64 Xfce, CentOS 6.4 x86_64 minimal Desktop )
※ OpenMPIは1.4.5 シリーズのヴァージョンを用いると良いだろう。
・私の場合、Ubuntu12.04 x84.64では上手くインストール出来なかった。
・CentOS 6.4 x84_64,  minimal Desktop ではインストールに成功。
・Fedora18 x84_64, Xfce ではインストールに成功。
□ インストール
1) http://www.open-mpi.org/
2) tar zxvf openmpi-1.4.5.tar.gz
3) cd openmpi-1.4.5
4) コンパイラにより下記のように設定
   ・gfortran case
      ./configure -prefix=/usr/local/openmpi CXX=g++ CC=gcc FC=gfortran F90=gfortran F77=gfortran
   ・ifort case
      ./configure -prefix=/usr/local/openmpi CXX=icpc CC=icc FC=ifort F90=ifort F77=ifort
5) make
6) sudo (Ubuntu, Debian) or su (CentOS, Fedora)
7) make all install
□ 環境設定 (  .bashrc in home and root directory )
# OpenMPI environmental setting
export MPIROOT=/usr/local/openmpi
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH
export MANPATH=$MPIROOT/share/man:$MANPATH

■ SPRKKR 6.3
1) unpack
  cp $HOME/Downloads/sprkkr6.3*.tgz ./sprkkr
  cd sprkkr
  tar -zxvf sprkkr6.3*.tgz
2) cp make.inc_example make.inc
3) kwrite make.inc
   ■ non parallel case(64bitの場合は左欄にあるWIEN2kを参考にするとよい)
   □ 32 bit type OS (Now, I do not try this case.)
      LIB=-L/opt/intel/Compiler/11.0/084/mkl/lib/32 -lmkl_blas95 -lmkl_lapack95 -lmkl_intel -lmkl_intel_thread -lmkl_core -lifcore -lguide -lpthread -lsvml
      INCLUDE = -I/usr/local/openmpi/include
      FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2  \
   -diag-disable remark ### for ifort
   □ 64 bit type OS  (Now, I do not try this case.)
      LIB=-L/opt/intel/Compiler/11.0/084/mkl/lib/em64t -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lifcore -lguide -lpthread -lsvml     
      INCLUDE = -I/usr/local/openmpi/include
      FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2  \
        -diag-disable remark ### for ifort
   □ Intel compiler version 2013 (64bit type) (Now, I do not try this case.)
      LIB=-L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
   -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 \
   -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
      INCLUDE = -I/usr/local/openmpi/include
      FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2  \ 
   -diag-disable remark ### for ifort
   □ gfortran ( success Fedora18 x84_64 Xfce )
     LIB=-L/usr/lib -llapack -lblas (Ubuntu11.04 case)
     LIB=-L/usr/lib64 -llapack -lblas (Fedora18 case)
     FFLAGS =  -O2
     INCLUDE= -I/usr/lib/openmpi/include (Ubuntu11.04 case)
     INCLUDE = -I/usr/local/openmpi/include (Fedora18 case)
     FC = gfortran -c $(FFLAGS) $(INCLUDE)
     LINK = gfortran $(FFLAGS) $(INCLUDE)
   ■ parallel case
   □ OpenMPI case (http://ebert.cup.uni-muenchen.de/index.php?option=com_remository&Itemid=4&func=startdown&id=155&lang=de )
   ・Intel compiler version 2013 (64bit type) ( success Fedora18 x86_64 Xfce, CentOS 6.4 x86_64 minimal Desktop, but I look like that SPRKKR6.3MPI on Fedora18 x86_64 Xfce stop calculation by mpi. under exam)
       LIB=-L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
   -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 \
   -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
       INCLUDE = -I/usr/local/openmpi/include
       FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2  \
   -diag-disable remark ### for ifort
       FC = mpif90 -c $(FFLAGS) $(INCLUDE)
       LINK = mpif90 $(FFLAGS) $(INCLUDE)   
    ・gfortran case (Now, I do not try this case.)
       LIB=-L/usr/lib -llapack -lblas (Ubuntu11.04 case)
       LIB=-L/usr/lib64 -llapack -lblas (Fedora18 case)
       FFLAGS =  -O2
       INCLUDE = -I/usr/lib/openmpi/include
       FC = mpif90.openmpi -c $(FFLAGS) $(INCLUDE)
       LINK = mpif90.openmpi $(FFLAGS) $(INCLUDE)
4) make scfmpi(single type: make scf )
   上記の作業で binary が作成される。PCが 4 core の場合は下記となる
    mpirun -np 4 kkrscf6.3MPI *.inp > OUTPUT
5) この他にもプログラムを作成することができる
   a) make all
     gen, scf, embgen, embscf が作成される
   b) make allmpi
     scfmpi, embscfmpi, specmpi が作成される
   c) Makefile を見ると一応下記のコマンドがある
     make genmpi, make embscfmpi, make chi,
    make opm, make opmmpi, make spec
※ 再度コンパイルする場合には、再度コンパイルする前に make clean を入力。

■ SPRKKR 6.3 (Intel compiler 2016)
1) unpack
   cp $HOME/Downloads/sprkkr6.3*.tgz ./sprkkr
   cd sprkkr
   tar -zxvf sprkkr6.3*.tgz
2) cp make.inc_example make.inc
3) kwrite make.inc
  ■ parallel case
  □ OpenMPI case (Dynamic link case)
    LIB =     ${MKLROOT}/lib/intel64/libmkl_blas95_lp64.a ${MKLROOT}/lib/intel64/libmkl_lapack95_lp64.a -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
    LIBMPI =   ${MKLROOT}/lib/intel64/libmkl_blas95_lp64.a ${MKLROOT}/lib/intel64/libmkl_lapack95_lp64.a -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lmkl_blacs_intelmpi_lp64 -lpthread -lm -ldl
    INCLUDE = -qopenmp -I${MKLROOT}/include/intel64/lp64 -I${MKLROOT}/include
    FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2 \
-diag-disable remark ### for ifort
    FC   = mpiifort -c $(FFLAGS) $(INCLUDE)
    LINK = mpiifort    $(FFLAGS) $(INCLUDE)
  □ OpenMPI case (Static link case)
    LIB =     ${MKLROOT}/lib/intel64/libmkl_blas95_lp64.a ${MKLROOT}/lib/intel64/libmkl_lapack95_lp64.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm -ldl
#LIB = $(LIB_MKL)
    LIBMPI =   ${MKLROOT}/lib/intel64/libmkl_blas95_lp64.a ${MKLROOT}/lib/intel64/libmkl_lapack95_lp64.a ${MKLROOT}/lib/intel64/libmkl_scalapack_lp64.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_blacs_intelmpi_lp64.a -Wl,--end-group -lpthread -lm -ldl
    INCLUDE = -qopenmp -I${MKLROOT}/include/intel64/lp64 -I${MKLROOT}/include
    FFLAGS = -O2 -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2 \
-diag-disable remark ### for ifort
    FC   = mpiifort -c $(FFLAGS) $(INCLUDE)
    LINK = mpiifort    $(FFLAGS) $(INCLUDE)
4) make scfmpi(single type: make scf )
  mpirun -np 4 kkrscf6.3MPI *.inp > OUTPUT
5) この他にもプログラムを作成することができる
  a) make all
    gen, scf, embgen, embscf が作成される
  b) make allmpi
    scfmpi, embscfmpi, specmpi が作成される
  c) Makefile を見ると一応下記のコマンドがある
    make genmpi, make embscfmpi, make chi
    make opm, make opmmpi, make spec
※ 再度コンパイルする場合には、再度コンパイルする前に make clean を入力。

* gitstamp.sh error case (expect English)
error: LANG=C date
correct: LANG=E date

Reference
file:///opt/intel/documentation_2016/en/mkl/common/mkl_link_line_advisor.htm
-----
Intel® Math Kernel Library (Intel® MKL) Link Line Advisor v4.6   
Select Intel® product:     Intel(R) Parallel Studio XE 2016
Select OS:     Linux*
Select usage model of Intel® Xeon Phi™ Coprocessor:     Automatic Ofload
Select compiler:     Intel(R) Fortran
Select architecture:     Intel(R) 64
Select dynamic or static linking: Static or Dynamic
Select interface layer:     LP64(32-bit integer)
Select threading layer:     OpenMP threading
Select OpenMP library:     Intel(R)(libiomp5)
Select cluster library:     Cluster PARDISO (BLACS required)
  ScaLAPACK (BLACS required)
  BLACS
Select MPI library:     Intel(R) MPI
Select the Fortran 95 interfaces:
  BLAS95
  LAPACK95
Link with Intel® MKL libraries explicitly:     check
-----

下記のHPにも利用方法が記述されている。
[1] http://olymp.cup.uni-muenchen.de/index.php?option=com_remository&Itemid=20&func=startdown&id=51&lang=en (終わりの方に xband の使い方が解説されている)
[2] http://olymp.cup.uni-muenchen.de/index.php?option=com_content&view=article&id=22%3Aexamples&catid=1&Itemid=7&lang=en
[3] http://olymp.cup.uni-muenchen.de/index.php?option=com_content&view=article&id=10&catid=4&Itemid=7&lang=en

■ SPRKKRの利用方法
□ xband 6.3 を用いた方法
※ 灰色になって入力できなくなった場合には、unlockのボタンを押すとよい。
setting
1) xband
  w_font_select で 0 font と表示される場合は、全て any にして、下の欄に表示される好きなフォンを選択して、accept を数回押してみるとよい。
2) SET PREFERENCES のPROG_PATH0 -default path で、SPRKKRの実行ファイルが入っているフォルダを指定

□ calculation
1) xband
2) DIRECTORIES で計算する系のフォルダを指定する
  A. select directory
  B. directry name に記入
  C. create new + chnage directry を押す
  D. close + create system を押すと CREATE SYSTEM になる
3) CREATE SYSTEM を選択( CIRECTORIES で close + create system を押すとここに移る)
  A. name of system-file でファイル名を入力
  B. Structure type か Space group のどちらかを入力
  C. set lattice parameter で a, b, c軸の格子定数を入力し、CONFIRMを押す
  D. Angstrom単位の場合は、convert を押して、bohr単位にする
  E. input OK---GO ON
  E. set up via Space Group で原子のサイトを選択する
  G. click line to specify occupation 各座標が書かれたラインを選択すると Specify occupation for site のパネルが出る
    ・ 各サイトの占有率が1の場合
    a) specify occupant で原子を選択する
    b) CLOSE
    ・ 各サイトの占有率が1でない場合 (CPA calculation case)
    a) number of occupants (atom types) on site
       同じサイトに占有する原子数を記述
    b) concentration of occupant で占有率を変える(こちらを先に全て指定する)
    c) 次に specify occupant で原子を選択する
    d) CLOSE
  H. suppress symmetry, set same R_WS for all spheres, adjust R_WS by scaling, (calculate R_WS + empty spheres の後に OK--RUN)、show structure を押す
  I. Visualizer で表示したいソフトを選択して、run visualizerを押す。
    (case.xcrysdenなどが出来る。XCrySDenなどで開いてみるとよい。例えば、unit cell repeated along primitive axes を押した後に XCrySDenを押す) -> CLOSE
  J. DONE - RETURN
4) SELECT / MODIFY
  A. select directory で 計算する系のフォルダを指定する
  B. 右にあるfile list (.sys)を選択する
  C. 更に右に case.pot がある場合はそれも選択する
  D. close
5) select and run program package
  A. SPR-KKRを選択
  B. select directroy で計算する系のフォルダを指定する
  C. system で create input を押す
  D. Create input file で SCFやDOS, XAS(EXPERT MODE)やEKREL( band dispersion )を選択し、"write inpfile quit" or "write+edit input quit"を押す。
 E. EXPERT MODE で SCF を再度選択するとSCFVXCで交換相関ポテンシャルを指定できるのでPBEにする。
  擬ギャップ系や半導体及び絶縁体である場合は、EXPERT MODE にして control で LLOYD を指定する。
  FP(Full Potential)計算にしたい場合は、EXPERT MODE で control でFULLPOT、SP-SRELを指定する(ASAからFP計算になる)。LDA+U計算の場合にはxbandのEXPERT MODEでLDA+Uを指定の後、case.inpを編集してMODEの欄に SP-SRELを書き加える。Scalar-relativistic(スカラー相対論) までがFPで計算可能である場合がある為(エラーの記述を良く読むと良い)。
    SCF calculation case: P NKTAB 50
    DOS calculation case: P NKTAB 200, NE 600, EMIN -0.2 -> 0.05, EMAX 1.0 -> 1.25, Im(E) 0.001
    LDA+U(EXPERT MODE) case: REL -> LDA+U
    (Niでは、SCF -> XASを選択するだけで、MCDの結果が出力された)
     ・次回からの計算では、どのポテンシャルファイルを用いるかを聞かれる。下記を選択する。
      CONTINUE and overwrite case.pot_new (SCF から DOS や XASの場合)
      CONTINUE and non overwrite case.pot (上記以外)
  LLOYD: http://www2.warwick.ac.uk/fac/sci/physics/news/events/kkr_greens/programme/minar.pdf 
  LLOYD: http://iopscience.iop.org/0953-8984/17/35/005/pdf/0953-8984_17_35_005.pdf
  F. select | edit input-file で case.inpを選択する
    SCF計算は case_SCF.inp, XAS計算はcase_XAS.inpになる
  G. SCF計算の場合は kkrscf6.30, DOSやCLXPSやXASやXMOの場合はkkrgen6.3.0,  EXAFSの場合はclugen6.3.0 Resistivityはkkrchi6.3.0を選択
     select program path でパスを指定し、create job file を選択する
  H. job-file menu が出来る
     edit で開いて source の前に # を書き入れる。次のcdの前にも # を入れる。 -np 8 を -np 4 に変更する。MPIMPIと二度続けて書かれている場合はMPIにする。そして、 > 以後の記述を > も含めて削除。
  H. job-file menu で run
  (上手く動かない場合は、コンソールやターミナルで、計算する系のフォルダに入り、case_SCF.job や case_XAS.job のコマンドを入力すればよい)
     出力ファイルは、case.job.out となる。
6) 上記5)から再び続け、DOSやXASを計算させる
7) select and run program package で PLOTを選択
  A. 左の欄から計算した系のファイルを選択する
  B. 右の欄で計算したいファイルを選択する
  C. 最も右の欄に結果をプロットできるファイルが出来る
  xmgrace がある場合は、図が表示される

※ NKTAB gives density of k-points
※ For 2D systems take care of slow convergence
  use smaller SCFMIX and MIXRHO.

■ Important information
SPRKKR calculation : spin-polarized calculation (default)
NREL = non-relativistic mode
SREL = scalar-relativistic mode
SP-REL = spin-polarized scalar-relativistic mode
REL = relativistic mode (default)

■ Create input file (EXPERT MODE)
SCF case
TASK: SCF
SCFVXC: PBE
Hamiltonian: REL -> LDA+U で AMF or AALのどちらかを選択する。edit で MODEに SP-SREL を追加。
NKTAB: 50
CONTROL: FULPOT, LLOYD (擬ギャップ系、半導体、絶縁体の場合にチェックを入れる)
NE: 600 (調査中、EFが気になる場合)
※ AMFだとWIEN2kを用いた論文で報告されているUを用いてもそれほど変な値が出力されないので、AMFがおススメである。

E-k relation case
TASK: EKREL
KPATH 4 (= Gammpa -> X point )
NE: 200
NK: 50

E-k relation (Bloch spectral function) case
TASK: BLOCHSF
KPATH 4 (= Gammpa -> X point )
EMIN: 0.05
EMAX: 1.25
NE: 200
NK: 50

E-k relation (Bloch spectral function) case (2D MAP)
k-k-plot: select
TASK: BLOCHSF
EMIN: 0.05
EMAX: 1.25
NK1:260
NK2: 260

DOS case ( no search EF case)
TASK: DOS
NE: 600 (私の記憶だとWIEN2kではだいたい 0.027 eV 程度の刻みになっている。600だと近い値になる)
EMIN: 0.05
EMAX: 1.25
Im(E): 0.001 (0.0003 だと恐らくWIEN2kの結果に近づくと思う。調査中)
NKTAB: 250
OUTPUT: WRKAPDOS, WRPOLAR
※ EXPERT MODE では LDA+U を指定できるが、LDA+Uを指定(記述)しなくても結果は変わらない。

・BLOCHSF (KPATH = 4, Gamma - X point), kkrgen6.3MPI
MODE SP-SREL
          LLOYD
TAU BZINT= POINTS NKTAB= 250
ENERGY GRID={3} NE={5000}
         ImE=0.001 Ry  EMIN=0.05  EMAX=1.25 Ry
TASK BSF
         NK = 60 KPATH = 4
         FULLPOT

データは、ps の方が綺麗に描画されるかもしれない。

CLXPS case
TASK: CLXPS
NKTAB: 250

VBXPS case
TASK: VBXPS

XAS(=XANES, EXAFS) case
TASK: XAS
NE: 600 (XANES)
EMAX: 1.5 (XANES)
Im(E): 0.001 (XANES)

XMO (resonant X-ray magneto-optical properties) case
TASK: XMO

■ MEMO
SCF: kkrscf6.3MPI
DOS, CLXPS, VBXPS, XAS, XMO: kkrgen6.3MPI
SIGMA(=resistivity): kkrchi6.3MPI
XANES: kkrgen6.3MPI
EXAFS: clugen6.3MPI

■ Version 6.3
XC potential: MJW, VWN, VBH, LDA+U, (PBE ?)
ASA ( while Full Potential versuib is in the near future)
Ref.: http://www2.warwick.ac.uk/fac/sci/physics/news/events/kkr_greens/programme/minar.pdf 

■ subroutine
kkrmain.f
specmain.f
mod_calcmode.f
excmjw.f
excvwn.f
excvbh.f
excpbe.f
init_mod_rmesh_fullpot.f
init_mod_types_fullpot.f
spec_potfull_spkkr.f

■ convert xmgrace to gnuplot (python script)
arg2gpt -f grace_file.arg
Ref.: http://www.larrucea.eu/agr2gpt-convert-xmgrace-gnuplot-mathplotlib/  
------------------------------------------------------------------------------
■ SPRKKR 5.4 ( Ubuntu 11.04で確認 )
1) download Foxit Reader : http://www.click-assist.com/blog/compare.php 
2) 下記 SPRKKR HPより LicenseファイルをダウンロードしFoxit J-Reader で開く
   http://olymp.cup.uni-muenchen.de/index.php?option=com_content&view=frontpage&Itemid=1&lang=en
3) 必要事項を記入し、編集→画像を追加→枠で囲って画像を挿入して、SAVE
4) License ファイルのpdfを下記HPを参考にして送る
   http://www.post.japanpost.jp/navi/main.html
5) H. Ebert 教授から SPR-KKRがあなたの研究に役立つかどうかを考察して頂けるので、簡潔な文章でどんな物質のどんな結果を得たいかを教えて欲しいとメールが送られてくることがある。丁寧に返答する。
6) Ph. D. だとMr. 扱いだという御話をある方から聞きました
   Ph. D の場合はアドヴァイザーのサインが追加で必要になる
7) web上で登録をするとメールにてコードが送られてくる

■ xband
1) mkdir SPRKKR
2) その中に xband_231209b.tar.gz を入れる
3) cd SPRKKR
4) tar zxvf xband*
5) .bashrc に下記を加える
  export XBANDPATH=$HOME/SPRKKR/xband
  export PATH=$PATH:$XBANDPATH: 
6) gfortranのコンパイルを用いている場合は下記のようにする。
  geometryのファイルでのmakefile:FC=ifort をFC=gfortran
  graphicのファイルでのmakefile:FC=ifort を FC=gfortran
  spheresのファイルでのmakefile:FC=ifort を FC=gfortran
  symmetryのファイルでのmakefile:FC=ifort を FC=gfortran
7) xband
※ 上手く動作しない場合は、Ubuntuの場合、下記のコマンドを入力してみる。
sudo apt-get install tk
 
■ LAM
1) http://www.lam-mpi.org/ , http://www.lam-mpi.org/7.1/download.php
2) tar zxvf lam-7.1.4.tar.gz
3) cd lam-7.1.4
4) コンパイラにより下記のように設定 
  ・gfortran case
     ./configure CC=gcc CXX=g++  FC=gfortran  --prefix=/usr/local/lam
  ifort case
    ./configure CC=icc CXX=icpc FC=ifort --prefix=/usr/local/lam
5) make
6) sudo (Ubuntu, Debian) or su (CentOS, Fedora)
7) make install

■ OpenMPI
OpenMPIは1.4.5 シリーズのヴァージョンを用いると良いだろう。 
・私の場合、Ubuntu12.04 x84.64では上手くインストール出来なかった。
・CentOS 6.4 x84_64,  minimal Desktop ではインストールに成功
・Fedora18 x84_64, Xfce ではインストールに成功
□ インストール
1) http://www.open-mpi.org/ 
2) tar zxvf openmpi-1.4.5.tar.gz
3) cd openmpi-1.4.5
4) コンパイラにより下記のように設定 
  ・gfortran case
     ./configure -prefix=/usr/local/openmpi CXX=g++ CC=gcc FC=gfortran F90=gfortran F77=gfortran
  ifort case
     ./configure -prefix=/usr/local/openmpi CXX=icpc CC=icc FC=ifort F90=ifort F77=ifort
5) make
6) sudo (Ubuntu, Debian) or su (CentOS, Fedora)
7) make all install
□ 環境設定 (  .bashrc in home and root directory )
# OpenMPI environmental setting
export MPIROOT=/usr/local/openmpi
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH
export MANPATH=$MPIROOT/share/man:$MANPATH

■ gfortran type lapack and blas
Ubuntu 11.04
1) sudo apt-get install blas-dev
2) sudo apt-get install lapack-dev

Fedora18
1) yum install blas
2) yum install lapack
3) yum install lapack-devel

■ SPRKKR ( unsuccess gfortran )
0) copy PUB5.4_091223_10h59.tar.gz to /home/SPRKKR
1) unpack
  gunzip zxvf PUB5.4_091223_10h59.tar.gz
  tar -xvf PUB5.4_091223_10h59.tar
2) rewrite make.inc
   non parallel case(64bitの場合は左欄にあるWIEN2kを参考にするとよい)
   32 bit type OS
     LIB=-L/opt/intel/Compiler/11.0/084/mkl/lib/32 -lmkl_blas95 -lmkl_lapack95 -lmkl_intel -lmkl_intel_thread -lmkl_core -lifcore -lguide -lpthread -lsvml
   64 bit type OS  (Now, I do not try this case.)
     LIB=-L/opt/intel/Compiler/11.0/084/mkl/lib/em64t -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lifcore -lguide -lpthread -lsvml     
     INCLUDE = -I/usr/local/openmpi/include
     FFLAGS =  -assume byterecl   -assume 2underscores -O2 \

  -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2
   Intel compiler version 2013 (64bit type) ( unsuccess Fedora18 Xfce, CentOS6.4 )
     LIB=-L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
  -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 \
  -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
     INCLUDE = -I/usr/local/openmpi/include
     FFLAGS =  -assume byterecl   -assume 2underscores -O2 \
  -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2
   parallel case
   LAM case  ( success: Ubuntu 11.04 32bit)
    LIB = -L/opt/intel/Compiler/11.1/080/mkl/lib/32 -lmkl_intel_lapack -lmkl_intel_blas -lmkl_intel -lmkl_intel_thread -lmkl_core -lguide -lpthread
    LIBMPI = -L/usr/local/lam/lib -llammpi++ -llammpio -llamf77mpi -lmpi -llam
    INCLUDE = -I/usr/local/lam/include
    FC = /usr/local/lam/bin/mpif77 -c $(FFLAGS) $(INCLUDE)
    LINK = /usr/local/lam/bin/mpif77 $(FFLAGS) $(INCLUDE)
   OpenMPI case (http://ebert.cup.uni-muenchen.de/index.php?option=com_remository&Itemid=4&func=startdown&id=155&lang=de )
   Intel compiler version 2013 (64bit type) ( unsuccess Fedora18 Xfce, CentOS6.4)
      LIB=-L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
  -lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_intel_lp64 \
  -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm
      INCLUDE = -I/usr/local/openmpi/include
      FFLAGS =  -assume byterecl   -assume 2underscores -O2 \
  -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2
      FC = mpif90 -c $(FFLAGS) $(INCLUDE)
      LINK = mpif90 $(FFLAGS) $(INCLUDE)    
   ・gfortran case (Now, I do not try gfortran.) ( unsuccess Fedora18 Xfce )
      LIB=-L/usr/lib -llapack -lblas (Ubuntu11.04 case)
      LIB=-L/usr/lib64 -llapack -lblas (Fedora18 case)

      FFLAGS =  -assume byterecl   -assume 2underscores -O2
      INCLUDE = -I/usr/lib/openmpi/include
      FC = mpif90.openmpi -c $(FFLAGS) $(INCLUDE)
      LINK = mpif90.openmpi $(FFLAGS) $(INCLUDE)
3) make scfmpi(並列化しない場合は、make scf)
  上記の作業で binary が作成される。PCが 4 core の場合は下記となる
   mpirun -np 4 kkrscf5.4MPI INPUT>OUTPUT
4) この他にもプログラムを作成することができる
  a) make all
    gen, scf, embgen, embscf が作成される
  b) make allmpi
    scfmpi, embscfmpi, specmpi が作成される
  c) Makefile を見ると一応下記のコマンドがある
    make genmpi, make embscfmpi, make chi,
    make opm, make opmmpi, make spec
※ 再度コンパイルする場合には、再度コンパイルする前に make clean を入力。

■ SPRKKRの利用方法(編集中)
□  xband 5.3 を用いた方法
灰色になって入力できなくなった場合には、unlockのボタンを押すとよい。
1) cd band
2) xband
  w_font_select で 0 font と表示される場合は、全て any にして、下の欄に表示される好きなフォンを選択して、accept を数回押してみるとよい。
3) SET PREFERENCES のPROG_PATH0 -default path で、 SPRKKRの実行ファイルが入っているフォルダを指定
4) DIRECTORIES で計算する系のフォルダを指定する
  A. directry name に記入
  B. create new + chnage directry を押す
  C. close + create system を押すと CREATE SYSTEM になる
5) CREATE SYSTEM を選択( CIRECTORIES で close + create system を押すとここに移る)
  A. name of system-file でファイル名を入力
  B. Structure type か Space group のどちらかを入力
  C. set lattice parameter で a, b, c軸の格子定数を入力し、CONFIRMを押す
  D. Angstrom単位の場合は、convert を押して、bohr単位にする
  E. input OK---GO ON
  F. set up via Space Group で原子のサイトを選択する
  G. 各座標が書かれたラインを選択すると Specify occupation for site のパネルが出るので、specify occupant で原子を選択する
  H. suppress symmetry, set same R_WS for all spheres, adjust R_WS by scaling, (calculate R_WS + empty spheres)、show structure を押す
  I. Visualizer で表示したいソフトの選択をして、run visualizerを押す
      (case.xcrysdenなどが出来る。XCrySDenなどで開いてみるとよい)
  J. DONE - RETURN
6) SELECT / MODIFY 
    A. select directory で 計算する系のフォルダを指定する
    B. 右にあるfile list (.sys)を選択する
    C. 更に右にcase.pop (case.pot ?)がある場合はそれも選択する
    D. close
7) select and run program package
  A. SPR-KKRを選択
  B. select directroy で計算する系のフォルダを指定する
  C. system で、create input を押す
  D. Create input file で SCFやDOS, XAS(EXPERT MODEを押す, EKREL( band dispersion )を選択し、write inpfile quit を押す。
      (Niでは、XASを選択するだけで、MCDの結果が出力された)
  E. select | edit input-file で case.inpを選択する
      SCF計算は case_SCF.inp, XAS計算はcase_XAS.inpになる
  F. SCF計算の場合は kkrscf, DOSやXASの場合はkkrgenを選択
      select program path でパスを指定し、create job file を選択する
  G. job-file menu が出来る
  H. job-file menu で run
      (上手く動かない場合は、コンソールやターミナルで、計算する系のフォルダに入り、case_SCF.job や case_XAS.job のコマンドを入力すればよい)
8) SCF計算が無事に済むと、SCF - cycle converged !!!!!!! と表示される
9) SCF計算が済んだら、上記6)から再び続け、DOSやXASを計算させる
     ファイルを見て case.pot_new と case.pot が同じかをチェック。違っていれば、mv case.pot_new case.pot とすればよい。(5.4版はどうかは確認していない)xband では files を押し、case.pot_new を選んで、move to の右を case.pot にして move を押す。
10)  select and run program package で SPR-KKR を選んでいるときに、右側にある plot を押す。または、close した後に select and run program package で PLOTを選択
   A. 左の欄から計算した系のファイルを選択する
   B. 右の欄で計算したいファイルを選択する
   C. 最も右の欄に結果をプロットできるファイルが出来る
     xmgrace (または grace)がある場合は、図が表示される
11) SCF → DOS まで終了したら、SPR-KKRの画面そのままで system を選択して create input を押せば新たな入力ファイルが作れる( XASなどで各原子を計算させるのに便利である)。また、右側にある plot を押せば結果の表示も楽になる。
12) その他の使い方

もし、SPring-8 BL47XUの職員になれた方は、Dr. Gerhard H. Fecher に相談してみて下さい。Dr. Gerhard H. Fecher がSPRKKRに詳しいと H. Ebert 教授が言っておりました。調べてみると下記のHPの方のようです(WIEN2kでのオプションを解説されていた方で二重に驚きます)。
http://www.ghfecher.de/index.html
------------------------------------------------------------------------------
■ garce install (CentOS 6.4)
http://davidwen.blogspot.jp/2013/05/how-to-install-heartbeat-on-centos-64.html
------------------------------------------------------------------------------
■ garce set up
1) download garce : http://plasma-gate.weizmann.ac.il/Grace/
2) tar zxvf grace-5.1.9.tar.gz
3) cd grace-5.1.9
4) ./configure
5) make
6) sudo make install
7) make links
7) export PATH=$PATH:/usr/local/grace/bin
8) bash
------------------------------------------------------------------------------
xmgr set up
1) download garce : http://plasma-gate.weizmann.ac.il/Xmgr/
2) tar zxvf xmgr-4.1.2.tar.gz
3) cd xmgr*
4) ./configure
5) make
6) sudo make install
7) export PATH=$PATH:/usr/local/xmgr/bin
8) bash
------------------------------------------------------------------------------
■ WIEN2kでのXMCDの計算

 SOC の計算
1. Perform spin-polarized calc.?  で YES を選択。
  (私の場合は、 Expert の下にある select spin-polarized calculation にチェックを入れて、use X k-points in full BZ (default: 1000)の左の欄にk点を入力して、下にあるCHECK BATCH VALUES を押して、再度 CHECK BATCH VALUES を押して、View STDOUT を押して、 error や warning がなければ下記の2に進んでいる)
2. run SCF で spinorbit にチェックを入れて、start SCF cycle を押す。
3. case.inso で NX を 0 に置き換えて、NX1の行を削除(XMCDはNXの入力には対応していない)
4. case.in1 で 一番下の右から二番目の数値を 4.5 にする。
5. run SCF で再度 spinorbit にチェックを入れて、start SCF cycle で計算。
※ case.inso の入力をもう一度やり直したい場合は、Utiles にある initso_lapw を押す。

□ lcore の計算
1. Files での input files を押して、case.inc を選択すると、NUMBER OF ORBITALS と書かれた行がある。その行の最後の数値の後にスペースを一つ入れてその後に 1 を記述する。
2. single prog. を押して、SCF Programs にあるlcore にチェックを入れて、Execute を押す(case.corewfup が作成される)。
3. single prog. を押して、SCF Programs にあるlcore にチェックを入れて、Options にある spin down にチェックを入れて、Execute を押す(case.corewfdn が作成される)。

□ OPTIC の計算
1. Tasks にある OPTIC を選択する。
2. case.inop で 2行目の後に、新しい行を作り、WIEN2kのuserguide にあるように XMCD 原子の番号(StrucGen や DOSと同じ)、そして、計算したいedge(K, L1, L23, M1, M23, or M45) を記入する。これらは空白も入れて6文字ずつに区切る。
3. number of choices のある行の数値に、下にあるChoicesから欲しい情報の数を入力する。
4. number of choices で入力した数だけ [ 1 Re xx ] とある行をコピー&ペーストして、似た様式で欲しい情報の番号と名称を書き入れていく。
5. x optic -up を押す。
6. case.injoint で 3行目の後に、新しい行を4つ作る。
7. 新しく作った1行目の一番左に、XMCDを記述する。
8. Files の SCF files から case.scfcup を選び、遷移させる内殻のエネルギーの値を目盛っておく。
9. 新しく作った2行目に、遷移させる内殻のエネルギーの値よりも少しだけ広い値を入力する。
10. userguide にあるように、3行目と4行目はそれぞれ1.6 0.6 と 0.1 を入力しておけば良いだろう。
11. x joint -up を押す。
  ( version 11 だと NiO では、ここで error が出て終了)
12. 同様に Spin DOWN でも行う。
13. addjoint-updn_lapw を押す。
  ( version 12 では、ここまで進み、結果が case.broad1, case.broad2, case.raw1, case.raw2 に出力される)
14. edit case.inkram を押す。
15. x kram を押す。
  ( version 12 では、ここで error が出て終了)
16. opticplot を押す。
※ NBvalMAX は case.in2 の NE よりも2倍ほど多い値を入力してみたが無理であった。
------------------------------------------------------------------------------
■ AkaiKKRでのK-edge XMCDの計算
1. calctyp を go で、reltyp をsralsにして、input_go などの名称でSAVE
2. specx < in/input_go
3. calctyp の go を mcd に書き換えて、input_mcd などの名称で SAVE
4. source/cemesr.f での data ref/0.75d0/ を data ref/0.0d0/ に書き換えて SAVEし、 make と入力してコンパイルする。*1
5. specx < in/input_mcd > out/output_mcd
6. 得られたoutput_mcd の中で xmd of Component という行が出てくる。各Componentは入力したinput_mcd での順に出力される。
  各列は、エネルギー、吸収、吸収(up)、吸収(down) の順番で出力される。
7. 必要なComponentのデータをコピー&ペーストして、xmd_inputという名称でSAVE
8. xmdcnv を Akai Group から頂いている場合は xmdcnv と Terminal で入力して、最初に xmd_input 、次に xmd_output と入力する。*2
9. gnuplot と入力して、gnuplot を起動させる。
10. plot "xmd_output" と入力すると結果が出力される。
11. 終了させる場合はウインドウを閉じて、Terminal 上で quit と入力する。
12. cemesr.f の data ref/0.0d0/ を data ref/0.75d0/ に戻してSAVEし、make と入力してコンパイルする。
*1. ref は 内殻から非占有準位までの範囲を指定するewidth の 内殻からEFまでの比率を指定する。refがディフォルトの0.75だと、内殻からEFまでは ewidth * ref となる。ref を0 にすると EFから非占有準位までの範囲がewidthになる。
*2. gfortran -o xmdcnv xmdcnv.f と Terminal 上で入力すると xmdcnv という名称の実行ファイルが作成される。xmdcnv はローレンチアンで得られた結果をブロードニングする。このプログラムは自作しても良い。
[1] http://www.ghfecher.de/Run_AKAI-KKR.pdf
------------------------------------------------------------------------------

■ arg2gpt
set up
1. chmod +x arg2gpt
2. su
3. yum install python-argparse

Usage
arg2gpt -f case_DOS.dos.agr

arg2gpt
------------------------------------------------------------------------------
#!/usr/bin/env python

#
# agr2gpt: (xm)grace to gnuplot or pylab translator
# Usage: ./agr2ppt -f grace_file.agr (-pl)
#
# By Julen Larrucea
# http://www.larrucea.eu
#  


import os, sys, argparse

version="0.1"

cwd=os.getcwd()+"/"

parser = argparse.ArgumentParser(description="""%s [options]\n\n Convert .agr (grace) files into gnuplot or pylab \n """)
parser.add_argument('-f','--file_name', help="Name of grace file", required=True)
parser.add_argument('-pl','--pylab', help="Plot using pylab (Mathplotlib)", required=False)
args = vars(parser.parse_args())
inpfile= args['file_name']


if "/" not in inpfile:
 inpfile=cwd+inpfile
print "Input file: "+inpfile
parse_xy="off"
all_data=[]
line_titles=[]
# Parse data from xmgrace file
for line in open(inpfile,"r"):
 # Plotting options
 if 'yaxis  label  "' in line:
  ylab=line.rstrip('\n').split()[3:]
  ylab=" ".join(ylab).strip('"')
 if 'xaxis  label  "' in line:
  xlab=line.rstrip('\n').split()[3:]
  xlab=" ".join(xlab).strip('"')
 if len(line.split()) > 2 and line.split()[2] == "legend":
  tmp_ti=line.rstrip('\n').split()[3:]
  line_titles.append(" ".join(tmp_ti).strip('"'))
# if len(line.split()) > 4 and line.split()[1]=="world":
#  x1,x2,y1,y2=line.split()[2].strip(","),line.split()[4].strip(","),line.split()[3].strip(","),line.split()[5].strip(",")
 if 'world xmin' in line:
  x1=line.split()[3]
 if 'world xmax' in line:
  x2=line.split()[3]
 if 'world ymin' in line:
  y1=line.split()[3]
 if 'world ymax' in line:
  y2=line.split()[3]
  print "max x: "+x1+", min x: "+x2
  print "max y: "+y1+", min y: "+y2

 # Get the points for each line
 if parse_xy=="on" and "&" in line:
  parse_xy="off"
  all_data.append(line_data)
 if parse_xy=="on":
  line_data.append([float(line.split()[0]),float(line.split()[1])])
 if "@type xy" in line:
  parse_xy="on"
  line_data=[]

#for i in all_data:
print "ylab: ",ylab
print "xlab: ",xlab
print "line_titles: ",line_titles


# drop raw data to enumerated files
outfiles=[]
for i in range(len(all_data)): #curve
 outdrop=open(inpfile+"."+str(i)+".dat","w")
 outfiles.append(inpfile+"."+str(i)+".dat")
 for j in range(len(all_data[i])): #data pair
  for k in range(len(all_data[i][j])): #data value
   print>>outdrop, all_data[i][j][k],
  print>>outdrop, ""
 outdrop.close()

# create the gnuplot input
outgnu=open(inpfile+".gnuplot","w")
print>>outgnu, "set ylab '", ylab,"'"
print>>outgnu, "set xlab'", xlab,"'"
plotstr="p ["+x1+":"+x2+"] ["+y1+":"+y2+"] "
for i in range(len(outfiles)):
 plotstr=plotstr+" '"+outfiles[i]+"'  u 1:2 title '"+line_titles[i]+"' w l,"
print>>outgnu, plotstr.rstrip(",")
outgnu.close()
# now, you can just run: gnuplot -persist filename.gnuplot


if args['file_name']:
  try:
   from pylab import *
   print "pylab imported"
  except:
   print " ### ERROR: pylab not found. "
   sys.exit()

if args['pylab']:
  for i in range(len(all_data)):
   plot(zip(*all_data[i])[0],zip(*all_data[i])[1],linewidth=1.0,label=line_titles[i])
  plt.xlabel(xlab)
  plt.ylabel(ylab)
  legend = legend(loc='upper center', shadow=True)
  plt.axis([float(x1),float(x2),float(y1),float(y2)])
  plt.grid(True)
  plt.rcParams.update({'font.size': 22})
  show()   


print "  Done  "
------------------------------------------------------------------------------

■ arg2eps
set up
1. chmod +x arg2eps
2. su
3. yum install python-argparse

Usage
arg2eps -f case_DOS.dos.agr

arg2eps
------------------------------------------------------------------------------
#!/usr/bin/env python

#
# agr2eps: (xm)grace to gnuplot (eps)
# Usage: ./agr2eps -f grace_file.agr
#
# By Julen Larrucea
# http://www.larrucea.eu
#  


import os, sys, argparse

version="0.1"

cwd=os.getcwd()+"/"

parser = argparse.ArgumentParser(description="""%s [options]\n\n Convert .agr (grace) files into gnuplot or pylab \n """)
parser.add_argument('-f','--file_name', help="Name of grace file", required=True)
parser.add_argument('-pl','--pylab', help="Plot using pylab (Mathplotlib)", required=False)
args = vars(parser.parse_args())
inpfile= args['file_name']


if "/" not in inpfile:
 inpfile=cwd+inpfile
print "Input file: "+inpfile

parse_xy="off"
all_data=[]
line_titles=[]
# Parse data from xmgrace file
for line in open(inpfile,"r"):
 # Plotting options
 if 'yaxis  label  "' in line:
  ylab=line.rstrip('\n').split()[3:]
  ylab=" ".join(ylab).strip('"')
 if 'xaxis  label  "' in line:
  xlab=line.rstrip('\n').split()[3:]
  xlab=" ".join(xlab).strip('"')
 if len(line.split()) > 2 and line.split()[2] == "legend":
  tmp_ti=line.rstrip('\n').split()[3:]
  line_titles.append(" ".join(tmp_ti).strip('"'))
# if len(line.split()) > 4 and line.split()[1]=="world":
#  x1,x2,y1,y2=line.split()[2].strip(","),line.split()[4].strip(","),line.split()[3].strip(","),line.split()[5].strip(",")
 if 'world xmin' in line:
  x1=line.split()[3]
 if 'world xmax' in line:
  x2=line.split()[3]
 if 'world ymin' in line:
  y1=line.split()[3]
 if 'world ymax' in line:
  y2=line.split()[3]
  print "max x: "+x1+", min x: "+x2
  print "max y: "+y1+", min y: "+y2
 # Get the points for each line
 if parse_xy=="on" and "&" in line:
  parse_xy="off"
  all_data.append(line_data)
 if parse_xy=="on":
  line_data.append([float(line.split()[0]),float(line.split()[1])])
 if "@type xy" in line:
  parse_xy="on"
  line_data=[]

#for i in all_data:
print "ylab: ",ylab
print "xlab: ",xlab
print "line_titles: ",line_titles

# drop raw data to enumerated files
outfiles=[]
for i in range(len(all_data)): #curve
 outdrop=open(inpfile+"."+str(i)+".dat","w")
 outfiles.append(inpfile+"."+str(i)+".dat")
 for j in range(len(all_data[i])): #data pair
  for k in range(len(all_data[i][j])): #data value
   print>>outdrop, all_data[i][j][k],
  print>>outdrop, ""
 outdrop.close()

# create the gnuplot input
outgnu=open(inpfile+".gnuplot","w")
# gnuplot setting
print>>outgnu, "#!/bin/csh -f"
#print>>outgnu, "#!/bin/bash -f"
#print>>outgnu, "#!/usr/bin/gnuplot -persist"
print>>outgnu, "set file=`pwd`"
print>>outgnu, "set filename = $file:t"
#print>>outgnu, "set psformat = '.ps'"
print>>outgnu, "set epsformat = '.eps'"
print>>outgnu, "gnuplot -persist << EOF"
print>>outgnu, "set title '$filename'"
#print>>outgnu, "set size 0.7,1.0"
print>>outgnu, "set xr [*:*]"
print>>outgnu, "set xl 'Energy / eV'"
print>>outgnu, "set yr [:]"
print>>outgnu, "set yl 'Density of States / eV'"
print>>outgnu, "set yzeroaxis lt 1 lw 2 lc rgb 'black'"
#print>>outgnu, "set key box left top"
print>>outgnu, "set key left top "
#
#print>>outgnu, "set ylab'", ylab,"'"
#print>>outgnu, "set xlab'", xlab,"'"
#plotstr="p ["+x1+":"+x2+"] ["+y1+":"+y2+"] "
plotstr="plot"
for i in range(len(outfiles)):
 if i < len(outfiles)/2 :
   plotstr=plotstr+" '"+outfiles[i]+"'  u 1:2 title '"+line_titles[i]+"' w l,"
 else:
   plotstr=plotstr+" '"+outfiles[i]+"'  u 1:(\$2*-1) title '"+line_titles[i]+"' w l,"
print>>outgnu, plotstr.rstrip(",")
#
# gnuplot (eps)
print>>outgnu, "set size 1.5,2.1"
print>>outgnu, "set xl '{/=30 Energy / eV}'"
print>>outgnu, "set yl '{/=30 Density of States / eV}'"
print>>outgnu, "set terminal postscript eps color enhanced 'Arial' 30"
#print>>outgnu, "set out '$filename$psformat'"
print>>outgnu, "set out '$filename$epsformat'"
#print>>outgnu, "set out 'plot.eps'"
print>>outgnu, "replot"
print>>outgnu, "set terminal x11"
outgnu.close()
# now, you can just run: gnuplot -persist filename.gnuplot

if args['file_name']:
  try:
   from pylab import *
   print "pylab imported"
  except:
   print " ### ERROR: pylab not found. "
   sys.exit()

if args['pylab']:
  for i in range(len(all_data)):
   plot(zip(*all_data[i])[0],zip(*all_data[i])[1],linewidth=1.0,label=line_titles[i])
  plt.xlabel(xlab)
  plt.ylabel(ylab)
  legend = legend(loc='upper center', shadow=True)
  plt.axis([float(x1),float(x2),float(y1),float(y2)])
  plt.grid(True)
  plt.rcParams.update({'font.size': 22})
  show()   


print "  Done  "
------------------------------------------------------------------------------
QRコード
携帯用QRコード
アクセス数
ページビュー数
[無料でホームページを作成] [通報・削除依頼]