Reading a Crystal Structure

Loading a Crystal Structure (CRYSTAL)

CRYSTAL file.cif [datablock.s]
CRYSTAL file.res
CRYSTAL file.ins
CRYSTAL file.16
CRYSTAL file.21
CRYSTAL file.dmain
CRYSTAL file.cube
CRYSTAL file.bincube
CRYSTAL file.struct
CRYSTAL file.out [istruct.i] # (file.scf.out, quantum espresso output)
CRYSTAL file.out # (file.out, crystal output)
CRYSTAL # (, quantum espresso input)
CRYSTAL file.gen
CRYSTAL file.xsf
CRYSTAL file.axsf [istruct.i [xnudge.r]]
CRYSTAL file.{in,in.next_step} # (, FHIaims input)
CRYSTAL file.{out,own} # (FHIaims output)
CRYSTAL file.frac
 SPG [hall.i|ita.i HM|spg.s]
 CELL a.r b.r c.r alpha.r beta.r gamma.r [ANG|ANGSTROM|BOHR|AU]
 CARTESIAN [scal.r]
   x1.r y1.r z1.r
   x2.r y2.r z2.r
   x3.r y3.r z3.r
 NEQ x.r y.r z.r at.s [ANG|ANGSTROM] [BOHR|AU]
 atom.s x.r y.r z.r [ANG|ANGSTROM] [BOHR/AU]
 atnumber.i x.r y.r z.r [ANG|ANGSTROM] [BOHR/AU]
 SYMM exprx.s, epxry.s, exprz.s

The first line of a critic2 input usually specifies the structure. Critic2 can read a large number of crystal structure formats. In the simplest usage, critic2 reads one of the common file formats like, for instance, a cif file. This is done by using:

CRYSTAL file.s

The extension of file.s is used to determine the appropriate reading format.

The MOLECULE keyword can be used as a replacement for CRYSTAL in the entries above. MOLECULE is used when the structure is a gas-phase molecule. For instance, cube files calculated with Gaussian (e.g. using cubegen) can be read by critic2.

The default distance units in the rest of the input and in the output once CRYSTAL is used are atomic units (bohr). This behavior can be changed with the UNITS keyword. The output of the CRYSTAL keyword is explained here. A detailed list of the file formats understood by critic2 follows.

Cube Files (cube, bincube)

Gaussian cube files read using CRYSTAL are assumed to represent a periodic system. This format is used by Quantum ESPRESSO and other programs.

Despite their name, cube files may be used to represent non-orthogonal cells, and have become a de facto standard. They can be written by a lot of popular solid-state programs, so it is a good choice if critic2 provides no native interface to the densities written in the native format of your program.

Critic2 can be used to convert cube files to binary format in order to save disk space and reading/writing time. Binary cube files have extension .bincube, and contain essentially the same information as the usual cube file.

WIEN2k (struct)

The structure of a crystal in WIEN2k is written to a file with extension .struct. WIEN2k’s struct files may or may not contain the symmetry operations (for instance, if they have been generated by the web interface but not run).


In VASP, the crystal structure can be read from a number of files, including the POSCAR (recommended), the CONTCAR, the CHGCAR, and others. Depending on the version, VASP’s POSCAR and CONTCAR (and also the rest) may be missing the atomic symbols. In that case, they need to be provided by hand after the file name, either using a list of atomic symbols or the location of the POTCAR. Files that contain the word POSCAR, CONTCAR, CHG, CHGCAR, AECCAR0, AECCAR2, and ELFCAR are also accepted (e.g. nacl.POSCAR or POSCAR_nacl). Note that the pseudopotential charges (ZPSP) are NOT read from the POTCAR.

Elk (OUT)

In elk, the geometry is written to the GEOMETRY.OUT file. Any file with extension .OUT will be assumed to be in elk’s GEOMETRY.OUT format (even though it may not be called GEOMETRY.OUT). The atomic numbers are inferred from the name of the species file. The atomic names are the symbols for those atomic numbers, with an integer suffix that corresponds to the species file for that atom (first file = 1, second file = 2, and so on).

Quantum ESPRESSO (, scf.out)

In addition to reading Gaussian cube files generated by Quantum ESPRESSO, the outputs (extension .scf.out) and inputs ( of pw.x are also understood by critic2. By default, the last geometry in the output file is read. If an optional istruct.i integer is given, then read the structure corresponding that number (only for geometry optimization jobs).

For Quantum ESPRESSO inputs (, only the .in extension is detected.

Crystal (out)

Crystal outputs are read if the file has the extension .out. Critic2 will automatically detect whether the file is a crystal or a Quantum ESPRESSO output (which has the same .out extension). Currently, only periodic crystals are supported (no SLAB, POLYMER or MOLECULE). In addition, this module has been tested for crystal06 and crystal14 only.

CIF files (cif)

CIF files are the standard format for crystal structures in the crystallography community. The standard is published by the International Union for Crystallography (the core CIF dictionary). In critic2, CIF files are read using the ciftbx library by Sydney R. Hall. If the CIF file provides the crystal symmetry, the symmetry operations are read and used.

CIF files can contain multiple structures in “data blocks”. The specific data block to read from a multi-block cif file can be specified with the optional argument datablock.s. For instance, to read the data_shelx block, use datablock.s = shelx. If datablock.s is not present, then the first block is read.

SHELX res and ins files (res, ins, 16)

RES and INS files are generated and used by SHELX (and derivatives), a program for the interpretation of experimental single-crystal X-ray and neutron diffraction data. The INS (input) and RES (output) file format specifications are almost identical, and follow the “Alphabetical list of SHELXL instructions” document on the SHELX website. The extension .16 correspons to a fort.16 file generated by DMACRYS, which also uses the SHELX format.

DMACRYS/NEIGHCRYS files (21, dmain)

DMACRYS is a program for modeling molecular crystals using rigid molecules and distributed atomic multipoles. The fort.21 file generated by NEIGHCRYS, part of the DMACRYS package can be read by critic2. The file is created during a distributed multipole calculation in molecular crystals. In addition, critic2 can also read the structure from the main input file, with extension .dmain.

Abinit (DEN, PAWDEN, ELF, LDEN, etc.)

Abinit density files (with suffix _DEN) and PAW valence density files (_PAWDEN) are binary files that, in addition to the electron density grid, contain the structural information for the crystal. In addition, other fields also generated by abinit (in the same format) can be read, including the electron localization function (prtelf, _ELF suffix), the Laplacian of the electron density, various potentials (_POT, _VHA, _VHXC, _VXC, _VCLMB, _VPSP), the kinetic energy density, and the components of the density gradient (_GDEN1, _GDEN2, and _GDEN3).


Critic2 can read the structure file generated by siesta has extension STRUCT_OUT. In addition, the STRUCT_IN file (which has the same format) is also understood by critic2.

DFTB+ (gen)

DFTB+ reads and generates structures in the gen format. The gen format can be read using the GenFormat driver in Geometry. It is also written during geometry optimizations using OutputPrefix in Driver. The gen format can be used for crystals (in which case it should contain the lattice vectors at the end of the file) or molecules.

Xcrysden (xsf and axsf)

Xcrysden generates scalar field files with extension .xsf, which also contain the crystal structure. If the xsf file contains a crystal structure, the PRIMVEC and PRIMCOORD cards are read - everything else is ignored.

The .axsf file is an animation file for xcrysden. It is typically generated by the dynmat.x utility in Quantum ESPRESSO and it contains the crystal structure as well as the eigenvectors corresponding to all the phonon vibrations in the crystal at the selected q-point (usually, gamma). The axsf file contains one matrix of lattice vectors (PRIMVEC) and \(3*n\) coordinate blocks (PRIMCOORD), where \(n\) is the number of atoms. Each PRIMCOORD block contains the atomic positions (the same in all blocks) and the displacement associated to the phonon eigenvectors in increasing order of frequency. The optional parameter istruct.i gives which of these PRIMCOORD blocks will be read by critic2 (default: the first block). If xnudge.r is given, then displace the atomic positions by the phonon displacement vectors times xnudge.r, in bohr. This option is useful when following the eigenvector of a phonon with imaginary frequency.

Quantum ESPRESSO Wavefunction (pwc)

This file is generated by the pw2critic.x utility in the PP bundle of Quantum ESPRESSO. The .pwc file contains the structural information for the system as well as the k-point information and the converged Kohn-Sham states. It is mostly used in the calculation of delocalization indices in periodic solids.

FHIaims inputs and outputs (in, in.next_step, out, own)

Crystal (and molecular) structures can be loaded from an FHIaims “” input file. Only the atom, atom_frac, and lattice_vector keywords are parsed and interpreted. If at least one lattice_vector is present, the system is assumed to be a crystal. Alternatively, you can also load the structure from the “” file written by FHIaims during a geometry optimization.

The crystal or molecular structure can also be loaded from an FHIaims output file, which is assumed to have a .out or .own extension. In the case of a geometry optimization, the last available geometry in the output file is read.

TINKER frac format (frac)

Crystal structures can be given in TINKER frac format. The .frac file must contain the cell parameters in the second line. This “complete” .frac file can be generated from an incomplete .frac file (i.e. where the cell lengths and angles are in a separate .key file) using TINKER’s utility programs. The connectivity information is discarded by critic2 and recalculated from scratch.

Manual Specification of the Crystal Structure (CRYSTAL Environment)

The crystal structure can be specified by hand using the CRYSTAL environment. For instance, the input for magnesium oxide (rocksalt structure) would be:

  SPG F m -3 m
  CELL 4.213 4.213 4.213 90 90 90 ANG
  Mg 0 . 0.  0.
  O  1/2 1/2 1/2

There are several relevant keywords in the CRYSTAL environment. A space group can be specified with the SPG keyword, in which case only the atoms in the asymmetric unit need to be given:

SPG [hall.i|ita.i HM|spg.s]

The SPG keyword used inside the crystal environment builds the complete set of symmetry operations in the crystal from the space group label or the space group number. The space group names known to critic2 correspond to those given in the International Tables for Crystallography vol. A, in the Hermann-Mauguin notation (spg.s). Alternatively, the numerical ID for the space group in the Hall notation (hall.i, from 1 to 530) or the ID for the group in the ITA notation (ita.i, Hermann-Mauguin, from 1 to 230) can be given. Using the ITA numerical ID of the group requires using the HM keyword after the number. The arguments to SPG are blank- and case-insensitive. Examples spg.s labels are F m -3 m, P b a 2, P 1 n 1, and P 63 m c. When the SPG keyword is used, only the atoms in the asymmetric unit need to be given.

The complete list of space groups available to critic2 can be retrieved using the SPG keyword outside the CRYSTAL environment. This list, along with example crystals, can also be found in the space group crystal collection. This is useful when there is a choice of origin to be made for a particular space group or if a non-standard setting is needed or in the case of rhombohedral groups for choosing the hexagonal or rhombohedral axes.

If no SPG keyword is found in the CRYSTAL environment, then an internal routine calculates the symmetry from the atomic positions. (This behavior can be deactivated with the NOSYMM/NOSYM keyword.) In this case, all the atoms in the cell need to be given (in contrast to using SPG, in which case only the asymmetric unit needs to be given).

There are two possible ways to input the cell parameters. In the simplest approach, the CELL keyword can be used to give the cell lengths and angles:

CELL a.r b.r c.r alpha.r beta.r gamma.r [ANG|ANGSTROM|BOHR|AU]

If the ANG (or ANGSTROM) keyword is used, then a.r, b.r, and c.r are in angstrom. Otherwise, cell parameters are in bohr by default (the keyword BOHR or AU can be used, but it is redundant). Using the CELL keyword lets critic2 decide on the crystallographic-to-Cartesian transformation matrix (which is not unique; critic2 always uses the Cholesky decomposition of the metric tensor, for consistency). Alternatively, one could input this matrix using the CARTESIAN keyword:

CARTESIAN [scal.r]
  # comment
  x1.r y1.r z1.r
  x2.r y2.r z2.r
  x3.r y3.r z3.r

CARTESIAN reads the Cartesian coordinates of the cell vectors in some arbitrary orthonormal reference frame. Each row corresponds to a vector. Hence, the metric tensor is \({\bf G} = {\bf R}{\bf R}^T\) where \({\bf R}\) is the matrix above. The coordinate transformation is \(x_{\text{cryst}} = x_{\text{cart}}{\bf R}\). If scal.r is given, all vectors are scaled by that factor. The input units are bohr by default. The default can be changed with a UNITS keyword preceding CRYSTAL or with the BOHR/AU and ANG/ANGSTROM keywords inside the CARTESIAN environment. The CARTESIAN keyword is particularly useful for inputs based on Quantum ESPRESSO results since the matrix corresponds exactly to the CELL_PARAMETERS matrix, and scal.r can be set to celldm(1).

The NEQ keyword can be used to specify the atomic positions. Equivalently, one can start the line with the atomic symbol or the atomic number:

NEQ x.r y.r z.r at.s [ANG|ANGSTROM] [BOHR/AU]
atom.s x.r y.r z.r [ANG|ANGSTROM] [BOHR/AU]
atnumber.i x.r y.r z.r [ANG|ANGSTROM] [BOHR/AU]

NEQ adds one atom to the crystal. If symmetry is used (via SPG or SYMM), then only the non-equivalent atom list needs to be given (as in the MgO example above), which decreases the number of NEQs that are necessary. Otherwise, the complete list of atoms in the cell has to be given, and the symmetry guess will reduce it to the non-equivalent atoms list. The coordinates x.r, y.r, and z.r are crystallographic (fractional) coordinates unless the ANG/ANGSTROM or BOHR/AU keywords are used. Using Cartesian coordinates requires a previous CELL or CARTESIAN command in order to convert the atomic positions to crystallographic coordinates. The atomic symbol is at.s, and the atomic number is detected from the symbol (essentially, from the beginning of it, so atoms like Cl1 or baxx2 are valid). Deuterium (D) is detected as hydrogen.

The list of atomic positions can be extended by symmetry operations specified using the SYMM keyword. The SYMM keyword accepts three arithmetic expressions separated by commas. These expressions contain the variables x, y, and z (case insensitive), and represent symmetry operations in crystallographic coordinates. For instance:

SYMM -X+1/2, Y+1/2, -Z+1/2

would apply that operation to all atoms given as NEQ. If they are different from the original, the new atoms are added to the list. This keyword is useful in cases when it is difficult to pass SPG a certain non-standard setting for a low-symmetry space group, or when the space group symmetry is given in this format instead of a space group label (e.g. cif files and SHELX res files).

The Crystal Library (CRYSTAL LIBRARY)

A library of (simple) crystal structures is provided with critic2, and can be accessed using the CRYSTAL LIBRARY keyword:


Critic2 tries to find the “NaCl” label (case-insensitive) in an internal library file that is distributed with the code, and located in dat/crystal.dat relative to the source of the distribution. The relevant library entry in this case reads:

STRUCTURE B1 rock_salt rocksalt NaCl
    SPG f m -3 m
    CELL 5.6402 5.6402 5.6402 90 90 90 ANG
    NEQ 0.0 0.0 0.0 na
    NEQ 0.5 0.5 0.5 cl

Note four aliases (B1, rock_salt, rocksalt, and NaCl) are defined for the same crystal structure. The syntax in the CRYSTAL environment is exactly the same as above. The user can define their own library of crystal structures either by modifying the crystal.dat directly or by using the LIBRARY keyword:

LIBRARY CRYSTAL /path/to/library

where the indicated file is used instead to perform the lookup. The path can be absolute or relative to the execution directory.

A similar library exists for molecules (molecule.dat) that can be accessed throught the MOLECULE keyword. Both molecule.dat and crystal.dat are installed in the data directory by make install.

List space group types (SPG)

The SPG keyword (used outside the CRYSTAL environment):


lists the space group types available to critic2. A brief extract of its output is:

#Hall ITA   HM-short HM-long       choice  crys.-syst.  Hall-symbol
452   161   R3c      R3c            H      trigonal     [R 3 -2"c]
453   161   R3c      R3c            R      trigonal     [P 3* -2n]
454   162   P-31m    P-312/m               trigonal     [-P 3 2]

The SPG keyword lists, in order:

  • The ID for the space group in Hall notation (from 1 to 530).
  • The ID for the space group in Hermann-Mauguin international notation (from 1 to 230).
  • The short Hermann-Mauguin label for the group.
  • The long Hermann-Mauguin label for the group.
  • The particular choice of axes/origin/setting for the group. For instance, H and R mean hexagonal and rhombohedral axes, respectively. In monoclinic groups, choice gives the priviledged axis, etc.
  • The crystal system.
  • The space group type in Hall notation.

The HM-short and HM-long labels as well as the numerical Hall ID for the group (Hall) and the ITA numerical ID (ITA) can all be used in the SPG keyword inside CRYSTAL. (Note that the latter requires using the additional HM keyword.) A similar list can be found in the space group crystal collection.

Symmetry Options (SYM/NOSYM)

Critic2 uses the spglib library to calculate the symmetry operations and space group label from the crystal structure description. Symmetry is not used or calculated for molecular systems. By default, if the crystal is very big (>2000 atoms per unit cell), then the automatic calculation of the symmetry is deactivated.

The treatment of symmetry in critic2 can be controlled using the SYM and NOSYM keywords (or their equivalent spellings SYMM/NOSYMM).

{SYMM|SYM} [-1|0|1]
{SYMM|SYM} eps.r

Without any other keywords, the SYM keyword writes the space group information for the current crystal to the output.

Followed by an integer, SYM controls whether the symmetry operations and space group are calculated for new structures given via CRYSTAL. If the value is 1, symmetry is always calculated, regardless of crystal size. If 0, symmetry is never calculated. If -1, calculate the symmetry if the unit cell has fewer than 2000 atoms (this is the default). NOSYM (or NOSYMM) is equvalent to SYM 0.

Additional keywords can be used to change the symmetry of an already loaded crystal. If SYM is followed by a real number (eps.r), then the precision with which the symmetry operations are determined is set to this value. If a crystal has been loaded, then this command recalculates the symmetry using the new precision. The default eps.r is 1d-2 bohr.

The CLEAR keyword clears all symmetry operations (that is, use space group P1). The RECALC keyword recalculates the symmetry operations. This is useful in cases where the symmetry is read from an external file, such as a cif file.

The REFINE keyword recalculates the atomic positions using the current space-group operations to have them be exactly at the corresponding symmetry sites. For instance, “0.333” may be converted to “0.3333333” in a hexagonal crystal.

The WHOLEMOLS keyword must be applied to molecular crystals. It eliminates symmetry operations from the space group in such a way that the asymmetric unit is composed of whole molecules. This is useful when generating .res files as input for the DMACRYS program.

If the symmetry is recalculated for a loaded crystal (with the eps.r, CLEAR, RECALC, REFINE, or WHOLEMOLS options), then all fields are unloaded and all critical point lists are cleared.

The ANALYSIS keyword explores different values of the precision parameter (eps.r) and outputs the calculated space group symbol for each of them. This keyword is useful when there is a crystal that may have certain symmetry but there is interference from numerical or experimental noise in the atomic positions or cell parameters. The ANALYSIS keyword does not change the crystal structure or its symmetry operations.

Atomic Charge Options

The Q (or QAT) and ZPSP keywords can be used to change the atomic charge and pseudopotential charge after CRYSTAL:

{Q|QAT} at1.s q1.r [at2.s q2.r] ...
ZPSP at1.s q1.r [at2.s q2.r] ...

This command changes the atomic charge (Q, QAT) or the pseudopotential charge (ZPSP) of the atomic species at1.s, at2.s,…. Real numbers for the charges and ZPSP are acceptable; the latter are internally converted to integers. The charges (Q) are used to calculate the point-charge electrostatic energy using EWALD.

The role of ZPSP is to augment fields defined on a grid, a procedure called core augmentation. ZPSP is the pseudopotential charge, that is, the atomic number of the atom minus the number of electrons represented by the pseudopotential. For instance, ZPSP=2 is a usual value for Ba. A typical way to use grids in critic2 involves loading the valence density or pseudo-density and augmenting it to an all-electron density that has maxima at the nuclear positions, which is important for certain applications (for instance, plotting). While this procedure is not satisfactory from the theoretical point of view, in practice, the valence regions are mostly unaffected. Core augmentation needs not be used if the field is not the electron density or if the grid already contains the core contributions, and it is usually better to use the full all-electron density from the electronic structure code, if it is able to generate it (e.g. using the PAW method).

Core augmentation is not active by default, even if the ZPSP keyword is used (using the CORE keyword during LOAD is required, see here). The use of ZPSP as above sets the pseudopotential charges for all current fields; particular ZPSP values for certain fields can also be given during LOAD. In a VASP calculation, the value of ZPSP can be found easily by grepping ‘ZVAL’ in the POTCAR file. In Quantum ESPRESSO, this information is in the UPF file (the “number of valence electrons”). In abinit, it can be found in the pseudopotential files.

The keyword NOCORE clears the ZPSP values of all atoms in all fields:


Loading Multiple Crystal Structures

Critic2 can only work with one structure at a given time. However, more than one crystal can be loaded in the same run, simply by giving a new CRYSTAL (or MOLECULE) keyword. When the second and subsequent CRYSTAL/MOLECULE keywords are read, critic2 clears all the information for the previous structure, including the structural data (cell parameters, atomic positions, etc.) as well as all the fields that had been loaded, all the critical point information, and the atomic and core density grids. Effectively, critic2 behaves as if starting a new run, except that the variables and global options are carried over. To clear the variables and set the global options to their default values, use the RESET keyword: