Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 : Copyright (c) 2016-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 : #include "core/ActionRegister.h"
23 : #include "ActionWithIntegral.h"
24 :
25 : //+PLUMEDOC GRIDANALYSIS INTEGRATE_GRID
26 : /*
27 : Calculate the total integral of the function on the input grid
28 :
29 : \par Examples
30 :
31 : */
32 : //+ENDPLUMEDOC
33 :
34 : namespace PLMD {
35 : namespace gridtools {
36 :
37 8 : class IntegrateGrid : public ActionWithIntegral {
38 : public:
39 : static void registerKeywords( Keywords& keys );
40 : explicit IntegrateGrid(const ActionOptions&ao);
41 : void compute( const unsigned& current, MultiValue& myvals ) const ;
42 : };
43 :
44 6456 : PLUMED_REGISTER_ACTION(IntegrateGrid,"INTEGRATE_GRID")
45 :
46 5 : void IntegrateGrid::registerKeywords( Keywords& keys ) {
47 5 : ActionWithIntegral::registerKeywords( keys );
48 5 : }
49 :
50 4 : IntegrateGrid::IntegrateGrid(const ActionOptions&ao):
51 : Action(ao),
52 4 : ActionWithIntegral(ao)
53 : {
54 4 : }
55 :
56 5705 : void IntegrateGrid::compute( const unsigned& current, MultiValue& myvals ) const {
57 5705 : myvals.setValue( 0, 1.0 ); myvals.setValue( 1, getVolume()*getFunctionValue( current ) );
58 11410 : if( !doNotCalculateDerivatives() ) myvals.addDerivative( 1, current, getVolume() );
59 5705 : }
60 :
61 : }
62 4839 : }
|