diff options
author | Sebastián Barschkis <sebbas@sebbas.org> | 2020-12-23 15:54:47 +0300 |
---|---|---|
committer | Sebastián Barschkis <sebbas@sebbas.org> | 2020-12-23 17:48:38 +0300 |
commit | 635694c0ff8fc5c9828bf920ecb81bb9bf792a82 (patch) | |
tree | bf2c3166130710a5a460753f5e6eedd9348c08ea /intern/mantaflow/intern/MANTA_main.cpp | |
parent | 5cfda8e7f74da959a5c1081d45e7608bef95191d (diff) |
Fluid: Added new viscosity solver
Mainly updated the Mantaflow version. It includes the new viscosity solver plugin based on the method from 'Accurate Viscous Free Surfaces for Buckling, Coiling, and Rotating Liquids' (Batty & Bridson).
In the UI, this update adds a new 'Viscosity' section to the fluid modifier UI (liquid domains only). For now, there is a single 'strength' value to control the viscosity of liquids.
Diffstat (limited to 'intern/mantaflow/intern/MANTA_main.cpp')
-rw-r--r-- | intern/mantaflow/intern/MANTA_main.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp index d49915e2452..d5d41e71f22 100644 --- a/intern/mantaflow/intern/MANTA_main.cpp +++ b/intern/mantaflow/intern/MANTA_main.cpp @@ -72,6 +72,7 @@ MANTA::MANTA(int *res, FluidModifierData *fmd) mUsingFractions = (fds->flags & FLUID_DOMAIN_USE_FRACTIONS) && mUsingLiquid; mUsingMesh = (fds->flags & FLUID_DOMAIN_USE_MESH) && mUsingLiquid; mUsingDiffusion = (fds->flags & FLUID_DOMAIN_USE_DIFFUSION) && mUsingLiquid; + mUsingViscosity = (fds->flags & FLUID_DOMAIN_USE_VISCOSITY) && mUsingLiquid; mUsingMVel = (fds->flags & FLUID_DOMAIN_USE_SPEED_VECTORS) && mUsingLiquid; mUsingGuiding = (fds->flags & FLUID_DOMAIN_USE_GUIDE); mUsingDrops = (fds->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && mUsingLiquid; @@ -221,6 +222,10 @@ MANTA::MANTA(int *res, FluidModifierData *fmd) initSuccess &= initLiquidMesh(); } + if (mUsingViscosity) { + initSuccess &= initLiquidViscosity(); + } + if (mUsingDiffusion) { initSuccess &= initCurvature(); } @@ -440,6 +445,17 @@ bool MANTA::initLiquidMesh(FluidModifierData *fmd) return runPythonString(pythonCommands); } +bool MANTA::initLiquidViscosity(FluidModifierData *fmd) +{ + vector<string> pythonCommands; + string tmpString = fluid_variables_viscosity + fluid_solver_viscosity + liquid_alloc_viscosity; + string finalString = parseScript(tmpString, fmd); + pythonCommands.push_back(finalString); + + mUsingViscosity = true; + return runPythonString(pythonCommands); +} + bool MANTA::initCurvature(FluidModifierData *fmd) { std::vector<std::string> pythonCommands; @@ -871,8 +887,10 @@ void MANTA::initializeRNAMap(FluidModifierData *fmd) mRNAMap["CACHE_DIR"] = cacheDirectory; mRNAMap["COMPRESSION_OPENVDB"] = vdbCompressionMethod; mRNAMap["PRECISION_OPENVDB"] = vdbPrecisionHalf; - mRNAMap["CLIP_OPENVDB"] = to_string(fds->clipping); + mRNAMap["CLIP_OPENVDB"] = to_string(fds->clipping); mRNAMap["PP_PARTICLE_MAXIMUM"] = to_string(fds->sys_particle_maximum); + mRNAMap["USING_VISCOSITY"] = getBooleanString(fds->flags & FLUID_DOMAIN_USE_VISCOSITY); + mRNAMap["VISCOSITY_VALUE"] = to_string(fds->viscosity_value); /* Fluid object names. */ mRNAMap["NAME_FLAGS"] = FLUID_NAME_FLAGS; @@ -1728,6 +1746,7 @@ bool MANTA::exportLiquidScript(FluidModifierData *fmd) bool guiding = fds->active_fields & FLUID_DOMAIN_ACTIVE_GUIDE; bool invel = fds->active_fields & FLUID_DOMAIN_ACTIVE_INVEL; bool outflow = fds->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW; + bool viscosity = fds->flags & FLUID_DOMAIN_USE_VISCOSITY; string manta_script; @@ -1742,6 +1761,8 @@ bool MANTA::exportLiquidScript(FluidModifierData *fmd) manta_script += fluid_variables_particles + liquid_variables_particles; if (guiding) manta_script += fluid_variables_guiding; + if (viscosity) + manta_script += fluid_variables_viscosity; /* Solvers. */ manta_script += header_solvers + fluid_solver; @@ -1751,6 +1772,8 @@ bool MANTA::exportLiquidScript(FluidModifierData *fmd) manta_script += fluid_solver_particles; if (guiding) manta_script += fluid_solver_guiding; + if (viscosity) + manta_script += fluid_solver_viscosity; /* Grids. */ manta_script += header_grids + fluid_alloc + liquid_alloc; @@ -1768,6 +1791,8 @@ bool MANTA::exportLiquidScript(FluidModifierData *fmd) manta_script += fluid_alloc_invel; if (outflow) manta_script += fluid_alloc_outflow; + if (viscosity) + manta_script += liquid_alloc_viscosity; /* Domain init. */ manta_script += header_gridinit + liquid_init_phi; |