| 1 | /* | 
|---|
| 2 | * FourBodyPotential_Improper.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Jul 10, 2013 | 
|---|
| 5 | *      Author: heber | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef FOURBODYPOTENTIAL_IMPROPER_HPP_ | 
|---|
| 9 | #define FOURBODYPOTENTIAL_IMPROPER_HPP_ | 
|---|
| 10 |  | 
|---|
| 11 | // include config.h | 
|---|
| 12 | #ifdef HAVE_CONFIG_H | 
|---|
| 13 | #include <config.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 | #include "FourBodyPotential_Torsion.hpp" | 
|---|
| 17 |  | 
|---|
| 18 | class FourBodyPotential_ImproperTest; | 
|---|
| 19 | class PotentialFactory; | 
|---|
| 20 |  | 
|---|
| 21 | /** The improper potential is identical to the torsion potential with exception | 
|---|
| 22 | * of the way the angle is calculated. | 
|---|
| 23 | * | 
|---|
| 24 | * Hence, we only need to override function_theta(). | 
|---|
| 25 | * | 
|---|
| 26 | */ | 
|---|
| 27 | class FourBodyPotential_Improper : public FourBodyPotential_Torsion | 
|---|
| 28 | { | 
|---|
| 29 | //!> grant unit test access to internal parts | 
|---|
| 30 | friend class FourBodyPotential_ImproperTest; | 
|---|
| 31 | //!> grant PotentialFactory access to default cstor | 
|---|
| 32 | friend class PotentialFactory; | 
|---|
| 33 | // some repeated typedefs to avoid ambiguities | 
|---|
| 34 | typedef FunctionModel::result_t result_t; | 
|---|
| 35 | typedef FunctionModel::results_t results_t; | 
|---|
| 36 | private: | 
|---|
| 37 | /** Private default constructor. | 
|---|
| 38 | * | 
|---|
| 39 | * This prevents creation of potential without set ParticleTypes_t. | 
|---|
| 40 | * | 
|---|
| 41 | * \note PotentialFactory may use this default cstor | 
|---|
| 42 | * | 
|---|
| 43 | */ | 
|---|
| 44 | FourBodyPotential_Improper(); | 
|---|
| 45 |  | 
|---|
| 46 | /** Returns the functor that converts argument_s into the | 
|---|
| 47 | * internal coordinate described by this potential function. | 
|---|
| 48 | * | 
|---|
| 49 | * \return coordinator functor | 
|---|
| 50 | */ | 
|---|
| 51 | Coordinator::ptr getCoordinator() const | 
|---|
| 52 | { return coordinator; } | 
|---|
| 53 |  | 
|---|
| 54 | public: | 
|---|
| 55 | FourBodyPotential_Improper(const ParticleTypes_t &_ParticleTypes); | 
|---|
| 56 | FourBodyPotential_Improper( | 
|---|
| 57 | const ParticleTypes_t &_ParticleTypes, | 
|---|
| 58 | const double _spring_constant, | 
|---|
| 59 | const double _equilibrium_distance); | 
|---|
| 60 | virtual ~FourBodyPotential_Improper() {} | 
|---|
| 61 |  | 
|---|
| 62 | private: | 
|---|
| 63 | /** Function to obtain angle between planes from distances. | 
|---|
| 64 | * | 
|---|
| 65 | */ | 
|---|
| 66 | result_t function_theta( | 
|---|
| 67 | const double &r_ij, | 
|---|
| 68 | const double &r_ik, | 
|---|
| 69 | const double &r_il, | 
|---|
| 70 | const double &r_jk, | 
|---|
| 71 | const double &r_jl, | 
|---|
| 72 | const double &r_kl | 
|---|
| 73 | ) const; | 
|---|
| 74 |  | 
|---|
| 75 | /** Return the token name of this specific potential. | 
|---|
| 76 | * | 
|---|
| 77 | *  We need to override the function in order to use a different static variable. | 
|---|
| 78 | * | 
|---|
| 79 | * \return token name of the potential | 
|---|
| 80 | */ | 
|---|
| 81 | const std::string& getToken() const | 
|---|
| 82 | { return improper_token; } | 
|---|
| 83 |  | 
|---|
| 84 | private: | 
|---|
| 85 | //!> static definitions of the parameter name for this potential | 
|---|
| 86 | static const ParameterNames_t ParameterNames; | 
|---|
| 87 |  | 
|---|
| 88 | //!> static token of this potential type | 
|---|
| 89 | static const std::string improper_token; | 
|---|
| 90 |  | 
|---|
| 91 | //!> internal coordinator object for converting arguments_t | 
|---|
| 92 | static Coordinator::ptr coordinator; | 
|---|
| 93 | }; | 
|---|
| 94 |  | 
|---|
| 95 | #endif /* FOURBODYPOTENTIAL_IMPROPER_HPP_ */ | 
|---|