[molpro-user] Optimizing the squared energy difference of distinct states with molpro
Dr Seth Olsen
s.olsen1 at uq.edu.au
Thu Nov 17 06:51:46 GMT 2005
Hi Molpro-Users,
I found an example after reading the manual more, the correct syntax is
to add the 'ADD' or 'SCALE' cards immedieately after each 'force' card,
and not after the 'cpmcscf' card. It does not seem to matter too much,
though, for this test. I could not get it to converge satisfactorily,
even after much testing with scale factors, etc. The final output deck
(which didn't seem to do the trick) looked like this:
***
memory,30,m
gprint,orbitals,civector
file,1,ethylenediffsqopt.int
file,2,ethylenediffsqopt.wfn
geomtyp=xyz
basis=6-31G*
geometry,{nosymm,noorient
6
ethylene
C 0.000000 0.000000 0.000000
C 0.000000 0.000000 1.400000
H 0.943102 0.000100 -0.544500
H -0.943102 0.000100 -0.544500
H 0.000000 -0.943102 1.879500
H 0.000000 0.943102 1.879500
}
rhf
wf,16,1,0
show,cpustep
show,wallstep
maxstep=100
do i=1,maxstep
mcscf
occ,9
closed,7
state,2
weight,1,1
show,energy(1)
show,energy(2)
ediff=energy(2)-energy(1)
scfac=10*$ediff
fac1=$scfac*energy(1)
fac2=$scfac*energy(2)
mcscf
occ,9
closed,7
state,2
weight,1,1
cpmcscf,grad,1.1,save=5101.2
cpmcscf,grad,2.1,save=5102.2
force;samc,5101.2;varsave
scale,-1.0*$ediff
force;samc,5102.2;varsave
add,$ediff
table,gradx,grady,gradz
opt
step,$ediff,$ediff,10*$ediff,$ediff,10*$ediff
show,optconv
if (optconv.lt.0.003) then
matrop
load,orbitals,orb,2140.2
write,orbitals,'ethylenediffsqopt.orb',new
put,molden,ethylenediffsqopt.molden,new
put,xyz,ethylenediffsqopt.xyz,new
exit
end if
show,cpustep
show,wallstep
end do
<br>
Dr Seth Olsen wrote:
<blockquote cite="mid529af3528f78.528f78529af3 at uq.edu.au" type="cite">
<pre wrap="">Hi Molpro-users,
I would like to perform an optimization on a surface given by the
squared energy difference of two electronic states. It seems
MolPro
should have the capacity to do this using the ADD and SCALE commands on
the gradients for the different states. However, I cannot seem to
master the syntax. Below is an example input using ethylene,
which is
known to have a low-lying s0/s1 CI seam. With simple
calculus, I
reason the gradient of
E'=grad(E_s1-E_s0)**2=2((E_s1*gradE_s1)-(E_s1*gradE_s0)-(E_s0*gradE_s1)+(E_s0*gradE_s0))
and implementing this in a molpro non-automatic optimization loop (as
below) I get errors starting with 'Illegal command scale' and proceeding
through the rest of the cpmcscf cards. I cannot find an example in the
manual that makes clear the syntax for doing what I want to do. Does
anyone know the correct syntax?
Cheers,
Seth
***
memory,30,m
gprint,orbitals,civector
file,1,ethylenediffsqopt.int
file,2,ethylenediffsqopt.wfn
geomtyp=xyz
basis=6-31G*
geometry,{nosymm,noorient
6
ethylene
C 0.000000 0.000000 0.000000
C 0.000000 0.000000 1.400000
H 0.943102 0.000100 -0.544500
H -0.943102 0.000100 -0.544500
H 0.000000 -0.943102 1.879500
H 0.000000 0.943102 1.879500
}
rhf
wf,16,1,0
show,cpustep
show,wallstep
maxstep=40
do i=1,maxstep
mcscf
occ,9
closed,7
state,2
weight,1,1
fac1=energy(1)
fac2=energy(2)
fac3=-1.0*$fac1
fac4=-1.0*$fac2
mcscf
occ,9
closed,7
state,2
weight,1,1
cpmcscf,grad,1.1;scale,$fac1
cpmcscf,grad,2.1;add,$fac2
cpmcscf,grad,2,1;add,$fac3
cpmcscf,grad,1.1;add,$fac4
force
opt
show,cpustep
show,wallstep
end do
matrop
load,orbitals,orb,2140.2
write,orbitals,'ethylenediffsqopt.orb',new
put,molden,ethylenediffsqopt.molden
---
</pre>
</blockquote>
<br>
</body>
</html>
More information about the Molpro-user
mailing list