Class AmsReader
java.lang.Object
org.jmol.adapter.smarter.AtomSetCollectionReader
org.jmol.adapter.readers.quantum.BasisFunctionReader
org.jmol.adapter.readers.quantum.MOReader
org.jmol.adapter.readers.quantum.AdfReader
org.jmol.adapter.readers.quantum.AmsReader
- All Implemented Interfaces:
GenericLineReader
A reader for AMS output subclassing the older AdfReader.
Amsterdam Modeling Suite (AMS) is a quantum chemistry program
by Scientific Computing invalid input: '&' Modelling NV (SCM)
(http://www.scm.com/), superseding previous ADF
The reader was directly adapted from the code of the ADF reader
authored by Bradley A. Smith, to make it work on the new structure
of AMS output files.
Added note by Bob Hanson 9/12/2023
Most of this patch was duplicate code in AdfReader.
This code was consolidated by subclassing.
It has not been tested.
- Version:
- 1.0
- Author:
- Diego Garay-Ruiz (dgaray@iciq.es)
-
Nested Class Summary
Nested classes/interfaces inherited from class AdfReader
AdfReader.SymmetryDataNested classes/interfaces inherited from class BasisFunctionReader
BasisFunctionReader.MOEnergySorter -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final doubleprotected static final double[]protected booleanFields inherited from class AdfReader
energy, htSymmetries, isADF, nXX, symLine, vSymmetriesFields inherited from class MOReader
allowNoOrbitals, energyUnits, forceMOPAC, gaussianCount, gaussians, haveNboCharges, haveNboOrbitals, HEADER_GAMESS_OCCUPANCIES, HEADER_GAMESS_ORIGINAL, HEADER_GAMESS_UK_MO, HEADER_NONE, lastMoData, moTypes, orbitalsRead, shellCountFields inherited from class BasisFunctionReader
alphaBeta, dfCoefMaps, haveCoefs, ignoreMOs, moData, nCoef, nOrbitals, orbitals, shells, slaterArray, slatersFields inherited from class AtomSetCollectionReader
addedData, addedDataKey, addVibrations, allow_a_len_1, allowPDBFilter, ANGSTROMS_PER_BOHR, applySymmetryToBonds, asc, baseAtomIndex, baseBondIndex, binaryDoc, bsFilter, bsModels, calculationType, CELL_TYPE_CONVENTIONAL, CELL_TYPE_PRIMITIVE, CELL_TYPE_SUPER, cellSlop, centroidPacked, checkNearAtoms, continuing, debugging, desiredModelNumber, desiredSpaceGroupIndex, desiredVibrationNumber, doApplySymmetry, doCentralize, doCentroidUnitCell, doCheckUnitCell, doConvertToFractional, doPackUnitCell, doProcessLines, doReadMolecularOrbitals, dssr, fileName, fileOffset, filePath, fileScaling, fillRange, filter, filterAllHetero, filterCased, filteredPrecision, filterHetero, floatifyJavaDouble, forcePacked, getHeader, haveAtomFilter, haveModel, havePartialChargeFilter, htParams, ignoreFileSpaceGroupName, ignoreFileSymmetryOperators, ignoreFileUnitCell, ignoreStructure, iHaveFractionalCoordinates, iHaveSymmetryOperators, iHaveUnitCell, is2D, isBinary, isConcatenated, isDSSP1, isFinalized, isMolecular, isPrimitive, isSequential, isSUPERCELL, isTrajectory, latticeCells, latticeScaling, latticeType, line, lowPrecision, lstNCS, matUnitCellOrientation, merging, modDim, modelNumber, ms, mustFinalizeModelSet, next, noHydrogens, noMinimize, noPack, optimize2D, out, paramsCentroid, paramsLattice, precision, prevline, primitiveToCrystal, ptLine, ptSupercell, reader, readerName, requiresBSFilter, reverseModels, rotateHexCell, sgName, slabXY, stateScriptVersionInt, strSupercell, symmetry, templateAtomCount, thisBiomolecule, trajectorySteps, ucItems, unitCellOffset, unitCellParams, useAltNames, useFileModelNumbers, validation, vibrationNumber, vibsFractional, vwr -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final SlaterDataaddSlater(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)protected voidaddSlater(SlaterData sd, int n) protected static doublefact(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.protected static final doublegetSlaterConstCartesian(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.protected Lst<SlaterData> voidprotected doublescaleSlater(int ex, int ey, int ez, int er, double zeta) Perform implementation-specific scaling.protected final voidprotected final voidsetSlaters(boolean doSort) after the vectors intinfo and floatinfo are completed, weprotected voidsortOrbitalCoefficients(int[] pointers) sorts coefficients by atomic number for speed laterprotected voidsorts orbitals by energy rather than by symmetry so that we can use "MO HOMO" "MO HOMO - 1" "MO LUMO"Methods inherited from class AdfReader
addMo, checkLine, readCoordinates, readFrequencies, readMolecularOrbitals, readOldFrequency, readSlaterBasis, readSymmetriesMethods inherited from class MOReader
addCoef, addMOData, addSlaterBasis, checkNboLine, getMOHeader, getNboTypes, readMolecularOrbitals, setMODataMethods inherited from class BasisFunctionReader
canonicalizeQuantumSubshellTag, clearOrbitals, discardPreviousAtoms, enableShell, filterMO, fixSlaterTypes, getDfCoefMaps, getDFMap, getQuantumShellTag, getQuantumShellTagID, getQuantumShellTagIDSpherical, setMOMethods inherited from class AtomSetCollectionReader
addAtomXYZSymName, addExplicitLatticeVector, addJmolScript, addMoreUnitCellInfo, addSites, addSiteScript, appendLoadNote, applySymmetryAndSetTrajectory, applySymTrajASCR, checkAndRemoveFilterKey, checkCurrentLineForScript, checkFilterKey, checkLastModel, checkLineForScript, clearUnitCell, cloneLastAtomSet, discardLinesUntilBlank, discardLinesUntilContains, discardLinesUntilContains2, discardLinesUntilNonBlank, discardLinesUntilStartsWith, doGetModel, doGetVibration, doPreSymmetry, fill3x3, fillDataBlock, fillDataBlockFixed, fillFloatArray, fillFrequencyData, filterAtom, filterReject, finalizeMOData, finalizeModelSet, finalizeReaderASCR, finalizeSubclassReader, finalizeSubclassSymmetry, fixDoubleA, fixFloatA, fixFloatPt, forceSymmetry, fractionalizeCoordinates, getElementSymbol, getFilter, getFilterWithCase, getFortranFormatLengths, getInterface, getPackingRangeValue, getStrings, getSymmetry, getTokens, getTokensFloat, initializeSymmetry, initializeSymmetryOptions, initializeTrajectoryFile, isLastModel, newAtomSet, parseFloat, parseFloatRange, parseFloatStr, parseInt, parseIntAt, parseIntRange, parseIntStr, parsePrecision, parseToken, parseTokenNext, parseTokenRange, parseTokenStr, processBinaryDocument, processDOM, rd, read3Vectors, readDataObject, readLines, readNextLine, rejectAtomName, RL, set2D, setAtomCoord, setAtomCoordScaled, setAtomCoordTokens, setAtomCoordXYZ, setChainID, setElementAndIsotope, setFilter, setFilterAtomTypeStr, setFractionalCoordinates, setIsPDB, setLoadNote, setModelPDB, setPrecision, setSpaceGroupName, setSymmetryOperator, setTransform, setUnitCell, setUnitCellItem, setup, setupASCR, warnSkippingOperation
-
Field Details
-
scaleSlaters
protected boolean scaleSlaters -
_1_4pi
protected static final double _1_4pi- See Also:
-
fact_2n
protected static final double[] fact_2n
-
-
Constructor Details
-
AmsReader
public AmsReader()
-
-
Method Details
-
initializeReader
public void initializeReader()- Overrides:
initializeReaderin classAdfReader
-
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-baseda-b-c-d-zeta-coef-
-
getSlaters
-
addSlater
-
setSlaters
protected final void setSlaters(boolean doSort) after the vectors intinfo and floatinfo are completed, we- Parameters:
doSort- TODO
-
setMOs
-
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" -
scaleSlater
protected double scaleSlater(int ex, int ey, int ez, int er, double zeta) Perform implementation-specific scaling. This method is subclassed in MopacSlaterReader to handle spherical slaters- Parameters:
ex-ey-ez-er-zeta-- Returns:
- scaling factor
-
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
-