Tbfit Manual

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 28

DownloadTbfit Manual
Open PDF In BrowserView PDF
A short guide to the Tight-Binding
FITting (TBFIT) package
Hyun-Jung Kim [Infant@kias.re.kr]
May 30, 2019
This document is to provide explanation for the input file arguments of
the TBFIT package.

System Requirements and installation
The program has been written by modern Fortran2008 language. If you want to deactivate the use of some module interfaces written in Fortran2008 syntax, please remove
-DF08 option in your option tag of the makefile.
LAPACK library should be properly linked in the makefile. For the eigenvalue solver with
sparse matrix, Inspector-executor Sparse BLAS Routines and Extended Eigensolver
Routines in the Intel Math Kernel Library (Intel MKL) are refered. If the system
size is very big, you can calculate band structure with energy window constraint. This is
available with EWINDOW tag and -DMKL SPARSE option. To use -DMKL SPARSE option,
make sure that mkl spblas.f90 file is located in your $MKLPATH/include folder.
To list up the space group information for the given geometry in the initial stages of
the calculations, one can activate the use of space group library (Spglib). For this, put
-DSPGLIB in your OPTION tag of the makefile, and provide appropriate library path in
SPGLIB tag.
#----------------------------------|
# Compiler options and bin path
|
#----------------------------------|
OPTIONS= -fpp -DMPI -DF08 -DSPGLIB -DMKL_SPARSE
F90
= mpif90 $(OPTIONS)
FFLAG = -O3 -heap-arrays -nogen-interfaces
BIN
= ~/code/bin

1

#----------------------------------|
# Dependencies: LAPACK, SPGLIB
|
#----------------------------------|
SPGLIB = -L/Users/Infant/code/lib/ -lsymspg
MKLPATH= $(MKLROOT)
LAPACK = -L$(MKLPATH)/lib/
-lmkl_intel_lp64 -lmkl_sequential
-lmkl_core -liomp5
makefile example
• How to install:
> tar -xvf TBFIT-master.zip
> cd TBFIT-master
> make tbfit
• How to run:
In the Example directory, you can run a test cases, for example:
> cd TBFIT-master/Example/1H-MoS2/SOC
> tbfit < /dev/null | tee log.out
Note that the output log will be written in log.out file.

2

Part I.
User’s Guide
1. INPUT tags of the INCAR-TB
GET BAND logical Default: .TRUE. If .TRUE. TBFIT will perform tight-binding calculations for band structure evaluation.
TBFIT logical Default: .FALSE.
.TRUE. : Perform tight-binding parameter fitting which is defined in PFILE.
After fitting is completed, whatever it is converged or not, additional tight binding
calculations as defined in the INCAR-TB will be performed.
.FALSE. : Do not perform fitting procedures. In this case, regular tight binding
calculations will be performed.
MITER integer Default: 100
Maximum number of iteration for the fitting procedures. If GA is set for LSTYPE,
MITER represents the maximum number of generations.
LSTYPE integer Default: LMDIF
Method for parameter fitting. Available tags are LMDIF and GA.
LMDIF method: Levenberg-Marquardt method1,
Jacobian.

2

using finite-difference for

GA method: Genetic Algorithm3 based on PIKAIA library4,5,6,7 . To setup
control parameters for the GA, see Sec. GA.
PTOL & FTOL real Default: 0.00001
Tolerence of iteration of the fitting procedures for LMDIF method. FTOL is a tolerence for the difference between target and calculated data from tight binding
method. PTOL is as tolerence for the tight binding parameters. Normally, both
values below 0.00001 is sufficient to reach a local minima.
1

Kenneth Levenberg, ”A Method for the Solution of Certain Non-Linear Problems in Least Squares”
Quarterly of Applied M athematics 2, 164 (1944).
2
Donald Marquardt, ”An Algorithm for Least-Squares Estimation of Nonlinear Parameters” SIAM
Journal on Applied M athematics 11, 431 (1963).
3
D. E. Goldberg, “Genetic Algorithm in Search, Optimization, & Machine Learning” Addison−W esley
(1989).
4
P. Charbonneau and B. Knapp, “A user’s guide to PIKAIA 1.0”, (NCAR Technical Note 418+IA,
1995)
5
P. Charbonneau, “An introduction to genetic algorithm for numerical optimization” (NCAR Technical
Note 450+IA, 2002)
6
P. Charbonneau, “Release notes for PIKAIA 1.2” (NCAR Technical Note 451+STR, 2002),
http://www.hao.ucar.edu/modeling/pikaia/pikaia.php
7
Modern Fortran Edition of the Pikaia Genetic Algorithm. https://github.com/jacobwilliams/pikaia

3

K UNIT string Default: ANGSTROM
ANGSTROM : the unit of the k-point will be written in Å−1 unit.
RECIPROCAL : the unit of the k-point will be written in reciprocal unit (fractional).
PFILE string File name for tight-binding parameters. Default: PARAM FIT.dat For the
details, see Sec.4.
POFILE string Output file name for tight-binding parameters written after fitting procedures. Default: PARAM FIT.new.dat
IS SK or SLATER KOSTER logical
.TRUE. : Slater-Koster type of hopping parameters will be assumed.
.FALSE. : User defined or direct hopping parameters will be assumed. W arning :
This is experimental feature and on the development stages (do not set to .FALSE.).
SGPLIB logical
.TRUE. : Write space group information to the output log.
.FALSE. : Do not write space group information to the output log.
Note that this option is only applicable if you have put -DSPGLIB option in your
makefile . See the details in System Requirements and installation section.
EFILE string, integer
File name for the target band structure for the fitting procedures. If the second
integer n is followed by, TBFIT will read n-th column as a target band. Default is
n=2.
EFILE DFT_BANDSTRUCTURE.dat 2
# 1st eigen value
# k-path energy(eV)
0.00000 -12.36137
0.01693 -12.36162
0.03386 -12.36118
[...]
0.16932 -12.33324
0.18625 -12.32696
0.20319 -12.32014

# 2nd eigen value
# k-path energy(eV)

4

0.00000
0.01693
0.03386
[...]
0.16932
0.18625
0.20319

-12.36137
-12.36041
-12.35875
-12.32136
-12.31394
-12.30600

[...]
EFILE DFT BANDSTRUCTURE.out example
GFILE string Default: POSCAR-TB
File name for the geometry and atomic orbital informations. The format is exactly
same as POSCAR of VASP program. For the details of setting atomic orbitals, see
Sec.3.
MoS2 # comment
1.00000000000000 # scaling factor
3.1716343
0.000000
0.00000 # lattice vector a1
1.5858171
2.746715
0.00000 # lattice vector a2
0.0000000
0.000000
15.00000 # lattice vector a3
Mo S
# atomic species
1
2
# number of atoms per species
Direct
# coordinate type (direct or cartesian)
0.00000 0.00000 0.50000 dz2 dxy dx2 dyz dxz # coord, orbital
0.33333 0.33333 0.60645 s px py pz
0.33333 0.33333 0.39354 s px py pz
POSCAR-TB example: MoS2 with Mo-d and S-sp
KFILE string Default: KPOINTS BAND
File name for the k-point setting. The format is exactly same as KPOINTS of VASP
program.
k-points line mode example
40 ! intersections
Line-mode
Reciprocal
0.50000000 0.5000000 0 M
0.33333333 0.6666666 0 K
0.33333333
0.00000000

0.6666666 0 K
0.0000000 0 G

5

0.00000000
0.66666666

0.0000000 0 G
0.3333333 0 K’
KPOINTS BAND line mode example

k-points grid mode example
0
GMonkhorst-Pack #’G’amma centered grid mode
4 4 1
# grid nk_1 nk_2 nk_3
0 0 0
# shift
KPOINTS BAND grid mode example
LOCCHG logical Default: .FALSE.
Setting tag for local potential. If .TRUE., one should give proper local potential
parameter in your PFILE and should properly setup LOCAL.POT tag in your
GFILE. For the details, see the explanation of LOCAL.POT in Sec.4.
TYPMAG string Default: NONMAG
Setting tag for magnetic moment: nonmagnetic, collinear, noncollinear If
collinear and noncollinear tag is applied, MOMENT or MOMENT.C in the
GFILE should be set up appropriately. For details, see MOMENT of the Sec.3.
LSORB logical Default: .FALSE.
Setting tag for spin-orbit coupling. If .TRUE., lambda orb spec should be properly
defined in the PFILE. For details, see Sec.4
LORBIT logical,string(optional),string(optional) Default: .TRUE.
Setting tag for orbital decomposed output. If .TRUE. the local orbital contribution
will be printed out in bandstructure TBA.dat file. If you write rh or mx or my or
mz next to the logical text with .TRUE., then, corresponding magnetization values,
which represents the expectation value of pauli matrices σi where i={0,1,2,3},
will be printed out. Here σ0 is 2×2 identity matrix to print out local orbital
contribution. For example,
LORBIT .TRUE. mz

will print out . If you write re or im next to the logical text with .TRUE.,
then, real or imaginary part of the wavefunction coefficient will be printed out.
Note that this option only applicable with LSORB .FALSE. in the current version.
LORBIT .TRUE. re

6

If you write wf next to the logical text with .TRUE., then, the wavefunction coefficient will be printed out. The real and imaginary part for each orbital basis
is written. If LSORB .TRUE., the spinor-up and spinor-dn part will be written, so
that four real values will construct wavefunction coefficient.
LORBIT .TRUE. wf

Note that the corresponding output file bandstructure TBA.dat file will be basically written by ascii (formatted) format. If you want to write in binary (unformatted) format, specify by bin (complex*16; double precision) or bin4 (complex*8;
single precision) tag next8 . For example,
LORBIT .TRUE. wf bin
or
LORBIT .TRUE. wf bin4

This tag will generate band structure TBA.(up/dn).bin file.
PROJ BAND logical, integers Default: .FALSE.
Setting tag for orbital/atom projected band structure output. The output will be
written in separate file for each atom. The correct usage is as follows:
PROJ_BAND .TRUE. 1:4 7

then you can get band structure atom.#.dat file

band_structure_atom.1.dat
band_structure_atom.2.dat
band_structure_atom.3.dat
band_structure_atom.4.dat
band_structure_atom.7.dat

and additionally, band structure atom.sum1.dat file will be printed out as well,
where projected local DOS for those atoms ({1,2,3,4,7}) are summed up in a single
file.
If you write another PROJ BAND tag specifying different atom sets in the separate
line, for example,
8

In the current version, bin or bin4 tag is only applicable when it is combined with wf option

7

LDOS_SUM .TRUE. 1:4 7
LDOS_SUM .TRUE. 5:8

then, you can get another set of files (band structure atom.sum2.dat and
band structure atom.{5..8}.dat) as follows:
band_structure_atom.1.dat
band_structure_atom.2.dat
band_structure_atom.3.dat
band_structure_atom.4.dat
band_structure_atom.5.dat
band_structure_atom.6.dat
band_structure_atom.7.dat
band_structure_atom.8.dat
band_structure_atom.sum1.dat
band_structure_atom.sum2.dat

(= 1+2+3+4+7)
(= 5+6+7+8)

Note: The atom index should be written in ascending order and should not exceed
total number of atoms of your system.
LOAD HOP logical, string Default: .false.
If .true., one can load hopping file to read tij value. The following string should
be the file name to be read. And the syntax of the file should be exactly same as
the hopping.dat file, which is generated in the initial stages of the calculation.
Hence, if you have pre-generated hopping.dat file (with LOAD HOP .FALSE.), you
can copy it with a different name and modify the elements of tij column, and
rerun the code with following tag (for example, if you have copied hopping.dat
→ hopping modified.dat):
LOAD_HOP

.TRUE.

hopping_modified.dat

Below, you can see that the original hopping element can be modified by changing
values of the t IJ(eV) column.
# Iatom Jatom
Rij
... ORB_I ... ORB_J
1
1
0.0 0.0 0.0 ...
s
...
s
1
1
0.0 0.0 0.0 ...
s
...
px
1
1 -1.2 -0.7 0.0 ...
s
...
s
1
2 -1.2 -0.7 0.0 ...
s
...
px
...
...
hopping.dat example file

8

...
...
...
...
...

t_IJ(eV)
-4.0
0.0
-3.9
1.9

...
...
...
...
...

# Iatom Jatom
Rij
... ORB_I ... ORB_J ...
1
1
0.0 0.0 0.0 ...
s
...
s
...
1
1
0.0 0.0 0.0 ...
s
...
px ...
1
1 -1.2 -0.7 0.0 ...
s
...
s
...
1
2 -1.2 -0.7 0.0 ...
s
...
px ...
...
...
hopping modified.dat example file

t_IJ(eV)
-2.0
0.0
-3.9
1.9

...
...
...
...
...

IBAND integer Default: 1 (deprecated)
IBAND is the first eigenstate of the target data of EFILE. This value will be used
in the WEIGHT SET section.
FBAND integer Default: NEIG (deprecated)
NEIG : number of orbital basis of the system. FBAND is the last eigenstate of the
target data of EFILE. This value will be used in the WEIGHT SET section.
SCISSOR integer, real
If set, in the fitting procedures, target energy EDFT(n,k) will be shift by amound of
the scissor operation. This operation works as follows: E′target (n, k) = Etarget (n,k)
+ escissor if n >= iscissor . Note that this operation is only valied if TBFIT is
.TRUE..
SCISSOR 29 0.2

# i_scissor = 29 and e_scissor = 0.2 (eV)

NN MAX integer Default: 3
Determine how many times the cell will be repeated in searching hopping pairs. If
your system is sufficiently larger than the maximal value of hopping distances of
your system, this can be reduced to 1, otherwise just use default value.
NN_MAX 3 3 3
or
NN_MAX 3
both settings will give 3×3×3 cell repeat.
ERANGE integer Default: 1 NEIG
If provided, the energy level between these energy window will be printed out in
the bandstructure TBA.dat file.
ERANGE

4400 4700

9

Above example means that the energy level from 4400th to 4700th will be printed.
This is particularly useful if you calculate very large systems. By setting ERANGE
tag, you can save disk space a lot if LORBIT tag is turned on where orbital
component information takes huge memory for larger systems.
EWINDOW real, integer Default: not activated
The eigenvalues within the energy window [emin:emax] will be calculated and
stored. This option also useful in dealing with huge system. The usage for this
tag is as follows:
EWINDOW

-5.0:5.0

NE_MAX 10

If provided, the energy level between these energy window will be printed out in
the bandstructure TBA.dat file.
In the above setting, the eigenvalue ({e}) within the energy window [-5.0:5.0] will
be calculated and stored. The NE MAX represents the maximum number of eigenvalue to be searched within the window and usually should be larger than the
number of actual eigenvalues (NE) within the range and should not exceed the
total number of eigenvalue (NE TOT) of the system. The optimal values for NE MAX
is about 1.5×NE9 . Since the NE MAX is critical to the calculation speed, choosing
the optimal values is essential. During the calculation, the program will find the
optimal NE MAX and update in every k-point loop.10
Note 1: If the tag is specified in your input file, the Hamiltonian matrix will be
constructed with the sparse matrix format rather than dense matrix format. The
libraries to dealing with the sparse matrix is referred from Intel Math Kernel
Library (MKL), please make sure that your library path is properly assigned.
(suggest to use MKL version ≥ 11.3)
Note 2: If NE MAX is not provided or exceeding NE TOT, i.e., NE MAX≥NE TOT, NE MAX
will be set to NE TOT by default.
SET string
Setting tag for various post processings, parameter constraints, and nearest neighbor setups, etc. Available list for the SET tags are as follows,
GA : for Genetic Algorithm setting
CONSTRAINT TBPARAM
9

Eric Polizzi, “Density-matrix-based algorithm for solving eigenvalue problem” P hysical Review B
79, 115112 (2009)
10
Though, one need to provide reasonable NE MAX to save the memory, since NE MAX is used to reserve
memory space for the eigenvector store internally.

10

NN CLASS
RIBBON
BERRY CURVATURE
ZAK PHASE
WCC
Z2 INDEX
PARITY CHECK
EFIELD
WEIGHT
DOS
EIGPLOT
STMPLOT
EFFECTIVE
REPLOT

11

2. Details of the SET
Each SET tag should be ended up by END tag.
GA Setting of control parameters for the Genetic Algorithm used in parameter fitting
procedures. This setting is only effective when LSTYPE is set to GA. Below you
can check the default settings for GA procedures. You can modify as your purpose
or comment out to use default setup as a input.
SET GA
MGEN 100 # maximum number of iterations. (default:500)
NPOP 100 # population in each generation. (default:100)
NGENE 6 # number of genes in chromosomal encoding.
# should be in between 2 to 9. (default:6)
PCROSS 0.85 # crossover probability. [min:max]=[0.0:1.0]
RMUTMIN 0.0005 # minimum mutation rate. [0.0:1.0]
RMUTMAX 0.25
# maximum mutation rate. [0.0:1.0]
RMUTINI 0.005 # initial mutation rate. [0.0:1.0]
MUT_MOD 2
# mutation with 1: fixed rage
# mutation
with 2: fitness dependent
# mutation
with 3: distance dependent
# mutation+creep with 4: fixed rate
# mutation+creep with 5: fitness dependent
# mutation+creep with 6: distance dependent
FDIF 1.0
# relative fitness differential [0.0:1.0]
IREP 3
# reproduction plan 1: Full generational replacement
#
2: Steady-state-replace-random
#
3: Steady-state-replace-worst
IELITE 0
# elitism 0: off, 1: on
# Note that this tag applies only if IREP=1 or 2.
VERBOSE 1 # printed output 0/1/2=None/Minimal/Verbose
CONVTOL 0.0001 # convergence tolerance (must be > 0.0).
CONVWIN 20 # convergence window.
# If CONVWIN consecutive solutions are found
# convergence will be declaired.
# Hence, give larger convergence window to reach minima.
IGUESSF 0.1 # fraction of the initial population to set equal
#to the initial guess. [0.0:1.0]
ISEED 999 # random seed value (must be > 0).
END GA
GA default setup example
STMPLOT Setting of integrated eigen state wavefunction Σ|ψnk (r)|2 plot. Here, the
summation runs over the eigen states within the energy window specified by
STM ERANGE or equivalently STM WINDOW.

12

SET STMPLOT
NGRID 40 40 80 # GRID for CHGCAR-STM output (default = 0.1 ang).
STM ERANGE -1.0:0.0 # energy window
RCUT 6.0 # cut off radius(Å). Beyond this will not be calculated.
REPEAT_CELL T T T # repeat orbital for each lattice vector?
# this logical tag is especially useful if you only
#consider center region of the very large cell.
# If set "T T F", orbital contribution which is periodically
# repeated in a3 direction wll not be considered to calculate.
# Try this option if you have very large cell and you are
# especially interested unitcell ceter.
END STMPLOT
STMPLOT setup example
EIGPLOT Setting of eigen state wavefunction ψnk (r) or charge density |ψnk (r)|2 plot.
SET EIGPLOT
IEIG 3 5
# index(es) n of eigen state.
IKPT 1 10 # index(es) k of k-point.
NGRID 40 40 80 # GRID for CHGCAR output (default = 0.1 ang).
RORIGIN 0.0 0.0 0.0 # shift of the origin of the cube file.
WAVEPLOT .TRUE. # plot wavefunction (.true.) or charge density.
RCUT 6.0 # cut off radius(Å). Beyond this will not be calculated.
END EIGPLOT
EIGPLOT setup example
DOS Setting of Density of states (DOS).
SET DOS
GKGRID 100 100 1
# set Gamma centered Monkhorst-Pack grid
KSHIFT 0.0 0.0 0.0 # shift of k-grid (k-offset)
PRINT_KPTS .TRUE. IBZKPT-DOS_TB # print k-point to the file
PRINT_EIG .TRUE. 1:2 3 # print specified energy surface
PRINT_UNIT RECIPROCAL # k-point unit (or ANGSTROM 1/A)
SMEARING 0.03 # gaussian smearing. Default = 0.025
NEDOS 2000
# number of grid points in energy window (erange)
DOS_EWINDOW -20.0:10.0 # energy window to be plotted
DOS_NRANGE 1:NEIG # energy window to be calculated (integer)
DOS_SPARSE .TRUE. # or .FALSE. use sparse matrix? Default=.FALSE.
DOS_FNAME DOS_TB_projected.dat # output file name for DOS output
PRINT_LDOS .TRUE. 1:8 12 # Print local density of states for given
# atoms. Here, 1 to 8-th atoms and 12-th
# atoms will be resolved.
LDOS_FNAME LDOS_TB_projected # header for LDOS file name.

13

#
#
#
#

atom index will be appended after.
For example, for atom-1,
LDOS_TB_projected_atom.1.dat file will
be generated.

END DOS
DOS setup example
Note1: NEIG variable of the DOS NRANGE tag indicates total number of states, i.e.,
N ORB×ISPINOR, where N ORB is total number of atomic orbitals and ISPINOR = 1
(LSORB = .FALSE.) or 2 (LSORB = .TRUE.). If you want to reduce calculation
loads, you can adjust DOS NRANGE.
Note2: DOS SPARSE tag is only available if -DMKL SPARSE option is activated in the
makefile. If set to .TRUE., DOS NRANGE should be as following:
DOS_NRANGE
or
DOS_NRANGE

1:NE_MAX
NE_MAX

Here, NE MAX is integer value larger than zero and less equal than total number
of states NEIG. This setting will reduce the resources required for hamiltonian
matrix construction and time consuming for the eigenvalue problem by the energy
window constraint in the help of sparse matrix eigen solver. See EWINDOW for
more informations.
Note3: PRINT EIG is only applicable if DOS SPARSE = .FALSE.
EFIELD Setting of E-field.
SET EFIELD
EFIELD 0.0 0.0 0.1 # Efield along z direction
EF ORIGIN 0.0 0.0 0.345690593 # (in fractional coordinate)
#EF CORIGIN 0 0 0 # (in cartesian coordinate)
END EFIELD
EFIELD setup example
WEIGHT Setting of weight factor for the fitting procedures.
KRANGE integer : range of k-point where the weight factor is applied
TBABND integer : range of eigen states of the tight binding calculation
DFTBND integer : range of eigen states of the target energy bands
WEIGHT real : weighting factor
ORBT I ineteger : orbital index. nth orbital states will get a penalty
SITE I ineteger : site index. ORBT Ith orbital state at SITE I atom will get
a penalty. This prohibit certain orbital character to be stabilized from the fitting
procedures.

14

SET WEIGHT
KRANGE :
TBABND :
DFTBND IBAND:FBAND WEIGHT 1
KRANGE :
TBABND 17:20 DFTBND 17:20
WEIGHT 6
KRANGE 20:60 100:140 TBABND 17:20 DFTBND 17:20
WEIGHT 20
KRANGE 1
TBABND 7
ORBT I 1 SITE I Mo1 PENALTY 200
END WEIGHT
WEIGHT setup example
CONSTRAINT TBPARAM Setting for parameter constraints for the fitting and calculation. The value of the specified two parameter will be kept same during the
fitting and tight-binding calculations. If you are using GA method for the fitting procedures (LSTYPE), you are encouraged to give upper bound and lower
bound for each parameters to minimize parameter search field in the randomize
procedures of GA method. The default lower/upper bound for every parameter is
-20.0/20.0. Note that imposing the upper/lower bound for the parameter is not
supported for LMDIF method in the current version.
SET CONSTRAINT
e_py_S = e_px_S # e_py_S is enforced to be same as e_px_S.
e_px_S <= 5.0 # upper bound for e_px_S (applied in GA)
e_px_S >= -5.0 # lower bound for e_px_S (applied in GA)
END CONSTRAINT
CONSTRAINT setup example
If the second argument ‘=’ is replaced by ‘==’ and the third argument is not
present, then this parameter will not be fitted and its initial guess as defined in
PFILE will be fixed during the fitting procedures. Note that, exactly same effect
can be achieved by putting ‘FIXED’ tag at the parameter specification line of the
PFILE, and the detailed explanation can be found in Fixing parmeter of Sec.4.
NN CLASS Setting for nearest neighbor set up.
If the distance between two atomic species (For example, Mo and S) are 1st nearest
type, and its upper limit is 3.2 angstrom (e.g., below this value will be regarded
as the pair), thene we can set as follows,
Mo-S : 3.2

R0 3.171634

Here, number of dash ’-’ occurance between two atomic species indicates the distance class n, and the above example represents 1st nearest hopping between Mo
and S. The following R0 tag defines optimal bonding distance between two neighbor pair. This value will be used in calling the scaling function to get the distance
dependent hopping parameter.

15

SET NN_CLASS
Mo-Mo :
S-S
:
S--S
:
Mo-S
:
END NN_CLASS

3.2
3.28
3.2
2.5

R0
R0
R0
R0

3.171634
3.171634
3.193724
2.429624
NN CLASS setup example

RIBBON Setting for nanoribbon calculations.
At the initial stages of the calculations, TBFIT will generate GFILE-ribbon with
the settings bellow.
NSLAB integer : multiplication of unitcell along each direction
VACUUM real : vacuum spacing along each direction.
KFILE R real : KFILE for ribbon band structure. Default: KFILE
PRINT ONLY R logical : if .TRUE. the geometry file will be generated with
-ribbon suffix to the GFILE and the program will imedietly stops. Default:
.FALSE.
SET RIBBON
NSLAB
VACUUM
KFILE_R
PRINT_ONLY_R
END RIBBON

1 20 1
0 20 0
KPOINTS_RIBBON
.FALSE. or. TRUE.
Ribbon calculation setup

Z2 INDEX Automatic calculations for topological index [ν0 ν1 , ν2 , ν3 ] for 3D or Z2 for
2D via WCC method. The output will be written at Z2.WCC.plane index.dat and
Z2.GAP.plane index.dat. Here, plane index indicates one of six Bi -Bj plane
with Bk = 0 or π. For example, if plane index = 0.0-B3.B1 B2-PLANE, then it
contains WCC information of B1-B2 plane with kz = π.
SET Z2_INDEX
Z2_ERANGE
1:28 # upto occupied
Z2_DIMENSION 3D # or 2D:kz (2D WCC plane perpendicular to kz)
Z2_NKDIV 21 21 # k-grid for KPATH and k-direction for WCC
Z2_CHERN .TRUE. # 1st Chern number of given bands with ERANGE
END Z2_INDEX
Z2 index calculation using WCC method
WCC Wannier Charge Center calculation settings
SET WCC
WCC_ERANGE 1:28

# upto occupied

16

WCC_FNAME WCC.OUT.dat
WCC_FNAME_GAP WCC.GAP.dat # largest gap will be written
WCC_KPATH 0 0 0 1 0 0 # k_init -> k_end (ex, along b1)
WCC_KPATH_SHIFT 0 0 0.5 # kpoint shift along b3 direction
WCC_DIREC 2 #k-direction for WCC evolution (1:b1,2:b2,3:b3)
WCC_NKDIV 21 21 # k-grid for KPATH and k-direction(odd number)
WCC_CHERN .TRUE. # 1st Chern number of given bands with ERANGE
END WCC
Wannier charge center (WCC) setup: kz 0.5 (shift)
ZAK PHASE Setting for Zak phase calculations.
SET ZAK PHASE
ZAK_ERANGE
ZAK_FNAME
ZAK_KPATH
ZAK_DIREC
ZAK_NKDIV
END ZAK PHASE

1:28 # upto occupied
ZAK_PHASE.OUT.dat
0 0 0 1 0 0 # k_init -> k_end (ex, along b1)
2 #k-direction for Zak phase evolution (1:b1,2:b2,3:b3)
21 21 # k-grid for KPATH and k-direction
Zak phase setup

BERRY CURVATURE Setting for Berry curvature calculations.
SET BERRY_CURVATURE
BERRYC_METHOD KUBO # .or. RESTA(not yet supported)
BERRYC_ERANGE 17:18
BERRYC_FNAME BERRYCURV.17-18 # output will be BERRYC FNAME.dat
BERRYC_DIMENSION 2D:B3 # 2D plane perpendicular to kz)
END BERRY_CURVATURE
Berrycurvature setup
PARITY CHECK Setting for Parity eigenvalue calculations for given k-points.
SET PARITY_CHECK
PARITY_KP 0.0 0.0 0.0 G
# Gamma (reciprocal unit)
PARITY_KP 0.5 0.0 0.0 M1
# M1
(reciprocal unit)
PARITY_KP 0.0 0.5 0.0 M2
# M2
(reciprocal unit)
PARITY_KP 0.5 0.5 0.0 M3
# M3
(reciprocal unit)
ORIGIN_SHIFT 0.0 0.0 0.0 # origin of the system (direct coord)
ROTATION1 -1 0 0 # Rotation matrix (R) for inversion
ROTATION2 0 -1 0 # => R*X=-X (invert coordinate)
ROTATION3 0 0 -1 # => X:direct coord ; R: integer 3x3 array
END PARITY_CHECK
Parity check setup
Note:
• You can add (or remove) PARITY KP tag if you want to get the parity information

17

for another TRIM (time reversal invariant momenta: -k=k+G) point.
• To use this functionality and to get the meaningful results, your system should
have inversion symmetry.
• The ROTATION tag is optional, the default is
󰀵
󰀶 󰀵
󰀶
ROT AT ION 1
−1 0
0
R = 󰀷 ROT AT ION 2 󰀸 = 󰀷 0 −1 0 󰀸
ROT AT ION 3
0
0 −1
.
EFFECTIVE Setting for evaluating effective hamiltonian and its eigenvalues. This job
will be performed by the Löwdin downfolding technique11 . Note that in the current version, only the energy-dependent effective Hamiltonian will be constructed,
where the energy is representing one’s interested region.
SET EFFECTIVE HAM
EFF_ORB C:pz # downfolding will be performed on these orbitals
EFF_EWINDOW -2:2 # energy window of interest (e_center=-2+2/2)
END EFFECTIVE HAM
Effective Hamiltonian construction
REPLOT Setting for replotting where DOS/LDOS/PBAND represents density of states
(DOS), local density of states (LDOS), and atom-projected band structure (PBAND)
by reading band structure.dat or band structure.up(dn).dat file, respectively.
SET REPLOT
FILE_FORMAT bin

# let code know what kind of
# band_structure_TBA file to be read.
# if bin : band_structure_TBA.(up/dn).bin
# if dat : band_structure_TBA.(up/dn).dat
# will be loaded. Default: dat
REPLOT_BAND .TRUE. wf # replot band structure
# with wavefunction coefficient (with tag wf). Instead of
# wf tag, one can also request rh, mx, my, mz, where the
# meaning of each tag can be found in LORBIT tag.
# If no additional tag is specified, set to rh by default.
# If no tag is specified, only energy band without orbital
# information will be printed out. The output file will be
# written in band_structure_TBA.replot_wf.(up/dn).dat file
# with ascii format.
# Note that to activate this tag, FILE_FORMAT tag should be
# set to bin and corresponding file band_structure_TBA.replot
# .(up/dn).bin should be exist in the folder.

11

P.-O. Löwdin, J. Chem. Phys. 19, 1396 (1951)
E. Zurek, O. Jepsen, O. K. Anderson, Chem. Phys.

18

Chem.

6, 1934 (2005)

REPLOT_PROJ_BAND .TRUE. 1:8 12 # replot projected band structure
# for given atoms and their sum
REPLOT_DOS .TRUE. # Recalculate DOS using pre-calculated
# band_structure file, e.g.,
# band structure.dat (nonmagnetic or
# non-collinear) or band structure.up/dn.dat
# (spin polarized case).
REPLOT_LDOS .TRUE. 1:8 12 # Print local density of states for
# given atoms. For example, here,
# 1st to 8-th atoms and 12-th
# atoms will be resolved.
SMEARING 0.03 # gaussian smearing. Default = 0.025
NEDOS
2000 # number of grid points in energy window (erange)
DOS_EWINDOW -20.0:10.0 # energy window to be plotted
REPLOT_SLDOS .TRUE. # spatial LDOS within EWINDOW
REPEAT_CELL 20 20 1 # if REPLOT_SLDOS = .TRUE.,
# cell periodicity for visualization
RORIGIN 0.0 0.0 0.0 # shift of origin of atomic coordinates
# (fractional to unit vector a1, a2, a3,
# respectively).
BOND_CUT 1.8 # bond length <= bond_cut will not be written in
# BOND.replot.dat Default: 3.0 (ang)
END DOS
DOS setup example
Note 1: This tag is useful if you want to get series of DOS/LDOS calculations
with respect to the SMEARING and energy window. If this SET is activated, other
calculations will be ignored and the program stops immediately after the calculation.
Note 2: If REPLOT DOS = .TRUE. or REPLOT LDOS = .TRUE. or REPLOT SLDOS =
.TRUE., then it is encouraged to set SMEARING, NEDOS, DOS EWINDOW, otherwise the
default values will be used.
Note 3: If REPLOT SLDOS = .TRUE., then, REPEAT CELL, RORIGIN, BOND CUT should
be set together, otherwise the default values will be used.
Note 4: The output file names are as follows:
• if REPLOT DOS = .TRUE. → DOS.replot.dat
• if REPLOT LDOS = .TRUE. → LDOS.replot.ATOM INDEX.dat, where ATOM INDEX
is the atom number. The example can be found in the “Example/Graphene/
DENSITY OF STATE/replot” of your example folder.
• if REPLOT DOS = .TRUE. → SLDOS.replot.dat and BOND.replot.dat.
The example can be found in the “Graphene/QSH/NANORIBBON/
zigzag ribbon/SPATIAL LDOS REPLOT” of your example folder.

19

Note 5: The multiple declaration of REPLOT BAND, REPLOT PROJ BAND and REPLOT LDOS
tag result in multiple band structure TBA.replot ??.dat,
band structure TBA atom.sum#.dat and LDOS.replot.sum#.dat files, respectively, where ?? represents one of {rh, mx, my, mz, wf} tag you specified and
represents the order of declaration of the tag. The concept of multiple declaration
is same as in PROJ BAND tag.
Note 6: The purpose of REPLOT BAND tag is clear as it only read .bin file and
write .dat. That is, for converting binary file format into human readable ascii
format. PROJ BAND.

3. Details of the format of GFILE
Atomic orbital setup string
Hydrogen-like atomic orbital can be specified for the orbital basis. The possible
orbital basises are12 :
s px py pz dz2 dxy dx2 dxz dx2
0 0.0 0.0 s px py pz
0 0.0 0.5 s px py pz

# s, px, py, and pz orbitals at ATOM_A
# s, px, py, and pz orbitals at ATOM_B

setup of atomic orbital basis in GFILE
Custumized atomic orbital setup string
If someone does not want to use Slater-Koster type interatomic hopping parameter, customized atomic orbital can be defined instead. In this case, distance
and hopping pair dependent parameterization should be properly defined in the
PFILE.
W arning : This is experimental feature and on the development stages (do not
use).
0 0.0 0.0 cp1
0 0.0 0.5 cp1

# cp1 orbital at ATOM_1
# cp1 orbital at ATOM_2

setup of custumized atomic orbital name cp1
MOMENT tag real
Magnetic moment for Each atomic orbital can be assigned as follows,
collinear case: 0.0
noncollinear case: 0.0 0.0 0.0 [M θ φ]
12

Please note that current version does not support the f orbitals. However, we will include f in the
future release of TBFIT. For the Slater-Koster tables of f orbitals, please see [K. Lendi, Phys.
Rev. B 9, 2433 (1974)].

20

0 0.0 0.0 px py pz moment 0 0 1 # spin-up for pz
0 0.0 0.5 px py pz moment 0 0 -1 # spin-dn for pz
usage of moment tag in GFILE with collinear magnetism
0 0.0 0.0 px py pz moment 0 0 0
0 0.0 0.5 px py pz moment 0 0 0

0 0 0 1 0 0
0 0 0 -1 0 0

# spin-up for pz
# spin-dn for pz

usage of moment tag in GFILE with noncollinear magnetism
MOMENT.C tag real
Similar to MOMENT but in noncollinear case, the 1st , 2nd , and 3rd value represents, mx , my , and mz , respectively. Here, x, y, and z represents the cartesian
axis.
noncollinear case: 0.0 0.0 0.0 [Mx My Mz ]
0 0.0 0.0 px py pz moment.c 0 0 0
0 0.0 0.5 px py pz moment.c 0 0 0

0 0 0
0 0 0

0 0 1 # spin-up for pz
0 0 -1 # spin-dn for pz

usage of moment.c tag in GFILE with noncollinear magnetism

4. Details of the format of PFILE
ONSITE parameters real
Onsite prameters for each atomic orbital should have the prefix e and joint with
the name of the orbital. The suffix should be the atomic species where the orbital
placed.
e_dx2_Mo

-0.34

HOPPING parameters real
The tight binding hopping parameter used in the calculations.
case1.) IS SK .TRUE.
In this case, Slater-Koster type parameter should be specified properly. The
syntax is as follwos:
hopping-type_nn-class_AB
hopping-type will have one of following prefix: { ss, sp, sd, pp, pd, dd }, and
one of following suffix: {s, p, d }, which implies σ-, π-, and δ-type inteaction.
nn-class specifies the distance class. See NN CLASS for the details. AB specifies
the two atomic species (A and B atoms) where the orbital hopping take place. For
example, for the ddδ Slater-Koster parameter involved with the hopping process

21

between the dz2 orbital in Mo atom and dyz orbital in Mo, and they are 2nd neighbor
pair, then the parameter should be the following form:
ddd_2_MoMo

-0.2

case2.) IS SK .FALSE.
W arning : This is experimental feature and on the development stages (do not
set to .FALSE.).
In this case, the customized atomic orbital is assumed and the following scheme
should be applied:
hopping-type_nn-class_AB
Here, the basic structure is same as case1.), however, the syntax of hopping-type
is slightly different. That is: the prefix should have cc since this indicates customized
hopping parameters. For the suffix, one should put user defined letter that characterize the hopping. For example,
cca_2_BiBi

0.01

represents the hopping between 2n d neighbor Bi atoms with the ‘a‘ type of rule
which characterizes hopping pair. If you want to setup the rule, you have to write
the conditions to the source code: get cc param.f90.

#
#
#
#
#
#
#

SET UP THE ‘USER’ DEFINED HOPPING ‘RULE’
NOTE: In THIS example, hopping between Bi-Bi atom along
x-direction characterized by hopping distance at around
8.6 Å (cca_2_BiBi) with nn class = 2 will be considered.
Following ‘if’ routine will find the parameter named
cca_2_BiBi in the ’PFILE’ and will asign its number as
the ‘parameter_index’.
[...]
elseif( (dij .gt. 8.5) .and. (dij .lt. 8.7) .and. &
(ci_atom .eq. cj_atom) ) then
call get_param_name(cc_custom, param_class, ‘a’, &
nn_class, ci_atom, cj_atom, &
flag_scale)
[...]
source code example: get cc param.f90

LOCAL POTENTIAL: LOCAL.POT parameters real
If you want to apply local potential to the particular atomic site or particular
orbital, then you can simply turn on LOCCHG (.TRUE.) and write local.pot

22

tag together with the amount of local potential to be applied for each atomic ori
bitals in the GFILE. Next, you have to provide proper scaling parameter (Uonsite
)
for the local potential, since the local potential is applied on your Hamiltonian
i
as: e′ionsite = eionsite + eiloc.pot × Uonsite
, i.e., it modifies onsite energy eionsite to
′i
i
eonsite . Here, Uonsite should be defined in your PFILE so that the syntax is
local U orbital-type atom-name. orbital-type is one of s, p, or d type of
orbital and atom-name is the name of atomic species you want to apply the local
potential.
0 0.0 0.0 px py pz local.pot 1 1 1 1
0 0.0 0.5 px py pz local.pot -1 -1 -1 -1

# positive loc.pot
# negative loc.pot

example of local.pot tag in GFILE
local_U_p_S

1.0
example of local.pot parameter in PFILE

SOC parameters real
case1.) IS SK .TRUE.
Every spin-orbit coupling parameters in Slater-Koster method should have the
prefix with lambda and proper orbital information p (as a joinder, for example
p orbital) and species information S(as a suffix, for example Sulpur atom) to
precisely indicating the atomic orbital where the SOC effect will be applied.
lambda_p_S

0.2

case2.) IS SK .FALSE.
In the case of user defined hopping parameter (orbital prefix start with c, see Sec.3
for the details) has been defined in the GFILE, SOC can be considered by setting
up the Rashba and in-plane spin-orbit interaction. For Rashba type SOC, the
prefix lrashba should be joint with nearest neighbor class n and hopping pair as
follows.
lrashba_c_2_BiBi

0.2

Above setting represents, Rashba type spin-orbit coupling between the custum
type orbitals with c-prefix of the atom Bi and Bi.
Fixing parmeter
If one want some parameters not to be fitted during the fitting procedures, one can
fix thoes parameters by adding FIXED or F. For example, if you want lambda p S
to be kept as its initial value, then, set this parameter as follows,

23

lrashba_c_2_BiBi

0.2 FIXED

Example of PFILE
e_dz2_Mo
e_dx2_Mo
e_dxy_Mo
e_dxz_Mo
e_dyz_Mo
e_pz_S
e_px_S
e_py_S
e_s_S
dds_1_MoMo
ddp_1_MoMo
ddd_1_MoMo
pps_1_SS
ppp_1_SS
pds_1_MoS
pdp_1_MoS
sss_1_SS
sps_1_SS
sss_2_SS
sps_2_SS
sds_1_MoS
lambda_d_Mo
lambda_p_S

-0.34636955
-0.70447045
-0.70447045
-0.17913534
-0.17913534
-2.96500556
-1.47877518
-1.47877518
-10.51138070
-1.04598377
0.44731993
0.10237760
0.62323972
0.03251328
-2.32384045
0.97229680
-0.57287106
-0.33278732
-0.45573348
-0.21906117
2.66111706
0.08014531
0.07567002

Fixed
Fixed

example of PFILE: PARAM FIT.dat for MoS2 (IS SK .TRUE.)
e_cp1_Bi
ccb_1_BiBi
cca_2_BiBi
ccy_3_BiBi
ccx_4_BiBi
lrashba_c_1_BiBi
lrashba_c_2_BiBi
lrashba_c_3_BiBi
lrashba_c_4_BiBi

-0.09222821
0.01723235
0.13290800
-0.0
-0.03544401
-0.01119142
0.04914549
-0.00632175
-0.00636364

example of PFILE: PARAM FIT.dat for Bi/Si(110) (IS SK .FALSE.)

24

Part II.
Examples
1. Graphene with s and p orbitals
1.1. Parameter fitting
1.1.1. Prepare main control file: INCAR TB
TBFIT reads INCAR TB in the initial stages of the calculations to set up basic control parameters. In addition, GFILE, KFILE, and PFILE is mandatory for the normal run, and
it should be predefined in your INCAR TB. For the fitting procedures, TBFIT should be
.TRUE.. Then, one has to choose the fitting algorithm LSTYPE among LMDIF and GA. In
this example, we will take LMDIF as a fitting algorithm. For the GA method, please find
the example in ”Example/Graphene/BAND FIT/Step 1.genetic algorithm/” of your
example folder.
The users must pay some time to ”SET WEIGHT” which is quite important in fitting
procedures. If you want to fit more tightly than the other regions of your target band
structure, you can put much higher value for that particular region. In this example,
we have 16 atomic orbitals (2 atoms × 4 orbitals per atom {s, px , py , pz } × 2 spinors)
in total. The target band structure, which is calculated by VASP, also have 16 band
structure. In the INCAR TB file below, we give 5 weights.
The first line,
KRANGE : TBABND : DFTBND 1:16 WEIGHT 1
indicates that the all the k-range (:), and all the tight binding band structure (:), and
first sixteen bands (1:16) of DFT target band structure will be weighted with ”1”.
And the second line,
KRANGE : TBABND 1:8 DFTBND 1:8 WEIGHT 7
indicates that the all the k-range (:), and first eight tight binding bands (1:8) will be
targeted to the first eight (1:8) of DFT band structure with weight of ”7”. Hence, the
valence bands will be much more tightly fitted.
And the third line,
KRANGE 10:51 TBABND 5:10 DFTBND 5:10 WEIGHT 27
indicates that the particular k-range (10:51, around M -K rigion), and 5-th to 10-th tight
binding bands (5:10) will be targeted to those of DFT band structure with much larger
weight of ”27”. The bands near the Fermi level and near the Dirac point will be fitted
tightly. For the other lines, the same rules can be applied.
Next, the basic control tags should be informed. For example, MITER, PTOL, FTOL,
PFILE, POFILE, EFILE ..., etc.

25

And then, one should specify whether your system is one of followings: nonmagnetic,
noncollinear, collinear, which can be defined by TYPMAG, together with LSORB
which is for the spin-orbit coupling effect. If you have put some LOCAL.POT tag in
your PFILE to consider some local potential, you should turn on LOCCHG to .TRUE.,
and add some relevant parameters (see LOCAL.POT for the details) into the PFILE
to manage the strength of the local potential. The tag IS SK is to make sure that the
hopping integral evaluation will follow the Slater and Koster’s rule13 . Note that in the
current version, IS SK = .FALSE. is experimental and under developing for the ease of
use, so recommend to leave it to .TRUE..
Now you have to make some rule for the nearest neighbor (nn) hoppings by setting
up “SET NN CLASS” which defines interatomic hopping. Once you set nn pair, the
necessary hopping parameter for those hopping will be automatically determined and
TBFIT will trying to find those parameters in your PFILE. The detailed syntax for the
naming of hopping parameters can be found in Section-4: PFILE-detail.
Finally, with “SET CONSTRAINT TBPARAM” tag, one can add some constraint
rule between parameters or restrict the magnitude of the parameters by applying upper/lower bound to them. For example, here, we have assumed that every p orbitals
shall have same onsite energy. So by setting “e px C = e pz C”, during the calculations,
e px C value will be kept same as e pz C.
INCAR TB : control tags
TBFIT
LSTYPE
MITER
PTOL
FTOL

.TRUE.
LMDIF
300
0.000000001
0.000000001

GFILE
KFILE
PFILE
EFILE
POFILE

POSCAR-TB
KPOINTS BAND
PARAM FIT.dat
DFT BAND.dat
PARAM_FIT.new.dat

LOCCHG .TRUE.
TYPMAG noncollinear
LSORB .TRUE.
LORBIT .FALSE.
IS SK
13

.TRUE.

J. C. Slater and G. F. Koster,‘‘Simplified LCAO Method for the Periodic Potential
Problem’’, Phys. Rev. 94, 1498 (1954)

26

SET WEIGHT
KRANGE
KRANGE
KRANGE
KRANGE
KRANGE
END WEIGHT

:
:
10:51
20:40
1:8 53:80

SET NN CLASS
C-C
: 1.8
END NN CLASS

TBABND
TBABND
TBABND
TBABND
TBABND

:
1:8
5:10
1:4
3:6

DFTBND
DFTBND
DFTBND
DFTBND
DFTBND

1:16
1:8
5:10
1:4
3:6

R0 1.4145

SET CONSTRAINT TBPARAM
e_px_C
= e_pz_C
e_py_C
= e_pz_C
e_s_C
>= -10
e_px_C
>= -10
e_py_C
>= -10
e_pz_C
>= -10
sss_1_CC
>= -10
sps_1_CC
>= -10
pps_1_CC
>= -10
ppp_1_CC
>= -10
lambda_p_C
>= -10
e_s_C
<= 10
e_px_C
<= 10
e_py_C
<= 10
e_pz_C
<= 10
sss_1_CC
<= 10
sps_1_CC
<= 10
pps_1_CC
<= 10
ppp_1_CC
<= 10
lambda_p_C
<= 10
END CONSTRAINT TBPARAM
example of INCAR-TB for Graphene
1.1.2. Prepare parameter file: PARAM FIT
PARAM FIT.dat : PFILE
e_s_C
e_px_C
e_py_C
e_pz_C

0.80302000
0.24526000
0.24526000
0.24526000

27

WEIGHT
WEIGHT
WEIGHT
WEIGHT
WEIGHT

1
7
27
50
10

sss_1_CC
sps_1_CC
pps_1_CC
ppp_1_CC
lambda_p_C

-6.83068000
6.20074000
4.02474000
-2.55074000
0.00000000
example of PFILE for Graphene

POSCAR-TB : GFILE
# Graphene with honeycomb lattice
1.00000000000000
2.45
0.0000000000000000
0.0
1.2250000000000000
2.1217622392718746
0.0
0.0000000000000000
0.0000000000000000
15.0
C
2
Direct coordinate
0.16666666667 0.16666666667
0.0
s px py pz
-0.16666666667 -0.16666666667
0.0
s px py pz
example of GFILE for Graphene
KPOINTS BAND : KFILE
# k-points along high symmetry lines
20 # number of division between each line segment.
Line-mode
Reciprocal
0 0 0
G
0.50000000 0.500000000 0
M
0.50000000 0.500000000 0
M
0.33333333333333333333 0.66666666666666666667 0 K
0.33333333333333333333 0.66666666666666666667 0 K
0.00000000 0.000000000 0
G
0.00000000
0.00000000

0.000000000 0
0.000000000 0.5
example of KFILE for Graphene

G
A

Note that the file syntax is exactly same as KPOINTS file of VASP program. See
here for the details.
DFT BAND.dat : EFILE
For the details of the EFILE, please go to EFILE section and also please find the
example file in ”Example/Graphene/BAND FIT/Step 2.lmdif method/” of your
example folder.

28



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.3
Linearized                      : No
Page Count                      : 28
Title                           : 
Author                          : 
Subject                         : 
Producer                        : macOS Version 10.14.5 (Build 18F132) Quartz PDFContext
Creator                         : TexpadTeX CGPDFContext backend: 457
Create Date                     : 2019:05:29 17:53:39Z
Modify Date                     : 2019:05:29 17:53:39Z
EXIF Metadata provided by EXIF.tools

Navigation menu