[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53648] trunk/blender/source/blender/ blenkernel/intern/particle_system.c: Fix for [#33788] Particles - Fluid " exploding" behavior

Alex Fraser alex at phatcore.com
Tue Jan 8 05:28:50 CET 2013


Revision: 53648
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53648
Author:   z0r
Date:     2013-01-08 04:28:44 +0000 (Tue, 08 Jan 2013)
Log Message:
-----------
Fix for [#33788] Particles - Fluid "exploding" behavior

Particle mass was being used incorrectly by DDR solver (my fault).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2013-01-08 03:30:31 UTC (rev 53647)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2013-01-08 04:28:44 UTC (rev 53648)
@@ -2396,6 +2396,7 @@
 	ParticleData *pa;
 
 	float h;
+	float mass;
 	float massfac;
 	int use_size;
 } SPHRangeData;
@@ -2408,7 +2409,7 @@
 
 	for (i=0; i < 10 && psys[i]; i++) {
 		pfr->npsys    = psys[i];
-		pfr->massfac  = psys[i]->part->mass;
+		pfr->massfac  = psys[i]->part->mass / pfr->mass;
 		pfr->use_size = psys[i]->part->flag & PART_SIZEMASS;
 
 		if (tree) {
@@ -2491,7 +2492,6 @@
 	ParticleSpring *spring = NULL;
 	SPHRangeData pfr;
 	SPHNeighbor *pfn;
-	float mass = sphdata->mass;
 	float *gravity = sphdata->gravity;
 	EdgeHash *springhash = sphdata->eh;
 
@@ -2501,7 +2501,7 @@
 	float visc = fluid->viscosity_omega;
 	float stiff_visc = fluid->viscosity_beta * (fluid->flag & SPH_FAC_VISCOSITY ? fluid->viscosity_omega : 1.f);
 
-	float inv_mass = 1.0f/mass;
+	float inv_mass = 1.0f / sphdata->mass;
 	float spring_constant = fluid->spring_k;
 
 	/* 4.0 seems to be a pretty good value */
@@ -2526,6 +2526,7 @@
 	pfr.data = data;
 	pfr.h = h;
 	pfr.pa = pa;
+	pfr.mass = sphdata->mass;
 
 	sph_evaluate_func( NULL, psys, state->co, &pfr, interaction_radius, sph_density_accum_cb);
 
@@ -2644,7 +2645,7 @@
 	 *     q1(x) = (2.0 - x)**4 * ( 1.0 + 2.0 * x)
 	 *     plot [0:2] q1(x) */
 	q  = qfac / pow3(pfr->h) * pow4(2.0f - rij_h) * ( 1.0f + 2.0f * rij_h);
-	q *= pfr->massfac;
+	q *= pfr->npsys->part->mass;
 
 	if (pfr->use_size)
 		q *= pfr->pa->size;
@@ -2792,6 +2793,7 @@
 	pfr.data = data;
 	pfr.h = interaction_radius * sphdata->hfac;
 	pfr.pa = pa;
+	pfr.mass = sphdata->mass;
 
 	sph_evaluate_func( NULL, psys, pa->state.co, &pfr, interaction_radius, sphclassical_density_accum_cb);
 	pa->sphdensity = MIN2(MAX2(data[0], fluid->rest_density * 0.9f), fluid->rest_density * 1.1f);
@@ -2851,7 +2853,8 @@
 
 	density[0] = density[1] = 0.0f;
 	pfr.data = density;
-	pfr.h = interaction_radius*sphdata->hfac;
+	pfr.h = interaction_radius * sphdata->hfac;
+	pfr.mass = sphdata->mass;
 
 	sph_evaluate_func(tree, psys, co, &pfr, interaction_radius, sphdata->density_cb);
 




More information about the Bf-blender-cvs mailing list