[Bf-blender-cvs] [5d44015] fluid-mantaflow: adapted manta liquid script to support obstacles

Sebastián Barschkis noreply at git.blender.org
Mon Oct 3 19:47:55 CEST 2016


Commit: 5d44015a46b96e77db092d4233c28fe5119e7058
Author: Sebastián Barschkis
Date:   Mon Sep 19 19:32:19 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB5d44015a46b96e77db092d4233c28fe5119e7058

adapted manta liquid script to support obstacles

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

M	intern/mantaflow/intern/strings/liquid_script.h

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

diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index d307663..fa31408 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -36,14 +36,14 @@
 const std::string liquid_bounds_low = "\n\
 # prepare domain low\n\
 mantaMsg('Liquid domain low')\n\
-flags.initDomain(boundaryWidth=boundaryWidth)\n\
+flags.initDomain(boundaryWidth=boundaryWidth, phiWalls=phiObs)\n\
 if doOpen:\n\
     setOpenBound(flags=flags, bWidth=boundaryWidth, openBound=boundConditions, type=FlagOutflow|FlagEmpty)\n";
 
 const std::string liquid_bounds_high = "\n\
 # prepare domain high\n\
 mantaMsg('Liquid domain high')\n\
-xl_flags.initDomain(boundaryWidth=boundaryWidth)\n\
+xl_flags.initDomain(boundaryWidth=boundaryWidth, phiWalls=phiObs)\n\
 if doOpen:\n\
     setOpenBound(flags=xl_flags, bWidth=boundaryWidth, openBound=boundConditions, type=FlagOutflow|FlagEmpty)\n";
 
@@ -138,12 +138,22 @@ def manta_step(start_frame):\n\
     s.timeTotal = s.frame * dt0\n\
     last_frame = s.frame\n\
     \n\
-    sampleLevelsetWithParticles( phi=phiInit, flags=flags, parts=pp, discretization=particleNumber, randomness=randomness, refillEmpty=True )\n\
-    mapGridToPartsVec3(source=vel, parts=pp, target=pVel )\n\
-    phi.join(phiInit)\n\
-    flags.updateFromLevelset(phi)\n\
+    if start_frame == 1:\n\
+        phi.join(phiInit)\n\
+        phiObs.join(phiObsInit)\n\
+        phi.subtract(phiObs)\n\
+        \n\
+        flags.updateFromLevelset(phi)\n\
+        \n\
+        sampleLevelsetWithParticles(phi=phi, flags=flags, parts=pp, discretization=particleNumber, randomness=randomness)\n\
+        mapGridToPartsVec3(source=vel, parts=pp, target=pVel)\n\
+        \n\
+        updateFractions(flags=flags, phiObs=phiObs, fractions=fractions, boundaryWidth=boundaryWidth)\n\
+        setObstacleFlags(flags=flags, phiObs=phiObs, fractions=fractions)\n\
     \n\
     while s.frame == last_frame:\n\
+        sampleLevelsetWithParticles(phi=phiInit, flags=flags, parts=pp, discretization=particleNumber, randomness=randomness, refillEmpty=True)\n\
+        \n\
         mantaMsg('Adapt timestep')\n\
         maxvel = vel.getMaxValue()\n\
         s.adaptTimestep(maxvel)\n\
@@ -166,7 +176,9 @@ def liquid_step():\n\
     \n\
     # Advect particles and grid phi\n\
     # Note: Grid velocities are extrapolated at the end of each step\n\
-    pp.advectInGrid(flags=flags, vel=vel, integrationMode=IntRK4, deleteInObstacle=False)\n\
+    pp.advectInGrid(flags=flags, vel=vel, integrationMode=IntRK4, deleteInObstacle=False, stopInObstacle=False)\n\
+    pushOutofObs(parts=pp, flags=flags, phiObs=phiObs)\n\
+    \n\
     advectSemiLagrange(flags=flags, vel=vel, grid=phi, order=1, openBounds=doOpen, boundaryWidth=boundaryWidth)\n\
     \n\
     # Advect grid velocity\n\
@@ -215,12 +227,12 @@ def liquid_step():\n\
     addForceField(flags=flags, vel=vel, force=forces)\n\
     forces.clear()\n\
     \n\
-    setWallBcs(flags=flags, vel=vel)\n\
-    solvePressure(flags=flags, vel=vel, pressure=pressure, phi=phi)\n\
-    setWallBcs(flags=flags, vel=vel)\n\
+    setWallBcs(flags=flags, vel=vel, fractions=fractions, phiObs=phiObs)\n\
+    solvePressure(flags=flags, vel=vel, pressure=pressure, phi=phi, fractions=fractions)\n\
+    setWallBcs(flags=flags, vel=vel, fractions=fractions, phiObs=phiObs)\n\
     \n\
     # Extrapolate velocities\n\
-    extrapolateMACSimple(flags=flags, vel=vel, distance=(int(maxVel*1.25 + 2.)))\n\
+    extrapolateMACSimple(flags=flags, vel=vel, distance=(int(maxVel*1.25 + 2.)), intoObs=True)\n\
     \n\
     # Update particle velocities\n\
     flipVelocityUpdate(vel=vel, velOld=velOld, flags=flags, parts=pp, partVel=pVel, flipRatio=0.95)\n\
@@ -232,17 +244,14 @@ def liquid_step():\n\
     pVel.setSource(vel, isMAC=True) # Set source grids for resampling, used in adjustNumber!\n\
     if narrowBand:\n\
         phi.setBoundNeumann(boundaryWidth) # make sure no particles are placed at outer boundary\n\
-        adjustNumber(parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi, radiusFactor=radiusFactor, narrowBand=narrowBandWidth)\n\
+        adjustNumber(parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi, exclude=phiObs, radiusFactor=radiusFactor, narrowBand=narrowBandWidth)\n\
     else:\n\
-        adjustNumber(parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi, radiusFactor=radiusFactor)\n\
+        adjustNumber(parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi, exclude=phiObs, radiusFactor=radiusFactor)\n\
     \n\
     # TODO (sebbas): HACK - saving particle system for highres step\n\
     if using_highres:\n\
         pp.save('/tmp/partfile.uni')\n\
     \n\
-    # reset inflow grid\n\
-    phiInit.setConst(0.5)\n\
-    \n\
     copyVec3ToReal(source=vel, targetX=x_vel, targetY=y_vel, targetZ=z_vel)\n\
     copyVec3ToReal(source=obvel, targetX=x_obvel, targetY=y_obvel, targetZ=z_obvel)\n";




More information about the Bf-blender-cvs mailing list