cshスクリプトで配列の最大値と最小値

AkaiKKRでコバルトのc/a その2ではcshのシェルスクリプトの中で、配列の中の最大値と最小値を探す方法が分からないので、常に昇順または降順に並んでいると仮定してスクリプトを書きました。

今回は、その点の補足として awk を使った配列の中で最大値と最小値を探すスクリプトを書きました。

#!/bin/csh -f

set LIST=( 1.2 3.00 4.3 2.1 1 3.2 )
set MAX=${LIST[1]}
set MIN=${LIST[1]}

foreach NUM ( ${LIST} )
set MAX=`echo ${NUM} ${MAX} | awk '{if ($1>=$2) print $1; else print $2}'`
set MIN=`echo ${NUM} ${MIN} | awk '{if ($1<=$2) print $1; else print $2}'`
end

echo ${MAX} ${MIN}


...たぶんもっとシンプルな回答があるのだろうとは思いますが。

関連エントリ




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: シェルスクリプト awk 

AkaiKKRの.infoファイルから情報を取り出す

AkaiKKR(machikaneyama)は、その計算結果のうち「全エネルギー」と「磁気モーメント」の二つを格子定数aとともに.infoファイルに出力します。これらの二つの値をtail, sed, awkの3つの命令を利用して、上手に取り出す方法を知っていれば、結果の解析を行うためのシェルスクリプトが作れます。

例えばcshスクリプトでdata/fe.infoの最後から2行目の全エネルギーをENEという変数に代入するには以下のようにします。

set ENE=`tail -n 2 data/fe.info | sed '$d' | awk '{print $2}'`



AkaiKKRの.infoファイル


AkaiKKR(machikaneyama)は、その実行ファイルであるspecxの実行が終了する度にデータディレクトリの.infoファイルの末尾に「格子定数a」「全エネルギー」「磁気モーメント」の3つの値が出力されます。標準出力に出力される(悪く言えば雑多な)情報に比べて、最低限の重要な値だけが出力されるので便利ではあります。

以下に示すのは、AkaiKKRでテスト計算で行った鉄の計算の後のdata/fe.infoの内容です。

       5.2700       -2522.8222938   2.17548
5.2700 -2522.8222950 2.17547
5.2700 -2517.8475965 0.30790

ここで.infoへの出力はspecxの実行終了ごとに毎回行われることに注意が必要です。例えばAkaiKKRでテスト計算の場合ではdata/fe.infoに保存された3行3列の数字のうちで真ん中の2列目だけが意味を持つ値でした。
今回は、このような.infoファイルの中から、指定した行だけを出力するのに便利なコマンドについてまとめます。実行にはsedawkを利用するので、これらをインストールしておく必要があります。

最後の行だけを取り出す


tail -n 1 data/fe.info

tailコマンドは、ファイルの後ろの方のデータを読みだすことができます。tail -n 1とすれば、指定されたファイルの最後の1行だけを取り出すことができます。収束させるため複数回go計算を行うと、一番最後の行が最新の(つまり収束した)値となっているはずです。

最後から2行目だけを取り出す


tail -n 2 data/fe.info | sed '$d'

tailコマンドはtail -n 2 data/fe.infoとすれば後ろから2行分、tail -n 3 data/fe.infoとすれば後ろから3行分読み出します。後ろから2行分を取り出した後、sedを利用して最後の行を削除すれば最後から2行目だけが残ります。
AkaiKKRでテスト計算の様に、go計算を行った後でdos計算を行うなど、最後の行が不要なデータのときには、このようにして最後から2行目だけを取り出します。

最後から3行目だけを取り出す


tail -n 3 data/fe.info | sed '$d' | sed '$d'

後ろから3行分を取り出した後、最後の行を削除する工程を2回行えば、最後から3行目だけが残ります。
go計算を収束させた後、dos計算とspc計算の両方を行った場合などは、後ろの2行が不要データで後ろから3行目が必要なデータという事になります。同様な方法で後ろから4行目、5行目を取り出すこともできるでしょう。はっきり言って力技です。おそらくもっとスマートな方法があると思います、誰か教えてください。

最後の行の全エネルギーを取り出す


tail -n 1 data/fe.info | awk '{print $2}'

ここからは、列を取り出す方法です。.infoファイルの中で全エネルギーは2列目です。tailコマンドで最後の行を取り出した後、awkをつかって2列目を取り出します。

最後の行の磁気モーメントを取り出す


tail -n 1 data/fe.info | awk '{print $3}'

同様に3列目を取り出せば、磁気モーメントです。また1列目を取り出せば、格子定数aを読みだすことができます(格子定数を読みだすケースはまれと思いますが)。

最後から2行目の全エネルギーを取り出す


tail -n 2 data/fe.info | sed '$d' | awk '{print $2}'

ここからは単なる組み合わせです。
tailで最後から2行分を取り出した後、sedで最後の行を削除することによって、最後から2行目だけを取り出し、awkをつかって2列目だけを取り出します。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama シェルスクリプト 

AkaiKKRでγ-Mnの反強磁性

AkaiKKR(machikaneyama)を用いて、L10型構造のようにスピンが配置されている面心立方構造(fcc)のマンガン(γ-Mn)の全エネルギーと局所モーメントを計算しました。
AkaiKKRで反強磁性クロムAkaiKKRで反強磁性fcc鉄のときとは異なり、ちゃんと反強磁性状態がエネルギー的に安定であるという結果が得られました。

001_201506221048228b2.png 002_20150622104821ee3.png



γ-Mnの反強磁性


マンガンは室温で体心立方構造(bcc)に近い結晶構造を持つ複雑な反強磁性体です(α-Mn)。温度を上げていくとβ-Mnへ相転移しますが、この結晶構造もやはり複雑なものです。
しかしながら1095℃以上では、単純なfcc構造を持つ単純な反強磁性体に相転移します(γ-Mn)。このときの局所磁気モーメントはAkaiKKRで反強磁性fcc鉄で考えた第1種反強磁性と同じくL10型の配置をしています。

001_20150616101545812.png

Fig.1: fcc鉄の第一種反強磁性。異なる向きのスピンをもつ原子がL10型構造のように配置されている。FCC鉄の磁気構造より。γ-Mnも同様の磁気構造を持つ。


入力ファイルとシェルスクリプト


基本的にはAkaiKKRで反強磁性fcc鉄で行っているものと同じ計算です。入力ファイルのテンプレートとシェルスクリプトを以下に示します。


#!/bin/csh -f

## *** フォルダ構造 ***
## fccMn/─┬─analysis/
## ├─in/─L10fccMn_FMG.in
## ├─out/
## ├─data/
## ├─template/┬─L10fccMn_AFM_Template.in
## │ ├─L10fccMn_NMG_Template.in
## │ └─L10fccMn_FMG_Template.in
## ├─L10fccMn
## ├─L10fccMn.sh
## └─L10fccMn-Result.sh

## *** 格子定数のリスト ***
set ABOHR_LIST=( 7.4 7.3 7.2 7.1 7.0 6.9 6.8 6.7 6.6 6.5 6.4 6.3 6.2 6.1 6.0 )

## *** プロジェクト名 ***
set PROJECT="L10fccMn"
## ポテンシャルファイル名
set POTENTIAL=${PROJECT}

## *** 強磁性初期ポテンシャルの作成 ***
if ( ! -e data/${POTENTIAL}_AFM ) then
specx < in/${PROJECT}_FMG.in > out/${PROJECT}_FMG.out
fmg < ${PROJECT}
endif

## *** 繰り返し計算 ***
foreach ABOHR ( ${ABOHR_LIST} )
## 強磁性
if ( ! -e data/${POTENTIAL}_FMG_${ABOHR} ) then
if ( -e data/${POTENTIAL}_FMG ) then
cp data/${POTENTIAL}_FMG data/${POTENTIAL}_FMG_${ABOHR}
endif
endif
sed 's/'ABOHR'/'${ABOHR}'/g' template/${PROJECT}_FMG_Template.in > in/${PROJECT}_FMG_${ABOHR}.in
specx < in/${PROJECT}_FMG_${ABOHR}.in > out/${PROJECT}_FMG_${ABOHR}.out
cp data/${POTENTIAL}_FMG_${ABOHR} data/${POTENTIAL}_FMG

## 反強磁性
if ( ! -e data/${POTENTIAL}_AFM_${ABOHR} ) then
if ( -e data/${POTENTIAL}_AFM ) then
cp data/${POTENTIAL}_AFM data/${POTENTIAL}_AFM_${ABOHR}
endif
endif
sed 's/'ABOHR'/'${ABOHR}'/g' template/${PROJECT}_AFM_Template.in > in/${PROJECT}_AFM_${ABOHR}.in
specx < in/${PROJECT}_AFM_${ABOHR}.in > out/${PROJECT}_AFM_${ABOHR}.out
cp data/${POTENTIAL}_AFM_${ABOHR} data/${POTENTIAL}_AFM

## 非磁性
if ( ! -e data/${POTENTIAL}_NMG_${ABOHR} ) then
if ( -e data/${POTENTIAL}_NMG ) then
cp data/${POTENTIAL}_NMG data/${POTENTIAL}_NMG_${ABOHR}
endif
endif
sed 's/'ABOHR'/'${ABOHR}'/g' template/${PROJECT}_NMG_Template.in > in/${PROJECT}_NMG_${ABOHR}.in
specx < in/${PROJECT}_NMG_${ABOHR}.in > out/${PROJECT}_NMG_${ABOHR}.out
cp data/${POTENTIAL}_NMG_${ABOHR} data/${POTENTIAL}_NMG
end


結果と議論


以下に計算した全エネルギーと局所モーメントを示します。


001_201506221048228b2.png
Fig.2: 全エネルギー

002_20150622104821ee3.png
Fig.3: 局所磁気モーメント


反強磁性状態が最安定になりました。
AkaiKKRで反強磁性クロムAkaiKKRで反強磁性fcc鉄のときには、複雑な反強磁性の代わりとして、単純な反強磁性の計算を行いました。
これに対して、今回のγ-Mnは本当に単純な反強磁性が実験的にわかっている系だけあって、第一原理計算からもこのことが確認できました。

関連エントリ




参考URL




付録


このエントリで使用したAkaiKKR関連のファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama KKR 反強磁性 強磁性 シェルスクリプト 

AkaiKKRでL12構造Ni3Mnの格子定数

AkaiKKRを用いてL12構造のNi3Mnの全エネルギーを格子定数を変化させながら計算しました。

001_2015062210034936e.png

Fig.1: L12構造のNi3Mnの結晶構造(VESTAにより描画)。面心位置(グレー)がニッケル、頂点位置(紫)がマンガン。



L12構造Ni3Mn


Ni3MnはL12構造を取る強磁性金属で、格子定数はa=3.6Å程度です。
今回はAkaiKKR(machikaneyama)を用いて格子定数と全エネルギーの関係を調べます。

シェルスクリプトを用いて、入力ファイルのテンプレートから連続的にAkaiKKRの入力ファイルを作成することにします。以下に示すのが、入力ファイルのテンプレートです。

c-----------------------L12Ni3Mn-----------------------------
go data/L12Ni3Mn_ABOHR
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
sc ABOHR , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 2.0 sra gga91 mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 200 0.023
c------------------------------------------------------------
c ntyp
2
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Ni 1 1 0.0 2 28 100
Mn 1 1 0.0 2 25 100
c------------------------------------------------------------
c natm
4
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 Mn
0 1/2 1/2 Ni
1/2 0 1/2 Ni
1/2 1/2 0 Ni
c------------------------------------------------------------


これを以下のシェルスクリプトで連続的に実行させます。

#!/bin/csh -f

## *** フォルダ構造 ***
## Ni3Mn/─┬─analysis/
## ├─in/
## ├─out/
## ├─data/
## ├─template/─L12Ni3Mn_Template.in
## ├─L12Ni3Mn.sh
## └─L12Ni3Mn-Result.sh


## *** OpenMPの設定 ***
setenv OMP_STACKSIZE 20M
limit stacksize unlimited
setenv OMP_NUM_THREADS 4

## *** プロジェクト名 ***
set PROJECT="L12Ni3Mn"
## ポテンシャルファイル名
set POTENTIAL=${PROJECT}

## *** 格子定数のリスト ***
set ABOHR_LIST=( 7.4 7.3 7.2 7.1 7.0 6.9 6.8 6.7 6.6 6.5 6.4 6.3 6.2 6.1 6.0 )

## *** 繰り返し計算 ***
foreach ABOHR ( ${ABOHR_LIST} )
if ( ! -e data/${POTENTIAL}_${ABOHR} ) then ## ポテンシャルがなければコピー
if ( -e data/${POTENTIAL} ) then
cp data/${POTENTIAL} data/${POTENTIAL}_${ABOHR}
endif
endif
## 自己無撞着計算
sed 's/'ABOHR'/'${ABOHR}'/g' template/${PROJECT}_Template.in > in/${PROJECT}_${ABOHR}.in
specx < in/${PROJECT}_${ABOHR}.in > out/${PROJECT}_${ABOHR}.out
## 次回の初期ポテンシャルをコピー
cp data/${POTENTIAL}_${ABOHR} data/${POTENTIAL}
end


結果と議論


以下に計算結果を示します。


002_2015062210034930b.png
Fig.2: 格子定数と全エネルギーの関係

003_201506221003480e9.png
Fig.3: 格子定数と局所モーメントの関係


格子定数は a=6.8Bohr 程度とわかりました。1原子あたりの局所モーメントはニッケルよりもマンガンの方が大きく、全磁気モーメントのほとんどをマンガンがもっているような結果となりました。これがあってるのかは私は知りません。

関連エントリ




参考URL




付録


このエントリで使用したAkaiKKRの入力ファイルやシェルスクリプトを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama KKR 強磁性 シェルスクリプト 

AkaiKKRでBain機構 その2

AkaiKKRでBain機構 その1の続きとして、AkaiKKRを用いて体心正方構造(bct)をもとにして、体心立方構造(bcc)と面心立方構造(fcc)の鉄の全エネルギーをスピン分極を考慮した計算で比較しました。

003_20150622052259d9c.png 004_20150622052259ea3.png



Bainの機構とマフィンティン半径


AkaiKKRでBain機構 その1にも書きましたが、面心立方構造(fcc)と体心立方構造(bcc)は、体心正方構造(bct)のc/aが特別な値を取ったときに相当します。

001_201506220522417ce.jpg

Fig.1: bcc/fcc構造のBainの対応関係(Xie et al. (2008)より)


AkaiKKRでBain機構 その1では、bct構造のc/aを変化させる際にマフィンティン半径をどのようにすればいいかについて検討しました。
今回は、これをシェルスクリプトへ実装しAkaiKKR(machikaneyama)で全エネルギーを計算します。

入力ファイルのテンプレートとシェルスクリプト


シェルスクリプトを用いて、AkaiKKR用の入力ファイルのテンプレートから、格子定数を変化させながら入力ファイルを順次生成することを考えます。



以下に示すのが、入力ファイルのテンプレートです。

c----------------------Fe------------------------------------
go data/bctFe_OMEGA_ETA
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bct ABOHR , ETA , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 2.4 sra gga91 mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 200 0.023
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Fe 1 RMTA 0.0 2
26 100
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx(in the unit of a) atmtyp
0 0 0 Fe
c------------------------------------------------------------


結果と議論


以下に、計算結果の全エネルギーと磁気モーメントの絶対値を示します。
003_20150622052259d9c.png
Fig.2: 全エネルギー

004_20150622052259ea3.png
Fig.3: 磁気モーメント


全エネルギーにおいて、青く表示されている部分はエネルギー的に安定であることを意味します。一番青い部分はc/aが1で格子体積が約140Bohr3のところで、これは強磁性bcc鉄に相当します。次にc/a=√2≒1.41付近を体積の大きい方から順に(グラフ上方から順に)見ていくと、約140Bohr3付近で、エネルギーの極小が見られたのち、約120Bohr3でもう一度エネルギーの極小が見られます。これはAkaiKKRで反強磁性fcc鉄で格子定数を変化させながら計算したスピン分極計算と同じで、強磁性/非磁性転移に対応しています。

関連エントリ




参考URL




付録


このエントリで使用したAkaiKKR関連の入力ファイルやシェルスクリプトを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama KKR マフィンティン半径 シェルスクリプト 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoCOPアンプPICCPA強磁性常微分方程式モンテカルロ解析odeトランジスタ状態密度インターフェーススイッチング回路ecaljPDS5022DOS定電流半導体シェルスクリプト乱数レベルシフトHP6632Aブレッドボード分散関係温度解析R6452Aトランジスタ技術I2C可変抵抗反強磁性セミナー数値積分確率論偏微分方程式バンド構造非線形方程式ソルババンドギャップ絶縁熱設計シュミットトリガLEDA/Dコンバータ三端子レギュレータLM358ISO-I2CGW近似カオスフォトカプラマフィンティン半径TL431数値微分PC817Cアナログスイッチ直流動作点解析発振回路USBサーボカレントミラー74HC4053パラメトリック解析LDAbzqltyチョッパアンプ量子力学FFT2ちゃんねるアセンブラBSch開発環境電子負荷ブラべ格子イジング模型補間基本並進ベクトル標準ロジック単振り子キュリー温度繰り返しMaxima状態方程式失敗談相対論スピン軌道相互作用FETランダムウォーク熱伝導六方最密充填構造コバルトewidthTLP621GGAQSGW不規則合金位相図抵抗SMPcygwinラプラス方程式スレーターポーリング曲線gfortranスイッチト・キャパシタ詰め回路TLP552三角波格子比熱TLP521条件分岐LM555MCUNE555QNAPマントルテスタ過渡解析FXA-7020ZRダイヤモンドデータロガーガイガー管自動計測Writer509UPSシュレディンガー方程式ブラウン運動awk差し込みグラフ熱力学平均場近似仮想結晶近似VCAfsolve井戸型ポテンシャルVESTA起電力スーパーセルOpenMP第一原理計算ubuntu固有値問題L10構造OPA2277interp12SC1815fccウィグナーザイツ胞面心立方構造フィルタジバニャン方程式ヒストグラム確率論マテリアルデザインspecx.f等高線正規分布PGAフェルミ面非線型方程式ソルバ初期値固定スピンモーメントスワップ領域ルチル構造リジッドバンド模型edeltquantumESPRESSO岩塩構造BaOSIC二相共存ZnOウルツ鉱構造フォノンデバイ模型c/aノコギリ波全エネルギーFSMTeXgnuplotmultiplotハーフメタルCapSense半金属合金結晶磁気異方性Ubuntu文字列入出力TS-110TS-112疎行列Excel直流解析ヒストグラム円周率不規則局所モーメントトラックボールPC等価回路モデルパラメータ・モデルキーボードRealforce三次元マンデルブロ集合フラクタル化学反応重積分縮退日本語最小二乗法関数フィッティングGimpMAS830LHiLAPW熱拡散方程式両対数グラフナイキスト線図負帰還安定性陰解法Crank-Nicolson法P-10クーロン散乱境界条件連立一次方程式片対数グラフEAGLEPIC16F785LMC662トランスシンボルCK1026線種凡例MBEAACircuitグラフの分割軸ラベルifort

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ