[Bf-blender-cvs] [688643c9fdf] soc-2020-soft-body: added some asserts

over0219 noreply at git.blender.org
Tue Jun 16 23:58:28 CEST 2020


Commit: 688643c9fdf19802fe7c3bb4e6b53754fa9e7cca
Author: over0219
Date:   Tue Jun 16 16:58:24 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB688643c9fdf19802fe7c3bb4e6b53754fa9e7cca

added some asserts

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

M	extern/softbody/src/admmpd_solver.cpp

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

diff --git a/extern/softbody/src/admmpd_solver.cpp b/extern/softbody/src/admmpd_solver.cpp
index 027ba921d07..706eb9dce11 100644
--- a/extern/softbody/src/admmpd_solver.cpp
+++ b/extern/softbody/src/admmpd_solver.cpp
@@ -13,7 +13,7 @@
 #include <iostream>
 
 #include "BLI_task.h" // threading
-#include "BLI_assert.h" // assert
+#include "BLI_assert.h"
 
 namespace admmpd {
 using namespace Eigen;
@@ -31,11 +31,11 @@ bool Solver::init(
     Data *data)
 {
 	BLI_assert(data != NULL);
-	if (!data || !options)
-		throw std::runtime_error("init: data/options null");
-
-	if (V.rows()==0)
-		throw std::runtime_error("init: no input vertices");
+	BLI_assert(options != NULL);
+	BLI_assert(V.rows() > 0);
+	BLI_assert(V.cols() == 3);
+	BLI_assert(T.rows() > 0);
+	BLI_assert(T.cols() == 4);
 
 	data->x = V;
 	data->v.resize(V.rows(),3);
@@ -51,8 +51,12 @@ int Solver::solve(
 	const Options *options,
 	Data *data)
 {
-	if ((int)data->A.nonZeros()==0)
-		return 0;
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
+	BLI_assert(data->x.cols() == 3);
+	BLI_assert(data->x.rows() > 0);
+	BLI_assert(data->A.nonZeros() > 0);
+	BLI_assert(options->max_admm_iters > 0);
 
 	// Init the solve which computes
 	// quantaties like M_xbar and makes sure
@@ -87,7 +91,11 @@ void Solver::init_solve(
 	const Options *options,
 	Data *data)
 {
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
 	int nx = data->x.rows();
+	BLI_assert(nx > 0);
+
 	if (data->M_xbar.rows() != nx)
 		data->M_xbar.resize(nx,3);
 
@@ -132,7 +140,10 @@ void Solver::solve_local_step(
 	const Options *options,
 	Data *data)
 {
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
 	int ne = data->rest_volumes.size();
+	BLI_assert(ne > 0);
   	ThreadData thread_data = {.options=options, .data = data};
 	TaskParallelSettings settings;
 	BLI_parallel_range_settings_defaults(&settings);
@@ -143,6 +154,9 @@ void Solver::update_constraints(
 	const Options *options,
 	Data *data)
 {
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
+
 	std::vector<double> l_coeffs;
 	std::vector<Eigen::Triplet<double> > trips_x;
     std::vector<Eigen::Triplet<double> > trips_y;
@@ -199,6 +213,21 @@ void Solver::solve_conjugate_gradients(
 	const Options *options,
 	Data *data)
 {
+	BLI_assert(data != NULL);
+	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->K[0].cols() == nx);
+	BLI_assert(data->K[1].cols() == nx);
+	BLI_assert(data->K[2].cols() == nx);
+	BLI_assert(data->l.rows() > 0);
+	BLI_assert(data->K[0].rows() == data->l.rows());
+	BLI_assert(data->K[1].rows() == data->l.rows());
+	BLI_assert(data->K[2].rows() == data->l.rows());
+
 	// Solve Ax = b in parallel
 	auto solve_Ax_b = [](
 		Data *data_,
@@ -241,13 +270,12 @@ void Solver::solve_conjugate_gradients(
 	admmpd::Data::CGData *cgdata = &data->cgdata;
 	double eps = options->min_res;
 	cgdata->b = data->b;
-	int nv = data->b.rows();
-	if (cgdata->r.rows() !=nv)
+	if (cgdata->r.rows() != nx)
 	{
-		cgdata->r.resize(nv,3);
-		cgdata->z.resize(nv,3);
-		cgdata->p.resize(nv,3);
-		cgdata->Ap.resize(nv,3);
+		cgdata->r.resize(nx,3);
+		cgdata->z.resize(nx,3);
+		cgdata->p.resize(nx,3);
+		cgdata->Ap.resize(nx,3);
 	}
 
 	for (int i=0; i<3; ++i)
@@ -290,11 +318,13 @@ bool Solver::compute_matrices(
 	const Options *options,
 	Data *data)
 {
-	// Allocate per-vertex data
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
 	int nx = data->x.rows();
-	if (nx==0)
-		return false;
+	BLI_assert(nx > 0);
+	BLI_assert(data->x.cols() == 3);
 
+	// Allocate per-vertex data
 	data->x_start = data->x;
 	data->M_xbar.resize(nx,3);
 	data->M_xbar.setZero();
@@ -364,6 +394,9 @@ void Solver::compute_masses(
 	const Options *options,
 	Data *data)
 {
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
+
 	// Source: https://github.com/mattoverby/mclscene/blob/master/include/MCL/TetMesh.hpp
 	// Computes volume-weighted masses for each vertex
 	// density_kgm3 is the unit-volume density
@@ -392,9 +425,10 @@ void Solver::append_energies(
 	Data *data,
 	std::vector<Triplet<double> > &D_triplets)
 {
+	BLI_assert(data != NULL);
+	BLI_assert(options != NULL);
 	int nt = data->tets.rows();
-	if (nt==0)
-		return;
+	BLI_assert(nt > 0);
 
 	data->indices.reserve(nt);
 	data->rest_volumes.reserve(nt);



More information about the Bf-blender-cvs mailing list