Here we will discuss the most important differences between Cuby versions 3 and 4.
Cuby has now only one executable, cuby4. What kind of job is run is defined in the input, using the job keyword. Alternatively, the job type can be specified on the command line using the -j switch.
To perform a calculation, Cuby expects just one argument: the name of the input file. The geometry is also defined in the input using the geometry keyword. Again, the value of this keyword can be set from the command line using the -g option.
The input for Cuby 4 is very similar to the one for Cuby3 and it is still based on the YAML format. However, the input for Cuby 4 is more structured. In some cases, the input becomes more complex but the new format allows to define much more complicated composite jobs. The most important rule is that each calculation performed reads its settings from a separate block of the input.
For example, a DFT calculation with a modifier adding the D3 dispersion in Cuby 3 mixed the parameters for both calculations at the root level of the input:
functional: b-lyp basisset: def2-QZVP modifiers: dispersion3 disp3_sr6: 1.5 disp3_s8: 0.8
In Cuby 4, the settings for the dispersion are read from a child block (named, with entries indented with respect to the parent level). The name of the block is derived from the name of the modifier (note that the keywords for the parameters has been renamed as well):
functional: b-lyp basisset: def2-QZVP modifiers: dispersion3 modifier_dispersion3: d3_sr6: 1.5 d3_s8: 0.8
However, the block does not have to be present if a default setup is determined by Cuby. In this case, Cuby will automatically use the default setup for the functional and basis set used in the parent DFT calculation.