inline void Molecule::make_geometric_matrix() { geometric.resize(number_of_bonds, number_of_bonds); for (int i = 0; i < number_of_bonds; i++) { std::pair<int, int> bond = get_bond_by_index(i); sGTO first_sGTO= basis_[atoms_[bond.first].symbol]; sGTO second_sGTO= basis_[atoms_[bond.second].symbol]; double r = distance1(atoms_[bond.first].X, atoms_[bond.second].X); geometric(i,i) = basis_.overlap_integral(first_sGTO, second_sGTO, r); } }
inline void Molecule::make_coulomb_integrals() { unsigned n = atoms_.size(); if (coulomb_.size() != n * n) coulomb_.resize(n, n); for (unsigned i=0; i<n; i++) { const sGTO &sgto= basis_[atoms_[i].symbol]; for (unsigned j=0; j<i; j++) { const sGTO &sgto__= basis_[atoms_[j].symbol]; double r = distance1(atoms_[i].X, atoms_[j].X); double s = basis_.coulomb_integral(sgto, sgto__, r); coulomb_(i,j) = s; coulomb_(j,i) = s; } coulomb_(i,i) = atoms_[i].hardness; } }
inline void Molecule::make_coulomb_integrals(std::vector<double> &coulomb_matrix) { unsigned n = atoms_.size(); if (coulomb_matrix.size() != n * n) coulomb_matrix.resize(n * n); for (unsigned i=0; i<n; i++) { const sGTO &sgto= basis_[atoms_[i].symbol]; for (unsigned j=0; j<i; j++) { const sGTO &sgto__= basis_[atoms_[j].symbol]; double r = distance1(atoms_[i].X, atoms_[j].X); double s = basis_.coulomb_integral(sgto, sgto__, r); _E(n, &coulomb_matrix[0], i, j) = s; _E(n, &coulomb_matrix[0], j, i) = s; } _E(n, &coulomb_matrix[0], i, i) = atoms_[i].hardness; // for the diagonal elements, use hardness } }
void insert(std::string symbol, const v3dense &X) { // look up AtomSymbol to assign parameters for (unsigned i=0; i<RAPPLE_GODDARD_PARAM_COUNT; i++) { if (symbol == RAPPLE_GODDARD_PARAMS[i].symbol) { Atom atom; atom.symbol = symbol; atom.electronegativity = RAPPLE_GODDARD_PARAMS[i].electronegativity; atom.hardness = RAPPLE_GODDARD_PARAMS[i].hardness; atom.X[0] = X[0] * ANGSTROM_2_BORH; atom.X[1] = X[1] * ANGSTROM_2_BORH; atom.X[2] = X[2] * ANGSTROM_2_BORH; atoms_.push_back(atom); basis_.insert(_Orbital(symbol, RAPPLE_GODDARD_PARAMS[i].gaussian_exponent)); return; } } std::string msg = _S("[ERROR] Unknown element type : ") + symbol; PRINT_ERR(msg); }