#!/bin/bash
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
allcrystals="alphaquartz anatase aucu bcc bcc_c bct betaquartz betatin cdi2 cristobalite cscl cubiclaves cuprite dhcp diamond diamond_c fcc fcc_c fluorite graphite hcp hexagonallaves molybdenite nacl nickeline pyrite rutile sc tridymite wurtzite x2o3 x2o5 xo3 zincblende"
allcrystals_supercells="sup_alphaquartz sup_anatase sup_aucu sup_bcc sup_bcc_c sup_bct sup_betaquartz sup_betatin sup_cdi2 sup_cristobalite sup_cscl sup_cubiclaves sup_cuprite sup_dhcp sup_diamond sup_diamond_c sup_fcc sup_fcc_c sup_fluorite sup_graphite sup_hcp sup_hexagonallaves sup_molybdenite sup_nacl sup_nickeline sup_pyrite sup_rutile sup_sc sup_tridymite sup_wurtzite sup_x2o3 sup_x2o5 sup_xo3 sup_zincblende"
allsurfaces="bcc_100 bcc_110 bcc_111 diamond_100 fcc_100 fcc_110 fcc_111 hcp_001 hcp_100"
allsurfaces_supercells="sup_bcc_100 sup_bcc_110 sup_bcc_111 sup_diamond_100 sup_fcc_100 sup_fcc_110 sup_fcc_111 sup_hcp_001 sup_hcp_100"
allmolecules="bent_mol diatomic_mol linear_mol monatomic_mol"
allmolecules_supercells=""
 
TOTALTIME=0 
ANERROROCCURED=false 
 
ALLPOTCARS=/home/ws2006/potcars
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
alphaquartz () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=9
ATOMS_PER_SUBCELL=9

NUMBER_OF_SHIFTS=4

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="3 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_alphaquartz=1.10009
SHIFT_alphaquartz_1=0.46990
SHIFT_alphaquartz_2=0.41410
SHIFT_alphaquartz_3=0.26810
SHIFT_alphaquartz_4=0.78540

}
EOF

if [ -z $C_A_RATIO_alphaquartz ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_alphaquartz \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_alphaquartz_1 | bc -l`
s2=`echo -$SHIFT_alphaquartz_1 | bc -l`

s3=`echo $SHIFT_alphaquartz_2 | bc -l`
s4=`echo $SHIFT_alphaquartz_3 | bc -l`
s5=`echo $SHIFT_alphaquartz_4 | bc -l`
s6=`echo -$SHIFT_alphaquartz_2 | bc -l`
s7=`echo -$SHIFT_alphaquartz_3 | bc -l`
s8=`echo -$SHIFT_alphaquartz_4 | bc -l`

s9=`echo $SHIFT_alphaquartz_2 - $SHIFT_alphaquartz_3 | bc -l`
s10=`echo $SHIFT_alphaquartz_3 - $SHIFT_alphaquartz_2 | bc -l`

s11=`echo 0.6666666666666666666666 + $SHIFT_alphaquartz_4 | bc -l`
s12=`echo 0.3333333333333333333333 + $SHIFT_alphaquartz_4 | bc -l`
s13=`echo 0.6666666666666666666666 - $SHIFT_alphaquartz_4 | bc -l`
s14=`echo 0.3333333333333333333333 - $SHIFT_alphaquartz_4 | bc -l`

cat > POSCAR << EOF
alphaquartz crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_alphaquartz
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.6666666666666666666666 | bc -l`
x2=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.3333333333333333333333 | bc -l`
x3=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x4=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s7 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s9 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s11 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s10 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s6 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s12 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s6 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s10 | bc -l`
z8=`echo $d \* $nz - $d + $d \* $s13 | bc -l`
x9=`echo $d \* $nx - $d + $d \* $s9 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s7 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s14 | bc -l`
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '9p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_alphaquartz_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_alphaquartz_1=$shift_alphaquartz_1
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_alphaquartz_2=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_alphaquartz_2=$shift_alphaquartz_2
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[1]}
shift_alphaquartz_3=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_alphaquartz_3=$shift_alphaquartz_3
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_alphaquartz_4=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_alphaquartz_4=$shift_alphaquartz_4
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
anatase () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_anatase=2.51430
SHIFT_anatase_1=0.08310

}
EOF

if [ -z $C_A_RATIO_anatase ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_anatase \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_anatase_1 | bc -l`
s2=`echo 0.5 + $SHIFT_anatase_1 | bc -l`
s3=`echo 0.5 - $SHIFT_anatase_1 | bc -l`
s4=`echo 0.25 + $SHIFT_anatase_1 | bc -l`
s5=`echo 0.25 - $SHIFT_anatase_1 | bc -l`
s6=`echo 0.5 + 2 \* $SHIFT_anatase_1 | bc -l`
s7=`echo 0.5 - 2 \* $SHIFT_anatase_1 | bc -l`
s8=`echo 1 - 2 \* $SHIFT_anatase_1 | bc -l`
s9=`echo 2 \* $SHIFT_anatase_1 | bc -l`

cat > POSCAR << EOF
anatase crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 $C_A_RATIO_anatase
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.625 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.375 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s9 | bc -l`
x4=`echo $d \* $nx - $d + $d \* -$s4 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s6 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* -$s5 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s7 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '13p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_anatase_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_anatase_1=$shift_anatase_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
aucu () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_aucu=0.92632

}
EOF

if [ -z $C_A_RATIO_aucu ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_aucu \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
aucu crystal $SUPERCELL_FACTOR
-$v
0.5 -0.5 0
0.5 0.5 0
0 0 $C_A_RATIO_aucu
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bcc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_bcc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
bcc crystal $SUPERCELL_FACTOR
-$v
-0.5 0.5 0.5
0.5 -0.5 0.5
0.5 0.5 -0.5
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bcc_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_bcc_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
bcc_c crystal
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bct () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_bct=1.41421

}
EOF

if [ -z $C_A_RATIO_bct ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_bct \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

c=`echo 0.5 \* $C_A_RATIO_bct | bc -l`

cat > POSCAR << EOF
bct crystal 
-$v
1 0 0
0 1 0
0.5 0.5 $c
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
betaquartz () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=9
ATOMS_PER_SUBCELL=9

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="3 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_betaquartz=1.10020
SHIFT_betaquartz_1=0.42020

}
EOF

if [ -z $C_A_RATIO_betaquartz ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_betaquartz \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_betaquartz_1 | bc -l`
s2=`echo 2 \* $SHIFT_betaquartz_1 | bc -l`
s3=`echo -2 \* $SHIFT_betaquartz_1 | bc -l`
s4=`echo - $SHIFT_betaquartz_1 | bc -l`

cat > POSCAR << EOF
betaquartz crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_betaquartz
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.6666666666666666666666 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.3333333333333333333333 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x4=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.1666666666666666666666 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.833333333333333333333 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.1666666666666666666666 | bc -l`
x9=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.833333333333333333333 | bc -l`
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_betaquartz_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_betaquartz_1=$shift_betaquartz_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
betatin () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_betatin=0.54547

}
EOF

if [ -z $C_A_RATIO_betatin ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_betatin \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

c=`echo 0.5 \* $C_A_RATIO_betatin | bc -l`

cat > POSCAR << EOF
betatin crystal 
-$v
1 0 0
0 1 0
0.5 0.5 $c
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* -0.375 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.375 | bc -l`
z2=`echo $d \* $nz - $d + $d \* -0.25 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
cdi2 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=3
ATOMS_PER_SUBCELL=3

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_cdi2=2.44949
SHIFT_cdi2_1=0.16667

}
EOF

if [ -z $C_A_RATIO_cdi2 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_cdi2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo 0.5 - $SHIFT_cdi2_1 | bc -l`
s2=`echo 0.5 + $SHIFT_cdi2_1 | bc -l`

cat > POSCAR << EOF
cdi2 crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_cdi2
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z2=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_cdi2_1=`echo $column \* $SUPERCELL_FACTOR - 0.5 \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_cdi2_1=$shift_cdi2_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
cristobalite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=24
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_cristobalite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
cristobalite crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* -0.125 | bc -l`
z2=`echo $d \* $nz - $d + $d \* -0.125 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
cscl () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_cscl \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
cscl crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
cubiclaves () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=24
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_cubiclaves \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
cubiclaves crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.875 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.875 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.875 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
cuprite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_cuprite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
cuprite crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
dhcp () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_dhcp=3.26598

}
EOF

if [ -z $C_A_RATIO_dhcp ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_dhcp \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
dhcp crystal
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_dhcp
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
diamond () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_diamond \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
diamond crystal 
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* -0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* -0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
diamond_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=8

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_diamond_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
diamond_c crystal 
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fcc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_fcc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
fcc crystal
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fcc_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_fcc_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
fcc_c crystal
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fluorite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=3

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_fluorite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
fluorite crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x3=`echo $d \* $nx - $d + $d \* -0.25 | bc -l`
y3=`echo $d \* $ny - $d + $d \* -0.25 | bc -l`
z3=`echo $d \* $nz - $d + $d \* -0.25 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
graphite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_graphite=2.00000

}
EOF

if [ -z $C_A_RATIO_graphite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_graphite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
graphite crystal 
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_graphite
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
hcp () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_hcp=1.63299

}
EOF

if [ -z $C_A_RATIO_hcp ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_hcp \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
hcp crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_hcp
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
hexagonallaves () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=2

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="8 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_hexagonallaves=1.64479
SHIFT_hexagonallaves_1=-0.16988
SHIFT_hexagonallaves_2=0.06681

}
EOF

if [ -z $C_A_RATIO_hexagonallaves ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_hexagonallaves \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_hexagonallaves_1 | bc -l`
s2=`echo 2 \* $SHIFT_hexagonallaves_1 | bc -l`
s3=`echo -2 \* $SHIFT_hexagonallaves_1 | bc -l`
s4=`echo 0.0 - $SHIFT_hexagonallaves_1 | bc -l`

s5=`echo $SHIFT_hexagonallaves_2 | bc -l`
s6=`echo -$SHIFT_hexagonallaves_2 | bc -l`
s7=`echo 0.5 + $SHIFT_hexagonallaves_2 | bc -l`
s8=`echo 0.5 - $SHIFT_hexagonallaves_2 | bc -l`

cat > POSCAR << EOF
hexagonallaves crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_hexagonallaves
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x9=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s5 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z10=`echo $d \* $nz - $d + $d \* $s6 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z11=`echo $d \* $nz - $d + $d \* $s7 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z12=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_hexagonallaves_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

row=$(sed -n '17p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_hexagonallaves_2=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_hexagonallaves_1=$shift_hexagonallaves_1
SHIFT_hexagonallaves_2=$shift_hexagonallaves_2
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
molybdenite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_molybdenite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_molybdenite=3.88924
SHIFT_molybdenite_1=0.62000

}
EOF

if [ -z $C_A_RATIO_molybdenite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_molybdenite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_molybdenite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_molybdenite_1 | bc -l`
s3=`echo 0.5 - $SHIFT_molybdenite_1 | bc -l`
s4=`echo - $SHIFT_molybdenite_1 | bc -l`

cat > POSCAR << EOF
molybdenite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_molybdenite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s4 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_molybdenite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_molybdenite_1=$shift_molybdenite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
nacl () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_nacl \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
nacl crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
nickeline () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_nickeline=1.63299

}
EOF

if [ -z $C_A_RATIO_nickeline ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_nickeline \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
nickeline crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_nickeline
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
pyrite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

SHIFT_pyrite_1=0.38600

}
EOF

if [ -z $SHIFT_pyrite_1 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_pyrite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_pyrite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_pyrite_1 | bc -l`
s3=`echo 0.5 - $SHIFT_pyrite_1 | bc -l`

cat > POSCAR << EOF
pyrite crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x6=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y6=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z6=`echo $d \* $nz - $d + $d \* -$s1 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* -$s1 | bc -l`
x8=`echo $d \* $nx - $d + $d \* -$s2 | bc -l`
y8=`echo $d \* $ny - $d + $d \* -$s3 | bc -l`
z8=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x9=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x10=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y10=`echo $d \* $ny - $d + $d \* -$s2 | bc -l`
z10=`echo $d \* $nz - $d + $d \* -$s3 | bc -l`
x11=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y11=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z11=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x12=`echo $d \* $nx - $d + $d \* -$s3 | bc -l`
y12=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z12=`echo $d \* $nz - $d + $d \* -$s2 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '13p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_pyrite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_pyrite_1=$shift_pyrite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
rutile () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_rutile=0.64395
SHIFT_rutile_1=0.30530

}
EOF

if [ -z $C_A_RATIO_rutile ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_rutile \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_rutile_1 | bc -l`
s2=`echo 0.5 + $SHIFT_rutile_1 | bc -l`
s3=`echo 0.5 - $SHIFT_rutile_1 | bc -l`

cat > POSCAR << EOF
rutile crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 $C_A_RATIO_rutile
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y4=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_rutile_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_rutile_1=$shift_rutile_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=1
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sc crystal 
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
tridymite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_tridymite=1.63698
SHIFT_tridymite_1=0.06200

}
EOF

if [ -z $C_A_RATIO_tridymite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_tridymite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_tridymite_1 | bc -l`
s2=`echo -$SHIFT_tridymite_1 | bc -l`
s3=`echo 0.5 + $SHIFT_tridymite_1 | bc -l`
s4=`echo 0.5 - $SHIFT_tridymite_1 | bc -l`


cat > POSCAR << EOF
tridymite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_tridymite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s4 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x9=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z10=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z11=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z12=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '9p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_tridymite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_tridymite_1=$shift_tridymite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
wurtzite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_wurtzite=1.63299
SHIFT_wurtzite_1=0.37480

}
EOF

if [ -z $C_A_RATIO_wurtzite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_wurtzite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_wurtzite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_wurtzite_1 | bc -l`

cat > POSCAR << EOF
wurtzite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_wurtzite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_wurtzite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_wurtzite_1=$shift_wurtzite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
x2o3 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=10
ATOMS_PER_SUBCELL=10

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_x2o3 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
x2o3 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
x2o5 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=14
ATOMS_PER_SUBCELL=14

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 10"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_x2o5 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
x2o5 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x9=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z10=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z11=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z12=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x13=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y13=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z13=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x14=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y14=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z14=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
echo $x13 " " $y13 " " $z13 >> POSCAR
echo $x14 " " $y14 " " $z14 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
xo3 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 3"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_xo3 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
xo3 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
zincblende () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_zincblende \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
zincblende crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_alphaquartz () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_alphaquartz

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=9
ATOMS_PER_SUBCELL=9

NUMBER_OF_SHIFTS=4

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="3 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_alphaquartz=1.10009
SHIFT_sup_alphaquartz_1=0.46990
SHIFT_sup_alphaquartz_2=0.41410
SHIFT_sup_alphaquartz_3=0.26810
SHIFT_sup_alphaquartz_4=0.78540

}
EOF

if [ -z $C_A_RATIO_sup_alphaquartz ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_alphaquartz \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_alphaquartz_1 | bc -l`
s2=`echo -$SHIFT_sup_alphaquartz_1 | bc -l`

s3=`echo $SHIFT_sup_alphaquartz_2 | bc -l`
s4=`echo $SHIFT_sup_alphaquartz_3 | bc -l`
s5=`echo $SHIFT_sup_alphaquartz_4 | bc -l`
s6=`echo -$SHIFT_sup_alphaquartz_2 | bc -l`
s7=`echo -$SHIFT_sup_alphaquartz_3 | bc -l`
s8=`echo -$SHIFT_sup_alphaquartz_4 | bc -l`

s9=`echo $SHIFT_sup_alphaquartz_2 - $SHIFT_sup_alphaquartz_3 | bc -l`
s10=`echo $SHIFT_sup_alphaquartz_3 - $SHIFT_sup_alphaquartz_2 | bc -l`

s11=`echo 0.6666666666666666666666 + $SHIFT_sup_alphaquartz_4 | bc -l`
s12=`echo 0.3333333333333333333333 + $SHIFT_sup_alphaquartz_4 | bc -l`
s13=`echo 0.6666666666666666666666 - $SHIFT_sup_alphaquartz_4 | bc -l`
s14=`echo 0.3333333333333333333333 - $SHIFT_sup_alphaquartz_4 | bc -l`

cat > POSCAR << EOF
sup_alphaquartz crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_alphaquartz
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.6666666666666666666666 | bc -l`
x2=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.3333333333333333333333 | bc -l`
x3=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x4=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s7 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s9 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s11 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s10 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s6 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s12 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s6 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s10 | bc -l`
z8=`echo $d \* $nz - $d + $d \* $s13 | bc -l`
x9=`echo $d \* $nx - $d + $d \* $s9 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s7 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s14 | bc -l`
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '9p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_alphaquartz_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_alphaquartz_1=$shift_sup_alphaquartz_1
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_alphaquartz_2=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_alphaquartz_2=$shift_sup_alphaquartz_2
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[1]}
shift_sup_alphaquartz_3=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_alphaquartz_3=$shift_sup_alphaquartz_3
fi

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_alphaquartz_4=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_alphaquartz_4=$shift_sup_alphaquartz_4
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_anatase () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_anatase

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_anatase=2.51430
SHIFT_sup_anatase_1=0.08310

}
EOF

if [ -z $C_A_RATIO_sup_anatase ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_anatase \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_anatase_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_anatase_1 | bc -l`
s3=`echo 0.5 - $SHIFT_sup_anatase_1 | bc -l`
s4=`echo 0.25 + $SHIFT_sup_anatase_1 | bc -l`
s5=`echo 0.25 - $SHIFT_sup_anatase_1 | bc -l`
s6=`echo 0.5 + 2 \* $SHIFT_sup_anatase_1 | bc -l`
s7=`echo 0.5 - 2 \* $SHIFT_sup_anatase_1 | bc -l`
s8=`echo 1 - 2 \* $SHIFT_sup_anatase_1 | bc -l`
s9=`echo 2 \* $SHIFT_sup_anatase_1 | bc -l`

cat > POSCAR << EOF
sup_anatase crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 $C_A_RATIO_sup_anatase
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.625 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.375 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s9 | bc -l`
x4=`echo $d \* $nx - $d + $d \* -$s4 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s6 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* -$s5 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s7 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '13p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_anatase_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_anatase_1=$shift_sup_anatase_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_aucu () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_aucu

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_aucu=0.92632

}
EOF

if [ -z $C_A_RATIO_sup_aucu ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_aucu \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_aucu crystal $SUPERCELL_FACTOR
-$v
0.5 -0.5 0
0.5 0.5 0
0 0 $C_A_RATIO_sup_aucu
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bcc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bcc

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_bcc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_bcc crystal $SUPERCELL_FACTOR
-$v
-0.5 0.5 0.5
0.5 -0.5 0.5
0.5 0.5 -0.5
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bcc_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bcc_c

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_bcc_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_bcc_c crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bct () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bct

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_bct=1.41421

}
EOF

if [ -z $C_A_RATIO_sup_bct ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_bct \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

c=`echo 0.5 \* $C_A_RATIO_sup_bct | bc -l`

cat > POSCAR << EOF
sup_bct crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0.5 0.5 $c
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_betaquartz () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_betaquartz

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=9
ATOMS_PER_SUBCELL=9

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="3 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_betaquartz=1.10020
SHIFT_sup_betaquartz_1=0.42020

}
EOF

if [ -z $C_A_RATIO_sup_betaquartz ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_betaquartz \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_betaquartz_1 | bc -l`
s2=`echo 2 \* $SHIFT_sup_betaquartz_1 | bc -l`
s3=`echo -2 \* $SHIFT_sup_betaquartz_1 | bc -l`
s4=`echo - $SHIFT_sup_betaquartz_1 | bc -l`

cat > POSCAR << EOF
sup_betaquartz crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_betaquartz
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.6666666666666666666666 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.3333333333333333333333 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x4=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.1666666666666666666666 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.833333333333333333333 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.1666666666666666666666 | bc -l`
x9=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.833333333333333333333 | bc -l`
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '12p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_betaquartz_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_betaquartz_1=$shift_sup_betaquartz_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_betatin () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_betatin

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_betatin=0.54547

}
EOF

if [ -z $C_A_RATIO_sup_betatin ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_betatin \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

c=`echo 0.5 \* $C_A_RATIO_sup_betatin | bc -l`

cat > POSCAR << EOF
sup_betatin crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0.5 0.5 $c
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* -0.375 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.375 | bc -l`
z2=`echo $d \* $nz - $d + $d \* -0.25 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_cdi2 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_cdi2

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=3
ATOMS_PER_SUBCELL=3

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_cdi2=2.44949
SHIFT_sup_cdi2_1=0.16667

}
EOF

if [ -z $C_A_RATIO_sup_cdi2 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_cdi2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo 0.5 - $SHIFT_sup_cdi2_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_cdi2_1 | bc -l`

cat > POSCAR << EOF
sup_cdi2 crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_cdi2
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z2=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_cdi2_1=`echo $column \* $SUPERCELL_FACTOR - 0.5 \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_cdi2_1=$shift_sup_cdi2_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_cristobalite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_cristobalite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=24
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_cristobalite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_cristobalite crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* -0.125 | bc -l`
z2=`echo $d \* $nz - $d + $d \* -0.125 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_cscl () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_cscl

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_cscl \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_cscl crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_cubiclaves () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_cubiclaves

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=24
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_cubiclaves \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_cubiclaves crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.875 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.875 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.875 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_cuprite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_cuprite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_cuprite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_cuprite crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_dhcp () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_dhcp

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_dhcp=3.26598

}
EOF

if [ -z $C_A_RATIO_sup_dhcp ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_dhcp \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_dhcp crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_dhcp
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_diamond () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_diamond

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_diamond \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_diamond crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* -0.125 | bc -l`
y1=`echo $d \* $ny - $d + $d \* -0.125 | bc -l`
z1=`echo $d \* $nz - $d + $d \* -0.125 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.125 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.125 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.125 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_diamond_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_diamond_c

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=8

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_diamond_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_diamond_c crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fcc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fcc

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_fcc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_fcc crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fcc_c () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fcc_c

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_fcc_c \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_fcc_c crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fluorite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fluorite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=3

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_fluorite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_fluorite crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x3=`echo $d \* $nx - $d + $d \* -0.25 | bc -l`
y3=`echo $d \* $ny - $d + $d \* -0.25 | bc -l`
z3=`echo $d \* $nz - $d + $d \* -0.25 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_graphite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_graphite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_graphite=2.00000

}
EOF

if [ -z $C_A_RATIO_sup_graphite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_graphite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_graphite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_graphite
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_hcp () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_hcp

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_hcp=1.63299

}
EOF

if [ -z $C_A_RATIO_sup_hcp ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_hcp \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_hcp crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_hcp
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_hexagonallaves () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_hexagonallaves

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=2

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="8 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_hexagonallaves=1.64479
SHIFT_sup_hexagonallaves_1=-0.16988
SHIFT_sup_hexagonallaves_2=0.06681

}
EOF

if [ -z $C_A_RATIO_sup_hexagonallaves ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_hexagonallaves \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_hexagonallaves_1 | bc -l`
s2=`echo 2 \* $SHIFT_sup_hexagonallaves_1 | bc -l`
s3=`echo -2 \* $SHIFT_sup_hexagonallaves_1 | bc -l`
s4=`echo 0.0 - $SHIFT_sup_hexagonallaves_1 | bc -l`

s5=`echo $SHIFT_sup_hexagonallaves_2 | bc -l`
s6=`echo -$SHIFT_sup_hexagonallaves_2 | bc -l`
s7=`echo 0.5 + $SHIFT_sup_hexagonallaves_2 | bc -l`
s8=`echo 0.5 - $SHIFT_sup_hexagonallaves_2 | bc -l`

cat > POSCAR << EOF
sup_hexagonallaves crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_hexagonallaves
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y4=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s4 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x8=`echo $d \* $nx - $d + $d \* $s4 | bc -l`
y8=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x9=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s5 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z10=`echo $d \* $nz - $d + $d \* $s6 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z11=`echo $d \* $nz - $d + $d \* $s7 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z12=`echo $d \* $nz - $d + $d \* $s8 | bc -l`
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_hexagonallaves_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

row=$(sed -n '17p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_hexagonallaves_2=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_hexagonallaves_1=$shift_sup_hexagonallaves_1
SHIFT_sup_hexagonallaves_2=$shift_sup_hexagonallaves_2
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_molybdenite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_molybdenite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_molybdenite=3.88924
SHIFT_sup_molybdenite_1=0.62000

}
EOF

if [ -z $C_A_RATIO_sup_molybdenite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_molybdenite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_molybdenite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_molybdenite_1 | bc -l`
s3=`echo 0.5 - $SHIFT_sup_molybdenite_1 | bc -l`
s4=`echo - $SHIFT_sup_molybdenite_1 | bc -l`

cat > POSCAR << EOF
sup_molybdenite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_molybdenite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z6=`echo $d \* $nz - $d + $d \* $s4 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_molybdenite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_molybdenite_1=$shift_sup_molybdenite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_nacl () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_nacl

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_nacl \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_nacl crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_nickeline () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_nickeline

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_nickeline=1.63299

}
EOF

if [ -z $C_A_RATIO_sup_nickeline ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_nickeline \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_nickeline crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_nickeline
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_pyrite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_pyrite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

SHIFT_sup_pyrite_1=0.38600

}
EOF

if [ -z $SHIFT_sup_pyrite_1 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_pyrite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_pyrite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_pyrite_1 | bc -l`
s3=`echo 0.5 - $SHIFT_sup_pyrite_1 | bc -l`

cat > POSCAR << EOF
sup_pyrite crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z5=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x6=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y6=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z6=`echo $d \* $nz - $d + $d \* -$s1 | bc -l`
x7=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y7=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z7=`echo $d \* $nz - $d + $d \* -$s1 | bc -l`
x8=`echo $d \* $nx - $d + $d \* -$s2 | bc -l`
y8=`echo $d \* $ny - $d + $d \* -$s3 | bc -l`
z8=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x9=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y9=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z9=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x10=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y10=`echo $d \* $ny - $d + $d \* -$s2 | bc -l`
z10=`echo $d \* $nz - $d + $d \* -$s3 | bc -l`
x11=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y11=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z11=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x12=`echo $d \* $nx - $d + $d \* -$s3 | bc -l`
y12=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z12=`echo $d \* $nz - $d + $d \* -$s2 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '13p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_pyrite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_pyrite_1=$shift_sup_pyrite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_rutile () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_rutile

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=tetragonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=6
ATOMS_PER_SUBCELL=6

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 4"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_rutile=0.64395
SHIFT_sup_rutile_1=0.30530

}
EOF

if [ -z $C_A_RATIO_sup_rutile ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_rutile \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_rutile_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_rutile_1 | bc -l`
s3=`echo 0.5 - $SHIFT_sup_rutile_1 | bc -l`

cat > POSCAR << EOF
sup_rutile crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 $C_A_RATIO_sup_rutile
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* $s1 | bc -l`
y3=`echo $d \* $ny - $d + $d \* $s1 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* -$s1 | bc -l`
y4=`echo $d \* $ny - $d + $d \* -$s1 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* $s2 | bc -l`
y5=`echo $d \* $ny - $d + $d \* $s3 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* $s3 | bc -l`
y6=`echo $d \* $ny - $d + $d \* $s2 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[0]}
shift_sup_rutile_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_rutile_1=$shift_sup_rutile_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_sc () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_sc

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=1
ATOMS_PER_SUBCELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_sc \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_sc crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_tridymite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_tridymite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=12
ATOMS_PER_SUBCELL=12

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 8"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_tridymite=1.63698
SHIFT_sup_tridymite_1=0.06200

}
EOF

if [ -z $C_A_RATIO_sup_tridymite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_tridymite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_tridymite_1 | bc -l`
s2=`echo -$SHIFT_sup_tridymite_1 | bc -l`
s3=`echo 0.5 + $SHIFT_sup_tridymite_1 | bc -l`
s4=`echo 0.5 - $SHIFT_sup_tridymite_1 | bc -l`


cat > POSCAR << EOF
sup_tridymite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_tridymite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s3 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s4 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x9=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z10=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z11=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z12=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '9p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_tridymite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_tridymite_1=$shift_sup_tridymite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_wurtzite () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_wurtzite

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=1

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="2 2"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_wurtzite=1.63299
SHIFT_sup_wurtzite_1=0.37480

}
EOF

if [ -z $C_A_RATIO_sup_wurtzite ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_wurtzite \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

s1=`echo $SHIFT_sup_wurtzite_1 | bc -l`
s2=`echo 0.5 + $SHIFT_sup_wurtzite_1 | bc -l`

cat > POSCAR << EOF
sup_wurtzite crystal $SUPERCELL_FACTOR
-$v
0.5 -0.86602540378443864676372317075294 0
0.5 0.86602540378443864676372317075294 0
0 0 $C_A_RATIO_sup_wurtzite
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x3=`echo $d \* $nx - $d + $d \* 0.3333333333333333333333 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.6666666666666666666666 | bc -l`
z3=`echo $d \* $nz - $d + $d \* $s1 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.6666666666666666666666 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.3333333333333333333333 | bc -l`
z4=`echo $d \* $nz - $d + $d \* $s2 | bc -l`
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

row=$(sed -n '11p' < CONTCAR)    # nth atom + 8
column=${row[2]}
shift_sup_wurtzite_1=`echo $column \* $SUPERCELL_FACTOR | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
SHIFT_sup_wurtzite_1=$shift_sup_wurtzite_1
fi

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_x2o3 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_x2o3

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=10
ATOMS_PER_SUBCELL=10

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 6"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_x2o3 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_x2o3 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_x2o5 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_x2o5

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=14
ATOMS_PER_SUBCELL=14

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="4 10"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_x2o5 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_x2o5 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x5=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y5=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z5=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x6=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y6=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z6=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x7=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y7=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z7=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x8=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y8=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z8=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
x9=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y9=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z9=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x10=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y10=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z10=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x11=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y11=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z11=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
x12=`echo $d \* $nx - $d + $d \* 0.75 | bc -l`
y12=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z12=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x13=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y13=`echo $d \* $ny - $d + $d \* 0.75 | bc -l`
z13=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
x14=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y14=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z14=`echo $d \* $nz - $d + $d \* 0.75 | bc -l`
echo $x5 " " $y5 " " $z5 >> POSCAR
echo $x6 " " $y6 " " $z6 >> POSCAR
echo $x7 " " $y7 " " $z7 >> POSCAR
echo $x8 " " $y8 " " $z8 >> POSCAR
echo $x9 " " $y9 " " $z9 >> POSCAR
echo $x10 " " $y10 " " $z10 >> POSCAR
echo $x11 " " $y11 " " $z11 >> POSCAR
echo $x12 " " $y12 " " $z12 >> POSCAR
echo $x13 " " $y13 " " $z13 >> POSCAR
echo $x14 " " $y14 " " $z14 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_xo3 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_xo3

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=4

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 3"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_xo3 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_xo3 crystal $SUPERCELL_FACTOR
-$v
1 0 0
0 1 0
0 0 1
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.5 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x3=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y3=`echo $d \* $ny - $d + $d \* 0.5 | bc -l`
z3=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
x4=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y4=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z4=`echo $d \* $nz - $d + $d \* 0.5 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
echo $x3 " " $y3 " " $z3 >> POSCAR
echo $x4 " " $y4 " " $z4 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_zincblende () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_zincblende

STRUCTURE_TYPE=crystal
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=2

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=2
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1 1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

v=`echo $ATOMS_PER_SUBCELL \* $VOLUME_sup_zincblende \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}
natoms2=${array[1]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
natoms2=`echo $natoms2 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

cat > POSCAR << EOF
sup_zincblende crystal $SUPERCELL_FACTOR
-$v
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
$POTCAR
$natoms1 $natoms2
Direct
EOF

d=`echo 1.0 / $SUPERCELL_FACTOR | bc -l`

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x1=`echo $d \* $nx - $d + $d \* 0.0 | bc -l`
y1=`echo $d \* $ny - $d + $d \* 0.0 | bc -l`
z1=`echo $d \* $nz - $d + $d \* 0.0 | bc -l`
echo $x1 " " $y1 " " $z1 >> POSCAR
done
done
done
for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
x2=`echo $d \* $nx - $d + $d \* 0.25 | bc -l`
y2=`echo $d \* $ny - $d + $d \* 0.25 | bc -l`
z2=`echo $d \* $nz - $d + $d \* 0.25 | bc -l`
echo $x2 " " $y2 " " $z2 >> POSCAR
done
done
done

if [ "$READSHIFTS" = true ]; then
cat > readshifts << EOF
readshifts () {

x=x

}
EOF
fi

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
addadsorbate () {

name="ADSORPTION_DISTANCE_${1}"
adsdist=`echo ${!name}`

h=`echo 9 + $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL | bc -l`
harray=($(sed -n "$h"'p' < POSCAR))
hight=${harray[2]}

vector1=($(sed -n '3p' < POSCAR))
vector2=($(sed -n '4p' < POSCAR))

vector11=${vector1[0]}
vector12=${vector1[1]}
vector21=${vector2[0]}
vector22=${vector2[1]}

vector11=`echo $vector11 / $SUPERCELL_FACTOR  | bc -l`
vector12=`echo $vector12 / $SUPERCELL_FACTOR  | bc -l`
vector21=`echo $vector21 / $SUPERCELL_FACTOR  | bc -l`
vector22=`echo $vector22 / $SUPERCELL_FACTOR  | bc -l`

array1=($2)
adir=${array1[0]}
bdir=${array1[1]}

array2=($3)
asup=${array2[0]}
bsup=${array2[1]}

let asup=$asup-1
let bsup=$bsup-1

mkdir teemp
cd teemp
$1
cd ..
rm -r teemp

setpotcar $POTCAR $4
sed -i "/surface/{n;n;n;n;n;s/.*/$POTCAR/}" POSCAR
buildpotcar


for irrr in $(seq 1 1 $ATOMS_PER_SUBCELL) ; do

fjhvbu=$(sed -n '7p' < POSCAR)
fjhvbu=$fjhvbu" 1"
sed -i "/surface/{n;n;n;n;n;n;s/.*/$fjhvbu/}" POSCAR

name="POSITION_ATOM_${irrr}_${1}"
poss=`echo ${!name}`

pos=($poss)
value1=${pos[0]}
value2=${pos[1]}
value3=${pos[2]}

let h2=$h+$irrr+$numberofatomsthatwereaddedbefore-1

value1=`echo $asup \* $vector11 + $bsup \* $vector21 + $adir \* $vector11 + $bdir \* $vector21 + $value1 | bc -l`
value2=`echo $asup \* $vector12 + $bsup \* $vector22 + $adir \* $vector12 + $bdir \* $vector22 + $value2 | bc -l`
value3=`echo $hight + $adsdist + $value3 | bc -l`


btbeb=" $value1 $value2 $value3 T T T"

sed -i "$h2""a $btbeb" POSCAR

done

let numberofatomsthatwereaddedbefore=$numberofatomsthatwereaddedbefore+$ATOMS_PER_SUBCELL

source poscardescription
poscardescription

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
addsubstitution () {

natpelarray=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
elemarray=($POTCAR)

array=($3)
a=${array[0]}
b=${array[1]}
c=${array[2]}

for irrr in $(seq 0 1 8); do
if [ "${elemarray[$irrr]}" = $1 ]; then

jhct=($(sed -n '7p' < POSCAR))
jdcnj=${jhct[$irrr]}
let fvvwknf=$jdcnj-1
jhct[$irrr]=$fvvwknf
sdfvfkjvn=${jhct[@]}
sed -i "/crystal/{n;n;n;n;n;n;s/.*/$sdfvfkjvn/}" POSCAR


m=0

if [ "$NUMBER_OF_ELEMENTS" != 1 ]; then
for jrrr in $(seq 1 1 $irrr); do
let jrrr=$jrrr-1

echo "hello"

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
let m=$m+${natpelarray[$jrrr]}
done
done
done

done
fi

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
let m=$m+${natpelarray[$irrr]}
if [ "$nx $ny $nz" = "$a $b $c" ]; then
break 3
fi
done
done
done


let m=8+$m+$2-${natpelarray[$irrr]}

btbeb=$(sed -n "$m"'p' < POSCAR)

sed -i "$m"'d' POSCAR

setpotcar $POTCAR $4
sed -i "/crystal/{n;n;n;n;n;s/.*/$POTCAR/}" POSCAR
buildpotcar

fjhvbu=$(sed -n '7p' < POSCAR)
fjhvbu=$fjhvbu" 1"
sed -i "/crystal/{n;n;n;n;n;n;s/.*/$fjhvbu/}" POSCAR


let M=7+$ATOMS_PER_SUBCELL*$SUPERCELL_FACTOR*$SUPERCELL_FACTOR*$SUPERCELL_FACTOR
sed -i "$M""a $btbeb" POSCAR

fi
done


}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
addvacancy () {

natpelarray=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
elemarray=($POTCAR)

array=($3)
a=${array[0]}
b=${array[1]}
c=${array[2]}

for irrr in $(seq 0 1 8); do
if [ "${elemarray[$irrr]}" = $1 ]; then

jhct=($(sed -n '7p' < POSCAR))
jdcnj=${jhct[$irrr]}
let fvvwknf=$jdcnj-1
jhct[$irrr]=$fvvwknf
sdfvfkjvn=${jhct[@]}
sed -i "/crystal/{n;n;n;n;n;n;s/.*/$sdfvfkjvn/}" POSCAR


m=0

if [ "$NUMBER_OF_ELEMENTS" != 1 ]; then
for jrrr in $(seq 1 1 $irrr); do
let jrrr=$jrrr-1

echo "hello"

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
let m=$m+${natpelarray[$jrrr]}
done
done
done

done
fi

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do
for nz in $(seq 1 1 $SUPERCELL_FACTOR); do
let m=$m+${natpelarray[$irrr]}
if [ "$nx $ny $nz" = "$a $b $c" ]; then
break 3
fi
done
done
done


let m=8+$m+$2-${natpelarray[$irrr]}

sed -i "$m"'d' POSCAR

fi
done

}


 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bent_mol () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=molecule

ATOMS_PER_SUBCELL=3

}
EOF

source poscardescription
poscardescription

cat > defaultatomicpositions << EOF
defaultatomicpositions () {

POSITION_ATOM_1_bent_mol="0 0 0"
POSITION_ATOM_2_bent_mol="0 1 0.5"
POSITION_ATOM_3_bent_mol="0 -1 0.5"

}
EOF

if [ -z $POSITION_ATOM_1_bent_mol ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

xx=`echo $MOLECULE_CELL_SIZE_bent_mol \* $SUPERCELL_FACTOR - $MOLECULE_ASYMETRY_bent_mol | bc -l`
yy=`echo $MOLECULE_CELL_SIZE_bent_mol \* $SUPERCELL_FACTOR | bc -l`
zz=`echo $MOLECULE_CELL_SIZE_bent_mol \* $SUPERCELL_FACTOR + $MOLECULE_ASYMETRY_bent_mol | bc -l`

cat > POSCAR << EOF
bent_mol molecule
1.0
$xx 0 0
0 $yy 0
0 0 $zz
$POTCAR
1 1 1
Cartesian
$POSITION_ATOM_1_bent_mol
$POSITION_ATOM_2_bent_mol
$POSITION_ATOM_3_bent_mol
EOF

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
diatomic_mol () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=molecule

ATOMS_PER_SUBCELL=2

}
EOF

source poscardescription
poscardescription

cat > defaultatomicpositions << EOF
defaultatomicpositions () {

POSITION_ATOM_1_diatomic_mol="0 0 0"
POSITION_ATOM_2_diatomic_mol="0 0 1"

}
EOF

if [ -z $POSITION_ATOM_1_diatomic_mol ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

xx=`echo $MOLECULE_CELL_SIZE_diatomic_mol \* $SUPERCELL_FACTOR - $MOLECULE_ASYMETRY_diatomic_mol | bc -l`
yy=`echo $MOLECULE_CELL_SIZE_diatomic_mol \* $SUPERCELL_FACTOR | bc -l`
zz=`echo $MOLECULE_CELL_SIZE_diatomic_mol \* $SUPERCELL_FACTOR + $MOLECULE_ASYMETRY_diatomic_mol | bc -l`

cat > POSCAR << EOF
diatomic_mol molecule
1.0
$xx 0 0
0 $yy 0
0 0 $zz
$POTCAR
1 1
Cartesian
$POSITION_ATOM_1_diatomic_mol
$POSITION_ATOM_2_diatomic_mol
EOF

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
linear_mol () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=molecule

ATOMS_PER_SUBCELL=3

}
EOF

source poscardescription
poscardescription

cat > defaultatomicpositions << EOF
defaultatomicpositions () {

POSITION_ATOM_1_linear_mol="0 0 0"
POSITION_ATOM_2_linear_mol="0 0 1"
POSITION_ATOM_3_linear_mol="0 0 2"

}
EOF

if [ -z $POSITION_ATOM_1_linear_mol ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

xx=`echo $MOLECULE_CELL_SIZE_linear_mol \* $SUPERCELL_FACTOR - $MOLECULE_ASYMETRY_linear_mol | bc -l`
yy=`echo $MOLECULE_CELL_SIZE_linear_mol \* $SUPERCELL_FACTOR | bc -l`
zz=`echo $MOLECULE_CELL_SIZE_linear_mol \* $SUPERCELL_FACTOR + $MOLECULE_ASYMETRY_linear_mol | bc -l`

cat > POSCAR << EOF
linear_mol molecule
1.0
$xx 0 0
0 $yy 0
0 0 $zz
$POTCAR
1 1 1
Cartesian
$POSITION_ATOM_1_linear_mol
$POSITION_ATOM_2_linear_mol
$POSITION_ATOM_3_linear_mol
EOF

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
monatomic_mol () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1

STRUCTURE_TYPE=molecule

ATOMS_PER_SUBCELL=1

}
EOF

source poscardescription
poscardescription

cat > defaultatomicpositions << EOF
defaultatomicpositions () {

POSITION_ATOM_1_monatomic_mol="0 0 0"

}
EOF

if [ -z $POSITION_ATOM_1_monatomic_mol ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

xx=`echo $MOLECULE_CELL_SIZE_monatomic_mol \* $SUPERCELL_FACTOR - $MOLECULE_ASYMETRY_monatomic_mol | bc -l`
yy=`echo $MOLECULE_CELL_SIZE_monatomic_mol \* $SUPERCELL_FACTOR | bc -l`
zz=`echo $MOLECULE_CELL_SIZE_monatomic_mol \* $SUPERCELL_FACTOR + $MOLECULE_ASYMETRY_monatomic_mol | bc -l`

cat > POSCAR << EOF
monatomic_mol molecule
1.0
$xx 0 0
0 $yy 0
0 0 $zz
$POTCAR
1 
Cartesian
$POSITION_ATOM_1_monatomic_mol
EOF

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bcc_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_bcc_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_bcc_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.5 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_bcc_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
bcc_100 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_bcc_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_bcc_100" = "defaulthights" ]; then
hight=`echo  0.5 \* $ig - 0.5 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_bcc_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_bcc_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_bcc_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bcc_110 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_bcc_110

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_bcc_110 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.7071067811865475244008443621048 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_bcc_110 / $c | bc -l`

xx=`echo 0.8660254037844386467637231707529 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.2886751345948128822545743902510 \* $c | bc -l`
yy=`echo 0.8164965809277260327324280249020 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
bcc_110 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_bcc_110
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 0.8660254037844386467637231707529 \* $nx - 0.8660254037844386467637231707529 + 0.2886751345948128822545743902510 \* $ny - 0.2886751345948128822545743902510 + 0.57735026918962576450914878050196 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.8164965809277260327324280249020 \* $ny - 0.8164965809277260327324280249020 + 0.40824829046386301636621401245098 | bc -l`
x2=`echo 0.8660254037844386467637231707529 \* $nx - 0.8660254037844386467637231707529 + 0.2886751345948128822545743902510 \* $ny - 0.2886751345948128822545743902510 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.8164965809277260327324280249020 \* $ny - 0.8164965809277260327324280249020 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_bcc_110" = "defaulthights" ]; then
hight=`echo  0.7071067811865475244008443621048 \* $ig - 0.7071067811865475244008443621048 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_bcc_110)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_bcc_110 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_bcc_110" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
bcc_111 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_bcc_111

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=3

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_bcc_111 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.2886751345948128822545743902510 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_bcc_111 / $c | bc -l`

xx=`echo 1.4142135623730950488016887242097 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.7071067811865475244008443621048 \* $c | bc -l`
yy=`echo 1.2247448713915890490986420373529 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
bcc_111 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_bcc_111
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 0.7071067811865475244008443621048 | bc -l`
y1=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.40824829046386301636621401245098 | bc -l`
x2=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.00000000000000000000000000000000 | bc -l`
x3=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 1.4142135623730950488016887242097 | bc -l`
y3=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.81649658092772603273242802490196 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_bcc_111" = "defaulthights" ]; then
hight=`echo  0.2886751345948128822545743902510 \* $ig - 0.2886751345948128822545743902510 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_bcc_111)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))

seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_bcc_111 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_bcc_111" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
diamond_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_diamond_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=4

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_diamond_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.35355339664904762812604531564108 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_diamond_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
diamond_100 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_diamond_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x4=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y4=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`
x4=`echo $c \* $x4 / $SUPERCELL_FACTOR | bc -l`
y4=`echo $c \* $y4 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_diamond_100" = "defaulthights" ]; then
hight=`echo  0.35355339664904762812604531564108 \* $ig - 0.35355339664904762812604531564108 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_diamond_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_diamond_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_diamond_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fcc_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_fcc_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_fcc_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.70710678118654752440084436210485 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_fcc_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
fcc_100 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_fcc_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_fcc_100" = "defaulthights" ]; then
hight=`echo  0.70710678118654752440084436210485 \* $ig - 0.70710678118654752440084436210485 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_fcc_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_fcc_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_fcc_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fcc_110 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_fcc_110

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_fcc_110 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.5 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_fcc_110 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1.4142135623730950488016887242097 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
fcc_110 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_fcc_110
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1.4142135623730950488016887242097 \* $ny - 1.4142135623730950488016887242097 + 0.70710678118654752440084436210485 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1.4142135623730950488016887242097 \* $ny - 1.4142135623730950488016887242097 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_fcc_110" = "defaulthights" ]; then
hight=`echo  0.5 \* $ig - 0.5 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_fcc_110)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_fcc_110 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_fcc_110" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fcc_111 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_fcc_111

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=3

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_fcc_111 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.81649658092772603273242802490195 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_fcc_111 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.5 \* $c | bc -l`
yy=`echo 0.86602540378443864676372317075294 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
fcc_111 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_fcc_111
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 1.00000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.57735026918962576450914878050196 | bc -l`
x2=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.00000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.50000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.28867513459481288225457439025098 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_fcc_111" = "defaulthights" ]; then
hight=`echo  0.81649658092772603273242802490195 \* $ig - 0.81649658092772603273242802490195 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_fcc_111)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))

seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_fcc_111 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_fcc_111" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
hcp_001 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_hcp_001

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_hcp_001=1.63299

}
EOF

if [ -z $C_A_RATIO_hcp_001 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_hcp_001 | bc -l`
v=`echo 1.1547005383792515290182975610039 \* $v / $C_A_RATIO_hcp_001 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`
h=`echo 0.5 \* $C_A_RATIO_hcp_001 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_hcp_001 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.5 \* $c | bc -l`
yy=`echo 0.86602540378443864676372317075294 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
hcp_001 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_hcp_001
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 1.00000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.57735026918962576450914878050196 | bc -l`
x2=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_hcp_001" = "defaulthights" ]; then
hight=`echo  0.5 \* $C_A_RATIO_hcp_001 \* $ig - 0.5 \* $C_A_RATIO_hcp_001 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_hcp_001)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_hcp_001 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_hcp_001" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
hcp_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=false
SUPERCELL_FACTOR=1
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_hcp_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=4

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_hcp_100=1.63299

}
EOF

if [ -z $C_A_RATIO_hcp_100 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_hcp_100 | bc -l`
v=`echo 1.1547005383792515290182975610039 \* $v / $C_A_RATIO_hcp_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`
h=`echo 0.25 \* 1.73205080756887729352744634150587 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_hcp_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo $C_A_RATIO_hcp_100 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
hcp_100 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_hcp_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + $C_A_RATIO_hcp_100 \* $ny - $C_A_RATIO_hcp_100 + $C_A_RATIO_hcp_100 \* 0.25000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + $C_A_RATIO_hcp_100 \* $ny - $C_A_RATIO_hcp_100 + $C_A_RATIO_hcp_100 \* 0.75000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + $C_A_RATIO_hcp_100 \* $ny - $C_A_RATIO_hcp_100 + $C_A_RATIO_hcp_100 \* 0.25000000000000000000000000000000 | bc -l`
x4=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y4=`echo 0 \* $nx - 0 + $C_A_RATIO_hcp_100 \* $ny - $C_A_RATIO_hcp_100 + $C_A_RATIO_hcp_100 \* 0.75000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`
x4=`echo $c \* $x4 / $SUPERCELL_FACTOR | bc -l`
y4=`echo $c \* $y4 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_hcp_100" = "defaulthights" ]; then   #different from rest of surfaces because layers not equally spaced
res=$(($ig % $ATOMS_PER_SUBCELL))
if [ $(echo "$res == 0" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 1.00 \* 1.73205080756887729352744634150587 + 0.66666666666666666666666666666667 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.25 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.50 \* 1.73205080756887729352744634150587 + 0.16666666666666666666666666666667 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.75 \* 1.73205080756887729352744634150587 + 0.5 \* 1.73205080756887729352744634150587 | bc -l`
fi
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_hcp_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_hcp_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_hcp_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bcc_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bcc_100
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_bcc_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_bcc_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.5 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_bcc_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_bcc_100 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_bcc_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_bcc_100" = "defaulthights" ]; then
hight=`echo  0.5 \* $ig - 0.5 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_bcc_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bcc_110 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bcc_110
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_bcc_110

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_bcc_110 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.7071067811865475244008443621048 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_bcc_110 / $c | bc -l`

xx=`echo 0.8660254037844386467637231707529 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.2886751345948128822545743902510 \* $c | bc -l`
yy=`echo 0.8164965809277260327324280249020 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_bcc_110 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_bcc_110
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 0.8660254037844386467637231707529 \* $nx - 0.8660254037844386467637231707529 + 0.2886751345948128822545743902510 \* $ny - 0.2886751345948128822545743902510 + 0.57735026918962576450914878050196 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.8164965809277260327324280249020 \* $ny - 0.8164965809277260327324280249020 + 0.40824829046386301636621401245098 | bc -l`
x2=`echo 0.8660254037844386467637231707529 \* $nx - 0.8660254037844386467637231707529 + 0.2886751345948128822545743902510 \* $ny - 0.2886751345948128822545743902510 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.8164965809277260327324280249020 \* $ny - 0.8164965809277260327324280249020 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_bcc_110" = "defaulthights" ]; then
hight=`echo  0.7071067811865475244008443621048 \* $ig - 0.7071067811865475244008443621048 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_bcc_110)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_110 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_110" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_bcc_111 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_bcc_111
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_bcc_111

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=I

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=3

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_bcc_111 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`       # c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.2886751345948128822545743902510 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_bcc_111 / $c | bc -l`

xx=`echo 1.4142135623730950488016887242097 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.7071067811865475244008443621048 \* $c | bc -l`
yy=`echo 1.2247448713915890490986420373529 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_bcc_111 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_bcc_111
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 1.4142135623730950488016887242097 | bc -l`
y1=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.81649658092772603273242802490196 | bc -l`
x2=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 0.7071067811865475244008443621048 | bc -l`
y2=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.40824829046386301636621401245098 | bc -l`
x3=`echo 1.4142135623730950488016887242097 \* $nx - 1.4142135623730950488016887242097 + 0.7071067811865475244008443621048 \* $ny - 0.7071067811865475244008443621048 + 0.00000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + 1.2247448713915890490986420373529 \* $ny - 1.2247448713915890490986420373529 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_bcc_111" = "defaulthights" ]; then
hight=`echo  0.2886751345948128822545743902510 \* $ig - 0.2886751345948128822545743902510 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_bcc_111)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))

seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_111 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_bcc_111" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_diamond_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_diamond_100
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_diamond_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=8
ATOMS_PER_SUBCELL=4

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_diamond_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.35355339664904762812604531564108 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_diamond_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_diamond_100 surface ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_diamond_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x4=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y4=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`
x4=`echo $c \* $x4 / $SUPERCELL_FACTOR | bc -l`
y4=`echo $c \* $y4 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_diamond_100" = "defaulthights" ]; then
hight=`echo  0.35355339664904762812604531564108 \* $ig - 0.35355339664904762812604531564108 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_diamond_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_diamond_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_diamond_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fcc_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fcc_100
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_fcc_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_fcc_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.70710678118654752440084436210485 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_fcc_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_fcc_100 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_fcc_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.50000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1 \* $ny - 1 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_fcc_100" = "defaulthights" ]; then
hight=`echo  0.70710678118654752440084436210485 \* $ig - 0.70710678118654752440084436210485 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_fcc_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fcc_110 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fcc_110
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_fcc_110

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_fcc_110 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.5 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_fcc_110 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo 1.4142135623730950488016887242097 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_fcc_110 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_fcc_110
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 1.4142135623730950488016887242097 \* $ny - 1.4142135623730950488016887242097 + 0.70710678118654752440084436210485 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 1.4142135623730950488016887242097 \* $ny - 1.4142135623730950488016887242097 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_fcc_100" = "defaulthights" ]; then
hight=`echo  0.5 \* $ig - 0.5 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_fcc_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_110 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_110" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_fcc_111 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_fcc_111
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_fcc_111

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=cubic
BRAVAIS_LATTICE=F

ATOMS_PER_CONVENTIONAL_CELL=4
ATOMS_PER_SUBCELL=3

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

x=x

}
EOF

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_fcc_111 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR / 1.4142135623730950488016887242097 | bc -l`
h=`echo 0.81649658092772603273242802490195 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_fcc_111 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.5 \* $c | bc -l`
yy=`echo 0.86602540378443864676372317075294 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_fcc_111 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_fcc_111
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 1.00000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.57735026918962576450914878050196 | bc -l`
x2=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.00000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.50000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.28867513459481288225457439025098 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_fcc_111" = "defaulthights" ]; then
hight=`echo  0.81649658092772603273242802490195 \* $ig - 0.81649658092772603273242802490195 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_fcc_111)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))

seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_111 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_fcc_111" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_hcp_001 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_hcp_001
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_hcp_001

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=2

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_hcp_001=1.63299

}
EOF

if [ -z $C_A_RATIO_sup_hcp_001 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_hcp_001 | bc -l`
v=`echo 1.1547005383792515290182975610039 \* $v / $C_A_RATIO_sup_hcp_001 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`
h=`echo 0.5 \* $C_A_RATIO_sup_hcp_001 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_hcp_001 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0.5 \* $c | bc -l`
yy=`echo 0.86602540378443864676372317075294 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_hcp_001 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_hcp_001
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 1.00000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.57735026918962576450914878050196 | bc -l`
x2=`echo 1 \* $nx - 1 + 0.5 \* $ny - 0.5 + 0.00000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + 0.86602540378443864676372317075294 \* $ny - 0.86602540378443864676372317075294 + 0.00000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_hcp_001" = "defaulthights" ]; then
hight=`echo  0.5 \* $C_A_RATIO_sup_hcp_001 \* $ig - 0.5 \* $C_A_RATIO_sup_hcp_001 | bc -l`
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_hcp_001)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_hcp_001 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_hcp_001" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sup_hcp_100 () {

cat > poscardescription << EOF
poscardescription () {

THISISSUPERCELL=true
SUPERCELL_FACTOR=$SUPERCELL_FACTOR_sup_hcp_100
NUMBER_OF_LAYERS=$NUMBER_OF_LAYERS_sup_hcp_100

STRUCTURE_TYPE=surface
LATTICE_SYSTEM=hexagonal
BRAVAIS_LATTICE=P

ATOMS_PER_CONVENTIONAL_CELL=2
ATOMS_PER_SUBCELL=4

NUMBER_OF_ATOMS_PER_LAYER_PER_CELL=1

NUMBER_OF_SHIFTS=0

NUMBER_OF_ELEMENTS=1
NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT="1"

}
EOF

source poscardescription
poscardescription

cat > defaultshiftsandratios << EOF
defaultshiftsandratios () {

C_A_RATIO_sup_hcp_100=1.63299

}
EOF

if [ -z $C_A_RATIO_sup_hcp_100 ] ; then
source defaultshiftsandratios
defaultshiftsandratios
fi

array=($NUMBER_OF_ATOMS_PER_SUBCELL_PER_ELEMENT)
natoms1=${array[0]}

natoms1=`echo $natoms1 \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $NUMBER_OF_LAYERS | bc -l`

v=`echo $ATOMS_PER_CONVENTIONAL_CELL \* $VOLUME_sup_hcp_100 | bc -l`
v=`echo 1.1547005383792515290182975610039 \* $v / $C_A_RATIO_sup_hcp_100 | bc -l`
c=`echo " e( l($v)/3 ) " | bc -l`
c=`echo $c \* $SUPERCELL_FACTOR | bc -l`
h=`echo 0.25 \* 1.73205080756887729352744634150587 \* $NUMBER_OF_LAYERS / $SUPERCELL_FACTOR + $VACUUM_SIZE_sup_hcp_100 / $c | bc -l`

xx=`echo 1 \* $c | bc -l`
xy=`echo 0 \* $c | bc -l`
xz=`echo 0 \* $c | bc -l`
yx=`echo 0 \* $c | bc -l`
yy=`echo $C_A_RATIO_sup_hcp_100 \* $c | bc -l`
yz=`echo 0 \* $c | bc -l`
zx=`echo 0 \* $c | bc -l`
zy=`echo 0 \* $c | bc -l`
zz=`echo $h \* $c | bc -l`

cat > POSCAR << EOF
sup_hcp_100 surface $SUPERCELL_FACTOR ; layers: $NUMBER_OF_LAYERS ; vacuum: $VACUUM_SIZE_sup_hcp_100
1.0
$xx $xy $xz
$yx $yy $yz
$zx $zy $zz
$POTCAR
$natoms1
Selective dynamics
Cartesian
EOF

for ig in $(seq 1 1 $NUMBER_OF_LAYERS); do

for nx in $(seq 1 1 $SUPERCELL_FACTOR); do
for ny in $(seq 1 1 $SUPERCELL_FACTOR); do

x1=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y1=`echo 0 \* $nx - 0 + $C_A_RATIO_sup_hcp_100 \* $ny - $C_A_RATIO_sup_hcp_100 + $C_A_RATIO_sup_hcp_100 \* 0.25000000000000000000000000000000 | bc -l`
x2=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.50000000000000000000000000000000 | bc -l`
y2=`echo 0 \* $nx - 0 + $C_A_RATIO_sup_hcp_100 \* $ny - $C_A_RATIO_sup_hcp_100 + $C_A_RATIO_sup_hcp_100 \* 0.75000000000000000000000000000000 | bc -l`
x3=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y3=`echo 0 \* $nx - 0 + $C_A_RATIO_sup_hcp_100 \* $ny - $C_A_RATIO_sup_hcp_100 + $C_A_RATIO_sup_hcp_100 \* 0.25000000000000000000000000000000 | bc -l`
x4=`echo 1 \* $nx - 1 + 0 \* $ny - 0 + 0.00000000000000000000000000000000 | bc -l`
y4=`echo 0 \* $nx - 0 + $C_A_RATIO_sup_hcp_100 \* $ny - $C_A_RATIO_sup_hcp_100 + $C_A_RATIO_sup_hcp_100 \* 0.75000000000000000000000000000000 | bc -l`

x1=`echo $c \* $x1 / $SUPERCELL_FACTOR | bc -l`
y1=`echo $c \* $y1 / $SUPERCELL_FACTOR | bc -l`
x2=`echo $c \* $x2 / $SUPERCELL_FACTOR | bc -l`
y2=`echo $c \* $y2 / $SUPERCELL_FACTOR | bc -l`
x3=`echo $c \* $x3 / $SUPERCELL_FACTOR | bc -l`
y3=`echo $c \* $y3 / $SUPERCELL_FACTOR | bc -l`
x4=`echo $c \* $x4 / $SUPERCELL_FACTOR | bc -l`
y4=`echo $c \* $y4 / $SUPERCELL_FACTOR | bc -l`


if [ "$LAYER_HIGHTS_sup_hcp_100" = "defaulthights" ]; then   #different from rest of surfaces because layers not equally spaced
res=$(($ig % $ATOMS_PER_SUBCELL))
if [ $(echo "$res == 0" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 1.00 \* 1.73205080756887729352744634150587 + 0.66666666666666666666666666666667 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.25 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.50 \* 1.73205080756887729352744634150587 + 0.16666666666666666666666666666667 \* 1.73205080756887729352744634150587 | bc -l`
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
hight=`echo  0.25 \* 1.73205080756887729352744634150587 \* $ig - 0.75 \* 1.73205080756887729352744634150587 + 0.5 \* 1.73205080756887729352744634150587 | bc -l`
fi
hight=`echo  $c \* $hight / $SUPERCELL_FACTOR | bc -l`
else
let iii=$ig-1
hightsarray=($LAYER_HIGHTS_sup_hcp_100)
hight=${hightsarray[$iii]}
fi

res=$(($ig % $ATOMS_PER_SUBCELL))


seldynup=`echo $NUMBER_OF_LAYERS - $ig | bc -l`
seldyndown=`echo $SELECTIVE_DYNAMICS_DEPTH_sup_hcp_100 + 1 | bc -l`

if [ $(echo "$seldynup < $SELECTIVE_DYNAMICS_DEPTH_sup_hcp_100" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

elif [ $(echo "$ig < $seldyndown" | bc) -eq 1 ]; then

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " T T T "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " T T T "  >> POSCAR
fi

else

if [ $(echo "$res == 0" | bc) -eq 1 ]; then
echo "$x1  $y1 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 1" | bc) -eq 1 ]; then
echo "$x2  $y2 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 2" | bc) -eq 1 ]; then
echo "$x3  $y3 " $hight " F F F "  >> POSCAR
fi
if [ $(echo "$res == 3" | bc) -eq 1 ]; then
echo "$x4  $y4 " $hight " F F F "  >> POSCAR
fi

fi


done
done

done

numberofatomsthatwereaddedbefore=0

}



 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gencutconvergence () {

secsgencutconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "       #gencutconvergence fcc "15 1 35 25" 0.001 autovar electronicmin fcc addvacancy $potcar 1 "1 1 1" v
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       #gencutconvergence fcc "15 1 35 25" 0.001 autovar electronicmin fcc addvacancy $potcar 1 "1 1 1" v
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

backupencut=$ENCUT

mkdir gencutconvergence_${1}
cd gencutconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ENCUT                  Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ENCUT                  Result                      Difference" >> $MAINDIR/output.txt
fi

array=($(echo "$2"))
value1=`echo ${array[0]} | bc -l`
value2=`echo ${array[1]} | bc -l`
value3=`echo ${array[2]} | bc -l`

counterfff=0
for i in $(seq ${value1%.*} ${value2%.*} ${value3%.*}); do
let counterfff=$counterfff+1
mkdir $i
cd $i
ENCUT=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

ENCUT=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at ENCUT = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at ENCUT = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at ENCUT = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at ENCUT = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER ENCUT = $hhhhhh (at ENCUT = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
ENCUT=$backupencut
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gencutconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 ENCUT convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Cutoff energy (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "gencutconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gencutconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gencutconvergence_gnup_${1}_${GGA} << EOF
set title "$1 ENCUT convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Cutoff energy (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "gencutconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gencutconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgencutconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gkpointsconvergence () {

secsgkpointsconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "      
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

name="KPOINTS_$1"
backupkpts=`echo ${!name}`

mkdir gkpointsconvergence_${1}
cd gkpointsconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " Number of kpoints      Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " Number of kpoints      Result                      Difference" >> $MAINDIR/output.txt
fi

jnvjskvnfkj=($2)
arewvwt1=${jnvjskvnfkj[0]}
arewvwt2=${jnvjskvnfkj[1]}
arewvwt3=${jnvjskvnfkj[2]}

counterfff=0
for i in $(seq $arewvwt1 $arewvwt2 $arewvwt3); do
let counterfff=$counterfff+1
mkdir $i
cd $i

name="KPOINTS_$1"
eval $name=$i

PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

name="KPOINTS_$1"
eval $name=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at KPOINTS_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at KPOINTS_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at KPOINTS_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at KPOINTS_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER KPOINTS_$1 = $hhhhhh (at KPOINTS_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
name="KPOINTS_$1"
eval $name=$backupkpts
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gkpointsconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 kpoints convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of kpoints along x-, y-, z- direction"
set ylabel "$ylabel"
unset key
set term png
set output "gkpointsconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gkpointsconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gkpointsconvergence_gnup_${1}_${GGA} << EOF
set title "$1 kpoints convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of kpoints along x-, y-, z- direction"
set ylabel "$ylabel"
unset key
set term png
set output "gkpointsconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gkpointsconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgkpointsconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gnomegaconvergence () {

secsgnomegaconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "      
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

backupnomega=$NOMEGA

mkdir gnomegaconvergence_${1}
cd gnomegaconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " NOMEGA                 Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " NOMEGA                 Result                      Difference" >> $MAINDIR/output.txt
fi

jnvjskvnfkj=($2)
arewvwt1=${jnvjskvnfkj[0]}
arewvwt2=${jnvjskvnfkj[1]}
arewvwt3=${jnvjskvnfkj[2]}

counterfff=0
for i in $(seq $arewvwt1 $arewvwt2 $arewvwt3); do
let counterfff=$counterfff+1
mkdir $i
cd $i
NOMEGA=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

NOMEGA=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at NOMEGA = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at NOMEGA = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at NOMEGA = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at NOMEGA = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NOMEGA = $hhhhhh (at NOMEGA = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
NOMEGA=$backupnomega
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gnomegaconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 NOMEGA convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of imaginary frequency and time points"
set ylabel "$ylabel"
unset key
set term png
set output "gnomegaconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gnomegaconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gnomegaconvergence_gnup_${1}_${GGA} << EOF
set title "$1 NOMEGA convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of imaginary frequency and time points"
set ylabel "$ylabel"
unset key
set term png
set output "gnomegaconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gnomegaconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgnomegaconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gnumberoflayersconvergence () {

secsgnumberoflayersconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "      
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

name="NUMBER_OF_LAYERS_$i"
backupnumberoflayers=`echo ${!name}`

mkdir gnumberoflayersconvergence_${1}
cd gnumberoflayersconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " Number of layers       Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " Number of layers       Result                      Difference" >> $MAINDIR/output.txt
fi

jnvjskvnfkj=($2)
arewvwt1=${jnvjskvnfkj[0]}
arewvwt2=${jnvjskvnfkj[1]}
arewvwt3=${jnvjskvnfkj[2]}

counterfff=0
for i in $(seq $arewvwt1 $arewvwt2 $arewvwt3); do
let counterfff=$counterfff+1
mkdir $i
cd $i

name="NUMBER_OF_LAYERS_$i"
eval $name=$i

PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

name="NUMBER_OF_LAYERS_$i"
eval $name=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at NUMBER_OF_LAYERS_$i = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at NUMBER_OF_LAYERS_$i = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at NUMBER_OF_LAYERS_$i = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at NUMBER_OF_LAYERS_$i = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER NUMBER_OF_LAYERS_$i = $hhhhhh (at NUMBER_OF_LAYERS_$i = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$i has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
name="NUMBER_OF_LAYERS_$i"
eval $name=$backupnumberoflayers
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gnumberoflayersconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 number of layers convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of layers per surface slab"
set ylabel "$ylabel"
unset key
set term png
set output "gnumberoflayersconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gnumberoflayersconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gnumberoflayersconvergence_gnup_${1}_${GGA} << EOF
set title "$1 number of layers convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of layers per surface slab"
set ylabel "$ylabel"
unset key
set term png
set output "gnumberoflayersconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gnumberoflayersconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgnumberoflayersconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gsupercellconvergence () {

secsgsupercellconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "      
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

name="SUPERCELL_FACTOR_$1"
backupsupercell=`echo ${!name}`

mkdir gsupercellconvergence_${1}
cd gsupercellconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " Supercell factor       Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " Supercell factor       Result                      Difference" >> $MAINDIR/output.txt
fi

jnvjskvnfkj=($2)
arewvwt1=${jnvjskvnfkj[0]}
arewvwt2=${jnvjskvnfkj[1]}
arewvwt3=${jnvjskvnfkj[2]}

counterfff=0
for i in $(seq $arewvwt1 $arewvwt2 $arewvwt3); do
let counterfff=$counterfff+1
mkdir $i
cd $i

name="SUPERCELL_FACTOR_$1"
eval $name=$i

PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

name="SUPERCELL_FACTOR_$1"
eval $name=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at SUPERCELL_FACTOR_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at SUPERCELL_FACTOR_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at SUPERCELL_FACTOR_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at SUPERCELL_FACTOR_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER SUPERCELL_FACTOR_$1 = $hhhhhh (at SUPERCELL_FACTOR_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
name="SUPERCELL_FACTOR_$1"
eval $name=$backupsupercell
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gsupercellconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 supercell convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Supercell factor"
set ylabel "$ylabel"
unset key
set term png
set output "gsupercellconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gsupercellconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gsupercellconvergence_gnup_${1}_${GGA} << EOF
set title "$1 supercell convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Supercell factor"
set ylabel "$ylabel"
unset key
set term png
set output "gsupercellconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gsupercellconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgsupercellconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
gvacuumsizeconvergence () {

secsgvacuumsizeconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "      
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: gvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: gvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

name="VACUUM_SIZE_$1"
backupvacuumsize=`echo ${!name}`

mkdir gvacuumsizeconvergence_${1}
cd gvacuumsizeconvergence_${1}

VARIABLEFORCONVERGENCE_last=0

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " Vacuum size            Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " Vacuum size            Result                      Difference" >> $MAINDIR/output.txt
fi

jnvjskvnfkj=($2)
arewvwt1=${jnvjskvnfkj[0]}
arewvwt2=${jnvjskvnfkj[1]}
arewvwt3=${jnvjskvnfkj[2]}

counterfff=0
for i in $(seq $arewvwt1 $arewvwt2 $arewvwt3); do
let counterfff=$counterfff+1
mkdir $i
cd $i

name="VACUUM_SIZE_$1"
eval $name=$i

PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt

VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done


hhh=($(echo "$2"))
hhhh=${hhh[3]}
hhhhhh=${hhhh%.*}

referencevaluedcarr=($(tail -n 1 data.dat | head -n 1))
referencevaluedc=${referencevaluedcarr[1]}

secondreferencevaluedcarr=($(tail -n 2 data.dat | head -n 1))
secondreferencevaluedc=${secondreferencevaluedcarr[1]}

diff=`echo $referencevaluedc - $secondreferencevaluedc | bc -l`

notconverged=false

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

elif [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
notconverged=true
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " GLOBAL CONVERGENCE CRITERION OF " $3 " WAS NEVER REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi

fi

if [ "$notconverged" = false ]; then

for i in $(seq 2 1 $counterfff); do
#let fhjvjnejv=$i+1
argkgvnjarr=($(tail -n $i data.dat | head -n 1))
argkgvnj=${argkgvnjarr[1]}
isniin=${argkgvnjarr[0]}

name="VACUUM_SIZE_$1"
eval $name=$isniin

diff=`echo $referencevaluedc - $argkgvnj | bc -l`

if [ $(echo "$isniin < $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at VACUUM_SIZE_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at VACUUM_SIZE_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was reached at VACUUM_SIZE_$1 = " $isniin
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was reached at VACUUM_SIZE_$1 = " $isniin >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin == $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi


if [ $(echo "$isniin > $hhhhhh" | bc) -eq 1 ]; then

if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 < $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

if [ $(echo "$diff < 0.0" | bc) -eq 1 ]; then
if [ $(echo "-$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " global convergence criterion of " $3 " was only met AFTER VACUUM_SIZE_$1 = $hhhhhh (at VACUUM_SIZE_$1 = $isniin)" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi

fi



done

fi





if [ "$UPDATEVARIABLES" = false ]; then
name="VACUUM_SIZE_$1"
eval $name=$backupvacuumsize
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > gvacuumsizeconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 vacuum size convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Vacuum size ({\305})"
set ylabel "$ylabel"
unset key
set term png
set output "gvacuumsizeconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gvacuumsizeconvergence_gnup_${1}_${METAGGA}
fi
else
cat > gvacuumsizeconvergence_gnup_${1}_${GGA} << EOF
set title "$1 vacuum size convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Vacuum size ({\305})"
set ylabel "$ylabel"
unset key
set term png
set output "gvacuumsizeconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT gvacuumsizeconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secsgvacuumsizeconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lencutconvergence () {

secslencutconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "       #lencutconvergence fcc "15 1 25" 0.001 autovar electronicmin fcc addvacancy $potcar 1 "1 1 1" v
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "       #lencutconvergence fcc "15 1 25" 0.001 autovar electronicmin fcc addvacancy $potcar 1 "1 1 1" v
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lencutconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

backupencut=$ENCUT

mkdir lencutconvergence_${1}
cd lencutconvergence_${1}
VARIABLEFORCONVERGENCE_last=0
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ENCUT                  Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ENCUT                  Result                      Difference" >> $MAINDIR/output.txt
fi
array=($(echo "$2"))
value1=`echo ${array[0]} | bc -l`
value2=`echo ${array[1]} | bc -l`
value3=`echo ${array[2]} | bc -l`
for i in $(seq ${value1%.*} ${value2%.*} ${value3%.*}); do
mkdir $i
cd $i
ENCUT=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                     $VARIABLEFORCONVERGENCE     $diff"
echo " $i                     $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at ENCUT = " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at ENCUT = " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at ENCUT = " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at ENCUT = " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENCUT has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
ENCUT=$backupencut
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lencutconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 ENCUT convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Cutoff energy (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "lencutconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lencutconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lencutconvergence_gnup_${1}_${GGA} << EOF
set title "$1 ENCUT convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Cutoff energy (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "lencutconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lencutconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secslencutconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lkpointsconvergence () {

secslkpointsconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " "
echo " Number of kpoints      Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Number of kpoints      Result                      Difference" >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " "
echo " Number of kpoints      Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lkpointsconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Number of kpoints      Result                      Difference" >> $MAINDIR/output.txt
fi
fi
fi

mkdir lkpointsconvergence_${1}
cd lkpointsconvergence_${1}
VARIABLEFORCONVERGENCE_last=0

name="KPOINTS_$1"
backupkpts=`echo ${!name}`

for i in $(seq $2); do
mkdir $i
cd $i
name="KPOINTS_$1"
eval $name=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then                                                                           
name="$4"                                                                                                
VARIABLEFORCONVERGENCE=`echo ${!name}`                                                                   
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                       $VARIABLEFORCONVERGENCE     $diff"
echo " $i                       $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at " $i " kpoints."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at " $i " kpoints." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at " $i " kpoints."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at " $i " kpoints." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " KPOINTS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
name="KPOINTS_$i"
eval $name=$backupkpts
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lkpointsconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 kpoints convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of kpoints along x-, y-, z- direction"
set ylabel "$ylabel"
unset key
set term png
set output "lkpointsconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lkpointsconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lkpointsconvergence_gnup_${1}_${GGA} << EOF
set title "$1 kpoints convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of kpoints along x-, y-, z- direction"
set ylabel "$ylabel"
unset key
set term png
set output "lkpointsconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lkpointsconvergence_gnup_${1}_${GGA}
fi
fi

let secs=$SECONDS-$secslkpointsconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lnomegaconvergence () {

secslnomegaconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lnomegaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

backupnomega=$NOMEGA

mkdir lnomegaconvergence_${1}
cd lnomegaconvergence_${1}
VARIABLEFORCONVERGENCE_last=0
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " NOMEGA                  Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " NOMEGA                  Result                      Difference" >> $MAINDIR/output.txt
fi
for i in $(seq $2); do
mkdir $i
cd $i
NOMEGA=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $s  $VARIABLEFORCONVERGENCE     $diff"
echo " $s  $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at NOMEGA = " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at NOMEGA = " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at NOMEGA = " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at NOMEGA = " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NOMEGA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
NOMEGA=$backupnomega
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lnomegaconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 NOMEGA convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of imaginary frequency and time points"
set ylabel "$ylabel"
unset key
set term png
set output "lnomegaconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lnomegaconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lnomegaconvergence_gnup_${1}_${GGA} << EOF
set title "$1 NOMEGA convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of imaginary frequency and time points"
set ylabel "$ylabel"
unset key
set term png
set output "lnomegaconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lnomegaconvergence_gnup_${1}_${GGA}
fi
fi



let secs=$SECONDS-$secslnomegaconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lnumberoflayersconvergence () {

secslnumberoflayersconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " "
echo " Number of layers       Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Number of layers       Result                      Difference" >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " "
echo " Number of layers       Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lnumberoflayersconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Number of layers       Result                      Difference" >> $MAINDIR/output.txt
fi
fi
fi

mkdir lnumberoflayersconvergence_${1}
cd lnumberoflayersconvergence_${1}
VARIABLEFORCONVERGENCE_last=0

name="NUMBER_OF_LAYERS_$1"
backupnum=`echo ${!name}`

for i in $(seq $2); do
mkdir $i
cd $i
name="NUMBER_OF_LAYERS_$1"
eval $name=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                       $VARIABLEFORCONVERGENCE     $diff"
echo " $i                       $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at " $i " layers."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at " $i " layers." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at " $i " layers."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at " $i " layers." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " NUMBER_OF_LAYERS_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
name="NUMBER_OF_LAYERS_$i"
eval $name=$backupnum
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lnumberoflayersconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 number of layers convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of layers per surface slab"
set ylabel "$ylabel"
unset key
set term png
set output "lnumberoflayersconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lnumberoflayersconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lnumberoflayersconvergence_gnup_${1}_${GGA} << EOF
set title "$1 number of layers convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Number of layers per surface slab"
set ylabel "$ylabel"
unset key
set term png
set output "lnumberoflayersconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lnumberoflayersconvergence_gnup_${1}_${GGA}
fi
fi


let secs=$SECONDS-$secslnumberoflayersconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lsupercellconvergence () {

secslsupercellconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lsupercellconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

name="SUPERCELL_FACTOR_$1"
backupsup=`echo ${!name}`

mkdir lsupercellconvergence_${1}
cd lsupercellconvergence_${1}
VARIABLEFORCONVERGENCE_last=0
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " supercell factor        Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " supercell factor        Result                      Difference" >> $MAINDIR/output.txt
fi
for i in $(seq $2); do
mkdir $i
cd $i
name="SUPERCELL_FACTOR_$1"
eval $name=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                       $VARIABLEFORCONVERGENCE     $diff"
echo " $i                       $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at a supercell factor of " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at a supercell factor of " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at a supercell factor of " $i
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at a supercell factor of " $i >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SUPERCELL_FACTOR_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
name="SUPERCELL_FACTOR_$i"
eval $name=$backupsup
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lsupercellconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 supercell size convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Supercell factor"
set ylabel "$ylabel"
unset key
set term png
set output "lsupercellconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lsupercellconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lsupercellconvergence_gnup_${1}_${GGA} << EOF
set title "$1 supercell size convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Supercell factor"
set ylabel "$ylabel"
unset key
set term png
set output "lsupercellconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lsupercellconvergence_gnup_${1}_${GGA}
fi
fi


let secs=$SECONDS-$secslsupercellconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
lvacuumsizeconvergence () {

secslvacuumsizeconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " "
echo " Vacuum size            Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Vacuum size            Result                      Difference" >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: lvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " "
echo " Vacuum size            Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: lvacuumsizeconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Vacuum size            Result                      Difference" >> $MAINDIR/output.txt
fi
fi
fi

mkdir lvacuumsizeconvergence_${1}
cd lvacuumsizeconvergence_${1}
VARIABLEFORCONVERGENCE_last=0

name="VACUUM_SIZE_$1"
backupvac=`echo ${!name}`

for i in $(seq $2); do
mkdir $i
cd $i
name="VACUUM_SIZE_$1"
eval $name=$i
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $i                       $VARIABLEFORCONVERGENCE     $diff"
echo " $i                       $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at a vacuum size of " $i " Angstrom."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at a vacuum size of " $i " Angstrom." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at a vacuum size of " $i " Angstrom."
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at a vacuum size of " $i " Angstrom." >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VACUUM_SIZE_$1 has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
name="VACUUM_SIZE_$i"
eval $name=$backupvac
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > lvacuumsizeconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 vacuum size convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Vacuum size ({\305})"
set ylabel "$ylabel"
unset key
set term png
set output "lvacuumsizeconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lvacuumsizeconvergence_gnup_${1}_${METAGGA}
fi
else
cat > lvacuumsizeconvergence_gnup_${1}_${GGA} << EOF
set title "$1 vacuum size convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Vacuum size ({\305})"
set ylabel "$ylabel"
unset key
set term png
set output "lvacuumsizeconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT lvacuumsizeconvergence_gnup_${1}_${GGA}
fi
fi


let secs=$SECONDS-$secslvacuumsizeconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
sigmaconvergence () {

secssigmaconvergence=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: sigmaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: sigmaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: sigmaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: sigmaconvergence $1 \"$2\" $3 $4 $5 $6 $7 $8 $9  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

backupsigma=$SIGMA

mkdir sigmaconvergence_${1}
cd sigmaconvergence_${1}
VARIABLEFORCONVERGENCE_last=0
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " SIGMA                  Result                      Difference"
echo " " >> $MAINDIR/output.txt
echo " SIGMA                  Result                      Difference" >> $MAINDIR/output.txt
fi
array=($(echo "$2"))
value1=`echo ${array[0]} \* 10000 | bc -l`
value2=`echo ${array[1]} \* 10000 | bc -l`
value3=`echo ${array[2]} \* 10000 | bc -l`
for i in $(seq ${value1%.*} ${value2%.*} ${value3%.*}); do
s=`echo $i / 10000 | bc -l`
mkdir $s
cd $s
SIGMA=$s
PRINTOUTPUT=false
"$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}" "${82}" "${83}" "${84}" "${85}" "${86}"
PRINTOUTPUT=true
cd ..

if [ "$4" != "autovar" ]; then
name="$4"
VARIABLEFORCONVERGENCE=`echo ${!name}`
fi

echo " $i $VARIABLEFORCONVERGENCE " >> data.dat

diff=`echo $VARIABLEFORCONVERGENCE - $VARIABLEFORCONVERGENCE_last | bc -l`
echo " $s  $VARIABLEFORCONVERGENCE     $diff"
echo " $s  $VARIABLEFORCONVERGENCE     $diff" >> $MAINDIR/output.txt
if [ $(echo "$diff > 0.0" | bc) -eq 1 ]; then
if [ $(echo "$3 > $diff" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at SIGMA = " $s
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at SIGMA = " $s >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
if [ $(echo "0.0 > $diff" | bc) -eq 1 ]; then
if [ $(echo "$diff > -$3" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " convergence criterion of " $3 " was reached at SIGMA = " $s
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to the optimized value "
fi
  echo " " >> $MAINDIR/output.txt
  echo " convergence criterion of " $3 " was reached at SIGMA = " $s >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to the optimized value " >> $MAINDIR/output.txt
fi
fi
  break
fi
fi
hhh=($2)
hhhhhh=${hhh[2]}
if [ $(echo "$i == $hhhhhh" | bc) -eq 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to $hhhhhh "
fi
  echo " " >> $MAINDIR/output.txt
  echo " CONVERGENCE CRITERION OF " $3 " WAS NOT REACHED!!!" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " SIGMA has been updated to $hhhhhh " >> $MAINDIR/output.txt
fi
fi
fi
VARIABLEFORCONVERGENCE_last=$VARIABLEFORCONVERGENCE
done

if [ "$UPDATEVARIABLES" = false ]; then
SIGMA=$backupsigma
fi

plotxydata data.dat

if [ "$4" = "autovar" ]; then
if [ "$5" = "electronicmin" ]; then
ylabel="Total free energy per atom (eV)"
fi
if [ "$5" = "relaxation" ]; then
ylabel="Volume per atom ({\305}^3)"
fi
fi

if [ "$4" != "autovar" ]; then
ylabel="$4"
fi

if [ -n "$METAGGA" ]; then
cat > sigmaconvergence_gnup_${1}_${METAGGA} << EOF
set title "$1 SIGMA convergence test ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Smearing width (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "sigmaconvergence_${1}_${METAGGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT sigmaconvergence_gnup_${1}_${METAGGA}
fi
else
cat > sigmaconvergence_gnup_${1}_${GGA} << EOF
set title "$1 SIGMA convergence test ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Smearing width (eV)"
set ylabel "$ylabel"
unset key
set term png
set output "sigmaconvergence_${1}_${GGA}.png"
p 'data.dat' u 1:2 w lp
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT sigmaconvergence_gnup_${1}_${GGA}
fi
fi


let secs=$SECONDS-$secssigmaconvergence
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
densityofstates () {            # $2 is for addpointdefect ... / addadsorbant ...

secs=$SECONDS

mkdir densityofstates_${1}
cd densityofstates_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: densityofstates $1 $2  ;   $ALGO $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: densityofstates $1 $2  ;   $ALGO $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: densityofstates $1 $2  ;   $ALGO $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: densityofstates $1 $2  ;   $ALGO $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi


$1 ;

if [ -n "$2" ]; then
$2 "$3" "$4" "$5" "$6"
fi

if [ -n "$7" ]; then
$7 "$8" "$9" "${10}" "${11}"
fi

if [ -n "${12}" ]; then
${12} "${13}" "${14}" "${15}" "${16}"
fi

if [ -n "${17}" ]; then
${17} "${18}" "${19}" "${20}" "${21}"
fi

if [ -n "${22}" ]; then
${22} "${23}" "${24}" "${25}" "${26}"
fi

if [ -n "${27}" ]; then
${27} "${28}" "${29}" "${30}" "${31}"
fi

if [ -n "${32}" ]; then
${32} "${33}" "${34}" "${35}" "${36}"
fi

if [ -n "${37}" ]; then
${37} "${38}" "${39}" "${40}" "${41}"
fi

if [ -n "${42}" ]; then
${42} "${43}" "${44}" "${45}" "${46}"
fi

if [ -n "${47}" ]; then
${47} "${48}" "${49}" "${50}" "${51}"
fi

if [ -n "${52}" ]; then
${52} "${53}" "${54}" "${55}" "${56}"
fi

if [ -n "${57}" ]; then
${57} "${58}" "${59}" "${60}" "${61}"
fi

if [ -n "${62}" ]; then
${62} "${63}" "${64}" "${65}" "${66}"
fi

if [ -n "${67}" ]; then
${67} "${68}" "${69}" "${70}" "${71}"
fi

if [ -n "${72}" ]; then
${72} "${73}" "${74}" "${75}" "${76}"
fi

if [ -n "${77}" ]; then
${77} "${78}" "${79}" "${80}" "${81}"
fi


if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

buildkpoints $1
backupismear=$ISMEAR
ISMEAR=-5
buildincar
ISMEAR=$backupismear
echo "#density of states:" >> INCAR
echo "LORBIT = 11" >> INCAR
echo "NEDOS = $NEDOS" >> INCAR
echo "EMAX = $EMAX" >> INCAR
echo "EMIN = $EMIN" >> INCAR
echo " " >> INCAR
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST INCAR REPORT defaultshiftsandratios PROCAR XDATCAR KPOINTS CHGCAR poscardescription POSCAR CONTCAR WAVECAR minipotcar POTCAR EIGENVAL PCDAT CHG IBZKPT
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

awk 'BEGIN{i=1} /dos>/,\
                /\/dos>/ \
                 {a[i]=$2 ; b[i]=$3 ; i=i+1} \
     END{for (j=12;j<i-5;j++) print a[j],b[j]}' vasprun.xml > dos.dat

ef=`awk '/efermi/ {print $3}' vasprun.xml`


if [ -n "$METAGGA" ]; then
cat > densityofstates_gnup_${1}_${METAGGA} << EOF
set title "$1 density of states ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set xlabel "Energy - Fermi energy (eV)"
set ylabel "Density of States (states/eV)"
unset key
p "dos.dat" using (\$1-$ef):(\$2) w l
set term png
set output "densityofstates_${1}_${METAGGA}.png"
p "dos.dat" using (\$1-$ef):(\$2) w l
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT densityofstates_gnup_${1}_${METAGGA}
fi
else
cat > densityofstates_gnup_${1}_${GGA} << EOF
set title "$1 density of states ;  GGA = $GGA, POTCAR = $POTCAR"
set xlabel "Energy - Fermi energy (eV)"
set ylabel "Density of States (states/eV)"
unset key
p "dos.dat" using (\$1-$ef):(\$2) w l
set term png
set output "densityofstates_${1}_${GGA}.png"
p "dos.dat" using (\$1-$ef):(\$2) w l
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT densityofstates_gnup_${1}_${GGA}
fi
fi

echo " "
echo " " >> $MAINDIR/output.txt

lines=$NEDOS

calculatebandgapwidth=false

lineminone=( -1000000 0.0 )
for dkjnvgjnvg in $(seq 1 1 $lines) ; do
line=($(sed -n "$dkjnvgjnvg"'p' < dos.dat))

if [ $(echo "${lineminone[0]} < $ef" | bc) -eq 1 ]; then
x=x
if [ $(echo "${line[0]} > $ef" | bc) -eq 1 ]; then


if [ $(echo "${lineminone[1]} == 0.0000" | bc) -eq 1 ]; then
x=x
if [ $(echo "${line[1]} == 0.0000" | bc) -eq 1 ]; then
echo " Fermi energy = $ef eV - lies within a band gap (insulator/semiconductor) "
echo " Fermi energy = $ef eV - lies within a band gap (insulator/semiconductor) " >> $MAINDIR/output.txt
calculatebandgapwidth=true
fi
fi

if [ $(echo "${lineminone[1]} != 0.0000" | bc) -eq 1 ]; then
x=x
if [ $(echo "${line[1]} != 0.0000" | bc) -eq 1 ]; then
echo " Fermi energy = $ef eV - lies within a band (metal/semimetal) "
echo " Fermi energy = $ef eV - lies within a band (metal/semimetal) " >> $MAINDIR/output.txt
fi
fi

if [ $(echo "${lineminone[1]} == 0.0000" | bc) -eq 1 ]; then
x=x
if [ $(echo "${line[1]} != 0.0000" | bc) -eq 1 ]; then
echo " Fermi energy = $ef eV - lies at the upper band gap border (n-type insulator/semiconductor) "
echo " Fermi energy = $ef eV - lies at the upper band gap border (n-type insulator/semiconductor) " >> $MAINDIR/output.txt
calculatebandgapwidth=true
fi
fi

if [ $(echo "${lineminone[1]} != 0.0000" | bc) -eq 1 ]; then
x=x
if [ $(echo "${line[1]} == 0.0000" | bc) -eq 1 ]; then
echo " Fermi energy = $ef eV - lies at the lower band gap border (p-type insulator/semiconductor) "
echo " Fermi energy = $ef eV - lies at the lower band gap border (p-type insulator/semiconductor) " >> $MAINDIR/output.txt
calculatebandgapwidth=true
fi
fi


fi
fi

lineminone=( "${line[@]}" )
done


if [ "$calculatebandgapwidth" = true ]; then

lineminone=( -1000000 0.0 )
for dkjnvgjnvg in $(seq 1 1 $lines) ; do
line=($(sed -n "$dkjnvgjnvg"'p' < dos.dat))

if [ $(echo "${line[1]} == 0.0000" | bc) -eq 1 ]; then
if [ $(echo "${lineminone[1]} != 0.0000" | bc) -eq 1 ]; then
if [ $(echo "$ef > ${lineminone[0]}" | bc) -eq 1 ]; then
band_gap_lower="${lineminone[0]}"
fi
fi
fi

lineminone=( "${line[@]}" )
done

lineplusone=( 1000000 0.0 )
for dkjnvgjnvg in $(seq 1 1 $lines) ; do

let antiline=$lines-$dkjnvgjnvg

line=($(sed -n "$antiline"'p' < dos.dat))

if [ $(echo "${line[1]} == 0.0000" | bc) -eq 1 ]; then
if [ $(echo "${lineplusone[1]} != 0.0000" | bc) -eq 1 ]; then
if [ $(echo "$ef < ${lineplusone[0]}" | bc) -eq 1 ]; then
band_gap_upper="${lineplusone[0]}"
fi
fi
fi

lineplusone=( "${line[@]}" )
done

band_gap_width=`echo $band_gap_upper - $band_gap_lower | bc -l`

lineminone=( -1000000 0.0 )
for dkjnvgjnvg in $(seq 1 1 $lines) ; do
line=($(sed -n "$dkjnvgjnvg"'p' < dos.dat))

if [ $(echo "${line[1]} != 0.0000" | bc) -eq 1 ]; then
if [ $(echo "${lineminone[1]} == 0.0000" | bc) -eq 1 ]; then
if [ $(echo "$band_gap_lower > ${line[0]}" | bc) -eq 1 ]; then
valence_band_lower="${line[0]}"
fi
fi
fi

lineminone=( "${line[@]}" )
done

lineplusone=( 1000000 0.0 )
for dkjnvgjnvg in $(seq 1 1 $lines) ; do

let antiline=$lines-$dkjnvgjnvg

line=($(sed -n "$antiline"'p' < dos.dat))

if [ $(echo "${line[1]} != 0.0000" | bc) -eq 1 ]; then
if [ $(echo "${lineplusone[1]} == 0.0000" | bc) -eq 1 ]; then
if [ $(echo "$band_gap_upper < ${line[0]}" | bc) -eq 1 ]; then
conduction_band_upper="${line[0]}"
fi
fi
fi

lineplusone=( "${line[@]}" )
done

valence_band_width=`echo $band_gap_lower - $valence_band_lower | bc -l`
conduction_band_width=`echo $conduction_band_upper - $band_gap_upper | bc -l`

echo " conduction band: [$band_gap_upper, $conduction_band_upper] eV (width: $conduction_band_width eV)"
echo " band gap:        [$band_gap_lower, $band_gap_upper] eV (width: $band_gap_width eV)"
echo " valence band:    [$valence_band_lower, $band_gap_lower] eV (width: $valence_band_width eV)"

echo " conduction band: [$band_gap_upper, $conduction_band_upper] eV (width: $conduction_band_width eV)" >> $MAINDIR/output.txt
echo " band gap:        [$band_gap_lower, $band_gap_upper] eV (width: $band_gap_width eV)" >> $MAINDIR/output.txt
echo " valence band:    [$valence_band_lower, $band_gap_lower] eV (width: $valence_band_width eV)" >> $MAINDIR/output.txt

#echo " lower border of band gap: $band_gap_lower eV "
#echo " upper border of band gap: $band_gap_upper eV "
#echo " width of band gap: $width eV "

#echo " lower border of band gap: $band_gap_lower eV " >> $MAINDIR/output.txt
#echo " upper border of band gap: $band_gap_upper eV " >> $MAINDIR/output.txt
#echo " width of band gap: $width eV " >> $MAINDIR/output.txt

fi

plotxydata+ dos.dat

#echo "                                              ^                                             " 
#echo "                                 fermi energy = $ef eV"  
#echo "                                              ^                                             " >> $MAINDIR/output.txt
#echo "                                 fermi energy = $ef eV" >> $MAINDIR/output.txt


let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}




 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
electronicmin () {            # $2 is for addpointdefect ... / addadsorbant ...

secs=$SECONDS

mkdir electronicmin_${1}
cd electronicmin_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: electronicmin $1 $2  ;   $ALGO $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: electronicmin $1 $2  ;   $ALGO $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: electronicmin $1 $2  ;   $ALGO $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: electronicmin $1 $2  ;   $ALGO $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi


$1 ;

if [ -n "$2" ]; then
$2 "$3" "$4" "$5" "$6"
fi

if [ -n "$7" ]; then
$7 "$8" "$9" "${10}" "${11}"
fi

if [ -n "${12}" ]; then
${12} "${13}" "${14}" "${15}" "${16}"
fi

if [ -n "${17}" ]; then
${17} "${18}" "${19}" "${20}" "${21}"
fi

if [ -n "${22}" ]; then
${22} "${23}" "${24}" "${25}" "${26}"
fi

if [ -n "${27}" ]; then
${27} "${28}" "${29}" "${30}" "${31}"
fi

if [ -n "${32}" ]; then
${32} "${33}" "${34}" "${35}" "${36}"
fi

if [ -n "${37}" ]; then
${37} "${38}" "${39}" "${40}" "${41}"
fi

if [ -n "${42}" ]; then
${42} "${43}" "${44}" "${45}" "${46}"
fi

if [ -n "${47}" ]; then
${47} "${48}" "${49}" "${50}" "${51}"
fi

if [ -n "${52}" ]; then
${52} "${53}" "${54}" "${55}" "${56}"
fi

if [ -n "${57}" ]; then
${57} "${58}" "${59}" "${60}" "${61}"
fi

if [ -n "${62}" ]; then
${62} "${63}" "${64}" "${65}" "${66}"
fi

if [ -n "${67}" ]; then
${67} "${68}" "${69}" "${70}" "${71}"
fi

if [ -n "${72}" ]; then
${72} "${73}" "${74}" "${75}" "${76}"
fi

if [ -n "${77}" ]; then
${77} "${78}" "${79}" "${80}" "${81}"
fi


if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

buildkpoints $1
buildincar
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST INCAR REPORT defaultshiftsandratios XDATCAR KPOINTS CHGCAR poscardescription POSCAR CONTCAR DOSCAR vasprun.xml WAVECAR minipotcar POTCAR EIGENVAL PCDAT CHG IBZKPT
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

array1=($(grep 'number of ions' OUTCAR))
value1=${array1[11]}

if [ "$ALGO" = RPAR ]; then

array2=($(grep 'HF-free energy' OUTCAR))
array3=($(grep 'HF+RPA corr. energy' OUTCAR))
array4=($(grep 'HF+E_corr' OUTCAR))
array5=($(grep 'exchange ACFDT corr.' OUTCAR))

value2=${array2[4]}
value3=${array2[5]}
value4=${array2[2]}
value5=${array2[4]}

value2=`echo $value2 / $value1 | bc -l`
value3=`echo $value3 / $value1 | bc -l`
value4=`echo $value4 / $value1 | bc -l`
value5=`echo $value5 / $value1 | bc -l`

VARIABLEFORCONVERGENCE=$value3

cd ..

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " resulting HF-free energy per atom:          $value2 eV"
  echo " resulting HF+RPA corr. energy per atom:     $value3 eV"
  echo " resulting HF+E_corr(extrapolated) per atom: $value4 eV"
  echo " resulting exchange ACFDT corr. per atom:    $value5 eV"
  echo " " >> $MAINDIR/output.txt
  echo " resulting HF-free energy per atom:          $value2 eV" >> $MAINDIR/output.txt
  echo " resulting HF+RPA corr. energy per atom:     $value3 eV" >> $MAINDIR/output.txt
  echo " resulting HF+E_corr(extrapolated) per atom: $value4 eV" >> $MAINDIR/output.txt
  echo " resulting exchange ACFDT corr. per atom:    $value5 eV" >> $MAINDIR/output.txt
fi


else


array2=($(grep 'free  en' OUTCAR))
array3=($(grep 'energy without entropy' OUTCAR))

value2=${array2[4]}
value3=${array3[4]}
value4=${array3[7]}

value2=`echo $value2 / $value1 | bc -l`
value3=`echo $value3 / $value1 | bc -l`
value4=`echo $value4 / $value1 | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then

name="FREE_ENERGY_$1"
eval $name=$value2
name="ENERGY_WITHOUT_ENTROPY_$1"
eval $name=$value3
name="ENERGY_SIGMA_ZERO_$1"
eval $name=$value4

if [ "$MAINENE" = 1 ]; then
name="ENERGY_$1"
eval $name=$value2
fi
if [ "$MAINENE" = 2 ]; then
name="ENERGY_$1"
eval $name=$value3
fi
if [ "$MAINENE" = 3 ]; then
name="ENERGY_$1"
eval $name=$value4
fi

fi

if [ "$MAINENE" = 1 ]; then
mainene=$value2
fi
if [ "$MAINENE" = 2 ]; then
mainene=$value3
fi
if [ "$MAINENE" = 3 ]; then
mainene=$value4
fi

VARIABLEFORCONVERGENCE=$mainene

cd ..

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " resulting free energy per atom:            $value2 eV "
  echo " resulting energy without entropy per atom: $value3 eV "
  echo " resulting energy(sigma->0) per atom:       $value4 eV "
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 has been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " resulting free energy per atom:            $value2 eV " >> $MAINDIR/output.txt
  echo " resulting energy without entropy per atom: $value3 eV " >> $MAINDIR/output.txt
  echo " resulting energy(sigma->0) per atom:       $value4 eV " >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 has been updated accordingly " >> $MAINDIR/output.txt
fi
fi


fi


let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi


if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
adsorptionenergy () {

secsadsorptionenergy=$SECONDS

mkdir adsorptionenergy_${1}
cd adsorptionenergy_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: adsorptionenergy $1 $2  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: adsorptionenergy $1 $2  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: adsorptionenergy $1 $2  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: adsorptionenergy $1 $2  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

printoutputbackup=$PRINTOUTPUT

mkdir clean_surface
cd clean_surface

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false
relaxation $1
PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

cd relaxation_${1}

if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
energy_clean_surface=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
energy_clean_surface=${array2[4]}
fi
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
energy_clean_surface=${array2[7]}
fi

cd ..

cd ..


mkdir surface_with_adsorbate
cd surface_with_adsorbate

mkdir part1
cd part1

name="SELECTIVE_DYNAMICS_DEPTH_$1"
backupseldyn=`echo ${!name}`

name="SELECTIVE_DYNAMICS_DEPTH_$1"
eval $name=0

backupediffg=$EDIFFG
EDIFFG=0
backupnsw=$NSW
NSW=16
backupnelm=$NELM
NELM=60

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false

relaxation $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}" ${72} "${73}" "${74}" "${75}" "${76}" ${77} "${78}" "${79}" "${80}" "${81}"

PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

name="SELECTIVE_DYNAMICS_DEPTH_$1"
eval $name=$backupseldyn

EDIFFG=$backupediffg
NSW=$backupnsw
NELM=$backupnelm

cd ..

mkdir part2
cd part2

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false

buildincar
echo "#ionic relaxation:" >> INCAR
echo "IBRION = $IBRION" >> INCAR
echo "EDIFFG = $EDIFFG" >> INCAR
echo "NSW = $NSW" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo " " >> INCAR

cp ../part1/relaxation_${1}/KPOINTS .
cp ../part1/relaxation_${1}/POTCAR .
cp ../part1/relaxation_${1}/minipotcar .
cp ../part1/relaxation_${1}/defaultshiftsandratios .
cp ../part1/relaxation_${1}/poscardescription .
cp ../part1/relaxation_${1}/CONTCAR .

linewuthint=$(sed -n "7p" CONTCAR)
sumatoms=0
summolatoms=0
for word in $linewuthint; do
let sumatoms=$sumatoms+$word
if [ "$word" -eq "1" ]; then
let summolatoms=$summolatoms+$word
fi
done

let fvwfwvw=$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR\*$backupseldyn
let shdfbv=$fvwfwvw+1+$sumatoms+$summolatoms

tail -n $shdfbv CONTCAR | tr 'F' 'T' > temp_file2
head -n -$shdfbv CONTCAR > temp_file1
rm CONTCAR
cat temp_file1 >> POSCAR
cat temp_file2 >> POSCAR
rm temp_file1
rm temp_file2

if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi

sInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
energy_surface_with_adsorbate=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
energy_surface_with_adsorbate=${array2[4]}
fi
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
energy_surface_with_adsorbate=${array2[7]}
fi

cd ..

cd ..


adsorption_energy=`echo - $energy_surface_with_adsorbate + $energy_clean_surface | bc -l`

nummol=0
for i in $(seq 0 1 16) ; do

let j=$i\*5+3

name="${j}"
molecccc=`echo ${!name}`

if [ -n "$molecccc" ]; then

let nummol=$nummol+1

name="ENERGY_$molecccc"
energy_molecule=`echo ${!name}`

mkdir tpdir
cd tpdir
$molecccc
cd ..
rm -r tpdir

adsorption_energy=`echo $adsorption_energy + $energy_molecule \* $ATOMS_PER_SUBCELL | bc -l`

fi

done


adsorption_energy=`echo $adsorption_energy / $nummol | bc -l`


PRINTOUTPUT=$printoutputbackup

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " resulting adsorption energy: $adsorption_energy eV "
  echo " " >> $MAINDIR/output.txt
  echo " resulting adsorption energy: $adsorption_energy eV " >> $MAINDIR/output.txt
fi


let secs=$SECONDS-$secsadsorptionenergy
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$adsorption_energy


cd ..


}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
surfaceenergy () {

secssurfaceenergy=$SECONDS

mkdir surfaceenergy_${1}
cd surfaceenergy_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: surfaceenergy $1  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: surfaceenergy $1  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: surfaceenergy $1  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: surfaceenergy $1  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

printoutputbackup=$PRINTOUTPUT


if [ "$RECALCSURFACE" = "true" ]; then

mkdir surface
cd surface

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false
relaxation $1
PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

cd relaxation_${1}

array1=($(grep 'number of ions' OUTCAR))
N=${array1[11]}

if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[7]}
fi

energy_slab=`echo $value2 / $N | bc -l`

cd ..

cd ..


else

mkdir temppppp
cd temppppp
$1
cd ..
rm -r temppppp

name="ENERGY_$1"
energy_slab=`echo ${!name}`

fi



if [ "$RECALCBULK" = "true" ]; then


mkdir bulk
cd bulk

name="VACUUM_SIZE_$1"
backupvacuum=`echo ${!name}`

name="NUMBER_OF_LAYERS_$1"
backuplayers=`echo ${!name}`

let dif=$backuplayers%$ATOMS_PER_SUBCELL
let newnumberoflayers=$backuplayers-$dif

name="VACUUM_SIZE_$1"
eval $name=0

name="NUMBER_OF_LAYERS_$1"
eval $name=$newnumberoflayers

name="LAYER_HIGHTS_$1"
backuplayerhights=`echo ${!name}`

name="LAYER_HIGHTS_$1"
eval $name="defaulthights"

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false
electronicmin $1
PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

name="LAYER_HIGHTS_$1"
eval $name="$backuplayerhights"

cd electronicmin_${1}

array1=($(grep 'number of ions' OUTCAR))
N=${array1[11]}

if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[4]}
fi 
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[7]}
fi

energy_bulk=`echo $value2 / $N | bc -l`

cd ..

name="VACUUM_SIZE_$1"
eval $name=$backupvacuum

name="NUMBER_OF_LAYERS_$1"
eval $name=$backuplayers

cd ..


else

name="NUMBER_OF_LAYERS_$1"
backuplayers=`echo ${!name}`

akjfvlakjb=`echo "$1" | sed 's/....$//'`
name="ENERGY_$akjfvlakjb"
energy_bulk=`echo ${!name}`

fi



surface_energy_per_surface_atom=`echo $energy_slab \* $backuplayers \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR - $energy_bulk \* $backuplayers \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
denom=`echo 2 \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
surface_energy_per_surface_atom=`echo $surface_energy_per_surface_atom / $denom | bc -l`


if [ "$RECALCSURFACE" = "true" ]; then


cd surface
cd relaxation_${1}

lattice_vectors=()
count=0
while read line; do
if [ $count -ge 2 ] && [ $count -le 4 ]; then
lattice_vectors+=("$line")
fi
count=$((count + 1))
done < CONTCAR

cd ..
cd ..


else

mkdir temmmp
cd temmmp

$1

lattice_vectors=()
count=0
while read line; do
if [ $count -ge 2 ] && [ $count -le 4 ]; then
lattice_vectors+=("$line")
fi
count=$((count + 1))
done < POSCAR

cd ..
rm -r temmmp

fi


lattice_vectors=( $(echo ${lattice_vectors[@]}) )

normal_vector_x=$(echo "${lattice_vectors[1]} * ${lattice_vectors[5]} - ${lattice_vectors[2]} * ${lattice_vectors[4]}" | bc -l)
normal_vector_y=$(echo "${lattice_vectors[2]} * ${lattice_vectors[3]} - ${lattice_vectors[0]} * ${lattice_vectors[5]}" | bc -l)
normal_vector_z=$(echo "${lattice_vectors[0]} * ${lattice_vectors[4]} - ${lattice_vectors[1]} * ${lattice_vectors[3]}" | bc -l)

area=$(echo "sqrt(${normal_vector_x}^2 + ${normal_vector_y}^2 + ${normal_vector_z}^2)" | bc -l)

surface_energy_per_surface_area=`echo $energy_slab \* $backuplayers \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR - $energy_bulk \* $backuplayers \* $NUMBER_OF_ATOMS_PER_LAYER_PER_CELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`
denom=`echo 2 \* $area | bc -l`
surface_energy_per_surface_area=`echo $surface_energy_per_surface_area / $denom | bc -l`



PRINTOUTPUT=$printoutputbackup

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " resulting surface energy per surface atom: $surface_energy_per_surface_atom eV "
  echo " resulting surface energy per surface area: $surface_energy_per_surface_area eV / Angstrom^2 "
if [ "$RECALCSURFACE" = "true" ]; then
  echo " energy of relaxed surface slab: $energy_slab eV "
fi
if [ "$RECALCBULK" = "true" ]; then
  echo " energy of surface slab without vacuum (# of layers addapted): $energy_bulk eV "
fi
  echo " " >> $MAINDIR/output.txt
  echo " resulting surface energy per surface atom: $surface_energy_per_surface_atom eV " >> $MAINDIR/output.txt
  echo " resulting surface energy per surface area: $surface_energy_per_surface_area eV / Angstrom^2 " >> $MAINDIR/output.txt
if [ "$RECALCSURFACE" = "true" ]; then
  echo " energy of relaxed surface slab: $energy_slab eV " >> $MAINDIR/output.txt
fi
if [ "$RECALCBULK" = "true" ]; then
  echo " energy of surface slab without vacuum (# of layers addapted): $energy_bulk eV " >> $MAINDIR/output.txt
fi
fi


let secs=$SECONDS-$secssurfaceenergy
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$surface_energy_per_surface_atom

cd ..

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
vacancyformationenergy () {

secsvacancyformationenergy=$SECONDS

mkdir vacancyformationenergy_${1}
cd vacancyformationenergy_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: vacancyformationenergy $1 $2  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: vacancyformationenergy $1 $2  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: vacancyformationenergy $1 $2  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: vacancyformationenergy $1 $2  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi


mkdir vacancy
cd vacancy

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false
relaxation $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}" ${72} "${73}" "${74}" "${75}" "${76}" ${77} "${78}" "${79}" "${80}" "${81}" 
PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

cd relaxation_${1}

array1=($(grep 'number of ions' OUTCAR))
N=${array1[11]}

if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[4]}
fi 
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[7]}
fi

energy_defect=`echo $value2 / $N | bc -l`

cd temp

arraylatticeconst=($(grep 'ALAT' OUTCAR))
latticeconstt=${arraylatticeconst[2]}
latticeconst=`echo $latticeconstt / $SUPERCELL_FACTOR | bc -l`

if [ "$LATTICE_SYSTEM" = cubic ]; then
volume_defect=`echo $latticeconst \* $latticeconst \* $latticeconst / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_defect_gfcytc=$volume_defect
volume_defect=`echo $volume_defect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $N | bc -l`
fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
volume_defect=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio \* 0.86602540378443864676372317075294 / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_defect_gfcytc=$volume_defect
volume_defect=`echo $volume_defect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $N | bc -l`
fi

if [ "$LATTICE_SYSTEM" = tetragonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
volume_defect=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_defect_gfcytc=$volume_defect
volume_defect=`echo $volume_defect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $N | bc -l`
fi

cd ..

cd ..

cd ..



if [ "$RECALCBULK" = "true" ]; then

mkdir bulk
cd bulk

updatevariablesbackup=$UPDATEVARIABLES
printoutputbackup=$PRINTOUTPUT
UPDATEVARIABLES=false
PRINTOUTPUT=false
relaxation $1
PRINTOUTPUT=$printoutputbackup
UPDATEVARIABLES=$updatevariablesbackup

cd relaxation_${1}


if [ "$MAINENE" = 1 ]; then
array2=($(grep 'free  en' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 2 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[4]}
fi
if [ "$MAINENE" = 3 ]; then
array2=($(grep 'energy without entropy' OUTCAR | tail -1))
value2=${array2[7]}
fi

array1=($(grep 'number of ions' OUTCAR))
M=${array1[11]}

energy_perfect=`echo $value2 / $M | bc -l`

cd temp

arraylatticeconst=($(grep 'ALAT' OUTCAR))
latticeconstt=${arraylatticeconst[2]}
latticeconst=`echo $latticeconstt / $SUPERCELL_FACTOR | bc -l`

if [ "$LATTICE_SYSTEM" = cubic ]; then
volume_perfect=`echo $latticeconst \* $latticeconst \* $latticeconst / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_perfect_gfcytc=$volume_perfect
volume_perfect=`echo $volume_perfect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $M | bc -l`
fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
volume_perfect=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio \* 0.86602540378443864676372317075294 / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_perfect_gfcytc=$volume_perfect
volume_perfect=`echo $volume_perfect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $M | bc -l`
fi

if [ "$LATTICE_SYSTEM" = tetragonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
volume_perfect=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
volume_perfect_gfcytc=$volume_perfect
volume_perfect=`echo $volume_perfect \* $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR / $M | bc -l`
fi

cd ..

cd ..

cd ..

else

name="ENERGY_$1"
energy_perfect=`echo ${!name}`
name="VOLUME_$1"
volume_perfect=`echo ${!name}`

fi


#if [ "$1" = contcar ]; then
#array=($(awk '{ if (NR==1) print $0 }' POSCAR))
#bfrv=${array[0]}
#name="FREE_ENERGY_$bfrv"
#energy_perfect=`echo ${!name}`
#name="VOLUME_$bfrv"
#volume_perfect=`echo ${!name}`
#fi


energy_formation=`echo $energy_defect \* $N - $energy_perfect \* $N | bc -l`
volume_formation=`echo $volume_defect \* $N - $volume_perfect \* $N | bc -l`
ratio_energy=`echo $energy_formation / $energy_perfect | bc -l`
ratio_volume=`echo $volume_formation / $volume_perfect | bc -l`


if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " Energy per atom of structure with defect: $energy_defect eV"
if [ "$RECALCBULK" = "true" ]; then
  echo " Energy per atom of structure without defect: $energy_perfect eV"
fi
  echo " resulting vacancy formation energy: $energy_formation eV "
  echo " resulting vacancy formation volume: $volume_formation Angstrom^3 "
  echo " vacancy formation energy / bulk energy per atom: $ratio_energy "
  echo " vacancy formation volume / bulk volume per atom: $ratio_volume "
  echo " VOLUME_$1 for structure with defect: $volume_defect_gfcytc "
  echo " " >> $MAINDIR/output.txt
  echo " Energy per atom of structure with defect: $energy_defect eV" >> $MAINDIR/output.txt
if [ "$RECALCBULK" = "true" ]; then
  echo " Energy per atom of structure without defect: $energy_perfect eV" >> $MAINDIR/output.txt
fi
  echo " resulting vacancy formation energy: $energy_formation eV " >> $MAINDIR/output.txt
  echo " resulting vacancy formation volume: $volume_formation Angstrom^3 " >> $MAINDIR/output.txt
  echo " vacancy formation energy / bulk energy per atom: $ratio_energy " >> $MAINDIR/output.txt
  echo " vacancy formation volume / bulk volume per atom: $ratio_volume " >> $MAINDIR/output.txt
  echo " VOLUME_$1 for structure with defect: $volume_defect_gfcytc " >> $MAINDIR/output.txt
fi


let secs=$SECONDS-$secsvacancyformationenergy
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$energy_formation


cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
applymlff () {                       # $2 is for addvacancy ... / addadsorbant ...

secs=$SECONDS


mkdir applymlff_${1}_${2}_${3}
cd applymlff_${1}_${2}_${3}

if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: applymlff $1 $2 $3 $4 $5 $6  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: applymlff $1 $2 $3 $4 $5 $6  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: applymlff $1 $2 $3 $4 $5 $6  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: applymlff $1 $2 $3 $4 $5 $6  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi


backupbvotherincartags=$OTHERINCARTAGS
OTHERINCARTAGS="$backupbvotherincartags    ; ML_LMLFF = .TRUE. ; ML_ISTART = 2 ;"


vjsnjsfnv=$(pwd)
mkdir $MAINDIR/tempfjnjn
cd $MAINDIR/tempfjnjn
cp $MAINDIR/mlffs/$1/ML_FFN ML_FF
backupbvotherinputfiles=$OTHERINPUTFILES
OTHERINPUTFILES="$backupbvotherinputfiles    $MAINDIR/tempfjnjn/ML_FF"
cd $vjsnjsfnv


backupbvencut=$ENCUT
ENCUT=20


MLFFBEIGAPPLIED=true
$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}" "${72}" "${73}" "${74}" "${75}" "${76}" "${77}" "${78}" "${79}" "${80}" "${81}"
MLFFBEIGAPPLIED=false


OTHERINCARTAGS="$backupbvotherincartags"
OTHERINPUTFILES="backupbvotherinputfiles"
ENCUT=$backupbvencut

rm -r $MAINDIR/tempfjnjn

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
elasticmoduli () {

secs=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: elasticmoduli $1  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: elasticmoduli $1  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: elasticmoduli $1  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: elasticmoduli $1  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

mkdir elasticmoduli_${1}
cd elasticmoduli_${1}

if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

$1
buildkpoints $1
buildincar
echo "#elastic mouduli calculation:" >> INCAR
#echo "LPHON_DISPERSION = .TRUE." >> INCAR
echo "IBRION = 6" >> INCAR
echo "NSW = 1" >> INCAR
echo "POTIM = 0.015" >> INCAR
echo "ISIF = 3" >> INCAR
echo " " >> INCAR
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST DYNMAT INCAR REPORT defaultshiftsandratios XDATCAR KPOINTS CHGCAR poscardescription POSCAR CONTCAR DOSCAR vasprun.xml WAVECAR minipotcar POTCAR EIGENVAL PCDAT CHG IBZKPT
fi


isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " total elastic tensor (kBar):"
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; p }' OUTCAR
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; n; p }' OUTCAR
  echo " " >> $MAINDIR/output.txt
  echo " total elastic tensor (kBar):" >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
  sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; n; p }' OUTCAR >> $MAINDIR/output.txt
fi

array1=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; p }' OUTCAR))
array2=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; p }' OUTCAR))
array3=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; p }' OUTCAR))
array4=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; p }' OUTCAR))
array5=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; p }' OUTCAR))
array6=($(sed -n '/TOTAL ELASTIC MODULI (kBar)/{ n; n; n; n; n; n; n; n; p }' OUTCAR))
const11=${array1[1]}
const12=${array2[1]}
const13=${array3[1]}
const21=${array1[2]}
const22=${array2[2]}
const23=${array3[2]}
const31=${array1[3]}
const32=${array2[3]}
const33=${array3[3]}
const44=${array4[4]}
const55=${array5[5]}
const66=${array6[6]}

#if [ "$LATTICE_SYSTEM" = cubic ]; then
#bulkmodulus=`echo $const11 \* 0.3333333333333333 \* 0.1 + 2 \* $const12 \* 0.3333333333333333 \* 0.1   | bc -l`
#shearmodulus=`echo $const44 \* 0.1   | bc -l`
#youngsmodulus1=`echo $const11 \* 0.1 - $const12 \* 0.1    | bc -l`
#youngsmodulus2=`echo $const11 \* 0.1 + 2 \* $const12 \* 0.1    | bc -l`
#youngsmodulus3=`echo $const11 \* 0.1 + $const12 \* 0.1    | bc -l`
#youngsmodulus=`echo $youngsmodulus1 \* $youngsmodulus2 / $youngsmodulus3    | bc -l`
#poissonratio1=`echo $const11 + $const12   | bc -l`
#poissonratio_100=`echo $const12 / $poissonratio1   | bc -l`
#bgratio=`echo $bulkmodulus / $shearmodulus   | bc -l`
#poissonratio1=`echo 3 \* $bulkmodulus - 2 \* $shearmodulus   | bc -l`
#poissonratio2=`echo 6 \* $bulkmodulus + 2 \* $shearmodulus   | bc -l`
#poissonratio=`echo $poissonratio1 / $poissonratio2   | bc -l`
#youngsmodulus=`echo 2 \* $shearmodulus \* 1 + 2 \* $shearmodulus \* poissonratio   | bc -l`
#fi
#if [ "$LATTICE_SYSTEM" = hexagonal ]; then
#bulkmodulus=`echo 2 \* $const11 \* 0.1111111111111111 \* 0.1 + 2 \* $const12 \* 0.1111111111111111 \* 0.1 + 4 \* $const13 \* 0.1111111111111111 \* 0.1 + $const33 \* 0.1111111111111111 \* 0.1   | bc -l`
#shearmodulus=`echo 3.5 \* $const11 \* 0.0666666666666667 - 2.5 \* $const12 \* 0.0666666666666667 - 2 \* $const13 \* 0.0666666666666667 + $const33 \* 0.0666666666666667 + 6 \* $const44 \* 0.0666666666666667   | bc -l`
#youngsmodulus1=`echo 3 \* 4.5 \* $const11 + 3 \* 2.5 \* $const12 + 3 \* 6 \* $const13 + 3 \* 2 \* $const23 + 3 \* 2 \* $const44   | bc -l`
#youngsmodulus=`echo  $shearmodulus \* 15 \* $bulkmodulus \* 9 / $youngsmodulus1  | bc -l`
#poissonratio_100=
#bgratio=`echo $bulkmodulus / $shearmodulus   | bc -l`
#fi

bulkmodulus=`echo $const11 \* 0.1111111111111111 \* 0.1 + $const22 \* 0.1111111111111111 \* 0.1 + $const33 \* 0.1111111111111111 \* 0.1 + 2 \* $const12 \* 0.1111111111111111 \* 0.1 + 2 \* $const23 \* 0.1111111111111111 \* 0.1 + 2 \* $const31 \* 0.1111111111111111 \* 0.1   | bc -l`

shearmodulus=`echo $const11 \* 0.0666666666666667 \* 0.1 + $const22 \* 0.0666666666666667 \* 0.1 + $const33 \* 0.0666666666666667 \* 0.1 - $const12 \* 0.0666666666666667 \* 0.1 - $const23 \* 0.0666666666666667 \* 0.1 - $const31 \* 0.0666666666666667 \* 0.1 + 3 \* $const44 \* 0.0666666666666667 \* 0.1 + 3 \* $const55 \* 0.0666666666666667 \* 0.1 + 3 \* $const66 \* 0.0666666666666667 \* 0.1  | bc -l`

poissonratio1=`echo 3 \* $bulkmodulus - 2 \* $shearmodulus   | bc -l`
poissonratio2=`echo 6 \* $bulkmodulus + 2 \* $shearmodulus   | bc -l`
poissonratio=`echo $poissonratio1 / $poissonratio2   | bc -l`

youngsmodulus=`echo  3 \* $bulkmodulus - 6 \* $bulkmodulus \* $poissonratio  | bc -l`

bgratio=`echo $bulkmodulus / $shearmodulus   | bc -l`

#bulkmodulus=`echo 2 \* $const11 \* 0.1111111111111111 \* 0.1 + 2 \* $const12 \* 0.1111111111111111 \* 0.1 + 4 \* $const13 \* 0.1111111111111111 \* 0.1 + $const33 \* 0.1111111111111111 \* 0.1   | bc -l`
#shearmodulus=`echo 3.5 \* $const11 \* 0.0666666666666667 \* 0.1 - 2.5 \* $const12 \* 0.0666666666666667 \* 0.1 - 2 \* $const13 \* 0.0666666666666667 \* 0.1 + $const33 \* 0.0666666666666667 \* 0.1 + 6 \* $const44 \* 0.0666666666666667 \* 0.1   | bc -l`
#youngsmodulus1=`echo 3 \* 4.5 \* $const11 \* 0.1 + 3 \* 2.5 \* $const12 \* 0.1 + 3 \* 6 \* $const13 \* 0.1 + 3 \* 2 \* $const23 \* 0.1 + 3 \* 2 \* $const44 \* 0.1   | bc -l`
#youngsmodulus=`echo  $shearmodulus \* 15 \* $bulkmodulus \* 9 / $youngsmodulus1  | bc -l`

#poissonratio=`echo -1.0 + 0.5 \* $youngsmodulus / $shearmodulus  | bc -l`
#bgratio=`echo $bulkmodulus / $shearmodulus   | bc -l`

bulkmodinevangst=`echo $bulkmodulus \* 0.006242 | bc -l`
shearmodinevangst=`echo $shearmodulus \* 0.006242 | bc -l`
youngsmodinevangst=`echo $youngsmodulus \* 0.006242 | bc -l`

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " => bulk modulus   =" $bulkmodulus "GPa =" $bulkmodinevangst "eV/Angstrom^3 "
echo "    shear modulus  =" $shearmodulus "GPa =" $shearmodinevangst "eV/Angstrom^3 "
echo "    youngs modulus =" $youngsmodulus "GPa =" $youngsmodinevangst "eV/Angstrom^3 "
echo "    poisson ratio  =" $poissonratio
echo "    bulk modulus / shear modulus =" $bgratio
echo " " >> $MAINDIR/output.txt
echo " => bulk modulus   =" $bulkmodulus "GPa =" $bulkmodinevangst "eV/Angstrom^3 " >> $MAINDIR/output.txt
echo "    shear modulus  =" $shearmodulus "GPa =" $shearmodinevangst "eV/Angstrom^3 " >> $MAINDIR/output.txt
echo "    youngs modulus =" $youngsmodulus "GPa =" $youngsmodinevangst "eV/Angstrom^3 " >> $MAINDIR/output.txt
echo "    poisson ratio  =" $poissonratio >> $MAINDIR/output.txt
echo "    bulk modulus / shear modulus =" $bgratio >> $MAINDIR/output.txt
fi


let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$bulkmodulus

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
energyvolumecurves () {

secsenergyvolumecurves=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: energyvolumecurves \"$1\" $2 $3  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: energyvolumecurves \"$1\" $2 $3  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: energyvolumecurves \"$1\" $2 $3  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: energyvolumecurves \"$1\" $2 $3  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

structure=()
energy=()
x=-1
for i in $1; do
let x=x+1
name="ENERGY_$i"
ener=`echo ${!name}`
structure[$x]=$i
energy[$x]=$ener
done
for ((i = 0; i<5; i++)) ; do
for ((j = 0; j<5-i-1; j++)) ; do
if [ "$(echo "${energy[$j]} > ${energy[$((j+1))]}" | bc)" -eq 1 ]; then
temp=${energy[j]}
energy[$j]=${energy[$((j+1))]}
energy[$((j+1))]=$temp
tempstr=${structure[j]}
structure[$j]=${structure[$((j+1))]}
structure[$((j+1))]=$tempstr
fi
done
done

if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " phase stability table (in order):"
echo "   phase            energy per atom (eV)      energy difference to the most stable phase (eV) "
N=${#structure[@]}
let NN=N-1
fffffffff=${energy[0]}
for i in $(seq 0 1 $NN) ; do
diff=`echo ${energy[$i]} - $fffffffff   | bc -l`
#fffffffff=${energy[$i]}
echo "   " ${structure[$i]} "      "  ${energy[$i]}  "      "   $diff
done
echo " " >> $MAINDIR/output.txt
echo " phase stability table (in order):" >> $MAINDIR/output.txt
echo "   phase            energy per atom (eV)      energy difference to the most stable phase (eV) " >> $MAINDIR/output.txt
N=${#structure[@]}
let NN=N-1
fffffffff=${energy[0]}
for i in $(seq 0 1 $NN) ; do
diff=`echo ${energy[$i]} - $fffffffff   | bc -l`
fffffffff=${energy[$i]}
echo "   " ${structure[$i]} "      "  ${energy[$i]}  "      "   $diff >> $MAINDIR/output.txt
done
fi

mkdir energyvolumecurves
cd energyvolumecurves
mkdir pldirs
for i in $1; do
cd pldirs
mkdir pldir_${i}
cd ..
mkdir $i
cd $i

#if [ -n "$KSPACING" ]; then
#mkdir tempforkpts
#cd tempforkpts
#
#buildposcar $i
#nelmbackup=$NELM
#NELM=1
#buildincar
#buildpotcar
#$VASP
#NELM=$nelmbackup
#
#generate k-points for:    8    8    8
#
#
#kspacingbackup=$KSPACING
#KSPACING=
#
#cd ..
#fi

name="VOLUME_$i"
backupvvvol=`echo ${!name}`
name="ENERGY_$i"
backupeeen=`echo ${!name}`
if [ -n "$KSPACING" ]; then
backupkspacing=$KSPACING
fi

for j in $(seq 1 1 $2); do
mkdir $j
cd $j

jnlkfvjk=`echo $j - 0.5 - $2 / 2 | bc -l`
afragrgw=`echo -0.5 + $2 / 2 | bc -l`
jvwoejvnwojvnwe=`echo $3 \* $backupvvvol / 100 | bc -l`
fnjfvkfn=`echo $jnlkfvjk \* $jvwoejvnwojvnwe / $afragrgw | bc -l`
vvol=`echo $backupvvvol + $fnjfvkfn | bc -l`
name="VOLUME_$i"
eval $name=$vvol

if [ -n "$KSPACING" ]; then
backuplatccoonsst=`echo " e( l($backupvvvol)/3 ) " | bc -l`
latccoonsst=`echo " e( l($vvol)/3 ) " | bc -l`
KSPACING=`echo $backupkspacing \* $backuplatccoonsst / $latccoonsst | bc -l`
fi

isifbackup=$ISIF
ISIF=4
PRINTOUTPUT=false
relaxation $i
PRINTOUTPUT=true
ISIF=$isifbackup
cd ..

name="ENERGY_$i"
enerryy=`echo ${!name}`
echo $vvol " Angstrom^3 per atom      " $enerryy " eV "  >> energies.dat

cd $j
cd relaxation_${i}
pprreea=($(grep 'external pressure' OUTCAR | tail -1))
pprree=${pprreea[3]}
pprreeevan=`echo $pprree \* 0.0006242 | bc -l`
eennttaallppppy=`echo $enerryy + $pprreeevan \* $vvol | bc -l`
cd ..
cd ..
echo $vvol " Angstrom^3 per atom      " $pprreeevan " eV/Angstrom^3 "  >> pressures.dat
echo $pprreeevan " eV/Angstrom^3      " $eennttaallppppy " eV "  >> enthalpies.dat

cd ..
cd pldirs
cd pldir_${i}
echo $vvol "  " $enerryy  >> data.dat
cd ..
cd ..
cd $i

done
name="VOLUME_$i"
eval $name=$backupvvvol
name="ENERGY_$i"
eval $name=$backupeeen
if [ -n "$KSPACING" ]; then
KSPACING=$backupkspacing
fi
cd ..
done



#cd pldirs
#for i in $1; do
#cd pldir_${i}
#eennee2=0
#vvooll2=0
#for j in $(seq 1 1 $2); do
#akjrnvkjnv=($(sed -n "$j"'p' < data.dat))
#eennee1=${akjrnvkjnv[1]}
#vvooll1=${akjrnvkjnv[0]}
#delene=`echo $eennee2 - $eennee1 | bc -l`
#delvol=`echo $vvooll2 - $vvooll1 | bc -l`
#steig=`echo $delene / $delvol | bc -l`
#hohe=`echo $eennee1 - $steig \* $vvooll1 | bc -l`
#echo $vvooll1 "  " $eennee1 "  " $steig  "  " $hohe  >> critpress.dat
#eennee2=$eennee1
#vvooll2=$vvooll1
#done
#cd ..
#done
#cd ..

cd pldirs
for i in $1; do
cd pldir_${i}
for j in $(seq 1 1 $2); do
akjrnvkjnv=($(sed -n "$j"'p' < data.dat))
eennee=${akjrnvkjnv[1]}
vvooll=${akjrnvkjnv[0]}
cd ..
cd ..
cd $i
cd $j
cd relaxation_${i}
pprreea=($(grep 'external pressure' OUTCAR | tail -1))
pprree=${pprreea[3]}
pprreeevan=`echo $pprree \* 0.0006242 | bc -l`
cd ..
cd ..
cd ..
cd pldirs
cd pldir_${i}
hohe=`echo $eennee + $pprreeevan \* $vvooll | bc -l`
echo $pprreeevan  "  " $hohe  >> critpress.dat
done
cd ..
done
cd ..



svfnjgvgergtbe="p "
njeorjtgnejben="p "
jnjnvwnjijwvtj="p "
for i in $1; do
svfnjgvgergtbe=$svfnjgvgergtbe"'"$i"/energies.dat' u 1:5 w l title '"$i"', "
njeorjtgnejben=$njeorjtgnejben"'"$i"/pressures.dat' u 1:5 w l title '"$i"', "
jnjnvwnjijwvtj=$jnjnvwnjijwvtj"'"$i"/enthalpies.dat' u 1:3 w l title '"$i"', "
done

if [ -n "$METAGGA" ]; then

cat > energyvolumecurves_gnup_${METAGGA} << EOF
set title "Energy-volume curves ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "energyvolumecurves_${METAGGA}.png"
$svfnjgvgergtbe
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT energyvolumecurves_gnup_${METAGGA}
fi

cat > pressurevolumecurves_gnup_${METAGGA} << EOF
set title "Pressure-volume curves ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Pressure (eV/{\305}^3)"
set term png
set output "pressurevolumecurves_${METAGGA}.png"
$njeorjtgnejben
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT pressurevolumecurves_gnup_${METAGGA}
fi

cat > enthalpypressurecurves_gnup_${METAGGA} << EOF
set title "Enthalpy-pressure curves ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Pressure (eV/{\305}^3)"
set ylabel "Enthalpy (eV)"
set term png
set output "enthalpypressurecurves_${METAGGA}.png"
$jnjnvwnjijwvtj
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT enthalpypressurecurves_gnup_${METAGGA}
fi

else

cat > energyvolumecurves_gnup_${GGA} << EOF
set title "Energy-volume curves ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "energyvolumecurves_${GGA}.png"
$svfnjgvgergtbe
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT energyvolumecurves_gnup_${GGA}
fi

cat > pressurevolumecurves_gnup_${GGA} << EOF
set title "Pressure-volume curves ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Pressure (eV/{\305}^3)"
set term png
set output "pressurevolumecurves_${GGA}.png"
$njeorjtgnejben
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT pressurevolumecurves_gnup_${GGA}
fi

cat > enthalpypressurecurves_gnup_${GGA} << EOF
set title "Enthalpy-pressure curves ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Pressure (eV/{\305}^3)"
set ylabel "Enthalpy (eV)"
set term png
set output "enthalpypressurecurves_${GGA}.png"
$jnjnvwnjijwvtj
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT enthalpypressurecurves_gnup_${GGA}
fi

fi

cd pldirs
plotxydata++ data.dat
cd ..


let secs=$SECONDS-$secsenergyvolumecurves
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fitbirchmurnaghan () {

secsfitbirchmurnaghan=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: fitbirchmurnaghan $1 $2 $3 $4  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: fitbirchmurnaghan $1 $2 $3 $4  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: fitbirchmurnaghan $1 $2 $3 $4  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: fitbirchmurnaghan $1 $2 $3 $4  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

mkdir fitbirchmurnaghan_${3}
cd fitbirchmurnaghan_${3}
name="ENERGY_$3"
backupen=`echo ${!name}`
name="VOLUME_$3"
backupvol=`echo ${!name}`
if [ -n "$KSPACING" ]; then
backupkspacing=$KSPACING
fi

for j in $(seq 1 1 $1); do
mkdir $j
cd $j

jnlkfvjk=`echo $j - 0.5 - $1 / 2 | bc -l`
afragrgw=`echo -0.5 + $1 / 2 | bc -l`
jvwoejvnwojvnwe=`echo $2 \* $backupvol / 100 | bc -l`
fnjfvkfn=`echo $jnlkfvjk \* $jvwoejvnwojvnwe / $afragrgw | bc -l`
vvol=`echo $backupvol + $fnjfvkfn | bc -l`
name="VOLUME_$3"
eval $name=$vvol

if [ -n "$KSPACING" ]; then
backuplatccoonsst=`echo " e( l($backupvol)/3 ) " | bc -l`
latccoonsst=`echo " e( l($vvol)/3 ) " | bc -l`
KSPACING=`echo $backupkspacing \* $backuplatccoonsst / $latccoonsst | bc -l`
fi

isifbackup=$ISIF
ISIF=4
PRINTOUTPUT=false
###$2 $1
relaxation $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}" "${56}" "${58}" ${59} "${60}" "${61}" "${62}" "${63}" ${64} "${65}" "${66}" "${67}" "${68}" ${69} "${70}" "${71}" "${72}" "${73}" ${74} "${75}" "${76}" "${77}" "${78}" ${79} "${80}" "${81}" "${82}" "${83}"
PRINTOUTPUT=true
ISIF=$isifbackup
cd ..
name="ENERGY_$3"
viuyiuyguy=`echo ${!name}`
echo $vvol " Angstrom^3 per atom      " $viuyiuyguy " eV "  >> energies.dat
echo $vvol  $viuyiuyguy  >> data.dat
done

if [ -n "$KSPACING" ]; then
KSPACING=$backupkspacing
fi
#name="VOLUME_$1"
#eval $name=$backupvol
#name="FREE_ENERGY_$1"
#iusiunbb=`echo ${!name}`

cat > eosfit_31_adapted.py << EOF
# eosfit.py fits E(V) data to a Birch-Murnaghan equation of state.
# Current version: 3.1
#
# Copyright (C) 2012 Kurt Lejaeghere <Kurt.Lejaeghere@UGent.be>, Center for
# Molecular Modeling (CMM), Ghent University, Ghent, Belgium
#
# eosfit.py is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 2.1 of the License, or (at your option)
# any later version.
#
# eosfit.py is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
# more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eosfit.py; if not, see <http://www.gnu.org/licenses/>.

# The following code is based on the source code of eos.py from the Atomic
# Simulation Environment (ASE) <https://wiki.fysik.dtu.dk/ase/>.

# Python and numpy are required to use this script.

import numpy as np

echarge = 1.60217733e-19

def BM(energies):

    fitdata = np.polyfit(energies[:,0]**(-2./3.), energies[:,1], 3, full=True)
    ssr = fitdata[1]
    sst = np.sum((energies[:,1] - np.average(energies[:,1]))**2.)
    residuals0 = ssr/sst
    deriv0 = np.poly1d(fitdata[0])
    deriv1 = np.polyder(deriv0, 1)
    deriv2 = np.polyder(deriv1, 1)
    deriv3 = np.polyder(deriv2, 1)

    volume0 = 0
    x = 0
    for x in np.roots(deriv1):
        # Last check: it's real, no imaginary part
        if x > 0 and deriv2(x) > 0 and abs(x.imag) < 1.e-8:
            volume0 = x**(-3./2.)
            break

    if volume0 == 0:
        raise ValueError('Error: No minimum could be found')

    # Get also the E0 and return it
    E0 = deriv0(x)

    derivV2 = 4./9. * x**5. * deriv2(x)
    derivV3 = (-20./9. * x**(13./2.) * deriv2(x) -
        8./27. * x**(15./2.) * deriv3(x))
    bulk_modulus0 = derivV2 / x**(3./2.)
    bulk_deriv0 = -1 - x**(-3./2.) * derivV3 / derivV2

    return volume0, E0, bulk_modulus0, bulk_deriv0, residuals0

if __name__ == "__main__":
    from sys import argv

    usage = '''\
    Use: python eosfit.py filename
        calculates the Birch-Murnaghan equation of state from a given file,
        containing in its columns the volumes in A^3/atom and energies in eV/atom,
        respectively
        output is printed in filename.eosout
    --help gives an overview of all options
    '''

    if len(argv) != 2:
        print('Error: Wrong number of arguments')
        exit()
    else:
        if argv[1] == '--help':
            print(usage)
            exit()
    infile = argv[1]

    data = np.loadtxt(infile)
    volume, E, bulk_modulus, bulk_deriv, residuals = BM(data)

    outstr = '''\
    Equation Of State parameters - least squares fit of a Birch Murnaghan curve

    %.8f \t %.8f \t %.8f \t %.8f

    V0 \t \t  E0 \t \t  B0 \t \t  BP
    [A^3/at] \t [eV/at] \t [GPa] \t \t [--]

    1-R^2: %.8f

    ''' % (volume, E, (bulk_modulus * echarge * 1.0e21), bulk_deriv, residuals[0])

    outfile = open(infile+'.eosout', 'w')
    outfile.write(outstr)

    outfile.close()
EOF

$PYTHON eosfit_31_adapted.py data.dat
array2=($(sed -n '3p' < data.dat.eosout))

name="ENERGY_$i"
eval $name=$backupen
name="VOLUME_$i"
eval $name=$backupvol
value22=${array2[1]}
if [ "$UPDATEVARIABLES" = true ]; then
name="ENERGY_$3"
eval $name=$value22
fi
value23=${array2[2]}
value23=`echo $value23 / 160.2 | bc -l`
if [ "$UPDATEVARIABLES" = true ]; then
name="BULK_MODULUS_$3"
eval $name=$value23
fi
jveignjveijvn=`echo $value23 \* 160.2 | bc -l`
value24=${array2[0]}
if [ "$UPDATEVARIABLES" = true ]; then
name="VOLUME_$3"
eval $name=$value24
fi
bulkmodulusderrivative=${array2[3]}



if [ -n "$METAGGA" ]; then

cat > fitbirchmurnaghan_gnup_${3}_${METAGGA} << EOF
h = $value22
b = $value23
v = $value24
d = $bulkmodulusderrivative
e(x) = h + (9.0/16.0)*b*v*(   d*((v/x)**(2.0/3.0) - 1)**3  +  (((v/x)**(2.0/3.0) - 1)**2)*(6 - 4*(v/x)**(2.0/3.0))   )

set title "$3 Birch-Murnaghan EOS fit ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "fitbirchmurnaghan_${3}_${METAGGA}.png"
p 'energies.dat' u 1:5 w p title 'data points', e(x) title 'fitted EOS'
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT fitbirchmurnaghan_gnup_${3}_${METAGGA}
fi

else

cat > fitbirchmurnaghan_gnup_${3}_${GGA} << EOF
h = $value22
b = $value23
v = $value24
d = $bulkmodulusderrivative
e(x) = h + (9.0/16.0)*b*v*(   d*((v/x)**(2.0/3.0) - 1)**3  +  (((v/x)**(2.0/3.0) - 1)**2)*(6 - 4*(v/x)**(2.0/3.0))   )

set title "$3 Birch-Murnaghan EOS fit ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "fitbirchmurnaghan_${3}_${GGA}.png"
p 'energies.dat' u 1:5 w p title 'data points', e(x) title 'fitted EOS'
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT fitbirchmurnaghan_gnup_${3}_${GGA}
fi

fi


if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " Murnaghan equation of state has been fitted. Resulting parameters:"
  echo " volume per atom = " $value24 " Anstrom^3 per atom "
  echo " energy per atom = " $value22 " eV "
  echo " bulk modulus = " $value23 " eV/Angstrom^3 = " $jveignjveijvn " GPa "
  echo " derrivative of bulk modulus wrt pressure = " $bulkmodulusderrivative " eV/Angstrom^3 "
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VOLUME_$3, ENERGY_$3, and BULK_MODULUS_$3 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " Murnaghan equation of state has been fitted. Resulting parameters:" >> $MAINDIR/output.txt
  echo " volume per atom = " $value24 " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " energy per atom = " $value22 " eV " >> $MAINDIR/output.txt
  echo " bulk modulus = " $value23 " eV/Angstrom^3 = " $jveignjveijvn " GPa " >> $MAINDIR/output.txt
  echo " derrivative of bulk modulus wrt pressure = " $bulkmodulusderrivative " eV/Angstrom^3 " >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VOLUME_$3, ENERGY_$3, and BULK_MODULUS_$3 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi

let secs=$SECONDS-$secsfitbirchmurnaghan
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$value24

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
fitmurnaghan () {

secsfitmurnaghan=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: fitmurnaghan $1 $2 $3 $4  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: fitmurnaghan $1 $2 $3 $4  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: fitmurnaghan $1 $2 $3 $4  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: fitmurnaghan $1 $2 $3 $4  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

mkdir fitmurnaghan_${3}
cd fitmurnaghan_${3}
name="ENERGY_$3"
backupen=`echo ${!name}`
name="VOLUME_$3"
backupvol=`echo ${!name}`
if [ -n "$KSPACING" ]; then
backupkspacing=$KSPACING
fi

for j in $(seq 1 1 $1); do
mkdir $j
cd $j

jnlkfvjk=`echo $j - 0.5 - $1 / 2 | bc -l`
afragrgw=`echo -0.5 + $1 / 2 | bc -l`
jvwoejvnwojvnwe=`echo $2 \* $backupvol / 100 | bc -l`
fnjfvkfn=`echo $jnlkfvjk \* $jvwoejvnwojvnwe / $afragrgw | bc -l`
vvol=`echo $backupvol + $fnjfvkfn | bc -l`
name="VOLUME_$3"
eval $name=$vvol

if [ -n "$KSPACING" ]; then
backuplatccoonsst=`echo " e( l($backupvol)/3 ) " | bc -l`
latccoonsst=`echo " e( l($vvol)/3 ) " | bc -l`
KSPACING=`echo $backupkspacing \* $backuplatccoonsst / $latccoonsst | bc -l`
fi

isifbackup=$ISIF
ISIF=4
PRINTOUTPUT=false
###$2 $1
relaxation $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}" "${56}" "${58}" ${59} "${60}" "${61}" "${62}" "${63}" ${64} "${65}" "${66}" "${67}" "${68}" ${69} "${70}" "${71}" "${72}" "${73}" ${74} "${75}" "${76}" "${77}" "${78}" ${79} "${80}" "${81}" "${82}" "${83}"
PRINTOUTPUT=true
ISIF=$isifbackup
cd ..
name="ENERGY_$3"
viuyiuyguy=`echo ${!name}`
echo $vvol " Angstrom^3 per atom      " $viuyiuyguy " eV "  >> energies.dat
done

if [ -n "$KSPACING" ]; then
KSPACING=$backupkspacing
fi
#name="VOLUME_$1"
#eval $name=$backupvol
#name="FREE_ENERGY_$1"
#iusiunbb=`echo ${!name}`

if [ -n "$METAGGA" ]; then

cat > fitmurnaghan_gnup_${3}_${METAGGA} << EOF
h = $backupen
b = 1.25
v = $backupvol
d = 3.5
e(x) = h + (b*x/d)*(((v/x)**d)/(d-1)+1) - b*v/(d-1)
fit e(x) 'energies.dat' u 1:5 via h, b, v, d

set title "$3 Murnaghan EOS fit ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "fitmurnaghan_${3}_${METAGGA}.png"
p 'energies.dat' u 1:5 w p title 'data points', e(x) title 'fitted EOS'
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT fitmurnaghan_gnup_${3}_${METAGGA}
fi

else

cat > fitmurnaghan_gnup_${3}_${GGA} << EOF
h = $backupen
b = 1.25
v = $backupvol
d = 3.5
e(x) = h + (b*x/d)*(((v/x)**d)/(d-1)+1) - b*v/(d-1)
fit e(x) 'energies.dat' u 1:5 via h, b, v, d

set title "$3 Murnaghan EOS fit ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Volume per atom ({\305}^3)"
set ylabel "Energy per atom (eV)"
set term png
set output "fitmurnaghan_${3}_${GGA}.png"
p 'energies.dat' u 1:5 w p title 'data points', e(x) title 'fitted EOS'
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT fitmurnaghan_gnup_${3}_${GGA}
fi

fi

name="ENERGY_$i"
eval $name=$backupen
name="VOLUME_$i"
eval $name=$backupvol
array2=($(grep 'h         ' fit.log | tail -2 | head -1))
value22=${array2[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="ENERGY_$3"
eval $name=$value22
fi
array2=($(grep 'b         ' fit.log | tail -2 | head -1))
value23=${array2[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="BULK_MODULUS_$3"
eval $name=$value23
fi
jveignjveijvn=`echo $value23 \* 160.2 | bc -l`
array2=($(grep 'v         ' fit.log | tail -2 | head -1))
value24=${array2[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="VOLUME_$3"
eval $name=$value24
fi
array2=($(grep 'd         ' fit.log | tail -2 | head -1))
bulkmodulusderrivative=${array2[2]}

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " Murnaghan equation of state has been fitted. Resulting parameters:"
  echo " volume per atom = " $value24 " Anstrom^3 per atom "
  echo " energy per atom = " $value22 " eV "
  echo " bulk modulus = " $value23 " eV/Angstrom^3 = " $jveignjveijvn " GPa "
  echo " derrivative of bulk modulus wrt pressure = " $bulkmodulusderrivative " eV/Angstrom^3 "
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VOLUME_$3, ENERGY_$3, and BULK_MODULUS_$3 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " Murnaghan equation of state has been fitted. Resulting parameters:" >> $MAINDIR/output.txt
  echo " volume per atom = " $value24 " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " energy per atom = " $value22 " eV " >> $MAINDIR/output.txt
  echo " bulk modulus = " $value23 " eV/Angstrom^3 = " $jveignjveijvn " GPa " >> $MAINDIR/output.txt
  echo " derrivative of bulk modulus wrt pressure = " $bulkmodulusderrivative " eV/Angstrom^3 " >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " VOLUME_$3, ENERGY_$3, and BULK_MODULUS_$3 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi

let secs=$SECONDS-$secsfitmurnaghan
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$value24

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
moleculardynamics () {                       # $2 is for addvacancy ... / addadsorbant ...

secs=$SECONDS

mkdir moleculardynamics_${1}
cd moleculardynamics_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: moleculardynamics $1 $2  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: moleculardynamics $1 $2  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: moleculardynamics $1 $2  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: moleculardynamics $1 $2  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

$1 ;

if [ -n "$2" ]; then
$2 "$3" "$4" "$5" "$6"
fi

if [ -n "$7" ]; then
$7 "$8" "$9" "${10}" "${11}"
fi

if [ -n "${12}" ]; then
${12} "${13}" "${14}" "${15}" "${16}"
fi

if [ -n "${17}" ]; then
${17} "${18}" "${19}" "${20}" "${21}"
fi

if [ -n "${22}" ]; then
${22} "${23}" "${24}" "${25}" "${26}"
fi

if [ -n "${27}" ]; then
${27} "${28}" "${29}" "${30}" "${31}"
fi

if [ -n "${32}" ]; then
${32} "${33}" "${34}" "${35}" "${36}"
fi

if [ -n "${37}" ]; then
${37} "${38}" "${39}" "${40}" "${41}"
fi

if [ -n "${42}" ]; then
${42} "${43}" "${44}" "${45}" "${46}"
fi

if [ -n "${47}" ]; then
${47} "${48}" "${49}" "${50}" "${51}"
fi

if [ -n "${52}" ]; then
${52} "${53}" "${54}" "${55}" "${56}"
fi

if [ -n "${57}" ]; then
${57} "${58}" "${59}" "${60}" "${61}"
fi

if [ -n "${62}" ]; then
${62} "${63}" "${64}" "${65}" "${66}"
fi

if [ -n "${67}" ]; then
${67} "${68}" "${69}" "${70}" "${71}"
fi

if [ -n "${72}" ]; then
${72} "${73}" "${74}" "${75}" "${76}"
fi

if [ -n "${77}" ]; then
${77} "${78}" "${79}" "${80}" "${81}"
fi


if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

buildkpoints $1
isymbackup=$ISYM
nwritebackup=$NWRITE
ISYM=0
NWRITE=1
buildincar
ISYM=$isymbackup
NWRITE=$nwritebackup
echo "#molecular dynamics:" >> INCAR
echo "IBRION = 0" >> INCAR
echo "TEBEG = $TEBEG" >> INCAR
echo "TEEND = $TEEND" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "NSW = $NSW" >> INCAR
echo " " >> INCAR
echo "#thermostat & ensembles:" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo "MDALGO = $MDALGO" >> INCAR
echo "LANGEVIN_GAMMA = $LANGEVIN_GAMMA" >> INCAR
echo "LANGEVIN_GAMMA_L = $LANGEVIN_GAMMA_L" >> INCAR
echo " " >> INCAR
echo "#machine learned force fields:" >> INCAR
echo "ML_LMLFF = $ML_LMLFF" >> INCAR
echo "ML_ISTART = $ML_ISTART" >> INCAR
echo "ML_CTIFOR = $ML_CTIFOR" >> INCAR
echo "ML_ICRITERIA = $ML_ICRITERIA " >> INCAR
echo "ML_RCUT1 = $ML_RCUT1" >> INCAR
echo "ML_RCUT2 = $ML_RCUT2" >> INCAR
echo " " >> INCAR
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi



if [ "$ML_LMLFF" = .TRUE. ]; then

grep "BEEF " ML_LOGFILE > beef.dat

if [ -n "$METAGGA" ]; then
cat > mlff_forceerrors_gnup_${1}_${METAGGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in force (max) (eV/{\305})"
set term png
set output "mlff_forceerrors_${1}_${METAGGA}.png"
p 'beef.dat' u 2:4 w l title 'Estimated Bayesian error', 'beef.dat' u 2:6 w l title 'Threshold for Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_forceerrors_gnup_${1}_${METAGGA}
fi
else
cat > mlff_forceerrors_gnup_${1}_${GGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in force (max) (eV/{\305})"
set term png
set output "mlff_forceerrors_${1}_${GGA}.png"
p 'beef.dat' u 2:4 w l title 'Estimated Bayesian error', 'beef.dat' u 2:6 w l title 'Threshold for Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_forceerrors_gnup_${1}_${GGA}
fi
fi


if [ -n "$METAGGA" ]; then
cat > mlff_energyerrors_gnup_${1}_${METAGGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in energy (eV)"
set term png
set output "mlff_energyerrors_${1}_${METAGGA}.png"
p 'beef.dat' u 2:3 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_energyerrors_gnup_${1}_${METAGGA}
fi
else
cat > mlff_energyerrors_gnup_${1}_${GGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in energy (eV)"
set term png
set output "mlff_energyerrors_${1}_${GGA}.png"
p 'beef.dat' u 2:3 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_energyerrors_gnup_${1}_${GGA}
fi
fi


if [ -n "$METAGGA" ]; then
cat > mlff_stresserrors_gnup_${1}_${METAGGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in stress (max) (kB)"
set term png
set output "mlff_stresserrors_${1}_${METAGGA}.png"
p 'beef.dat' u 2:7 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_stresserrors_gnup_${1}_${METAGGA}
fi
else
cat > mlff_stresserrors_gnup_${1}_${GGA} << EOF
set title "$1 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in stress (max) (kB)"
set term png
set output "mlff_stresserrors_${1}_${GGA}.png"
p 'beef.dat' u 2:7 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_stresserrors_gnup_${1}_${GGA}
fi
fi


arrayconf=($(grep 'Configuration num.' ML_ABN | tail -1))
confnum=${arrayconf[2]}


if [ "$ML_ISTART" = 0 ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ "$UPDATEVARIABLES" = true ]; then
  echo " "
  echo " A force field has been trained. "
  echo " Total number of configurations: $confnum "
  echo " " >> $MAINDIR/output.txt
  echo " A force field has been trained. " >> $MAINDIR/output.txt
  echo " Total number of configurations: $confnum " >> $MAINDIR/output.txt
fi
fi
elif [ "$ML_ISTART" = 1 ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ "$UPDATEVARIABLES" = true ]; then
  echo " "
  echo " Force field training has been continued. "
  echo " Total number of configurations: $confnum "
  echo " " >> $MAINDIR/output.txt
  echo " Force field training has been continued. " >> $MAINDIR/output.txt
  echo " Total number of configurations: $confnum " >> $MAINDIR/output.txt
fi
fi
fi



fi



let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
phonondispersion () {

secs=$SECONDS

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: phonondispersion $1 \"$2\"  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: phonondispersion $1 \"$2\"  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: phonondispersion $1 \"$2\"  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: phonondispersion $1 \"$2\"  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

mkdir phonondispersion_${1}
cd phonondispersion_${1}

if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

$1
buildkpoints $1
buildqpoints $1 $2
buildincar
echo "#phonon calculation:" >> INCAR
echo "LPHON_DISPERSION = .TRUE." >> INCAR
echo "IBRION = 6" >> INCAR
echo "NSW = 1" >> INCAR
echo "POTIM = 0.015" >> INCAR
echo "ISIF = 2" >> INCAR
echo " " >> INCAR
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST DYNMAT QPOINTS INCAR REPORT defaultshiftsandratios XDATCAR KPOINTS CHGCAR poscardescription POSCAR CONTCAR DOSCAR vasprun.xml WAVECAR minipotcar POTCAR EIGENVAL PCDAT CHG IBZKPT
fi


NATOMS=`awk '/ions per / {print $5}' OUTCAR`
NCELL=`grep -m1 "primitive cells build up your supercell" OUTCAR | awk '{print $1}'`
if [ -z $NCELL ]
then
NCELL=1
fi
NBANDS=$((NATOMS/NCELL*3))
#NBANDS=6
NQ=`grep -A1 "q-point" OUTCAR |tail -1| awk '{print $1}'`
echo found $NBANDS bands and $NQ frequencies
#cut OUTCAR down
awk '/Phonons/,0' OUTCAR > temp.dat
for q_cur in `seq 0 $(($NQ-1))`
do
for b in `seq 0 $(($NBANDS-1))`;
do
line_q=$(($q_cur*($NBANDS+5)+3))
line_f=$(($line_q+$b+3))
#echo $line_q
q=$(awk -v n=$line_q '/Phonons/ { for (i=1; i<=n ; i++) getline; print $5} ' temp.dat)
q_x=$(awk -v n=$line_q '/Phonons/ { for (i=1; i<=n ; i++) getline; print $2} ' temp.dat)
q_y=$(awk -v n=$line_q '/Phonons/ { for (i=1; i<=n ; i++) getline; print $3} ' temp.dat)
q_z=$(awk -v n=$line_q '/Phonons/ { for (i=1; i<=n ; i++) getline; print $4} ' temp.dat)
f[$b]=$(awk -v n=$line_f '/Phonons/ { for (i=1; i<=n ; i++) getline; print $2} ' temp.dat)
done
echo " l" $q " xyz" $q_x $q_y $q_z " f" ${f[*]} >> phonons.dat
echo $q ${f[*]} >> phononsx.dat
done

rm temp.dat



for value in $path ; do

if [ "$LATTICE_SYSTEM" = cubic ]; then

if [ "$BRAVAIS_LATTICE" = F ]; then

if [ "$value" = G ]; then
arrayghv=($(grep "xyz 0.000000 0.000000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  G : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = X ]; then
arrayghv=($(grep "xyz 0.000000 0.500000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  X : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = U ]; then
arrayghv=($(grep "xyz 0.250000 0.625000 0.625000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  U : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = K ]; then
arrayghv=($(grep "xyz 0.375000 0.750000 0.375000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  K : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = L ]; then
arrayghv=($(grep "xyz 0.500000 0.500000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  L : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = W ]; then
arrayghv=($(grep "xyz 0.250000 0.750000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  W : " ${arrayghv[@]}  >> tempvvfhb
fi

fi

if [ "$BRAVAIS_LATTICE" = I ]; then

if [ "$value" = G ]; then
arrayghv=($(grep "xyz 0.000000 0.000000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  G : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = H ]; then
arrayghv=($(grep "xyz -0.500000 0.500000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  H : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = P ]; then
arrayghv=($(grep "xyz 0.250000 0.250000 0.250000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  P : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = N ]; then
arrayghv=($(grep "xyz 0.000000 0.500000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  N : " ${arrayghv[@]}  >> tempvvfhb
fi

fi

if [ "$BRAVAIS_LATTICE" = P ]; then

if [ "$value" = G ]; then
arrayghv=($(grep "xyz 0.000000 0.000000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  G : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = R ]; then
arrayghv=($(grep "xyz 0.500000 0.500000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  R : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = X ]; then
arrayghv=($(grep "xyz 0.000000 0.500000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  X : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = M ]; then
arrayghv=($(grep "xyz 0.500000 0.500000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  M : " ${arrayghv[@]}  >> tempvvfhb
fi

fi

fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then

if [ "$BRAVAIS_LATTICE" = P ]; then

if [ "$value" = G ]; then
arrayghv=($(grep "xyz 0.000000 0.000000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  G : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = A ]; then
arrayghv=($(grep "xyz 0.000000 0.000000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  A : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = K ]; then
arrayghv=($(grep "xyz 0.666667 0.333333 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  K : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = H ]; then
arrayghv=($(grep "xyz 0.666667 0.333333 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  H : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = M ]; then
arrayghv=($(grep "xyz 0.500000 0.000000 0.000000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  M : " ${arrayghv[@]}  >> tempvvfhb

elif [ "$value" = L ]; then
arrayghv=($(grep "xyz 0.500000 0.000000 0.500000" phonons.dat | tail -1))
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
arrayghv=("${arrayghv[@]:1}")
echo "  L : " ${arrayghv[@]}  >> tempvvfhb
fi

fi

fi

done



if [ -n "$METAGGA" ]; then
cat > phonondispersion_gnup_${1}_${METAGGA} << EOF
set title "$1 phonon dispersion relation ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set xlabel "$path"
set ylabel "Frequency (THz)"
unset key
set term png
set output "phonondispersion_${1}_${METAGGA}.png"
p 'phonons.dat' u 2:8 w l, 'phonons.dat' u 2:9 w l, 'phonons.dat' u 2:10 w l, 'phonons.dat' u 2:11 w l, 'phonons.dat' u 2:12 w l, 'phonons.dat' u 2:13 w l
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT phonondispersion_gnup_${1}_${METAGGA}
fi
else
cat > phonondispersion_gnup_${1}_${GGA} << EOF
set title "$1 phonon dispersion relation ;  GGA = $GGA, POTCAR = $POTCAR"
set xlabel "$path"
set ylabel "Frequency (THz)"
unset key
set term png
set output "phonondispersion_${1}_${GGA}.png"
p 'phonons.dat' u 2:8 w l, 'phonons.dat' u 2:9 w l, 'phonons.dat' u 2:10 w l, 'phonons.dat' u 2:11 w l, 'phonons.dat' u 2:12 w l, 'phonons.dat' u 2:13 w l
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT phonondispersion_gnup_${1}_${GGA}
fi
fi


numberofcolumns=$(awk '{print NF; exit}' phononsx.dat)
local data=$(cat phononsx.dat)
if [ "$numberofcolumns" = 2 ]; then
local ymax=$(echo "$data" | awk '{print $2}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 3 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 4 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 5 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 6 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 7 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 8 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 9 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9}' | tr ' ' '\n'| sort -n | tail -1)
fi
if [ "$numberofcolumns" = 10 ]; then
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9, $10}' | tr ' ' '\n'| sort -n | tail -1)
fi

hjbshbhrjbs=$ymax

echo " "
#echo " path: $path"
echo " phonon frequencies (THz) at high symmetry points (ordered according to specified path): "
cat tempvvfhb
echo " maximum phonon frequency: $ymax THz"

echo " " >> $MAINDIR/output.txt
#echo " path: $path" >> $MAINDIR/output.txt
echo " phonon frequencies (THz) at high symmetry points (ordered according to specified path): " >> $MAINDIR/output.txt
cat tempvvfhb >> $MAINDIR/output.txt
echo " maximum phonon frequency: $ymax THz" >> $MAINDIR/output.txt

plotxydata+ phononsx.dat

rm phononsx.dat
rm tempvvfhb

let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

VARIABLEFORCONVERGENCE=$hjbshbhrjbs

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
relaxation () {                       # $2 is for addvacancy ... / addadsorbant ...

secs=$SECONDS

mkdir relaxation_${1}
cd relaxation_${1}

if [ "$MLFFBEIGAPPLIED" = false ]; then
if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: relaxation $1 $2  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: relaxation $1 $2  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: relaxation $1 $2  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: relaxation $1 $2  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi
fi

$1 ;

if [ -n "$2" ]; then
$2 "$3" "$4" "$5" "$6"  
fi

if [ -n "$7" ]; then
$7 "$8" "$9" "${10}" "${11}"   
fi

if [ -n "${12}" ]; then
${12} "${13}" "${14}" "${15}" "${16}"  
fi

if [ -n "${17}" ]; then
${17} "${18}" "${19}" "${20}" "${21}"  
fi

if [ -n "${22}" ]; then
${22} "${23}" "${24}" "${25}" "${26}"  
fi

if [ -n "${27}" ]; then
${27} "${28}" "${29}" "${30}" "${31}"  
fi

if [ -n "${32}" ]; then
${32} "${33}" "${34}" "${35}" "${36}"  
fi

if [ -n "${37}" ]; then
${37} "${38}" "${39}" "${40}" "${41}"  
fi

if [ -n "${42}" ]; then
${42} "${43}" "${44}" "${45}" "${46}"  
fi

if [ -n "${47}" ]; then
${47} "${48}" "${49}" "${50}" "${51}"  
fi

if [ -n "${52}" ]; then
${52} "${53}" "${54}" "${55}" "${56}"  
fi

if [ -n "${57}" ]; then
${57} "${58}" "${59}" "${60}" "${61}"  
fi

if [ -n "${62}" ]; then
${62} "${63}" "${64}" "${65}" "${66}"  
fi

if [ -n "${67}" ]; then
${67} "${68}" "${69}" "${70}" "${71}"  
fi

if [ -n "${72}" ]; then
${72} "${73}" "${74}" "${75}" "${76}"  
fi

if [ -n "${77}" ]; then
${77} "${78}" "${79}" "${80}" "${81}"  
fi


if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

buildkpoints $1
buildincar
echo "#ionic relaxation:" >> INCAR
echo "IBRION = $IBRION" >> INCAR
echo "EDIFFG = $EDIFFG" >> INCAR
echo "NSW = $NSW" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo " " >> INCAR
buildpotcar

if [ "$RELREPETITIONS" = 0 ]; then
$VASP

if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

cp CONTCAR CONTCAR_
cp OUTCAR OUTCAR_
else
lwavebackup=$LWAVE
lchargbackup=$LCHARG
istartbackup=$ISTART
ichargbackup=$ICHARG
LWAVE=.TRUE.
LCHARG=.TRUE.
buildincar
if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi
echo "#ionic relaxation:" >> INCAR
echo "IBRION = $IBRION" >> INCAR
echo "EDIFFG = $EDIFFG" >> INCAR
echo "NSW = $NSW" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo " " >> INCAR
$VASP

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

ISTART=1
ICHARG=0
kjbnwkjtbnwkjtb=$(pwd)
for qrgqek in $(seq 1 1 $RELREPETITIONS) ; do
mkdir continuation_${qrgqek}
cp KPOINTS continuation_${qrgqek}
cp POTCAR continuation_${qrgqek}
cp CONTCAR continuation_${qrgqek}/POSCAR
cp WAVECAR continuation_${qrgqek}
cp CHGCAR continuation_${qrgqek}
cp CHG continuation_${qrgqek}
cd continuation_${qrgqek}
buildincar
if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi
echo "#ionic relaxation:" >> INCAR
echo "IBRION = $IBRION" >> INCAR
echo "EDIFFG = $EDIFFG" >> INCAR
echo "NSW = $NSW" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo " " >> INCAR
$VASP

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi

cp CONTCAR $kjbnwkjtbnwkjtb/CONTCAR_
cp OUTCAR $kjbnwkjtbnwkjtb/OUTCAR_
done
cd $kjbnwkjtbnwkjtb
if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi
for qrgqek in $(seq 1 1 $RELREPETITIONS) ; do
cd continuation_${qrgqek}
if [ "$lwavebackup" = ".FALSE." ]; then
rm WAVECAR
fi
if [ "$lchargbackup" = ".FALSE." ]; then
rm CHGCAR CHG
fi
if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi
done
cd $kjbnwkjtbnwkjtb
LWAVE=$lwavebackup
LCHARG=$lchargbackup
ISTART=$istartbackup
ICHARG=$ichargbackup
fi


arraynumberofions=($(grep 'number of ions' OUTCAR_))
valuenumberofions=${arraynumberofions[11]}

array2=($(grep 'free  en' OUTCAR_ | tail -1))
array3=($(grep 'energy without entropy' OUTCAR_ | tail -1))

value2=${array2[4]}
value3=${array3[4]}
value4=${array3[7]}

value2=`echo $value2 / $valuenumberofions | bc -l`
value3=`echo $value3 / $valuenumberofions | bc -l`
value4=`echo $value4 / $valuenumberofions | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then

name="FREE_ENERGY_$1"
eval $name=$value2
name="ENERGY_WITHOUT_ENTROPY_$1"
eval $name=$value3
name="ENERGY_SIGMA_ZERO_$1"
eval $name=$value4

if [ "$MAINENE" = 1 ]; then
name="ENERGY_$1"
eval $name=$value2
fi
if [ "$MAINENE" = 2 ]; then
name="ENERGY_$1"
eval $name=$value3
fi
if [ "$MAINENE" = 3 ]; then
name="ENERGY_$1"
eval $name=$value4
fi

fi

if [ "$MAINENE" = 1 ]; then
mainene=$value2
fi
if [ "$MAINENE" = 2 ]; then
mainene=$value3
fi
if [ "$MAINENE" = 3 ]; then
mainene=$value4
fi


if [ "$MAINENE" = 1 ]; then
arrayenbefrel=($(grep 'free  en' OUTCAR | head -1))
enbefrell=${arrayenbefrel[4]}
fi
if [ "$MAINENE" = 2 ]; then
array3=($(grep 'energy without entropy' OUTCAR | head -1))
enbefrell=${arrayenbefrel[4]}
fi
if [ "$MAINENE" = 3 ]; then
array3=($(grep 'energy without entropy' OUTCAR | head -1))
enbefrell=${arrayenbefrel[7]}
fi

enbefrel=`echo $enbefrell / $valuenumberofions | bc -l`
relen=`echo $enbefrel - $mainene | bc -l`

if [ "$STRUCTURE_TYPE" = crystal ]; then

mkdir temp
cat CONTCAR_ > temp/POSCAR
cd temp

if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

isymbackup=$ISYM
ISYM=2

buildkpoints 1
nelmbackup=$NELM
NELM=1
buildincar
buildpotcar
$VASP
NELM=$nelmbackup

ISYM=$isymbackup

arraylatticeconst=($(grep 'ALAT' OUTCAR))
latticeconstt=${arraylatticeconst[2]}
latticeconst=`echo $latticeconstt / $SUPERCELL_FACTOR | bc -l`

if [ "$LATTICE_SYSTEM" = cubic ]; then
volume=`echo $latticeconst \* $latticeconst \* $latticeconst / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="C_A_RATIO_$1"
eval $name=$valuecaratio
fi
volume=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio \* 0.86602540378443864676372317075294 / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$LATTICE_SYSTEM" = tetragonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="C_A_RATIO_$1"
eval $name=$valuecaratio
fi
volume=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$UPDATEVARIABLES" = true ]; then
name="VOLUME_$1"
eval $name=$volume
fi

if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi

cd ..

if [ "$PRINTOUTPUT" = true ]; then
if [ "$LATTICE_SYSTEM" = cubic ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and VOLUME_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and VOLUME_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l`
  echo " lattice constant c = " $hjbsugbr " Angstrom "
  echo " c/a-ratio = " $valuecaratio
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l` >> $MAINDIR/output.txt
  echo " lattice constant c = " $hjbsugbr " Angstrom " >> $MAINDIR/output.txt
  echo " c/a-ratio = " $valuecaratio >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l`
  echo " lattice constant c = " $hjbsugbr " Angstrom "
  echo " c/a-ratio = " $valuecaratio
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l` >> $MAINDIR/output.txt
  echo " lattice constant c = " $hjbsugbr " Angstrom " >> $MAINDIR/output.txt
  echo " c/a-ratio = " $valuecaratio >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
fi

fi



if [ "$STRUCTURE_TYPE" = surface ]; then


name="VACUUM_SIZE_$1"
vacuumsize=`echo ${!name}`

if [ "$vacuumsize" = 0 ]; then

mkdir temp
cat CONTCAR_ > temp/POSCAR
cd temp

if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

isymbackup=$ISYM
ISYM=2

buildkpoints 1
nelmbackup=$NELM
NELM=1
buildincar
buildpotcar
$VASP
NELM=$nelmbackup

ISYM=$isymbackup

arraylatticeconst=($(grep 'ALAT' OUTCAR | tail -1))
latticeconstt=${arraylatticeconst[2]}
latticeconst=`echo $latticeconstt / $SUPERCELL_FACTOR | bc -l`

if [ "$LATTICE_SYSTEM" = cubic ]; then
volume=`echo $latticeconst \* $latticeconst \* $latticeconst / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="C_A_RATIO_$1"
eval $name=$valuecaratio
fi
volume=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio \* 0.86602540378443864676372317075294 / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$LATTICE_SYSTEM" = tetragonal ]; then
arraycaratio=($(grep 'C/A-ratio' OUTCAR))
valuecaratio=${arraycaratio[2]}
if [ "$UPDATEVARIABLES" = true ]; then
name="C_A_RATIO_$1"
eval $name=$valuecaratio
fi
volume=`echo $latticeconst \* $latticeconst \* $latticeconst \* $valuecaratio / $ATOMS_PER_CONVENTIONAL_CELL | bc -l`
fi

if [ "$UPDATEVARIABLES" = true ]; then
name="VOLUME_$1"
eval $name=$volume
fi

if [ "$RMFILES" = true ]; then
rm -rf ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR  XDATCAR
fi

cd ..

if [ "$PRINTOUTPUT" = true ]; then
if [ "$LATTICE_SYSTEM" = cubic ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and VOLUME_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and VOLUME_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l`
  echo " lattice constant c = " $hjbsugbr " Angstrom "
  echo " c/a-ratio = " $valuecaratio
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l` >> $MAINDIR/output.txt
  echo " lattice constant c = " $hjbsugbr " Angstrom " >> $MAINDIR/output.txt
  echo " c/a-ratio = " $valuecaratio >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " volume per atom = " $volume " Anstrom^3 per atom "
  echo " lattice constant a = " $latticeconst " Angstrom "
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l`
  echo " lattice constant c = " $hjbsugbr " Angstrom "
  echo " c/a-ratio = " $valuecaratio
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " volume per atom = " $volume " Anstrom^3 per atom " >> $MAINDIR/output.txt
  echo " lattice constant a = " $latticeconst " Angstrom " >> $MAINDIR/output.txt
  hjbsugbr=`echo $valuecaratio \* $latticeconst | bc -l` >> $MAINDIR/output.txt
  echo " lattice constant c = " $hjbsugbr " Angstrom " >> $MAINDIR/output.txt
  echo " c/a-ratio = " $valuecaratio >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 , VOLUME_$1 and C_A_RATIO_$1 have been updated accordingly " >> $MAINDIR/output.txt
fi
fi
fi

else


cellhightt=($(sed -n '5p' < CONTCAR_))
cellhight=${cellhightt[2]}

let num=1\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
firstlayerr=($(sed -n "$num"'p' < CONTCAR_))
firstlayer=${firstlayerr[2]}

if [ $(echo "$firstlayer > 0.8" | bc) -eq 1 ]; then  # for when atom moves out of cell and vasp outputs it as on the other side of cell instead of outputing negative coordinates
firstlayer=`echo $firstlayer - 1 | bc -l`
fi

firstlayer=`echo $firstlayer \* $cellhight | bc -l`



let num=2\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
secondlayerr=($(sed -n "$num"'p' < CONTCAR_))
secondlayer=${secondlayerr[2]}
secondlayer=`echo $secondlayer \* $cellhight | bc -l`

let num=3\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
thirdlayerr=($(sed -n "$num"'p' < CONTCAR_))
thirdlayer=${thirdlayerr[2]}
thirdlayer=`echo $thirdlayer \* $cellhight | bc -l`

let num=4\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
fourthlayerr=($(sed -n "$num"'p' < CONTCAR_))
fourthlayer=${fourthlayerr[2]}
fourthlayer=`echo $fourthlayer \* $cellhight | bc -l`

difffirstsecondlayer=`echo $secondlayer - $firstlayer | bc -l`
diffsecondthirdlayer=`echo $thirdlayer - $secondlayer | bc -l`
diffthirdfourthlayer=`echo $fourthlayer - $thirdlayer | bc -l`

name="VACUUM_SIZE_$1"
vacuumsize=`echo ${!name}`

name="NUMBER_OF_LAYERS_$1"
numberoflayers=`echo ${!name}`

bulklayerdistance=`echo $cellhight - $vacuumsize | bc -l`
bulklayerdistance=`echo $bulklayerdistance / $numberoflayers | bc -l`


relchangefirstsecondlayer=`echo 100 \* $difffirstsecondlayer / $bulklayerdistance - 100 | bc -l`
relchangesecondthirdlayer=`echo 100 \* $diffsecondthirdlayer / $bulklayerdistance - 100 | bc -l`
relchangethirdfourthlayer=`echo 100 \* $diffthirdfourthlayer / $bulklayerdistance - 100 | bc -l`


layerhights=" "
for ifv in $(seq 1 1 $NUMBER_OF_LAYERS) ; do
let num=$ifv\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
hightt=($(sed -n "$num"'p' < CONTCAR_))
hight=${hightt[2]}
hight=`echo $hight \* $cellhight | bc -l`
layerhights=$layerhights" "$hight
done

if [ "$UPDATEVARIABLES" = true ]; then
name="LAYER_HIGHTS_$1"
eval $name='$layerhights'
fi

if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at: "
  echo " relaxation energy: $relen eV "
  echo " difference between first & second layer: " $difffirstsecondlayer " Angstrom"
  echo " difference between second & third layer: " $diffsecondthirdlayer " Angstrom"
  echo " difference between third & fourth layer: " $diffthirdfourthlayer " Angstrom"
  echo " for reference, layer distance in bulk structure: " $bulklayerdistance " Angstrom"
  echo " relative change in first & second layer distance: " $relchangefirstsecondlayer " %"
  echo " relative change in second & third layer distance: " $relchangesecondthirdlayer " %"
  echo " relative change in third & fourth layer distance: " $relchangethirdfourthlayer " %"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and LAYER_HIGHTS_$1 has been updated accordingly. "
fi
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at: " >> $MAINDIR/output.txt
  echo " relaxation energy: $relen eV " >> $MAINDIR/output.txt
  echo " difference between first & second layer: " $difffirstsecondlayer " Angstrom" >> $MAINDIR/output.txt
  echo " difference between second & third layer: " $diffsecondthirdlayer " Angstrom" >> $MAINDIR/output.txt
  echo " difference between third & fourth layer: " $diffthirdfourthlayer " Angstrom" >> $MAINDIR/output.txt
  echo " for reference, layer distance in bulk structure: " $bulklayerdistance " Angstrom" >> $MAINDIR/output.txt
  echo " relative change in first & second layer distance: " $relchangefirstsecondlayer " %" >> $MAINDIR/output.txt
  echo " relative change in second & third layer distance: " $relchangesecondthirdlayer " %" >> $MAINDIR/output.txt
  echo " relative change in third & fourth layer distance: " $relchangethirdfourthlayer " %" >> $MAINDIR/output.txt
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and LAYER_HIGHTS_$1 has been updated accordingly. " >> $MAINDIR/output.txt
fi
fi

if [ "$2" = addadsorbate ]; then

let num=$NUMBER_OF_LAYERS\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9
hightlastt=($(sed -n "$num"'p' < CONTCAR_))
hightlast=${hightlastt[2]}
hightlast=`echo $hightlast \* $cellhight | bc -l`

let num=$NUMBER_OF_LAYERS\*$SUPERCELL_FACTOR\*$SUPERCELL_FACTOR+9+1
hightmoll=($(sed -n "$num"'p' < CONTCAR_))
hightmol=${hightmoll[2]}
hightmol=`echo $hightmol \* $cellhight | bc -l`

adsdist=`echo $hightmol - $hightlast | bc -l`

if [ "$UPDATEVARIABLES" = true ]; then
name="ADSORPTION_DISTANCE_$3"
eval $name=$adsdist
fi

if [ "$PRINTOUTPUT" = true ]; then
  echo " adsorption distance of first adsorbate: " $adsdist " Angstrom"
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ADSORPTION_DISTANCE_$3 has been updated accordingly. "
fi
fi

fi


fi



fi



if [ "$STRUCTURE_TYPE" = molecule ]; then


if [ "$PRINTOUTPUT" = true ]; then
  echo " "
  echo " energy minimum of $mainene eV per atom was reached at these atomic positions: "
  echo " " >> $MAINDIR/output.txt
  echo " energy minimum of $mainene eV per atom was reached at these atomic positions: " >> $MAINDIR/output.txt
fi

for ifv in $(seq 1 1 $ATOMS_PER_SUBCELL) ; do

let num=$ifv+8
positionss=($(sed -n "$num"'p' < CONTCAR_))
position1=${positionss[0]}
position2=${positionss[1]}
position3=${positionss[2]}

name="MOLECULE_ASYMETRY_$1"
asymetry=`echo ${!name}`

name="MOLECULE_CELL_SIZE_$1"
molcellsize=`echo ${!name}`

position1=`echo $position1 \* $molcellsize \* $SUPERCELL_FACTOR - $position1 \* $asymetry | bc -l`
position2=`echo $position2 \* $molcellsize \* $SUPERCELL_FACTOR | bc -l`
position3=`echo $position3 \* $molcellsize \* $SUPERCELL_FACTOR + $position3 \* $asymetry | bc -l`

positions="$position1 $position2 $position3"

if [ "$UPDATEVARIABLES" = true ]; then
name="POSITION_ATOM_${i}_$1"
eval $name='$positions'
fi

if [ "$PRINTOUTPUT" = true ]; then
  echo " $positions"
  echo " $positions" >> $MAINDIR/output.txt
fi

done

if [ "$PRINTOUTPUT" = true ]; then
if [ "$UPDATEVARIABLES" = true ]; then
  echo " ENERGY_$1 and POSITION_ATOM_n_$1 for n=1,...,$ATOMS_PER_SUBCELL have been updated accordingly. "
  echo " ENERGY_$1 and POSITION_ATOM_n_$1 for n=1,...,$ATOMS_PER_SUBCELL have been updated accordingly. " >> $MAINDIR/output.txt
fi
fi

fi


let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

rm CONTCAR_
rm OUTCAR_

VARIABLEFORCONVERGENCE=$volume

cd ..

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
trainmlff () {                       # $2 is for addvacancy ... / addadsorbant ...

secs=$SECONDS

if [ -f $MAINDIR/mlffs ] ; then
x=x
else
mkdir $MAINDIR/mlffs
fi

mkdir $MAINDIR/mlffs/$2


mkdir trainmlff_${2}
cd trainmlff_${2}

if [ "$PRINTOUTPUT" = true ]; then
if [ -n "$METAGGA" ]; then
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: trainmlff $1 $2 $3 $4  ;   $METAGGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: trainmlff $1 $2 $3 $4  ;   $METAGGA $POTCAR " >> $MAINDIR/output.txt
else
echo " "
echo " ###########################################################################################"
echo " "
echo " Running now: trainmlff $1 $2 $3 $4  ;   $GGA $POTCAR "
echo " " >> $MAINDIR/output.txt
echo " ###########################################################################################" >> $MAINDIR/output.txt
echo " " >> $MAINDIR/output.txt
echo " Running now: trainmlff $1 $2 $3 $4  ;   $GGA $POTCAR " >> $MAINDIR/output.txt
fi
fi

$3 ;

if [ -n "$4" ]; then
$4 "$5" "$6" "$7" "$8"
fi

if [ -n "$9" ]; then
$9 "${10}" "${11}" "${12}" "${13}"
fi

if [ -n "${14}" ]; then
${14} "${15}" "${16}" "${17}" "${18}"
fi

if [ -n "${19}" ]; then
${19} "${20}" "${21}" "${22}" "${23}"
fi

if [ -n "${24}" ]; then
${24} "${25}" "${26}" "${27}" "${28}"
fi

if [ -n "${29}" ]; then
${29} "${30}" "${31}" "${32}" "${33}"
fi

if [ -n "${34}" ]; then
${34} "${35}" "${36}" "${37}" "${38}"
fi

if [ -n "${39}" ]; then
${39} "${40}" "${41}" "${42}" "${43}"
fi

if [ -n "${44}" ]; then
${44} "${45}" "${46}" "${47}" "${48}"
fi

if [ -n "${49}" ]; then
${49} "${50}" "${51}" "${52}" "${53}"
fi

if [ -n "${54}" ]; then
${54} "${55}" "${56}" "${57}" "${58}"
fi

if [ -n "${59}" ]; then
${59} "${60}" "${61}" "${62}" "${63}"
fi

if [ -n "${64}" ]; then
${64} "${65}" "${66}" "${67}" "${68}"
fi

if [ -n "${69}" ]; then
${69} "${70}" "${71}" "${72}" "${73}"
fi

if [ -n "${74}" ]; then
${74} "${75}" "${76}" "${77}" "${78}"
fi

if [ -n "${79}" ]; then
${79} "${80}" "${81}" "${82}" "${83}"
fi


if [ "$ADDASYMMETRY" = true ]; then
last_row_number=$(tail -n 1 "POSCAR" | awk -v col=3 '{print $col}')
new_number=$(echo "$last_row_number + 0.0001" | bc)
sed -i "\$s/[^[:space:]]\+\$/ $new_number/" "POSCAR"
fi


if [ "$1" = "new" ]; then
x=x
else
cp $MAINDIR/mlffs/$1/ML_ABN ML_AB
fi


if [ -n "$OTHERINPUTFILES" ]; then
cp $OTHERINPUTFILES .
fi

buildkpoints $3
isymbackup=$ISYM
nwritebackup=$NWRITE
ISYM=0
NWRITE=1
buildincar
ISYM=$isymbackup
NWRITE=$nwritebackup
echo "#molecular dynamics:" >> INCAR
echo "IBRION = 0" >> INCAR
echo "TEBEG = $TEBEG" >> INCAR
echo "TEEND = $TEEND" >> INCAR
echo "POTIM = $POTIM" >> INCAR
echo "NSW = $NSW" >> INCAR
echo " " >> INCAR
echo "#thermostat & ensembles:" >> INCAR
echo "ISIF = $ISIF" >> INCAR
echo "MDALGO = $MDALGO" >> INCAR
echo "LANGEVIN_GAMMA = $LANGEVIN_GAMMA" >> INCAR
echo "LANGEVIN_GAMMA_L = $LANGEVIN_GAMMA_L" >> INCAR
echo " " >> INCAR
echo "#machine learned force fields:" >> INCAR
echo "ML_LMLFF = .TRUE." >> INCAR
if [ "$1" = "new" ]; then
echo "ML_ISTART = 0" >> INCAR
else
echo "ML_ISTART = 1" >> INCAR
fi
echo "ML_CTIFOR = $ML_CTIFOR" >> INCAR
echo "ML_ICRITERIA = $ML_ICRITERIA " >> INCAR
echo "ML_MB = $ML_MB " >> INCAR
echo "ML_MCONF = $ML_MCONF " >> INCAR
echo "ML_RCUT1 = $ML_RCUT1" >> INCAR
echo "ML_RCUT2 = $ML_RCUT2" >> INCAR
echo " " >> INCAR
buildpotcar
$VASP

if [ "$RMFILES" = true ]; then
rm -rf defaultshiftsandratios poscardescription ML_REG ML_HIS HILLSPOT ICONST CHG  CHGCAR  DOSCAR  EIGENVAL  IBZKPT  INCAR  KPOINTS  minipotcar  PCDAT  POSCAR  POTCAR  REPORT  vasprun.xml  WAVECAR
fi

isInFile=$(cat OUTCAR | grep -c "General timing and accounting information")
if [ $isInFile -eq 0 ]; then
ANERROROCCURED=true
fi


cp ML_ABN ML_FFN $MAINDIR/mlffs/$2



grep "BEEF " ML_LOGFILE > beef.dat

if [ -n "$METAGGA" ]; then
cat > mlff_forceerrors_gnup_${2}_${METAGGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in force (max) (eV/{\305})"
set term png
set output "mlff_forceerrors_${2}_${METAGGA}.png"
p 'beef.dat' u 2:4 w l title 'Estimated Bayesian error', 'beef.dat' u 2:6 w l title 'Threshold for Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_forceerrors_gnup_${2}_${METAGGA}
fi
else
cat > mlff_forceerrors_gnup_${2}_${GGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in force (max) (eV/{\305})"
set term png
set output "mlff_forceerrors_${2}_${GGA}.png"
p 'beef.dat' u 2:4 w l title 'Estimated Bayesian error', 'beef.dat' u 2:6 w l title 'Threshold for Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_forceerrors_gnup_${2}_${GGA}
fi
fi


if [ -n "$METAGGA" ]; then
cat > mlff_energyerrors_gnup_${2}_${METAGGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in energy (eV)"
set term png
set output "mlff_energyerrors_${2}_${METAGGA}.png"
p 'beef.dat' u 2:3 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_energyerrors_gnup_${2}_${METAGGA}
fi
else
cat > mlff_energyerrors_gnup_${2}_${GGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in energy (eV)"
set term png
set output "mlff_energyerrors_${2}_${GGA}.png"
p 'beef.dat' u 2:3 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_energyerrors_gnup_${2}_${GGA}
fi
fi


if [ -n "$METAGGA" ]; then
cat > mlff_stresserrors_gnup_${2}_${METAGGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  METAGGA = $METAGGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in stress (max) (kB)"
set term png
set output "mlff_stresserrors_${2}_${METAGGA}.png"
p 'beef.dat' u 2:7 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_stresserrors_gnup_${2}_${METAGGA}
fi
else
cat > mlff_stresserrors_gnup_${2}_${GGA} << EOF
set title "$2 MLFF Bayesian error estimates ;  GGA = $GGA, POTCAR = $POTCAR"
set encoding iso_8859_1
set xlabel "Molecular dynamics step"
set ylabel "Error in stress (max) (kB)"
set term png
set output "mlff_stresserrors_${2}_${GGA}.png"
p 'beef.dat' u 2:7 w l title 'Estimated Bayesian error',
EOF
if [ -n "$GNUPLOT" ]; then
$GNUPLOT mlff_stresserrors_gnup_${2}_${GGA}
fi
fi


arrayconf=($(grep 'Configuration num.' ML_ABN | tail -1))
confnum=${arrayconf[2]}


#if [ "$1" = "new" ]; then
#echo "    $2     $3     $POTCAR        $NSW          $TEBEG - $TEEND           $confnum     ($4)" >> $MAINDIR/mlffs/$2/traininghistory
#else
#cp $MAINDIR/mlffs/$1/traininghistory $MAINDIR/mlffs/$2/traininghistory
#oldconfnum=$(awk '{sum += $8} END {print sum}' $MAINDIR/mlffs/$1/traininghistory )
#let diffconfnum=$confnum-$oldconfnum
#echo "    $2     $3     $POTCAR        $NSW          $TEBEG - $TEEND           $diffconfnum     ($4)" >> $MAINDIR/mlffs/$2/traininghistory
#fi
#
#
#if [ "$PRINTOUTPUT" = true ]; then
#if [ "$UPDATEVARIABLES" = true ]; then
#  echo " "
#  echo " Training run has concluded. New MLFF has been stored under the name $name2"
#  echo " Complete training history: "
#  echo "   name     structure     POTCAR     # MD steps     temp. range (K)     # added conf."
#cat $MAINDIR/mlffs/$2/traininghistory
#  echo " Total number of configurations: $confnum "
#
#  echo " " >> $MAINDIR/output.txt
#  echo " Training run has concluded. New MLFF has been stored under the name $name2" >> $MAINDIR/output.txt
#  echo " Complete training history: " >> $MAINDIR/output.txt
#  echo "   name     structure     POTCAR     # MD steps     temp. range (K)     # added conf." >> $MAINDIR/output.txt
#cat $MAINDIR/mlffs/$2/traininghistory >> $MAINDIR/output.txt
#  echo " Total number of configurations: $confnum " >> $MAINDIR/output.txt
#fi
#fi


if [ "$1" = "new" ]; then
echo "    $2         $NSW         $TEBEG - $TEEND         $confnum " >> $MAINDIR/mlffs/$2/traininghistory
else
cp $MAINDIR/mlffs/$1/traininghistory $MAINDIR/mlffs/$2/traininghistory
oldconfnum=$(awk '{sum += $6} END {print sum}' $MAINDIR/mlffs/$1/traininghistory )
let diffconfnum=$confnum-$oldconfnum
echo "    $2         $NSW         $TEBEG - $TEEND         $diffconfnum " >> $MAINDIR/mlffs/$2/traininghistory
fi


if [ "$PRINTOUTPUT" = true ]; then
if [ "$UPDATEVARIABLES" = true ]; then
  echo " "
  echo " Training run has concluded. New MLFF has been stored under the name $name2"
  echo " Complete training history: "
  echo "   name          # MD steps       temp. range (K)       # added conf."
cat $MAINDIR/mlffs/$2/traininghistory
  echo " Total number of configurations: $confnum "

  echo " " >> $MAINDIR/output.txt
  echo " Training run has concluded. New MLFF has been stored under the name $name2" >> $MAINDIR/output.txt
  echo " Complete training history: " >> $MAINDIR/output.txt
  echo "   name          # MD steps       temp. range (K)       # added conf." >> $MAINDIR/output.txt
cat $MAINDIR/mlffs/$2/traininghistory >> $MAINDIR/output.txt
  echo " Total number of configurations: $confnum " >> $MAINDIR/output.txt
fi
fi



let secs=$SECONDS-$secs
let TOTALTIME=$TOTALTIME+$secs
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
if [ "$PRINTOUTPUT" = true ]; then
echo " "
echo " ellapsed time: $hrs h $mins min $secs s"
echo " " >> $MAINDIR/output.txt
echo " ellapsed time: $hrs h $mins min $secs s" >> $MAINDIR/output.txt
fi

if [ "$PRINTOUTPUT" = true ]; then
if [ "$ANERROROCCURED" = true ]; then
  echo " "
  echo " An ERROR occured during this calculation - please check what happened!"
  echo " " >> $MAINDIR/output.txt
  echo " An ERROR occured during this calculation - please check what happened!" >> $MAINDIR/output.txt
ANERROROCCURED=false
fi
fi

cd ..

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
buildincar () {

if [ -e INCAR ] ; then
rm INCAR
fi

cat >> INCAR << EOF

#starting parameters:
ISTART = $ISTART
ICHARG = $ICHARG

#writing parameters:
LWAVE = $LWAVE
LCHARG = $LCHARG
NWRITE =  $NWRITE

#electronic optimization:
ALGO = $ALGO
PREC = $PREC
NELM = $NELM
EDIFF = $EDIFF
#NBANDS = $NBANDS

LASPH = $LASPH
EOF

if [ -n "$METAGGA" ]; then
cat >> INCAR << EOF

METAGGA = $METAGGA
EOF
else
cat >> INCAR << EOF

GGA = $GGA
EOF
fi

if [ "$ALGO" = RPAR ]; then
cat >> INCAR << EOF

NOMEGA = $NOMEGA
EOF
fi

cat >> INCAR << EOF

#kpoint sampling:
ENCUT = $ENCUT
ISMEAR = $ISMEAR
SIGMA = $SIGMA
ISYM = $ISYM
KGAMMA = $KGAMMA
EOF

if [ -n "$KSPACING" ]; then
cat >> INCAR << EOF

KSPACING = $KSPACING
EOF
fi

cat >> INCAR << EOF

#magnetism:
ISPIN = $ISPIN
#MAGMOM = $MAGMOM

#performance optimization:
KPAR = $KPAR
NCORE = $NCORE
LREAL = $LREAL

#other incar tags:
EOF

echo " " >> INCAR
echo "$OTHERINCARTAGS" >> INCAR
echo " " >> INCAR

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
buildkpoints () {

if [ -e KPOINTS ] ; then
rm KPOINTS
fi


if [ "$MLFFBEIGAPPLIED" = false ]; then


if [ -n "$KSPACING" ]; then
x=x
else


if [ -n "$1" ] && [ "$1" -eq "$1" ] 2>/dev/null; then
cat >> KPOINTS << EOF
Regular ${1}x${1}x${1} k-point mesh
0
EOF
if [ "$KGAMMA" = .TRUE. ]; then
cat >> KPOINTS << EOF
Gamma
EOF
elif [ "$KGAMMA" = .FALSE. ]; then
cat >> KPOINTS << EOF
Monkhorst-Pack
EOF
fi
cat >> KPOINTS << EOF
$1 $1 $1
0 0 0
EOF

else
array=($1)
a=${array[0]}
b=${array[1]}
c=${array[2]}
if [ -n "$a" ] && [ "$a" -eq "$a" ] 2>/dev/null; then
cat >> KPOINTS << EOF
Regular ${a}x${b}x${c} k-point mesh
0
EOF
if [ "$KGAMMA" = .TRUE. ]; then
cat >> KPOINTS << EOF
Gamma
EOF
elif [ "$KGAMMA" = .FALSE. ]; then
cat >> KPOINTS << EOF
Monkhorst-Pack
EOF
fi
cat >> KPOINTS << EOF
$a $b $c
0 0 0
EOF

else
mkdir temp_kdsj
cd temp_kdsj
$1
cd ..
rm -r temp_kdsj
name="KPOINTS_$1"
kpts=`echo ${!name}`
cat >> KPOINTS << EOF
k-point mesh for $1 $STRUCTURE_TYPE
0
EOF
if [ "$KGAMMA" = .TRUE. ]; then
cat >> KPOINTS << EOF
Gamma
EOF
elif [ "$KGAMMA" = .FALSE. ]; then
cat >> KPOINTS << EOF
Monkhorst-Pack
EOF
fi
if [ "$STRUCTURE_TYPE" = molecule ]; then
cat >> KPOINTS << EOF
1 1 1
0 0 0
EOF
elif [ "$STRUCTURE_TYPE" = crystal ]; then
cat >> KPOINTS << EOF
$kpts $kpts $kpts
0 0 0
EOF
elif [ "$STRUCTURE_TYPE" = surface ]; then
name="VACUUM_SIZE_$1"
vacusizzze=`echo ${!name}`
if [ "$vacusizzze" = 0 ]; then
name="NUMBER_OF_LAYERS_$1"
nulayyyers=`echo ${!name}`
if [ "$nulayyyers" = $ATOMS_PER_SUBCELL ]; then
let zkpts=$kpts
else
let zkpts=1+$kpts*$SUPERCELL_FACTOR/$nulayyyers
fi
cat >> KPOINTS << EOF
$kpts $kpts $zkpts
0 0 0
EOF
else
cat >> KPOINTS << EOF
$kpts $kpts 1
0 0 0
EOF
fi
elif [ "$STRUCTURE_TYPE" = chain ]; then
cat >> KPOINTS << EOF
1 1 $kpts
0 0 0
EOF
fi
fi

fi


fi


else


cat >> KPOINTS << EOF
Minimal k-point mesh for MLFF
0
EOF
if [ "$KGAMMA" = .TRUE. ]; then
cat >> KPOINTS << EOF
Gamma
EOF
elif [ "$KGAMMA" = .FALSE. ]; then
cat >> KPOINTS << EOF
Monkhorst-Pack
EOF
fi
cat >> KPOINTS << EOF
1 1 1
0 0 0
EOF

fi


}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
buildpotcar () {

potarray=($POTCAR)
potential1=${potarray[0]}
potential2=${potarray[1]}
potential3=${potarray[2]}
potential4=${potarray[3]}
potential5=${potarray[4]}
potential6=${potarray[5]}
potential7=${potarray[6]}
potential8=${potarray[7]}
cat $ALLPOTCARS/$potential1/POTCAR $ALLPOTCARS/$potential2/POTCAR $ALLPOTCARS/$potential3/POTCAR $ALLPOTCARS/$potential4/POTCAR $ALLPOTCARS/$potential5/POTCAR $ALLPOTCARS/$potential6/POTCAR $ALLPOTCARS/$potential7/POTCAR $ALLPOTCARS/$potential8/POTCAR > POTCAR  2>&-

echo $POTCAR >> minipotcar

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
buildqpoints () {

if [ "$LATTICE_SYSTEM" = cubic ]; then

if [ "$BRAVAIS_LATTICE" = F ]; then
path=$2
if [ "$path" = defaultpath ]; then
path="G X U , K G L W X"
fi
cat > QPOINTS << EOF
k-points for bandstructure $path
251
line
reciprocal
EOF
array=($(echo $path))
value=${array[0]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = U ]; then
echo "0.250000  0.625000  0.625000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.375000  0.750000  0.375000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = W ]; then
echo "0.250000  0.750000  0.500000   1" >> QPOINTS
fi
total_number_of_characters=`echo $path |tr " " "\n" |wc -l`
total_number_of_separation_character=`echo $path | tr -cd '-' | wc -c`
let total_number_of_high_symmetry_points=$total_number_of_characters-$total_number_of_separation_character
let k=$total_number_of_characters-2
for high_symmetry_point in $(seq 1 1 $k); do
array=($(echo $path))
value=${array[$high_symmetry_point]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = U ]; then
echo "0.250000  0.625000  0.625000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.250000  0.625000  0.625000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.375000  0.750000  0.375000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.375000  0.750000  0.375000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = W ]; then
echo "0.250000  0.750000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.250000  0.750000  0.500000   1" >> QPOINTS
fi
done
let k=$total_number_of_characters-1
array=($(echo $path))
value=${array[$k]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = U ]; then
echo "0.250000  0.625000  0.625000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.375000  0.750000  0.375000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = W ]; then
echo "0.250000  0.750000  0.500000   1" >> QPOINTS
fi
for character in $(seq 0 1 $k); do
array=($(echo $path))
value=${array[$character]}
if [ "$value" = , ]; then
let line1=3*$character+2
let line2=3*$character+3
let line3=3*$character+4
sed ${line3}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line2}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line1}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
fi
done
fi

if [ "$BRAVAIS_LATTICE" = I ]; then
path=$2
if [ "$path" = defaultpath ]; then
path="G H P G N"
fi
cat > QPOINTS << EOF
k-points for bandstructure $path
251
line
reciprocal
EOF
array=($(echo $path))
value=${array[0]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "-0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = P ]; then
echo "0.250000  0.250000  0.205000   1" >> QPOINTS
elif [ "$value" = N ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
fi
total_number_of_characters=`echo $path |tr " " "\n" |wc -l`
total_number_of_separation_character=`echo $path | tr -cd '-' | wc -c`
let total_number_of_high_symmetry_points=$total_number_of_characters-$total_number_of_separation_character
let k=$total_number_of_characters-2
for high_symmetry_point in $(seq 1 1 $k); do
array=($(echo $path))
value=${array[$high_symmetry_point]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "-0.500000  0.500000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "-0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = P ]; then
echo "0.250000  0.250000  0.250000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.250000  0.250000  0.250000   1" >> QPOINTS
elif [ "$value" = N ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
fi
done
let k=$total_number_of_characters-1
array=($(echo $path))
value=${array[$k]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "-0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = P ]; then
echo "0.250000  0.250000  0.250000   1" >> QPOINTS
elif [ "$value" = N ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
fi
for character in $(seq 0 1 $k); do
array=($(echo $path))
value=${array[$character]}
if [ "$value" = , ]; then
let line1=3*$character+2
let line2=3*$character+3
let line3=3*$character+4
sed ${line3}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line2}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line1}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
fi
done
fi

if [ "$BRAVAIS_LATTICE" = P ]; then
path=$2
if [ "$path" = defaultpath ]; then
path="G X M G R"
fi
cat > QPOINTS << EOF
k-points for bandstructure $path
251
line
reciprocal
EOF
array=($(echo $path))
value=${array[0]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = R ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.500000  0.000000   1" >> QPOINTS
fi
total_number_of_characters=`echo $path |tr " " "\n" |wc -l`
total_number_of_separation_character=`echo $path | tr -cd '-' | wc -c`
let total_number_of_high_symmetry_points=$total_number_of_characters-$total_number_of_separation_character
let k=$total_number_of_characters-2
for high_symmetry_point in $(seq 1 1 $k); do
array=($(echo $path))
value=${array[$high_symmetry_point]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = R ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.500000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.500000  0.500000  0.000000   1" >> QPOINTS
fi
done
let k=$total_number_of_characters-1
array=($(echo $path))
value=${array[$k]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = R ]; then
echo "0.500000  0.500000  0.500000   1" >> QPOINTS
elif [ "$value" = X ]; then
echo "0.000000  0.500000  0.000000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.500000  0.000000   1" >> QPOINTS
fi
for character in $(seq 0 1 $k); do
array=($(echo $path))
value=${array[$character]}
if [ "$value" = , ]; then
let line1=3*$character+2
let line2=3*$character+3
let line3=3*$character+4
sed ${line3}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line2}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line1}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
fi
done
fi

fi

if [ "$LATTICE_SYSTEM" = hexagonal ]; then

if [ "$BRAVAIS_LATTICE" = P ]; then
path=$2
if [ "$path" = defaultpath ]; then
path="G K M G"
fi
cat > QPOINTS << EOF
k-points for bandstructure $path
251
line
reciprocal
EOF
array=($(echo $path))
value=${array[0]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = A ]; then
echo "0.000000  0.000000  0.500000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.666667  0.333333  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "0.666667  0.333333  0.500000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.000000  0.500000   1" >> QPOINTS
fi
total_number_of_characters=`echo $path |tr " " "\n" |wc -l`
total_number_of_separation_character=`echo $path | tr -cd '-' | wc -c`
let total_number_of_high_symmetry_points=$total_number_of_characters-$total_number_of_separation_character
let k=$total_number_of_characters-2
for high_symmetry_point in $(seq 1 1 $k); do
array=($(echo $path))
value=${array[$high_symmetry_point]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = A ]; then
echo "0.000000  0.000000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.000000  0.000000  0.500000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.666667  0.333333  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.666667  0.333333  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "0.666667  0.333333  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.666667  0.333333  0.500000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.000000  0.000000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.500000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.000000  0.500000   1" >> QPOINTS
echo " " >> QPOINTS
echo "0.500000  0.000000  0.500000   1" >> QPOINTS
fi
done
let k=$total_number_of_characters-1
array=($(echo $path))
value=${array[$k]}
if [ "$value" = G ]; then
echo "0.000000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = A ]; then
echo "0.000000  0.000000  0.500000   1" >> QPOINTS
elif [ "$value" = K ]; then
echo "0.666667  0.333333  0.000000   1" >> QPOINTS
elif [ "$value" = H ]; then
echo "0.666667  0.333333  0.500000   1" >> QPOINTS
elif [ "$value" = M ]; then
echo "0.500000  0.000000  0.000000   1" >> QPOINTS
elif [ "$value" = L ]; then
echo "0.500000  0.000000  0.500000   1" >> QPOINTS
fi
for character in $(seq 0 1 $k); do
array=($(echo $path))
value=${array[$character]}
if [ "$value" = , ]; then
let line1=3*$character+2
let line2=3*$character+3
let line3=3*$character+4
sed ${line3}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line2}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
sed ${line1}d QPOINTS >> temp
rm QPOINTS
mv temp QPOINTS
fi
done
fi

fi

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readenmax () {

mkdir temp
cd temp
buildpotcar
arrayenmax1=($(grep -m1 ENMAX POTCAR |tail -1))
arrayenmax2=($(grep -m2 ENMAX POTCAR |tail -1))
arrayenmax3=($(grep -m3 ENMAX POTCAR |tail -1))
arrayenmax4=($(grep -m4 ENMAX POTCAR |tail -1))
arrayenmax5=($(grep -m5 ENMAX POTCAR |tail -1))
arrayenmax6=($(grep -m6 ENMAX POTCAR |tail -1))
arrayenmax7=($(grep -m7 ENMAX POTCAR |tail -1))
arrayenmax8=($(grep -m8 ENMAX POTCAR |tail -1))
ENMAXS=( ${arrayenmax1[2]%?} ${arrayenmax2[2]%?} ${arrayenmax3[2]%?} ${arrayenmax4[2]%?} ${arrayenmax5[2]%?} ${arrayenmax6[2]%?} ${arrayenmax7[2]%?} ${arrayenmax8[2]%?} )
ENMAX=${ENMAXS[0]}
for j in ${ENMAXS[@]}; do
if [ $(echo "$j > $ENCUT" | bc) -eq 1 ]; then
ENMAX=$j
fi
done
cd ..
rm -r temp

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setpotcar () {

POTCAR="$1 $2 $3 $4 $5 $6 $7 $8"

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
plotxydata () {

cat > graph.dat << EOF
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
EOF

local data=$(cat $1)

local xmin=$(echo "$data" | awk '{print $1}' | sort -n | head -n 1)
local xmax=$(echo "$data" | awk '{print $1}' | sort -n | tail -n 1)
local ymin=$(echo "$data" | awk '{print $2}' | sort -n | head -n 1)
local ymax=$(echo "$data" | awk '{print $2}' | sort -n | tail -n 1)

local xscale=86
local yscale=8
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($2-ymin)/(ymax-ymin))*yscale)}')

while read -r line; do

local x=$(echo "$line" | awk '{print $1}')
local y=$(echo "$line" | awk '{print $2}')

let yvjn=-$y+9

line=$(sed -n "${yvjn}p" graph.dat)
newline=${line:0:x}x${line:x+1}
sed -i "${yvjn}s/.*/$newline/" graph.dat
    
done <<< "$data"

let fvjndvj=$yscale+1
for ijknvf in $(seq 1 1 $fvjndvj) ; do
line="$(sed -r -n "${ijknvf}p" graph.dat)"
echo " |" "$line""|" >> graph.dattt
done

cp graph.dattt graph.dat
rm graph.dattt

echo " " >> graph.datt
echo " ----------------------------------- preview graph: ----------------------------------------" >> graph.datt
cat graph.dat >> graph.datt
cp graph.datt graph.dat
echo " -------------------------------------------------------------------------------------------" >> graph.dat

if [ "$PRINTOUTPUT" = true ]; then
cat graph.dat
cat graph.dat >> $MAINDIR/output.txt
fi

rm graph.dat
rm graph.datt

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
plotxydata+ () {

cat > graph.dat << EOF
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
EOF


numberofcolumns=$(awk '{print NF; exit}' $1)

xscale=86
yscale=16

local data=$(cat $1)

local xmin=$(echo "$data" | awk '{print $1}' | sort -n | head -n 1)
local xmax=$(echo "$data" | awk '{print $1}' | sort -n | tail -n 1)

if [ "$numberofcolumns" = 2 ]; then
local ymin=$(echo "$data" | awk '{print $2}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 3 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 4 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 5 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 6 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5, $6}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 7 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 8 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 9 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9}' | tr ' ' '\n'| sort -n | tail -1)
fi

if [ "$numberofcolumns" = 10 ]; then
local ymin=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9, $10}' | tr ' ' '\n'| sort -n | head -1)
local ymax=$(echo "$data" | awk '{print $2, $3, $4, $5, $6, $7, $8, $9, $10}' | tr ' ' '\n'| sort -n | tail -1)
fi



symbolarray=( x o u n c s z m w )
for column in $(seq 2 1 $numberofcolumns) ; do
let vjnsjvfjvn=$column-2
symbol=${symbolarray[$vjnsjvfjvn]}


local data=$(cat $1)


if [ "$symbol" = x ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($2-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = o ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($3-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = u ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($4-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = n ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($5-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = c ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($6-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = s ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($7-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = z ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($8-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = m ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($9-ymin)/(ymax-ymin))*yscale)}')
fi

if [ "$symbol" = w ]; then
data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($10-ymin)/(ymax-ymin))*yscale)}')
fi


while read -r line; do

local x=$(echo "$line" | awk '{print $1}')
local y=$(echo "$line" | awk '{print $2}')

let yvjn=$yscale-$y+1

line=$(sed -n "${yvjn}p" graph.dat)
newline=${line:0:x}$symbol${line:x+1}
sed -i "${yvjn}s/.*/$newline/" graph.dat
    
done <<< "$data"

let fvjndvj=$yscale+1
for ijknvf in $(seq 1 1 $fvjndvj) ; do
line="$(sed -r -n "${ijknvf}p" graph.dat)"
if [ "$column" = $numberofcolumns ]; then
echo " |" "$line""|" >> graph.dattt
else
echo "$line" >> graph.dattt
fi
done

cp graph.dattt graph.dat
rm graph.dattt


done


echo " " >> graph.datt
echo " ----------------------------------- preview graph: ----------------------------------------" >> graph.datt
cat graph.dat >> graph.datt
cp graph.datt graph.dat
echo " -------------------------------------------------------------------------------------------" >> graph.dat

if [ "$PRINTOUTPUT" = true ]; then
cat graph.dat
cat graph.dat >> $MAINDIR/output.txt
fi

rm graph.dat
rm graph.datt

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
plotxydata++ () {

cat > graph.dat << EOF
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
EOF


jnvsgjns=0
for sfvnwvf in pldir_* ; do
let jnvsgjns=$jnvsgjns+1
cd $sfvnwvf 
cat $1 >> ../datatemp
cd ..
done

local data=$(cat datatemp)

local xmin=$(echo "$data" | awk '{print $1}' | sort -n | head -n 1)
local xmax=$(echo "$data" | awk '{print $1}' | sort -n | tail -n 1)
local ymin=$(echo "$data" | awk '{print $2}' | sort -n | head -n 1)
local ymax=$(echo "$data" | awk '{print $2}' | sort -n | tail -n 1)

rm datatemp

local xscale=86
local yscale=24


fvjhwjvghkb=0
for sfvnwvf in pldir_* ; do
let fvjhwjvghkb=$fvjhwjvghkb+1
cd $sfvnwvf
cp $1 ..
cd ..

if [ "$fvjhwjvghkb" = "1" ]; then
symbol="x"
fi
if [ "$fvjhwjvghkb" = "2" ]; then
symbol="o"
fi
if [ "$fvjhwjvghkb" = "3" ]; then
symbol="u"
fi
if [ "$fvjhwjvghkb" = "4" ]; then
symbol="n"
fi
if [ "$fvjhwjvghkb" = "5" ]; then
symbol="c"
fi
if [ "$fvjhwjvghkb" = "6" ]; then
symbol="s"
fi
if [ "$fvjhwjvghkb" = "7" ]; then
symbol="z"
fi
if [ "$fvjhwjvghkb" = "8" ]; then
symbol="m"
fi
if [ "$fvjhwjvghkb" = "9" ]; then
symbol="w"
fi

local data=$(cat $1)

data=$(echo "$data" | awk -v xmin=$xmin -v xmax=$xmax -v ymin=$ymin -v ymax=$ymax -v xscale=$xscale -v yscale=$yscale '{print int((($1-xmin)/(xmax-xmin))*xscale), int((($2-ymin)/(ymax-ymin))*yscale)}')

while read -r line; do

local x=$(echo "$line" | awk '{print $1}')
local y=$(echo "$line" | awk '{print $2}')

let yvjn=$yscale-$y+1

line=$(sed -n "${yvjn}p" graph.dat)
newline=${line:0:x}$symbol${line:x+1}
sed -i "${yvjn}s/.*/$newline/" graph.dat

done <<< "$data"

let fvjndvj=$yscale+1
for ijknvf in $(seq 1 1 $fvjndvj) ; do
line="$(sed -r -n "${ijknvf}p" graph.dat)"
if [ "$jnvsgjns" = $fvjhwjvghkb ]; then
echo " |" "$line""|" >> graph.dattt
else
echo "$line" >> graph.dattt
fi
done

cp graph.dattt graph.dat
rm graph.dattt


rm $1

done



echo " " >> graph.datt
echo " ----------------------------------- preview graph: ----------------------------------------" >> graph.datt
cat graph.dat >> graph.datt
cp graph.datt graph.dat
echo " -------------------------------------------------------------------------------------------" >> graph.dat

if [ "$PRINTOUTPUT" = true ]; then
cat graph.dat
cat graph.dat >> $MAINDIR/output.txt
fi

rm graph.dat
rm graph.datt



}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readenergyvariables () {

source $1
energyvariables

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readincarvariables () {

source $1
incarvariables

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readkpointsvariables () {

source $1
kpointsvariables

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readstructuralvariables () {

source $1
structuralvariables

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
readvariables () {

source $1
incarvariables
kpointsvariables
structuralvariables
readenergyvariables

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setdefaults () {

UPDATEVARIABLES=true
PRINTOUTPUT=true
RMFILES=false


MAINENE=1

RELREPETITIONS=1

RECALCBULK=true
RECALCSURFACE=true


ADDASYMMETRY=true




MLFFBEIGAPPLIED=false

setincardefaults  2>&-
setkpointsdefaults  2>&-
setstructuraldefaults  2>&-
setenergydefaults  2>&-


}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setenergydefaults () {

for str in $allcrystals ; do
str="${str##*/}"
name="ENERGY_$str"
eval $name=NaN
done

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="ENERGY_$str"
eval $name=NaN
done

for str in $allsurfaces ; do
str="${str##*/}"
name="ENERGY_$str"
eval $name=NaN
done

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="ENERGY_$str"
eval $name=NaN
done

for str in $allmolecules ; do
str="${str##*/}"
name="ENERGY_$str"
eval $name=NaN
done

#for str in $allmolecules_supercells ; do
#str="${str##*/}"
#name="ENERGY_$str"
#eval $name=NaN
#done

}




 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setincardefaults () {

natomsss=`echo $ATOMS_PER_SUBCELL \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR \* $SUPERCELL_FACTOR | bc -l`

#starting parameters:
ISTART=0
ICHARG=2

#writing parameters:
LWAVE=".FALSE."
LCHARG=".FALSE."
NWRITE=2

#electronic optimization:
ALGO="Normal"
PREC="Normal"
NELM=100
EDIFF="1E-06"
NBANDS=48

GGA="PE"
METAGGA=""
LASPH=".TRUE."

NOMEGA=12

#kpoint sampling:
ENCUT=400
ISMEAR=1
SIGMA=0.2
ISYM=2
KGAMMA=".TRUE."

#magnetism:
ISPIN=1
MAGMOM="$natomsss*1.0"

#performance optimization:
KPAR=1
NCORE=1
LREAL=.FALSE.

#defaults for relaxation:
IBRION=2
EDIFFG=-0.001        #EDIFF="1E-05"
NSW=100
POTIM=0.5
ISIF=3

#defaults for DOS:
NEDOS=1001
EMAX=
EMIN=

#defaults for MD:
TEBEG=100
TEEND=500

#defaults for thermostat & ensembles:
MDALGO=3
LANGEVIN_GAMMA="1*5.0"
LANGEVIN_GAMMA_L="1*5.0"

#defaults for machine learned force fields:
ML_LMLFF=".TRUE."
ML_ISTART=0
ML_CTIFOR=0.002
ML_ICRITERIA=1
ML_MB=5000
ML_MCONF=5000
ML_RCUT1=8.0
ML_RCUT2=5.0



}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setkpointsdefaults () {

for str in $allcrystals ; do
str="${str##*/}"
name="KPOINTS_$str"
eval $name=12
done

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="KPOINTS_$str"
eval $name=6
done

for str in $allsurfaces ; do
str="${str##*/}"
name="KPOINTS_$str"
eval $name=12
done

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="KPOINTS_$str"
eval $name=6
done

}

 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
setstructuraldefaults () {

for str in $allcrystals ; do

str="${str##*/}"
name="VOLUME_$str"
eval $name=15

#mkdir temppp
#cd temppp
#$str
#source defaultshiftsandratios
#defaultshiftsandratios
#cd ..
#rm -r temppp

done


for str in $allcrystals_supercells ; do

str="${str##*/}"
name="VOLUME_$str"
eval $name=15

name="SUPERCELL_FACTOR_$str"
eval $name=2

#mkdir temppp
#cd temppp
#$str
#source defaultshiftsandratios
#defaultshiftsandratios
#cd ..
#rm -r temppp

done


for str in $allsurfaces ; do

str="${str##*/}"
name="VOLUME_$str"
eval $name=15

name="NUMBER_OF_LAYERS_$str"
eval $name=6

name="VACUUM_SIZE_$str"
eval $name=10

name="SELECTIVE_DYNAMICS_DEPTH_$str"
eval $name=2

name="LAYER_HIGHTS_$str"
eval $name=defaulthights

#mkdir temppp
#cd temppp
#$str
#source defaultshiftsandratios
#defaultshiftsandratios
#cd ..
#rm -r temppp

done


for str in $allsurfaces_supercells ; do

str="${str##*/}"
name="VOLUME_$str"
eval $name=15

name="SUPERCELL_FACTOR_$str"
eval $name=2

name="NUMBER_OF_LAYERS_$str"
eval $name=6

name="VACUUM_SIZE_$str"
eval $name=10

name="SELECTIVE_DYNAMICS_DEPTH_$str"
eval $name=2

name="LAYER_HIGHTS_$str"
eval $name=defaulthights

#mkdir temppp
#cd temppp
#$str
#source defaultshiftsandratios
#defaultshiftsandratios
#cd ..
#rm -r temppp

done


for str in $allmolecules ; do

#str="${str##*/}"
#mkdir temppp
#cd temppp
#$str
#source defaultatomicpositions
#defaultatomicpositions
#cd ..
#rm -r temppp

name="MOLECULE_CELL_SIZE_$str"
eval $name=10

name="MOLECULE_ASYMETRY_$str"
eval $name=1

name="ADSORPTION_DISTANCE_$str"
eval $name=2

done


#for str in $allmolecules_supercells ; do

#str="${str##*/}"
#mkdir temppp
#cd temppp
#$str
#source defaultatomicpositions
#defaultatomicpositions
#cd ..
#rm -r temppp

#name="MOLECULE_CELL_SIZE_$str"
#eval $name=10

#name="MOLECULE_ASYMETRY_$str"
#eval $name=1

#name="ADSORPTION_DISTANCE_$str"
#eval $name=2

#name="SUPERCELL_FACTOR_$str"
#eval $name=2

#done



}


 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storecontcar () {                  # storecontcar $directorywherecontisstored $name

if [ -f $MAINDIR/contcars ] ; then
x=x
else
mkdir $MAINDIR/contcars
fi

rm $MAINDIR/contcars/$2

touch $MAINDIR/contcars/$2
chmod +x $MAINDIR/contcars/$2

echo "$2 () {" >> $MAINDIR/contcars/$2
echo " " >> $MAINDIR/contcars/$2
echo "cat > poscardescription << EOF"  >> $MAINDIR/contcars/$2

cat $1/poscardescription >> $MAINDIR/contcars/$2

echo "EOF"  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2
echo "source poscardescription "  >> $MAINDIR/contcars/$2
echo "poscardescription "  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2
echo "cat > defaultshiftsandratios << EOF"  >> $MAINDIR/contcars/$2

cat $1/defaultshiftsandratios >> $MAINDIR/contcars/$2

echo "EOF"  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2

echo "cat > POSCAR << EOF"  >> $MAINDIR/contcars/$2
cat $1/CONTCAR >> $MAINDIR/contcars/$2
echo "EOF"  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2

echo "if [ \"\$READSHIFTS\" = true ]; then"  >> $MAINDIR/contcars/$2
echo "cat > readshifts << EOF"  >> $MAINDIR/contcars/$2
echo "readshifts () { "  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2

cat $1/readshifts >> $MAINDIR/contcars/$2

echo " "  >> $MAINDIR/contcars/$2

echo "x=x "  >> $MAINDIR/contcars/$2

echo " "  >> $MAINDIR/contcars/$2
echo "} "  >> $MAINDIR/contcars/$2
echo "EOF"  >> $MAINDIR/contcars/$2
echo "fi"  >> $MAINDIR/contcars/$2
echo " "  >> $MAINDIR/contcars/$2

echo "} "  >> $MAINDIR/contcars/$2



source $MAINDIR/contcars/$2

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storeenergyvariables () {

echo "energyvariables () {" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

echo "MAINENE=1" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals ; do
str="${str##*/}"
name="ENERGY_$str"
ene=`echo ${!name}`
echo "ENERGY_$str=$ene" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="ENERGY_$str"
ene=`echo ${!name}`
echo "ENERGY_$str=$ene" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="ENERGY_$str"
ene=`echo ${!name}`
echo "ENERGY_$str=$ene" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="ENERGY_$str"
ene=`echo ${!name}`
echo "ENERGY_$str=$ene" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1
echo "}" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storeincarvariables () {

cat > $MAINDIR/allvariables/$1 << EOF

incarvariables () {

ISTART=$ISTART
ICHARG=$ICHARG
LWAVE=$LWAVE
LCHARG=$LCHARG
NWRITE=$NWRITE
PREC=$PREC
ALGO=$ALGO
NELM=$NELM
EDIFF=$EDIFF
GGA=$GGA
METAGGA=$METAGGA
LASPH=$LASPH
NOMEGA=$NOMEGA
ENCUT=$ENCUT
ISMEAR=$ISMEAR
SIGMA=$SIGMA
ISYM=$ISYM
KGAMMA=$KGAMMA
ISPIN=$ISPIN
MAGMOM=$MAGMOM
KPAR=$KPAR
NCORE=$NCORE
LREAL=$LREAL
#for relaxations:
IBRION=$IBRION
EDIFFG=$EDIFFG
NSW=$NSW
POTIM=$POTIM
ISIF=$ISIF
#for DOS:
NEDOS=$NEDOS
EMAX=$EMAX
EMIN=$EMIN
#for MD:
TEBEG=$TEBEG
TEEND=$TEEND
#for thermostat & ensembles:
MDALGO=$MDALGO
LANGEVIN_GAMMA="$LANGEVIN_GAMMA"
LANGEVIN_GAMMA_L="$LANGEVIN_GAMMA_L"
#for machine learned force fields:
ML_LMLFF=$ML_LMLFF
ML_ISTART=$ML_ISTART
ML_CTIFOR=$ML_CTIFOR
ML_ICRITERIA=$ML_ICRITERIA
ML_RCUT1=$ML_RCUT1
ML_RCUT2=$ML_RCUT2

KSPACING=$KSPACING

}
EOF

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storekpointsvariables () {

echo "kpointsvariables () {" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals ; do
str="${str##*/}"
name="KPOINTS_$str"
kpts=`echo ${!name}`
echo "KPOINTS_$str=$kpts" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="KPOINTS_$str"
kpts=`echo ${!name}`
echo "KPOINTS_$str=$kpts" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="KPOINTS_$str"
kpts=`echo ${!name}`
echo "KPOINTS_$str=$kpts" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="KPOINTS_$str"
kpts=`echo ${!name}`
echo "KPOINTS_$str=$kpts" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1
echo "}" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

}


 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storestructuralvariables () {

echo "structuralvariables () {" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals ; do
str="${str##*/}"
name="VOLUME_$str"
vol=`echo ${!name}`
echo "VOLUME_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="VOLUME_$str"
vol=`echo ${!name}`
echo "VOLUME_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
name="SUPERCELL_FACTOR_$str"
fact=`echo ${!name}`
echo "SUPERCELL_FACTOR_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
cd ..
rm -r temppp
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
cd ..
rm -r temppp
done


echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
for i in $(seq 1 1 $NUMBER_OF_SHIFTS) ; do
name="SHIFT_${str}_${i}"
shift=`echo ${!name}`
echo "SHIFT_${str}_${i}=$shift" >> $MAINDIR/allvariables/$1
done
cd ..
rm -r temppp
done


echo " " >> $MAINDIR/allvariables/$1

for str in $allcrystals_supercells ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
for i in $(seq 1 1 $NUMBER_OF_SHIFTS) ; do
name="SHIFT_${str}_${i}"
shift=`echo ${!name}`
echo "SHIFT_${str}_${i}=$shift" >> $MAINDIR/allvariables/$1
done
cd ..
rm -r temppp
done





echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="VOLUME_$str"
vol=`echo ${!name}`
echo "VOLUME_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="NUMBER_OF_LAYERS_$str"
vol=`echo ${!name}`
echo "NUMBER_OF_LAYERS_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="VACUUM_SIZE_$str"
vol=`echo ${!name}`
echo "VACUUM_SIZE_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
name="SELECTIVE_DYNAMICS_DEPTH_$str"
vol=`echo ${!name}`
echo "SELECTIVE_DYNAMICS_DEPTH_$str=$vol" >> $MAINDIR/allvariables/$1
done

for str in $allsurfaces ; do
str="${str##*/}"
name="LAYER_HIGHTS_$str"
vol=`echo ${!name}`
echo "LAYER_HIGHTS_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="VOLUME_$str"
vol=`echo ${!name}`
echo "VOLUME_$str=$vol" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="SUPERCELL_FACTOR_$str"
fact=`echo ${!name}`
echo "SUPERCELL_FACTOR_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="NUMBER_OF_LAYERS_$str"
fact=`echo ${!name}`
echo "NUMBER_OF_LAYERS_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="VACUUM_SIZE_$str"
fact=`echo ${!name}`
echo "VACUUM_SIZE_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="SELECTIVE_DYNAMICS_DEPTH_$str"
fact=`echo ${!name}`
echo "SELECTIVE_DYNAMICS_DEPTH_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
name="LAYER_HIGHTS_$str"
fact=`echo ${!name}`
echo "LAYER_HIGHTS_$str=$fact" >> $MAINDIR/allvariables/$1
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
cd ..
rm -r temppp
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
if [ "$LATTICE_SYSTEM" = hexagonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
if [ "$LATTICE_SYSTEM" = tetragonal ]; then
name="C_A_RATIO_$str"
ratio=`echo ${!name}`
echo "C_A_RATIO_$str=$ratio" >> $MAINDIR/allvariables/$1
fi
cd ..
rm -r temppp
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
for i in $(seq 1 1 $NUMBER_OF_SHIFTS) ; do
name="SHIFT_${str}_${i}"
shift=`echo ${!name}`
echo "SHIFT_${str}_${i}=$shift" >> $MAINDIR/allvariables/$1
done
cd ..
rm -r temppp
done

echo " " >> $MAINDIR/allvariables/$1

for str in $allsurfaces_supercells ; do
str="${str##*/}"
mkdir temppp
cd temppp
$str
for i in $(seq 1 1 $NUMBER_OF_SHIFTS) ; do
name="SHIFT_${str}_${i}"
shift=`echo ${!name}`
echo "SHIFT_${str}_${i}=$shift" >> $MAINDIR/allvariables/$1
done
cd ..
rm -r temppp
done



echo " " >> $MAINDIR/allvariables/$1
echo "}" >> $MAINDIR/allvariables/$1
echo " " >> $MAINDIR/allvariables/$1

}


 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
storevariables () {

if [ -f $MAINDIR/allvariables ] ; then
x=x
else
mkdir $MAINDIR/allvariables
fi

storeincarvariables $1
storekpointsvariables $1
storestructuralvariables $1
storeenergyvariables $1

}
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
 
transfercontcars () {

cp $1/contcars/* $MAINDIR/contcars

for contc in $MAINDIR/contcars/* ; do
source $contc
contc="${contc##*/}"
done

}
 
 
 
 
 
 
########################################################################################### 
########################################################################################### 
########################################################################################### 
 
