Class MopacGraphfReader

All Implemented Interfaces:
GenericLineReader

public class MopacGraphfReader extends MOReader
Reads Mopac 2007 GRAPHF output files
Author:
Bob Hanson invalid input: '<'hansonr@stolaf.edu>
  • Field Details

    • MIN_COEF

      protected static final float MIN_COEF
      See Also:
    • atomicNumbers

      protected int[] atomicNumbers
    • mopacBasis

      protected float[][] mopacBasis
      GAMESS may need AM1, PMn, or RM1 zeta/coef data
    • allowMopacDCoef

      protected boolean allowMopacDCoef
    • MOPAC_TYPES

      public static final String MOPAC_TYPES
      See Also:
    • scaleSlaters

      protected boolean scaleSlaters
    • _1_4pi

      protected static final double _1_4pi
      See Also:
    • fact_2n

      protected static final double[] fact_2n
  • Constructor Details

    • MopacGraphfReader

      public MopacGraphfReader()
  • Method Details

    • initializeReader

      protected void initializeReader()
      Overrides:
      initializeReader in class MOReader
    • checkLine

      protected boolean checkLine() throws Exception
      Overrides:
      checkLine in class AtomSetCollectionReader
      Returns:
      true if need to read new line
      Throws:
      Exception
    • scaleSlater

      protected double scaleSlater(int ex, int ey, int ez, int er, double zeta)
      overrides method in SlaterReader to allow for MOPAC's treatment of the radial exponent differently depending upon position in the periodic table -- noble gases and transition metals and for the fact that these are spherical functions (5D, not 6D) ignores any F orbitals.
      Parameters:
      ex -
      ey -
      ez -
      er -
      zeta -
      Returns:
      scaling factor
    • setMOData

      public void setMOData(boolean clearOrbitals)
      Overrides:
      setMOData in class MOReader
    • addSlaterBasis

      protected void addSlaterBasis()
      When slater basis is referred to only by "AM1" "PM6" etc., as in GAMESS
      Overrides:
      addSlaterBasis in class MOReader
    • createMopacSlaters

      public void createMopacSlaters(int iAtom, int atomicNumber, float[] values, boolean allowD)
    • createSphericalSlaterByType

      protected void createSphericalSlaterByType(int iAtom, int atomicNumber, String type, double zeta, float coef)
      We have the type as a string and need to translate that to exponents for x, y, z, and r. No F here.
      Parameters:
      iAtom -
      atomicNumber -
      type -
      zeta -
      coef -
    • getMopacAtomZetaSPD

      public static float[][] getMopacAtomZetaSPD(String type)
      Retrieve the MOPAC zeta(1/bohr) [s,p,d] array by atom number
      Parameters:
      type -
      Returns:
      [[zs,zp,zd],[zs,zp,zd]...] where [1] is for hydrogen, [6] is for carbon, etc.
    • addSlater

      protected final SlaterData addSlater(int iAtom, int a, int b, int c, int d, double zeta, double coef)
      We build two data structures for each slater: int[] slaterInfo[] = {iatom, a, b, c, d} float[] slaterData[] = {zeta, coef} where psi = (coef)(x^a)(y^b)(z^c)(r^d)exp(-zeta*r) Mopac: a == -2 ==> z^2 ==> (coef)(2z^2-x^2-y^2)(r^d)exp(-zeta*r) and: b == -2 ==> (coef)(x^2-y^2)(r^d)exp(-zeta*r)
      Parameters:
      iAtom - now 1-based
      a -
      b -
      c -
      d -
      zeta -
      coef -
    • getSlaters

      protected Lst<SlaterData> getSlaters()
    • addSlater

      protected void addSlater(SlaterData sd, int n)
    • setSlaters

      protected final void setSlaters(boolean doSort)
      after the vectors intinfo and floatinfo are completed, we
      Parameters:
      doSort - TODO
    • setMOs

      protected final void setMOs(String units)
    • sortOrbitalCoefficients

      protected void sortOrbitalCoefficients(int[] pointers)
      sorts coefficients by atomic number for speed later
      Parameters:
      pointers -
    • sortOrbitals

      protected void sortOrbitals()
      sorts orbitals by energy rather than by symmetry so that we can use "MO HOMO" "MO HOMO - 1" "MO LUMO"
    • fact

      protected static double fact(double f, double zeta, int n)
      Sincere thanks to Miroslav Kohout (DGRID) for helping me get this right -- Bob Hanson, 1/5/2010 slater scaling based on zeta, n, l, and x y z exponents. sqrt[(2zeta)^(2n + 1) * f / 4pi / (2n)!] where f = (2 el + 1)!! / (2 ex - 1)!! / (2 ey - 1)!! / (2 ez - 1)!! The double factorials are precalculated.
      Parameters:
      f -
      zeta -
      n -
      Returns:
      scaled exponent
    • getSlaterConstCartesian

      protected static final double getSlaterConstCartesian(int n, double zeta, int el, int ex, int ey, int ez)
      scales slater using double factorials involving quantum number n, l, and xyz exponents. fact2[x] is (2x - 1)!! Since x!! = 1 for x = 1, 0 or -1, we can just ignore this part for s and p orbitals, where x, y, and z are all 0 or 1. 7!! = 105 5!! = 15 3!! = 3 Numerators/4pi: all d orbitals: fact2[3] = (2*2 + 1)!! = 5!! = 15/4pi all f orbitals: fact2[4] = (2*3 + 1)!! = 7!! = 105/4pi Denominators: dxy, dyz, dxz all are 1 giving 15/4pi dx2, dy2, and dz2 all have one "2", giving 15/3!!/4pi or 5/4pi
      Parameters:
      n -
      zeta -
      el -
      ex -
      ey -
      ez -
      Returns:
      scaled exponent