Examples
ARC’s examples folder (ARC/examples) is an excellent resource for up-to-date sample input files, demonstrating different features. Below are examples for common basic tasks performed using ARC.
Calculating thermodynamic properties
The example below shows how to set the levels of theory and job types. Multiple species are defined using SMILES / an XYZ list / InChI:
project: arc_demo_1
ess_settings:
  gaussian:
  - local
  - server1
  molpro:
  - server1
  qchem:
  - server2
job_types:
  rotors: true
  conf_opt: true
  fine: true
  freq: true
  opt: true
  sp: true
max_job_time: 24
level_of_theory: CCSD(T)-F12/cc-pVTZ-F12//wb97xd/def2tzvp
scan_level: wb97xd/def2tzvp
conformer_level:
  method: b3lyp
  basis: '6-311+g(d,p)'
  dispersion: empiricaldispersion=gd3bj
species:
- label: propane
  smiles: CCC
- label: vinoxy
  xyz:
  - |
    O       1.35170118   -1.00275231   -0.48283333
    C      -0.67437022    0.01989281    0.16029161
    C       0.62797113   -0.03193934   -0.15151370
    H      -1.14812497    0.95492850    0.42742905
    H      -1.27300665   -0.88397696    0.14797321
    H       1.11582953    0.94384729   -0.10134685
  - |
    O       1.49847909   -0.87864716    0.21971764
    C      -0.69134542   -0.01812252    0.05076812
    C       0.64534929    0.00412787   -0.04279617
    H      -1.19713983   -0.90988817    0.40350584
    H      -1.28488154    0.84437992   -0.22108130
    H       1.02953840    0.95815005   -0.41011413
  - |
    O      -1.15888237    1.27653343    0.30527086
    C       0.63650559   -0.15873769   -0.22478280
    C      -0.59108268    0.16116823    0.20729283
    H       1.31343166    0.61755575   -0.56336439
    H       0.97181468   -1.18699193   -0.24372402
    H      -1.17178687   -0.70952779    0.51930751
- label: propanol
  inchi: InChI=1S/C3H8O/c1-2-3-4/h4H,2-3H2,1H3
In the above example, level_of_theory is a directive that specifies in one line the
sp_method/sp_basis_set//opt_method/opt_basis_set. Specifying the level_of_theory
also sets the freq_level as equal to the opt_level. Note that if the scan_level
isn’t set, and ARC will use the default in settings.py unless directed otherwise.
To specify a composite method, simply define something like:
level_of_theory: CBS-QB3
Note that for composite methods the freq_level and scan_level may have different
default values than for non-composite methods (defined in settings.py). Note: an independent
frequencies calculation job is automatically executed after a composite job just so that the Hamiltonian will
be outputted.
For detailed discussion on specifying levels of theory (e.g., including auxiliary basis sets and DFT dispersions), see see Levels of theory.
The same example as above ran via the API (e.g., in Jupyter notebooks) would look like the following:
from arc import ARC
from arc.species import ARCSpecies
from IPython.display import display
%matplotlib notebook
spc1 = ARCSpecies(label='propane', smiles='CCC')
xyz_list = ["""O       1.35170118   -1.00275231   -0.48283333
               C      -0.67437022    0.01989281    0.16029161
               C       0.62797113   -0.03193934   -0.15151370
               H      -1.14812497    0.95492850    0.42742905
               H      -1.27300665   -0.88397696    0.14797321
               H       1.11582953    0.94384729   -0.10134685""",
            """O       1.49847909   -0.87864716    0.21971764
               C      -0.69134542   -0.01812252    0.05076812
               C       0.64534929    0.00412787   -0.04279617
               H      -1.19713983   -0.90988817    0.40350584
               H      -1.28488154    0.84437992   -0.22108130
               H       1.02953840    0.95815005   -0.41011413""",
            """O      -1.15888237    1.27653343    0.30527086
               C       0.63650559   -0.15873769   -0.22478280
               C      -0.59108268    0.16116823    0.20729283
               H       1.31343166    0.61755575   -0.56336439
               H       0.97181468   -1.18699193   -0.24372402
               H      -1.17178687   -0.70952779    0.51930751"""]
spc2 = ARCSpecies(label='vinoxy', xyz=xyz_list)
spc3 = ARCSpecies(label='propanol', inchi='InChI=1S/C3H8O/c1-2-3-4/h4H,2-3H2,1H3')
arc = ARC(project='arc_demo_1',
          ess_settings={'gaussian': ['local', 'server1'], 'molpro': 'server1', 'qchem': 'server2'},
          job_types={'rotors': True, 'conf_opt': True, 'conf_sp': True, 'fine': True, 'freq': True, 'opt': True, sp: True},
          max_job_time=24,
          level_of_theory='CCSD(T)-F12/cc-pVTZ-F12//wb97xd/def2tzvp',
          scan_level='wb97xd/def2tzvp',
          conformer_opt_level='b3lyp/6-311+g(d,p)',
          species=[spc1, spc2, spc3],
          )
arc.execute()
Optimizing transition states
Here’s an example for optimizing a transition state (TS) after generating several guesses, say in GaussView:
project: BNdTSs
level_of_theory: apfd/def2TZVPP
freq_scale_factor: 0.992
species:
  - label: TS1
    is_ts: true
    multiplicity: 2
    xyz:
      - TS1/1.gjf
      - TS1/2.gjf
      - TS1/3.gjf
      - TS1/4.gjf
      - TS1/5.gjf
      - TS1/6.gjf
  - label: TS3
    is_ts: true
    multiplicity: 2
    xyz:
      - TS3/1.gjf
      - TS3/2.gjf
      - TS3/3.gjf
      - TS3/4.gjf
In the above example we’re using .gjf files (Gaussian job files) that contain the coordinate guesses.
You could define xyz using various forms, see Flexible coordinates (xyz) input.
Note that the main difference is the is_ts flag which is set to True (it is False by default).