The EXCITING Code FAQ
Please use the EXCITING forums for any questions not included here. Note that these questions apply to the latest version of the code.
0. General questions
1. Compiling the code
2. Running the code
3. Crystal structure
4. Plotting output data
5. Magnetism
6. Forces, phonons and structural optimisation
0. General questions
0.1 How can I obtain the code?
Download the latest version from SourceForge.net.

0.2 How can I be informed of new releases?
You can join the mailing list for notification of new releases, features and bugs in the code.

0.3 What are the units used by the code?
Unless otherwise specified, all the units are atomic. In particular, the electron rest mass, me ; the electronic charge, e ; Planck's constant over two pi, h-bar; and the electrostatic constant 4πε0 all equal one. The unit of energy is the Hartree (Ha) and the unit of length is the Bohr. Rydbergs, electron volts (eV) and Ångströms are never used.

0.4 How does EXCITING compare with other FP-LAPW codes?
EXCITING has similar capabilities as other codes, but is specifically designed to make the implementation of new developments in DFT as easy as possible. To this end, the code is cleanly written, fully documented and open source.

0.5 How is the documentation of the code handled?
Every subroutine and function has a LaTeX header which can be read by the Protex perl script and compiled into a single document. Use the command make doc in the exciting/src directory to produce the file exug.dvi.

0.6 Is there a graphical user interface (GUI) available?
No. The code requires a single user input file, exciting.in, which for most cases should be easier to understand than a GUI.

0.7 If I modify the EXCITING code do I have to release my modifications?
No. The GPL does not oblige you to release your modified version, it simply requires that if you do, it should be under the GPL.

0.8 Is the code suitable for production use?
Yes, for many purposes. It is always good practice to check the consistency of the results with other codes. Features which are marked as experimental should not be used for production.
1. Compiling the code
1.1 How do I compile the code?
Run the setup script in the exciting directory. You can then edit the file make.inc and set the compiler options for maximum performance on your system. Finally run the command make all. This will compile the main code as well as several auxiliary programs. The executable exciting is located in the src directory and can be copied to a location in the executable search path.

1.2 What do the auxilliary programs do?
The auxiliary programs include Spacegroup for producing crystal geometries from spacegroup data, Species for generating species files, and EOS for fitting equations of state to energy-volume data. They can be found in their respective directories.

1.3 Why does the code not compile on my computer?
EXCITING is written in strict Fortran 90 syntax and should compile without warnings on all F90 compilers. Some compilers may have difficulty with the BLAS and LAPACK libraries. In this case you will have to refer to your compiler manual and adjust the F77 options in the file make.inc. If the main part of the code fails to compile then please contact one of the authors.

1.4 Which version of BLAS/LAPACK does the code require?
Version 3.0. We strongly recommend the use of machine-optimised libraries as EXCITING uses them heavily. If these are not available then GotoBLAS or ATLAS can be used instead.

1.5 Which fast Fourier transform (FFT) package does EXCITING use?
It uses a modified version of FFTPACK5. This is a highly efficient implementation of an in-place N-dimensional complex FFT. However you can easily replace this with your own machine-optimised FFT package. See the routine zfftifc for details.
2. Running the code
2.1 How do I restart a calculation?
Set tasks=1 and restart. You can change almost any parameter in the input files except the number of atoms.

2.2 How can a running calculation be stopped cleanly?
Create an empty file STOP in the running directory (use touch STOP). The code will then complete the current self-consistent loop, write the file STATE.OUT and stop.

2.3 How can I force a running calculation to write STATE.OUT?
Create an empty file WRITE in the running directory (use touch WRITE). You will know STATE.OUT has been written when WRITE disappears.

2.4 How can I run EXCITING on a parallel computer?
EXCITING uses OpenMP to run in parallel and your Fortran compiler must support this. Simply set the appropriate compiler options in make.inc and the environment variable OMP_NUM_THREADS to the number of threads you require. OpenMP cannot be used on a distributed cluster at this stage (although there is a new Intel compiler which supports this). Note that the parallelisation is coarse-grained and performed mostly over the k-point set. Parallel BLAS, LAPACK and FFT libraries can also be used for fine-grained parallelism. Phonon calculations can be spread natively over a distributed system, so long as each node sees the same directory.

2.5 Why do my OpenMP runs keep crashing?
We think this is because local variables for each thread are allocated on the stack rather than the heap, and some compilers don't allocate enough stack space. Set the compiler options in make.inc to increase the available stack space. A second possibility is that your LAPACK library is not thread-safe: try compiling the code using the native BLAS/LAPACK libraries.

2.6 How can I specify a path for use as scratch space?
Use the variable scrpath. The eigenvalue, eigenvector and occupancy files will be written to this directory. Note that you will need to retain these files in order to perform further tasks.

2.7 Why do I keep getting the warning error

Warning(occupy): valence eigenvalues below evalmin for s.c. loop ###

If this warning goes away after the first few iterations then the results may be trusted. If it persists then this indicates that
• The muffin-tins are highly mismatched i.e. there are both large and small muffin-tins in the unit cell. This can be rectified by either setting autormt=.true. in exciting.in; or increasing the smallest and decreasing the largest rmt in the species files
gmaxvr is too small: increase it in small steps until the warning disappears.
rgkmax is too large: decrease it in small steps until the warning disappears.

2.8 How can I make EXCITING run faster?
• Adjust the compiler options in make.inc for optimal performance
• Use machine optimised versions of BLAS, LAPACK and the FFT library
• If you are running on a network file system, then set the scratch path (scrpath) to a local directory
• Reduce rgkmax (but make sure the results are still converged)
• Run the code in parallel using OpenMP

2.9 How can I run the code without updating the density and potential in STATE.OUT?
Set maxscl to 1, this will run one self-consistent loop but wont write the density and potential at the end of it. The eigenvalues and eigenvectors are updated however.

2.10 How can I make the code write STATE.OUT after every iteration?
Normally, the density and potentials are written to the file STATE.OUT only after completion of the self-consistent loop. By setting nwrite to a positive integer the file will be written during the loop every nwrite iterations.
3. Crystal structure
3.1 The input file requires the lattice vectors and the atomic positions. How can I set up the geometry using only the lattice parameters, spacegroup number and Wyckoff coordinates?
This is not incorporated directly in the code. Instead, you can use the auxiliary program Spacegroup to generate the vectors and positions in this way. This will also produce an output file which can be viewed with XCrySDen or V_Sim. The Spacegroup utility also allows for the construction of supercells. See the Spacegroup Guide for more details.

3.2 I have used the conventional unit cell instead of the primitive cell. Is EXCITING smart enough to use the smaller cell?
Not by default. You have to set the variable primcell to .true. and the conventional cell will then be automatically reduced to the primitive cell.

3.3 My muffin-tins overlap, what should I do?
You can either set the muffin-tin radii in the relevant species files, or set autormt to be .true. and the optimal radii will be determined automatically.

3.4 How can I fit an energy-volume equation of state?
Use the EOS utility provided.

3.5 How can I set up a molecule?
Set the input variable molecule to .true. The atomic positions in the atoms block are then assumed to be in Cartesian coordinates. Lattice vectors need not be specified, they are set up automatically in an orthogonal unit cell with side lengths determined by the variable vacuum. See the Users' Guide and examples for more details.
4. Plotting output data
4.1 How can I plot the 1D output of the code?
The 1D plotting output is always in the form of a simple text-based list. We use the open source program Grace for producing 1D plots. The plot files can be imported into Grace without modification.

4.2 How can I plot the 2D/3D scalar or vector field output of the code?
The 2- and 3-dimensional output of the code always consists of a text-based list of the coordinates and the scalar or vector value of the field. We have sucessfully used the open source package OpenDX for all types of 2 and 3D plots.

4.3 Where is the Fermi level in the DOS, band structure and Fermi surface plots?
Always at zero.

4.4 Can EXCITING produce a band structure plot with line thickness proportional to the s, p, d or f character of a particular atom?
Yes, use tasks=21. Band structures are then plotted to files BAND_Sss_Aaaaa.OUT for atom aaaa of species ss, which include the band characters for each l component of that atom in columns 4 onwards. Column 3 contains the sum over l of the characters.

4.5 Why is my energy vs. volume curve jagged?
This is most often due to poor convergence with respect to the number of augmented plane waves and k-points, see J. Phys. Conden. Matt. 2, 4395. Increase rgkmax or ngridk, or both.

4.6 How do I plot a total or partial density of states (DOS)?
Set tasks to 10 and run the code. This will produce a total and partial spin-resolved density of states. Note that to improve the quality of the DOS, you can first run one self-consistent loop (set maxscl to 1 and tasks to 1) with a larger k-point set. This will not update the density in STATE.OUT but will produce a new set of eigenvalues and Fermi energy. Compute the DOS as usual afterwards. See also the dos block in the Users' Guide.

4.7 How can the partial DOS be resolved into irreducible representations (IR) like eg and t2g?
The partial DOS file PDOS_Sss_Aaaaa.OUT contains (l,m)-resolved projections which correspond to the IR of the site symmetry for atom aaaa of species ss. To find out which projections belong to the same IR, consult the file ELMSYM.OUT. This file lists the eigenvalues of a random matrix in the spherical harmonic basis which has been symmetrised with the site symmetries. Degenerate eigenvalues indicate which projections belonging to the same IR. This feature can be switched off by setting bcsym to .false.

4.8 Why does my plot not match well at the muffin-tin boundary?
You can improve the matching by increasing lmaxapw, lmaxvr, rgkmax, gmaxvr, or the number of points in the muffin-tin which is set by nrmt in the species files. If you change any of these values, you must reconverge your calculation before plotting. ELF plots are also sensitive to lradstp, which sets the step size for the coarse radial mesh. Setting lradstp=1 will improve the continuity of the ELF plot.
5. Magnetism
5.1 How is magnetism implemented in the code?
EXCITING handles magnetism in a unique way thanks to an idea of Lars Nordström. In the first-variational step, the Hamiltonian matrix is set up in the APW basis using only the scalar effective potential, vs. The eigenvalues and wavefunctions obtained from this are then used as a basis for the second-variational Hamiltonian in which the effective magnetic field is included as σ⋅Bs. This Hamiltonian is also diagonalised and full spinor wavefunctions obtained which are then used to determine the density, ρ, and magnetisation vector field, m.

5.2 What is the purpose of the external magnetic fields?
By default, the global field bfieldc and the individual muffin-tin fields bfcmt are added to the second variational Hamiltonian only as a means of breaking spin symmetry. These fields are considered infinitesimal and their associated energy is not added to the total. Therefore they should be made only as large as is required to break spin symmetry.

5.3 Supposing I want my external magnetic fields to be finite and have their energy added to the total?
Just set bfinite to .true.

5.4 How do I include spin-orbit coupling?
Set spinorb to .true. The σ⋅L term is then included in the second-variational step.

5.5 How do I perform an anti-ferromagnetic magnetic (AFM) calculation?
You need at least two atoms in your unit cell. Point the magnetic field on the first atom in the +z direction and on the second atom in the -z direction.

5.6 How do I perform a fixed spin moment (FSM) calculation?
Set fixspin to be .true. and specify the moment you want with the variable momfix. Note that you must specify all three components of momfix and in the same direction as the external magnetic field.

5.7 Can I perform a FSM calculation with spin-orbit coupling and non-collinear magnetism switched on?
Yes.

5.8 Does non-collinear magnetism work with GGA functionals?
Yes, although strictly speaking it should only be used with LSDA functionals because a different spin-rotation is applied to the magnetisation at every point in space.

5.9 How can I run a spin-spiral calculation
Set spinsprl to be .true. and select the particular q-vector you want with vqlss in reciprocal lattice coordinates. This is still an experimental feature.

5.10 Why is the degeneracy slightly lifted of states I know are degenerate in the spin-polarised case?
Assuming the states in question are supposed to be degenerate, the lifting is due to the exchange-correlation effective field being coverted from spherical harmonics to spherical coordinates. This always entails some small breaking of symmetry. The effect can be made negligible by increasing lmaxvr.
6. Forces, phonons and structural optimisation
6.1 Do forces work with spin-orbit coupling and non-collinear magnetism?
Yes.

6.2 How can I constrain the positions of particular atoms during a structural optimisation run?
Set the atomic mass to a negative value in the species files. The code considers these to have infinite mass and does not move them.

6.3 How can I restart a structural optimisation run?
Replace the geometry information in exciting.in with that in GEOMETRY_OPT.OUT. You can simply append this to the file with
cat GEOMETRY_OPT.OUT >> exciting.in
because the code will always use the last instance of any input variable. Then set tasks=3 and rerun.

6.4 The incomplete basis set (IBS) corrections take a long time to compute, is it possible to switch them off?
Yes, just set tfibs to .false.

6.5 I'm only interested in certain phonon modes, how can I avoid calculating all the others?
As with the constrained structural optimisation, make the atomic mass in the species file negative. The code will then assume these masses are infinite and the corresponding rows and columns in the dynamical matrices are zero.

6.6 Is the acoustic sum rule enforced when computing phonon modes?
Yes.

6.7 Why are phonon calculations so slow?
This is because an automated supercell approach to computing the dynamical matrices is used. The idea is to compute the phonon modes on a relatively coarse grid (eg. 4x4x4) and interpolate to arbitrary q-points. Always choose the grid numbers to be multiples of each other i.e. 4x4x8 is efficient but 2x3x5 will be very inefficient. By far the most time consuming step is the diagonalisation of the supercell Hamiltonian. Therefore the planewave cut-off variable rgkmax should be made as small as possible (but no smaller!). Dynamical matrix calculations can also be spread across a cluster of nodes which share the same directory.

6.8 Is the LO-TO splitting in polar semiconductors correctly calculated?
No. This will be introduced in the near future.