From 5e1dca03239f300691bdc04db7013cbac21ea431 Mon Sep 17 00:00:00 2001
From: Ian Bell <ian.bell@nist.gov>
Date: Tue, 2 May 2023 08:50:32 -0400
Subject: [PATCH] Refactor the POW to the top of namespace

---
 include/teqp/models/saft/polar_terms.hpp | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/include/teqp/models/saft/polar_terms.hpp b/include/teqp/models/saft/polar_terms.hpp
index faf170d..3c8a07f 100644
--- a/include/teqp/models/saft/polar_terms.hpp
+++ b/include/teqp/models/saft/polar_terms.hpp
@@ -17,6 +17,15 @@ namespace teqp{
 
 namespace SAFTpolar{
 
+template<typename A> auto POW2(const A& x) { return forceeval(x*x); }
+template<typename A> auto POW3(const A& x) { return forceeval(POW2(x)*x); }
+template<typename A> auto POW4(const A& x) { return forceeval(POW2(x)*POW2(x)); }
+template<typename A> auto POW5(const A& x) { return forceeval(POW2(x)*POW3(x)); }
+template<typename A> auto POW7(const A& x) { return forceeval(POW2(x)*POW5(x)); }
+template<typename A> auto POW8(const A& x) { return forceeval(POW4(x)*POW4(x)); }
+template<typename A> auto POW10(const A& x) { return forceeval(POW2(x)*POW8(x)); }
+template<typename A> auto POW12(const A& x) { return forceeval(POW4(x)*POW8(x)); }
+
 /// Eq. 10 from Gross and Vrabec
 template <typename Eta, typename MType, typename TType>
 auto get_JDD_2ij(const Eta& eta, const MType& mij, const TType& Tstarij) {
@@ -91,8 +100,6 @@ auto get_JQQ_3ijk(const Eta& eta, const MType& mijk) {
 class DipolarContributionGrossVrabec {
 private:
     const Eigen::ArrayXd m, sigma_Angstrom, epsilon_over_k, mustar2, nmu;
-    template<typename A> auto POW2(const A& x) const { return forceeval(x*x); }
-    template<typename A> auto POW3(const A& x) const { return forceeval(POW2(x)*x); }
 public:
     const bool has_a_polar;
     DipolarContributionGrossVrabec(const Eigen::ArrayX<double> &m, const Eigen::ArrayX<double> &sigma_Angstrom, const Eigen::ArrayX<double> &epsilon_over_k, const Eigen::ArrayX<double> &mustar2, const Eigen::ArrayX<double> &nmu) : m(m), sigma_Angstrom(sigma_Angstrom), epsilon_over_k(epsilon_over_k), mustar2(mustar2), nmu(nmu), has_a_polar(mustar2.cwiseAbs().sum() > 0) {
@@ -183,10 +190,7 @@ public:
 class QuadrupolarContributionGrossVrabec {
 private:
     const Eigen::ArrayXd m, sigma_Angstrom, epsilon_over_k, Qstar2, nQ;
-    template<typename A> auto POW2(const A& x) const { return forceeval(x*x); }
-    template<typename A> auto POW3(const A& x) const { return forceeval(POW2(x)*x); }
-    template<typename A> auto POW5(const A& x) const { return forceeval(POW2(x)*POW3(x)); }
-    template<typename A> auto POW7(const A& x) const { return forceeval(POW2(x)*POW5(x)); }
+    
 public:
     const bool has_a_polar;
     QuadrupolarContributionGrossVrabec(const Eigen::ArrayX<double> &m, const Eigen::ArrayX<double> &sigma_Angstrom, const Eigen::ArrayX<double> &epsilon_over_k, const Eigen::ArrayX<double> &Qstar2, const Eigen::ArrayX<double> &nQ) : m(m), sigma_Angstrom(sigma_Angstrom), epsilon_over_k(epsilon_over_k), Qstar2(Qstar2), nQ(nQ), has_a_polar(Qstar2.cwiseAbs().sum() > 0) {
@@ -342,13 +346,6 @@ public:
 private:
     const Eigen::ArrayXd sigma_m, epsilon_over_k, mubar2, Qbar2;
     const bool has_a_polar;
-    template<typename A> auto POW3(const A& x) const { return forceeval(POW2(x)*x); }
-    template<typename A> auto POW4(const A& x) const { return forceeval(POW2(x)*POW2(x)); }
-    template<typename A> auto POW5(const A& x) const { return forceeval(POW2(x)*POW3(x)); }
-    template<typename A> auto POW7(const A& x) const { return forceeval(POW2(x)*POW5(x)); }
-    template<typename A> auto POW8(const A& x) const { return forceeval(POW4(x)*POW4(x)); }
-    template<typename A> auto POW10(const A& x) const { return forceeval(POW2(x)*POW8(x)); }
-    template<typename A> auto POW12(const A& x) const { return forceeval(POW4(x)*POW8(x)); }
     
     const JIntegral J6{6};
     const JIntegral J8{8};
-- 
GitLab