basis=aug-cc-pvdz
proc autoshift
rhf
if(status.lt.0) then
status,rhf,clear !make sure calc does not abort when stock rohf does not converge
{rhf,shifta=-0.3,shiftb=0.3; !shifts found using grid search
start,atden} !start with atomic densities again, otherwise rohf will use same "bad" orbitals
endif
uccsd(t)
endproc
{optg,proc=autoshift,root=1,energy=1.d-11,step=1.d-5,gradient=1.d-5,displace=symm,numhess=2,hessproc=b3lyphess}
proc b3lyphess
rhf
if(status.lt.0) then
status,rhf,clear !same as for autoshift
{rhf,shifta=-0.3,shiftb=0.3;
start,atden}
endif
ks,b3lyp
endproc
Here I have made two procedures, one for the optimization using CCSD(T) and one for the Hessian (MOLPRO does far better with frequent numerical hessians when optimizing open-shell doublet molecules) using B3LYP. I will talk about the first one because they are almost identical. Beginning with the if statement, I hate it check if the stock ROHF calculation finished properly. If it did not, then I run ROHF with the level shifts I found in the previous post, taking care to start with the atomic densities and not the orbitals from the previous ROHF calculation. I could put in several of these if statements with various values for the level shifts to be on the safe side, but I wanted to keep this example on the simple side. If this ROHF calculation fails then I still want MOLPRO to error out, so I do not have a status,rhf,clear statement in the if structure. After that I run the UCCSD(T) calculation. The only other bit to include is telling optg that I want to use a procedure, which is accomplished with the proc=autoshift. This is currently running, but it made it past the initial calculation which is progress.
No comments:
Post a Comment