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;
}
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);
}
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);
}
}
Aggregations