[Bf-blender-cvs] [250edcb5817] soc-2020-soft-body: fixed bug in ldlt

mattoverby noreply at git.blender.org
Tue Aug 11 17:52:01 CEST 2020


Commit: 250edcb581724ae75eba59c0ac5b67049e888b93
Author: mattoverby
Date:   Tue Aug 11 10:51:57 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB250edcb581724ae75eba59c0ac5b67049e888b93

fixed bug in ldlt

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

M	extern/softbody/src/admmpd_linsolve.cpp
M	extern/softbody/src/admmpd_solver.cpp

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

diff --git a/extern/softbody/src/admmpd_linsolve.cpp b/extern/softbody/src/admmpd_linsolve.cpp
index 08378d8fbef..c54ad16f89f 100644
--- a/extern/softbody/src/admmpd_linsolve.cpp
+++ b/extern/softbody/src/admmpd_linsolve.cpp
@@ -124,7 +124,12 @@ void LDLT::solve(
 			C.setFromTriplets(trips.begin(),trips.end());		
 		}
 	}
-
+	else
+	{
+		C.resize(1,nx*3);
+		d = VectorXd::Zero(1);
+	}
+	
 	// Compute RHS
 	data->ls.rhs.noalias() =
 		data->M_xbar +
@@ -143,7 +148,7 @@ void LDLT::solve(
 	// (A + PtP + CtC) x = b + Ptq + Ctd
 	double ck = options->mult_ck * data->A_diag_max;
 	data->ls.A_PtP_CtC_3 = data->ls.A_PtP_3 + ck * C.transpose()*C;
-	Vector3d Ctd3 = ck * C.transpose() * d;
+	VectorXd Ctd3 = ck * C.transpose() * d;
 	VectorXd rhs3(nx*3);
 	for (int i=0; i<nx; ++i)
 	{
@@ -202,17 +207,17 @@ void ConjugateGradients::solve(
 
 	auto map_vector_to_matrix = [](const VectorXd &x3, MatrixXd &x)
 	{
-		int nx = x3.rows()/3;
-		if (x.rows() != nx) { x.resize(nx,3); }
-		for (int i=0; i<nx; ++i)
+		int nx_ = x3.rows()/3;
+		if (x.rows() != nx_) { x.resize(nx_,3); }
+		for (int i=0; i<nx_; ++i)
 			x.row(i) = x3.segment<3>(i*3);
 	};
 
 	auto map_matrix_to_vector = [](const MatrixXd &x, VectorXd &x3)
 	{
-		int nx = x.rows();
-		if (x3.rows() != nx*3) { x3.resize(nx*3); }
-		for (int i=0; i<nx; ++i)
+		int nx_ = x.rows();
+		if (x3.rows() != nx_*3) { x3.resize(nx_*3); }
+		for (int i=0; i<nx_; ++i)
 			x3.segment<3>(i*3) = x.row(i);
 	};
 
@@ -247,6 +252,12 @@ void ConjugateGradients::solve(
 			C.setFromTriplets(trips.begin(),trips.end());		
 		}
 	}
+	else
+	{
+		C.resize(1,nx*3);
+		d = VectorXd::Zero(1);
+	}
+	
 
 	// Compute RHS
 	data->ls.rhs.noalias() =
diff --git a/extern/softbody/src/admmpd_solver.cpp b/extern/softbody/src/admmpd_solver.cpp
index 9440ffa5081..a3ac5ef15b5 100644
--- a/extern/softbody/src/admmpd_solver.cpp
+++ b/extern/softbody/src/admmpd_solver.cpp
@@ -57,7 +57,7 @@ bool Solver::init(
 	}
 
 	BLI_assert(data->x.rows()>0);
-	BLI_assert(data->x.cols()==0);
+	BLI_assert(data->x.cols()==3);
 	data->v.resize(data->x.rows(), 3);
 	data->v.setZero();
 	mesh->compute_masses(&data->x, options->density_kgm3, data->m);



More information about the Bf-blender-cvs mailing list