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