From b430b2a13ddb4b78ca0efe3e7d6f898d712c1182 Mon Sep 17 00:00:00 2001
From: Pietro Incardona <incardon@mpi-cbg.de>
Date: Wed, 22 Apr 2020 11:01:28 +0200
Subject: [PATCH] Fixing Lid Stokes example in multiprocess

---
 src/DCPSE_op/DCPSE_Solver.hpp   | 38 +++++++++++++++++++++++++++------
 src/DCPSE_op/DCPSE_op_test2.cpp |  9 ++++++++
 2 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/src/DCPSE_op/DCPSE_Solver.hpp b/src/DCPSE_op/DCPSE_Solver.hpp
index 1d93b4c4..94570fdc 100644
--- a/src/DCPSE_op/DCPSE_Solver.hpp
+++ b/src/DCPSE_op/DCPSE_Solver.hpp
@@ -113,10 +113,20 @@ class DCPSE_scheme: public MatrixAssembler
         v_cl.execute();
 
         // resize b if needed
-        if (opt == options_solver::STANDARD) {
+        if (opt == options_solver::STANDARD)
+        {
             b.resize(Sys_eqs::nvar * tot, Sys_eqs::nvar * sz);
-        } else{
-            b.resize(Sys_eqs::nvar * tot + 1, Sys_eqs::nvar * sz + 1);
+        }
+        else
+        {
+        	if (v_cl.rank() == v_cl.size()-1)
+        	{
+        		b.resize(Sys_eqs::nvar * tot + 1, Sys_eqs::nvar * sz + 1);
+        	}
+        	else
+        	{
+        		b.resize(Sys_eqs::nvar * tot + 1, Sys_eqs::nvar * sz);
+        	}
         }
 
         // Calculate the starting point
@@ -534,17 +544,22 @@ public:
                 for (int i = 0 ; i < tot * Sys_eqs::nvar ; i++)
                 {
                     triplet t1;
-                    triplet t2;
 
                     t1.row() = tot * Sys_eqs::nvar;
                     t1.col() = i;
                     t1.value() = 1;
 
-                    t2.row() = i;
+                    trpl.add(t1);
+                }
+
+                for (int i = 0 ; i <  p_map.size_local() * Sys_eqs::nvar ; i++)
+                {
+                    triplet t2;
+
+                    t2.row() = i + s_pnt*Sys_eqs::nvar;
                     t2.col() = tot * Sys_eqs::nvar;
                     t2.value() = 1;
 
-                    trpl.add(t1);
                     trpl.add(t2);
                 }
 
@@ -563,6 +578,17 @@ public:
                 A.resize(tot * Sys_eqs::nvar + 1, tot * Sys_eqs::nvar + 1,
                          p_map.size_local() * Sys_eqs::nvar,
                          p_map.size_local() * Sys_eqs::nvar);
+
+                for (int i = 0 ; i <  p_map.size_local() * Sys_eqs::nvar ; i++)
+                {
+                    triplet t2;
+
+                    t2.row() = i + s_pnt*Sys_eqs::nvar;
+                    t2.col() = tot * Sys_eqs::nvar;
+                    t2.value() = 1;
+
+                    trpl.add(t2);
+                }
             }
 
 
diff --git a/src/DCPSE_op/DCPSE_op_test2.cpp b/src/DCPSE_op/DCPSE_op_test2.cpp
index 190f5262..0ebd40a7 100644
--- a/src/DCPSE_op/DCPSE_op_test2.cpp
+++ b/src/DCPSE_op/DCPSE_op_test2.cpp
@@ -580,8 +580,11 @@ BOOST_AUTO_TEST_SUITE(dcpse_op_suite_tests2)
             Solver.impose(V_star[0], l_p, 0,vx);
             Solver.impose(V_star[1], l_p, 0,vy);
             Solver.solve(V_star[0],V_star[1]);
+
             //std::cout << "Stokes Solved" << std::endl;
+            Particles.ghost_get<2>();
             RHS=-Div(V_star);
+
             DCPSE_scheme<equations2d1,decltype(Particles)> SolverH( Particles,options_solver::LAGRANGE_MULTIPLIER);
             auto Helmholtz = Lap(H);
             auto D_y=Dy(H);
@@ -592,8 +595,14 @@ BOOST_AUTO_TEST_SUITE(dcpse_op_suite_tests2)
             SolverH.impose(Dy(H), dw_p,0);
             SolverH.impose(Dx(H), l_p,0);
             SolverH.solve(H);
+
+            Particles.write("Debug_out");
+            return;
+
             //std::cout << "Helmholtz Solved" << std::endl;
+            Particles.ghost_get<4,5>();
             V=V_star+Grad(H);
+
             for(int j=0;j<up_p.size();j++)
             {   auto p=up_p.get<0>(j);
                 Particles.getProp<1>(p)[0] =  1;
-- 
GitLab