feram: 強誘電体の高速分子動力学シミュレーション

feram logo

feramは強誘電体薄膜の高速分子動力学シミュレーターです.


Table of Contents:

ホームページ,ダウンロード,コンパイル,論文

feramのホームページは http://loto.sourceforge.net/feram/ です.

最新のtar.xzパッケージ (feram-X.YY.ZZ.tar.xz) を http://sourceforge.net/projects/loto/files/feram/ から自由にダウンロードすることができます. feramはGNU General Public License (GPL)にもとづいて コピー・改変・再配布が可能なフリーソフトウエアです.

コンパイルの手順は INSTALL に述べられています.

feramを使った強誘電体の研究の論文のリストがdoc/publication.htmlにあります.

参考文献

Questions

質問をする前にまず本ドキュメントをよく読みましょう. パラメーターについては parameters/parameters.html を読みましょう. インストール方法については INSTALL を読みましょう. feramを使う上で必読の7つの論文をすぐ上の『参考文献』にリストアップしています. 質問はメーリングリストにポストしてください. 作者だけでなく他のユーザーも回答したり参照したりすることができます.

メーリングリスト

実行方法

feramはコマンドライン引数で与えられたファイルを読み込みます:

$ OMP_NUM_THREADS=6 SOMEWHERE/feram foo.feram bar.feram baz.feram

feramのMPI版であるferam_mpiをmakeすることもできます. feram_mpiは入力ファイルを並列処理します.

$ OMP_NUM_THREADS=16 mpiexec -np 3 SOMEWHERE/feram_mpi foo.feram bar.feram baz.feram

各プロセスのスレッド数を環境変数OMP_NUM_THREADSで指定してください. マシンやシステムサイズ (N = L_x L_y L_z) によって最適なOMP_NUM_THREADSの値は異なります. 最新のIntel XeonのGNU/Linuxマシンで実行するのが効果的です. feramはあまり大容量のメモリを必要としませんが,高速な実行には広帯域のメモリアクセスが必要です. システムサイズ64x64x64までは1 slotのCPUを占有して実行するのがよいでしょう. より大きなシステムサイズではslotを跨いだ並列実行 (NUMA) も効果的です. プロセスのCPU属性を制御するためにtaskset(1)やnumactl(8)を適宜活用してください.

入力ファイル

パラメータ入力ファイル(.feram file)

feram用のパラメータファイルはコメント行と 'tag = value(s)' というタグ行 からなるテキストファイルです.パラメータファイルのファイル名を foo123 または foo123.feram とした場合,出力ファイルは foo123.log, foo123.0000000000.cood, ... などとなります. それぞれのパラメータをどう決定するかは parameters/parameters.html に説明があります.

コメント行

'#' で始まる行はコメント行で,無視されます. 空行も無視されます.

# This is a comment line.


# Here are two more
# comment lines.
シバン: "#!/usr/local/bin/feram" または "#!./feram"

.feram入力ファイルの1行目にシバンを書いておいてスクリプトのように実行することができます.

タグ行

タグ行には前後がスペースで挟まれた等号 ' = ' が入っていなくてはいけません. 次のとおり,その左にタグを右に設定値を置きます:

tag = 1.0

tag = -2.0 -3.0 -4.0
tag =  5.0  6.0  7.0

以下に現在feramで利用可能なタグの一覧を示します.

verbose

.logファイル(詳細は「出力ファイル」の項を参照)に出力するメッセージの量を指定します.

verbose = 0

0のとき,.logファイルは作られません(未実装).

verbose = 1

1(デフォルト値)のとき,.logファイルには最初と最後のイテレーションのエネルギーの値のみがレポートされます.

verbose = 2

2のとき,.logファイルにはすべてのイテレーション毎にエネルギーの値がレポートされます..logファイルのサイズは巨大になります.

verbose = 3

3のとき,.logファイルにはcallされたサブルーチンがメッセージとして出力されます.

verbose = 4

4のとき,.logファイルにはさらに詳細なメッセージが出力されます.

method

シミュレーションの方法を指定します.

method = 'md'

'md'を指定すると能勢−ポアンカレのサーモスタットを使ったカノニカルアンサンブルでの分子動力学シミュレーションを行います.

method = 'vs'

'vs'を指定すると速度スケーリング法を使ったカノニカルアンサンブルでの分子動力学シミュレーションを行います.

method = 'lf'

'lf'を指定すると蛙飛び (leapfrog) 法を使ったミクロカノニカルアンサンブルでの分子動力学シミュレーションを行います.

method = 'mc'

'mc'を指定するとモンテカルロシミュレーションを行います.まだインプリメントされていません.

method = 'hl'

'hl'の機能はちかぢか削除されます. ヒステリシスループ (hysteresis loop) のシミュレーションには n_E_wave_periodとE_wave_typeとを使って下さい.

GPa

圧力をGPa単位で.過小評価されるTcを負圧をかけることにより補正することがある.

GPa = -5.0

また,3つの値を指定することにより垂直応力をかけることもできる.

GPa = 0.0 0.0 -3.0
kelvin

温度.

kelvin = 100
mass_amu

Rにあるunit cellの双極子の長さu(R)の有効質量. 単位はatomic mass unit.

acoustic_mass_amu

もしacoustic_mass_amuが設定されないと,音響変位,すなわち局所歪みは{u(R)}を元に最適化される. acoustic_mass_amuとして音響変位の有効質量が

acoustic_mass_amu = 46.44

と与えられると,音響変位についても分子動力学計算が行われる. 単位はatomic mass unit.一般的に全5原子の平均質量とする. 今のところ,method = 'md'では音響変位の分子動力学計算はできません. method = 'vs'もしくはmethod = 'lf'で使って下さい.

Q_Nose

能勢のQ.MD計算に必要なパラメータで,熱欲と系とのカップリングの強さを表す. 大きなsupercell,高温には大きな値を, 小さなsupercell,低温には小さな値を使う.

Q_Nose = 14.4
bulk_or_film

システムの構造を指定します. 'bulk' は無限に周期的なバルクです. 'film' は「自由な」薄膜キャパシタです.電極は短絡されています. 'epit' はエピタキシャル歪み(epi_strainで指定)を伴った薄膜キャパシタです.これも電極は短絡されています.

bulk_or_film = 'epit'
L

System size, L_x, L_y and L_z. They must be equal or larger than 4.

L = 32 32 4
padding_y

計算の高速化のためのy方向のパディングの値. 最適なパディングの値はシステムやコンパイラに依存します. 64x64x64 と 96x96x96 のシステムサイズなら

padding_y = 5

128x128x128 なら

padding_y = 1

など,いちどベンチマークを取って最適値を出しておくとよいでしょう. padding_yの既定値は3です. 詳しくは src/coord_module.F を参照してください.

gap_id

0: dead layer はなし. 1: 片側だけに dead layer がある. 2: 両側に dead layers がある.

gap_id = 1

dead layer の厚さは常に 1 unit cell.

gap_dipole_u

dead layerの分極.単位はu(R)と同じÅ.

gap_dipole_u = 0.0 0.0 0.16
a0

ペロブスカイト強誘電体の立方晶の格子定数をÅで指定します.

a0 = 3.99
epi_strain

エピタキシャル歪み.

epi_strain = -0.01

epi_strainはbulk_or_film = 'epit'のときにだけ有効であることに注意して下さい. 詳しくは src/optimize-homo-strain.F を見てください.

dt

タイムステップの長さをピコ秒で.

dt = 0.002
n_thermalize, n_average, n_coord_freq, n_hl_freq

thermalizeにかけるステップ数,物理量の平均を取るのにかける ステップ数,.coordファイルを書き出す頻度,ヒステリシスループの 計算のときに.hlファイルに書き出す頻度.

n_thermalize = 40000
n_average    = 10000
n_coord_freq = 50000
n_hl_freq    =  5000
n_E_wave_period, E_wave_type

external_E_fieldの振幅を持つ外部電場を時間により振動させるときの周期. E_wave_typeに'triangular_sin'か'triangular_cos'を指定します. src/27example-BaTiO3-new-param-E_wave/ 以下に例があります. 'triangular_sin'か'triangular_cos'の場合 n_E_wave_periodは4で割り切れる正の整数でなくてはなりません. 'ramping_off'と'ramping_on'も使うことができます. 先にE_wave_typeに'ramping_off'または'ramping_on'を指定しておけば n_E_wave_periodはどんな正の整数でもかまいません.

doc/figures/E_wave.jpg
Figure 1: Four options of E_wave_type.
n_hysteresis_loop_continue

ヒステリシスループ (hysteresis loop) のシミュレーションを n_hysteresis_loop_continue回目のイテレーションから 再開することができます.

n_hysteresis_loop_continue = 20000
coord_directory

このタグを

coord_directory = 'coord_files'

と設定すると,feramは.coordファイルをそのディレクトリに書き出します. この例では coord_files/foo.0000020000.coord などとなります. 巨大な.coordファイルをNFSのホームディレクトリでなくローカルの ハードディスクに書き出したい場合に便利です.特に指定がなければカレント ディレクトリに.coordファイルは書き出されます.

このタグを 'never' に設定すれば,.coordファイルをけっして書き出しません.

coord_directory = 'never'
distribution_directory

このタグを

distribution_directory = 'distribution_files'

と設定すると,foo123.distribution と foo123.distribution3d とは distribution_files/ ディレクトリに書き出されます.とくに後者は ファイルサイズが約180MBと大きいので,ローカルのハードディスクに 書き出したい場合があるかもしれません.特に指定がなければカレント ディレクトリに2つのファイルは書き出されます.

もし .distribution と .distribution3d とが必要なければ

distribution_directory = 'never'

としてください.こうすることで計算時間も大幅に節約できます.

external_E_field

外部電場Eを[V/Angstrom]の単位で. methodが'md', 'lf', 'mc'のときはこの電場で一定. methodが'hl'のヒステリシスの計算ではn_averageステップの間に電場が+Eから-Eまで変化する.

external_E_field = 0.00 0.00 -0.01

また,E_wave_typeを指定すると,Eはn_E_wave_periodの周期で振動する.

P_kappa2, P_alpha, P_gamma

4次の多項式の係数.

P_kappa2 =    5.502  [eV/Angstrom^2] # P_4(u) = kappa2*u^2 + alpha*u^4
P_alpha  =  110.4    [eV/Angstrom^4] #  + gamma*(u_y*u_z+u_z*u_x+u_x*u_y),
P_gamma  = -163.1    [eV/Angstrom^4] # where u^2 = u_x^2 + u_y^2 + u_z^2
P_k1, P_k2, P_k3

6次の項の係数.

P_k4

u^8の係数.

j

短距離相互作用の係数.

j = -2.648 3.894 0.898 -0.789 0.562 0.358 0.179    j(i) [eV/Angstrom^2]
B11, B12, B44

弾性定数 B11=C11*a0^3 [eV].

B11 = 126.
B12 =  44.9
B44 =  50.3  [eV]
B1xx, B1yy, B4yz

歪みとuとのカップリング係数.

B1xx = -211.   [eV/Angstrom^2]
B1yy =  -19.3  [eV/Angstrom^2]
B4yz =   -7.75 [eV/Angstrom^2]
seed

疑似乱数生成器 (RNG) のための2つの整数の種を指定します. Marsaglia-Tsang 64-bit uiniversal RNG が使われています.

seed = 143456789 987654321

デフォルトの値は123456789 987654321です. 次のようにjot(1)を使って種を生成するのもよいでしょう.

$ jot -r 2 1 2147483648
639779840
1297280417

bash(1)の$((RANDOM))機能を使うのもよいでしょう.

$ echo $((RANDOM*65536+RANDOM)) $((RANDOM*65536+RANDOM))
2146723680 1863789493
init_dipo_avg, init_dipo_dev

dipoleの初期状態の平均値とばらつき具合. 2つの値が

init_dipo_avg = 0.10 0.00 0.00   [Angstrom]  # Average   of initial dipole displacements
init_dipo_dev = 0.02 0.02 0.02   [Angstrom]  # Deviation of initial dipole displacements,

のとき,4つの双極子があったら

0.09  0.01  0.02
0.11 -0.02  0.01
0.08  0.02 -0.03
0.12 -0.01  0.00

などとなるだろう..restartファイルが見つからない場合に限り init_dipo_avgタグとinit_dipo_devタグとで指定される初期状態が 疑似乱数を使って作られます.

Z_star

unit cellあたりの有効電荷.単位はe.

Z_star     = 9.956
epsilon_inf

光学誘電率ε_∞.

epsilon_inf   = 5.24
kappa

この値は自動的に最適な値に設定されるので,ユーザが指定する必要はない.デバッグのために用いる. src/dipole-dipole-long-range.Fで双極子のエワルト和に使われる任意のκである.

kappa = 0.15
plot_dispersion

もし

plot_dispersion = .true.

が指定されたなら,分散関係のプロットのためのデータファイルが書き出されます. デフォルトは.false.です.

plot_dispersion = .true.のときは L_x, L_y, L_z はすべて同じ偶数でなくてはいけません.

L = 32 32 32

がよいでしょう.

例題の src/08example-BaTiO3-dispersion/ を見ていただくか、たとえば, 次のようにテストスクリプト dispersion_check.sh を実行すると分散関係を描くことができます.

$ tar xf SOMEWHERE/feram-X.YY.ZZ.tar.xz
$ cd feram-X.YY.ZZ
$ mkdir builddirectory
$ cd builddirectory
$ ../configure && make -j4
$ make check TESTS='dispersion_check.sh dispersion_32x32x32.inhomo-K.gp'
$ less dispersion_32x32x32.feram   # the input file
$ less dispersion_32x32x32.gp      # the GNUPLOT script
$ gv src/dispersion_32x32x32.long+short.energy.eps &
$ gv src/dispersion_32x32x32.long+short.eps &
$ gv src/dispersion_32x32x32.long+short.interaction.eps &
$ gv src/dispersion_32x32x32.inhomo-K.eps &
                  # Previews of plots. You may also use evince(1) instead of gv(1).

[Takeshi Nishimatsu el al.: Phys. Rev. B 82, 134106 (2010), http://dx.doi.org/10.1103/PhysRevB.82.134106 ] の中の Fig.3 や parameters/parameters.html の中の Fig.5 と比較してください.

continue

feramが

$ feram foo.feram bar.feram

と実行されて,bar.feramの中で

continue = .true.

が指定されたなら,bar.feramはfoo.feramの結果を初期状態として計算を始めます. .restartファイルは使われません. デフォルトは.false.です.

.restart input file

feramを次のようにパラメータ・ファイル "foo123.feram" を引数として

$ feram foo123.feram

と実行すると,feramは "foo123.restart" ファイルを探して, 見つかればそれを初期状態として用います..restartファイルの書式は .coordファイルと同じです..restartファイルが見つからない場合は init_dipo_avgタグとinit_dipo_devタグとで指定される初期状態が 疑似乱数を使って作られます.

.quadratic input file

2次の原子間力定数行列 (qudratic inter-atomic force constant (IFC) matrices) を.quadraticファイルから読み込ませることができます. 3x3の行列が(Lx/2+1)*Ly*Lz個ひつようです..quadraticファイルを使う場合, j1-j7 をすべてゼロにして下さい.また,P_kappa2を *elevation* のために使って下さい.src/25example-BaTiO3-read-quadratic/ にその 使用例があります.

.defects input file

feramを次のようにパラメータ・ファイル "foo123.feram" を引数として

$ feram foo123.feram

と実行すると,feramは "foo123.defects" ファイルを探して, 見つかればそこに指定された双極子u(R)を固定します. このファイルが見つからない場合,上記のような「格子欠陥」は導入されません.

.defects 入力ファイルの書式は

 0  4  0   0.1  0.1  0.3
 4  6 13   0.0  0.0  0.3
   :
ix iy iz   u_x  u_z  u_z
   :

と固定するu(R)の位置とベクトルを順に1行ずつ書きます.

src/feram_defects_maker.rb はこの .defects 入力ファイルを作るのに便利です.

.localfield input file

feramを次のようにパラメータ・ファイル "foo123.feram" を引数として

$ feram foo123.feram

と実行すると,feramは "foo123.localfield" ファイルを探して, 見つかればそのファイルの中で指定されたサイトに指定された局所場をかけます. .localfieldファイルの書式は

 4  6 13   0.00 0.00 0.10
   :
ix iy iz   Ex   Ey   Ez
   :

局所場の単位は V/Angstrom です.このファイルが見つからない場合, 局所場はもちろんどこのサイトでも0になります.

各サイトにランダムな局所場をかける場合は付属のferam_random_field_generatorを使って.localfieldファイルを作るとよいでしょう.

$ ./feram_random_field_generator Lx Ly Lz  mu_x mu_y mu_z  sigma_x sigma_y sigma_z  seed1 seed2
$ ./feram_random_field_generator 32 32 243  0.0 0.0 0.0  0.02 0.02 0.02  123456789 987654321

.modulation file

各サイトの acoustic modulation a(R) を指定します. acoustic modulation に依存するエネルギは

E_acoustic_modulation = modulation_constant Sigma_R_alpha eta_alpha(R) a(R)

となります.

FFTW wisdom file

必須ではありませんが,FFTW用のwisdomファイルを用意すると, より最適なFFTのサブルーチンが選ばれるので, 全体の計算時間を短縮できることがあります. 逆に全体の計算時間が長くなってしまうこともあります. トライ・アンド・エラーで最適な計算条件を探してください.

wisdomファイルはferamと同時にsrc/内にビルドされるferam_fftw_wisdomコマンドで生成できます. たとえば,src/18example-benchmark/ ディレクトリ内で forward.feram のシステムサイズ Lx*Ly*Lz=32*32*243 の計算をするなら,

$ w   # Before executing feram_fftw_wisdom, confirm that load average is zero and there is no background job.
$ OMP_NUM_THREADS=6 ../feram_fftw_wisdom 1000 32 32 243 3
      :
  It takes a few minutes or a few hours depending on the system size.
      :
$ mv wisdom_new wisdom
$ OMP_NUM_THREADS=6 ../feram forward.feram
$ grep FFTW_WISDOM forward.log
  feram_common.F: 47: FFTW_WISDOM: Successfully imported FFTW wisdom in current directory.
$ grep TIMING_REPORT forward.log

とします.

feram_fftw_wisdomに与えるコマンドライン引数は

feram_fftw_wisdom <N_TIMES> <Lx> <Ly> <Lz> <padding_y>

です.

FFTW wisdomについての詳細は http://www.fftw.org/doc/Other-Important-Topics.html をご覧下さい.もしMKLの中のFFTW3ラッパーを使っている場合は wisdomファイルを準備する必要はありません.

出力ファイル

feram が feram foo123.feram と実行されたなら 出力ファイルは foo123. で始まります. すなわち,foo123.avg, foo123.0000050000.coord, foo123.param.gp, foo123.dipole-dipole-long.dat などです.

foo123.log

feramは.logファイルにエネルギーの値などを書き出します. 書き出す量はverbose = 1,2,3,4で制御できます.

デバッグのために verbose = 2 にして実行し, 出力された.logファイルの中のエネルギーをプロットしてみるのもよいでしょう. 例:

$ ./feram zzznp.feram
$ gnuplot zzznp.gp
$ ./feram zzzlf.feram
$ gnuplot zzzlf.gp

計算時間が.logファイルの最後に秒を単位として書き出されます. ただし,SR16000とFX10の場合,計算時間が1日(86,400秒)を越えるとカウンタが一度リセットされてしまいます.

      :
   T =  177.1 [K] END ============================================================================
  molecular-dynamics.F:158: END: molecular_dynamics().
feram_common.F:104: DATE_AND_TIME: 2016-06-24T23:16:26.498+0900
 t_initialization, t_simulation,  t_total, n_threads
       0.47          39.77          40.24    2     #TIMING_REPORT
feram_common.F:117: FINISH: love && peace && free_software

foo123.avg

n_thermalizeイテレーションの恒温化の後, 物性値の平均がn_averageイテレーションに渡って計算されます. 例えば温度を変えた入力ファイルで複数の計算をして, それらの.avgファイルをまとめてプロットすれば 物性値の温度依存性を見ることができます. .avgファイルの詳しい内容は src/average_module.F の最後を見て下さい.

foo123.distribution

u_x(R), u_y(R), u_z(R)の分布関数

D_x(u) = (1/N) Sum_R delta(u_x(R)-u)

をn_averageイテレーションに渡って平均したものが foo123.distributionに書き出されます. 各行は u D_x(u) D_y(u) D_z(u) です. ∫D_x(u)du=1になっているはずです. 詳細は src/average_module.F を見てください.

foo123.distribution3d

ベクトル u(R) の分布関数

D(u) = (1/N) Sum_R delta(u(R)-u)

をn_averageイテレーションに渡って平均したものが foo123.distribution3dに書き出されます. 各行は kx ky kz D(u) です.D(u)を全空間で 積分を取ると1になっている,∫D(u)du=1,はずです. 詳細は src/average_module.F を見てください.

foo123.hl

ヒステリシスループのシミュレーションの method = 'hl' の ときには,n_hl_freqイテレーション毎に.hlファイルに物性値が 書き出されます..avgファイルは作られません. 詳細は src/hysteresis_loop.F を見て下さい.

foo123.nnnnnnnnnn.coord

n_coord_freqイテレーション毎にこのファイルに系のスナップショットが記録されます. nnnnnnnnnnがイテレーションです.このファイルは feram_slicer.rb (Ruby script) や feram_cross_section_q.sh, feram_cross_section_p.sh, and feram_cross_section_dVddi.sh (Bourne Shell scripts) で可視化することができます. 停電や時間切れなどで計算が止まってしまった場合には, このファイルを.restartファイルとして計算を再開することができます. この.coordファイルの出力は,.feram入力ファイルで

coord_directory = 'never'

と書くことで抑止することができます.

このファイルの各カラムに何が書き出されているかは src/coord_module.Fのサブルーチンwrite_system()を見てください.

foo123.nnnnnnnnnn.slice.eps

z=Lz/4 での断面図を可視化したものが Encapsulated PostScript file(EPSF, .epsファイル)として書き出されます.nnnnnnnnnnがイテレーションで, .coordファイルと同様,n_coord_freqイテレーション毎に出力されます. この .slice.eps ファイルの出力は .feram 入力ファイルに

slice_directory = 'never'

と書くことで抑止することができます.

foo123.param.gp

GNUPLOT用のパラメーターファイルです. param.gpにファイル名を変更してからcross_section_q.shなどで使います.

foo123.dipole-dipole-long+short.dat

foo123.dipole-dipole-long+short.dat, foo123.dipole-dipole-long.dat and foo123.dipole-dipole-short.dat は plot_dispersion = .true. とすると作られます. 光学フォノンの分散関係が入ります.foo123.inhomo-K.dat には音響フォノンの分散関係が入ります.

foo123.dipole-dipole-long+short.datの中の1行は

   0.59375  16   3   0 -0.2022348055959993E+001  0.1270295721445465E+001  0.3455139983790274E+002

のようになっていますが,これは

   横軸  k点のインデックス IFC行列の3つの固有値

です.

詳細は上のplot_dispersionの説明かソースコード src/dipole-dipole.Fsrc/print-eigenvalues.F と を参照してください.

解析ツール

解析やプロットのためのツールをsrc/ディレクトリ内に用意しました. それらは `feram_` で始まります. `make install`すると,デフォルトでは/usr/local/bin/に feramコマンドとともにインストールされます. ほとんどはRubyスクリプトまたはシェルスクリプトですが, いくつかはFortranで書かれていてferamと同時にコンパイルされます. 基本的に使用方法はそのソースコードの先頭に書かれています.

feram_transition_detector.rb と feram_transition_sorter.rb

`feram_transition_detector.rb` は降温/昇温シミュレーションの出力の cooling.avg または heating.avg ファイルを読み込み, <u>の大きな変化がある行に`Tc`のマーカーを印刷します. `feram_transition_sorter.rb`はさらにそれを読み取ってソートして,1行に整形します. 詳細は src/34example-BST/README.md に書かれています.

feram_slicer.rb

.coordファイルを読み込んで、スーパーセルの断面図を+z分極を赤の四角枠-z分極を青の正方形で可視化するRubyスクリプトです. Encapsulated PostScript file(EPSF, .epsファイル)を直接書き出します. 第2引数に断面図を描くzの値を指定することもできます.

feram_slicer.rb zzz16.0000000060.coord
feram_slicer.rb zzz16.0000000060.coord 8   # ---> zzz16.0000000060-slice-z008.eps

feram_cross_section_q.sh

.coordファイルを読み込んで、指定の断面のセルの分極を矢印としてその断面に射影して描画します. param.gpをシンボリックリンクなどとして用意してください. zzz16.0000000060.coordを指定するとzzz16.0000000060-q-x.epsなどというEPSファイルができます.

Example1:
   ln -s zzz16.param.gp param.gp
   feram_cross_section_q.sh zzz16.0000000060.coord   # You will get zzz16.0000000060-q-x.eps.
Example2:
   feram_cross_section_q.sh 150K.0000050000.coord 4.0 10 y 0.9
Usage: ./feram_cross_section_q.sh coord-file [FACTOR] [CONST_Alpha] [Alpha] [ratio] [max_z]
Arguments:
 [FACTOR]      u*[FACTOR] will be the length of each arrow.
 [CONST_Alpha] Visulaize cross sections of alpha=[CONST_Alpha]. Default value: 8.
 [Alpha]       Alpha=x,y,z. Default value: x.
 [ratio]       Optional argument to keep the shape of unitcell square exactly.
               You may want to use this argument when Lx=Ly!=Lz. Default value: 0.7231.
 [max_z]       It is useful for vertical cross section of a thin-film.

シミュレーションの例

ソフトウエアパッケージの次のディレクトリに入力ファイル(と結果)が入っています.

feram-X.YY.ZZ/src/03example-BaTiO3-bulk-phase-transition/
feram-X.YY.ZZ/src/09example-BaTiO3-bulk-leap-frog/
feram-X.YY.ZZ/src/17example-PbTiO3-100-900K/
feram-X.YY.ZZ/src/20example-BaTiO3-new-param-pyro/
feram-X.YY.ZZ/src/21example-KNbO3/
feram-X.YY.ZZ/src/22example-BaTiO3-new-param-hl/
feram-X.YY.ZZ/src/23example-BaTiO3-new-param-hl-film-acoustic-mass/
feram-X.YY.ZZ/src/24example-BaTiO3-new-param-heating-cooling/
feram-X.YY.ZZ/src/25example-BaTiO3-read-quadratic/
feram-X.YY.ZZ/src/26example-BaTiO3-acoustic-MD/
feram-X.YY.ZZ/src/27example-BaTiO3-new-param-E_wave/
feram-X.YY.ZZ/src/28example-PbTiO3-elastocaloric-770K/
feram-X.YY.ZZ/src/29example-BaTiO3-new-param-defects/
feram-X.YY.ZZ/src/30example-BaTiO3-new-param-ramping-off/
feram-X.YY.ZZ/src/31example-BaTiO3-new-param-thermal-conductivity/
feram-X.YY.ZZ/src/32example-BaTiO3-old-64x64x1024-benchmark/
feram-X.YY.ZZ/src/34example-BST/

降温シミュレーションでの各種エネルギー対MDステップのグラフ

doc/figures/plot.epit-16x16-15-01-5.0GPa-0.01-cooling.jpg
Figure 2: 50,000 MDMDステップ毎に段階的に降温するシミュレーション. 各種エネルギー対MDステップ.

バルクBaTiO3の歪みと誘電率の温度依存性

doc/figures/strain-susceptibility.jpg
Figure 3: バルクBaTiO3の歪みと誘電率の温度依存性.3回の相転移が見える. 誘電率は双極子の揺らぎ (fluctuation) から計算している. ディレクトリ feram-X.YY.ZZ/src/03example-BaTiO3-bulk-phase-transition/ を見よ.

バルクBaTiO3のヒステリシスループの温度依存性

doc/figures/bulk-two-box.jpg
Figure 4: バルクBaTiO3のヒステリシスループの温度依存性. 常誘電→強誘電の相転移がわかる.

Hysteresis loops for epitaxially constrained and "free" BaTiO3 film capacitors

doc/figures/epit-vs-free-hysteresis-box.jpg
Figure 5: Calculated hysteresis loops for capacitors with (a) epitaxially constrained films, and (b) "free" films of various thickness l and with dead layer d at 100 K.

feramの開発

GNU Autotools

feramの開発には GNU Autotools (autoconf and automake) が必要です. たいていのLinuxディストリビューションにはこれらのツールのパッケージがあります. たとえばDebianやUbuntuなら

$ sudo apt-get install autoconf automake libtool autoconf-doc libtool-doc

でインストールできます.Autotoolsの詳しい解説がAutotools-memo.jaにあります.

最新のソースツリーの入手,コンパイル,実行

Subversion,すなわちsvn(1)を使って最新のソースツリーを入手します. --username=YourUsernameオプションを使わなければ匿名でcheckoutできます.

$ svn checkout --username=YourUsername https://svn.code.sf.net/p/loto/code/feram/trunk feram-trunk
$ cd feram-trunk
$ ls -l
$ autoreconf -v
$ automake --add-missing
$ autoreconf -v
$ ls -l
$ ./configure --help
$ ./configure
$ emacs src/feram.F   # Edit any source code here.
$ make
$ make check

便利なsvn(1)のコマンド:

$ svn --help
$ svn update
$ svn stat
$ svn diff
$ svn log

feramの実行方法:

$ ./feram foo1.feram foo2.feram foo3.feram &
$ mpiexec -np 3 ./feram_mpi foo1.feram foo2.feram foo3.feram &

README.jaとindex.ja.html

index.ja.htmlはREADME.jaからULMUL http://t-nissie.users.sourceforge.net/ULMUL/ によって自動的に生成しています.README.ja(日本語)やREADME.en(英語)を編集したら

$ make index.en.html index.ja.html

としてうまく変換できることを確認して下さい.

ソフトウエアの再配布について

feram

Copyright © 2007-2024 by Takeshi Nishimatsu

feram is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. You can copy, modify and redistribute feram, but only under the conditions described in the GNU General Public License (the "GPL"). For more detail, see COPYING.

feramを使って成果が得られた場合には,feramというこのプログラムの 名前と http://loto.sourceforge.net/feram/ のURL, そして次の2つのわれわれの論文を引用していただけたら幸いです.

[Takeshi Nishimatsu, Umesh V. Waghmare, Yoshiyuki Kawazoe, and David Vanderbilt: Phys. Rev. B 78 (2008) 104104]
[Jaita Paul, Takeshi Nishimatsu, Yoshiyuki Kawazoe, and Umesh V. Waghmare: Phys. Rev. Lett. 99 (2007) 077601]

引用した図版

feramのドキュメントで引用した下記の図版についてはその作者または出版社が著作権を持っています

作者

西松 毅 (t_nissie{at}yahoo.co.jp)

おしらせ

ご支援に感謝します:

http://loto.sourceforge.net/feram/ is hosted by SourceForge.net Logo .