Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 : Copyright (c) 2014-2023 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 22 : 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 74 : return arguments; 65 : } 66 : 67 : } 68 : } 69 : 70 : #endif