Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2020-01-15 17:50:02 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2020-01-15 18:28:56 +0300
commitadcc9d014cc2ec27fea74168bdb4c47fddedbeb3 (patch)
tree52e989d4ca931bcb7764525e4d0f04bd9828de71 /intern/mantaflow
parentf7fa6cd1da61b5cc57f5a54d1580f1680f79006c (diff)
Fluid: Moved grid reset loop for inner obstacle cells from blenkernel code into Mantaflow
Having this loop in directly Manta is faster and potentially fixes issues T72783 and T72894.
Diffstat (limited to 'intern/mantaflow')
-rw-r--r--intern/mantaflow/extern/manta_fluid_API.h4
-rw-r--r--intern/mantaflow/intern/MANTA_main.cpp8
-rw-r--r--intern/mantaflow/intern/MANTA_main.h8
-rw-r--r--intern/mantaflow/intern/manta_fluid_API.cpp4
-rw-r--r--intern/mantaflow/intern/strings/fluid_script.h16
-rw-r--r--intern/mantaflow/intern/strings/smoke_script.h7
6 files changed, 31 insertions, 16 deletions
diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h
index aff3a54501c..691a98f9063 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -85,8 +85,8 @@ float *manta_get_force_x(struct MANTA *fluid);
float *manta_get_force_y(struct MANTA *fluid);
float *manta_get_force_z(struct MANTA *fluid);
float *manta_get_phiguide_in(struct MANTA *fluid);
-int *manta_get_num_obstacle(struct MANTA *fluid);
-int *manta_get_num_guide(struct MANTA *fluid);
+float *manta_get_num_obstacle(struct MANTA *fluid);
+float *manta_get_num_guide(struct MANTA *fluid);
int manta_get_res_x(struct MANTA *fluid);
int manta_get_res_y(struct MANTA *fluid);
int manta_get_res_z(struct MANTA *fluid);
diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index 52d40407e0d..fc309c76b30 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -2522,10 +2522,6 @@ void MANTA::updatePointers()
std::vector<std::tuple<int **, std::string, std::string, bool>> mantaIntObjects;
mantaIntObjects.push_back(std::make_tuple(&mObstacle, "flags" + solver_ext, func, true));
- mantaIntObjects.push_back(
- std::make_tuple(&mNumObstacle, "numObs" + solver_ext, func, mUsingObstacle));
- mantaIntObjects.push_back(
- std::make_tuple(&mNumGuide, "numGuides" + solver_ext, func, mUsingGuiding));
std::vector<std::tuple<float **, std::string, std::string, bool>> mantaFloatObjects;
mantaFloatObjects.push_back(std::make_tuple(&mPhiIn, "phiIn" + solver_ext, func, true));
@@ -2559,6 +2555,10 @@ void MANTA::updatePointers()
std::make_tuple(&mInVelocityY, "y_invel" + solver_ext, func, mUsingInvel));
mantaFloatObjects.push_back(
std::make_tuple(&mInVelocityZ, "z_invel" + solver_ext, func, mUsingInvel));
+ mantaFloatObjects.push_back(
+ std::make_tuple(&mNumObstacle, "numObs" + solver_ext, func, mUsingObstacle));
+ mantaFloatObjects.push_back(
+ std::make_tuple(&mNumGuide, "numGuides" + solver_ext, func, mUsingGuiding));
mantaFloatObjects.push_back(std::make_tuple(&mPhi, "phi" + solver_ext, func, mUsingLiquid));
diff --git a/intern/mantaflow/intern/MANTA_main.h b/intern/mantaflow/intern/MANTA_main.h
index 1c18cb8affa..d45f30c9acf 100644
--- a/intern/mantaflow/intern/MANTA_main.h
+++ b/intern/mantaflow/intern/MANTA_main.h
@@ -248,11 +248,11 @@ struct MANTA {
{
return mObstacle;
}
- inline int *getNumObstacle()
+ inline float *getNumObstacle()
{
return mNumObstacle;
}
- inline int *getNumGuide()
+ inline float *getNumGuide()
{
return mNumGuide;
}
@@ -765,8 +765,8 @@ struct MANTA {
float *mForceY;
float *mForceZ;
int *mObstacle;
- int *mNumObstacle;
- int *mNumGuide;
+ float *mNumObstacle;
+ float *mNumGuide;
// Smoke grids
float *mDensity;
diff --git a/intern/mantaflow/intern/manta_fluid_API.cpp b/intern/mantaflow/intern/manta_fluid_API.cpp
index 240bbd77085..4c9b5a93fc3 100644
--- a/intern/mantaflow/intern/manta_fluid_API.cpp
+++ b/intern/mantaflow/intern/manta_fluid_API.cpp
@@ -292,11 +292,11 @@ float *manta_get_phiguide_in(MANTA *fluid)
return fluid->getPhiGuideIn();
}
-int *manta_get_num_obstacle(MANTA *fluid)
+float *manta_get_num_obstacle(MANTA *fluid)
{
return fluid->getNumObstacle();
}
-int *manta_get_num_guide(MANTA *fluid)
+float *manta_get_num_guide(MANTA *fluid)
{
return fluid->getNumGuide();
}
diff --git a/intern/mantaflow/intern/strings/fluid_script.h b/intern/mantaflow/intern/strings/fluid_script.h
index 565b942c582..b7d3a5a195e 100644
--- a/intern/mantaflow/intern/strings/fluid_script.h
+++ b/intern/mantaflow/intern/strings/fluid_script.h
@@ -243,7 +243,7 @@ fluid_data_dict_s$ID$ = dict(vel=vel_s$ID$, phiObs=phiObs_s$ID$, phiIn=phiIn_s$I
const std::string fluid_alloc_obstacle =
"\n\
mantaMsg('Allocating obstacle data')\n\
-numObs_s$ID$ = s$ID$.create(IntGrid)\n\
+numObs_s$ID$ = s$ID$.create(RealGrid)\n\
phiObsIn_s$ID$ = s$ID$.create(LevelsetGrid)\n\
obvel_s$ID$ = s$ID$.create(MACGrid)\n\
obvelC_s$ID$ = s$ID$.create(Vec3Grid)\n\
@@ -259,7 +259,7 @@ const std::string fluid_alloc_guiding =
mantaMsg('Allocating guiding data')\n\
velT_s$ID$ = s$ID$.create(MACGrid)\n\
weightGuide_s$ID$ = s$ID$.create(RealGrid)\n\
-numGuides_s$ID$ = s$ID$.create(IntGrid)\n\
+numGuides_s$ID$ = s$ID$.create(RealGrid)\n\
phiGuideIn_s$ID$ = s$ID$.create(LevelsetGrid)\n\
guidevelC_s$ID$ = s$ID$.create(Vec3Grid)\n\
x_guidevel_s$ID$ = s$ID$.create(RealGrid)\n\
@@ -324,9 +324,15 @@ def fluid_pre_step_$ID$():\n\
\n\
# translate obvels (world space) to grid space\n\
if using_obstacle_s$ID$:\n\
+ # Average out velocities from multiple obstacle objects at one cell\n\
+ x_obvel_s$ID$.safeDivide(numObs_s$ID$)\n\
+ y_obvel_s$ID$.safeDivide(numObs_s$ID$)\n\
+ z_obvel_s$ID$.safeDivide(numObs_s$ID$)\n\
+ \n\
x_obvel_s$ID$.multConst(toMantaUnitsFac_s$ID$)\n\
y_obvel_s$ID$.multConst(toMantaUnitsFac_s$ID$)\n\
z_obvel_s$ID$.multConst(toMantaUnitsFac_s$ID$)\n\
+ \n\
copyRealToVec3(sourceX=x_obvel_s$ID$, sourceY=y_obvel_s$ID$, sourceZ=z_obvel_s$ID$, target=obvelC_s$ID$)\n\
\n\
# translate invels (world space) to grid space\n\
@@ -572,9 +578,15 @@ def bake_guiding_process_$ID$(framenr, format_guiding, path_guiding):\n\
if framenr>1:\n\
fluid_load_guiding_$ID$(path_guiding, framenr-1, format_guiding)\n\
\n\
+ # Average out velocities from multiple guiding objects at one cell\n\
+ x_guidevel_s$ID$.safeDivide(numGuides_s$ID$)\n\
+ y_guidevel_s$ID$.safeDivide(numGuides_s$ID$)\n\
+ z_guidevel_s$ID$.safeDivide(numGuides_s$ID$)\n\
+ \n\
x_guidevel_s$ID$.multConst(Real(toMantaUnitsFac_s$ID$))\n\
y_guidevel_s$ID$.multConst(Real(toMantaUnitsFac_s$ID$))\n\
z_guidevel_s$ID$.multConst(Real(toMantaUnitsFac_s$ID$))\n\
+ \n\
copyRealToVec3(sourceX=x_guidevel_s$ID$, sourceY=y_guidevel_s$ID$, sourceZ=z_guidevel_s$ID$, target=guidevelC_s$ID$)\n\
\n\
mantaMsg('Extrapolating guiding velocity')\n\
diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h
index 186f56c0707..3445bd56481 100644
--- a/intern/mantaflow/intern/strings/smoke_script.h
+++ b/intern/mantaflow/intern/strings/smoke_script.h
@@ -371,6 +371,9 @@ def smoke_step_$ID$():\n\
extrapolateVec3Simple(vel=obvelC_s$ID$, phi=phiObsIn_s$ID$, distance=3, inside=False)\n\
resampleVec3ToMac(source=obvelC_s$ID$, target=obvel_s$ID$)\n\
\n\
+ # Cells inside obstacle should not contain any density, fire, etc.\n\
+ resetInObstacle(flags=flags_s$ID$, density=density_s$ID$, vel=vel_s$ID$, heat=heat_s$ID$, fuel=fuel_s$ID$, flame=flame_s$ID$, red=color_r_s$ID$, green=color_g_s$ID$, blue=color_b_s$ID$)\n\
+ \n\
# add initial velocity\n\
if using_invel_s$ID$:\n\
resampleVec3ToMac(source=invelC_s$ID$, target=invel_s$ID$)\n\
@@ -388,7 +391,7 @@ def smoke_step_$ID$():\n\
\n\
def process_burn_$ID$():\n\
mantaMsg('Process burn')\n\
- processBurn(fuel=fuel_s$ID$, density=density_s$ID$, react=react_s$ID$, red=color_r_s$ID$ if using_colors_s$ID$ else None, green=color_g_s$ID$ if using_colors_s$ID$ else None, blue=color_b_s$ID$ if using_colors_s$ID$ else None, heat=heat_s$ID$ if using_heat_s$ID$ else None, burningRate=burningRate_s$ID$, flameSmoke=flameSmoke_s$ID$, ignitionTemp=ignitionTemp_s$ID$, maxTemp=maxTemp_s$ID$, flameSmokeColor=flameSmokeColor_s$ID$)\n\
+ processBurn(fuel=fuel_s$ID$, density=density_s$ID$, react=react_s$ID$, red=color_r_s$ID$, green=color_g_s$ID$, blue=color_b_s$ID$, heat=heat_s$ID$, burningRate=burningRate_s$ID$, flameSmoke=flameSmoke_s$ID$, ignitionTemp=ignitionTemp_s$ID$, maxTemp=maxTemp_s$ID$, flameSmokeColor=flameSmokeColor_s$ID$)\n\
\n\
def update_flame_$ID$():\n\
mantaMsg('Update flame')\n\
@@ -503,7 +506,7 @@ def step_noise_$ID$():\n\
\n\
def process_burn_noise_$ID$():\n\
mantaMsg('Process burn noise')\n\
- processBurn(fuel=fuel_sn$ID$, density=density_sn$ID$, react=react_sn$ID$, red=color_r_sn$ID$ if using_colors_s$ID$ else None, green=color_g_sn$ID$ if using_colors_s$ID$ else None, blue=color_b_sn$ID$ if using_colors_s$ID$ else None, burningRate=burningRate_s$ID$, flameSmoke=flameSmoke_s$ID$, ignitionTemp=ignitionTemp_s$ID$, maxTemp=maxTemp_s$ID$, flameSmokeColor=flameSmokeColor_s$ID$)\n\
+ processBurn(fuel=fuel_sn$ID$, density=density_sn$ID$, react=react_sn$ID$, red=color_r_sn$ID$, green=color_g_sn$ID$, blue=color_b_sn$ID$, burningRate=burningRate_s$ID$, flameSmoke=flameSmoke_s$ID$, ignitionTemp=ignitionTemp_s$ID$, maxTemp=maxTemp_s$ID$, flameSmokeColor=flameSmokeColor_s$ID$)\n\
\n\
def update_flame_noise_$ID$():\n\
mantaMsg('Update flame noise')\n\