[Bf-blender-cvs] [77ca7ab9b3b] soc-2020-soft-body: init guess on x

over0219 noreply at git.blender.org
Wed Jun 24 06:09:12 CEST 2020


Commit: 77ca7ab9b3bee0a2dc1ea0fecaafabc2d2c506ac
Author: over0219
Date:   Tue Jun 23 23:09:08 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB77ca7ab9b3bee0a2dc1ea0fecaafabc2d2c506ac

init guess on x

===================================================================

M	extern/softbody/src/admmpd_solver.cpp

===================================================================

diff --git a/extern/softbody/src/admmpd_solver.cpp b/extern/softbody/src/admmpd_solver.cpp
index f4956e8d476..7e0c177ea18 100644
--- a/extern/softbody/src/admmpd_solver.cpp
+++ b/extern/softbody/src/admmpd_solver.cpp
@@ -77,7 +77,6 @@ int Solver::solve(
 		update_constraints(options,data,collision);
 
 		// Solve Ax=b s.t. Kx=l
-		data->b.noalias() = data->M_xbar + data->DtW2*(data->z-data->u);
 		solve_conjugate_gradients(options,data);
 
 	} // end solver iters
@@ -108,9 +107,9 @@ void Solver::init_solve(
 	for (int i=0; i<nx; ++i)
 	{
 		data->v.row(i) += dt*options->grav;
-		data->M_xbar.row(i) =
-			data->m[i] * data->x.row(i) +
-			dt*data->m[i]*data->v.row(i);
+		RowVector3d xbar_i = data->x.row(i) + dt*data->v.row(i);
+		data->M_xbar.row(i) = data->m[i]*xbar_i;
+		data->x.row(i) = xbar_i; // initial geuss
 	}
 
 	// ADMM variables
@@ -229,9 +228,9 @@ void Solver::solve_conjugate_gradients(
 	BLI_assert(options != NULL);
 	int nx = data->x.rows();
 	BLI_assert(nx > 0);
-	BLI_assert(data->b.rows() == nx);
 	BLI_assert(data->A.rows() == nx);
 	BLI_assert(data->A.cols() == nx);
+	BLI_assert(data->b.rows() == nx);
 	BLI_assert(data->K[0].cols() == nx);
 	BLI_assert(data->K[1].cols() == nx);
 	BLI_assert(data->K[2].cols() == nx);
@@ -240,6 +239,9 @@ void Solver::solve_conjugate_gradients(
 	BLI_assert(data->K[1].rows() == data->l.rows());
 	BLI_assert(data->K[2].rows() == data->l.rows());
 
+	// Compute RHS
+	data->b.noalias() = data->M_xbar + data->DtW2*(data->z-data->u);
+
 	// Solve Ax = b in parallel
 	auto solve_Ax_b = [](
 		SolverData *data_,



More information about the Bf-blender-cvs mailing list