Example: Mixing DFT functionals
*******************************

We consider a system of two weakly bonded molecules, namely NH3 and
N2. We will use a GGA for the intra molecular interactions and LDA for
the intermolecular one.

We look at two bond lengths, an N-H bond within the NH3 molecule, this
is the "intra" bond.

The other is the bond from the N in NH3 to an N atom in the N2
molecule: the "inter" bond.

First we run the whole system with LDA and GGA, and finally with the
hybrid engine.

The result for the hybrid calculation is that the "inter" bond has the
value of the GGA calculation, whereas the "intra" one is equal to the
LDA calculated one.

The energy expression used in the hybrid calculation is

   E^\text{hybrid} = E^\text{LDA/*} + E^\text{GGA/NH3} -
   E^\text{LDA/NH3}  + E^\text{GGA/N2} - E^\text{LDA/N2}

Remember that the region * indicates the whole system, i.e. NH3 + N2.

"Download MixingDFTFunctionals.run"

   #!/bin/sh

   intera1=1
   intera2=5

   intraa1=5
   intraa2=6

   report=adf.report

   echo "We compare for two weakly coupled systems an inter and intra bond length" > $report
   echo "using several methods" >> $report
   echo "" >> $report
   echo "method    d-inter   d-intra" >> $report

   bas=TZP

   system=AmmoniaN2

   export AMS_JOBNAME=$system.lda

   rm -rf $AMS_JOBNAME.results

   $AMSBIN/ams<<EOF

   Task GeometryOptimization

   GeometryOptimization 
       Convergence Gradients=1e-5
   end

   System
     Atoms
       N      -1.57871800      -0.04661100       0.00000000 region=one
       H      -2.15862100       0.13639600      -0.80956500 region=one
       H      -2.15862100       0.13639600       0.80956500 region=one
       H      -0.84947100       0.65819300       0.00000000 region=one
       N       1.57871800       0.04661100       0.00000000 region=two
       N       1.03629999      -1.31580113      -0.10254699 region=two
     End
     GuessBonds True
   end


   Engine adf
      Basis Type=$bas
   EndEngine


   EOF

   dInter=`$AMSBIN/amsreport $AMS_JOBNAME.results/adf.rkf -r distance#$intera1#$intera2`
   dIntra=`$AMSBIN/amsreport $AMS_JOBNAME.results/adf.rkf -r distance#$intraa1#$intraa2`

   echo "lda    $dInter $dIntra" >> $report



   export AMS_JOBNAME=$system.gga

   rm -rf $AMS_JOBNAME.results

   $AMSBIN/ams<<EOF

   Task GeometryOptimization

   GeometryOptimization 
       Convergence Gradients=1e-5
   end

   LoadSystem
     File $system.lda.results/adf.rkf
   End


   Engine adf
      xc gga=pbe       
      Basis Type=$bas
   EndEngine


   EOF

   dInter=`$AMSBIN/amsreport $AMS_JOBNAME.results/adf.rkf -r distance#$intera1#$intera2`
   dIntra=`$AMSBIN/amsreport $AMS_JOBNAME.results/adf.rkf -r distance#$intraa1#$intraa2`

   echo "gga    $dInter $dIntra" >> $report



   export AMS_JOBNAME=$system.hybrid

   rm -rf $AMS_JOBNAME.results

   $AMSBIN/ams<<EOF

   Task GeometryOptimization

   GeometryOptimization 
       Convergence Gradients=1e-5
   end

   LoadSystem
     File $system.lda.results/adf.rkf
   End

   Engine Hybrid
       Energy
           Term Factor=1.0   Region=*    EngineID=adf-lda
           Term Factor=-1.0  Region=one  EngineID=adf-lda
           Term Factor=1.0   Region=one  EngineID=adf-gga
           Term Factor=-1.0  Region=two  EngineID=adf-lda
           Term Factor=1.0   Region=two  EngineID=adf-gga
       End
           
       Engine adf adf-lda
           Basis Type=$bas
       EndEngine

       Engine adf adf-gga
          xc gga=pbe       
           Basis Type=$bas
       EndEngine

    EndEngine

   EOF

   dInter=`$AMSBIN/amsreport $AMS_JOBNAME.results/hybrid.rkf -r distance#$intera1#$intera2`
   dIntra=`$AMSBIN/amsreport $AMS_JOBNAME.results/hybrid.rkf -r distance#$intraa1#$intraa2`

   echo "hybrid $dInter $dIntra" >> $report

   echo "start of report"
   cat $report
   echo "end of report"
