(sec:solvator.typical)= # ORCA SOLVATOR: Automatic Placement of Explicit Solvent Molecules From ORCA6, we also have a tool that can automatically place explicit solvent molecules to a given system. It can be done using two different approaches: a `STOCHASTIC` method which is very fast but less accurate, or a `DOCKING` approach which makes use of the [DOCKER](). The later is slower, but more accurate and is the default. ## First Example: Adding Water to a Histidine As a very simple initial example, let's take a Histidine aminoacid and add three explicit water molecules at the best positions using the `DOCKER` and `GFN2-XTB`. The input to get this is as simple as: ```orca !XTB ALPB(WATER) PAL16 %SOLVATOR NSOLV 3 END * XYZ 0 1 N 0.885996 -0.961304 -0.120339 C 1.798313 0.104987 0.275069 C 1.249714 0.744242 1.567548 O 1.573032 1.831447 1.951866 C 2.049102 1.187937 -0.781297 C 2.714441 0.645674 -1.999072 N 2.728606 1.335092 -3.185194 C 3.401683 0.571600 -4.081842 N 3.805612 -0.545068 -3.552995 C 3.389082 -0.516790 -2.258890 O 0.397674 -0.041862 2.212628 H 0.272440 -0.853698 1.671197 H 1.339440 -1.612664 -0.750009 H 0.086389 -0.572348 -0.612909 H 2.756495 -0.353470 0.548654 H 2.661849 1.969568 -0.321790 H 1.092545 1.646672 -1.057454 H 2.328734 2.246496 -3.338113 H 3.566873 0.866218 -5.098496 H 3.616501 -1.333139 -1.602802 * ``` That is as simple as a regular input with the line `%SOLVATOR NSOLV 3 END` added. The solvent structure will be automatically taken from the implicit solvation method (in this case `ALPB(WATER)`), and the three water molecules will be added. The output will look like: ```orca ***************** * ORCA Solvator * ***************** Solvent chosen: WATER Solvent radius: .... 1.69 Angs Solvent max dimensions (x,y,z): .... 2.73, 2.32, 1.52 Angs Number of solvent molecules to be added: .... 3 molecules Method used to add the solvent: .... docking Number of atoms of solvent molecule: .... 3 atoms Coordinates of solvent in Angstroem: O 0.000014 0.401429 0.000000 H 0.765192 -0.200729 0.000000 H -0.765206 -0.200700 0.000000 Solute radius: .... 5.27 Angs Ellipsoid potential radii: .... 8.37, 6.28, 5.76 Angs ``` where the solvent chosen is printed, together with some details about its dimensions, the number of molecules to be added and the method. The structure from the internal database is also always printed. The process is then monitored per solvent molecule: ```orca Adding solvent molecules to the solute .... Iter Energy Einter dE Time (Eh) (kcal/mol) (kcal/mol) (min) ------------------------------------------------------- 1 -39.452446 -4.331670 -4.331670 0.26 2 -44.544347 -4.316639 0.015031 0.34 3 -49.636018 -4.171990 0.144649 0.40 Final radius after microsolvation: .... 4.88 Angs Time needed for microsolvation : .... 60.54 s Final structured saved to : HIS.solvator.xyz ****ORCA-SOLVATOR TERMINATED NORMALLY**** ``` and the final result is printed to the file `Basename.solvator.xyz`. There will be also an intermediate file named `Basename.solvator.solventbuild.xyz` with the solvent molecules added one by one. :::{note} In contrast to the DOCKER, the solute is **always** frozen by default. Set `FIXSOLUTE FALSE` under the `%SOLVATOR` block to change that. ::: On the output `Einter` is the interaction energy obtained from the DOCKER and `dE` is the different between the current and the previous `Einter`. In this case, the result looks like: (fig:solvator_HIS_water)= :::{figure} ../../images/solvator_HIS_water.* :width: 70% Three water molecules added by the solvator. ::: :::{note} Currently the SOLVATOR is **only** working with the GFN-XTB and GFN-FF methods and the ALPB solvation model. It will be expanded later to others. ::: ## Other Solvents The method itself is agnostic to the solvent, and any other could have been used. The example above with DMSO would be: ```orca !XTB ALPB(DMSO) PAL16 %SOLVATOR NSOLV 3 END * XYZFILE 0 1 HIS.xyz ``` and results in: (fig:solvator_HIS_DMSO)= :::{figure} ../../images/solvator_HIS_DMSO.* :width: 70% Three DMSO molecules added by the solvator. ::: and even a custom solvent can be given in the form of a `.xyz` file with: ```orca %SOLVATOR SOLVENTFILE "solvent_file_name.xyz" END ``` As with the docker, the `charge` and `multiplicty` can be given to the solvent if given as two integers on the comment line (default is neutral closed-shell). Since the `ALPB` method has a fixed number of solvents, right now one can still not give a custom epsilon value for the custom solvents, but it needs to be approximated to the next closest solvent. As an example, let's create a file named `isopropanol.xyz` with a solvent which is not on the `ALPB` list: ```orca 12 0 1 C -3.79410 2.24670 -0.09622 C -3.45574 0.76660 -0.18820 H -2.94382 2.85306 -0.42645 H -4.00575 2.53923 0.93817 H -4.66172 2.49512 -0.71492 C -4.60559 -0.10847 0.28691 H -4.84802 0.09429 1.33594 H -4.32886 -1.16657 0.22730 H -5.50341 0.05251 -0.31744 O -2.30376 0.49878 0.60542 H -3.20686 0.51239 -1.22373 H -2.51694 0.72259 1.52758 ``` and run: ```orca !XTB ALPB(ETHANOL) PAL16 %SOLVATOR SOLVENTFILE "isopropanol.xyz" NSOLV 3 END * XYZFILE 0 1 HIS.xyz ``` approximating the dielectric constant of isopropanol to that of ethanol. That might look not too accurate, but the ALPB implicit solvation is also not a very good implicit solvation model anyway, so results will be quite similar. (fig:solvator_HIS_isoprop)= :::{figure} ../../images/solvator_HIS_isoprop.* :width: 70% Three iso-propanol molecules added by the solvator. ::: ## The Stochastic Method for Multiple Solvents In case you want to add a really large number of explicit solvent molecules, the `STOCHASTIC` mode will be significantly faster. Let's add 100 water molecules on our target Histidine, now using `CLUSTERMODE STOCHASTIC`: ```orca !XTB ALPB(WATER) PAL16 %SOLVATOR NSOLV 100 CLUSTERMODE STOCHASTIC END * XYZFILE 0 1 HIS.xyz ``` The output will be somewhat different: ```orca Solvent chosen: WATER Solvent radius: .... 1.69 Angs Solvent max dimensions (x,y,z): .... 2.73, 2.32, 1.52 Angs Number of solvent molecules to be added: .... 100 molecules Method used to add the solvent: .... stochastic Number of atoms of solvent molecule: .... 3 atoms Coordinates of solvent in Angstroem: O 0.000014 0.401429 0.000000 H 0.765192 -0.200729 0.000000 H -0.765206 -0.200700 0.000000 Solute radius: .... 5.27 Angs Adding solvent molecules to the solute .... Iter Target function Time (Coulomb) (min) ------------------------------- 1 -4.659435e-07 0.00 2 -4.604606e-07 0.00 3 -2.519684e-07 0.00 (...) Final radius after microsolvation: .... 9.79 Angs Time needed for microsolvation : .... 5.11 s Final structured saved to : HIS_STOCHASTIC.solvator.xyz ****ORCA-SOLVATOR TERMINATED NORMALLY**** ``` and in a few seconds all solvent molecules are added as can be seen from the result: (fig:solvator_HIS_100water)= :::{figure} ../../images/solvator_HIS_100water.* :width: 70% A hundred water molecules added by the solvator. ::: :::{important} As the name says, the `CLUSTERMODE STOCHASTIC` is a probabilistic approach and is not nearly as accurate as the `DOCKING` mode! Nonetheless it is useful for quite a few applications. ::: ## Creating a Droplet The regular stochastic method will create a solvation sphere around the solute following it shape and topology. In case you want to create a solvent distribution with spherical symmetry, you have to use set the `DROPLET TRUE` keyword, such as: ```orca !XTB ALPB(WATER) PAL16 %SOLVATOR NSOLV 100 CLUSTERMODE STOCHASTIC DROPLET TRUE END * XYZFILE 0 1 HIS.xyz ``` And the result will look like: (fig:solvator_HIS_100water_droplet)= :::{figure} ../../images/solvator_HIS_100water_droplet.* :width: 70% A hundred water molecules added by the solvator by enforcing spherical symmetry. ::: ## Creating a Droplet with a Defined Radius Instead of defining the number of solvent molecules, one can also defined a maximum radius and the SOLVATOR will add as many molecules as necessary until the radius is reached. This is only compatible with `CLUSTERMODE STOCHASTIC`! ```orca !XTB ALPB(WATER) PAL16 %SOLVATOR RADIUS 15 # in angstroem CLUSTERMODE STOCHASTIC END * XYZFILE 0 1 HIS.xyz ``` The output in the end shows: ```orca Desired sovent radius: .... 15.00 Angs Actual sovent radius: .... 15.18 Angs Final number of solvent molecules: .... 668 molecules ``` :::{note} The radius is taken from the centroid of the solute! ::: and a radius close to 15 Angstroem was achieved when 668 molecules are added: (fig:solvator_HIS_rad15)= :::{figure} ../../images/solvator_HIS_rad15.* :width: 70% A droplet create with 668 water molecules to achieve a radius of approximately 15 Angstroem. ::: :::{important} All examples described above work for any other solvents, including custom ones. ::: :::{note} The default DOCKER settings for the solvator are equivalent to `!QUICKDOCK`. For more accurate methods use `!NORMALDOCK` or even `!COMPLETEDOCK`, however they will be much slower. ::: A complete list of keywords and more discussions on the topic can be found at the later section {ref}`sec:solvator.detailed`