source: util/CreateFromXYZ.sh@ a0bcf1

Last change on this file since a0bcf1 was a0bcf1, checked in by Frederik Heber <heber@…>, 17 years ago

-initial commit
-Minimum set of files needed from ESPACK SVN repository
-Switch to three tantamount package parts instead of all relating to pcp (as at some time Ralf's might find inclusion as well)

  • Property mode set to 100755
File size: 3.0 KB
Line 
1#!/bin/sh
2
3if [ -z "$2" ]; then
4 echo "Usage: $0 <xyzfile> <path-to-target>"
5 exit 1
6fi
7
8mol="${1}.xyz"
9#pfad="${2}/`basename ${1}`"
10pfad="$2"
11molecuilder="/home/heber/workspace/pcp_alternate/bin/"
12pseudopot="/home/heber/workspace/pcp_alternate/defaults/pseudopot"
13
14echo "Target dir is ${pfad}, using xyz file ${mol}."
15
16# Create path
17mkdir -p "${pfad}"
18
19number=`wc $mol | awk -F' ' {'print $1-2'}`
20MOL=( `tail $mol -n $number | awk -F" " {'print $1'}` )
21X=( `tail $mol -n $number | awk -F" " {'print $2'}` )
22Y=( `tail $mol -n $number | awk -F" " {'print $3'}` )
23Z=( `tail $mol -n $number | awk -F" " {'print $4'}` )
24
25cd $molecuilder
26./molecuilder "${pfad}/main_pcp_linux" -p ${pfad}/${mol} 2>/dev/null
27
28echo "Scaling by 1.8897261 ..."
29./molecuilder "${pfad}/main_pcp_linux" -s 1.8897261
30
31echo "Translating within boundary box (5.,5.,5.) ..."
32./molecuilder "${pfad}/main_pcp_linux" -g 5. 5. 0.
33
34echo "changing path"
35sed -i -e "s#defaultpath.*\# \(.*\)#defaultpath\t${pfad}/\t\# \1#" -e "s#pseudopotpath.*\# \(.*\)#pseudopotpath\t${pseudopot}/\t\# \1#" "${pfad}/main_pcp_linux"
36
37echo -n "Creating list of elements ... "
38elements=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $3'}` )
39factors=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $2'}` )
40maxtypes=`more "${pfad}/main_pcp_linux" | grep MaxTypes | awk -F"\t" {'print $2'}`
41echo "done."
42
43echo -n "Calculating number of orbitals needed ..."
44orbitals=0
45i=0
46while [ "$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
58done
59orbitalrest=`awk "BEGIN { print $orbitals % 2; }"`
60orbitals=`awk "BEGIN { print $orbitals / 2; }"`
61echo "done."
62echo "Suggested SpinType: $orbitalrest"
63
64echo -n " changing ..."
65if [ "$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"
68else
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"
72fi
73sed -i -e "s#^PsiMaxNoDown\t.*#PsiMaxNoDown\t$orbitals#" "${pfad}/main_pcp_linux"
74sed -i -e "s#^MaxPsiDouble\t.*#MaxPsiDouble\t$orbitals#" "${pfad}/main_pcp_linux"
75sed -i -e "s#^MaxMinStopStep\t.*#MaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux"
76sed -i -e "s#^InitMaxMinStopStep\t.*#InitMaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux"
77# add odd rest upon SpinUp state number
78let orbitals=$orbitals+$orbitalrest
79sed -i -e "s#^PsiMaxNoUp\t.*#PsiMaxNoUp\t$orbitals#" "${pfad}/main_pcp_linux"
80
81echo "done."
Note: See TracBrowser for help on using the repository browser.