-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmolprocas.sh
executable file
·71 lines (63 loc) · 2 KB
/
molprocas.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
# script to transform MOLPRO orbitals to MOLCAS orbitals
# Usage: molprocas.sh <MOLPRO Orbitals> "<Symmetry line (11A1 + 4B1 + 7B2 + 2A2)>" <MOLCAS Orbitals for Overlap> "<Symmetries (a1 b1 a2 b2)>"
####################################################
if command -v matlab >/dev/null 2>&1; then
MATLAB="matlab -nodesktop -nosplash"
elif command -v octave >/dev/null 2>&1; then
OCTAVE="octave"
else
echo "Matlab or octave are required!"
exit 1
fi
if [ $# -lt 4 ]; then
echo 'Usage: molprocas.sh <MOLPRO Orbitals> "<Symmetry line (11A1 + 4B1 + 7B2 + 2A2)>" <MOLCAS Orbitals for Overlap> "<Symmetries (a1 b1 a2 b2)>"'
exit
fi
MCPPATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
#get MOLCAS dimensions:
NMC=""
SYMMC=$(echo $4|tr /a-z/ /A-Z/)
SYMMP=$(echo $2|tr /a-z/ /A-Z/)
for SYM in $SYMMC; do
NUM="${SYMMP%$SYM *}"
if [ "$NUM" == "$SYMMP" ] ;then
NUM="${SYMMP%$SYM}"
fi
if [ "$NUM" == "$SYMMP" ] ;then
echo "Symmetry $SYM is not found in $SYMMP",$NUM
exit
else
# echo "Found $SYM: $NUM"
NSYM=${NUM##*+}
NMC="$NMC $NSYM"
fi
done
#orbname
orbname=$(basename -- "$1")
orbname="${orbname%.*}.MPOrb"
#orbname="$(echo "$orbname" | tr '[:upper:]' '[:lower:]')"
# clean the MOLCAS orbital file for Overlap
cat "$3"| sed -e/ORBITAL/\{ -e:1 -en\;b1 -e\} -ed | sed '/OCC/,$d' > molcas4S.orbs
# prepare the MOLPRO orbitals
"$MCPPATH/joinorb" "$1" "$2" > orbs.molpro
"$MCPPATH/joinorb" molcas4S.orbs "$NMC" > molcas.orbs.tmp
mv molcas.orbs.tmp molcas4S.orbs
molcasorbs="'molcas4S.orbs'"
molproorbs="'orbs.molpro'"
# generate the orbitals
echo "addpath('$MCPPATH/')
[dims,symord]=dimsym('$2','$4');
molprocas($molproorbs,$molcasorbs,'$orbname',dims,symord);" > mpc.m
if [ -n "$MATLAB" ]; then
cat mpc.m | $MATLAB
else
$OCTAVE mpc.m
fi
rm mpc.m
if [ -f "$orbname" ]; then
# split the orbitals
"$MCPPATH/writeorbMC" "$orbname" > "$orbname.tmp"
mv "$orbname.tmp" "$orbname"
cat "$3"| sed -e/\#OCC/\{ -e:1 -en\;b1 -e\} -ed | sed '/\#ONE/,$d' >> "$orbname"
fi