00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef BALL_MOLMEC_FORCEFIELDCOMPONENT_H
00010 #define BALL_MOLMEC_FORCEFIELDCOMPONENT_H
00011
00012 #ifndef BALL_COMMON_H
00013 # include <BALL/common.h>
00014 #endif
00015
00016 #ifndef BALL_DATATYPE_STRING_H
00017 # include <BALL/DATATYPE/string.h>
00018 #endif
00019
00020 #ifndef BALL_KERNEL_ATOM_H
00021 # include <BALL/KERNEL/atom.h>
00022 #endif
00023
00024 namespace BALL
00025 {
00026 class ForceField;
00027
00032 class BALL_EXPORT ForceFieldComponent
00033 {
00034
00035 friend class ForceField;
00036
00037 public:
00038
00042
00043 public:
00044
00045 BALL_CREATE(ForceFieldComponent)
00046
00047
00049 ForceFieldComponent();
00050
00053 ForceFieldComponent(ForceField& force_field);
00054
00059 ForceFieldComponent(const ForceFieldComponent& force_field_component);
00060
00063 virtual ~ForceFieldComponent();
00064
00066
00070
00073 virtual bool setup()
00074 throw(Exception::TooManyErrors);
00075
00077
00080
00084 ForceField* getForceField() const;
00085
00088 void setForceField(ForceField& force_field);
00089
00092 void setName(const String& name);
00093
00096 String getName() const;
00097
00099 bool isEnabled() const { return enabled_;}
00100
00102 void setEnabled(bool state) { enabled_ = state;}
00103
00105
00108
00111 virtual double getEnergy() const;
00112
00119 virtual double updateEnergy();
00120
00127 virtual void updateForces();
00128
00136 virtual void update()
00137 throw(Exception::TooManyErrors);
00138
00139 protected:
00140
00142
00143
00144
00145
00146
00147
00148 ForceField* force_field_;
00149
00150
00151
00152 double energy_;
00153
00154 private:
00155
00156
00157
00158
00159
00160
00161
00162
00163 String name_;
00164
00165 bool enabled_;
00166
00167
00168
00169 };
00170 }
00171
00172 #endif // BALL_MOLMEC_FORCEFIELDCOMPONENT_H