Version 10 (modified by 14 years ago) ( diff ) | ,
---|
A Starter's tutorial
In this tutorial we will build a hydrogen molecule atom by atom, load another hydrogen molecule from file. We will recognize the bond structure and dissect the system into two separate molecules. We will tesselate one molecule. And eventually, we will do a correlation analysis. Note that this tutorial will not go into the details of the code, it will just explain what to do and what happens using molecuilder on the command line.
We assume throughout this tutorial that your main folder is molecuilder, that you have created a subfolder called build wherein the compilation took place and the executable's path is then molecuilder/build/src/molecuilder. We assume that you have entered the build directory before starting this tutorial, hence molecuilder can be launched by entering ./src/molecuilder.
It is helpful to visually inspect the outputs of molecuilder at each step, http://jmol.sourceforge.net/ Jmol or http://www.ks.uiuc.edu/Research/vmd/ vmd may be helpful for this purpose.
Building hydrogen
Execute:
./src/molecuilder -i test.xyz -o xyz -a 6 --position "0, 0, 0"
This will add an "oxygen" atom (atomic number is actually 8 but we correct the error further below) at (0,0,0). Note that we have called the input file test, which will also be the root of all output files (besides the suffix). We create a xyz output file. It is a very common format with many molecule viewers such as listed exemplarily above. Furtheron, we don't have to specify xyz anymore, as test.xyz that we parse and add stuff on top is of xyz format and will get updated automatically.
Instead of -a we could have written --add-atom as well. Almost all actions have this kind of short-form, options such as --position however never have a short-form. This makes them distinguishable from the actions.
We add the two remaining hydrogen atoms:
./src/molecuilder -i test.xyz -a 1 --position "0.758602, 0., 0.504284" ./src/molecuilder -i test.xyz -a 1 --position "0.758602, 0., -0.504284"
As of now, "equal" actions cannot be stacked but this will come very soon. Different actions can however be sequenced on the command line. This is also the reason, why -o has to be placed in front of -a as otherwise the output files will be present but empty.
Let's briefly fix atom 0's element, i.e. convert it from carbon to oxygen.
./src/molecuilder -i test.xyz -E 8 --atom-by-id 0
This will change the element of atom with index 0 to 8, i.e. make it an oxygen.
Changing the simulation domain
The simulation domain is not encoded in the xyz format. Hence, we switch to pcp: There are two possibilities, either we parse the file test.xyz in or we specify an additional output format (-o pcp). We pick the former here:
./src/molecuilder -i test.conf -o pcp -p test.xyz
Note that we will always add the -o xyz switch such that test.xyz is updated, too. Now, we have created a pcp config file called test.conf (.conf is the suffix of the pcp format), containing all information of test.xyz along with information specific to this type of quantum mechanical solver (plane wave).
Let's continue and define the simulation box:
./src/molecuilder -i test.conf -o xyz -B "25, 0, 25, 0, 0, 25"
Note that the BoxLength entry in test.conf has changed. Note also that the sequence of the atoms has changed. In pcp they are always written sorted by element. This sorting has then also been used in the xyz file. So, our oxygen atom that had an index of 0 above, has now an index of 2.
Regarding the positions and our domain box, we have set the water molecule a bit right on the corner. Let's shift the molecule a bit
./src/molecuilder -i test.conf -o xyz -t "-5, 5, 5" --molecule-by-id 0 --periodic 1
Note that we explicitely stated here to have periodic boundary conditions active. Hence, the coordinates get wrapped around, which is exactly what happened to the x component of all three atoms. Note that if we parse in a config file, all atoms are automatically put into a single molecule, here referenced by its index 0.
A better approach for making sure all atoms are inside the domain is to use the center on edge and add empty boundary action:
./src/molecuilder -i test.conf -o xyz -O -c "5, 5, 5"
This action will always produce a rectangular domain, i.e. the extension of the water molecule with an additional boundary of 5 angstroem in every direction. Notice that the BoxLength entry has changed.
Parsing in another water molecule
Adding atoms singly is now very tedious. Often one already has an xyz description of the molecule. Let's parse in another water molecule from the file water.xyz.
./src/molecuilder -i test.conf -o xyz -p water.xyz
If we would like to place it right-away somewhere else, we would use this call:
./src/molecuilder -i test.conf -o xyz -p water.xyz -t "15, 15, 15" --molecule-by-id 1 --periodic 1
which would translate the newly parsed-in molecule, getting index 1, by (15,15,15), adhering to periodic boundary conditions.
Use the bond structure
Now, we have fooled around a bit with the molecular system. We should briefly start from scratch and this may also serve as a test for you, measuring how well you have paid attention so far. I.e. perform the following steps
- delete test.conf
- parse in water.xyz into a now empty test.conf (hence, don't forget to extend -o xyz to -o pcp xyz for this step)
- change the box to 25,25,25
- shift the present molecule by (5,5,5)
- parse in another while shifting it by 15,15,15 at the same time.
If we then parse in the config files again, we will not have two separate molecules, addressable by indices 0 and 1, but a single one. This is bad. Let's do a graph analysis of the system
./src/molecuilder -i test.conf -I
Note that we have specified here a verbosity level (-v) of 3 such that one sees a bit of what's going on. Somewhere along the output, you will notice Disconnected subgraph ranges from ... appears twice. These are two water molecules that have been recognized as separated.
Tesselate the second molecule
The last step is especially needed for the following tesselation of the second molecule only:
./src/molecuilder -i test.conf -I -N 3. --nonconvex-file NonConvexEnvelope --molecule-by-id 2
This will write a http://www.tecplot.com/ TecPlot conforming file NonConvexEnvelope.dat that contains two triangles right on top of each other. Simply because the water molecule is quite flat and has exactly three atoms, i.e. nodes for the boundary graph.
Pair correlation analysis
We will end this tutorial by doing some analysis on these two water molecules, namely a pair correlation
./src/molecuilder -i test.conf -v 3 -C E --elements 1 8 --output-file output-point.csv --bin-output-file bin_output-point.csv --bin-start 0 --bin-end 20
and a surface correlation analysis.
./src/molecuilder -i test.conf -v 3 -I -C S --elements 1 --output-file output-surface.csv --bin-output-file bin_output-surface.csv --bin-start 0 --bin-width 1. --bin-end 20 --molecule-by-id 2
In the respective bin_output...csv files you find the binned distances between elements hydrogen and oxygen on the one hand and between all hydrogen atoms and the surface of the second water molecule on the other hand.
This ends this tutorial. I hope you have got an idea of how molecuilder is put into action and what can be done.
Attachments (1)
-
water.xyz
(154 bytes
) - added by 14 years ago.
water molecule in xyz format
Download all attachments as: .zip