bool UffAngleBendCalculation::setup() { const UffAtomParameters *pa = parameters(atom(0)); const UffAtomParameters *pb = parameters(atom(1)); const UffAtomParameters *pc = parameters(atom(2)); if(!pa || !pb || !pc){ return false; } chemkit::Real theta0 = pb->theta * chemkit::constants::DegreesToRadians; const chemkit::Bond *bond_ab = atom(0)->atom()->bondTo(atom(1)->atom()); const chemkit::Bond *bond_bc = atom(1)->atom()->bondTo(atom(2)->atom()); chemkit::Real bo_ij = bond_ab->order(); chemkit::Real bo_jk = bond_bc->order(); chemkit::Real r_ab = bondLength(pa, pb, bo_ij); chemkit::Real r_bc = bondLength(pb, pc, bo_jk); chemkit::Real r_ac = sqrt(pow(r_ab, 2) + pow(r_bc, 2) - (2.0 * r_ab * r_bc * cos(theta0))); chemkit::Real beta = 664.12 / (r_ab * r_bc); chemkit::Real z_a = pa->Z; chemkit::Real z_c = pc->Z; // equation 13 chemkit::Real ka = beta * ((z_a * z_c) / pow(r_ac, 5)) * r_ab * r_bc * (3.0 * r_ab * r_bc * (1.0 - pow(cos(theta0), 2.0)) - (pow(r_ac, 2.0) * cos(theta0))); setParameter(0, ka); chemkit::Real c2 = 1 / (4 * pow(sin(theta0), 2)); chemkit::Real c1 = -4 * c2 * cos(theta0); chemkit::Real c0 = c2 * (2 * pow(cos(theta0), 2) + 1); setParameter(1, c0); setParameter(2, c1); setParameter(3, c2); return true; }
bool UffBondStrechCalculation::setup() { const UffAtomParameters *pa = parameters(atom(0)); const UffAtomParameters *pb = parameters(atom(1)); if(!pa || !pb){ return false; } // n = bondorder (1.5 for aromatic, 1.366 for amide) chemkit::Real bondorder = bondOrder(atom(0), atom(1)); chemkit::Real r0 = bondLength(pa, pb, bondorder); // parameter(1) = k_ij = 664.12 * (Z*_i * Z*_j) / r_ij^3 chemkit::Real za = pa->Z; chemkit::Real zb = pb->Z; chemkit::Real kb = 664.12 * (za * zb) / pow(r0, 3); setParameter(0, kb); setParameter(1, r0); return true; }
void GraphNodeParameters::decrementBondLength() { bondLength(bondLength() - bondLengthIncrement); }