diff options
author | over0219 <over0219@umn.edu> | 2020-06-24 07:09:08 +0300 |
---|---|---|
committer | over0219 <over0219@umn.edu> | 2020-06-24 07:09:08 +0300 |
commit | 77ca7ab9b3bee0a2dc1ea0fecaafabc2d2c506ac (patch) | |
tree | 3c0a6bff10c2de330cba012d3fe0d7ef20a0a33d | |
parent | 9e2042ca033a2ff8134abd719e60292ce65e720c (diff) |
init guess on x
-rw-r--r-- | extern/softbody/src/admmpd_solver.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
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_, |