/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 1.3.36
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */


public class OBForceField extends OBPlugin {
  private long swigCPtr;

  protected OBForceField(long cPtr, boolean cMemoryOwn) {
    super(openbabelJNI.SWIGOBForceFieldUpcast(cPtr), cMemoryOwn);
    swigCPtr = cPtr;
  }

  protected static long getCPtr(OBForceField obj) {
    return (obj == null) ? 0 : obj.swigCPtr;
  }

  protected void finalize() {
    delete();
  }

  public synchronized void delete() {
    if(swigCPtr != 0 && swigCMemOwn) {
      swigCMemOwn = false;
      openbabelJNI.delete_OBForceField(swigCPtr);
    }
    swigCPtr = 0;
    super.delete();
  }

  public static OBForceField Default() {
    long cPtr = openbabelJNI.OBForceField_Default();
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public static OBForceField FindType(String ID) {
    long cPtr = openbabelJNI.OBForceField_FindType(ID);
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public OBForceField MakeNewInstance() {
    long cPtr = openbabelJNI.OBForceField_MakeNewInstance(swigCPtr, this);
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public String TypeID() {
    return openbabelJNI.OBForceField_TypeID(swigCPtr, this);
  }

  public static OBForceField FindForceField(String ID) {
    long cPtr = openbabelJNI.OBForceField_FindForceField__SWIG_0(ID);
    return (cPtr == 0) ? null : new OBForceField(cPtr, false);
  }

  public void SetParameterFile(String filename) {
    openbabelJNI.OBForceField_SetParameterFile(swigCPtr, this, filename);
  }

  public String GetUnit() {
    return openbabelJNI.OBForceField_GetUnit(swigCPtr, this);
  }

  public boolean HasAnalyticalGradients() {
    return openbabelJNI.OBForceField_HasAnalyticalGradients(swigCPtr, this);
  }

  public boolean Setup(OBMol mol) {
    return openbabelJNI.OBForceField_Setup__SWIG_0(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean Setup(OBMol mol, OBFFConstraints constraints) {
    return openbabelJNI.OBForceField_Setup__SWIG_1(swigCPtr, this, OBMol.getCPtr(mol), mol, OBFFConstraints.getCPtr(constraints), constraints);
  }

  public boolean ParseParamFile() {
    return openbabelJNI.OBForceField_ParseParamFile(swigCPtr, this);
  }

  public boolean SetTypes() {
    return openbabelJNI.OBForceField_SetTypes(swigCPtr, this);
  }

  public boolean SetFormalCharges() {
    return openbabelJNI.OBForceField_SetFormalCharges(swigCPtr, this);
  }

  public boolean SetPartialCharges() {
    return openbabelJNI.OBForceField_SetPartialCharges(swigCPtr, this);
  }

  public boolean SetupCalculations() {
    return openbabelJNI.OBForceField_SetupCalculations(swigCPtr, this);
  }

  public boolean SetupPointers() {
    return openbabelJNI.OBForceField_SetupPointers(swigCPtr, this);
  }

  public boolean IsSetupNeeded(OBMol mol) {
    return openbabelJNI.OBForceField_IsSetupNeeded(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean GetAtomTypes(OBMol mol) {
    return openbabelJNI.OBForceField_GetAtomTypes(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean GetPartialCharges(OBMol mol) {
    return openbabelJNI.OBForceField_GetPartialCharges(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean GetCoordinates(OBMol mol) {
    return openbabelJNI.OBForceField_GetCoordinates(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean UpdateCoordinates(OBMol mol) {
    return openbabelJNI.OBForceField_UpdateCoordinates(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean GetConformers(OBMol mol) {
    return openbabelJNI.OBForceField_GetConformers(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean UpdateConformers(OBMol mol) {
    return openbabelJNI.OBForceField_UpdateConformers(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean SetCoordinates(OBMol mol) {
    return openbabelJNI.OBForceField_SetCoordinates(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public boolean SetConformers(OBMol mol) {
    return openbabelJNI.OBForceField_SetConformers(swigCPtr, this, OBMol.getCPtr(mol), mol);
  }

  public OBGridData GetGrid(double step, double padding, String type, double pchg) {
    long cPtr = openbabelJNI.OBForceField_GetGrid(swigCPtr, this, step, padding, type, pchg);
    return (cPtr == 0) ? null : new OBGridData(cPtr, false);
  }

  public void AddIntraGroup(OBBitVec group) {
    openbabelJNI.OBForceField_AddIntraGroup(swigCPtr, this, OBBitVec.getCPtr(group), group);
  }

  public void AddInterGroup(OBBitVec group) {
    openbabelJNI.OBForceField_AddInterGroup(swigCPtr, this, OBBitVec.getCPtr(group), group);
  }

  public void AddInterGroups(OBBitVec group1, OBBitVec group2) {
    openbabelJNI.OBForceField_AddInterGroups(swigCPtr, this, OBBitVec.getCPtr(group1), group1, OBBitVec.getCPtr(group2), group2);
  }

  public void ClearGroups() {
    openbabelJNI.OBForceField_ClearGroups(swigCPtr, this);
  }

  public boolean HasGroups() {
    return openbabelJNI.OBForceField_HasGroups(swigCPtr, this);
  }

  public void EnableCutOff(boolean enable) {
    openbabelJNI.OBForceField_EnableCutOff(swigCPtr, this, enable);
  }

  public boolean IsCutOffEnabled() {
    return openbabelJNI.OBForceField_IsCutOffEnabled(swigCPtr, this);
  }

  public void SetVDWCutOff(double r) {
    openbabelJNI.OBForceField_SetVDWCutOff(swigCPtr, this, r);
  }

  public double GetVDWCutOff() {
    return openbabelJNI.OBForceField_GetVDWCutOff(swigCPtr, this);
  }

  public void SetElectrostaticCutOff(double r) {
    openbabelJNI.OBForceField_SetElectrostaticCutOff(swigCPtr, this, r);
  }

  public double GetElectrostaticCutOff() {
    return openbabelJNI.OBForceField_GetElectrostaticCutOff(swigCPtr, this);
  }

  public void SetUpdateFrequency(int f) {
    openbabelJNI.OBForceField_SetUpdateFrequency(swigCPtr, this, f);
  }

  public int GetUpdateFrequency() {
    return openbabelJNI.OBForceField_GetUpdateFrequency(swigCPtr, this);
  }

  public void UpdatePairsSimple() {
    openbabelJNI.OBForceField_UpdatePairsSimple(swigCPtr, this);
  }

  public long GetNumPairs() {
    return openbabelJNI.OBForceField_GetNumPairs(swigCPtr, this);
  }

  public void EnableAllPairs() {
    openbabelJNI.OBForceField_EnableAllPairs(swigCPtr, this);
  }

  public double Energy(boolean arg0) {
    return openbabelJNI.OBForceField_Energy__SWIG_0(swigCPtr, this, arg0);
  }

  public double Energy() {
    return openbabelJNI.OBForceField_Energy__SWIG_1(swigCPtr, this);
  }

  public double E_Bond(boolean arg0) {
    return openbabelJNI.OBForceField_E_Bond__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_Bond() {
    return openbabelJNI.OBForceField_E_Bond__SWIG_1(swigCPtr, this);
  }

  public double E_Angle(boolean arg0) {
    return openbabelJNI.OBForceField_E_Angle__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_Angle() {
    return openbabelJNI.OBForceField_E_Angle__SWIG_1(swigCPtr, this);
  }

  public double E_StrBnd(boolean arg0) {
    return openbabelJNI.OBForceField_E_StrBnd__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_StrBnd() {
    return openbabelJNI.OBForceField_E_StrBnd__SWIG_1(swigCPtr, this);
  }

  public double E_Torsion(boolean arg0) {
    return openbabelJNI.OBForceField_E_Torsion__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_Torsion() {
    return openbabelJNI.OBForceField_E_Torsion__SWIG_1(swigCPtr, this);
  }

  public double E_OOP(boolean arg0) {
    return openbabelJNI.OBForceField_E_OOP__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_OOP() {
    return openbabelJNI.OBForceField_E_OOP__SWIG_1(swigCPtr, this);
  }

  public double E_VDW(boolean arg0) {
    return openbabelJNI.OBForceField_E_VDW__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_VDW() {
    return openbabelJNI.OBForceField_E_VDW__SWIG_1(swigCPtr, this);
  }

  public double E_Electrostatic(boolean arg0) {
    return openbabelJNI.OBForceField_E_Electrostatic__SWIG_0(swigCPtr, this, arg0);
  }

  public double E_Electrostatic() {
    return openbabelJNI.OBForceField_E_Electrostatic__SWIG_1(swigCPtr, this);
  }

  public void PrintTypes() {
    openbabelJNI.OBForceField_PrintTypes(swigCPtr, this);
  }

  public void PrintFormalCharges() {
    openbabelJNI.OBForceField_PrintFormalCharges(swigCPtr, this);
  }

  public void PrintPartialCharges() {
    openbabelJNI.OBForceField_PrintPartialCharges(swigCPtr, this);
  }

  public void PrintVelocities() {
    openbabelJNI.OBForceField_PrintVelocities(swigCPtr, this);
  }

  public boolean SetLogFile(SWIGTYPE_p_std__ostream pos) {
    return openbabelJNI.OBForceField_SetLogFile(swigCPtr, this, SWIGTYPE_p_std__ostream.getCPtr(pos));
  }

  public boolean SetLogLevel(int level) {
    return openbabelJNI.OBForceField_SetLogLevel(swigCPtr, this, level);
  }

  public int GetLogLevel() {
    return openbabelJNI.OBForceField_GetLogLevel(swigCPtr, this);
  }

  public void OBFFLog(String msg) {
    openbabelJNI.OBForceField_OBFFLog__SWIG_0(swigCPtr, this, msg);
  }

  public void DistanceGeometry() {
    openbabelJNI.OBForceField_DistanceGeometry(swigCPtr, this);
  }

  public void SystematicRotorSearch(long geomSteps) {
    openbabelJNI.OBForceField_SystematicRotorSearch__SWIG_0(swigCPtr, this, geomSteps);
  }

  public void SystematicRotorSearch() {
    openbabelJNI.OBForceField_SystematicRotorSearch__SWIG_1(swigCPtr, this);
  }

  public int SystematicRotorSearchInitialize(long geomSteps) {
    return openbabelJNI.OBForceField_SystematicRotorSearchInitialize__SWIG_0(swigCPtr, this, geomSteps);
  }

  public int SystematicRotorSearchInitialize() {
    return openbabelJNI.OBForceField_SystematicRotorSearchInitialize__SWIG_1(swigCPtr, this);
  }

  public boolean SystematicRotorSearchNextConformer(long geomSteps) {
    return openbabelJNI.OBForceField_SystematicRotorSearchNextConformer__SWIG_0(swigCPtr, this, geomSteps);
  }

  public boolean SystematicRotorSearchNextConformer() {
    return openbabelJNI.OBForceField_SystematicRotorSearchNextConformer__SWIG_1(swigCPtr, this);
  }

  public void RandomRotorSearch(long conformers, long geomSteps) {
    openbabelJNI.OBForceField_RandomRotorSearch__SWIG_0(swigCPtr, this, conformers, geomSteps);
  }

  public void RandomRotorSearch(long conformers) {
    openbabelJNI.OBForceField_RandomRotorSearch__SWIG_1(swigCPtr, this, conformers);
  }

  public void RandomRotorSearchInitialize(long conformers, long geomSteps) {
    openbabelJNI.OBForceField_RandomRotorSearchInitialize__SWIG_0(swigCPtr, this, conformers, geomSteps);
  }

  public void RandomRotorSearchInitialize(long conformers) {
    openbabelJNI.OBForceField_RandomRotorSearchInitialize__SWIG_1(swigCPtr, this, conformers);
  }

  public boolean RandomRotorSearchNextConformer(long geomSteps) {
    return openbabelJNI.OBForceField_RandomRotorSearchNextConformer__SWIG_0(swigCPtr, this, geomSteps);
  }

  public boolean RandomRotorSearchNextConformer() {
    return openbabelJNI.OBForceField_RandomRotorSearchNextConformer__SWIG_1(swigCPtr, this);
  }

  public void WeightedRotorSearch(long conformers, long geomSteps) {
    openbabelJNI.OBForceField_WeightedRotorSearch(swigCPtr, this, conformers, geomSteps);
  }

  public void SetLineSearchType(int type) {
    openbabelJNI.OBForceField_SetLineSearchType(swigCPtr, this, type);
  }

  public int GetLineSearchType() {
    return openbabelJNI.OBForceField_GetLineSearchType(swigCPtr, this);
  }

  public vector3 LineSearch(OBAtom atom, vector3 direction) {
    return new vector3(openbabelJNI.OBForceField_LineSearch__SWIG_0(swigCPtr, this, OBAtom.getCPtr(atom), atom, vector3.getCPtr(direction), direction), true);
  }

  public double LineSearch(SWIGTYPE_p_double currentCoords, SWIGTYPE_p_double direction) {
    return openbabelJNI.OBForceField_LineSearch__SWIG_1(swigCPtr, this, SWIGTYPE_p_double.getCPtr(currentCoords), SWIGTYPE_p_double.getCPtr(direction));
  }

  public double Newton2NumLineSearch(SWIGTYPE_p_double direction) {
    return openbabelJNI.OBForceField_Newton2NumLineSearch(swigCPtr, this, SWIGTYPE_p_double.getCPtr(direction));
  }

  public void LineSearchTakeStep(SWIGTYPE_p_double origCoords, SWIGTYPE_p_double direction, double step) {
    openbabelJNI.OBForceField_LineSearchTakeStep(swigCPtr, this, SWIGTYPE_p_double.getCPtr(origCoords), SWIGTYPE_p_double.getCPtr(direction), step);
  }

  public void SteepestDescent(int steps, double econv, int method) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void SteepestDescent(int steps, double econv) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void SteepestDescent(int steps) {
    openbabelJNI.OBForceField_SteepestDescent__SWIG_2(swigCPtr, this, steps);
  }

  public void SteepestDescentInitialize(int steps, double econv, int method) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void SteepestDescentInitialize(int steps, double econv) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void SteepestDescentInitialize(int steps) {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_2(swigCPtr, this, steps);
  }

  public void SteepestDescentInitialize() {
    openbabelJNI.OBForceField_SteepestDescentInitialize__SWIG_3(swigCPtr, this);
  }

  public boolean SteepestDescentTakeNSteps(int n) {
    return openbabelJNI.OBForceField_SteepestDescentTakeNSteps(swigCPtr, this, n);
  }

  public void ConjugateGradients(int steps, double econv, int method) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void ConjugateGradients(int steps, double econv) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void ConjugateGradients(int steps) {
    openbabelJNI.OBForceField_ConjugateGradients__SWIG_2(swigCPtr, this, steps);
  }

  public void ConjugateGradientsInitialize(int steps, double econv, int method) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_0(swigCPtr, this, steps, econv, method);
  }

  public void ConjugateGradientsInitialize(int steps, double econv) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_1(swigCPtr, this, steps, econv);
  }

  public void ConjugateGradientsInitialize(int steps) {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_2(swigCPtr, this, steps);
  }

  public void ConjugateGradientsInitialize() {
    openbabelJNI.OBForceField_ConjugateGradientsInitialize__SWIG_3(swigCPtr, this);
  }

  public boolean ConjugateGradientsTakeNSteps(int n) {
    return openbabelJNI.OBForceField_ConjugateGradientsTakeNSteps(swigCPtr, this, n);
  }

  public void GenerateVelocities() {
    openbabelJNI.OBForceField_GenerateVelocities(swigCPtr, this);
  }

  public void CorrectVelocities() {
    openbabelJNI.OBForceField_CorrectVelocities(swigCPtr, this);
  }

  public void MolecularDynamicsTakeNSteps(int n, double T, double timestep, int method) {
    openbabelJNI.OBForceField_MolecularDynamicsTakeNSteps__SWIG_0(swigCPtr, this, n, T, timestep, method);
  }

  public void MolecularDynamicsTakeNSteps(int n, double T, double timestep) {
    openbabelJNI.OBForceField_MolecularDynamicsTakeNSteps__SWIG_1(swigCPtr, this, n, T, timestep);
  }

  public void MolecularDynamicsTakeNSteps(int n, double T) {
    openbabelJNI.OBForceField_MolecularDynamicsTakeNSteps__SWIG_2(swigCPtr, this, n, T);
  }

  public OBFFConstraints GetConstraints() {
    return new OBFFConstraints(openbabelJNI.OBForceField_GetConstraints(swigCPtr, this), false);
  }

  public void SetConstraints(OBFFConstraints constraints) {
    openbabelJNI.OBForceField_SetConstraints(swigCPtr, this, OBFFConstraints.getCPtr(constraints), constraints);
  }

  public void SetFixAtom(int index) {
    openbabelJNI.OBForceField_SetFixAtom(swigCPtr, this, index);
  }

  public void UnsetFixAtom() {
    openbabelJNI.OBForceField_UnsetFixAtom(swigCPtr, this);
  }

  public void SetIgnoreAtom(int index) {
    openbabelJNI.OBForceField_SetIgnoreAtom(swigCPtr, this, index);
  }

  public void UnsetIgnoreAtom() {
    openbabelJNI.OBForceField_UnsetIgnoreAtom(swigCPtr, this);
  }

  public static boolean IgnoreCalculation(int a, int b) {
    return openbabelJNI.OBForceField_IgnoreCalculation__SWIG_0(a, b);
  }

  public static boolean IgnoreCalculation(int a, int b, int c) {
    return openbabelJNI.OBForceField_IgnoreCalculation__SWIG_1(a, b, c);
  }

  public static boolean IgnoreCalculation(int a, int b, int c, int d) {
    return openbabelJNI.OBForceField_IgnoreCalculation__SWIG_2(a, b, c, d);
  }

  public boolean DetectExplosion() {
    return openbabelJNI.OBForceField_DetectExplosion(swigCPtr, this);
  }

  public vector3 ValidateLineSearch(OBAtom atom, vector3 direction) {
    return new vector3(openbabelJNI.OBForceField_ValidateLineSearch(swigCPtr, this, OBAtom.getCPtr(atom), atom, vector3.getCPtr(direction), direction), true);
  }

  public void ValidateSteepestDescent(int steps) {
    openbabelJNI.OBForceField_ValidateSteepestDescent(swigCPtr, this, steps);
  }

  public void ValidateConjugateGradients(int steps) {
    openbabelJNI.OBForceField_ValidateConjugateGradients(swigCPtr, this, steps);
  }

  public boolean Validate() {
    return openbabelJNI.OBForceField_Validate(swigCPtr, this);
  }

  public boolean ValidateGradients() {
    return openbabelJNI.OBForceField_ValidateGradients(swigCPtr, this);
  }

  public vector3 ValidateGradientError(vector3 numgrad, vector3 anagrad) {
    return new vector3(openbabelJNI.OBForceField_ValidateGradientError(swigCPtr, this, vector3.getCPtr(numgrad), numgrad, vector3.getCPtr(anagrad), anagrad), true);
  }

  public static double VectorBondDerivative(SWIGTYPE_p_double pos_a, SWIGTYPE_p_double pos_b, SWIGTYPE_p_double force_a, SWIGTYPE_p_double force_b) {
    return openbabelJNI.OBForceField_VectorBondDerivative(SWIGTYPE_p_double.getCPtr(pos_a), SWIGTYPE_p_double.getCPtr(pos_b), SWIGTYPE_p_double.getCPtr(force_a), SWIGTYPE_p_double.getCPtr(force_b));
  }

  public static double VectorDistanceDerivative(SWIGTYPE_p_double pos_i, SWIGTYPE_p_double pos_j, SWIGTYPE_p_double force_i, SWIGTYPE_p_double force_j) {
    return openbabelJNI.OBForceField_VectorDistanceDerivative(SWIGTYPE_p_double.getCPtr(pos_i), SWIGTYPE_p_double.getCPtr(pos_j), SWIGTYPE_p_double.getCPtr(force_i), SWIGTYPE_p_double.getCPtr(force_j));
  }

  public static double VectorLengthDerivative(vector3 a, vector3 b) {
    return openbabelJNI.OBForceField_VectorLengthDerivative(vector3.getCPtr(a), a, vector3.getCPtr(b), b);
  }

  public static double VectorAngleDerivative(SWIGTYPE_p_double pos_a, SWIGTYPE_p_double pos_b, SWIGTYPE_p_double pos_c, SWIGTYPE_p_double force_a, SWIGTYPE_p_double force_b, SWIGTYPE_p_double force_c) {
    return openbabelJNI.OBForceField_VectorAngleDerivative__SWIG_0(SWIGTYPE_p_double.getCPtr(pos_a), SWIGTYPE_p_double.getCPtr(pos_b), SWIGTYPE_p_double.getCPtr(pos_c), SWIGTYPE_p_double.getCPtr(force_a), SWIGTYPE_p_double.getCPtr(force_b), SWIGTYPE_p_double.getCPtr(force_c));
  }

  public static double VectorAngleDerivative(vector3 a, vector3 b, vector3 c) {
    return openbabelJNI.OBForceField_VectorAngleDerivative__SWIG_1(vector3.getCPtr(a), a, vector3.getCPtr(b), b, vector3.getCPtr(c), c);
  }

  public static double VectorOOPDerivative(SWIGTYPE_p_double pos_a, SWIGTYPE_p_double pos_b, SWIGTYPE_p_double pos_c, SWIGTYPE_p_double pos_d, SWIGTYPE_p_double force_a, SWIGTYPE_p_double force_b, SWIGTYPE_p_double force_c, SWIGTYPE_p_double force_d) {
    return openbabelJNI.OBForceField_VectorOOPDerivative__SWIG_0(SWIGTYPE_p_double.getCPtr(pos_a), SWIGTYPE_p_double.getCPtr(pos_b), SWIGTYPE_p_double.getCPtr(pos_c), SWIGTYPE_p_double.getCPtr(pos_d), SWIGTYPE_p_double.getCPtr(force_a), SWIGTYPE_p_double.getCPtr(force_b), SWIGTYPE_p_double.getCPtr(force_c), SWIGTYPE_p_double.getCPtr(force_d));
  }

  public static double VectorOOPDerivative(vector3 a, vector3 b, vector3 c, vector3 d) {
    return openbabelJNI.OBForceField_VectorOOPDerivative__SWIG_1(vector3.getCPtr(a), a, vector3.getCPtr(b), b, vector3.getCPtr(c), c, vector3.getCPtr(d), d);
  }

  public static double VectorTorsionDerivative(SWIGTYPE_p_double pos_a, SWIGTYPE_p_double pos_b, SWIGTYPE_p_double pos_c, SWIGTYPE_p_double pos_d, SWIGTYPE_p_double force_a, SWIGTYPE_p_double force_b, SWIGTYPE_p_double force_c, SWIGTYPE_p_double force_d) {
    return openbabelJNI.OBForceField_VectorTorsionDerivative__SWIG_0(SWIGTYPE_p_double.getCPtr(pos_a), SWIGTYPE_p_double.getCPtr(pos_b), SWIGTYPE_p_double.getCPtr(pos_c), SWIGTYPE_p_double.getCPtr(pos_d), SWIGTYPE_p_double.getCPtr(force_a), SWIGTYPE_p_double.getCPtr(force_b), SWIGTYPE_p_double.getCPtr(force_c), SWIGTYPE_p_double.getCPtr(force_d));
  }

  public static double VectorTorsionDerivative(vector3 a, vector3 b, vector3 c, vector3 d) {
    return openbabelJNI.OBForceField_VectorTorsionDerivative__SWIG_1(vector3.getCPtr(a), a, vector3.getCPtr(b), b, vector3.getCPtr(c), c, vector3.getCPtr(d), d);
  }

  public static void VectorSubtract(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double result) {
    openbabelJNI.OBForceField_VectorSubtract__SWIG_0(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(result));
  }

  public static void VectorAdd(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double result) {
    openbabelJNI.OBForceField_VectorAdd(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(result));
  }

  public static void VectorDivide(SWIGTYPE_p_double i, double n, SWIGTYPE_p_double result) {
    openbabelJNI.OBForceField_VectorDivide(SWIGTYPE_p_double.getCPtr(i), n, SWIGTYPE_p_double.getCPtr(result));
  }

  public static void VectorMultiply(SWIGTYPE_p_double i, double n, SWIGTYPE_p_double result) {
    openbabelJNI.OBForceField_VectorMultiply__SWIG_0(SWIGTYPE_p_double.getCPtr(i), n, SWIGTYPE_p_double.getCPtr(result));
  }

  public static void VectorSelfMultiply(SWIGTYPE_p_double i, double n) {
    openbabelJNI.OBForceField_VectorSelfMultiply(SWIGTYPE_p_double.getCPtr(i), n);
  }

  public static void VectorNormalize(SWIGTYPE_p_double i) {
    openbabelJNI.OBForceField_VectorNormalize(SWIGTYPE_p_double.getCPtr(i));
  }

  public static void VectorCopy(SWIGTYPE_p_double from, SWIGTYPE_p_double to) {
    openbabelJNI.OBForceField_VectorCopy(SWIGTYPE_p_double.getCPtr(from), SWIGTYPE_p_double.getCPtr(to));
  }

  public static double VectorLength(SWIGTYPE_p_double i) {
    return openbabelJNI.OBForceField_VectorLength(SWIGTYPE_p_double.getCPtr(i));
  }

  public static double VectorDistance(SWIGTYPE_p_double pos_i, SWIGTYPE_p_double pos_j) {
    return openbabelJNI.OBForceField_VectorDistance(SWIGTYPE_p_double.getCPtr(pos_i), SWIGTYPE_p_double.getCPtr(pos_j));
  }

  public static double VectorAngle(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double k) {
    return openbabelJNI.OBForceField_VectorAngle(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(k));
  }

  public static double VectorTorsion(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double k, SWIGTYPE_p_double l) {
    return openbabelJNI.OBForceField_VectorTorsion(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(k), SWIGTYPE_p_double.getCPtr(l));
  }

  public static double VectorOOP(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double k, SWIGTYPE_p_double l) {
    return openbabelJNI.OBForceField_VectorOOP(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(k), SWIGTYPE_p_double.getCPtr(l));
  }

  public static void VectorClear(SWIGTYPE_p_double i) {
    openbabelJNI.OBForceField_VectorClear(SWIGTYPE_p_double.getCPtr(i));
  }

  public static double VectorDot(SWIGTYPE_p_double i, SWIGTYPE_p_double j) {
    return openbabelJNI.OBForceField_VectorDot(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j));
  }

  public static void VectorCross(SWIGTYPE_p_double i, SWIGTYPE_p_double j, SWIGTYPE_p_double result) {
    openbabelJNI.OBForceField_VectorCross(SWIGTYPE_p_double.getCPtr(i), SWIGTYPE_p_double.getCPtr(j), SWIGTYPE_p_double.getCPtr(result));
  }

  public static void PrintVector(SWIGTYPE_p_double i) {
    openbabelJNI.OBForceField_PrintVector(SWIGTYPE_p_double.getCPtr(i));
  }

}
