#!/bin/sh if [ -z "$2" ]; then echo "Usage: $0 " exit 1 fi mol="${1}.xyz" #pfad="${2}/`basename ${1}`" pfad="$2" exec_prefix=@prefix@ molecuilder=@bindir@ pseudopot="${exec_prefix}/defaults/pseudopot" echo "Target dir is ${pfad}, using xyz file ${mol}." # Create path mkdir -p "${pfad}" number=`wc $mol | awk -F' ' {'print $1-2'}` MOL=( `tail $mol -n $number | awk -F" " {'print $1'}` ) X=( `tail $mol -n $number | awk -F" " {'print $2'}` ) Y=( `tail $mol -n $number | awk -F" " {'print $3'}` ) Z=( `tail $mol -n $number | awk -F" " {'print $4'}` ) cd $molecuilder ./molecuilder "${pfad}/main_pcp_linux" -p ${pfad}/${mol} 2>/dev/null echo "Scaling by 1.8897261 ..." ./molecuilder "${pfad}/main_pcp_linux" -s 1.8897261 echo "Translating within boundary box (5.,5.,5.) ..." ./molecuilder "${pfad}/main_pcp_linux" -g 5. 5. 0. echo "changing path" sed -i -e "s#defaultpath.*\# \(.*\)#defaultpath\t${pfad}/\t\# \1#" -e "s#pseudopotpath.*\# \(.*\)#pseudopotpath\t${pseudopot}/\t\# \1#" "${pfad}/main_pcp_linux" echo -n "Creating list of elements ... " elements=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $3'}` ) factors=( `more "${pfad}/main_pcp_linux" | grep -v ^# | grep -v 'Ion_Type.*_.*' | grep Ion_Type | awk -F"\t" {'print $2'}` ) maxtypes=`more "${pfad}/main_pcp_linux" | grep MaxTypes | awk -F"\t" {'print $2'}` echo "done." echo -n "Calculating number of orbitals needed ..." orbitals=0 i=0 while [ "$i" -lt "$maxtypes" ]; do #echo "Checking on element ${elements[$i]}" if [ "${elements[$i]}" -lt "10" ]; then zahl=`head -n 1 $pseudopot/pseudo.0${elements[$i]} | awk -F" " {'print $1'}` zahl=`awk "BEGIN { print $zahl; }"` else zahl=`head -n 1 $pseudopot/pseudo.${elements[$i]} | awk -F" " {'print $1'}` zahl=`awk "BEGIN { print $zahl; }"` fi let zahl="$zahl*${factors[$i]}" let orbitals="$orbitals+$zahl" let i=$i+1 done orbitalrest=`awk "BEGIN { print $orbitals % 2; }"` orbitals=`awk "BEGIN { print $orbitals / 2; }"` echo "done." echo "Suggested SpinType: $orbitalrest" echo -n " changing ..." if [ "$orbitalrest" == "0" ]; then # even number: calculate with doubly occupied sed -i -e "s#^PsiType\t\t.*#PsiType\t\t0#" "${pfad}/main_pcp_linux" else # odd number: calculate with single occupation (at least two Psi processes needed) sed -i -e "s#^PsiType\t\t.*#PsiType\t\t1#" "${pfad}/main_pcp_linux" sed -i -e "s#^ProcPEPsi\t\t.*#ProcPEPsi\t\t2#" "${pfad}/main_pcp_linux" fi sed -i -e "s#^PsiMaxNoDown\t.*#PsiMaxNoDown\t$orbitals#" "${pfad}/main_pcp_linux" sed -i -e "s#^MaxPsiDouble\t.*#MaxPsiDouble\t$orbitals#" "${pfad}/main_pcp_linux" sed -i -e "s#^MaxMinStopStep\t.*#MaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux" sed -i -e "s#^InitMaxMinStopStep\t.*#InitMaxMinStopStep\t$orbitals#" "${pfad}/main_pcp_linux" # add odd rest upon SpinUp state number let orbitals=$orbitals+$orbitalrest sed -i -e "s#^PsiMaxNoUp\t.*#PsiMaxNoUp\t$orbitals#" "${pfad}/main_pcp_linux" echo "done."