| 299 |
|
}; |
| 300 |
|
|
| 301 |
|
template<typename T> class ZConstraint : public T { |
| 302 |
+ |
|
| 303 |
+ |
public: |
| 304 |
+ |
class ForceSubstractionPolicy{ |
| 305 |
+ |
public: |
| 306 |
+ |
ForceSubstractionPolicy(ZConstraint<T>* integrator) {zconsIntegrator = integrator;} |
| 307 |
+ |
|
| 308 |
+ |
virtual void update() = 0; |
| 309 |
+ |
virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) = 0; |
| 310 |
+ |
virtual double getZFOfMovingMols(Atom* atom, double totalForce) = 0; |
| 311 |
+ |
virtual double getHFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) = 0; |
| 312 |
+ |
virtual double getHFOfUnconsMols(Atom* atom, double totalForce) = 0; |
| 313 |
+ |
|
| 314 |
+ |
protected: |
| 315 |
+ |
ZConstraint<T>* zconsIntegrator;; |
| 316 |
+ |
}; |
| 317 |
+ |
|
| 318 |
+ |
class PolicyByNumber : ForceSubstractionPolicy{ |
| 319 |
+ |
public: |
| 320 |
+ |
PolicyByNumber(ZConstraint<T>* integrator) :ForceSubstractionPolicy(integrator) {} |
| 321 |
+ |
virtual void update(); |
| 322 |
+ |
virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) ; |
| 323 |
+ |
virtual double getZFOfMovingMols(Atom* atom, double totalForce) ; |
| 324 |
+ |
virtual double getHFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce); |
| 325 |
+ |
virtual double getHFOfUnconsMols(Atom* atom, double totalForce); |
| 326 |
+ |
|
| 327 |
+ |
private: |
| 328 |
+ |
int totNumOfMovingAtoms; |
| 329 |
+ |
}; |
| 330 |
|
|
| 331 |
+ |
class PolicyByMass :ForceSubstractionPolicy{ |
| 332 |
+ |
public: |
| 333 |
+ |
PolicyByMass(ZConstraint<T>* integrator) :ForceSubstractionPolicy(integrator) {} |
| 334 |
+ |
|
| 335 |
+ |
virtual void update(); |
| 336 |
+ |
virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) ; |
| 337 |
+ |
virtual double getZFOfMovingMols(Atom* atom, double totalForce) ; |
| 338 |
+ |
virtual double getHFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce); |
| 339 |
+ |
virtual double getHFOfUnconsMols(Atom* atom, double totalForce); |
| 340 |
+ |
|
| 341 |
+ |
private: |
| 342 |
+ |
double totMassOfMovingAtoms; |
| 343 |
+ |
}; |
| 344 |
+ |
|
| 345 |
|
public: |
| 346 |
|
|
| 347 |
|
ZConstraint( SimInfo *theInfo, ForceFields* the_ff); |
| 385 |
|
int isZConstraintMol(Molecule* mol); |
| 386 |
|
|
| 387 |
|
|
| 388 |
< |
double zconsTime; |
| 388 |
> |
double zconsTime; |
| 389 |
|
double zconsTol; |
| 390 |
|
double zForceConst; |
| 391 |
|
|
| 406 |
|
|
| 407 |
|
int* indexOfZConsMols; //index of local Z-Constraint Molecules |
| 408 |
|
double* fz; |
| 409 |
+ |
double* curZPos; |
| 410 |
|
|
| 411 |
|
int totNumOfUnconsAtoms; |
| 412 |
|
|
| 417 |
|
string zconsOutput; |
| 418 |
|
ZConsWriter* fzOut; |
| 419 |
|
|
| 420 |
+ |
double curZconsTime; |
| 421 |
+ |
|
| 422 |
|
double calcMovingMolsCOMVel(); |
| 423 |
|
double calcSysCOMVel(); |
| 424 |
|
double calcTotalForce(); |
| 425 |
+ |
|
| 426 |
+ |
ForceSubstractionPolicy* forcePolicy; |
| 427 |
+ |
friend class ForceSubstractionPolicy; |
| 428 |
|
|
| 429 |
|
}; |
| 430 |
|
|