/** * TypeScript definitions for OCC JavaScript/WebAssembly bindings */ export interface Vec3 { x(): number; y(): number; z(): number; setX(val: number): void; setY(val: number): void; setZ(val: number): void; } export interface IVec3 { 0: number; 1: number; 2: number; } export interface Mat3 { rows(): number; cols(): number; get(row: number, col: number): number; set(row: number, col: number, val: number): void; } export interface Mat3Constructor { new(): Mat3; create(rows: number, cols: number): Mat3; } export interface Mat3N { set(row: number, col: number, val: number): void; get(row: number, col: number): number; rows(): number; cols(): number; } export interface IVec { size(): number; get(i: number): number; set(i: number, val: number): void; } export interface Vec { size(): number; get(i: number): number; set(i: number, val: number): void; } export interface Mat { rows(): number; cols(): number; get(row: number, col: number): number; set(row: number, col: number, val: number): void; } export interface Element { symbol: string; mass: number; name: string; vanDerWaalsRadius: number; covalentRadius: number; atomicNumber: number; toString(): string; } export interface Atom { atomicNumber: number; x: number; y: number; z: number; getPosition(): Vec3; setPosition(pos: Vec3): void; toString(): string; } export interface PointCharge { charge: number; getPosition(): Vec3; setCharge(charge: number): void; setPosition(pos: Vec3): void; toString(): string; } export enum Origin { CARTESIAN = 0, CENTROID = 1, CENTEROFMASS = 2 } export interface Molecule { size(): number; elements(): IVec; positions(): Mat3N; name(): string; setName(name: string): void; partialCharges(): Vec; setPartialCharges(charges: Vec): void; espPartialCharges(): Vec; atomicMasses(): Vec; atomicNumbers(): IVec; vdwRadii(): Vec; molarMass(): number; atoms(): Atom[]; centerOfMass(): Vec3; centroid(): Vec3; rotate(rotationMatrix: Mat3, origin: Origin): void; translate(translation: Vec3): void; rotated(rotationMatrix: Mat3, origin: Origin): Molecule; translated(translation: Vec3): Molecule; centered(origin: Origin): Molecule; translationalFreeEnergy(temperature: number, pressure: number): number; rotationalFreeEnergy(temperature: number): number; toString(): string; } export interface Dimer { a: Molecule; b: Molecule; nearestDistance: number; centerOfMassDistance: number; centroidDistance: number; symmetryRelation(): string; name: string; setName(name: string): void; } export enum PointGroup { C1 = 0, Ci = 1, Cs = 2, C2 = 3, C3 = 4, C4 = 5, C5 = 6, C6 = 7, C2v = 8, C3v = 9, C4v = 10, C5v = 11, C6v = 12, D2 = 13, D3 = 14, D4 = 15, D5 = 16, D6 = 17, D2h = 18, D3h = 19, D4h = 20, D5h = 21, D6h = 22, Td = 23, Oh = 24 } export interface MolecularPointGroup { getDescription(): string; getPointGroupString(): string; pointGroup: PointGroup; symmetryNumber: number; toString(): string; } export enum LogLevel { TRACE = 0, DEBUG = 1, INFO = 2, WARN = 3, ERROR = 4, CRITICAL = 5, OFF = 6 } export enum SpinorbitalKind { Restricted = 0, Unrestricted = 1, General = 2 } export type LogCallback = (level: LogLevel, message: string) => void; export interface LogEntry { level: number; message: string; } // Quantum mechanics types export interface AOBasis { nbf(): number; nao(): number; nsh(): number; atomOffsets(): IVec; shellOffsets(): IVec; firstBasisFunctionOfShell(shell: number): number; } export interface MolecularOrbitals { C: Mat; Cocc: Mat; Cvirt: Mat; energies: Vec; energiesOcc: Vec; energiesVirt: Vec; nAlpha: number; nBeta: number; nElectrons: number; nAOs: number; nMOs: number; } export interface HartreeFock { overlap(): Mat; kinetic(): Mat; nuclear(): Mat; coulomb(D: Mat): Mat; exchange(D: Mat): Mat; fock(D: Mat): Mat; } export interface SCFConvergenceSettings { energyThreshold: number; densityThreshold: number; maxIterations: number; diisMaxVectors: number; diisStartIteration: number; } export interface PointChargePotential { charges: VectorPointCharge; computePotentialMatrix(hf: HartreeFock): Mat; nuclearInteractionEnergy(hf: HartreeFock): number; label(): string; toString(): string; } export interface WolfPointChargePotential { charges: VectorPointCharge; molecularCharges: VectorDouble; alpha: number; cutoff: number; computePotentialMatrix(hf: HartreeFock): Mat; nuclearInteractionEnergy(hf: HartreeFock): number; label(): string; toString(): string; } export interface VectorPointCharge { size(): number; get(index: number): PointCharge; set(index: number, value: PointCharge): void; push_back(value: PointCharge): void; delete(): void; } export interface VectorDouble { size(): number; get(index: number): number; set(index: number, value: number): void; push_back(value: number): void; delete(): void; } export interface HartreeFockSCF { setConvergenceSettings(settings: SCFConvergenceSettings): void; /// Generic external-potential setter — caller supplies V_ext (nbf×nbf), /// nuclear-external interaction energy, and a label keying the /// `nuclear.