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