From 7c63d1e96f06704c6a141f996d80b1d4ba6b04a5 Mon Sep 17 00:00:00 2001
From: absingh <absingh@mpi-cbg.de>
Date: Mon, 29 Aug 2022 14:33:50 +0200
Subject: [PATCH] Changing support builder to control adaptive factor from
 outside

---
 src/DCPSE/DCPSE_op/tests/DCPSE_op_Surface_tests.cpp | 12 ++++++------
 src/DCPSE/Dcpse.hpp                                 | 10 ++++++----
 src/DCPSE/SupportBuilder.hpp                        |  8 ++++++--
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/DCPSE/DCPSE_op/tests/DCPSE_op_Surface_tests.cpp b/src/DCPSE/DCPSE_op/tests/DCPSE_op_Surface_tests.cpp
index 3664e862..3fd8d03f 100644
--- a/src/DCPSE/DCPSE_op/tests/DCPSE_op_Surface_tests.cpp
+++ b/src/DCPSE/DCPSE_op/tests/DCPSE_op_Surface_tests.cpp
@@ -830,7 +830,7 @@ BOOST_AUTO_TEST_CASE(dcpse_surface_sphere_old) {
         }
 
         domain.ghost_get<1,2,3>();
-        SurfaceDerivative_xx<6> Dxx(domain, 2, rCut,1.0,support_options::ADAPTIVE_SURFACE);
+        SurfaceDerivative_xx<6> Dxx(domain, 2, rCut,3.9,support_options::ADAPTIVE_SURFACE);
 
 /*        v=0;
         auto itNNN=domain.getDomainIterator();
@@ -846,8 +846,8 @@ BOOST_AUTO_TEST_CASE(dcpse_surface_sphere_old) {
         //Dxx.DrawKernel<5,decltype(domain)>(domain,6161);
         //domain.write_frame("Kernel",6161);
 
-        SurfaceDerivative_yy<6> Dyy(domain, 2, rCut,1.0,support_options::ADAPTIVE_SURFACE);
-        SurfaceDerivative_zz<6> Dzz(domain, 2, rCut,1.0,support_options::ADAPTIVE_SURFACE);
+        SurfaceDerivative_yy<6> Dyy(domain, 2, rCut,3.9,support_options::ADAPTIVE_SURFACE);
+        SurfaceDerivative_zz<6> Dzz(domain, 2, rCut,3.9,support_options::ADAPTIVE_SURFACE);
 
         Dxx.save(domain,"Sdxx_test");
         Dyy.save(domain,"Sdyy_test");
@@ -1076,9 +1076,9 @@ BOOST_AUTO_TEST_CASE(dcpse_surface_sphere_old) {
         }
 
         domain.ghost_get<1,2,3>();
-        SurfaceDerivative_xx<6> Dxx(domain, 2, rCut,1.0,support_options::LOAD);
-        SurfaceDerivative_yy<6> Dyy(domain, 2, rCut,1.0,support_options::LOAD);
-        SurfaceDerivative_zz<6> Dzz(domain, 2, rCut,1.0,support_options::LOAD);
+        SurfaceDerivative_xx<6> Dxx(domain, 2, rCut,3.9,support_options::LOAD);
+        SurfaceDerivative_yy<6> Dyy(domain, 2, rCut,3.9,support_options::LOAD);
+        SurfaceDerivative_zz<6> Dzz(domain, 2, rCut,3.9,support_options::LOAD);
         Dxx.load(domain,"Sdxx_test");
         Dyy.load(domain,"Sdyy_test");
         Dzz.load(domain,"Sdzz_test");
diff --git a/src/DCPSE/Dcpse.hpp b/src/DCPSE/Dcpse.hpp
index c7ca1023..2388bdd0 100644
--- a/src/DCPSE/Dcpse.hpp
+++ b/src/DCPSE/Dcpse.hpp
@@ -75,7 +75,7 @@ private:
     openfpm::vector<T> nSpacings;
     vector_type & particlesFrom;
     vector_type2 & particlesTo;
-    double rCut,supportSizeFactor=1,nSpacing;
+    double rCut,supportSizeFactor=1,nSpacing,AdapFac;
     unsigned int convergenceOrder,nCount;
 
     bool isSurfaceDerivative=false;
@@ -213,19 +213,20 @@ public:
         particles.ghost_get_subset();         // This communicates which ghost particles to be excluded from support
 
          if(opt==support_options::ADAPTIVE_SURFACE) {
+             this->AdapFac=nSpacing;
              if(dim==2){
                  nCount=3;
              }
              else{
                  nCount=2;
              }
-              SupportBuilder<vector_type,vector_type2>
+             SupportBuilder<vector_type,vector_type2>
                 supportBuilder(particlesFrom,particlesTo, differentialSignature, rCut, differentialOrder == 0);
-
+                supportBuilder.setAdapFac(nSpacing);
                 auto it = particlesTo.getDomainAndGhostIterator();
                 while (it.isNext()) {
                     auto key_o = particlesTo.getOriginKey(it.get());
-                    Support support = supportBuilder.getSupport(it,nSpacing,opt);
+                    Support support = supportBuilder.getSupport(it,monomialBasis.size(),opt);
                     nSpacings.add(supportBuilder.getLastAvgspacing());
                     ++it;
                   }
@@ -869,6 +870,7 @@ private:
         SupportBuilder<vector_type,vector_type2>
                 supportBuilder(particlesFrom,particlesTo, differentialSignature, rCut, differentialOrder == 0);
         unsigned int requiredSupportSize = monomialBasis.size() * supportSizeFactor;
+        supportBuilder.setAdapFac(AdapFac);
 
         if (!isSharedLocalSupport)
             localSupports.resize(particlesTo.size_local_orig());
diff --git a/src/DCPSE/SupportBuilder.hpp b/src/DCPSE/SupportBuilder.hpp
index 404ea3af..bae44b36 100644
--- a/src/DCPSE/SupportBuilder.hpp
+++ b/src/DCPSE/SupportBuilder.hpp
@@ -30,7 +30,7 @@ private:
     vector_type2 &domainTo;
     decltype(std::declval<vector_type>().getCellList(0.0)) cellList;
     const Point<vector_type::dims, unsigned int> differentialSignature;
-    typename vector_type::stype rCut, AvgSpacing;
+    typename vector_type::stype rCut, AvgSpacing, AdapFac=1;
     bool is_interpolation;
 
 public:
@@ -86,6 +86,10 @@ public:
         return this->AvgSpacing;
     }
 
+    void setAdapFac(typename vector_type::stype fac) {
+        this->AdapFac=fac;
+    }
+
 private:
 
     size_t getCellLinId(const grid_key_dx<vector_type::dims> &cellKey) {
@@ -206,7 +210,7 @@ private:
                 }
             }
             for (int i = 0; i < rp.size(); i++) {
-                if (rp.get(i).dist < 3.9 * AvgSpacing) {
+                if (rp.get(i).dist < AdapFac * AvgSpacing) {
                     points.push_back(rp.get(i).offset);
                 }
             }
-- 
GitLab