next up previous contents
Next: 10 Examples Up: 2 Detailed description of Previous: 8 Analysis, Properties and   Contents


9 Utility Programs

1 symmetso

This program helps to setup spin-orbit calculations in magnetic systems. Since SO may break symmetry in certain spacegroups, it classifies your symmetry operations into operations A, which do not invert the magnetization (identity, inversion, rotations with the rotation axis parallel to magnetization), B, which invert it (mirror planes) and C, which change the magnetization in some other way. (Note: magnetization is a result of a circular current, or equivalently, an axial vector resulting from a vector product $\hat z \sim \hat x \times
\hat y$). symmetso will keep all A-type and throw away all C-type symmetry operations. Depending on the presence of inversion symmetry it will keep (inversion is present) or remove the B-type operations. Finally, symmetso uses the remaining symmetry operations to check/generate equivalent atomic positions (it can happen that some equivalent atoms become non-equivalent after inclusion of SO interaction).

In essence, it reads your case.struct and case.inso (for the direction of magnetization) files and creates an ordered case.struct_orb file with proper symmetry and equivalent atoms. It also generates a file case.ksym, which is a struct file with valid operations to generate a proper k-mesh using ''x kgen -so''. In addition proper input files case.in1, case.in2,, case.vspup/dn, case.vnsup/dn, case.clmsum, case.clmup/dn are generated, so that you can continue with runsp -so without any further changes.

1 Execution

The program symmetso is executed by invoking the command:
symmetso symmetso.def or x symmetso [-c]
Usually it is called from the script initso_lapw and thus needs not to be invoked manually.

2 pairhess

This program was contributed by:

James Rondinelli, Bin Deng and Laurence Marks \...
...ilinglist. If necessary, we will communicate
the problem to the authors.}

This program creates an approximate hessian matrix (in .minpair) for structure minimization using the PORT option. It uses a harmonic model with exponentially decaying bond strenght and in many cases reduces the number of geometry steps during min_lapw significantly. It is described in detail in Rondinelli et al. 2006.

For its usage see the comments in sect. 5.3.2.

1 Execution

The program pairhess is executed by invoking the command:
pairhess pairhess.def or x pairhess [-copy]

The switch -copy copies .minpair to .minrestart and .min_hess, which are needed in min_lapw.

2 Dimensioning parameters

The following parameters are used in

NATMAX max. number of atoms)
NEIGMAX max number of neighbours

3 Input

pairhess uses an optional input file case.inpair, which is needed only for an experienced user for better tailoring of certain default parameters.

An example is given below:

---------------- top of file: case.inpair -----------------------
10.0 2.0 0.25  (Rmax, Decay, ReScale)
0.05 1.0 0     (Cutoff, Diag, mode)
0.2            (ZWEIGHT

Interpretive comments on this file are as follows:

line 1:
free format
RMAX   Maximum distance (a.u.) for considering neighbors. 8-12 is good.
DECAY   Exponential decay applied to neighbors when calculating the pairwise bond strenghts. 1.5-2.5 is reasonable.
RESCALE   A scaling term to multiply the pairwise hessian by. This number is rather important; 0.25 appears to be best for a system with soft modes, 0.35 for a stiffer system. You can save substantial time by adjusting RESCALE so it is approximately correct using a .min_hess from a previous run (adjust until numbers for similar multiplicities are similar), or by adjusting the frequencies (see also eigenhess).
line 2:
free format
CUTOFF   When the weighting (via an exponential decay) becomes smaller than this number the pairwise bonds are ignored.
DIAG   The value to multiply a unitary matrix by, this is added to the hessian estimate
MODE   0: Spring model; [1: harmonic model; not so good]
line 3:
free format
ZWEIGHT   Atomic number weight for bonds of form exp(-Z*ZWeight). Values of 0.1-0.2 are reasonable. The default is 0.1; a negative number (e.g. -1) turns this off.

3 eigenhess

This program was contributed by:

This program analyses / manipulates .min_hess, which was created by a structural minimization using min_lapw and the ``PORT'' option. In particular, such an analysis can yield approximate vibrational frequencies and corresponding eigenmodes, which eventually can give a hint about a dynamically unstable structure (imaginary frequencies). Some more description is given in $WIENROOT/SRC_pairhess/README.

The program eigenhess is executed by invoking the command:

x eigenhess

4 patchsymm

This program was contributed by:

James Rondinelli, Bin Deng and Laurence Marks \...
...ilinglist. If necessary, we will communicate
the problem to the authors.}

This program performs a symmetry check on the positions and produces a new struct file case.struct_new. It is useful in case something went wrong during min_lapw (rounding errors of positions) or the cif/amc file did not have enough digits (eg. ``1/3'' was prepresented by ``0.33333'' only). The file case.outputpatch gives information on how parameters changed.

1 Execution

The program patchsymm is executed by invoking the command:
patchsymm patchsymm.def or x patchsymm

5 afminput

This program creates the inputfile case.inclmcopy_st for the program clmcopy, which copies spin-up densities of atom i to spin-down densities of the related antiferromagnetic atom j and vice versa in an anti-ferromagnetic system. It uses a symmetry operation to find out how and which atomic densities must be interchanged and how the Fourier coefficients of the density transform. It is based on the ideas of Manuel Perez-Mato (Bilbao, Spain).

See $WIENROOT/SRC_afminput/afminput_test for several examples.

The best way is to supply a file case.struct_supergroup, which is the struct file of the nonmagnetic supergroup. If the two spacegroups are ``TRANSLATIONENGLEICH'', it will find out automatically the proper symmetry operation. Please note, this automatic way works only when the coordinate system remains identical. In some cases sgroup may interchange eg. the y and z axis. In such cases reverse this change, both, for the lattice parameters as well as for all positions, set NSYM=0 and run init_lapw again (ignoring any suggestion of sgroup).

If the two spacegroups are ``KLASSENGLEICH'' (i.e. have the same number of symmetry operations), you will be asked to supply a translation which transforms the AF atoms into each other. A typical example would be bcc Cr: the bcc supergroup and the AF subgroup (simple cubic) have both 48 symmetry operations and the proper translation is (0.5,0.5,0.5).

Finally, if you don't give case.struct_supergroup, you have to supply a symmetry operation (rotation + non-primitive translation) as input. For bcc Cr or the famous NiO-AFII structure this would be simply

\left( \begin{array}{ccc} 1.0 & 0.0 & 0.0 \\
0.0 & 1.0 & 0...
...\begin{array}{c} 0.5 \\
0.5 \\
0.5 \\
\end{array} \right)

Please see the comments in sect. 4.5.4 on how to proceed in detail for AFM calculations and find further examples in SRC_afminput.

1 Execution

The program afminput is executed by invoking the command:
afminput afminput.def or x afminput

2 Dimensioning parameters

The following parameters are used:

NCOM number of LM components in the density (in
LMAX max l for LM expansion of the density (in

6 clmcopy

This program generates the spin-dn density (case.clmdn) from a given spin-up density (case.clmup) according to rules and symmetry operations in case.inclmcopy (generated earlier by afminput) for an AFM calculation.

Please see the comments in sect. 4.5.4 on how to proceed in detail for AFM calculations.

1 Execution

The program clmcopy is executed by invoking the command:
clmcopy clmcopy.def or x clmcopy

2 Dimensioning parameters

The following parameters are used in

NCOM number of LM components in the density
NRAD number of radial mesh points
NSYM number of symmetryoperations

3 Input

An example is given below:

---------------- top of file: case.inclmcopy -----------------------
   2                                              NUMBER of ATOMS to CHANGE
   1   2                                          INTERCHANGE these ATOMS
 -1.00000000000  0.00000000000  0.00000000000     SYMMETRY OPERATION
  0.00000000000 -1.00000000000  0.00000000000
  0.00000000000  0.00000000000 -1.00000000000
   0                                              NUMBER of LM to CHANGE SIGN
   3   4                                          INTERCHANGE these ATOMS
 -1.00000000000  0.00000000000  0.00000000000     SYMMETRY OPERATION
  0.00000000000 -1.00000000000  0.00000000000
  0.00000000000  0.00000000000 -1.00000000000
   9                                              NUMBER of LM to CHANGE SIGN
  1 0    1 0 -1.00
  3 0    3 0 -1.00
  3 2    3 2 -1.00
 -3 2   -3 2 -1.00
  5 0    5 0 -1.00
  5 2    5 2 -1.00
 -5 2   -5 2 -1.00
  5 4    5 4 -1.00
 -5 4   -5 4 -1.00
   1   0   0   0.50000
   0   1   0   0.00000
   0   0   1   0.50000

Interpretive comments on this file are as follows:

line 1:
free format
NATOM   Number of atoms for which rules for copying the density will be defined
line 2:
free format
N1, N2   Interchange spin-up and dn densities of atoms N1 and N2
line 3-5:
free format
SYM   Symmetry operation for atom N1 to rotate into N2 (without translational part)
line 6:
free format
NLM   Number of LM values, for which you have to change the sign when swapping up and dn-densities
line 7ff:
free format
L1,M1,L2,M2,Fac   NLM pairs of L1,M1 (spin-up), which change into L2,M2 (spin-dn) and the respecting CLMs are multiplied by Fac

Lines 2-7ff have to be repeated NATOM times.

line 8-10:
free format
SYM0   Symmetry operation (one of the operations of the NM-supergroup missing in the AFM-subgroup (transfers spin-up into spin-dn atom)

7 reformat

To produce a surface plot of the electron density using rhoplot_lapw (which is an interface to gnuplot), data from the file case.rho created by lapw5 must be converted using reformat

The sources of the program reformat.c are supplied in SRC_reformat.

8 hex2rhomb and rhomb_in5

hex2rhomb interactively converts the positions of an atom from hexagonal to rhombohedral coordinates (needed in case.struct).

rhomb_in5 interactively helps to generate input case.in5 for density plots with lapw5 for rhombohedral systems. It defines a plane as needed in the input file when you specify 3 atoms of that plane.

The sources of these programs are supplied in SRC_trig.

9 plane

plane helps to generate case.in5 for density plots with lapw5 (for orthogonal and hex lattices only). The plane will be specified by 3 atoms and you need an auxiliary file plane.input, which contains:

a,b,c     # lattice parameters
x0,y0,z0  # position of atom (fractional coordinates), which will be centered in the plot
x1,y1,z1  # position of atom, which will be ``below'' the centered atom
x2,y2,z2  # position of atom, which will show to the ``left''
xl,yl     # lenght (in bohr) of plot in x and y direction.
'P'       # defines lattice, either P (carthesian coordinates) or H (hexagonal) supported

The source of this program is supplied in SRC_trig.

10 add_columns

add_columns reads a sequence of pairs of 2 numbers (form stdin), adds them together and prints the sum to stdout. If you have two columns of numbers in 2 files (eg. in colup and coldn) you can add them using:

paste colup coldn | add_columns > col

The source of this program is supplied in SRC_trig.

11 clminter

clminter interpolates the density in case.clmsum/up/dn to a new radial mesh as defined in case.struct_new. This utility is usefull when you run a structural minimization (min_lapw), some atoms start to overlap and you have to reduce RMT (the size of the atomic spheres) of certain atoms. In such a case:

Note: Please be aware the the total energy will change with modified RMT (by some constant) and you must not compare energies comming from different RMTs (but most likely you can determine the constant shift by repeating (at least) ONE calculation with identical structure but different RMTs).

The source of this program is supplied in SRC_trig.

12 eosfit

Small program to calculate the Equation of States (EOS; Equilibrium volume $V_0$, Bulk modulus $B_0$ and it's derivative $B_0'$. The Murnaghan (1944), the Birch-Murnaghan and the EOS2 equation of states are supported. It relies on the file case.vol (containing lines with "volume, E-tot", usually created from w2web using "Volume optimization"), or alternatively is called from eplot_lapw using case.analysis (see 5.7.1 and 5.3.1).

The sources are supplied in SRC_eosfit.

13 eosfit6

Nonlinear least squares fit (using PORT routines) for a parabolic fit of the energy vs. 2-4 dim. lattice parameters. It requires case.ene and case.latparam, usually generated by parabolfit_lapw. It can optionally produce case.enefit, which contains energies on a specified grid for plotting purposes (in 2D same format as case.rho, which can be used in contourplot programs). (See 5.3.1).

The sources are supplied in SRC_eosfit6.

14 spacegroup

This program was contributed by:

Vaclav Petricek\\
Institute of Physics\\
...ilinglist. If necessary, we will communicate
the problem to the authors.}

Interactive program to generate equivalent positions for a given spacegroup and lattice. The program is also used internally from w2web to generate positions when selecting spacegroups in the StructGen.

15 join_vectorfiles

This program was contributed by:

Interactive program to combine parallel vector and energy files (case.vector_xx and case.energy_xx) into single files (case.vector and

Executed by:

16 arrows

This program was contributed by:

Small program which together with Xcrysden allows to display the ``forces acting on all atoms'' or the ``differences between two structures'' using arrows which indicate the movement of the atoms. The recommended sequence to visualize forces is:

while differences between the inital and relaxed structure can be viewed by:

17 xyz2struct

xyz2struct reads ``atomlabel,x,y,z''-data from and writes them into xyz2struct.struct. You may have to edit the xyz-file and insert a few lines at the top:

ANG(default)/BOHR; F/C (fractional or carth. coordinates) and L (lattice information, see example)

a,b,c lattice parameters, or when L was specified a scaling constant and the bravais matrix.

Since xyz data contain no symmetry information, all atoms with the same ``label'' will be treated as equivalent. The nuclear charges ZZ will not be given and you have to insert them manually or use w2web-StructGen.

It is executed using:

xyz2struct <

(I recommend this program only for cases with many non-equivalent atoms and (almost) no symmetry. If you have spacegroup-information it is probably easier to use StructGen and copy/paste of the positions).

A proper file looks like:

7.47700   7.47700   7.47700
B      4.98466667     1.24616667     0.00000000
C      6.23083333     2.49233333     0.00000000
   0.470724637   0.492808141   0.000000000
  -0.471118220   0.493012774   0.000000000
   0.000000000   0.000000000   0.680559876
B      0.00000000     0.00000000     0.00000000
C      0.14300000     0.14300000     0.25000000

18 cif2struct

cif2struct reads structural data in cif-format from case.cif and writes them into case.struct. It is executed using:

cif2struct case.cif

The required cif files can be for example be obtained from Cystallographic databases (e.g. the Inorganic Crystal Structure DataBase ICSD) or from other programs.

Alternatively, cif2struct can work with case.txt, which contains the following data:

a                                      # a..Ang, b..Bohr
  0.0  0.0  0.0                        # shift of origin
  4.7554 4.7554 12.991 90. 90. 120.    # a,b,c,angles
'R-3c'                                 # spacegroup-symbol (see \STRUCTGEN{})
'Al'                                   # atom-name
 0.0000000 0.0000000 0.3520000         # atomic position
'O'                                    # ...
 0.3063000 0.0000000 0.2500000         # ...

19 struct2cif

struct2cif creates a cif-file struct.cif from case.struct. It is executed using:

x struct2cif

and will ask for the name of a struct file and a spacegroup. It was contributed by F. Boucher ( and L.D.Marks ( There is also a similar program struct2xyz available.

20 StructGen of w2web

The new StructGen helps to generate the master input file case.struct. It has the following additional features:

21 supercell

This program helps to generate supercells from a regular WIEN2k-struct file.

It asks interactively for the name of the original struct file and the number of cells in x, y, and z direction. (Only integers are allowed, thus no rotations by $45^o$ like sqrt(2) x sqrt(2) cells are supported yet).

If symmetry permits, one can change the target lattice to P, B or F centered lattices, which allows to increase the number of atoms in these supercells by a factor of 2, 4, 8, ...

Rhombohedral (R) lattices are converted automatically into H (hexagonal) lattices, which are 3 times larger than the original cell.

If the target lattice is P, one can add some vacuum in each direction for surface slabs (or chains or isolated molecules) and also add a ``top''-layer (repeat the atoms with z=0 at z=1).

You can define an optional shift in x,y,z direction for all the atoms in the cell. (This might be usefull if you want to arrange the atoms in a certain way, eg. you may want to create a surface slab such that it is centered around z=0.5 (and not z=0), so that plotting programs (xcrysden) produce nicer pictures of the structure.

For the experienced user a much more flexible (but also more complicated) tool is available, namely the structeditor package (see Sect.9.22).

Please note: You cannot make calculations with these supercells (except for surfaces) unless you modify the created supercell-struct file. You must break the symmetry by introducing some distortions (e.g. for a frozen phonon) or replace one atom by an impurity/vacancy, ....

1 Execution

The program supercell is executed by invoking the command:
supercell or x supercell

22 structeditor

This program was contributed by:

Robert Laskowski\\
email: rolask@theochem.tuw...
...ilinglist. If necessary, we will communicate
the problem to the authors.}

This package helps to manipulate structures. Usually one would start from an appropriate (simple) case.struct file, and this tool allows to add or manipulate atoms (with or without symmetry considerations), or generate arbitrary supercells or surfaces. It is commandline driven and targeted for the more experienced user, who ``knows what he wants to do'' and is just looking for a convenient tool.

It consists of a couple of octave (mathlab) routines and some fortran code, thus it requires octave (the free mathlab version) and for visualization the opendx package ( and ).

A full documentation and some examples can be found in $WIENROOT/SRC_structeditor/doc, but the main commands are:

a2adist            * calculates  distance between atoms     
mina2adist         * calculates minimum distance between atoms 
addatom	           * adds an atom to the structure 
addeqatom          * adds an atom and all equivalent 
copyatom           * creates a copy of an atom 
getaname           * converts atomic number into atomic symbol
getar0             * calculates r0 from atomic number 
getazz             * converts atomic name into atomic number 
loadstruct         * reads Wien2k structfile 
movealla           * moves all atoms with vector vec 
replaceatom        * replaces an atom with other atom 
replaceeqatoms     * replaces an atom and all equivalent with other atoms
rmatom             * removes an atom 
rmeqatoms          * removes an atom and all equivalent 
savestruct         * saves crystal structure 
showequivalent     * outputs list of equivalent atoms 
showstruct         * displays structure (using DX) 
smultatom          * creates symmetry equivalent positions 
sshift             * symmetric shifts of equivalent atoms 
makeconventional   * converts structure into the conventional form 
makeprimitive      * converts structure to the primitive form 
makesupercell      * creates supercell 
makesurface        * creates surface for a given unitcell

1 Execution

The structeditor is invoked within the octave environment:


# make an orthorhombic supercell and visualize it
a=[1 0 0; 1 1 0; 0 0 2]
sout=makesupercell (s,a);

# save it as test.struct
savestruct (sout,"test.struct");

# get help on all commands

23 Visualization


balsac (Build and Analyze Lattices, Surfaces and Clusters) was written by Klaus Hermann (Fritz-Haber Institut, Berlin). It provides high quality postscript files. In SRC_balsac-utils we provide the following interface programs to convert from WIEN2k to balsac:

For an example see figure 3.1 For scientific questions concerning BALSAC please contact Klaus Hermann at hermann@FHI-Berlin.MPG.DE

Balsac is available from:

Garching Innovation GmbH, Mrs. M. Pasecky Hofgartenstr. 8, D-80539 Munich, Germany
Tel.: +49 89 2909190, Fax.: +49 89 29091999

2 XCrysDen

XCrysDen (Kokalj 1999) is a render and analysis package. It has the following features (see also

Figure 9.1: 3D electron density in TiC generated with XCrysDen
\epsfig{figure=figs/tic/xcrysden, height=50mm}

XCrysDen is available from:

Tone Kokalj
Jozef Stefan Institute, Dept. of Physical and Organic Chemistry
Jamova 39, SI-1000 Ljubljana, Slovenia
Tel.: +386 61 177 3520, Fax: +386 61 177 3811

24 Unsupported software

On our website you can find a link to Unsupported software goodies, where references to various software packages are given. Most of those packages are contributions from WIEN2k-users and you may check this site from time to time if you find some useful tools for you.

In case you develop some goodies yourself and want to share this development with the WIEN2k community, please send an email to and we will add it to this page.

next up previous contents
Next: 10 Examples Up: 2 Detailed description of Previous: 8 Analysis, Properties and   Contents
pblaha 2011-03-22