source: src/Potentials/Specifics/FourBodyPotential_Improper.hpp

stable v1.7.0
Last change on this file was a0d8aa, checked in by Frederik Heber <frederik.heber@…>, 2 months ago

PotentialFactory exposes particle type numbers.

  • Also, potentials use getParticleTypeNumber() in asserts.
  • Property mode set to 100644
File size: 3.0 KB
Line 
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
18class FourBodyPotential_ImproperTest;
19class 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 */
27class 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;
36private:
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 /** Creates the binding model specific for this potential.
47 *
48 * Private because this is used internally some of the constructors.
49 *
50 * \param _ParticleTypes particle type for the potential
51 * \return binding model
52 */
53 BindingModel generateBindingModel(const EmpiricalPotential::ParticleTypes_t &_ParticleTypes) const;
54
55 /** Returns the functor that converts argument_s into the
56 * internal coordinate described by this potential function.
57 *
58 * \return coordinator functor
59 */
60 Coordinator::ptr getCoordinator() const
61 { return coordinator; }
62
63public:
64 FourBodyPotential_Improper(const ParticleTypes_t &_ParticleTypes);
65 FourBodyPotential_Improper(
66 const ParticleTypes_t &_ParticleTypes,
67 const double _spring_constant,
68 const double _equilibrium_distance);
69 virtual ~FourBodyPotential_Improper() {}
70
71 /** Getter for the graph specifying the binding model of the potential.
72 *
73 * \return BindingModel ref of the binding model
74 */
75 const BindingModel& getBindingModel() const
76 { return bindingmodel; }
77
78 /**
79 * Returns the number of particle types associated with the potential.
80 *
81 * \return number of particle types
82 */
83 unsigned int getParticleTypeNumber() const
84 { return 4; }
85
86private:
87
88 /** Return the token name of this specific potential.
89 *
90 * We need to override the function in order to use a different static variable.
91 *
92 * \return token name of the potential
93 */
94 const std::string& getToken() const
95 { return improper_token; }
96
97private:
98 //!> static definitions of the parameter name for this potential
99 static const ParameterNames_t ParameterNames;
100
101 //!> static token of this potential type
102 static const std::string improper_token;
103
104 //!> internal coordinator object for converting arguments_t
105 static Coordinator::ptr coordinator;
106
107 //!> binding model for this potential
108 const BindingModel bindingmodel;
109};
110
111#endif /* FOURBODYPOTENTIAL_IMPROPER_HPP_ */
Note: See TracBrowser for help on using the repository browser.