Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 : Copyright (c) 2014-2019 The plumed team
3 : (see the PEOPLE file at the root of the distribution for a list of names)
4 :
5 : See http://www.plumed.org for more information.
6 :
7 : This file is part of plumed, version 2.
8 :
9 : plumed is free software: you can redistribute it and/or modify
10 : it under the terms of the GNU Lesser General Public License as published by
11 : the Free Software Foundation, either version 3 of the License, or
12 : (at your option) any later version.
13 :
14 : plumed is distributed in the hope that it will be useful,
15 : but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : GNU Lesser General Public License for more details.
18 :
19 : You should have received a copy of the GNU Lesser General Public License
20 : along with plumed. If not, see <http://www.gnu.org/licenses/>.
21 : +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22 : #ifndef __PLUMED_vesselbase_ActionWithInputVessel_h
23 : #define __PLUMED_vesselbase_ActionWithInputVessel_h
24 :
25 : #include "core/Action.h"
26 : #include "Vessel.h"
27 : #include <vector>
28 :
29 : namespace PLMD {
30 : namespace vesselbase {
31 :
32 : /**
33 : \ingroup MULTIINHERIT
34 : */
35 :
36 : class ActionWithInputVessel : public virtual Action {
37 : private:
38 : Vessel* arguments;
39 : BridgeVessel* myBridgeVessel;
40 : protected:
41 : /// What type of arguments are we reading in
42 : void readArgument( const std::string& type );
43 : /// Return a pointer to specific argument
44 : Vessel* getPntrToArgument();
45 : /// Add forces to arguments (used in apply)
46 : void addForcesOnArguments( const std::vector<double>& forces );
47 : public:
48 : /// Registers the list of keywords
49 : static void registerKeywords( Keywords& keys );
50 : explicit ActionWithInputVessel(const ActionOptions&);
51 19 : virtual ~ActionWithInputVessel() {}
52 : /// Calculate the numerical derivatives
53 : /// N.B. only pass an ActionWithValue to this routine if you know exactly what you
54 : /// are doing. The default will be correct for the vast majority of cases
55 : virtual void calculateNumericalDerivatives( ActionWithValue* a=NULL );
56 : /// Apply forces from the bridge
57 : void applyBridgeForces( const std::vector<double>& bb );
58 : /// Apply forces from the bridge
59 0 : virtual void addBridgeForces( const std::vector<double>& bb ) {}
60 : };
61 :
62 : inline
63 : Vessel* ActionWithInputVessel::getPntrToArgument() {
64 59 : return arguments;
65 : }
66 :
67 : }
68 : }
69 :
70 : #endif
|