# Open SourceMolecular Dynamics

### Sidebar

#### For Developers

exercises:2017_uzh_cmest:calculation_pbc

# Calculations with Periodic Boundary Conditions

This short exercise illustrates the property of periodic boundary conditions and at the same time gives you some ideas/skeletons on how to create useful bash scripts. The files you need for this are:

A geometry file for a H2O molecule:

h2o.xyz
3
Atom    X   Y   Z
O   0.0000000   0.0000000   0.1194180
H   0.0000000   0.7654990   -0.4776700
H   0.0000000   -0.7654990  -0.4776700

A CP2K input file to run a calculation with it:

h2o_pbc.inp
&GLOBAL
PROJECT h2o_pbc
RUN_TYPE ENERGY
PRINT_LEVEL MEDIUM
&END GLOBAL

&FORCE_EVAL
METHOD Quickstep              ! Electronic structure method (DFT,...)
&DFT
BASIS_SET_FILE_NAME  BASIS_MOLOPT
POTENTIAL_FILE_NAME  POTENTIAL

&POISSON                    ! Solver requested for non periodic calculations
PERIODIC XYZ
&END POISSON
&SCF                        ! Parameters controlling the convergence of the SCF. This section should not be changed.
SCF_GUESS ATOMIC
EPS_SCF 1.0E-6
MAX_SCF 300
&END SCF
&XC                         ! Parameters needed to compute the electronic exchange potential
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&END DFT

&SUBSYS
&CELL
ABC 10. 10. 10.
PERIODIC XYZ
&END CELL
&TOPOLOGY                    ! Section used to center the atomic coordinates in the given box. Useful for big molecules
COORD_FILE_FORMAT xyz
COORD_FILE_NAME  ./h2o.xyz
&CENTER_COORDINATES
CENTER_POINT 5. 5. 5.
&END
&END
&KIND H
ELEMENT H
BASIS_SET TZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q1
&END KIND
&KIND O
ELEMENT O
BASIS_SET TZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q6
&END KIND
&END SUBSYS
&END FORCE_EVAL

And a script to run it:

run.sh
#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail

xseq=$(seq 5 0.1 6) for x in$xseq; do
rm -f "h2o_pbc_x-${x}.out" sed \ -e "s|h2o_pbc|h2o_pbc_x-$x|" \
-e "s|CENTER_POINT .*|CENTER_POINT $x 5. 5.|" \ h2o_pbc.inp > "h2o_pbc_x-${x}.inp"

cp2k.sopt -i "h2o_pbc_x-${x}.inp" -o "h2o_pbc_x-${x}.out" &
done

for job in $(jobs -p) ; do wait$job
done

# create or truncate the file named "energies"
:>| energies

for x in $xseq; do energy=$(awk '/Total FORCE_EVAL/ { print $9 }' "h2o_pbc_x-${x}.out")
echo "$x$energy" >> energies
done

You have to mark the script as an executable after creating it, using:

$chmod +x run.sh ## Create a plot Run the script after loading the CP2K module: $ ./run.sh

Besides various input and output files, you should get a file named energies.

• Plot it, including meaningful axis labels. To that end, try to understand the provided script. Looking at the difference between the initially provided input file h2o_pbc.inp and the newly created input files may give a hint. The command $diff h2o_pbc.inp SOMEOTHERFILE may also help. • What would you expect from such a plot and why? What order is the deviation from what you would expect? What could be the source for this deviation? ## Make the script your own • Read the script and try to understand the commands. Look them up using your favorite search engine, the man pages on the system ($ man sed for example) or try them out by hand on the command line.
• Try to document the script in such a way that you will still understand it when looking at it again in a year or two (so, not every detail, but make sure to cover the obscure stuff and the big blocks)
• Change the script to calculate energies for x=z=5. and y=2,2.2,2.4,..,7.6,7.8,8.0 and plot them again.