Skip to content

Commit ff94f7a

Browse files
committed
Adding LUT stuff.
1 parent 36a0503 commit ff94f7a

2 files changed

Lines changed: 29 additions & 7 deletions

File tree

src/modules/gr/functions.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ bool GRModule::calculateGRTestSerial(Configuration *cfg)
2929
// Calculate radial distribution functions with a simple double loop, in serial
3030
const auto *box = cfg->box();
3131

32-
dissolve::for_each_pair(
33-
ParallelPolicies::seq, cfg->atoms(),
34-
[&, box](auto i, auto &ii, auto j, auto &jj)
35-
{
36-
if (&ii != &jj)
37-
histograms_->fullHistogram(ii.localTypeIndex(), jj.localTypeIndex()).bin(box->minimumDistance(ii.r(), jj.r()));
38-
});
32+
auto lut = histograms_->fullHistograms().lookUpTable(cfg->atomTypePopulations())
33+
34+
dissolve::for_each_pair(ParallelPolicies::seq, cfg->atoms(),
35+
[&, box](auto i, auto &ii, auto j, auto &jj)
36+
{
37+
if (&ii != &jj)
38+
histograms_->fullHistogram(ii.localTypeIndex(), jj.localTypeIndex())
39+
.bin(box->minimumDistance(ii.r(), jj.r()));
40+
});
3941

4042
return true;
4143
}

src/templates/doubleKeyedMap.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,24 @@ template <typename ValueClass> class DoubleKeyedMap
115115
const std::map<std::string, ValueClass> &map() const { return data_; }
116116
// Return number of data in map
117117
int size() const { return data_.size(); }
118+
119+
/*
120+
* Look-Up Table
121+
*/
122+
public:
123+
// Return look-up table mapping element indices in the supplied vector to corresponding map entries
124+
template <std::ranges::range Range, class Lam>
125+
Array2D<typename std::map<std::string, ValueClass>::iterator> lookUpTable(Range keyedObjects, Lam keyGetter)
126+
{
127+
Array2D<typename std::map<std::string, ValueClass>::iterator> result;
128+
auto nElements = keyedObjects.size();
129+
result.initialise(nElements, nElements, mirroredAreEquivalent_);
130+
dissolve::for_each_pair(
131+
ParallelPolicies::seq, keyedObjects,
132+
[&](int i, const auto &itemI, int j, const auto &itemJ) {
133+
result[{i, j}] = find(keyGetter(itemI), keyGetter(itemJ));
134+
},
135+
mirroredAreEquivalent_);
136+
return result;
137+
}
118138
};

0 commit comments

Comments
 (0)