Menu

janpa

TimN

Janpa program

This is a key program of the package and its task is twofold: first, to perform
conversion from basis set functions (AOs) into Natural Atomic Orbitals (NAOs), and second,
to analyze the electronic structure in terms if localized property-optimized orbitals (LPOs)
to reveal the bonding pattern.
When NAOs are prepared, density matrix is converted into their basis
and its diagonal elements are used for Natural Population Analysis (NPA), while
off-diagonal elements are used for Wiberg-Mayer bond indexes calculation.


MOLDEN files

Janpa uses MOLDEM-compatible files in the 'extended' format (used to represent
all possible results of Cartesian-to-pure conversion of basis functions).
To be used as an input files for JANPA, MOLDEN files should have three essential components:

  • Geometry description ([Atoms] section)
  • Basis set description ([GTO] section)
  • Molecular orbital (MO) or natural orbital (NO) information ([MO] section(s))

Some basic information about MOLDEN format can be found on the web-page of
MOLDEN program.


How to run the program

You must have Java Runtime Environment installed on your system (details).
Then, simply type in the command line

java -jar janpa.jar INPUTFILE.molden

or

java -jar janpa.jar -i INPUTFILE.molden [options]

where INPUTFILE.molden is a suitable MOLDEN file, and [options] can contain multiple
options.
Run

java -jar janpa.jar

to get an information about the possible options.

Note also that the -ignorefock, i.e., disabling conversion of Fock matrix
into NAO basis, which was present in JANPA versions prior to 2.02 has now became a default behaviour.
In case if for some reason the Fock matrix analysis is still needed, the option -doFock should be used instead.


Understanding the output

Note: the following information describes only the charge/population analysis (NPA) part of input. For bonding
analysis available in JANPA v.2.00 and later, see CLPO example.

Janpa prints lots of information... Here we'd like to give some comments on the most
essential output.

It begins with a copyright note

 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * janpa: A cross-platform open-source implementation of NPA with Java * 
 *        A part of JANPA package,   http://janpa.sourceforge.net      * 
 *                    Version:  1.01 (10-08-2014)                       * 
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

 (c) Tymofii Nikolaienko, 2014

 If any results obtained with this program are published,
 or for any other reasons, please, cite this work as: 
  T.Yu.Nikolaienko, L.A.Bulavin, D.M.Hovorun; Comput.Theor.Chem.(2014) submitted.

followed by the list of the values of all available program options.

Then a 'statistical' information about input MOLDEN file is printed:

    Loading MOLDEN from socl2_avtz.molden
    Basis functions are spherical: true
    Total number of basis functions: 196
    Total number of different contractions (radial parts): 62
    Highest angular momentum: f (Lmax = 3)
    Total number of MO: 196

    Data loaded successfully
     Number of basis functions: 196; number of molecular orbitals: 196

After this, the program computes the overlap and the density matrices based
ob the data from input MOLDEN file.

    Building overlap matrix S...
    Checking whether the basis functions are unity-normalized...
     Maximum deviation of the basis function norm2 from unity: BFN 0 (0-based num.), max|norm2-1| = 2.545E-10 
    Checking for the eigenvalues (linear (in)dependency) of the basis function overlap matrix...
    The smallest eigenvalue of the basis function overlap matrix: 2.343E-04 
    Checking whether the orbitals are unity-normalized...
    Checking MO overlap matrix...
     Maximum of MO |norm2-1|: 1.348E-08 (MO  177)
     Maximum absolute value of off-diagonal MO overlap element: 4.163E-08 (< MO   19 | MO  119 >)
    First-order reduced density matrix is OK.

The last message is very important since different programs can produce a variety of
MOLDEN-semi-compatible files (which differ by basis functions normalization, MO/NO sing
convention etc.). Therefore, the user should check whether:

  • the basis functions are unity-normalized (max|norm2-1| should be small)
  • the orbitals are unity-normalized (|norm2-1| should be small)
  • the orbitals are orthogonal (Maximum absolute value of off-diagonal MO overlap element should be small)

It is also desirable that all basis functions were strongly linearly independent (The smallest eigenvalue of the basis function overlap matrix should not be very small).
If and only if all these criteria are met (within some internal thresholds), the program says that First-order reduced density matrix is OK.

In order to finally assure that everything is OK with input data, the program integrates
electron density, computes the total number of electrons and uses it to compute total
charge (with the sum of nuclei charges included):

    Building density matrix D... done.
    Building D.S... done.
    Total number of electrons: 58.000000
    Sum of electrons charges and the nuclei charges: -0.00000

The last value is typically known a priori and hence can be used as the final test.

Next, Mulliken and Lowdin charges are calculated:

    Performing Mulliken and Lowdin population analyses...
       Atom Mulliken    Lowdin      Mulliken    Lowdin
            Population  Population  Charge      Charge
         S1 14.97209    16.31109     1.02791    -0.31109
         O2  8.64775     8.22236    -0.64775    -0.22236
        Cl3 17.19008    16.73327    -0.19008     0.26673
        Cl4 17.19008    16.73327    -0.19008     0.26673

Typically, quantum chemistry packages provide corresponding values in their log files,
so comparison of the values reported by Janpa with the charges provided by the
quantum chemistry packages may serve as a final, irrefutable test for the input data
correctness.

After the overlap (S) and the density (D) matrices have been obtained, the program computes
occupancy matrix (P = S.D.S) and turns to the construction of Natural
Atomic Orbitals (NAOs)

    Building S.D.S... done.

    Inverting MO -> AO matrix...
                        * * *

    Creating NAOs

Here is a sample log for this process:

    STEP 1. Produce PNAOs

     Total number of natural functions produced: 196
    Sorting PNAOs...

    STEP 2. Split PNAOs into NMB / NRB sets

     Number of basis functions in teh Natural Minimal Basis (NMB) set for each center: 
    center   1:   3 of s |  6 of p |  0 of d |  0 of f |  0 of g |
    center   2:   2 of s |  3 of p |  0 of d |  0 of f |  0 of g |
    center   3:   3 of s |  6 of p |  0 of d |  0 of f |  0 of g |
    center   4:   3 of s |  6 of p |  0 of d |  0 of f |  0 of g |
    In total: NMB set has 32 functions, NRB set has 164 functions;

    Trace of the PNAO overlap matrix: 196.0000000 (should be equal to 196, the total number of PNAOs)
     The trace of SDS matrix in PNAO basis = 81.96920311379503

    STEP 3. Weighted orthogonalization of NMB PNAOs

     min weight of NMB PNAO = 1.4989370377039963

    STEP 4. Schmidt orthogonalization of NRBs to new NMBs

    STEP 5. Intracenter naturalization of new NRBs

     Total number of natural functions produced: 164

    STEP 6. Weighted orthogonalization of naturalized NRBs

    Maximum weight of NRB function = 5.63616E-02
     min weight = 2.098183703670974E-5
     |S_NRB - 1| = 4.66684E-12 (Should be VERY close to zero!)

    STEP 7. Final Intracenter Natural Transformation withing the full set of functions

     Total number of natural functions produced: 196
     SQRT{ SUM[(NaoOverlap_ij - delta_ij)^2] } = 4.43e-12 (should be VERY close to zero) 
     max_offdiag = 1.22e-12 (should be VERY close to zero) 
                        * * *

This process is nominally divided into 7 steps as described in the paper on the JANPA package.
A good check for correctness of the resulting NAOs obtained is the difference between
the NAO overlap matrix and the unitary matrix:

     SQRT{ SUM[(NaoOverlap_ij - delta_ij)^2] } = 4.43e-12 (should be VERY close to zero) 
     max_offdiag = 1.22e-12 (should be VERY close to zero)

Both these values should be VERY close to zero (they would be exactly zeros if there were
no machine-precision round-off errors).

When NAOs have are constructed, occupancy matrix is transformed to their basis and
its diagonal elements are used as NAO occupancies:

     Final NAO occupancies and leading AO terms:

    NAO #                Name  Occupancy                             Leading term
      1         A1*: R1*s(0)  0.0000037             (-23.99)*BF[6 = A1: R6*s(0)]
      2         A1*: R2*s(0)  0.0008128               (9.45)*BF[6 = A1: R6*s(0)]
      3         A1*: R3*s(0)  0.0157569               (9.66)*BF[5 = A1: R5*s(0)]
      4          A1: R4*s(0)  1.6950100               (0.76)*BF[3 = A1: R3*s(0)]
      5          A1: R5*s(0)  1.9997043               (0.91)*BF[2 = A1: R2*s(0)]
      6          A1: R6*s(0)  1.9999993              (-0.99)*BF[1 = A1: R1*s(0)]
      7         A1*: R7*p(0)  0.0000392             (8.72)*BF[16 = A1: R10*p(0)]
    .....
    195        A4*: R62*f(3)  0.0003041           (-1.37)*BF[163 = A4: R56*p(1)]
    196       A4*: R62*f(-3)  0.0003469            (1.72)*BF[151 = A4: R51*s(0)]
     trace = 58.00000000042941

In this table Name is constructed as follows: AtomID [*]: Rn*L(m) where AtomID is
an identifier of the atom, * indicated that this NAO belongs to Natural Rydberg Basis (NRB)
(or to Natural Minimal Basis, NMB, if no asterisk is printed), n is the identifier of the
'radial part' used by this NAO, and L and 'm' have a meaning of (quasi) L and m numbers
of (quasi) spherical harmonics (see discussion in the paper).
Note that the value of trace should be equal to the total number of electrons in the system
(within the machine round-off precision).

The final section of the output looks like this:

Final electron populations and NPA charges:

    Center  Nuclear Electron        NMB              NPA   
            charge  population      population       charge
       S1   16.0    14.7363703  14.5871856   1.2636297002
       O2   8.0     8.8104279   8.7477705   -0.8104279015
      Cl3   17.0    17.2266005  17.2061604  -0.2266005193
      Cl4   17.0    17.2266013  17.2061613  -0.2266012799

In such a form the program reports Electron Population the total occupancy of all NAOs belonging to a certain Center (a positively charged nucleus of a molecule) and separates a contribution from its Natural Minimal Basis (NMB) NAOs. NPA charge is then obtained as Z-Electron Population where Z is the charge of atomic center.

Similarly, the total occupancy of a given center can be separated into a contributions from NAOs with definite 'angular momentum' (more precisely, 'l property' - see original paper on JANPA)

    Angular momentum contributions of the total atomic population:

       Cntr           s           p           d           f           g
         S1   5.7112870   8.9108826   0.1097300   0.0044707   0.0000000
         O2   3.8304332   4.9268546   0.0486490   0.0044912   0.0000000
        Cl3   5.9506344  11.2589993   0.0154799   0.0014869   0.0000000
        Cl4   5.9506347  11.2589999   0.0154799   0.0014869   0.0000000

Another type of useful information which can be obtained using NAOs are so called 'bond indexes'. They are calculated from the elements of occupancy matrix (P = S.D.S) in NAO basis
(for details see an original paper of Wiberg and/or a review by I.Mayer)

    Wiberg-Mayer bond indexes:

        3.1181    1.4587    0.8297    0.8297
        1.4587    1.8542    0.1977    0.1977
        0.8297    0.1977    1.0910    0.0636
        0.8297    0.1977    0.0636    1.0910

This matrix is symmetric. Its rows/columns are numbered in the same way as atomic centers are.
Diagonal elements are the sums of all but the diagonal elements of a given row (or column) and
can be considered as the 'valence' of the given atomic center (~3, ~2, ~1 and ~1 for S, O, Cl and Cl in
the above example).