Lattice Wannier function (LWF) model in MULTIBINIT¶
Tip
This feature is still under heavy development. Tests and feedbacks are welcome! It is not recommended to be used in production at this stage. Please contact the developers (x.he@uliege.be) for feedbacks and help.
LWF dynamics in MULTIBINIT¶
This lesson aims at showing how to build a LWF model and run a LWF dynamics calculation.
**Before beginning, we recommend the reading of the theory on Lattice Wannier functions in the literature [Rabe1995]. The construction of LWF from the phonon band structure is covered in another tutorial. **
With this lesson, you will learn to:
-
Building of the LWF model.
-
Run the dynamics of LWF.
Note
Supposing you made your own installation of ABINIT, the input files to run the examples are in the ~abinit/tests/ directory where ~abinit is the absolute path of the abinit top-level directory. If you have NOT made your own install, ask your system administrator where to find the package, especially the executable and test files.
In case you work on your own PC or workstation, to make things easier, we suggest you define some handy environment variables by executing the following lines in the terminal:
export ABI_HOME=Replace_with_absolute_path_to_abinit_top_level_dir # Change this line
export PATH=$ABI_HOME/src/98_main/:$PATH # Do not change this line: path to executable
export ABI_TESTS=$ABI_HOME/tests/ # Do not change this line: path to tests dir
export ABI_PSPDIR=$ABI_TESTS/Psps_for_tests/ # Do not change this line: path to pseudos dir
Examples in this tutorial use these shell variables: copy and paste
the code snippets into the terminal (remember to set ABI_HOME first!) or, alternatively,
source the set_abienv.sh
script located in the ~abinit directory:
source ~abinit/set_abienv.sh
The ‘export PATH’ line adds the directory containing the executables to your PATH so that you can invoke the code by simply typing abinit in the terminal instead of providing the absolute path.
To execute the tutorials, create a working directory (Work*
) and
copy there the input files of the lesson.
Most of the tutorials do not rely on parallelism (except specific tutorials on parallelism). However you can run most of the tutorial examples in parallel with MPI, see the topic on parallelism.
Before trying to run the LWF dynamics, you might consider to work in a subdirectory for this tutorial. Why not Work_lwfdyn?
How to build LWF models.¶
The LWF model consists of second order (harmonic) and higher order (anharmonic) interaction between the LWF’s. The first step of building the LWF model is to construct the LWF and the harmonic Hamiltonian from the phonon band structure, which is covered in this tutorial. The tools for getting the anharmonic interaction are not ready for usage in the version 9.8. They will be released in the future.
How to use MULTIBINIT to run LWF dynamics¶
With the LWF model built and saved into a netcf file, we can run LWF dynamics calculation with MULTIBINIT. The input files for an example can be found at ~abinit/tests/tutomultibinit/Input/ . The input file can also be downloaded from:
############################################################################## #Test for multibinit, just read lwf potential and run dynamics ############################################################################## ncellmat = 8 0 0 0 8 0 0 0 8 # size of supercell lwf_dynamics=3 # type of dynamics. 3: Berendsen thermostat lwf_dt =1e-16 s # time step. lwf_ntime = 3000 # number of time steps lwf_nctime = 100 # write to netcdf history file per 100 steps. lwf_taut = 1e-14 s # characteristic time for berendsen dynamics. lwf_init_state=1 # initial state. 1: random amplitude. lwf_var_temperature=1 # whether to do variable temperature calculation. lwf_temperature_start=600.1 # Starting temperature. lwf_temperature_end=0.1 # Ending temperature. lwf_temperature_nstep=7 # number of temperature steps. randomseed=111111 # for testing only #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = multibinit #%% need_cpp_vars = HAVE_NETCDF #%% exclude_builders = .*_nag_7.[01]_.* #%% lwf_pot = tmulti6_1.nc #%% exec_args = --F03 #%% [files] #%% files_to_test = #%% tmulti6_1.abo, tolnlines = 3, tolabs = 0.01, tolrel = 0.02, fld_options = -medium; #%% [paral_info] #%% max_nprocs = 1 #%% [extra_info] #%% authors = X. He #%% keywords = Effective potential, multibinit, lwfpot #%% description = #%% read xml and run lattice wannier function dynamics #%% The ncellmat parameters are small. #%% #%% Disabled on nag@abiref because integer overflow (-C=intovf option of NAG compiler) #%% is detected, which is needed by the random number generator. #%% The random number generator in in 28_numeric_noabirule/m_random_xoroshiro128plus.F90 #%% #%%<END TEST_INFO>
The netcdf file tmulti6_1.nc contains the LWF model, and tmulti6_1.abi is the input file. The input file is shown below. Note that the first line “lwf_pot_fname”
ncellmat = 8 0 0 0 8 0 0 0 8 # size of supercell, 3x3 matrix.
lwf_dynamics=3 # type of dynamics. 3: Berendsen thermostat
lwf_dt =1e-16 s # time step.
lwf_ntime = 3000 # number of time steps
lwf_nctime = 100 # write to netcdf history file per 100 steps.
lwf_taut = 1e-14 s # characteristic time for berendsen dynamics.
lwf_init_state=1 # initial state. 1: random amplitude.
lwf_var_temperature=1 # whether to do variable temperature calculation.
lwf_temperature_start=600.1 # Starting temperature.
lwf_temperature_end=0.1 # Ending temperature.
lwf_temperature_nstep=7 # number of temperature steps.
For a more realistic simulation, the size of the supercell, and the number of temperature steps should be increased.
To run the LWF dynamics, use the command below:
multibinit tmulti6_1.abi --F03 > tmulti6_1.log
For each temperature point, the temperature, kinetic energy, potential energy, and total energy will be output for every lwf_nctime step.
Iteration temperature(K) Ekin(Ha/uc) Epot(Ha/uc) ETOT(Ha/uc)
100 601.99469 1.90641E-03 3.70420E-04 2.27683E-03
200 419.24864 1.32768E-03 2.73706E-03 4.06475E-03
300 421.02202 1.33330E-03 5.28296E-03 6.61626E-03
......
A file ending with “_lwfhist.nc”, which contains the trajectory of the LWF amplitudes, will be generated. By analyzing it, we can extract the information like heat capacity and susceptibility. If there is a structural phase transition, the critical temperature can also be found. The tools for doing these analyses are still under development.