Usage

cis-4-hexen-1-ol

Example of calculating the 1H-NMR spectrum of cis-4-hexen-1-ol in CHCl3 at 400 MHz.

  > cat coord
  $coord
     -4.5787202885           -0.8553740252            1.3686940377   C
     -3.4023148672           -0.1930996279           -1.1104654057   C
     -1.3502307141            1.1896725766           -1.5219716436   C
      0.3006494795            2.4620980359            0.3955352829   C
      0.2362191223            4.5001215909            0.0503890823   H
      3.0642161355            1.6025835718            0.2096773622   C
      3.4178595291           -1.1774351958            0.9222138508   C
      2.5415191057           -2.8708599609           -0.9480135970   O
      0.8099880164           -2.4078504756           -1.3346662145   H
      5.4277591776           -1.6058314070            1.1410607567   H
      2.4658368243           -1.5681688895            2.7281288136   H
      4.2123967195            2.7454371194            1.4856132673   H
      3.7614131313            1.8836292778           -1.7127605110   H
     -0.3830548458            2.1258051759            2.3091187341   H
     -0.7518930894            1.4941446048           -3.4579714157   H
     -4.3910561682           -0.9675515200           -2.7291675973   H
     -3.5318795176           -0.1003881407            2.9630921609   H
     -6.5027613245           -0.1227486813            1.4413316443   H
     -4.6902514935           -2.9039535570            1.5605291206   H
$end
structure

Input structure.

Start with your (at best already optimized) input structure and create the conformers and rotamers for the ENSO and ANMR calculation.

> crest coord -gfn2 -g chcl3 -T 4 -nmr > crest.out

In our case CREST found 51 conformers within an energy window of 6 kcal/mol. We then create a new folder for the ENSO reranking and copy the necessary files:

mkdir enso
cp crest_conformers.xyz coord anmr_nucinfo anmr_rotamer enso/
cd enso/

ENSO requires only the file crest_conformers.xyz, but ANMR needs the last three files. In the new folder we create the file flags.dat and adapt it to our choosing. Here we want to calculate everything with TURBOMOLE using PBEh-3c and DCOSMO-RS for geometry optimization:

enso.py --solvent chcl3 --program tm --programpart4 tm --gfnversion gfn2
    --ancoptoptimization on --functional pbeh-3c --solventmodel dcosmors

Tip

You don’t need to give all information using the commandline input and can simply run enso.py without any arguments. This will create the file flags.dat and you can change all information there. But using the commandline input reassures that you don’t have any typos.

> cat flag.dat

FLAGS
nconf: all                                 # all or integer between 0 and total number of conformers
charge: 0                                  # integer
unpaired: 0                                # integer
solvent: chcl3                             # acetone, acetonitrile, chcl3, ch2cl2, dmso, h2o, methanol, thf, toluene, gas
prog: tm                                   # tm, orca
ancopt: on                                 # on, off
prog_rrho: xtb                             # xtb, prog
gfn_version: gfn2                          # gfn1, gfn2
temperature: 298.15                        # in Kelvin
prog3: tm                                  # tm, orca, prog
prog4: tm                                  # prog, tm, orca
part1: on                                  # on, off
part2: on                                  # on, off
part3: on                                  # on, off
part4: on                                  # on, off
boltzmann: off                             # on, off
backup: off                                # on, off
func: pbeh-3c                              # pbeh-3c, b97-3c, tpss
func3: pw6b95                              # pw6b95, wb97x, dsd-blyp
basis3: def2-TZVPP                         #
couplings: on                              # on, off
funcJ: pbe0                                # tpss, pbe0
basisJ: default                            #
shieldings: on                             # on, off
funcS: pbe0                                # tpss, pbe0
basisS: default                            #
part1_threshold: 4.0                       # integer or real number
part2_threshold: 2.0                       # integer or real number
sm: dcosmors                               # cosmo, dcosmors, cpcm, smd
smgsolv2: sm                               # sm, cosmors
sm3: dcosmors                              # dcosmors, cosmors, smd
sm4: cosmo                                 # cosmo, cpcm, smd
check: on                                  # on, off
crestcheck: off                            # on, off
maxthreads: 1                              # integer larger than 0
omp: 4                                     # integer larger than 0
reference for 1H: TMS                      # TMS, DSS
reference for 13C: TMS                     # TMS, DSS
1H active: on                              # on, off
13C active: off                            # on, off
19F active: off                            # on, off
31P active: off                            # on, off
resonance frequency: 400                   # integer
end

Information on each setting can be found in Settings in .ensorc and flags.dat. Once you have adapted your flags.dat file we can run an input check, testing if the information in flags.dat is correct (no typos and settings combinations are ok {eg. TURBOMOLE doesn’t work with the solvent model SMD}). To do so run:

> enso.py --checkinput

     __________________________________________________
    |                                                  |
    |                                                  |
    |                       ENSO -                     |
    |         energetic sorting of CREST CRE           |
    |          for automated NMR calculations          |
    |             University of Bonn, MCTC             |
    |                    July 2018                     |
    |                   version 1.26                   |
    |  F. Bohle, K. Schmitz, J. Pisarek and S. Grimme  |
    |                                                  |
    |__________________________________________________|

.ensorc is taken from: /home/bohle/.ensorc
Reading absolute paths of programs employed in ENSO.

The following pathways were read in:
    ORCA:    /tmp1/orca_4_1_0_linux_x86-64_openmpi215
    GFN-xTB: /home/abt-grimme/AK-bin/xtb
    CREST:   /home/bohle/bin/crest
    mpshift: /home/bohle/bin/xmpshift
    escf:    /home/bohle/bin/xescf
    Set up of COSMO-RS:
        ctd = BP_TZVP_C30_1601.ctd
        cdir = "/software/cluster/COSMOthermX16/COSMOtherm/CTDATA-FILES"
        ldir = "/software/cluster/COSMOthermX16/COSMOtherm/CTDATA-FILES"
    Using /software/cluster/COSMOthermX16/COSMOtherm/DATABASE-COSMO/BP-TZVP-COSMO
    as path to the COSMO-RS DATABASE.

Reading user set defaults.
Using conformers from file crest_conformers.xyz.
Using cefine from /home/bohle/bin/cefine
PARNODES for TM or COSMO-RS calculation was set to 4

-----------------------------------------------------------
 PARAMETERS
-----------------------------------------------------------

number of atoms in system:                                     19
number of conformers:                                          51
charge:                                                        0
unpaired:                                                      0
solvent:                                                       chcl3
program for part1 and part2:                                   tm
program for part 3:                                            tm
program for part 4:                                            tm
using ANCOPT implemented in GFN-xTB for the optimization:      on
program for RRHO in part 2 and part 3:                         xtb
temperature:                                                   298.15
GFN-xTB version for RRHO in part 2 and part 3:                 gfn2
part 1:                                                        on
part 2:                                                        on
part 3:                                                        on
part 4:                                                        on
only boltzmann population:                                     off
calculate backup conformers:                                   off
functional for part 1 and 2:                                   pbeh-3c
functional for part 3:                                         pw6b95
basis set for part 3:                                          def2-TZVPP
calculate couplings:                                           on
functional for coupling calculation:                           pbe0
basis set for coupling calculation:                            def2-TZVP
calculate shieldings:                                          on
functional for shielding calculation:                          pbe0
basis set for shielding calculation:                           def2-TZVP
threshold for part 1:                                          4.0 kcal/mol
threshold for part 2:                                          2.0 kcal/mol
solvent model for part 1 and part 2:                           dcosmors
solvent model for Gsolv contribution of part 2:                sm
solvent model for part 3:                                      dcosmors
solvent model for part 4:                                      cosmo
cautious checking for error and failed calculations:           on
checking the DFT-ensemble using CREST:                         off
maxthreads:                                                    1
omp:                                                           4
calculating spectra for:                                       1H
reference for 1H:                                              TMS
reference for 13C:                                             TMS
reference for 19F:                                             CFCl3
reference for 31P:                                             TMP
resonance frequency:                                           400

END of parameters
Input check is finished. The ENSO program can be executed with the flag -run.

Please read possible errors at the beginning of the output carefully, they will hint if your external programs are set up correctly. If you run the ENSO calculation on a cluster, make sure that all programs are setup correctly in your jobscript (see Running on a cluster).

Before starting the ENSO calculation, we have to set the number of threads (maxthreads) (individual calculations e.g. single-points) and number of cores each thread should have (omp). The total number of cores (maxthreads * omp) available on your computer is not to be exceeded! These settings can be written to the global configuration file (if you calculate always on the same machines) or can be adapted for the individual calculation in the local configuration file flags.dat.

Tip

When running enso on a cluster it is necessary to source and/or export paths for all employed programs!

Now enso can be run with:

> enso.py -run > enso.out 2> error.enso &

In the following, only parts of the output are shown to highlight important information. During this run in part1 (crude optimization) 49 conformers are within an energy threshold of 4 kcal/mol. These conformers are considered for the full optimization in part2. The two remaining conformers are between 4 and 6 kcal/mol and are considered as backup-confomers. Information of backup conformers is stored in the file enso.json. Since the potential hypersurface between GFNn-xTB and DFT needs not to be parallel, in some cases conformers can be high lying at GFNn-xTB level and low lying at DFT level. To have an automated way of including conformers which would otherwise be disgarded, the ‘backup’ function is introduced and can be activated (after the first enso-run, if it is apparent that dominant conformers are missing) in the local configuration file flags.dat. For this purpose simply restart your enso calculation in the same folder and only change backup: on in the file flags.dat. Then all conformers which are denoted backup-conformers (this information is saved in the file enso.json) will be optimized and evaluated in the sorting procedure.

In part2 first the full DFT optimization is performed and thermostatistical and solvation contributions are calculated to obtain low-level free energies. All conformers below a free energy threshold of 2 kcal/mol are considered further. In this run 35 conformers are considered for part3 and 14 conformers are marked as backup conformers of part2. After the full optimization at DFT level it is possible that some conformers could have become rotamers or identical conformers. This would influence the Boltzmann weights and increase computational cost unnecessary. To identify them the CREST program is called:

Checking if conformers became rotamers of each other during the DFT-optimization.
The check is performed in the directory conformer_rotamer_check.
Calling CREST to identify rotamers.

WARNING: The following conformers are identified as rotamers or identical.
WARNING: They are NOT sorted out since crestcheck is switched off.
CONFA  E(A):       G(A):<--> CONFB  E(B):       G(B):
CONF6  -310.39382  0.43 <--> CONF16 -310.39386  0.34
CONF20 -310.39317  0.50 <--> CONF17 -310.39321  0.96
CONF39 -310.39260  1.08 <--> CONF38 -310.39269  0.96
CONF46 -310.39195  1.70 <--> CONF13 -310.39196  2.03

Since the crestcheck flag is switched off, the conformers are not automatically sorted out and the user has to visually inspect the molecules and sort the conformers as described in Sorting out rotamers at DFT level detected by CREST. We advise you to sort out conformers manually.

In part3 high level DFT single-points are calculated on the 35 conformers passed from part2. The boltzmann weights are calculated and 24 conformers are considered for the NMR property calculations in part4. The ‘file populated-conf-part3.xyz’ is written at the end of part3 and contains all populated conformers. The file ‘anmr_enso’ is written which is read from ANMR and provides the Boltzmann weights of the populated conformers.

In part4 the couplings and shielding calculations were performed. Finally the file .anmrrc file is written.

At the very end ENSO checks if possible rotamers of each other are in the populated ensemble and notifies the user:

writing .anmrrc
Results are written to enso.json.
***---------------------------------------------------------***
Printing most relevant errors again, just for user convenience:
Possible rotamers of each other still in final ensemble: CONF39 <--> CONF38. Please check by hand!
Possible rotamers of each other still in final ensemble: CONF20 <--> CONF17. Please check by hand!
Possible rotamers of each other still in final ensemble: CONF6  <--> CONF16. Please check by hand!
***---------------------------------------------------------***

 END of part4.

-----------------------------------------------------------

ENSO all done!

After inspecting the conformers CONF39 is removed from the ensemble (details on how to do that are shown in Sorting out rotamers at DFT level detected by CREST), because I considered it to be identical to CONF38. After removing the identical conformer we can restart enso.

> enso.py -run > enso.out 2> error.enso &

This time enso will read all necessary information from the file enso.json and operate with this data. At the end of part3 the Boltzmann weight is recalculated and two conformers are now additionally populated. For them coupling and shielding constants are calculated in part4. All files for ANMR are updated.

Now all information is present and ANMR can be called to calculate the full NMR spectrum:

> anmr > anmr.out 2> error.anmr &
       +--------------------------------------+
       |              A N M R                 |
       |             S. Grimme                |
       |      Universitaet Bonn, MCTC         |
       |             1989-2019                |
       |            version 3.5               |
       |     Sat Feb  9 06:41:57 CET 2019     |
       +--------------------------------------+
       Based on a TurboPascal program written
       in 1989 which was translated to F90 in
       2005 and re-activated in 2017.
       Please cite work employing this code as:
       ANMR Ver. 3.5: An automatic, QC based
       coupled NMR spectra simulation program.
       S. Grimme, Universitaet Bonn, 2019
       S. Grimme, C. Bannwarth, S. Dohm, A. Hansen
       J. Pisarek, P. Pracht, J. Seibert, F. Neese
       Angew. Chem. Int. Ed. 2017, 56, 14763-14769.
       DOI:10.1002/anie.201708266


 =============================
    # OMP threads =           1
 =============================
 reading <.anmrrc> for standard data
 Read TM from anmrrc
           1   31.7860000000000       0.000000000000000E+000           1
           6   189.674000000000       0.000000000000000E+000           0
           9   182.570000000000       0.000000000000000E+000           0
          15   291.900000000000       0.000000000000000E+000           0
1H resonance frequency (-mf <real>)    :  400.00
line width             (-lw <real>)    :    1.00
number of all conformers               :25
remove J couplings to OH groups        : T
maximum spin system size in a fragment :14
fragmentation type (0=none,1=at,2=mol) : 2
chemical shift scalings a,b            :    1.00    0.00
spin-spin coupling scal factor         :    1.07
plot offset                            :    0.00
Active nuclei                          :H
...
SKIPPING A LOT OF OUTPUT
...
            === FRAGMENTED SYSTEM ===
 ====================================================
      solving (J/sigma) averaged spin Hamiltonian
 ====================================================
          spinsystem            1  with            9  spins
          1024 product functions    12 Mt blocks, largest is    210
  1(   1)  2(   9)  3(  37)  4(  93)  5( 162)  6( 210)  7( 210)  8( 162)  9(  93) 10(  37) 11(   9) 12(   1)
first maxtrix multiply,  sparsity in %    99.536 ...
second maxtrix multiply, sparsity in %    94.781 ...
           512 product functions    10 Mt blocks, largest is    126
  1(   1)  2(   9)  3(  36)  4(  84)  5( 126)  6( 126)  7(  84)  8(  36)  9(   9) 10(   1)
first maxtrix multiply,  sparsity in %    99.121 ...
second maxtrix multiply, sparsity in %    91.919 ...
 done.
       12436  non-zero transitions.
 spectrum on <anmr.dat>
 Range (delta in ppm)   0.437872924804687        7.03675048828125
 Range (delta in Hz)     175.149169921875        2814.70019531250
 Min/max Int.      )    4.171584807901128E-003
 computing spectrum ...
 done.
 writing output file ...
 done.
 All done.

After ANMR finished computing, the file anmr.dat is written and it contains the spectrum (intensity vs shift) the user can plot:

> nmrplot.py -i anmr.dat exp.dat -start 0 -end 6.5 -o 1Hspectrum -orientation 1 -1
1H NMR spectrum

1H NMR spectrum of cis-4-hexen-1-ol in chloroform at 400 MHz, comparing calculated and experimental spectrum. Exp taken from [SDBSWeb : https://sdbs.db.aist.go.jp (National Institute of Advanced Industrial Science and Technology,16-10-2019) (SDBSNo. 11748)].

2-methyl-1-pentene

Example of calculating the 1H-NMR spectrum of 2-methyl-1-pentene in CHCl3 at 400 MHz.

> cat coord
$coord
       -5.1134989926            0.0445408597            0.0007215195   C
       -2.3988260553            0.1202192416            0.9598504570   C
       -2.0426150350            1.9467776447            1.8509773297   H
       -0.4955528936           -0.3025973506           -1.1852527430   C
        2.1853738985           -0.2583887206           -0.2367582425   C
        3.4286190716           -2.3618737092            0.3005853656   C
        2.5901373582           -4.2004809628            0.0485727882   H
        5.3374488734           -2.3390838060            1.0097369787   H
        3.3398174602            2.3079102171            0.0825121447   C
        5.2234930962            2.1788391495            0.8913733279   H
        2.1708137054            3.4751040066            1.3098219746   H
        3.4682822356            3.2543034689           -1.7427970988   H
       -0.7536049204            1.1708293724           -2.6081830586   H
       -0.8901990516           -2.1258718566           -2.0673390015   H
       -2.1284937554           -1.3401645088            2.3937954454   H
       -6.4334377217            0.3509962700            1.5473865797   H
       -5.4204111085            1.5054637513           -1.4143993805   H
       -5.5276306722           -1.7796998127           -0.8540259276   H
$end
structure

Input structure.

Start with your (at best already optimized) input structure and create the conformers and rotamers for the ENSO and ANMR calculation.

> crest coord -gfn2 -g chcl3 -T 4 -nmr > crest.out

In our case CREST found 6 conformers within an energy window of 6 kcal/mol. We then create a new folder for the ENSO reranking and copy the necessary files:

mkdir enso
cp crest_conformers.xyz coord anmr_nucinfo anmr_rotamer enso/
cd enso/

ENSO requires only the file crest_conformers.xyz, but ANMR needs the last three files. In the new folder we create the file flags.dat and adapt it to our choosing. Here we want to calculate everything with ORCA using PBEh-3c and SMD for geometry optimization:

enso.py --solvent chcl3 --program orca --programpart4 orca --gfnversion gfn2
    --ancoptoptimization on --functional pbeh-3c --solventmodel smd
> cat flag.dat

FLAGS
nconf: all                                 # all or integer between 0 and total number of conformers
charge: 0                                  # integer
unpaired: 0                                # integer
solvent: chcl3                             # acetone, acetonitrile, chcl3, ch2cl2, dmso, h2o, methanol, thf, toluene, gas
prog: orca                                 # tm, orca
ancopt: on                                 # on, off
prog_rrho: xtb                             # xtb, prog
gfn_version: gfn2                          # gfn1, gfn2
temperature: 298.15                        # in Kelvin
prog3: prog                                # tm, orca, prog
prog4: prog                                # prog, tm, orca
part1: on                                  # on, off
part2: on                                  # on, off
part3: on                                  # on, off
part4: on                                  # on, off
boltzmann: off                             # on, off
backup: off                                # on, off
func: pbeh-3c                              # pbeh-3c, b97-3c, tpss
func3: pw6b95                              # pw6b95, wb97x, dsd-blyp
basis3: def2-TZVPP                         #
couplings: on                              # on, off
funcJ: pbe0                                # tpss, pbe0
basisJ: default                            #
shieldings: on                             # on, off
funcS: pbe0                                # tpss, pbe0
basisS: default                            #
part1_threshold: 4.0                       # integer or real number
part2_threshold: 2.0                       # integer or real number
sm: smd                                    # cosmo, dcosmors, cpcm, smd
smgsolv2: sm                               # sm, cosmors
sm3: smd                                   # dcosmors, cosmors, smd
sm4: cpcm                                  # cosmo, cpcm, smd
check: on                                  # on, off
crestcheck: off                            # on, off
maxthreads: 3                              # integer larger than 0
omp: 4                                     # integer larger than 0
reference for 1H: TMS                      # TMS, DSS
reference for 13C: TMS                     # TMS, DSS
1H active: on                              # on, off
13C active: off                            # on, off
19F active: off                            # on, off
31P active: off                            # on, off
resonance frequency: 400                   # integer
end

After ANMR finished computing, the file anmr.dat is written and it contains the spectrum (intensity vs shift) the user can plot:

> nmrplot.py -i anmr.dat exp.dat -start 0 -end 6 -o 1Hspectrum -orientation 1 -1
1H NMR spectrum

1H NMR spectrum of 2-methly-1-pentene in chloroform at 400 MHz, comparing calculated and experimental spectrum. Exp taken from [SDBSWeb : https://sdbs.db.aist.go.jp (National Institute of Advanced Industrial Science and Technology,16-10-2019) (SDBSNo. 225)].

Manually restarting calculations and modifying enso.json

In the event that an optimization failes, ENSO discardes the geometry and will not try to reoptimize the structure. The user can optimize the geometry manually and add the information on convergence (success) and energy (at the same level as all other calculations) to the file enso.json. When restarting ENSO the information on the conformers of the previous run is read from the file enso.json and the manually corrected conformer is further evaluated within the ongoing enso-run.

Here we show an example on how to manually restart an optimization (part1):

'In case of ORCA using the ANCOPT optimizer implemented in xtb:'

write the geometry in form of a coord file and add at the end of the file:
$external
    orca input file = inp
$end

The file 'inp' contains the input for the ORCA program eg.:

%MaxCore 8000
! def2-mSVP pbeh-3c grid4
!ENGRAD
!     smallprint printgap noloewdin
%output
       print[P_BondOrder_M] 1
       print[P_Mayer] 1
       print[P_basis] 2
end
%pal
    nprocs 7
end
%cpcm
 smd     true
 smdsolvent "chloroform"
end
* xyzfile 0 1 inp.xyz

Then convert the tmole coord file into an xmol file (required by the ORCA input):
> t2x coord > inp.xyz
and then run xtb as driver for ORCA:

> xtb coord --opt crude --orca > opt-part1.out

after convergence convert the optimized geometry back to the coord file!

If the optimization is converged the information has to be written to the enso.json file (to be on the save side, first make a copy of your enso.json file). enso.json contains data on each conformer in the following form:

"plain_uncalculated_CONF":
{
    "crude_opt": "not_calculated",
    "energy_crude_opt": null,
    "backup_for_part2": false,
    "consider_for_part2": true,
    "opt": "not_calculated",
    "energy_opt": null,
    "backup_for_part3": false,
    "sp_part2": "not_calculated",
    "energy_sp_part2": null,
    "consider_for_part3": true,
    "sp_part3": "calculated",
    "energy_sp_part3": null,
    "cosmo-rs": "not_calculated",
    "energy_cosmo-rs": null,
    "gbsa_gsolv": "not_calculated",
    "energy_gbsa_gsolv": null,
    "rrho": "calculated",
    "energy_rrho": null,
    "symmetry": "c1",
    "consider_for_part4": true,
    "1H_J": "not_calculated",
    "1H_S": "not_calculated",
    "13C_J": "not_calculated",
    "13C_S": "not_calculated",
    "19F_J": "not_calculated",
    "19F_S": "not_calculated",
    "31P_J": "not_calculated",
    "31P_S": "not_calculated"
    "removed_by_user": false
},
"CONF1-example":
{
    "crude_opt": "calculated",
    "energy_crude_opt": -1034.78500028827,
    "backup_for_part2": false,
    "consider_for_part2": true,
    "opt": "calculated",
    "energy_opt": -1034.786028019303,
    "backup_for_part3": true,
    "sp_part2": "calculated",
    "energy_sp_part2": -1034.76193327809,
    "consider_for_part3": false,
    "sp_part3": "not_calculated",
    "energy_sp_part3": null,
    "cosmo-rs": "calculated",
    "energy_cosmo-rs": -0.028947468366750467,
    "gbsa_gsolv": "not_calculated",
    "energy_gbsa_gsolv": null,
    "rrho": "calculated",
    "energy_rrho": 0.369622527533,
    "symmetry": "c1",
    "consider_for_part4": false,
    "1H_J": "not_calculated",
    "1H_S": "not_calculated",
    "13C_J": "not_calculated",
    "13C_S": "not_calculated",
    "19F_J": "not_calculated",
    "19F_S": "not_calculated",
    "31P_J": "not_calculated",
    "31P_S": "not_calculated",
    "removed_by_user": false
},

Now to change the information on the converged crude optimization (for the conformer CONFX), you have to change:

crude_opt: calculated
energy_crude_opt: eg: -1034.780801227157

Using the updated information, restart your enso-run and the program will automatically evaluate how to proceed with the new information(e.g. sort out this conformer or calculate a full optimization…). You can restart your ENSO-run with:

> enso.py -run > enso.out 2> error.enso &

Note

This procedure is not limited to optimizations, but every failed calculation can be manually performed. Then the result has to be written to the file enso.json in the same manner. Then ENSO can restart on the introduced information.

Sorting out rotamers at DFT level detected by CREST

In part2 the conformers are fully optimized at DFT level. It is possible that during optimization conformers can become rotamers or identical. To identify these the CREST program is called. If rotamers are found, then ENSO can sort them out if the crestcheck flag is set. Or the user is simply informed on the possible existence of these conformers and has to visually inspect the geometries, decide and adjust the necessary information in the file enso.json (which we recommend). Here we show which entries to change in the file enso.json:

Note

CREST evaluates conformers to be rotamers or identical based on thresholds concerning the electronic energy, rotational constant and RMSD on the geometries. Visual inspection of possible conformers is encouraged for molecules which show very similar conformers.

To sort out conformers, change the flag consider_for_part3 to false:

"CONFX":
{...
"consider_for_part2": false,
"consider_for_part3": false,
"consider_for_part4": false,
...}

Then set part 1 off within the file 'flags.dat'!
Otherwise consider_for_part_2 will be reset to true ...

Or you can simply set:

"CONFX":
{...
"removed_by_user": true,
...}

This will sort out the conformer.

Running on a cluster

When submitting an enso calculation with a jobscript on a computer cluster it is necessary to source and export all programs or paths needed for the enso calculation! An example jobscript looks like:

#!/bin/bash
# PBS Job
#PBS -V
#PBS -N ENSO-Calculation
#PBS -m ae
#PBS -q batch
#PBS -l nodes=1:ppn=14
#
cd $PBS_O_WORKDIR

### setup programs
## XTB
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
ulimit -s unlimited
export OMP_STACKSIZE=1000m
export XTBHOME=/home/$USER/.XTBPARAM/

## TM
export PARA_ARCH=SMP
source /home/path/TURBOMOLE.7.2.1/turbo721
export PARNODES=4
export TM_PAR_FORK=1

## ORCA4.2.1
ORCAPATH="/tmp1/orca_4_2_1_linux_x86-64_openmpi216";
MPIPATH="/software/openmpi-2.1.5/bin";
MPILIB="/software/openmpi-2.1.5/lib64";
PATH=${ORCAPATH}:${MPIPATH}:$PATH
export LD_LIBRARY_PATH=${ORCAPATH}:${MPILIB}:$LD_LIBRARY_PATH

# PATH
PATH=/home/$USER/bin:$PATH
export PATH
### end programs + PATH

export HOSTS_FILE=$PBS_NODEFILE
cat $HOSTS_FILE>hosts_file
TMP_DIR=/tmp1/$USER
DIR1=$PWD
mkdir -p $TMP_DIR/$PBS_JOBID
rsync -q --bwlimit=5000 $DIR1/* $TMP_DIR/$PBS_JOBID/
rsync -q --bwlimit=5000 $DIR1/.* $TMP_DIR/$PBS_JOBID/
rsync -rq --ignore-missing-args --bwlimit=5000 $DIR1/CONF* $TMP_DIR/$PBS_JOBID/
rsync -rq --ignore-missing-args --bwlimit=5000 $DIR1/NMR* $TMP_DIR/$PBS_JOBID/
cd $TMP_DIR/$PBS_JOBID
####################################################################################
#jobs start here (if you have no idea what this script does, only edit this part...)

export PYTHONUNBUFFERED=1
./enso.py -run > enso.out 2> error.enso

#end of job      (....and stop editing here.)
#####################################################################################
#copy everything back that is smaller than 5 gbytes
rsync -rq --bwlimit=5000 --max-size=5G $TMP_DIR/$PBS_JOBID/* $DIR1/
rsync -q --bwlimit=5000 --max-size=5G $TMP_DIR/$PBS_JOBID/.* $DIR1/
rsync -rq --bwlimit=5000 --include="*/" --include="mos" --include="alpha" --include="beta" --exclude=* $TMP_DIR/$PBS_JOBID/* $DIR1/
cd $DIR1
rm -r $TMP_DIR/$PBS_JOBID

Tipps

  • Using the def2-QZVP(-gf) basis (only possible with TURBOMOLE and the latest cefine version)! When calculating the high level single-point in part3 the basis def2-QZVP(-gf) basis set can be used. Here all f functions are deleted from hydrogen and all g functions from everything else. This is only supposed to speed up the calculation.

  • Optimization and sorting the CRE only based on the energy (and not free energy). It is possible to not calculate thermostatistical contributions to free energy, by simply setting the programm for prog_rrho to off. This way all calculations for \(G_{RRHO}\) will be skipped.

Troubleshooting

Handling of missing conformers:

  • Use the backup functionallity and make sure that you are not missing a conformer which is high lying in energy at GFNn-xTB level. (See backup)

  • The conformer might be wrongly sorted into a different conformer group by CREST and counted as a rotamer. To check this you can resort the complete CRE (including all rotamers and conformers) and check if the thresholds employed in the CREGEN sorting routine changes the CRE (See crestxmpl )

    crest coord -cregen crest_rotamers_6.xyz -bthr 12 -nmr > cregen.out
    

    Here you have to inspect the printout and check if grouping/sorting of conformers is correct. If you find that there were conformers wrongly grouped because of sorting-thresholds not suitable for the investigated system. You have to rerun the ENSO calculation on the new ensemble file.

Unparallel hypersurfaces between the functional for optimization and high level free energy

  • It is possible that the sorting between the functional/basis used for geometry optimization and the method combination (functional/basis set) for the high level free energy is not parallel. One option is to use a larger basis set for the high level free energy calculation. The default basis set for the single-point calculation in part3 is the def2-TZVP basis. It can be necessary to use a larger basis set. To to so, after the previous run, simply change the basis3 to the basis you desire in the file flags.dat and restart your enso calculation. Be advised that doing so results in the recalculation of all previously calculated single-points in part3!

Influence of the Boltzmann population on the final spectrum

  • The influence of the Boltzmann population on the final spectrum can be checked either by manually adjusting the populations in the file .anmrrc

  • or by employing different functionals/basis sets

  • or by checking different solvation models. A quick test, when comparing to additive solvation models (like COSMO-RS) is to use the flag gbsa_gsolv which will calculate a solvation contribution to free energy and performs rather fast.

  • by verifying that no conformers have become rotamers or identical to each other during DFT optimization (ENSO will inform you on possible cases, but the evaluation should be performed manually)