From 7f8baf4faa36bac85aa01a874c75094f60203721 Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Fri, 1 Mar 2024 11:59:55 -0600
Subject: [PATCH] Compute PMF grid mean values only once for faster startup

---
 src/Configuration.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/Configuration.cpp b/src/Configuration.cpp
index 0df5f36..d0017a1 100644
--- a/src/Configuration.cpp
+++ b/src/Configuration.cpp
@@ -348,6 +348,12 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) :
 	    }
 	}
 
+	std::map<std::string,float> grid_mean_dict;
+	for (const auto& pair : part_grid_dictionary)
+	{
+	    grid_mean_dict.insert({pair.first, pair.second.mean()});
+	}
+
 	// Then assign grid addresses to particles
 	for (int i = 0; i < numParts; i++)
         {
@@ -358,7 +364,7 @@ Configuration::Configuration(const char* config_file, int simNum, bool debug) :
 	    {
 		part[i].pmf[j] = &(part_grid_dictionary.find( std::string(partGridFile[i][j]) )->second);
 		part[i].pmf_scale[j] = partGridFileScale[i][j];
-		part[i].meanPmf[j] = part[i].pmf[j]->mean(); // TODO: review how this is used and decide whether to scale
+		part[i].meanPmf[j] = grid_mean_dict.find( std::string(partGridFile[i][j]) )->second * part[i].pmf_scale[j];
 	    }
 		if (partForceXGridFile[i].length() != 0) {
 			part[i].forceXGrid = new BaseGrid(partForceXGridFile[i].val());
-- 
GitLab