diff options
author | over0219 <over0219@umn.edu> | 2020-06-30 05:28:37 +0300 |
---|---|---|
committer | over0219 <over0219@umn.edu> | 2020-06-30 05:28:37 +0300 |
commit | a0310586dfb35cfde3674fb94ac42a9a3ebb6ea1 (patch) | |
tree | abc70b65cb54b950bfeb5bc4cf201fde7613079d /extern/softbody/src/admmpd_types.h | |
parent | fd7bcb209aa7e888a32f980a01d17f79c59b0c51 (diff) |
gauss seidel solver
Diffstat (limited to 'extern/softbody/src/admmpd_types.h')
-rw-r--r-- | extern/softbody/src/admmpd_types.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/extern/softbody/src/admmpd_types.h b/extern/softbody/src/admmpd_types.h index 13edb93c3da..46765150e1c 100644 --- a/extern/softbody/src/admmpd_types.h +++ b/extern/softbody/src/admmpd_types.h @@ -18,6 +18,7 @@ struct Options { double timestep_s; // TODO: Figure out delta time from blender api int max_admm_iters; int max_cg_iters; + int max_gs_iters; double mult_k; // stiffness multiplier for constraints double min_res; // min residual for CG solver double youngs; // Young's modulus // TODO variable per-tet @@ -27,6 +28,7 @@ struct Options { timestep_s(1.0/24.0), max_admm_iters(50), max_cg_iters(10), + max_gs_iters(30), mult_k(1), min_res(1e-6), youngs(1000000), @@ -82,6 +84,12 @@ struct SolverData { Eigen::MatrixXd p; Eigen::MatrixXd Ap; // A * p } cgdata; + struct GSData { // Temporaries used in Gauss-Seidel + RowSparseMatrix<double> KtK; // k * Kt K, different dim than A! + Eigen::MatrixXd last_dx; // last GS iter change in x + std::vector<std::vector<int> > A_colors; // colors of just A matrix + std::vector<std::vector<int> > A_KtK_colors; // colors of just A+KtK + } gsdata; // Set in append_energies: std::vector<Eigen::Vector2i> indices; // per-energy index into D (row, num rows) std::vector<double> rest_volumes; // per-energy rest volume |