# Embarrassing Parallelism

Many of the tasks automated by Python wrappers consist of a number of independent Psi4 calculations and are thus suited to an embarrassingly parallel mode of operation. In Psithon, these have been dubbed sow/reap procedures and have the following general structure.

> - Prepare an input file, simply adding `mode='sow'` to the argument list of an available Python function. Run this quick job to produce input files for lengthier calculations.
> - According to the instructions in the output file of the above step, run the generated input files in any order on any variety of computers and architectures. This is the time-intensive portion of the calculation.
> - The ‘sow’ stage also produces a master input file (with a `mode='reap'` directive). When all the jobs in the above step are completed, place their output files in the same location as the master input, and run this last, quick job to collect the results.

- Sow/reap procedures are governed by the mode keyword, choices being `'continuous'`, `'sow'`, and `'reap'`. Only `'sow'` is likely to be used by the user, as `'continuous'` is always the default, and input files with `'reap'` are autogenerated.
- Available at present for Database, finite difference operation of Optimize, and finite difference of energies of Frequency.

Caution

Some features are not yet implemented. Buy a developer a coffee.

- Local options (e.g., `set scf e_convergence 9`) will not get transmitted to the child jobs.
- Array options (e.g., `set states_per_irrep [2, 1]`) will not get transmitted to the child jobs.
- Function intercalls (e.g., db(opt())) are not tested with sow/reap procedures.