Orbital merging
Orbitals can be manipulated using the MERGE
facility. For instance, this allows the construction of molecular orbitals from atomic orbitals, to merge and orthogonalize different orbital sets, or to perform $2 \times 2$ rotations between individual orbitals. Other orbital manipulations can be performed using the LOCALI
program (see section orbital localization) or the MATROP
program (section matrix operations).
The merge program is called using
MERGE
[,namout.file]
All subcommands described in the following sections may be abbreviated by three characters. namout.file specifies the output data set (see also SAVE
command). If namout.file is omitted and no SAVE
card is present, the new orbitals are not saved. All output orbitals must be supplied via ORBITAL
and ADD
, MOVE
, REPLACE
, EXTRA
, or PROJECT
directives before they can be saved.
Defining the input orbitals (ORBITAL)
ORBITAL
,namin.file,specifications
Reads an input orbital set from a dump record. specifications can be used to select specific orbital sets, as described in section selecting orbitals and density matrices (ORBITAL, DENSITY). Subsets of these orbitals can be added to the output set by the ADD
, MOVE
, or EXTRA
commands.
Moving orbitals to the output set (MOVE)
MOVE
,orb1.sym1,orb2.sym2,orb3.sym3,ioff,fac,istart,iend
Moves orbitals orb1.sym1 to orb2.sym2 from the input set to the first vector of symmetry sym3 in the output set which is undefined so far. The first orb3-1 vectors in the output set are skipped regardless of whether they have been defined before or not. If sym2 $>$ sym1, sym3 will run from sym1 to sym2 and the input for sym3 has no effect. If orb1.sym1 is negative, abs(orb1) is the maximum number of orbitals to be moved, starting with orbital 1.sym1, up to orb2.sym2. If orb2.sym2 is negative, abs(orb2) is the maximum number of vectors to be moved, starting at orb1.isym1 up to the last orbital in symmetry sym2.
Orbitals from the input set which have already been moved or added to the output set are generally skipped. If orb1 and orb2 are zero, the whole input set is moved to the output set. In this case the input and output dimensions must be identical. If orb1 is nonzero but orb2 is zero, orb2 is set to the last orbital in symmetry sym2. If sym2=0, sym2 is set to sym1. ioff is an offset in the output vector, relative to the global offset set by OFFSET
directive. fac has no effect for move. The elements istart to iend of the input vector are moved. If istart=0 and iend=0, the whole input vector is moved.
The usage of the MOVE
directive is most easily understood by looking at the examples given below. See also ADD
and EXTRA
commands.
Adding or replacing orbitals in the output set (ADD,REPLACE)
ADD
,orb1.sym1,orb2.sym2,orb3.sym3,ioff,fac,istart,iend
This adds orbitals orb1.sym1 to orb2.sym2 to the output vectors, starting at orb3.sym3. The input vectors are scaled by the factor fac. If fac=0, fac is set to 1.0. For other details see MOVE
command. Note, however, that the output vectors which have already been defined are not skipped as for MOVE
.
REPLACE
,orb1.sym1,orb2.sym2,orb3.sym3,ioff,,iustart,iend Replaces orbitals in the outputs set. If the output orbitals already exists, they are set to zero and then replaced by the given input orbitals. Otherwise as ADD
.
See also MOVE
and EXTRA
commands.
Defining extra symmetries (EXTRA)
EXTRA
,exsym,orb1.sym1,orb2.sym2,orb3.sym3,ioff,fac,istart,iend
Works exactly as MOVE
, but only input vectors with extra symmetry exsym are considered. If orb1.sym1 and orb2.sym2 are zero, all input vectors are moved to the output set ordered according to increasing extra symmetries.
Examples:
EXTRA,1,-4.1
will move the next 4 orbitals in symmetry 1 which have extra symmetry 1. Orbitals which have been moved before are skipped.EXTRA,2,1.1
will move all orbitals of symmetry 1 which have extra symmetry 2. Orbitals which have been moved before are skipped.EXTRA
will move all orbitals (all symmetries) and order them according to extra symmetries.EXTRA,3,1.1,0.8
Will move all orbitals which have extra symmetry 3 in all symmetries. Orbitals which have been moved before are skipped.
See also ADD
and MOVE
commands.
Defining offsets in the output set (OFFSET)
OFFSET
,iof$_1$,iof$_2$,$\ldots$,iof$_8$;
Sets offsets in the output vector for symmetries 1 to 8. In subsequent MOVE
or ADD
commands, the input vectors are moved to the locations iof$_i$+1 in the output vectors. The offset for individual ADD
or MOVE
commands can be modified by the parameter ioff on these cards. This card should immediately follow the orbital directive to which it applies. Generally, this card is only needed if the dimensions of input and output vectors are not identical.
If the dimensions of the input orbital sets are smaller than the current basis dimension, the offsets are determined automatically in the following way: each time an orbital set is read in, the previous input orbital dimensions are added to the offsets. Hence, this works correctly if the orbital sets are given in the correct order and if the individual dimensions add up to the current total dimension. If this is not the case, the offsets should be specified on an OFFSET
card which must follow the orbital directive.
Projecting orbitals (PROJECT)
PROJECT
,namin.file
This command will read vectors from record namin.file. These vectors must have the same dimension as those of the current calculation. All orbitals defined so far by the ORBITAL
, MOVE
, and ADD
directives are projected out of the input set. The projected orbitals are then orthonormalized and moved to the undefined output vectors. This should always yield a complete set of vectors.
Symmetric orthonormalization (ORTH)
ORTH
,$n_1,n_2,\ldots,n_8$
Symmetrically orthonormalizes the first $n_i$ vectors in each symmetry $i$. These vectors must be supplied before by ORBITAL
and MOVE
or ADD
directives.
Schmidt orthonormalization (SCHMIDT)
SCHMIDT
,$n_1,n_2,\ldots,n_8$
Schmidt orthonormalizes the first $n_i$ vectors in each symmetry $i$. These vectors must be supplied before by ORBITAL
and MOVE
or ADD
directives.
Rotating orbitals (ROTATE)
ROTATE
,iorb1.sym,iorb2,angle
Will perform $2 \times 2$ rotation of orbitals iorb1 and iorb2 in symmetry sym by the specified angle (in degree). angle=0 means to swap the orbitals (equivalent to angle=90) These vectors must be supplied before by ORBITAL
and MOVE
or ADD
directives.
Initialization of a new output set (INIT)
INIT
,namout.file
Will initialize a new output set. All previous vectors in the output set are lost unless they have been saved by a SAVE
directive!
Saving the merged orbitals
SAVE
,namout.file
Saves the current output set to record namout.file. The current output set must be complete and will be Schmidt orthonormalized before it is saved. If the SAVE
directive is not supplied, the output vectors will be saved after all valid commands have been processed to the record specified on the MERGE
card.
Printing options (PRINT)
PRINT
,iprint,ideb
Specifies print options.
- $iprint = 0$ no print
- $iprint \ge 1$: orthonormalized orbitals specified on
ORTH
card are printed. - $iprint \ge 2$: orbitals are also printed before this orthonormalization.
- $iprint \ge 3$: all final vectors are printed.
- $ideb \ne 0$: the overlap matrices are printed at various stages.
Examples
H2F
This example merges the orbitals of H$_2$ and F
- examples/h2f_merge.inp
***,example for merge print,orbitals,basis rh2=1.4 rhf=300. basis=vdz symmetry,x,y !use C2v symmetry geometry={F} text,F {rhf;wf,9,1,1;occ,3,1,1;orbital,2130.2} !rhf for f-atom text,H2 symmetry,x,y !use C2v symmetry geometry={ H1, H2,H1,rh2} {hf;orbital,2100.2} !scf for h2 {multi;occ,2;orbital,2101.2} !mcscf for h2 text,FH2 geometry={F; !linear geometry for F+H2 H1,F,rhf H2,H1,rh2,F,180} int {merge orbital,2130.2 !rhf orbitals for F-atom move,1.1,2.1,1.1 !move orbitals 1.1, 2.1 move,3.1,0.4,4.1; !move all remaining, starting at 4.1 orbital,2100.2 !hf orbitals for H2 move,1.1,0.4 !move these to free positions save,2131.2} !save merged orbitals {rhf;occ,4,1,1;start,2131.2 !rhf for F+H2 orbital,2132.2} {merge orbital,2130.2 !rhf orbitals for F-atom move,1.1,2.1,1.1 !move orbitals 1.1, 2.1 move,3.1,3.1,4.1; !move orbital 3.1 to 4.1 move,4.1,0.4,6.1 !move all remaining, starting at 6.1 orbital,2101.2 !mcscf orbitals for H2 move,1.1,0.4 !move these to free positions save,2141.2} !save merged orbitals {multi;occ,5,1,1;start,2141.2} !casscf for F+H2 using valence space
NO
This example merges the SCF orbitals of N and O to get a full valence space for NO. In the simplest case the atomic calculations are performed in the individual separate basis sets, but using the same symmetry (C$_{2v}$) as the molecular calculation.
- examples/no_merge1.inp
***,NO merge r=2.1 symmetry,x,y geometry={n} !N-atom, c2v symmetry {rhf;occ,3,1,1; !rhf nitrogen wf,7,4,3; !4S state orbital,2110.2} !save orbitals to record 2110 on file 2 symmetry,x,y geometry={o} {rhf;occ,3,1,1; !rhf for oxygen wf,8,4,2 !3P state orbital,2120.2} !save orbitals to record 2120 on file 2 geometry={n;o,n,r} ! NO molecule, c2v symmetry int {MERGE ORBITAL,2110.2 ! read orbitals of N atom MOVE,1.1,1.1 ! move 1s orbital to output vector 1.1 MOVE,2.1,2.1,3.1 ! move 2s orbital to output vector 3.1 MOVE,3.1,3.1,5.1 ! move 2pz orbital to output vector 5.1 MOVE,1.2,1.2 ! move 2px orbital to output vector 1.2 MOVE,1.3,1.3 ! move 2py orbital to output vector 1.3 MOVE,4.1,,7.1 ! move virtual orbitals of symmetry 1 MOVE,2.2,,3.2 ! move virtual orbitals of symmetry 2 MOVE,2.3,,3.3 ! move virtual orbitals of symmetry 2 MOVE,1.4 ! move virtual orbitals of symmetry 2 ORBITAL,2120.2 ! read orbitals of O atom MOVE,1.1,0.4 ! move all oxygen orbitals into place ROT,3.1,4.1,45; ! rotate 2s orbitals to make bonding and antibonding ! linear combinations ROT,5.1,6.1,-45; ! rotate 2pz orbitals to make bonding and antibonding ! linear combinations PRINT,1 ! set print option ORTH,6,2,2 ! symmetrically orthonormalize the valence orbitals ! the resulting orbitals are printed save,2150.2} ! save merged orbitals to record 2150.2 {multi;occ,6,2,2 ! perform full valence casscf for NO wf,15,2,1 ! 2Pix state wf,15,3,1 ! 2Piy state start,2150.2} ! start with merged orbitals
One can also do the atomic calculations in the total basis set, using dummy cards. In this case the procedure is more complicated, since the union of the two orbital spaces is over-complete. The calculation can be done as follows:
a) SCF for the total molecule, orbitals saved to 2100.2
b) SCF for the N atom with dummy basis on the O atom, orbitals saved on 2110.2
c) SCF for the O atom with dummy basis on the N atom, orbitals saved on 2120.2
d) Merge the atomic SCF orbitals. Finally, obtain the virtual orbitals by projecting the merge orbitals out of the SCF orbitals for NO.
- examples/no_merge2.inp
***,NO merge geometry={n;o,n,r} r=2.1 {rhf;occ,5,2,1 !rhf for NO wf,15,2,1 !2Pi state orbital,2100.2} !save orbitals to record 2100 on file 2 dummy,o !oxygen is dummy {rhf;occ,3,1,1; !rhf nitrogen wf,7,4,3; !4S state orbital,2110.2} !save orbitals to record 2110 on file 2 dummy,n !nitrogen is dummy {rhf;occ,3,1,1; !rhf for oxygen wf,8,4,2 !3P state orbital,2120.2} !save orbitals to record 2120 on file 2 dummy ! remove dummies {MERGE !call merge program ORBITAL,2110.2 ! read orbitals of N atom MOVE,1.1,1.1 ! move input vector 1.1 to output vector 1.1 MOVE,2.1,3.1,3.1 ! move input vectors 2.1,3.1 to output vectors ! 3.1 and 4.1 MOVE,1.2,1.2 ! move input vector 1.2 to output vector 1.2 MOVE,1.3,1.3 ! move input vector 1.3 to output vector 1.3 ORBITAL,2120.2 ! read orbitals of O atom MOVE,1.1,3.1 ! move input vectors 1.1 to 3.1 to output vectors ! 2.1, 5.1, 6.1 MOVE,1.2,1.2 ! move input vector 1.2 to output vector 2.2 MOVE,1.3,1.3 ! move input vector 1.3 to output vector 2.3 ROT,3.1,5.1,45; ! rotate 2s orbitals to make bonding and antibonding ! linear combinations ROT,4.1,6.1,-45; ! rotate 2pz orbitals to make bonding and antibonding ! linear combinations PRINT,1 ! set print option ORTH,6,2,2 ! symmetrically orthonormalize the valence orbitals ! the resulting orbitals are printed PROJ,2100.2 ! Project valence orbitals out of scf orbitals of the ! molecule and add virtual orbital set. SAVE,2150.2 ! save merged orbitals to record 2150 on file 2 } {multi;occ,6,2,2 ! perform full valence casscf for NO wf,15,2,1 ! 2Pi state wf,15,3,1 ! 2Pi state start,2150.2} ! start with merged orbitals