From 09ae8cd8c81a48289391190d64fa874877e95888 Mon Sep 17 00:00:00 2001 From: Giovanni Bussi <giovanni.bussi@gmail.com> Date: Tue, 26 Jul 2011 11:56:47 +0200 Subject: [PATCH] Added NORMALIZE keyword to normalize weights in COMBINE --- src/FunctionCombine.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/FunctionCombine.cpp b/src/FunctionCombine.cpp index 920f37ca1..3582a81e3 100644 --- a/src/FunctionCombine.cpp +++ b/src/FunctionCombine.cpp @@ -14,12 +14,13 @@ Calculate the polynomial combination of other variables \par Syntax \verbatim -COMBINE ARG=x1,x2,... [POWERS=p1,p2,...] [COEFFICIENTS=c1,c2,...] +COMBINE ARG=x1,x2,... [POWERS=p1,p2,...] [COEFFICIENTS=c1,c2,...] [NORMALIZE] \endverbatim The resulting variable has value \f$ \sum_i c_i x_i^{p_i} \f$. When not present, powers and coefficient are implicitly equal to 1. +If NORMALIZE is present, the c coefficients are first normalized. \par Example @@ -42,6 +43,7 @@ PRINT ARG=distance,distance2 class FunctionCombine : public Function { + bool normalize; std::vector<double> coefficients; std::vector<double> powers; public: @@ -55,6 +57,7 @@ PLUMED_REGISTER_ACTION(FunctionCombine,"COMBINE") FunctionCombine::FunctionCombine(const ActionOptions&ao): Action(ao), Function(ao), +normalize(false), coefficients(getNumberOfArguments(),1.0), powers(getNumberOfArguments(),1.0) { @@ -63,6 +66,14 @@ powers(getNumberOfArguments(),1.0) parseVector("POWERS",powers); assert(powers.size()==static_cast<unsigned>(getNumberOfArguments())); + parseFlag("NORMALIZE",normalize); + + if(normalize){ + double n=0.0; + for(unsigned i=0;i<coefficients.size();i++) n+=coefficients[i]; + for(unsigned i=0;i<coefficients.size();i++) coefficients[i]*=(1.0/n); + } + addValueWithDerivatives(""); vector<string> period; -- GitLab