Search in sources :

Example 1 with UreyBradleyType

use of ffx.potential.parameters.UreyBradleyType in project ffx by mjschnie.

the class UreyBradley method ureyBradlyFactory.

/**
 * Attempt to create a new UreyBradley for the specified Angle.
 *
 * @param angle the Angle to create the UreyBradley from.
 * @param forceField the ForceField parameters to apply.
 * @return a new UreyBradley, or null.
 */
public static UreyBradley ureyBradlyFactory(Angle angle, ForceField forceField) {
    if (angle == null) {
        return null;
    }
    UreyBradleyType ureyBradleyType = forceField.getUreyBradleyType(angle.angleType.getKey());
    if (ureyBradleyType == null) {
        return null;
    }
    UreyBradley newUreyBradley = new UreyBradley(angle);
    newUreyBradley.ureyBradleyType = ureyBradleyType;
    return newUreyBradley;
}
Also used : UreyBradleyType(ffx.potential.parameters.UreyBradleyType)

Example 2 with UreyBradleyType

use of ffx.potential.parameters.UreyBradleyType in project ffx by mjschnie.

the class ForceFieldEnergyOpenMM method addUreyBradleyForce.

private void addUreyBradleyForce() {
    UreyBradley[] ureyBradleys = super.getUreyBradleys();
    if (ureyBradleys == null || ureyBradleys.length < 1) {
        return;
    }
    amoebaUreyBradleyForce = OpenMM_AmoebaBondForce_create();
    double kParameterConversion = UreyBradleyType.units * OpenMM_KJPerKcal / (OpenMM_NmPerAngstrom * OpenMM_NmPerAngstrom);
    int nUreys = ureyBradleys.length;
    for (int i = 0; i < nUreys; i++) {
        UreyBradley ureyBradley = ureyBradleys[i];
        int i1 = ureyBradley.getAtom(0).getXyzIndex() - 1;
        int i2 = ureyBradley.getAtom(2).getXyzIndex() - 1;
        UreyBradleyType ureyBradleyType = ureyBradley.ureyBradleyType;
        OpenMM_AmoebaBondForce_addBond(amoebaUreyBradleyForce, i1, i2, ureyBradleyType.distance * OpenMM_NmPerAngstrom, ureyBradleyType.forceConstant * kParameterConversion);
    }
    OpenMM_AmoebaBondForce_setAmoebaGlobalBondCubic(amoebaUreyBradleyForce, UreyBradleyType.cubic / OpenMM_NmPerAngstrom);
    OpenMM_AmoebaBondForce_setAmoebaGlobalBondQuartic(amoebaUreyBradleyForce, UreyBradleyType.quartic / (OpenMM_NmPerAngstrom * OpenMM_NmPerAngstrom));
    OpenMM_System_addForce(system, amoebaUreyBradleyForce);
    logger.log(Level.INFO, " Added Urey-Bradleys ({0})", nUreys);
}
Also used : UreyBradleyType(ffx.potential.parameters.UreyBradleyType) UreyBradley(ffx.potential.bonded.UreyBradley) OpenMM_System_addConstraint(simtk.openmm.OpenMMLibrary.OpenMM_System_addConstraint) CoordRestraint(ffx.potential.nonbonded.CoordRestraint)

Example 3 with UreyBradleyType

use of ffx.potential.parameters.UreyBradleyType in project ffx by mjschnie.

the class ForceFieldFilter method parseUreyBradley.

private void parseUreyBradley(String input, String[] tokens) {
    if (tokens.length < 5) {
        logger.log(Level.WARNING, "Invalid UREYBRAD type:\n{0}", input);
        return;
    }
    try {
        int[] atomClasses = new int[3];
        atomClasses[0] = Integer.parseInt(tokens[1]);
        atomClasses[1] = Integer.parseInt(tokens[2]);
        atomClasses[2] = Integer.parseInt(tokens[3]);
        double forceConstant = Double.parseDouble(tokens[4]);
        double distance = Double.parseDouble(tokens[5]);
        UreyBradleyType ureyType = new UreyBradleyType(atomClasses, forceConstant, distance);
        forceField.addForceFieldType(ureyType);
    } catch (NumberFormatException e) {
        String message = "Exception parsing UREYBRAD type:\n" + input + "\n";
        logger.log(Level.SEVERE, message, e);
    }
}
Also used : UreyBradleyType(ffx.potential.parameters.UreyBradleyType) ForceFieldString(ffx.potential.parameters.ForceField.ForceFieldString)

Aggregations

UreyBradleyType (ffx.potential.parameters.UreyBradleyType)3 UreyBradley (ffx.potential.bonded.UreyBradley)1 CoordRestraint (ffx.potential.nonbonded.CoordRestraint)1 ForceFieldString (ffx.potential.parameters.ForceField.ForceFieldString)1 OpenMM_System_addConstraint (simtk.openmm.OpenMMLibrary.OpenMM_System_addConstraint)1