XCONTROL(7)

πŸ“¦
version 6.7.1 Β· 2 versions
, in fedora 43

πŸ’– NAME πŸ’–

okay so XCONTROL(7) is literally the instruction file for xtb(1) version 6.0 and newer. That's the whole vibe. πŸ’…

✨ SYNOPSIS ✨

xtb -I,--input xcontrol FILE

πŸ¦‹ DESCRIPTION πŸ¦‹

bestie, the xcontrol(7) instruction set is the glow-up successor of the set-block that lived in xtb(1) version 5.8 and earlier. The instruction set is similar to the data groups in Turbomole or the detailed input structure of ORCA. Every instruction starts with a flag ($) and ends when the next flag shows up. An instruction is only valid if the flag is in the first column, and the instruction name is the rest of the register. A valid instruction opens its blocks with its own options, and every option is a key-value pair. No cap.

There are two kind of instructions: logical and groups. Logical instructions toggle a specific operation and cannot contain a option block, while group instructions only open the option block without any further actions. Periodt.

A special instruction is the end instruction, which is optional, because EOF is a valid alternative in this implementation. iconic.

Also lowkey important: xtb(1) is able to produce xcontrol(7) instructions by itself. You can tell xtb(1) by --copy to save your original instructions. Note that this implementation will strip all comments while copying (print what you see, not what you read), to aid debugging. fr fr.

$fit πŸ’–

logical instruction to set xtb(1) in mfit(1) compatibility mode and prints out further informations. This is a pure development feature and therefore should be absent in every productive run.

bestie, β€œpure development feature” means do not bring this to a productive run. πŸ™ˆ

$samerand 🎲

logical instruction to initialize the random number generator with the same sequence.

$chrg int πŸ’Έ

set the charge of the molecule.

$spin int πŸŒ€

set Nalpha-Nbeta of the molecule.

$cma 🧚

shifts molecule to center of mass and transforms cartesian coordinates into the coordinate system of the principle axis (not affected by β€˜isotopes’-file).

$constrain ⛓️

Note πŸ’– This data group refers to constraining the gradient by appling potentials. Exact fixing is done with the fix data group.
  • force constant=real β€” force constant for constraining potential.
  • all bonds=bool β€” generate potentials to constrain the length of all bonds.
  • all angles=bool β€” generate potentials to constrain all bond angles.
  • all torsions=bool β€” generate potentials to constrain the angles of all torsions.
  • elements: symbol|number,... β€” constrains all elements of the same type, the atom type is determined by the ordinal number or the element symbol.
  • atoms: list,... β€” constrains the atom positions of all atoms in list. Needs at least two atoms since potential is applied on all atoms in list.
  • distance: i,j,auto|real β€” constrain the distance between atom i and j to the actual length (auto) or the value real, which has to be given in Γ…ngstrΓΆm.
  • angle: i,j,k,auto|real β€” constrain the angle between atom i, j and k to the actual length (auto) or the value real, which has to be given in degrees.
  • dihedral: i,j,k,l,auto|real β€” constrain the angle between atom i, j, k and l to the actual length (auto) or the value real, which has to be given in degrees.
  • center: real,int β€” implemented and documented as in xtb 5.8, might use fragment1 information from split instruction.
  • cma[ interface]: auto|real β€” implemented and documented as in xtb 5.8, might use fragment1/fragment2 information from split instruction.
  • z: real β€” implemented and documented as in xtb 5.8, might use fragment1 information from split instruction.

$cube 🧊

  • step=real β€” grid spacing for cube file.
  • pthr=real β€” density matrix neglect threshold.
  • boff=real β€” grid boundary offset (default: 3.0).
  • cal=int β€” =1 switches on cube-file output (=0 means writing molden file instead, -1=do nothing).

$embedding πŸ«‚

  • at=int β€” default atom type for point charges.
  • es=bool β€” use isotropic electrostatic with point charges.
  • input=file β€” point charges are read from file (default: pcharge), format is: q x y z [iat|gam], where q is the partial charges, xyz are the position of the partial charge in bohr and iat is the ordinal number of the atom. The corresponding gam-Parameter of the element will be used in the potential. Alternatively the gam value can be given directly as fifth argument, to simulate point charges provide a huge value for gam.
  • gradient='file β€” gradient of the point charges is written to file (default: pcgrad).

$external 🌐

  • mopac bin=STRING β€” path to mopac(1) binary, will search PATH variable for binary if not set.
  • mopac input=STRING β€” input string used for mopac(1) calculation, make sure it generates an aux file for xtb(1) to read in.
  • mopac file=STRING β€” name of the mopac(1) input file.
  • orca bin=STRING β€” path to orca(1) binary, will search PATH variable for binary if not set.
  • orca input line=STRING β€” input string used for orca(1) calculation, will use engrad runtyp by default.
  • orca input file=STRING β€” name of the orca(1) input file.
  • turbodir=STRING β€” path to your Turbomole directory (usually found in TURBODIR or TURBOIMG variable).

$fix πŸ“Œ

Note πŸ’… the fix group refers to exact fixing. For geometry optimizations the gradient is set to zero, while for Hessians no displacements are calculated. Constraining with external potentials is done by the constrain data group.
  • elements: symbol|number,... β€” fixes all elements of the same type, the atom type is determined by the ordinal number or the element symbol. This is automatically deactivated for molecular dynamics since it leads to instabilities.
  • atoms: list,... β€” fixes all atoms in list by setting the gradient to zero. This is automatically deactivated for molecular dynamics since it leads to instabilities.
  • freeze frequency=real β€” diagonal element used for freezing atoms in numerical Hessian calculation.
  • freeze: list,... β€” freezes all atoms in list for hessian calculation.
  • shake: i,j,... β€” use SHAKE to constrain the atompair ij in molecular dynamics.

$gbsa πŸ’§

  • solvent=string β€” solvent for the generalized born (GB) model with solvent accessable surface area (SASA), requires .param_gbsa.solvent in XTBPATH. Does not activate GBSA (use commandline).
  • ion_st=real β€” ion strength for salt screening in GBSA.
  • ion_rad=real β€” ion radius for salt screening in GBSA.
  • grid=level β€” changes the grid used for the surface accessable surface area (normal, tight, vtight, extreme are available).

$gfn βš›οΈ

  • method=int β€” version of the GFN Hamiltonian.
  • dispscale=real β€” Scale dispersion energy of GFN-FF.

$hess 🎹

  • sccacc=real β€” SCC accuracy level in Hessian runs.
  • step=real β€” Cartesian displacement increment for numerical Hessian.
  • scale=real β€” Scaling factor for the hessian elements (default: 1.0).
  • element mass: int,real,... β€” set mass of elements int to real.
  • isotope: int,real,... (6.1 only) β€” set mass of atom number int to real.
  • modify mass: int,real,... (6.1 only) β€” set mass of atom number int to real.
  • scale mass: int,real,... (6.1 only) β€” scale mass of atom number int by real.

$metadyn (6.1 only) 🌌

  • save=int β€” maximal number of structures for rmsd criteria.
  • kpush=real,... β€” scaling factor for rmsd criteria can be positive and negative.
  • modify factor=int,real,... β€” replace the factor int with real.
  • scale factor=int,real,... β€” scales the factor int with real.
  • alp=real β€” width of the Gaussian potential used in the rmsd criteria.
  • coord=file β€” external structures to initialize the rmsd criteria (xmol format required).
  • atoms: list,... β€” atoms to include in rmsd calculation, if not present all atoms are taken into account.
  • rmsd: real,... β€” target rmsd for biased hessian runs in Γ…ngstrΓΆm.
  • bias input=file β€” read static bias from file, requires xyz format with factor and width of the potential in the comment line.
  • bias atoms: list,... β€” atoms to include in static rmsd calculation, if not present all atoms are taken into account.
  • bias elements: id,... β€” elements to include in static rmsd calculation, if not present all atoms are taken into account. Elements can be referenced by their element symbol or their atomic number.

$md πŸ”₯

  • temp=real β€” MD thermostat/GBSA temperature.
  • time=real β€” MD run time in ps.
  • dump=real β€” dump structure in every dump fs.
  • sdump=real β€” dump structure as scoord.<num> every sdump fs.
  • velo=int β€” set to 1 if dumps (trj file) should contain velocities.
  • nvt=int β€” use thermostat (=1, =0 for NVE).
  • skip=int β€” skip interval in -mdav, -mdopt.
  • step=real β€” MD time step in fs (automatically determined if < 0), could be 4-5 fs with shake =2, md_hmass=4.
  • hmass=int β€” increase hydrogen mass to this value in amu (at const. tot. mass) allowing large time steps (=0 off).
  • shake=int β€” shake on (=0: off which is default) for X-H bonds only (=1),
  • sccacc=real β€” SCC accuracy level in MD. Every 10th step the SCC is properly converged at sccconv=1.0. sccmd should be < 5 in critical cases, effects may show up as bad thermostating.
  • forcewrrestart=logical β€” forces the writing of a restart file at each dump step.

$modef 🎢

  • n=int β€” of points along normal mode path scan.
  • step=real β€” step lengths for scan (should be around 1 because its adjusted internally to mode mass and FC).
  • updat=real β€” update search mode with a fraction of the displacement at every step (0.0 means no update, 0.1-0.2 is a good choice).
  • local=int β€” use canonical normal modes (=0) or Pipek-Mezey localized ones (=1).
  • vthr=real β€” threshold up to which frequency modes are used for mode based conformer search (def. is 300).
  • prj=int β€” number of second mode which should be projected out in mode following (normally = 7 ie the TS mode which is fixed then).
  • mode=int β€” can set by --modef via cmdline.

$oniom 🧩

  • inner logs=bool β€” to print optimization log files for model region geometry (high.inner_region.log and low.inner_region.log).
  • derived k=bool β€” to calculate prefactor k and create jacobian dynamically (see more ).
  • ignore topo=bool β€” to bypass topology check when breaking bonds.
  • outer=bool β€” to saturate outer region.
  • silent=bool β€” to hide the execution runs of external software.

πŸ’… $opt πŸ’…

okay bestie this is THE glow-up group, the one where you tell xtb how to actually hunt down your minimum instead of just vibing at a random geometry. tons of knobs, all of them matter, let's go ✨

  • engine=method β€” which optimizer is driving the bus. method can be rf for ANCopt (that's the default), lbfgs for L-ANCopt, or inertial for FIRE. pick your fighter πŸ₯Š
  • output=file β€” redirects the output of the optimization into file instead of your terminal.
  • logfile='file β€” writes the optimization log to file. default is xtbopt.log πŸ“
  • optlevel=level β€” convergence thresholds for ancopt(3). the whole ladder: crude = -3, sloppy = -2, loose = -1, normal = 0, tight = 1, verytight = 2, extreme = 3. yes there are seven of them, she's thorough πŸ’…
  • microcycle=int β€” how many optimization cycles happen before fresh ANCs get made. default is 25.
  • maxcycle=int β€” total number of opt. cycles. 0 means it's automatically determined (i.e. let her cook πŸ‘©β€πŸ³).
  • hlow=real β€” lowest force constant in ANC generation. it should be > 0.005, no cap.
  • maxdispl=real β€” maximum coordinate displacement in ancopt(3).
  • average conv=bool β€” averages the energy and gradient before checking for convergence, which accelerates things on numerically noisy potential energy surfaces. default: false.
  • s6=real β€” dispersion scaling in ANC generation.
  • hessian=lindh-d2|lindh|swart β€” the model hessian used to generate the ANC for the optimization.
  • kstretch=real β€” stretch force constant in the model hessian.
  • kbend=real β€” bend force constant in the model hessian.
  • ktorsion=real β€” torsion force constant in the model hessian.
  • koutofp=real β€” out-of-plain force constant to the model hessian.
  • kvdw=real β€” additional vdW contribution (lindh|swart only).
  • kes=real β€” electrostatic contribution to the model hessian, courtesy of the EEQ model.
  • rcut=real β€” distance cutoff for bonds in the model hessian.
  • exact rf=bool β€” uses a better solver during the rational function optimization. treat yourself πŸ’–

🧭 $path (6.1 only) 🧭

the pathfinder era, only a thing in 6.1. she's out here tracing reaction paths like it's a group chat read receipt.

  • nrun=int β€” number of runs for the pathfinder.
  • nopt=int β€” number of points on the path to optimize.
  • anopt=int β€” number of steps to optimize the points on the path.
  • kpush=real β€” factor for the RMSD criterium pushing away from the reactant structure.
  • kpull=real β€” factor for the RMSD criterium pulling towards the product structure.
  • alp=real β€” width of the RMSD criterium.
  • product=file β€” file name of the product structure.

πŸŒ€ $scan πŸŒ€

slowly dragging a coordinate across the whole vibe, step by step 🌈

  • mode=sequential|concerted β€” scans all constraints at once (concerted) or one after another (sequential). in sequential mode the final value of the scanned constraint is kept in place. in concerted mode all steps for the scans have to be the same. iykyk.
  • int: start,end,steps β€” where start and end are real values and steps is an integer value. defines a scan along constraint int (which has to be defined before, of course), from start to end in a certain number of steps. and unlike 5.8, there is no limitation in the number of steps. glow up fr.
  • name: values; start,end,steps β€” defines the constrain name on which the scan is performed. see above and the the constrain group for more information, since name (e.g. distance) and values (e.g. i,j,value) are handed internally to the constrain parser.
Note ⚠️ the scan parser will always terminate in error if the instruction could not be parsed correctly, while the constrain parser is able to skip instructions with wrong input by raising a warning. so like… be careful with your syntax, bestie, she's not forgiving here 😭

⚑ $scc ⚑

the self-consistent-field group, aka the main character of every single-point energy.

  • temp, etemp=real β€” electronic temperature for the Fermi smearing.
  • broydamp=real β€” damping for the Broyden convergence accelerator.
  • guess=gasteiger|goedecker|sad β€” the different possible guess charges for a GFN2-xTB SCC calculation. pick one 🎲
  • iterations, maxiterations=int β€” adjusts the number of SCC iterations in the first/last SCC calculation.

🧩 $split 🧩

for when your molecule is really several molecules in a trench coat and you need to say so.

  • fragment1: list,... β€” defines atoms belonging to fragment 1.
  • fragment2: list,... β€” defines atoms belonging to fragment 2.
  • fragment: i,list,... β€” defines atoms belonging to fragment i.

πŸ”¬ $stm (6.1 only) πŸ”¬

scanning tunneling microscopy sim hours. activate it with $write/stm=true ✨

  • broadening=real β€” width of tip DOS energy broadening (eV).
  • current=real β€” constant current value (arb.u.).
  • grid=real β€” grid width (Bohr), half that value along Z.
  • thr=real β€” integral and density matrix neglect threshold.
  • potential=real β€” potential of tip vs. molecule. negative values let e flow from mol to tip i.e. occ space of mol is probed. πŸ‘€

πŸ¦‹ $symmetry πŸ¦‹

letting the molecule remember it's beautiful and symmetric.

  • desy=real β€” point group symmetrization threshold.
  • maxat=int β€” point group determination is skipped if # atoms > this value (i.e. desymaxat 0 switches it off).

🌑️ $thermo 🌑️

temperature stuff, frequencies stuff, the whole thermal vibe check.

  • temp=real β€” temperature for thermostatistical calculation. default: 298.15 K.
  • imagthr=real β€” threshold for inverting imaginary frequencies for thermo in cm-1. default: -20.0.
  • scale=real β€” scaling factor for frequencies in the vibrational partition function. default: 1.0.
  • sthr=real β€” rotor cut-off (cm-1) in thermo. default: 50.0.

🧱 $wall 🧱

walls!! we love a boundary condition. keeping your atoms from wandering off into the void 🫢

  • potential=logfermi|polynomial β€” sets the kind of wall potential used. default: polynomial.
  • alpha=int β€” exponent of the polynomial wall potential. default: 30.
  • beta=real β€” exponent of the logfermi bias potential. default: 6.0.
  • autoscale=real β€” scales the axis of automatically determined wall potentials by real.
  • axisshift=real β€” constant offset used in the automatic dermined wall potential axis. default: 3.5.
  • temp=real β€” temperature of the logfermi wall. default: 300.0 K. the wall energy of logfermi is multiplied with kT.
  • sphere: auto|real,all|list,... β€” sets up a spherical wall potential for all or the atoms in list with the radius real or an automatical determined sphere radius.
  • ellipsoid: auto|real,auto|real,auto|real,all|list,... β€” sets up an ellipsoid wall potential for all or the atoms in list with the radii real or an automatical determined sphere radius. if auto is chosen for axes, a sphere potential is applied, no ellipsoid!!! 🚨
  • sandwich: auto|real,all|list,... β€” sets up a sandwich wall potential for all or the atoms in list with the radius real or an automatical determined sandwich radius in Bohr. only potential=logfermi ist available. diameter=2*radius+2*4A safety buffer.

πŸ“ $write πŸ“

the output group, aka the "show me everything" group. files go brrr πŸ–¨οΈ

  • esp=bool β€” calculate and print electrostatic potential. this will create a data file and a cosmo file.
  • gridfile=file β€” read gridpoints for the ESP calculation from file.
  • mos=bool β€” print molden file.
  • lmo=bool β€” localize orbitals and print out LMO centers.
  • density=bool β€” calculate density on a cube grid.
  • spin population=bool β€” spin population analysis.
  • spin density=bool β€” calculate spin density on a cube grid.
  • fod=bool β€” calculate FOD on a cube grid (set the electronic temperature to at least 12500 K).
  • wiberg=bool β€” calculate and print Wiberg bond order.
  • dipole=bool β€” calculate and print dipole moment.
  • charges=bool β€” print charges file.
  • mulliken=bool β€” print mulliken population analysis.
  • orbital energies=bool β€” print orbital energies and occupation numbers.
  • stm=bool β€” creates an STM image of the molecule, see the stm group (6.1 only).
  • geosum=bool β€” old style geometry summary.
  • inertia=bool β€” geometry summary on moments on inertia and rotational constants (available with --define).
  • distances=bool β€” geometry summary on distances and bonds (available with --define).
  • angles=bool β€” geometry summary on angles (available with --define).
  • torsions=bool β€” geometry summary on dihedral angles and torsions (available with --define).
  • vib_normal_modes=bool β€” write normal modes as Turbomole vibrational modes data group.
  • hessian.out=bool β€” write a DFTB+ style hessian.out file containing the unprojected hessian.

πŸ‘΅ LEGACY πŸ‘΅

okay so for the old heads: to keep compatibility with versions of xtb(1) from before version 6.0, a group instruction set is allowed that accepts the same syntax as the original set-block. here's the whole list of set-block commands and their corresponding instructions in xcontrol(7) πŸ’Ύ

Note ⚠️ xtb(1) can read a set-block by itself and will print out an equivalent instruction set. this feature will be deprecated in future versions since the set-block is less flexible than xcontrol(7) and might be deactived without prior announcement! so like, migrate bestie, for real 😭
  • broydamp β€” use broydamp in the scc group instead
  • chrg, charge β€” use chrg logical instead
  • constrainallbo, constralltbo β€” currently not supported
  • constrainalltors, constralltors β€” currently not supported
  • constrain β€” use the constrain group instead
  • constrainel β€” currently not supported
  • constrfc β€” use force constant in the constrain group instead
  • constrxyz β€” use atoms in the fix group instead
  • cube_cal β€” use cal in the cube group instead
  • cube_pthr β€” use pthr in the cube group instead
  • cube_step β€” use step in the cube group instead
  • desymaxat β€” use maxat in the symmetry group instead
  • desy β€” use desy in the symmetry group instead
  • ellips β€” use ellipsoid in the wall group instead
  • etemp β€” use temp in the scc group instead
  • ex_open_HS β€” currently not supported
  • ex_open_LS β€” currently not supported
  • fit β€” use fit logical instead
  • fix β€” use atoms in the fix/constrain group instead
  • fixfc β€” use force constant in the constrain group instead
  • fragment1 β€” use fragment1 in the split group instead
  • fragment2 β€” use fragment1 in the split group instead
  • gbsa β€” use solvent in the gbsa group instead
  • gfnver β€” use version in the gfn group instead
  • hessa β€” currently not supported
  • hessf β€” use freeze in the fix group instead
  • hlowopt β€” use hlow in the opt group instead
  • ion_rad β€” use ion_rad in the gbas group instead
  • ion_st β€” use ion_st in the gbsa group instead
  • maxdispl β€” use maxdipl in the opt group instead
  • maxopt β€” use maxcycle in the opt group instead
  • mddumpxyz β€” use dump in the md group instead
  • md_hmass β€” use hmass in the md group instead
  • mdskip β€” use skip in the md group instead
  • mdstep β€” use step in the md group instead
  • mdtemp β€” use temp in the md group instead
  • mdtime β€” use time in the md group instead
  • microopt β€” use mircocycle in the opt group instead
  • mode_local β€” use local in the modef group instead
  • mode_n β€” use n in the modef group instead
  • mode_prj β€” use prj in *modef group instead
  • mode_step β€” use step in the modef group instead
  • mode_updat β€” use updat in the modef group instead
  • mode_vthr β€” use vthr in the modef group instead
  • nvt β€” use nvt in the md group instead
  • optlev β€” use optlevel in the opt group intead
  • orca_exe β€” currently not supported
  • orca_line β€” currently not supported</p> πŸ’€ sorry bestie, it's just not a thing rn
  • orca_mpi β€” also currently not supported</p> 😭
  • restartmd, mdrestart β€” nah, use restart in the md group instead ✨
  • runtyp β€” please use the commandline instead, it might still work but like… don't count on it πŸ™ˆ
  • s6opt β€” use s6 in the opt group instead πŸŽ€
  • samerand β€” use the samerand logical instead πŸ¦‹
  • scan β€” use the scan group instead ⭐
  • scchess β€” use sccacc in the hess group instead πŸ’…
  • sccmd β€” use sccacc in the md group instead πŸ’…
  • shake β€” use shake in the md group instead 🌸
  • sphere β€” use sphere in the sphere group instead 🌈
  • springexp β€” use springexp in the fix group instead 🧚
  • stephess β€” use step in the *hess group instead πŸ‘‘
  • thermo_sthr β€” use sthr in the thermo group instead πŸ”₯
  • thermo β€” use temp in the thermo group instead 🌑️
  • uhf β€” use the uhf logical instead πŸ’œ
  • velodump β€” use velo in the md group instead πŸ“

πŸ› BUGS πŸ›

ok so if you find a bug (and you will, it's software, it's giving humble πŸ’€) please report it with:

  • an example input 🫢
  • a --copy dump of the internal settings πŸ“‹
  • the geometry you used πŸ“
  • and the --verbose output πŸ“’

…and send all of that to xtb@thch.uni-bonn.de πŸ’Œ

bestie, no cap, sending all four of those is the move β€” it's literally impossible to help you without them 😭

🌐 RESOURCES 🌐

Main web site: http://grimme.uni-bonn.de/software/xtb ✨


πŸ“œ COPYING πŸ“œ

Copyright (C) 2015-2020 S. Grimme. This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0). πŸ’–


and that's the whole page, bestie!! πŸŽ€βœ¨ you made it to the end, which is honestly iconic of you πŸ‘‘ this was XCONTROL(7) from 2025-09-15 β€” mwah πŸ’…πŸ’–

πŸ“¦ where this page comes from