Program control
Starting a job (***)
The first card of each input should be:
***
,text
where text is arbitrary. If file 1 is restarted, text must always be the same. The effect of this card is to reset all program counters, etc. If the ***
card is omitted, text assumes its default value, which is all blank.
Ending a job (---)
The end of the input is signaled by either an end of file, or a
---
card. All input following the ---
card is ignored.
Alternatively, a job can be stopped at at some place by inserting an EXIT
card. This could also be in the middle of a DO
loop or an IF
block. If in such a case the ---
card would be used, an error would result, since the ENDDO
or ENDIF
cards would not be found.
Restarting a job (RESTART)
In contrast to Molpro92 and older versions, the current version of Molpro attempts to recover all information from all permanent files by default. If a restart is unwanted, the NEW
option can be used on the FILE
directive. The RESTART
directive as described below can still be used as in Molpro92, but is usually not needed.
RESTART
,$r_1,r_2,r_3,r_4,\ldots$;
The $r_i$ specify which files are restarted. These files must have been allocated before using FILE
cards. There are two possible formats for the $r_i$:
- a) $0 < r_i < 10$: Restart file $r_i$ and restore all information.
- b) $r_i=name.nr$: Restart file $nr$ but truncate before record name.
If all $r_i=0$, then all permanent files are restarted. However, if at least one $r_i$ is not equal to zero, only the specified files are restarted.
Examples:
RESTART;
will restart all permanent files allocated withFILE
cards (default)RESTART,1;
will restart file 1 onlyRESTART,2;
will restart file 2 onlyRESTART,1,2,3;
will restart files 1-3RESTART,2000.1;
will restart file 1 and truncate before record 2000.
Including secondary input files (INCLUDE)
INCLUDE
,file[,ECHO
];
Insert the contents of the specified file in the input stream. In most implementations the file name given is used directly in a Fortran open statement. If file begins with the character ’/’
, then it will be interpreted as an absolute file name. Otherwise, it will be assumed to be a path relative to the directory from which the Molpro has been launched. If, however, the file is not found, an attempt will be made instead to read it relative to the system lib/include
directory, where any standard procedures may be found.
If the ECHO
option is specified, the included file is echoed to the output in the normal way, but by default its contents are not printed. The included file may itself contain INCLUDE
commands up to a maximum nesting depth of 10.
For the name of the file and the characters allowed, similar recommendations hold as for the Molpro input file, see https://www.molpro.net/develop/manual/doku.php?id=quickstart#how_to_run_molpro . The include file together with a path to it may however be used.
Allocating dynamic memory (MEMORY)
MEMORY
,n,scale;
Sets the limit on dynamic memory to $n$ floating point words. For details, see section memory allocation.
DO loops (DO/ENDDO)
DO
loops can be constructed using the DO
and ENDDO
commands. The general format of the DO
command is similar to Fortran:
DO
variable=
start, end [[,]increment] [[,]unit]
where start, end, increment may be expressions or variables. The default for increment is 1. In contrast to Fortran, these variables can be modified within the loop (to be used with care!). For instance:
DR=0.2 DO R=1.0,6.0,DR,ANG IF (R.EQ.2) DR=0.5 IF (R.EQ.3) DR=1.0 .... ENDDO
performs the loop for the following values of R
: 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0
Ångstrøm. The same could be achieved as follows:
RVEC=[1.0,1.2,1.4,1.6,1.8,2.0,2.5,3.0,4.0,5.0,6.0] ANG DO I=1,#RVEC R=RVEC(I) .... ENDDO
Up to 20 DO
loops may be nested. Each DO
must end with its own ENDDO
.
Jumps into DO
loops are possible if the DO
variables are known. This can be useful in restarts, since it allows to continue an interrupted calculation without changing the input (all variables are recovered in a restart).
See introductory examples for two examples of using do loops.
Branching (IF/ELSEIF/ENDIF)
IF
blocks and IF/ELSEIF
blocks can be constructed as in FORTRAN
.
IF statements
IF
blocks have the same form as in Fortran:
IF (logical expression) THEN statements ENDIF
If only one statement is needed, the one-line form
IF (logical expression) statement
can be used, except if statement is a procedure name.
ELSE
and ELSE IF
can be used exactly as in Fortran. IF
statements may be arbitrarily nested. Jumps into IF
or ELSE IF
blocks are allowed. In this case no testing is performed; when an ELSE
is reached, control continues after ENDIF
.
The logical expression may involve logical comparisons of algebraic expressions or of strings. Examples:
IF(STATUS.LT.0) THEN TEXT,An error occurred, calculation stopped STOP ENDIF
IF($method.eq.'HF') then ... ENDIF
In the previous example the dollar and the quotes are optional:
IF(METHOD.EQ.HF) then ... ENDIF
GOTO commands
GOTO
commands can be used to skip over parts of the input. The general form is
GOTO,command,[n],[nrep]
Program control skips to the $|n|$’th occurrence of command (Default: $n=1$). command must be a keyword in the first field of an input line. If n is positive, the search is forward starting from the current position. If n is negative, search starts from the top of the input. The GOTO
command is executed at most nrep times. The default for nrep is 1 if $n \lt 0$ and infinity otherwise. We recommend that GOTO
commands are never used to construct loops.
Alternatively, one can jump to labels using
GOTO,label
Since labels must be unique, the search starts always from the top of the input. It is required that the label ends with a colon.
Labels (LABEL)
LABEL
This is a dummy command, sometimes useful in conjunction with GOTO
.
Procedures (PROC/ENDPROC)
Procedures can be defined at any place of the input or in INCLUDE
files as follows:
PROC name statements ENDPROC
Alternatively, one can use the form
PROC name[=]{statements}
In the latter case, it is required that the left curly bracket ($\{$) appears on the same line as PROC
, but statements can consist of several lines. If in the subsequent input name is found as a command in the first field of a line, it is substituted by the statements. Example:
proc runscf1 nogprint,variable if(#symmetry.ne.0) set,scfsym=symmetry(1) if(#scfsy.ne.0) set,scfsym=scfsy if(#scfsymm.ne.0) set,scfsym=scfsymm if(#scfsymmetry.ne.0) set,scfsym=scfsymmetry if(#scfsym.eq.0) set,scfsym=1 set,symmetry(1)=scfsym if(orbital.eq.0) then hf else if(lastorb.ne.'RHF'.or.lastspin.ne.spin(1).or.lastsym.ne.scfsym(1).or. \ lastnelec.ne.nelec(1)) then if(spin(1).eq.0.and.mod(nelec(1),2).ne.0) set,spin(1)=1 hf end if if(#spin.eq.0) spin=mod(nelec,2) endproc
Alternatively, this could be written as
proc runscf2={ nogprint,variable if(#symmetry.ne.0) set,scfsym=symmetry(1) if(#scfsy.ne.0) set,scfsym=scfsy if(#scfsymm.ne.0) set,scfsym=scfsymm if(#scfsymmetry.ne.0) set,scfsym=scfsymmetry if(#scfsym.eq.0) set,scfsym=1 set,symmetry(1)=scfsym if(orbital.eq.0) then hf else if(lastorb.ne.'RHF'.or.lastspin.ne.spin(1).or.lastsym.ne.scfsym(1).or. \ lastnelec.ne.nelec(1)) then if(spin(1).eq.0.and.mod(nelec(1),2).ne.0) set,spin(1)=1 hf end if if(#spin.eq.0) spin=mod(nelec,2) }
Procedures may be nested up to a depth of 10. In the following example runscf
is a procedure:
proc runmp2 runscf if(spin.eq.0) then mp2 else rmp2 end if nogprint,variable saveccsd printdip=0 printresults endproc
Note: Procedure names are substituted only if found in the first field of an input line. Therefore, they must not be used on one-line IF
statements; please use IF / ENDIF
structures instead.
If as first statement of a procedure ECHO
is specified, the substituted commands of the present and lower level procedures will be printed. If ECHO
is specified in the main input file, all subsequent procedures are printed.
Certain important input data can be passed to the program using variables. For instance, occupancy patterns, symmetries, number of electrons, and multiplicity can be defined in this way (see section special variables for more details). This allows a quite general use of procedures. Procedures can also be used in geometry optimizations or extrapolations, for example:
- examples/h2o_proc_mrci.inp
geometry={h1;o,h1,r;h2,o,r,h1,theta} r=1.9 theta=102 runmrci={if(.not.scfdone) hf;multi;mrci} runmrci extrapolate,procedure=runmrci,bases=vtz:vqz
- examples/h2o_proc_ccsd.inp
symmetry,x geometry={h1;o,h1,r;h2,o,r,h1,theta} r=1.9 theta=102 runmp2={{hf;occ,4,1};mp2} runlmp2={hf;lmp2} optg,procedure=runmp2 optg,procedure=runlmp2 runccsdt={hf;ccsd(t)} extrapolate,procedure=runccsdt,basis=vtz:vqz
Default Procedures
Various procedures for standard calculations can be used with the run
command, see Simplified input. They allow to write simple inputs in the most compact way.
Further predefined procedures are available in lib/include/procedures
:
runscf, rundft, runmp2, rundf-hf, rundt-mp2, runldf-hf, runldf-hf, runpno-lmp2, runmp3, runmp4, runmp4sdq, runccsd, runccsdt, runbccd, runbccdt, runqcisd runqcisdt, runuccsd, runuccsdt, runcas, runmrpt, runcaspt2, runcaspt3, runmrci, runacpf, optscf, optdft, optmp2, optcas, optmrci, optccsd, optccsdt, freqscf, freqdft, freqmp2, freqccsd, freqccsdt, freqcas, freqmrci, rundf-lmp2, optdf-lmp2, freqdf-lmp2
A line
include procedures
is necessary to include these procedures. Some procedures use variables SYMMETRY, SPIN, STATE, NELEC to define state symmetries, spins, and charges, respectively. For example, the procedure runmrci
can be used for a calculation of a vertical ionization potential of H$_2$O as follows:
- examples/h2o_IP_with_runmrci.inp
***,h2o IP include procedures r=1 ang !set bond distance theta=104 degree !set bond angle basis=vtz !define basis set geometry !geometry input block o !z-matrix h1,o,r h2,o,r,h1,theta endg !end of geometry input runmrci !compute mrci energy of water using defaults eh2o=energy !save mrci energy in variable eh2o set,nelec=9 !set number of electrons to 9 set,symmetry=2 !set wavefunction symmetry to 2 runmrci !compute mrci energy of h2o+ (2b2 state) ipci=(energy-eh2o)*toev !compute mrci ionization potential in ev
For further examples see oh_runccsdt.inp, oh_runmrci1.inp, oh_runmrci2.inp, oh_runmrci3.inp, oh_runmrci4.inp.
Note: At present, all variables are global, i.e., variables are commonly known to all procedures and all variables defined in procedures will be subsequently known outside the procedures as well. The reason is that procedures are included into the internal input deck at the beginning of the job and not at execution time; for the same reason, variable substitution of procedure names is not possible, e.g. one cannot use constructs like
method=scf $method !this does not work!
Text cards (TEXT)
TEXT
,xxxxxx
will just print xxxxxx in the output. If the text contains variables which are preceded by a dollar ($), these are replaced by their actual values, e.g.
r=2.1 text,Results for R=$r
will print
Results for R=2.1
Checking the program status (STATUS)
STATUS
,[ALL|LAST|commands
],[IGNORE|STOP|CRASH
],[CLEAR
]
This command checks and prints the status of the specified program steps. commands may be a list of commands for wavefunction calculations previously executed in the current job. If no command or LAST
is specified, the status of the last step is checked. If ALL
is given, all program steps are checked.
If CRASH
or STOP
is given, the program will crash or stop, respectively, if the status was not o.k. (STOP
is default). If IGNORE
is given, any bad status is ignored. If CLEAR
is specified, all status information for the checked program steps is erased, so there will be no crash at subsequent status checks.
Examples:
STATUS,HF,CRASH;
will check the status of the lastHF-SCF
step and crash if it was not o.k. (i.e. no convergence).CRASH
is useful to avoid that the next program in a chain is executed.STATUS,MULTI,CI,STOP;
will check the status of the most previousMULTI
andCI
steps and stop if something did not converge.STATUS,RHF,CLEAR;
will clear the status flag for lastRHF
. No action even ifRHF
did not converge.
Note that the status variables are not recovered in a restart.
By default, the program automatically does the following checks:
1.) If an orbital optimization did not converge, and the resulting orbitals are used in a subsequent correlation calculation, an error will result. This error exit can be avoided using the IGNORE_ERROR
option on the ORBITAL
directive.
2.) If a CCSD|QCI|BCC|LMPn
calculation did not converge, further program steps which depend on the solution (e.g, Triples, CPHF, EOM) will not be done and an error will result. This can be avoided using the NOCHECK
option on the command line.
3.) In geometry optimizations or frequency calculations no convergence will lead to immediate error exits.
Global Thresholds (GTHRESH)
[command:gthresh]
A number of global thresholds can be set using the GTHRESH
command outside the individual programs (the first letter G
is optional, but should be used to avoid confusion with program specific THRESH
cards). The syntax is
GTHRESH
,key1=value1,key2=value2,…
key can be one of the following.
ZERO
Numerical zero (default 1.d-12)ONEINT
Threshold for one-electron integrals (default 1.d-12, but not used at present)TWOINT
Threshold for the neglect of two-electron integrals (default 1.d-12)PREFAC
Threshold for test of prefactor inTWOINT
(default 1.d-14)LOCALI
Threshold for orbital localization (default 1.d-8)EORDER
Threshold for reordering of orbital after localization (default 1.d-4)ENERGY
Convergence threshold for energy (default 1.d-6)GRADIENT
Convergence threshold for orbital gradient inMCSCF
(default 1.d-2)STEP
Convergence threshold for step length in MCSCF orbital optimization (default 1.d-3)ORBITAL
Convergence threshold for orbital optimization in the SCF program (default 1.d-5).CIVEC
Convergence threshold for CI coefficients inMCSCF
and reference vector inCI
(default 1.-d.5)COEFF
Convergence threshold for coefficients inCI
andCCSD
(default 1.d-4)
PRINTCI
Threshold for printing CI coefficients (default 0.05)PUNCHCI
Threshold for punching CI coefficients (default 99 - no punch)SYMTOL
Threshold for finding symmetry equivalent atoms (default 1.d-6)GRADTOL
Threshold for symmetry in gradient (default 1.d-6).THROVL
Threshold for smallest allowed eigenvalue of the overlap matrix (default 1.d-8)THRORTH
Threshold for orthonormality check (default 1.d-8)THRPRINT
Threshold for printing orbitals (thrprint=-1 : column-wise; thrprint=0 : row-wise, as in Molpro2015 and earlier versions ; thrprint $>0$: print only coefficients that are larger than the threshold together with labels (default: thrprint=0.25)
Global Print Options (GPRINT/NOGPRINT)
[command:gprint]
Global print options can be set using the GPRINT
command outside the individual programs (the first letter G
is optional, but should be used to avoid confusion with program specific PRINT
cards). The syntax is
GPRINT
,key1[=value1],key2[=value2],…
NOGPRINT
,key1,key2,…
Normally, value can be omitted, but values $\gt 0$ may be used for debugging purposes, giving more information in some cases. The default is no print for all options, except for DISTANCE
, ANGLES
(default=0), and VARIABLE
. NOGPRINT
,key is equivalent to PRINT
,key=-1
. key can be one of the following:
BASIS
Print basis informationDISTANCE
Print bond distances (default)ANGLES
Print bond angle information (default). If $\gt$ 0, dihedral angles are also printed.ORBITAL
Print orbitals inSCF
andMCSCF
ORBEN
Print orbital energies inSCF
CIVECTOR
PrintCI
vector inMCSCF
PAIRS
Print pair list inCI, CCSD
CS
Print information for singles inCI, CCSD
CP
Print information for pairs inCI, CCSD
REF
Print reference CSFs and their coefficients inCI
PSPACE
Print p-space configurationsMICRO
Print micro-iterations inMCSCF
andCI
CPU
Print detailed CPU informationIO
Print detailed I/O informationVARIABLE
Print variables each time they are set or changed (default).
One-electron operators and expectation values (GEXPEC)
The operators for which expectation values are requested, are specified by keywords on the global GEXPEC
directive. By default, only dipole moments are computed. The first letter G
is optional, but should be used to avoid confusion with program specific EXPEC
cards, which have the same form as GEXPEC
. For all operators specified on the GEXPEC
card, expectation values are computed in all subsequent programs that generate the first-order density matix. This is always the case for variational wavefunctions, i.e., HF, DFT, MCSCF, MRCI. For non-variational wavefunctions such as MP2, MP3, QCISD, QCISD(T), CCSD, or CCSD(T) the density matix is not computed by default, since this requires considerable additional effort (solving z-vector equations). The GEXPEC directive does not affect such programs. In some cases [currently for MP2, MP3, QCISD, QCISD(T), and CCSD] the EXPEC
directive that is specific to those programs can be used to request the property calculation.
For a number of operators it is possible to use generic operator names, e.g., DM
for dipole moments, which means that all three components DMX
, DMY
, and DMZ
are computed. Alternatively, individual components may be requested.
The general format is as follows:
[G]EXPEC
,opname[,][icen,[x,y,z]],…
where
- opname operator name (string), either generic or component.
- icen z-matrix row number or z-matrix symbol used to determine the origin (x,y,z must not be specified).
If icen$=0$ or blank, the origin must be specified in x,y,z
Several GEXPEC
cards may follow each other, or several operators may be specified on one card.
Examples:
GEXPEC,QM
computes quadrupole moments with origin at (0,0,0),
GEXPEC,QM1
computes quadrupole moments with origin at centre 1.
GEXPEC,QM,O1
computes quadrupole moments with origin at atom O1
.
GEXPEC,QM,,1,2,3
computes quadrupole moments with origin at (1,2,3).
The following table summarizes all available operators:
One-electron operators and their components | |||
---|---|---|---|
Generic name | Parity | Components | Description |
OV | 1 | Overlap | |
EKIN | 1 | Kinetic energy | |
POT | 1 | potential energy | |
DELTA | 1 | delta function | |
DEL4 | 1 | $\Delta^4$ | |
DARW | 1 | one-electron Darwin term, i.e., DELTA with appropriate factors summed over atoms. |
|
MASSV | 1 | mass-velocity term, i.e., DEL4 with appropriate factor. |
|
REL | 1 | total Cowan-Griffin Relativistic correction, i.e., DARW +MASSV . |
|
DM | 1 | DMX , DMY , DMZ | dipole moments |
SM | 1 | XX , YY , ZZ , XY , XZ , YZ | second moments |
TM | 1 | XXX , XXY , XXZ , XYY , XYZ , XZZ , YYY , YYZ , YZZ , ZZZ | third moments |
MLTP n | 1 | all unique Cartesian products of order $n$ | multipole moments |
QM | 1 | QMXX , QMYY , QMZZ , QMXY , QMXZ , QMYZ , QMRR =XX + YY + ZZ , QMXX =(3 XX - RR )/2, QMXY =3 XY / 2 etc. | quadrupole moments and $R^2$ |
EF | 1 | EFX , EFY , EFZ | electric field |
FG | 1 | FGXX , FGYY , FGZZ , FGXY , FGXZ , FGYZ | electric field gradients |
DMS | 1 | DMSXX , DMSYX , DMSZX , DMSXY , DMSYY , DMSZY , DMSXZ , DMSYZ , DMSZZ | diamagnetic shielding tensor |
LOP | -1 | LX , LY , LZ | Angular momentum operators $\hat L_x$, $\hat L_y$, $\hat L_z$ |
LOP2 | 1 | LXLX, LYLY, LZLZ , LXLY, LXLZ, LYLZ | one electron parts of products of angular momentum operators. The symmetric combinations $\frac{1}{2} (\hat L_x \hat L_y+\hat L_y \hat L_x)$ etc. are computed. |
VELO | -1 | D/DX , D/DY , D/DZ | velocity |
LS | -1 | LSX , LSY , LSZ | spin-orbit operators |
ECPLS | -1 | ECPLSX , ECPLSY , ECPLSZ | ECP spin-orbit operators |
Expectation values are only nonzero for symmetric operators (parity=1). Other operators can be used to compute transition quantities (spin-orbit operators need a special treatment).
Example for computing expectation values
The following job computes dipole and quadrupole moments for H$_2$O.
- examples/h2o_gexpec2.inp
***,h2o properties geometry={o;h1,o,r;h2,o,r,h1,theta} !Z-matrix geometry input r=1 ang !bond length theta=104 !bond angle gexpec,dm,sm,qm !compute dipole and quarupole moments $methods=[hf,multi,ci] !do hf, casscf, mrci do i=1,#methods !loop over methods $methods(i) !run energy calculation e(i)=energy dip(i)=dmz !save dipole moment in variable dip quadxx(i)=qmxx !save quadrupole momemts quadyy(i)=qmyy quadzz(i)=qmzz smxx(i)=xx !save second momemts smyy(i)=yy smzz(i)=zz enddo table,methods,dip,smxx,smyy,smzz !print table of first and second moments table,methods,e,quadxx,quadyy,quadzz !print table of quadrupole moments
This Job produces the following tables
METHODS DIP SMXX SMYY SMZZ HF 0.82747571 -5.30079792 -3.01408114 -4.20611391 MULTI 0.76285513 -5.29145148 -3.11711397 -4.25941000 CI 0.76868508 -5.32191822 -3.15540500 -4.28542917 METHODS E QUADXX QUADYY QUADZZ HF -76.02145798 -1.69070039 1.73937477 -0.04867438 MULTI -76.07843443 -1.60318949 1.65831677 -0.05512728 CI -76.23369821 -1.60150114 1.64826869 -0.04676756
Example for computing relativistic corrections
- examples/ar2_rel.inp
***,ar2 geometry={ar1;ar2,ar1,r} !geometry definition r=2.5 ang !bond distance {hf; !non-relativisitic scf calculation expec,rel,darwin,massv} !compute relativistic correction using Cowan-Griffin operator e_nrel=energy !save non-relativistic energy in variable enrel show,massv,darwin,erel !show individual contribution and their sum dkroll=1 !use douglas-kroll one-electron integrals hf; !relativistic scf calculation e_dk=energy !save relativistic scf energy in variable e_dk. show,massv,darwin,erel !show mass-velocity and darwin contributions and their sum show,e_dk-e_nrel !show relativistic correction using Douglas-Kroll
This jobs shows at the end the following variables:
MASSV / AU = -14.84964285 DARWIN / AU = 11.25455679 EREL / AU = -3.59508606
XML dump options (XML)
This command allows to modify the default behaviour of the XML output. The general format is as follows:
XML
,key1[=value1],key2[=value2],…
where key can be one of the following:
DUMPORB
Dump occupied orbitals to XML file (default 0, unless the–xml-orbdump
command line option is given).SKIPVIRT
Omit virtual orbitals in the XML orbital dumps (default 1).PRINT
Print record information to output file, showing from which records the orbitals etc are read (default 0).