# Example: geometry optimizations: automations¶

Download DFTBAutomations.run

#!/bin/bash

# the System is extremely artificial but the calculation points out something useful

# The system has two CO molecules, one of which is compressed.
# We freeze the coordinates of the compressed CO molecules

# We define a gradient dependent electronic temperature (excluding the gradient of the constrained atoms)
# When far from convergence a higher value is used to ease SCF convergence (not relevant to this system)
# When the gradients become small the temperature is lowered, so that is will have negligible influence on the energy

# Here we let on purpose not converge the geometry optimization
# The final calculation should be performed as a normal single point and we explicitly set in band the ElectronicTemperature to 0.001

report=report.txt

echo "We use a gradient dependent KT value (finite electronic temperature)" > $report printf "\nThe value of kT gets progressively lower during the optimization\n\n" >>$report

printf "\nFor two optimizers we do 3 steps and they do not converge. Yet the last single point should be done at KTlow=0.001\n\n" >> $report targetKT=0.001 system=test for optim in Quasi-Newton FIRE do for automation in yes do export AMS_JOBNAME=$system.optim=$optim.automation=$automation

rm -rf $AMS_JOBNAME.results$AMSBIN/ams<<EOF

EngineDebugging NeverQuiet=yes

# log
#   debug AutomationInteractionModule
# end

GeometryOptimization
Method $optim MaxIterations 2 EngineAutomations Enabled$automation
Gradient variable=Occupation%KT InitialValue=0.01 FinalValue=$targetKT HighGradient=0.1 LowGradient=1.0e-3 Iteration variable=SCC%Converge%Charge InitialValue=1.0e-3 FinalValue=1.0e-8 FirstIteration=0 LastIteration=1 End end Constraints Atom 3 Atom 4 End System Atoms C 0.0 0.0 0.0 O 1.13 0.0 0.0 C 0.0 5.0 0.0 O 1.0 5.0 0.0 End End Engine DFTB Occupation kT=$targetKT
EndEngine

EOF

echo "kT series for optimizer: $optim" >>$report
grep "temperature kT" $AMS_JOBNAME.results/ams.log | awk '{print$NF}' >> $report echo "(the last kT should be 0.001)" >>$report
echo "">>$report echo "Converge%charge for optimizer:$optim" >> $report grep "setting SCC%Converge%Charge to"$AMS_JOBNAME.results/ams.log | awk '{print $NF}' >>$report
# echo "(the last value should be 1.0e-8)" >> $report echo "">>$report

done
done

echo "begin report"
cat \$report
echo "end report"