source: src/Potentials/Specifics/FourBodyPotential_Improper.hpp@ b794f5

Fix_FitPotential_needs_atomicnumbers
Last change on this file since b794f5 was b794f5, checked in by Frederik Heber <heber@…>, 9 years ago

tempcommit: Add ..Potentials need to supply PotentialSubgraph instead of adjacency_list.

  • Property mode set to 100644
File size: 2.8 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 /** 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
54protected:
55 /** Provides the specific subgraph for this specific empirical potential.
56 *
57 * \return subgraph describing the potential's bonding model
58 */
59 const PotentialSubgraph& getSubgraph() const
60 { return subgraph; }
61
62public:
63 FourBodyPotential_Improper(const ParticleTypes_t &_ParticleTypes);
64 FourBodyPotential_Improper(
65 const ParticleTypes_t &_ParticleTypes,
66 const double _spring_constant,
67 const double _equilibrium_distance);
68 virtual ~FourBodyPotential_Improper() {}
69
70private:
71 /** Function to obtain angle between planes from distances.
72 *
73 */
74 result_t function_theta(
75 const double &r_ij,
76 const double &r_ik,
77 const double &r_il,
78 const double &r_jk,
79 const double &r_jl,
80 const double &r_kl
81 ) const;
82
83 /** Return the token name of this specific potential.
84 *
85 * We need to override the function in order to use a different static variable.
86 *
87 * \return token name of the potential
88 */
89 const std::string& getToken() const
90 { return improper_token; }
91
92private:
93 //!> static definitions of the parameter name for this potential
94 static const ParameterNames_t ParameterNames;
95
96 //!> static token of this potential type
97 static const std::string improper_token;
98
99 //!> internal coordinator object for converting arguments_t
100 static Coordinator::ptr coordinator;
101
102 //!> internal subgraph describing the subgraph modeled by this potential
103 static const PotentialSubgraph subgraph;
104};
105
106#endif /* FOURBODYPOTENTIAL_IMPROPER_HPP_ */
Note: See TracBrowser for help on using the repository browser.