1 | #!/bin/sh
|
---|
2 |
|
---|
3 | if [ -z "$2" ]; then
|
---|
4 | echo "Usage: $0 <xyzfile> <path-to-target>"
|
---|
5 | exit 1
|
---|
6 | fi
|
---|
7 |
|
---|
8 | mol="${1}.xyz"
|
---|
9 | #pfad="${2}/`basename ${1}`"
|
---|
10 | pfad="$2"
|
---|
11 | molecuilder="/home/heber/workspace/pcp_alternate/bin/"
|
---|
12 | pseudopot="/home/heber/workspace/pcp_alternate/defaults/pseudopot"
|
---|
13 |
|
---|
14 | echo "Target dir is ${pfad}, using xyz file ${mol}."
|
---|
15 |
|
---|
16 | # Create path
|
---|
17 | mkdir -p "${pfad}"
|
---|
18 |
|
---|
19 | number=`wc $mol | awk -F' ' {'print $1-2'}`
|
---|
20 | MOL=( `tail $mol -n $number | awk -F" " {'print $1'}` )
|
---|
21 | X=( `tail $mol -n $number | awk -F" " {'print $2'}` )
|
---|
22 | Y=( `tail $mol -n $number | awk -F" " {'print $3'}` )
|
---|
23 | Z=( `tail $mol -n $number | awk -F" " {'print $4'}` )
|
---|
24 |
|
---|
25 | cd $molecuilder
|
---|
26 | ./molecuilder "${pfad}/main_pcp_linux" -p ${pfad}/${mol} 2>/dev/null
|
---|
27 |
|
---|
28 | echo "Scaling by 1.8897261 ..."
|
---|
29 | ./molecuilder "${pfad}/main_pcp_linux" -s 1.8897261
|
---|
30 |
|
---|
31 | echo "Translating within boundary box (5.,5.,5.) ..."
|
---|
32 | ./molecuilder "${pfad}/main_pcp_linux" -g 5. 5. 0.
|
---|
33 |
|
---|
34 | echo "changing path"
|
---|
35 | sed -i -e "s#defaultpath.*\# \(.*\)#defaultpath\t${pfad}/\t\# \1#" -e "s#pseudopotpath.*\# \(.*\)#pseudopotpath\t${pseudopot}/\t\# \1#" "${pfad}/main_pcp_linux"
|
---|
36 |
|
---|
37 | echo -n "Creating list of elements ... "
|
---|
38 | elements=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $3'}` )
|
---|
39 | factors=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $2'}` )
|
---|
40 | maxtypes=`more "${pfad}/main_pcp_linux" | grep MaxTypes | awk -F"\t" {'print $2'}`
|
---|
41 | echo "done."
|
---|
42 |
|
---|
43 | echo -n "Calculating number of orbitals needed ..."
|
---|
44 | orbitals=0
|
---|
45 | i=0
|
---|
46 | while [ "$i" -lt "$maxtypes" ]; do
|
---|
47 | #echo "Checking on element ${elements[$i]}"
|
---|
48 | if [ "${elements[$i]}" -lt "10" ]; then
|
---|
49 | zahl=`head -n 1 $pseudopot/pseudo.0${elements[$i]} | awk -F" " {'print $1'}`
|
---|
50 | zahl=`awk "BEGIN { print $zahl; }"`
|
---|
51 | else
|
---|
52 | zahl=`head -n 1 $pseudopot/pseudo.${elements[$i]} | awk -F" " {'print $1'}`
|
---|
53 | zahl=`awk "BEGIN { print $zahl; }"`
|
---|
54 | fi
|
---|
55 | let zahl="$zahl*${factors[$i]}"
|
---|
56 | let orbitals="$orbitals+$zahl"
|
---|
57 | let i=$i+1
|
---|
58 | done
|
---|
59 | orbitalrest=`awk "BEGIN { print $orbitals % 2; }"`
|
---|
60 | orbitals=`awk "BEGIN { print $orbitals / 2; }"`
|
---|
61 | echo "done."
|
---|
62 | echo "Suggested SpinType: $orbitalrest"
|
---|
63 |
|
---|
64 | echo -n " changing ..."
|
---|
65 | if [ "$orbitalrest" == "0" ]; then
|
---|
66 | # even number: calculate with doubly occupied
|
---|
67 | sed -i -e "s#^PsiType\t\t.*#PsiType\t\t0#" "${pfad}/main_pcp_linux"
|
---|
68 | else
|
---|
69 | # odd number: calculate with single occupation (at least two Psi processes needed)
|
---|
70 | sed -i -e "s#^PsiType\t\t.*#PsiType\t\t1#" "${pfad}/main_pcp_linux"
|
---|
71 | sed -i -e "s#^ProcPEPsi\t\t.*#ProcPEPsi\t\t2#" "${pfad}/main_pcp_linux"
|
---|
72 | fi
|
---|
73 | sed -i -e "s#^PsiMaxNoDown\t.*#PsiMaxNoDown\t$orbitals#" "${pfad}/main_pcp_linux"
|
---|
74 | sed -i -e "s#^MaxPsiDouble\t.*#MaxPsiDouble\t$orbitals#" "${pfad}/main_pcp_linux"
|
---|
75 | sed -i -e "s#^MaxMinStopStep\t.*#MaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux"
|
---|
76 | sed -i -e "s#^InitMaxMinStopStep\t.*#InitMaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux"
|
---|
77 | # add odd rest upon SpinUp state number
|
---|
78 | let orbitals=$orbitals+$orbitalrest
|
---|
79 | sed -i -e "s#^PsiMaxNoUp\t.*#PsiMaxNoUp\t$orbitals#" "${pfad}/main_pcp_linux"
|
---|
80 |
|
---|
81 | echo "done."
|
---|