[Bf-blender-cvs] [b1fdf48] fluid-mantaflow: refactored manta liquid script

Sebastián Barschkis noreply at git.blender.org
Sun Oct 23 16:33:56 CEST 2016


Commit: b1fdf48235186606bfe87768a82c359d3670aa0c
Author: Sebastián Barschkis
Date:   Sat Oct 22 23:38:04 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBb1fdf48235186606bfe87768a82c359d3670aa0c

refactored manta liquid script

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

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 7e8fc49..dc7228b 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -53,7 +53,6 @@ if doOpen:\n\
 
 const std::string liquid_variables_low = "\n\
 mantaMsg('Liquid variables low')\n\
-narrowBand       = True\n\
 narrowBandWidth  = 3\n\
 combineBandWidth = narrowBandWidth - 1\n\
 \n\
@@ -140,12 +139,11 @@ def manta_step(start_frame):\n\
     if start_frame == 1:\n\
         phi.join(phiInit)\n\
         phiObs.join(phiObsInit)\n\
-        phi.subtract(phiObs)\n\
         \n\
         flags.updateFromLevelset(phi)\n\
+        phi.subtract(phiObs)\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\
@@ -173,80 +171,62 @@ def liquid_step():\n\
     copyRealToVec3(sourceX=x_vel, sourceY=y_vel, sourceZ=z_vel, target=vel)\n\
     copyRealToVec3(sourceX=x_obvel, sourceY=y_obvel, sourceZ=z_obvel, target=obvel)\n\
     \n\
-    # Advect particles and grid phi\n\
-    # Note: Grid velocities are extrapolated at the end of each step\n\
+    # FLIP\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\
-    if narrowBand:\n\
-        advectSemiLagrange(flags=flags, vel=vel, grid=vel, order=2, openBounds=doOpen, boundaryWidth=boundaryWidth)\n\
+    advectSemiLagrange(flags=flags, vel=vel, grid=phi, order=1, openBounds=doOpen, boundaryWidth=boundaryWidth) # first order is usually enough\n\
+    advectSemiLagrange(flags=flags, vel=vel, grid=vel, order=2, openBounds=doOpen, boundaryWidth=boundaryWidth)\n\
     \n\
     # Keep an original copy of interpolated phi grid for later use in (optional) high-res step\n\
     if using_highres:\n\
         interpolateGrid(target=xl_phi, source=phi)\n\
     \n\
-    # Create level set of particles\n\
+    # create level set of particles\n\
     gridParticleIndex(parts=pp , flags=flags, indexSys=pindex, index=gpi)\n\
     unionParticleLevelset(pp, pindex, flags, gpi, phiParts)\n\
     \n\
-    if doOpen:\n\
-        resetOutflow(flags=flags, phi=phi, parts=pp, index=gpi, indexSys=pindex)\n\
-    \n\
-    if narrowBand:\n\
-        # Combine level set of particles with grid level set\n\
-        phi.addConst(1.) # shrink slightly\n\
-        phi.join(phiParts)\n\
-        extrapolateLsSimple(phi=phi, distance=narrowBandWidth+2, inside=True )\n\
-    else:\n\
-        # Overwrite grid level set with level set of particles\n\
-        phi.copyFrom(phiParts)\n\
-        extrapolateLsSimple(phi=phi, distance=4, inside=True )\n\
-    \n\
+    # combine level set of particles with grid level set\n\
+    phi.addConst(1.) # shrink slightly\n\
+    phi.join(phiParts)\n\
+    extrapolateLsSimple(phi=phi, distance=narrowBandWidth+2, inside=True)\n\
     extrapolateLsSimple(phi=phi, distance=3)\n\
+    phi.setBoundNeumann(1) # make sure no particles are placed at outer boundary\n\
+    if doOpen:\n\
+        resetOutflow(flags=flags, phi=phi, parts=pp, index=gpi, indexSys=pindex) # open boundaries\n\
     flags.updateFromLevelset(phi)\n\
     \n\
-    # Make sure we have velocities throught liquid region\n\
-    if narrowBand:\n\
-        # Combine particles velocities with advected grid velocities\n\
-        mapPartsToMAC(vel=velParts, flags=flags, velOld=velOld, parts=pp, partVel=pVel, weight=mapWeights)\n\
-        extrapolateMACFromWeight(vel=velParts , distance=2, weight=mapWeights)\n\
-        combineGridVel(vel=velParts, weight=mapWeights , combineVel=vel, phi=phi, narrowBand=combineBandWidth, thresh=0)\n\
-        velOld.copyFrom(vel)\n\
-    else:\n\
-        # Map particle velocities to grid\n\
-        mapPartsToMAC(vel=vel, flags=flags, velOld=velOld, parts=pp, partVel=pVel, weight=mapWeights)\n\
-        extrapolateMACFromWeight(vel=vel , distance=2, weight=mapWeights)\n\
+    # combine particles velocities with advected grid velocities\n\
+    mapPartsToMAC(vel=velParts, flags=flags, velOld=velOld, parts=pp, partVel=pVel, weight=mapWeights)\n\
+    extrapolateMACFromWeight(vel=velParts, distance=2, weight=mapWeights)\n\
+    combineGridVel(vel=velParts, weight=mapWeights, combineVel=vel, phi=phi, narrowBand=combineBandWidth, thresh=0)\n\
+    velOld.copyFrom(vel)\n\
     \n\
-    # Forces & pressure solve\n\
+    # forces & pressure solve\n\
     addGravity(flags=flags, vel=vel, gravity=gravity)\n\
     copyRealToVec3(sourceX=x_force, sourceY=y_force, sourceZ=z_force, target=forces)\n\
     addForceField(flags=flags, vel=vel, force=forces)\n\
     forces.clear()\n\
     \n\
+    extrapolateMACSimple(flags=flags, vel=vel, distance=2, intoObs=True)\n\
     setWallBcs(flags=flags, vel=vel, fractions=fractions, phiObs=phiObs)\n\
+    \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.)), intoObs=True)\n\
+    extrapolateMACSimple(flags=flags, vel=vel, distance=4, intoObs=True)\n\
+    setWallBcs(flags=flags, vel=vel, fractions=fractions, phiObs=phiObs)\n\
     \n\
-    # Update particle velocities\n\
+    if (dim==3):\n\
+        # mis-use phiParts as temp grid to close the mesh\n\
+        phiParts.copyFrom(phi)\n\
+        phiParts.setBound(0.5,0)\n\
+        phiParts.createMesh(mesh)\n\
+	\n\
+    # set source grids for resampling, used in adjustNumber!\n\
+    pVel.setSource(vel, isMAC=True)\n\
+    adjustNumber(parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi, exclude=phiObs, radiusFactor=radiusFactor, narrowBand=narrowBandWidth)\n\
     flipVelocityUpdate(vel=vel, velOld=velOld, flags=flags, parts=pp, partVel=pVel, flipRatio=0.95)\n\
     \n\
-    if dim==3:\n\
-        phi.createMesh(mesh)\n\
-    \n\
-    # Resample particles\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, exclude=phiObs, radiusFactor=radiusFactor, narrowBand=narrowBandWidth)\n\
-    else:\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(os.path.join(tempfile.gettempdir(), 'partfile.uni'))\n\
@@ -257,7 +237,6 @@ def liquid_step():\n\
 const std::string liquid_step_high = "\n\
 def liquid_step_high():\n\
     mantaMsg('Liquid step high')\n\
-    #xl_phi.setBound(value=0., boundaryWidth=1)\n\
     xl_pp.load(os.path.join(tempfile.gettempdir(), 'partfile.uni'))\n\
     \n\
     # create surface\n\
@@ -266,7 +245,6 @@ def liquid_step_high():\n\
     averagedParticleLevelset( xl_pp, xl_pindex, xl_flags, xl_gpi, xl_phiParts, radiusFactor , 1, 1 )\n\
     xl_phi.join(xl_phiParts)\n\
     \n\
-    #xl_phi.setBound(value=0., boundaryWidth=1)\n\
     xl_phi.createMesh(xl_mesh)\n";
 
 //////////////////////////////////////////////////////////////////////
@@ -390,7 +368,6 @@ if 'xl_gpi'      in globals() : del xl_gpi\n";
 
 const std::string liquid_delete_variables_low = "\n\
 mantaMsg('Deleting lowres liquid variables')\n\
-if 'narrowBand'       in globals() : del narrowBand\n\
 if 'narrowBandWidth'  in globals() : del narrowBandWidth\n\
 if 'combineBandWidth' in globals() : del combineBandWidth\n\
 if 'minParticles'     in globals() : del minParticles\n\




More information about the Bf-blender-cvs mailing list