AngleBend.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006 #ifndef __RD_ANGLEBEND_H__
00007 #define __RD_ANGLEBEND_H__
00008
00009 #include <ForceField/Contrib.h>
00010
00011 namespace ForceFields {
00012 namespace UFF {
00013 class AtomicParams;
00014
00015
00016
00017 class AngleBendContrib : public ForceFieldContrib {
00018 public:
00019 AngleBendContrib() : d_at1Idx(-1), d_at2Idx(-1), d_at3Idx(-1),d_order(0) {};
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 AngleBendContrib(ForceField *owner,
00042 unsigned int idx1,unsigned int idx2,unsigned int idx3,
00043 double bondOrder12,double bondOrder23,
00044 const AtomicParams *at1Params,
00045 const AtomicParams *at2Params,
00046 const AtomicParams *at3Params,
00047 unsigned int order=0);
00048 double getEnergy(double *pos) const;
00049 void getGrad(double *pos,double *grad) const;
00050
00051 private:
00052 int d_at1Idx,d_at2Idx,d_at3Idx;
00053 unsigned int d_order;
00054 double d_forceConstant,d_theta0,d_C0,d_C1,d_C2;
00055
00056 double getEnergyTerm(double cosTheta,double sinThetaSq) const;
00057 double getThetaDeriv(double cosTheta,double sinTheta) const;
00058 };
00059
00060 namespace Utils {
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 double calcAngleForceConstant(double theta0,
00074 double bondOrder12,double bondOrder23,
00075 const AtomicParams *at1Params,
00076 const AtomicParams *at2Params,
00077 const AtomicParams *at3Params);
00078 }
00079 }
00080 }
00081 #endif