From 67ed14097fd9d3ca5c2ddc839b0448ad7e718ae8 Mon Sep 17 00:00:00 2001 From: absingh <absingh@mpi-cbg.de> Date: Wed, 1 Apr 2020 12:41:24 +0200 Subject: [PATCH] Updated Value_nz for all DCPSE operators Signed-off-by: absingh <absingh@mpi-cbg.de> --- src/DCPSE_op/DCPSE_Solver.hpp | 21 ++++++------ src/DCPSE_op/DCPSE_copy/MonomialBasis.hpp | 4 +-- src/DCPSE_op/DCPSE_op.hpp | 40 ++++++++++++++++++----- src/DCPSE_op/DCPSE_op_test2.cpp | 4 +-- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/DCPSE_op/DCPSE_Solver.hpp b/src/DCPSE_op/DCPSE_Solver.hpp index 11618181..fad1e0a4 100644 --- a/src/DCPSE_op/DCPSE_Solver.hpp +++ b/src/DCPSE_op/DCPSE_Solver.hpp @@ -224,12 +224,12 @@ class DCPSE_scheme: public MatrixAssembler std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the term B and the Matrix A for Ax=B must contain the same number of rows\n"; return; } - - if (row_b != p_map.size_local() * Sys_eqs::nvar) - { - std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " your system is underdetermined you set " << row_b << " conditions " << " but i am expecting " << p_map.size_local() * Sys_eqs::nvar << std::endl; - return; - } + if (row_b != p_map.size_local() * Sys_eqs::nvar) { + std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " your system is underdetermined you set " + << row_b << " conditions " << " but i am expecting " << p_map.size_local() * Sys_eqs::nvar + << std::endl; + return; + } // Indicate all the non zero rows openfpm::vector<unsigned char> nz_rows; @@ -443,7 +443,6 @@ public: A.resize(tot * Sys_eqs::nvar, tot * Sys_eqs::nvar, p_map.size_local() * Sys_eqs::nvar, p_map.size_local() * Sys_eqs::nvar); -// std::cout << Eigen::MatrixXd(A) << std::endl; } else { auto & v_cl = create_vcluster(); @@ -483,6 +482,7 @@ public: } + return A; } @@ -494,9 +494,9 @@ public: */ typename Sys_eqs::Vector_type & getB(options_solver opt = options_solver::STANDARD) { -#ifdef SE_CLASS1 - consistency(); -#endif +//#ifdef SE_CLASS1 +// consistency(); +//#endif if (opt == options_solver::LAGRANGE_MULTIPLIER) { auto & v_cl = create_vcluster(); @@ -506,6 +506,7 @@ public: } } + return b; } diff --git a/src/DCPSE_op/DCPSE_copy/MonomialBasis.hpp b/src/DCPSE_op/DCPSE_copy/MonomialBasis.hpp index c9390a9d..8f6cf6c6 100644 --- a/src/DCPSE_op/DCPSE_copy/MonomialBasis.hpp +++ b/src/DCPSE_op/DCPSE_copy/MonomialBasis.hpp @@ -124,9 +124,9 @@ void MonomialBasis<dim>::generateBasis(std::vector<unsigned int> m, unsigned int grid_key_dx_iterator_sub_bc<dim> it(grid, start, stop, bc); // Finally compute alpha_min - unsigned char alphaMin = static_cast<unsigned char>(!(mSum % 2)); // if mSum is even, alpha_min must be 1 + //unsigned char alphaMin = static_cast<unsigned char>(!(mSum % 2)); // if mSum is even, alpha_min must be 1 //std::cout<<"AlphaMin: "<<alphaMin<<std::endl; - //unsigned char alphaMin = 0; // we want to always have 1 in the basis + unsigned char alphaMin = 0; // we want to always have 1 in the basis while (it.isNext()) { diff --git a/src/DCPSE_op/DCPSE_op.hpp b/src/DCPSE_op/DCPSE_op.hpp index f61c9dea..c538ffb4 100644 --- a/src/DCPSE_op/DCPSE_op.hpp +++ b/src/DCPSE_op/DCPSE_op.hpp @@ -65,9 +65,15 @@ public: { auto coeff_dc = dcp.getCoeffNN(key,j); auto k = dcp.getIndexNN(key,j); - cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp.getEpsilonPrefactor(key); - cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp.getSign() * coeff_dc * coeff / dcp.getEpsilonPrefactor(key); + auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); + + auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); + //cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp.getEpsilonPrefactor(key); + + //cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp.getSign() * coeff_dc * coeff / dcp.getEpsilonPrefactor(key); } } @@ -156,10 +162,16 @@ public: auto coeff_dc = dcp[i].getCoeffNN(key,j); auto k = dcp[i].getIndexNN(key,j); + auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); - cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); - cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + + //cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + + //cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); } } } @@ -249,10 +261,16 @@ public: auto coeff_dc = dcp[i].getCoeffNN(key,j); auto k = dcp[i].getIndexNN(key,j); + auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); + + auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); - cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); - cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + //cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + + //cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); } } } @@ -490,10 +508,16 @@ public: auto coeff_dc = dcp[i].getCoeffNN(key,j); auto k = dcp[i].getIndexNN(key,j); + auto k_coeff = coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); - cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + auto kk_coeff = dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + o1.template value_nz<Sys_eqs>(p_map,k,cols,k_coeff,comp); + + + //cols[p_map. template getProp<0>(k)*Sys_eqs::nvar + comp] += coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); - cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); + //cols[p_map. template getProp<0>(key)*Sys_eqs::nvar + comp] += dcp[i].getSign() * coeff_dc * coeff / dcp[i].getEpsilonPrefactor(key); } } } diff --git a/src/DCPSE_op/DCPSE_op_test2.cpp b/src/DCPSE_op/DCPSE_op_test2.cpp index dd5e6c0a..2d5f101c 100644 --- a/src/DCPSE_op/DCPSE_op_test2.cpp +++ b/src/DCPSE_op/DCPSE_op_test2.cpp @@ -188,10 +188,10 @@ BOOST_AUTO_TEST_SUITE(dcpse_op_suite_tests2) Divergence Div(Particles, 2, rCut, 1.9); int n=10; double nu=1e-2; - for(int i=0; i<=n ;i++) + Particles.write_frame("Stokes",0); + for(int i=1; i<=n ;i++) { RHS=-Grad(P); DCPSE_scheme<equations2,decltype(Particles)> Solver(2 * rCut, Particles); -// auto Stokes = Adv(V,V_star)-nu*Lap(V_star); auto Stokes1 = Adv(V[0],V_star[0])-nu*Lap(V_star[0]); auto Stokes2 = Adv(V[1],V_star[1])-nu*Lap(V_star[1]); Solver.impose(Stokes1,bulk,RHS[0],vx); -- GitLab