Class MoldenReader

All Implemented Interfaces:
GenericLineReader
Direct Known Subclasses:
QCJSONReader

public class MoldenReader extends MOReader
A molecular structure and orbital reader for MolDen files. See http://www.cmbi.ru.nl/molden/molden_format.html updated by Bob Hanson invalid input: '<'hansonr@stolaf.edu> for Jmol 12.0/12.1 adding [spacegroup] [operators] [cell] [cellaxes] for Jmol 14.3.7 adding [STO] ANGS MOPAC -- optional zeta in ANGS -- optional mopac scaling
Author:
Matthew Zwier invalid input: '<'mczwier@gmail.com>
  • Field Details

    • loadGeometries

      protected boolean loadGeometries
    • loadVibrations

      protected boolean loadVibrations
    • vibOnly

      protected boolean vibOnly
    • optOnly

      protected boolean optOnly
    • doSort

      protected boolean doSort
    • orbitalType

      protected String orbitalType
    • modelAtomCount

      protected int modelAtomCount
    • haveEnergy

      protected boolean haveEnergy
    • 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

    • MoldenReader

      public MoldenReader()
  • 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
    • finalizeSubclassReader

      public void finalizeSubclassReader() throws Exception
      Description copied from class: AtomSetCollectionReader
      optional reader-specific method run first.
      Overrides:
      finalizeSubclassReader in class AtomSetCollectionReader
      Throws:
      Exception
    • rd

      public String rd() throws Exception
      Overrides:
      rd in class AtomSetCollectionReader
      Throws:
      Exception
    • sortMOs

      protected void sortMOs()
    • 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