Wannier90 files
Some of the functions, e.g. read_amn, write_amn, read_chk, write_chk, etc., support reading/writing Fortran unformatted files. However, the Fortran unformatted files are machine and compiler dependent. Therefore, it is not guaranteed that these functions work for all the cases. Currently, the functions are tested on the following platforms:
- Linux + gfortran 11.2
Contents
Index
WannierIO.ChkWannierIO._fix_win!WannierIO._read_amn_binWannierIO._read_amn_fmtWannierIO._read_chk_binWannierIO._read_chk_fmtWannierIO._read_eig_binWannierIO._read_eig_fmtWannierIO._read_mmn_binWannierIO._read_mmn_fmtWannierIO._read_unk_binWannierIO._read_unk_fmtWannierIO._reshape_eigWannierIO._write_amn_binWannierIO._write_amn_fmtWannierIO._write_chk_binWannierIO._write_chk_fmtWannierIO._write_eig_binWannierIO._write_eig_fmtWannierIO._write_mmn_binWannierIO._write_mmn_fmtWannierIO._write_unk_binWannierIO._write_unk_fmtWannierIO.get_UWannierIO.get_UdisWannierIO.read_amnWannierIO.read_chkWannierIO.read_eigWannierIO.read_mmnWannierIO.read_nnkpWannierIO.read_spnWannierIO.read_unkWannierIO.read_w90_bandWannierIO.read_w90_band_datWannierIO.read_w90_band_kptWannierIO.read_w90_band_labelinfoWannierIO.read_w90_tbdatWannierIO.read_w90_wsvecWannierIO.read_winWannierIO.read_woutWannierIO.write_HH_RWannierIO.write_amnWannierIO.write_amnWannierIO.write_chkWannierIO.write_eigWannierIO.write_mmnWannierIO.write_mmnWannierIO.write_nnkpWannierIO.write_spnWannierIO.write_spnWannierIO.write_unkWannierIO.write_w90_bandWannierIO.write_w90_band_datWannierIO.write_w90_band_kptWannierIO.write_w90_band_labelinfoWannierIO.write_win
Read/write
WannierIO._fix_win! — MethodWannierIO.read_win — Methodread_win(filename; fix_inputs=true)Read the input file of Wannier90.
Arguments
filename::AbstractString: The name of the input file.
Keyword Arguments
fix_inputs: sanity check and fix the input parameters, e.g., setnum_bands = num_wannifnum_bandsis not specified, convertatoms_cartalways toatoms_frac, etc. See also_fix_win!.
WannierIO.write_win — Methodwrite_win(filename::AbstractString; kwargs...)Write input parameters into a Wannier90 win file.
The input parameters are keyword arguments, with key names same as that of Wannier90. The only exception is atoms_frac, which contains both atom labels and fractional coordinates; however, here it is split into two keywords: atom_labels which is a vector of element names, and atoms_frac which is a matrix.
Examples
using WannierIO
write_win(
"silicon.win";
num_wann=4,
num_bands=4,
# unit_cell_cart is a matrix, its columns are the lattice vectors in angstrom
unit_cell_cart=[
0.0 2.71527 2.71527
2.71527 0.0 2.71527
2.71527 2.71527 0.0
],
# both [:Si, :Si] and ["Si", "Si"] are allowed
atom_labels = ["Si", "Si"],
# atoms_frac is a matrix, its columns are the fractional coordinates
atoms_frac=[
0.0 0.25
0.0 0.25
0.0 0.25
],
# each element in projections will be written as a line in the win file
projections=[
"random",
]
kpoint_path=[
[:G => [0.0, 0.0, 0.0], :X => [0.5, 0.0, 0.5]],
[:X => [0.5, 0.0, 0.5], :U => [0.625, 0.25, 0.625]],
],
mp_grid=[2, 2, 2],
# kpoints is a matrix, its columns are the fractional coordinates
kpoints=[
0.0 0.0 0.0 0.0 0.5 0.5 0.5 0.5
0.0 0.0 0.5 0.5 0.0 0.0 0.5 0.5
0.0 0.5 0.0 0.5 0.0 0.5 0.0 0.5
],
# additional parameters can be passed as keyword arguments, e.g.,
num_iter=500,
)WannierIO.read_wout — Methodread_wout(filename::AbstractString)Parse wout file.
Return
lattice: in Å, each column is a lattice vectoratom_labels: atomic symbolsatom_positions: in fractional coordinates, each column is a coordinate vectorcenters: WF centers in Å, each column is a WF center vectorspreads: WF spreads in Å^2
WannierIO._read_amn_bin — Method_read_amn_bin(filename::AbstractString)Read Fortran binary (unformatted) amn file.
Using Fortran stream IO.
WannierIO._read_amn_fmt — Method_read_amn_fmt(filename::AbstractString)Read Fortran formatted amn file.
WannierIO._write_amn_bin — MethodWrite A as Fortran unformatted file.
WannierIO._write_amn_fmt — MethodWrite A in plain text format.
WannierIO.read_amn — Methodread_amn(filename::AbstractString)Read the amn file.
Return
A: an_bands * n_wann * n_kptsarray.
WannierIO.write_amn — Methodwrite_amn(filename, A::Array{Complex,3}, header; binary=false)Write amn file.
Arguments
filename: output filenameA: an_bands * n_wann * n_kptsarrayheader: 1st line of the file
Keyword arguments
binary: write as Fortran unformatted file
WannierIO.write_amn — Methodwrite_amn(filename, A::Array{Complex,3})Write amn file.
Default header is "Created by WannierIO.jl CURRENT_DATE".
Arguments
filename: output filenameA: an_bands * n_wann * n_kptsarray
Keyword arguments
binary: write as Fortran unformatted file
WannierIO._read_mmn_bin — MethodRead Fortran binary mmn file.
WannierIO._read_mmn_fmt — MethodRead plain text mmn file.
WannierIO._write_mmn_bin — MethodWrite binary mmn file.
WannierIO._write_mmn_fmt — MethodWrite plain text mmn file.
WannierIO.read_mmn — Methodread_mmn(filename::AbstractString)Read mmn file.
Returns a n_bands * n_bands * n_bvecs * n_kpts array.
WannierIO.write_mmn — Methodwrite_mmn(filename, M::Array{ComplexF64,4}, kpb_k, kpb_b, header; binary=false)Write mmn file.
Arguments
filename: output file nameM:n_bands * n_bands * n_bvecs * n_kptsarraykpb_k:n_bvecs * n_kptsarraykpb_b:3 * n_bvecs * n_kptsarrayheader: header string
Keyword arguments
binary: if true write in Fortran binary format
WannierIO.write_mmn — Methodwrite_mmn(filename, M::Array{ComplexF64,4}, kpb_k, kpb_b; binary=false)Write mmn file.
Default header is "Created by WannierIO.jl CURRENT_DATE".
Arguments
filename: output file nameM:n_bands * n_bands * n_bvecs * n_kptsarraykpb_k:n_bvecs * n_kptsarraykpb_b:3 * n_bvecs * n_kptsarray
Keyword arguments
binary: if true write in Fortran binary format
WannierIO._read_eig_bin — MethodRead binary eig file.
WannierIO._read_eig_fmt — MethodRead plain text eig file.
WannierIO._reshape_eig — MethodReshape a vector of eigenvalues into a matrix of eigenvalues.
WannierIO._write_eig_bin — MethodWrite binary eig file.
WannierIO._write_eig_fmt — MethodWrite plain text eig file.
WannierIO.read_eig — Methodread_eig(filename::AbstractString)Read the eig file.
Return
E: an_bands * n_kptsarray
WannierIO.write_eig — Methodwrite_eig(filename::AbstractString, E::AbstractArray; binary=false)Write eig file.
Arguments
E:n_bands * n_kpts
Keyword arguments
binary: if true write in Fortran binary format
WannierIO.read_spn — Methodread_spn(filename::AbstractString)Read the spn file.
Return a n_bands * n_bands * n_kpts * 3 array.
WannierIO.write_spn — Methodwrite_spn(filename::String, S::Array{Complex,4}, header::String)Write the spn file.
WannierIO.write_spn — Methodwrite_spn(filename::String, S::Array{Complex,4})Write the spn file.
The header is "Created by WannierIO.jl CURRENT_DATE".
WannierIO._read_unk_bin — MethodRead binary unk file.
WannierIO._read_unk_fmt — MethodRead plain text unk file.
WannierIO._write_unk_bin — MethodWrite binary unk file.
WannierIO._write_unk_fmt — MethodWrite plain text unk file.
WannierIO.read_unk — Methodread_unk(filename::AbstractString)Read UNK file for the periodic part of Bloch wavefunctions.
Return
ik: k-point indexΨ: periodic part of Bloch wavefunctions in real space
WannierIO.write_unk — Methodwrite_unk(filename::AbstractString, ik::Integer, Ψ::Array{Complex,4}; binary=false)Write UNK file for the periodic part of Bloch wavefunctions.
Arguments
- ik: at which kpoint? start from 1
- Ψ: Bloch wavefunctions,
size(Ψ) = (n_gx, n_gy, n_gz, n_bands)
Keyword arguments
binary: write as Fortran unformatted file
WannierIO.read_nnkp — Methodread_nnkp(filename::AbstractString)Read the nnkp file.
Return
recip_lattice: each column is a reciprocal lattice vectorkpoints:3 * n_kpts, in fractional coordinateskpb_k:n_bvecs * n_kpts, index of kpointskpb_b:3 * n_bvecs * n_kpts, fractional w.r.trecip_lattice
WannierIO.write_nnkp — Methodwrite_nnkp(filename::AbstractString, bvectors::BVectors, n_wann::Integer)Write a nnkp file that can be used by DFT codes, e.g., QE pw2wannier90.
Arguments
recip_lattice: each column is a reciprocal lattice vectorkpoints:3 * n_kpts, in fractional coordinateskpb_k:n_bvecs * n_kpts, index of kpointskpb_b:3 * n_bvecs * n_kpts, fractional w.r.trecip_latticen_wann: if given, write aauto_projectionsblockexclude_bands: if given, write the specified band indexes in theexclude_bandsblock
Only a preliminary version, use auto_projections, no exclude_bands.
WannierIO.Chk — TypeStruct for storing matrices in seedname.chk file.
WannierIO._read_chk_bin — MethodRead unformatted seedname.chk file.
WannierIO._read_chk_fmt — MethodRead formatted seedname.chk file.
WannierIO._write_chk_bin — MethodWrite unformatted chk file.
WannierIO._write_chk_fmt — MethodWrite formatted chk file.
WannierIO.get_U — Methodget_A(chk::Chk)Extract U matrices from Chk.
WannierIO.get_Udis — Methodget_Udis(chk::Chk)Extract A matrices for disentanglement from Chk.
WannierIO.read_chk — Methodread_chk(filename::AbstractString)Read formatted or binary chk file.
WannierIO.write_chk — Methodwrite_chk(filename, chk::Chk)Write formatted or binary chk file.
Keyword arguments
binary: write as Fortran unformatted file
WannierIO.read_w90_tbdat — Methodread_w90_tbdat(filename::AbstractString)Read seedname_tb.dat.
Return
lattice: each column is a lattice vectorR: $\bm{R}$ vectors on which operators are definedN: degeneracies of $\bm{R}$ vectorsH: Hamiltonian $\bm{H}(\bm{R})$r: position operator
WannierIO.read_w90_wsvec — Methodread_w90_wsvec(filename::AbstractString)Read seedname_wsvec.dat.
WannierIO.write_HH_R — Methodwrite_HH_R(filename, H, R; N=nothing, header=nothing)Write the real space Hamiltonian to a seedname_HH_R.dat file.
Arguments
filename: usuallyseedname_HH_R.datH: an_wann * n_wann * n_rvecsarray of HamiltonianR: an_rvecs * 3array of integers
Keyword arguments
N: an_rvecsvector of integers, the degeneracy of each R vectorheader: a string, the header of the file
Wanier90 postw90.x has a hidden input parameter effective_model, setting it to true and postw90.x will read this HH_R.dat to fill the real space Hamiltonian, and do subsequent Wannier interpolation, e.g., in BoltzWann. However, the vanila postw90.x code does not take into account the degeneracy of R vectors, and also does not use MDRS interpolation. I have modified the postw90.x code to use MDRS, and also changed a bit the number of digits for the Hamiltonian in HH_R.dat, so that it is the same as the seedname_tb.dat file, i.e., from Fortran F12.6 to E15.8.
WannierIO.read_w90_band — Methodread_w90_band(seedname::AbstractString)Read SEEDNAME_band.dat, SEEDNAME_band.kpt, SEEDNAME_band.labelinfo.dat.
Return
kpoints:3 * n_kpts, fractional coordinatesE:n_bands * n_kpts, band energiesx:n_kpts, x axis value, in cartesian lengthsymm_idx: index of high-symmetry points inseedname_band.datsymm_label: name of high-symmetry points
WannierIO.read_w90_band_dat — Methodread_w90_band_dat(filename::AbstractString)Read seedname_band.dat file.
Return
x:n_kpts, x axis value, in cartesian lengthE:n_bands * n_kpts, band energies
WannierIO.read_w90_band_kpt — Methodread_w90_band_kpt(filename::AbstractString)Read seedname_band.kpt file.
Return
kpoints:3 * n_kpts, fractional coordinatesweights:n_kpts, weights of kpoints
WannierIO.read_w90_band_labelinfo — Methodread_w90_band_labelinfo(filename::AbstractString)Read seedname_band.labelinfo file.
Return
symm_idx: index of high-symmetry points inseedname_band.datsymm_label: name of high-symmetry points
WannierIO.write_w90_band — Methodwrite_w90_band(seedname, kpoints, E, x, symm_idx, symm_label)Write SEEDNAME_band.dat, SEEDNAME_band.kpt, SEEDNAME_band.labelinfo.dat.
Arguments
seedname: seedname ofSEEDNAME_band.dat, SEEDNAME_band.kpt, SEEDNAME_band.labelinfo.datkpoints:3 * n_kpts, fractional coordinatesE:n_bands * n_kpts, band energiesx:n_kpts, x axis value, in cartesian lengthsymm_idx: index of high-symmetry points inseedname_band.datsymm_label: name of high-symmetry points
WannierIO.write_w90_band_dat — Methodwrite_w90_band_dat(filename, x, E)Write seedname_band.dat file.
Arguments
filename: filename ofseedname_band.datx:n_kpts, x axis value, in cartesian lengthE:n_bands * n_kpts, band energies
WannierIO.write_w90_band_kpt — Methodwrite_w90_band_kpt(filename, kpoints, weights=nothing)Write seedname_band.kpt file.
Arguments
filename: filename ofseedname_band.kptkpoints:3 * n_kpts, fractional coordinatesweights:n_kpts, optional, weights of kpoints
WannierIO.write_w90_band_labelinfo — Methodwrite_w90_band_labelinfo(filename, symm_idx, symm_label, x, kpoints)Write seedname_band.labelinfo file.
Arguments
filename: filename ofseedname_band.labelinfosymm_idx: index of high-symmetry points inseedname_band.datsymm_label: name of high-symmetry pointsx:n_kpts, x axis value, in cartesian lengthkpoints:3 * n_kpts, fractional coordinates