To achieve neutral buoyancy of a rigid body in a fluid — whether the body is initialized already submerged or falls into the fluid from above — I need to set the rigid body density to a value significantly higher than the density of the fluid (e.g 7x, 10x). The required density depends on the particle radius used in the simulation.
I have reproduced this behavior with all three available boundaryHandlingMethod options (0: Akinci et al. 2012, 1: Koschier & Bender 2017, 2: Bender et al. 2019).
I am using the NRP fork: https://bitbucket.org/hbpneurorobotics/splishsplash/src/master/
My end goal is to capture hydrodynamic forces and moments (drag, added mass, buoyancy) to compare them against a simplified analytical model of an air/water transition, so it is of interest to me to capture the correct physical scale of those magnitudes.
Scene file
{
"Configuration":
{
"cameraPosition": [0,6,5],
"cameraLookat": [0,2,0],
"particleRadius": 0.05,
"numberOfStepsPerRenderUpdate": 4,
"density0": 1000,
"simulationMethod": 4,
"gravitation": [0,-9.81,0],
"cflMethod": 1,
"cflFactor": 1,
"cflMaxTimeStepSize": 0.005,
"maxIterations": 100,
"maxError": 0.05,
"maxIterationsV": 100,
"maxErrorV": 0.1,
"stiffness": 50000,
"exponent": 7,
"velocityUpdateMethod": 0,
"enableDivergenceSolver": true,
"boundaryHandlingMethod": 2
},
"Materials": [
{
"id": "Fluid",
"viscosity": 0.01,
"viscosityMethod": 1,
"colorMapType": 1,
"XSPH": {
"xsph": 1.0,
"xsphBoundary": 0.0
}
}
],
"RigidBodies": [
{
"geometryFile": "../models/UnitBox.obj",
"translation": [0,3.0,0],
"rotationAxis": [1, 0, 0],
"rotationAngle": 0,
"scale": [2, 6.2, 2],
"color": [0.1, 0.4, 0.6, 1.0],
"isDynamic": false,
"isWall": true,
"mapInvert": true,
"mapThickness": 0.0,
"mapResolution": [25,25,25]
},
{
"density": 20000,
"geometryFile": "../models/Missile.obj",
"translation": [0, 4.5, 0],
"rotationAxis": [1, 0, 0],
"rotationAngle": -1.57079632679,
"scale": [1.0, 1.0, 1.0],
"color": [0.8, 0.2, 0.2, 1.0],
"isDynamic": true,
"isWall": false,
"mapInvert": false,
"mapThickness": 0.0,
"mapResolution": [150,150,150]
}
],
"FluidBlocks": [
{
"denseMode": 0,
"start": [-1, -0.2, -1],
"end": [1, 4.0, 1]
}
]
}
- Fork / commit: NRP fork, version 2.9.1
- Pressure solver: DFSPH
- Particle radius tested:0.25, 0.5
- Boundary handling methods tested: 0, 1, 2
- OS / compiler: Ubuntu 20.04
- Is there a known correction or recommended procedure to recover physically scaled buoyancy/hydrodynamic forces?
- Is the discrepancy attributable to the volume sampling of the rigid body (e.g. boundary particle volume vs. actual mesh volume), and if so, is there a recommended sampling resolution or correction factor?
- Are the force/torque outputs reported by the rigid-fluid coupling expected to be in physical units, or do they inherit the same scaling as
density0?
- Would switching to a different pressure solver (DFSPH vs. IISPH vs. PBF) be expected to change this, or is the effect solver-independent?
Thanks!
To achieve neutral buoyancy of a rigid body in a fluid — whether the body is initialized already submerged or falls into the fluid from above — I need to set the rigid body density to a value significantly higher than the density of the fluid (e.g 7x, 10x). The required density depends on the particle radius used in the simulation.
I have reproduced this behavior with all three available
boundaryHandlingMethodoptions (0: Akinci et al. 2012, 1: Koschier & Bender 2017, 2: Bender et al. 2019).I am using the NRP fork: https://bitbucket.org/hbpneurorobotics/splishsplash/src/master/
My end goal is to capture hydrodynamic forces and moments (drag, added mass, buoyancy) to compare them against a simplified analytical model of an air/water transition, so it is of interest to me to capture the correct physical scale of those magnitudes.
Scene file
{ "Configuration": { "cameraPosition": [0,6,5], "cameraLookat": [0,2,0], "particleRadius": 0.05, "numberOfStepsPerRenderUpdate": 4, "density0": 1000, "simulationMethod": 4, "gravitation": [0,-9.81,0], "cflMethod": 1, "cflFactor": 1, "cflMaxTimeStepSize": 0.005, "maxIterations": 100, "maxError": 0.05, "maxIterationsV": 100, "maxErrorV": 0.1, "stiffness": 50000, "exponent": 7, "velocityUpdateMethod": 0, "enableDivergenceSolver": true, "boundaryHandlingMethod": 2 }, "Materials": [ { "id": "Fluid", "viscosity": 0.01, "viscosityMethod": 1, "colorMapType": 1, "XSPH": { "xsph": 1.0, "xsphBoundary": 0.0 } } ], "RigidBodies": [ { "geometryFile": "../models/UnitBox.obj", "translation": [0,3.0,0], "rotationAxis": [1, 0, 0], "rotationAngle": 0, "scale": [2, 6.2, 2], "color": [0.1, 0.4, 0.6, 1.0], "isDynamic": false, "isWall": true, "mapInvert": true, "mapThickness": 0.0, "mapResolution": [25,25,25] }, { "density": 20000, "geometryFile": "../models/Missile.obj", "translation": [0, 4.5, 0], "rotationAxis": [1, 0, 0], "rotationAngle": -1.57079632679, "scale": [1.0, 1.0, 1.0], "color": [0.8, 0.2, 0.2, 1.0], "isDynamic": true, "isWall": false, "mapInvert": false, "mapThickness": 0.0, "mapResolution": [150,150,150] } ], "FluidBlocks": [ { "denseMode": 0, "start": [-1, -0.2, -1], "end": [1, 4.0, 1] } ] }density0?Thanks!