From 14c45395f51141a931d28013c4308de384d174e7 Mon Sep 17 00:00:00 2001 From: Gareth Tribello <gareth.tribello@gmail.com> Date: Thu, 3 Aug 2017 17:05:19 +0200 Subject: [PATCH] Ran astyle and added description of changes --- CHANGES/v2.5.md | 8 ++++++++ src/multicolvar/VolumeBetweenContours.cpp | 2 +- src/pamm/PammObject.cpp | 25 +++++++++++++++-------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/CHANGES/v2.5.md b/CHANGES/v2.5.md index dbbed1220..0dedfb37c 100644 --- a/CHANGES/v2.5.md +++ b/CHANGES/v2.5.md @@ -2,3 +2,11 @@ This page contains changes that will end up in 2.5 +Changes from version 2.4 which are relevant for users: +- Changes leading to incompatible behavior: +- New actions: + - \ref PAMM + - \ref HBPAMM_MATRIX + - \ref HBPAMM_SH + +Changes from version 2.4 which are relevant for developers: diff --git a/src/multicolvar/VolumeBetweenContours.cpp b/src/multicolvar/VolumeBetweenContours.cpp index afe7b0da2..737c77ffc 100644 --- a/src/multicolvar/VolumeBetweenContours.cpp +++ b/src/multicolvar/VolumeBetweenContours.cpp @@ -104,7 +104,7 @@ VolumeInEnvelope::VolumeInEnvelope(const ActionOptions& ao): std::vector<double> pp(3,0.0), bandwidth(3); parseVector("BANDWIDTH",bandwidth); log.printf(" using %s kernel with bandwidths %f %f %f \n",getKernelType().c_str(),bandwidth[0],bandwidth[1],bandwidth[2] ); - kernel = new KernelFunctions( pp, bandwidth, getKernelType(), "DIAGONAL", 1.0 ); + kernel = new KernelFunctions( pp, bandwidth, getKernelType(), "DIAGONAL", 1.0 ); for(unsigned i=0; i<3; ++i) { pos.push_back(new Value()); pos[i]->setNotPeriodic(); } std::vector<double> csupport( kernel->getContinuousSupport() ); double maxs = csupport[0]; diff --git a/src/pamm/PammObject.cpp b/src/pamm/PammObject.cpp index e0528dba7..4147cadb1 100644 --- a/src/pamm/PammObject.cpp +++ b/src/pamm/PammObject.cpp @@ -34,7 +34,8 @@ PammObject::PammObject( const PammObject& in ): regulariser(in.regulariser), pbc(in.pbc), min(in.min), - max(in.max) + max(in.max), + kgroup_start(in.kgroup_start) { for(unsigned i=0; i<in.kernels.size(); ++i) kernels.push_back( new KernelFunctions( in.kernels[i] ) ); } @@ -63,13 +64,15 @@ void PammObject::setup( const std::string& filename, const double& reg, const st else pos[i]->setDomain( min[i], max[i] ); } - ifile.open(filename); ifile.allowIgnoredFields(); kernels.resize(0); + ifile.open(filename); ifile.allowIgnoredFields(); + kernels.resize(0); kgroup_start.resize(0); kgroup_start.push_back(0); for(unsigned k=0;; ++k) { KernelFunctions* kk = KernelFunctions::read( &ifile, false, valnames ); if( !kk ) break ; kk->normalize( pos ); kernels.push_back( kk ); ifile.scanField(); + kgroup_start.push_back( kernels.size() ); } ifile.close(); for(unsigned i=0; i<valnames.size(); ++i) delete pos[i]; @@ -86,15 +89,19 @@ void PammObject::evaluate( const std::vector<double>& invar, std::vector<double> } // Evaluate the set of kernels - double denom=regulariser; - std::vector<double> dderiv( der[0].size(), 0 ); - for(unsigned i=0; i<kernels.size(); ++i) { - outvals[i]=kernels[i]->evaluate( pos, der[i] ); - denom+=outvals[i]; - for(unsigned j=0; j<der[i].size(); ++j) dderiv[j] += der[i][j]; + double denom=regulariser; unsigned ikernel=0; + std::vector<double> tmpder( der[0].size() ), dderiv( der[0].size(), 0 ); + for(unsigned i=0; i<kgroup_start.size()-1; ++i) { + outvals[i]=0; + for(unsigned k=kgroup_start[i]; k<kgroup_start[i+1]; ++k) { + outvals[i] += kernels[ikernel]->evaluate( pos, tmpder ); + denom+=outvals[i]; + for(unsigned j=0; j<der[i].size(); ++j) { der[i][j] += tmpder[j]; dderiv[j] += tmpder[j]; } + ikernel++; + } } // Evaluate the set of derivatives - for(unsigned i=0; i<kernels.size(); ++i) { + for(unsigned i=0; i<kgroup_start.size()-1; ++i) { outvals[i]/=denom; for(unsigned j=0; j<der[i].size(); ++j) der[i][j]=der[i][j]/denom - outvals[i]*dderiv[j]/denom; } -- GitLab