Choosing a basis set is an important part of running a quantum chemical calculation. Rowan supports many commonly used basis sets of various sizes, permitting users to select the best basis set for their applciation.

When submitting calculations using the Python API, basis sets can be selected through their name, typically the one in the Basis Set Exchange.
If no basis set is specified, `STO-3G`

will be used.

```
import cctk
import rowan
rowan.api_key = "rowan-SK"
client = rowan.Client()
# load molecule by name
molecule = cctk.Molecule.new_from_name("cyclopentane")
# run calculation remotely and return result
result = client.compute(
"calculation",
input_mol=molecule,
name="opt cyclopentane",
method="b3lyp",
basis_set="6-31G*",
tasks=["optimize", "frequency"]
)
```

For instructions on how to select basis sets when submitting calculations using the web interface, see the web interface documentation.

Generally contracted basis sets are not handled efficiently in Rowan (and many other programs: see this explanation), so we recommend avoiding general contraction unless there is no reasonable alternative. This will probably change in the future.

Rowan uses "pure"/spherical basis functions for d orbitals and higher, meaning that there are 5 d orbitals instead of 6, 7 f orbitals instead of 10, and so forth. This increases computational efficiency because the number of orbitals grows as $L$ and not as $L^2$, but differs from how some other programs are structured (for instance, Gaussian uses 6 d functions for Pople basis sets).

Rowan does not currently support effective core potentials, although we hope to change this in the near future. There is also currently no way to specify custom basis sets in Rowan, or to employ different basis sets on different atoms.

The number of basis sets available through the Basis Set Exchange can be overwhelming! Here are some common choices, as well as some less common but underrated choices:

The venerable `STO-nG`

family of minimal basis sets can be requested for any `n`

between 2 and 6.
`STO-3G`

is probably the most popular: however, `HF-3c`

or `MIDI!`

might be a better choice today.

Perhaps the most famous basis sets are Pople's `6-31`

basis sets.
The ubiquitous "6-31G(d)" double-zeta basis set can be requested as `6-31G*`

, while a larger basis set suitable for single-point calculations is `6-311+G(2d,p)`

.
There are many other combinations of augmentation, zeta, and polarization functions possible, but most of them are considered unbalanced and should be avoided.

An underrated class of basis sets for density-functional theory is Frank Jensen's `pcseg`

family.
`pcseg-0`

requests a minimal basis set, `pcseg-1`

requests a double-zeta basis set, and so on up until `pcseg-4`

.
Augmentation can be requested by prepending "aug", so the augmented triple-zeta Jensen basis set is `aug-pcseg-2`

.

In our experience, these basis sets often dramatically outperform Pople basis sets without incurring a higher computational cost.
(See also this discussion by Jensen himself, comparing the `pcseg`

and `6-31`

basis sets.)

The correlation-consistent basis sets of Thom Dunning can be requested with keywords `cc-pVDZ`

, `cc-pVTZ`

, and so forthâ€”but these basis sets are generally contracted and thus horribly slow.
Instead, we recommend using the "(seg-opt)" variants, which are almost exactly the same but will run much faster.
(Gaussian performs an analogous operation on the Dunning basis sets: see the discussion on their website.)

To request these basis sets, use the keywords `cc-pVDZ(seg-opt)`

, `cc-pVTZ(seg-opt)`

, and `cc-pVQZ(seg-opt)`

.
Unfortunately, those are the only three Dunning basis sets with optimized variants in the Basis Set Exchange, so any other Dunning basis sets will be very slow (e.g. `aug-cc-pVTZ`

).

The `def2`

family of basis sets from Ahlrichs/Karlsruhe can be requested with keywords `def2-SV(P)`

, `def2-TZVP`

, and so forth.
Their minimally augmented congeners are not yet available on the Basis Set Exchange, but will hopefully be added soon.

The very efficient polarized minimal basis set `MIDI!`

/`MIDIX`

is available under either name, and is a good choice when speed is at a premium (see the discussion here).

Choosing a basis set is challenging but important: this recent paper from Grimme and co-workers offers many useful recommendations depending on the task at hand.
In general, we find Jensen's `pcseg`

basis sets are a great choice for DFT calculations: in particular, `pcseg-1`

is a drop-in replacement for `6-31G(d)`

with substantially higher accuracy.

While augmentation can be essential in certain cases (e.g. anionic systems), it should be avoided if it's not absolutely necessary, because it can lead to immense challenges with runtime and SCF convergence.