From 23ac22b4cac2a85e99fedeef63c4cabff50c37b9 Mon Sep 17 00:00:00 2001
From: mkirsz <s1351949@sms.ed.ac.uk>
Date: Tue, 17 Dec 2024 13:07:58 +0000
Subject: [PATCH] Inheritance fixes

---
 .../functions/basis_functions/dm_bf_base.h    | 17 +++++++++-------
 .../functions/basis_functions/dm_bf_linear.h  |  8 ++++----
 .../basis_functions/dm_bf_polynomial2.h       |  8 ++++----
 .../mlip/design_matrix/functions/dm_f_all.h   |  2 +-
 .../functions/dm_function_base.h              | 20 ++++++++++---------
 .../functions/kernels/dm_kern_base.h          | 16 +++++++--------
 .../functions/kernels/dm_kern_linear.h        |  8 ++++----
 src/dm_bf_base.cpp                            |  4 ++++
 src/dm_bf_linear.cpp                          |  2 +-
 src/dm_bf_polynomial2.cpp                     |  3 ++-
 src/dm_function_base.cpp                      |  5 ++++-
 src/dm_kern_base.cpp                          |  5 +++++
 src/dm_kern_linear.cpp                        |  3 ++-
 src/dm_kern_lq.cpp                            |  5 +++--
 src/dm_kern_polynomial.cpp                    |  4 ++--
 src/dm_kern_quadratic.cpp                     |  4 ++--
 src/dm_kern_rbf.cpp                           |  4 ++--
 src/dm_kern_sigmoid.cpp                       |  4 ++--
 18 files changed, 71 insertions(+), 51 deletions(-)

diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
index 98b1c37..6f6187d 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
@@ -10,13 +10,16 @@
 #include <iostream>
 
 struct DM_BF_Base: public DM_Function_Base, public virtual BF_Base {
+   
+    DM_BF_Base();
+    DM_BF_Base(const Config &c);
     virtual ~DM_BF_Base();
-    virtual size_t get_phi_cols(const Config &config)=0;
-    virtual void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d)=0;
-    virtual void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d)=0;
-    virtual void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d)=0;
+    // virtual size_t get_phi_cols(const Config &config)=0;
+    // virtual void calc_phi_energy_row(phi_type &Phi, size_t &row,
+    //         const double fac, const Structure &st, const StDescriptors &st_d)=0;
+    // virtual void calc_phi_force_rows(phi_type &Phi, size_t &row,
+    //         const double fac, const Structure &st, const StDescriptors &st_d)=0;
+    // virtual void calc_phi_stress_rows(phi_type &Phi, size_t &row,
+    //         const double fac[6], const Structure &st, const StDescriptors &st_d)=0;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
index 107ac26..e0052c3 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
@@ -8,12 +8,12 @@ struct DM_BF_Linear: public DM_BF_Base, public BF_Linear
 {
     DM_BF_Linear();
     DM_BF_Linear(const Config &c);
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
index b0ce413..550f403 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
@@ -8,12 +8,12 @@ struct DM_BF_Polynomial2: public DM_BF_Base, public BF_Polynomial2
 {
     DM_BF_Polynomial2();
     DM_BF_Polynomial2(const Config &c);
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void  calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void  calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void  calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/dm_f_all.h b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
index 201905a..56c4bae 100644
--- a/include/tadah/mlip/design_matrix/functions/dm_f_all.h
+++ b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
@@ -1,2 +1,2 @@
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h>
-#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h>
+ #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h>
diff --git a/include/tadah/mlip/design_matrix/functions/dm_function_base.h b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
index 6b7b5a9..06f5321 100644
--- a/include/tadah/mlip/design_matrix/functions/dm_function_base.h
+++ b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
@@ -16,16 +16,18 @@
 /** Base class for Kernels and Basis Functions */
 struct DM_Function_Base: public virtual Function_Base {
 
-    // Derived classes must implement Derived() and Derived(Config)
-    virtual ~DM_Function_Base() {};
+  // Derived classes must implement Derived() and Derived(Config)
+  DM_Function_Base();
+  DM_Function_Base(const Config &c);
+  virtual ~DM_Function_Base();
 
-    virtual size_t get_phi_cols(const Config &)=0;
-    virtual void calc_phi_energy_row(phi_type &, size_t &,
-            const double , const Structure &, const StDescriptors &)=0;
-    virtual void calc_phi_force_rows(phi_type &, size_t &,
-            const double , const Structure &, const StDescriptors &)=0;
-    virtual void calc_phi_stress_rows(phi_type &, size_t &,
-            const double[6], const Structure &, const StDescriptors &)=0;
+  virtual size_t get_phi_cols(const Config &)=0;
+  virtual void calc_phi_energy_row(phi_type &, size_t &,
+                                   const double , const Structure &, const StDescriptors &)=0;
+  virtual void calc_phi_force_rows(phi_type &, size_t &,
+                                   const double , const Structure &, const StDescriptors &)=0;
+  virtual void calc_phi_stress_rows(phi_type &, size_t &,
+                                    const double[6], const Structure &, const StDescriptors &)=0;
 };
 //template<> inline CONFIG::Registry<DM_Function_Base>::Map CONFIG::Registry<DM_Function_Base>::registry{};
 //template<> inline CONFIG::Registry<DM_Function_Base,Config&>::Map CONFIG::Registry<DM_Function_Base,Config&>::registry{};
diff --git a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
index cf0c12f..8a12489 100644
--- a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
@@ -1,6 +1,7 @@
 #ifndef DM_KERN_BASE_H
 #define DM_KERN_BASE_H
 
+#include "tadah/core/config.h"
 #include <tadah/mlip/design_matrix/functions/dm_function_base.h>
 #include <tadah/mlip/structure.h>
 #include <tadah/mlip/st_descriptors.h>
@@ -16,17 +17,16 @@
  *  - ff = force descriptor
  *  - all derivatives are defined wrt to the second argument
  */
-class DM_Kern_Base: public DM_Function_Base, public virtual Kern_Base {
+class DM_Kern_Base: public DM_Function_Base, public virtual Kern_Base  {
     public:
 
+        DM_Kern_Base();
+        DM_Kern_Base(const Config&c);
         virtual ~DM_Kern_Base();
-        virtual size_t get_phi_cols(const Config &config);
-        virtual void  calc_phi_energy_row(phi_type &Phi, size_t &row, const double fac,
-                const Structure &st, const StDescriptors &st_d);
-        virtual void  calc_phi_force_rows(phi_type &Phi, size_t &row, const double fac,
-                const Structure &st, const StDescriptors &st_d);
-        virtual void  calc_phi_stress_rows(phi_type &Phi, size_t &row, const double fac[6],
-                const Structure &st, const StDescriptors &st_d);
+        virtual size_t get_phi_cols(const Config &config) override;
+        virtual void  calc_phi_energy_row(phi_type &Phi, size_t &row, const double fac, const Structure &st, const StDescriptors &st_d) override;
+        virtual void  calc_phi_force_rows(phi_type &Phi, size_t &row, const double fac, const Structure &st, const StDescriptors &st_d) override;
+        virtual void  calc_phi_stress_rows(phi_type &Phi, size_t &row, const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
index 5c75dad..cf026d0 100644
--- a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
@@ -19,12 +19,12 @@ class DM_Kern_Linear :  public DM_Kern_Base, public Kern_Linear {
     DM_Kern_Linear ();
     DM_Kern_Linear (const Config &c);
 
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/src/dm_bf_base.cpp b/src/dm_bf_base.cpp
index e68de39..21543fa 100644
--- a/src/dm_bf_base.cpp
+++ b/src/dm_bf_base.cpp
@@ -1,2 +1,6 @@
+#include "tadah/mlip/design_matrix/functions/dm_function_base.h"
+#include "tadah/models/functions/basis_functions/bf_base.h"
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h>
+DM_BF_Base::DM_BF_Base() {}
+DM_BF_Base::DM_BF_Base(const Config &c): BF_Base(c), DM_Function_Base(c) {}
 DM_BF_Base::~DM_BF_Base() {}
diff --git a/src/dm_bf_linear.cpp b/src/dm_bf_linear.cpp
index ab467e8..9bb9846 100644
--- a/src/dm_bf_linear.cpp
+++ b/src/dm_bf_linear.cpp
@@ -4,7 +4,7 @@
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Linear> DM_BF_Linear_2( "BF_Linear" );
 
 DM_BF_Linear::DM_BF_Linear() {}
-DM_BF_Linear::DM_BF_Linear(const Config &c): BF_Linear(c)
+DM_BF_Linear::DM_BF_Linear(const Config &c): DM_BF_Base(c), BF_Linear(c)
 {}
 size_t DM_BF_Linear::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_bf_polynomial2.cpp b/src/dm_bf_polynomial2.cpp
index 6638fdb..9ef36d3 100644
--- a/src/dm_bf_polynomial2.cpp
+++ b/src/dm_bf_polynomial2.cpp
@@ -1,10 +1,11 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_1( "BF_Polynomial2" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_2( "BF_Polynomial2" );
 
 DM_BF_Polynomial2::DM_BF_Polynomial2() {}
-DM_BF_Polynomial2::DM_BF_Polynomial2(const Config &c): BF_Polynomial2(c)
+DM_BF_Polynomial2::DM_BF_Polynomial2(const Config &c): DM_BF_Base(c), BF_Polynomial2(c)
 {}
 size_t DM_BF_Polynomial2::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_function_base.cpp b/src/dm_function_base.cpp
index 8c7af9b..945c434 100644
--- a/src/dm_function_base.cpp
+++ b/src/dm_function_base.cpp
@@ -1,2 +1,5 @@
+#include "tadah/models/functions/function_base.h"
 #include <tadah/mlip/design_matrix/functions/dm_function_base.h>
-
+DM_Function_Base::DM_Function_Base() {}
+DM_Function_Base::DM_Function_Base(const Config &c): Function_Base(c) {}
+DM_Function_Base::~DM_Function_Base() {}
diff --git a/src/dm_kern_base.cpp b/src/dm_kern_base.cpp
index ecf679c..773778a 100644
--- a/src/dm_kern_base.cpp
+++ b/src/dm_kern_base.cpp
@@ -1,6 +1,11 @@
+#include "tadah/core/config.h"
+#include "tadah/mlip/design_matrix/functions/dm_function_base.h"
+#include "tadah/models/functions/kernels/kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
 
 DM_Kern_Base::~DM_Kern_Base() {}
+DM_Kern_Base::DM_Kern_Base() {}
+DM_Kern_Base::DM_Kern_Base(const Config &c): DM_Function_Base(c), Kern_Base(c) {}
 size_t DM_Kern_Base::get_phi_cols(const Config &)
 {
   return basis.cols();
diff --git a/src/dm_kern_linear.cpp b/src/dm_kern_linear.cpp
index 90f97a7..2788656 100644
--- a/src/dm_kern_linear.cpp
+++ b/src/dm_kern_linear.cpp
@@ -1,10 +1,11 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Linear> DM_Kern_Linear_1( "Kern_Linear" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Linear> DM_Kern_Linear_2( "Kern_Linear" );
 
 DM_Kern_Linear::DM_Kern_Linear() {}
-DM_Kern_Linear::DM_Kern_Linear (const Config &c): Kern_Linear(c)
+DM_Kern_Linear::DM_Kern_Linear (const Config &c): DM_Kern_Base(c), Kern_Linear(c)
 {}
 size_t DM_Kern_Linear::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_kern_lq.cpp b/src/dm_kern_lq.cpp
index 3c14dfa..40fdb4d 100644
--- a/src/dm_kern_lq.cpp
+++ b/src/dm_kern_lq.cpp
@@ -1,11 +1,12 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_LQ> DM_Kern_LQ_1( "Kern_LQ" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_LQ> DM_Kern_LQ_2( "Kern_LQ" );
 
-DM_Kern_LQ::DM_Kern_LQ():
-  Kern_LQ()
+DM_Kern_LQ::DM_Kern_LQ()
 {}
 DM_Kern_LQ::DM_Kern_LQ(const Config &c):
+  DM_Kern_Base(c),
   Kern_LQ(c)
 {}
diff --git a/src/dm_kern_polynomial.cpp b/src/dm_kern_polynomial.cpp
index b60e9d9..5227ca7 100644
--- a/src/dm_kern_polynomial.cpp
+++ b/src/dm_kern_polynomial.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_1( "Kern_Polynomial" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_2( "Kern_Polynomial" );
 
-DM_Kern_Polynomial::DM_Kern_Polynomial():
-  Kern_Polynomial()
+DM_Kern_Polynomial::DM_Kern_Polynomial()
 {}
 DM_Kern_Polynomial::DM_Kern_Polynomial(const Config &c):
+  DM_Kern_Base(c),
   Kern_Polynomial(c)
 {}
diff --git a/src/dm_kern_quadratic.cpp b/src/dm_kern_quadratic.cpp
index 83a7198..9c4ecb2 100644
--- a/src/dm_kern_quadratic.cpp
+++ b/src/dm_kern_quadratic.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_1( "Kern_Quadratic" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_2( "Kern_Quadratic" );
 
-DM_Kern_Quadratic::DM_Kern_Quadratic():
-  Kern_Quadratic()
+DM_Kern_Quadratic::DM_Kern_Quadratic()
 {}
 DM_Kern_Quadratic::DM_Kern_Quadratic(const Config &c):
+  DM_Kern_Base(c),
   Kern_Quadratic(c)
 {}
diff --git a/src/dm_kern_rbf.cpp b/src/dm_kern_rbf.cpp
index 1870190..2c9b9e0 100644
--- a/src/dm_kern_rbf.cpp
+++ b/src/dm_kern_rbf.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_RBF> DM_Kern_RBF_1( "Kern_RBF" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_RBF> DM_Kern_RBF_2( "Kern_RBF" );
 
-DM_Kern_RBF::DM_Kern_RBF():
-  Kern_RBF()
+DM_Kern_RBF::DM_Kern_RBF()
 {}
 DM_Kern_RBF::DM_Kern_RBF(const Config &c):
+  DM_Kern_Base(c),
   Kern_RBF(c)
 {}
diff --git a/src/dm_kern_sigmoid.cpp b/src/dm_kern_sigmoid.cpp
index 2da37c9..7b547b0 100644
--- a/src/dm_kern_sigmoid.cpp
+++ b/src/dm_kern_sigmoid.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_1( "Kern_Sigmoid" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_2( "Kern_Sigmoid" );
 
-DM_Kern_Sigmoid::DM_Kern_Sigmoid():
-  Kern_Sigmoid()
+DM_Kern_Sigmoid::DM_Kern_Sigmoid()
 {}
 DM_Kern_Sigmoid::DM_Kern_Sigmoid(const Config &c):
+  DM_Kern_Base(c),
   Kern_Sigmoid(c)
 {}
-- 
GitLab