Summary
The immersed-boundary force that MFC reports (D/ib<id>_forces.dat, and the force/torque in the IB state files)
is computed as a volume integral of -grad p + div tau over the cells marked as body, in s_compute_ib_forces.
For a thin plate inclined to the mesh, the streamwise component of that integral is wrong by an order of
magnitude, and can come out with the wrong sign. The transverse component is fine.
Evidence
Case: rectangular flat plate, aspect ratio 4, pitching about its leading edge from 0 to 45 degrees on the
AIAA canonical smoothed ramp (K = pi/8), Re_c = 300, Ma 0.2, half span with a symmetry plane at the root,
WENO5 + HLLC, fd_order = 4.
A plate held at 45 degrees carries a force essentially normal to its surface, so C_D / C_L should be about 1.
It is, at the instant the rotation stops, and then the streamwise component collapses while the transverse one
holds:
| time after ramp start |
C_D/C_L, 2 cells across the section |
4 cells across |
| 1.0 (ramp end) |
1.10 |
1.04 |
| 2.0 |
0.15 |
0.11 |
| 4.0 |
-0.22 |
0.10 |
A negative drag on a plate at 45 degrees is not physically possible.
Cross-checked with a control-volume momentum balance over a box enclosing the body,
F = closed integral over S of ( -p n + tau.n - rho u (u.n) ) dS - d/dt of the momentum inside S
evaluated entirely on grid planes away from the body, so it does not depend on the IB reconstruction. On a
static cylinder at Re 40 this balance returns C_D = 1.534 to 1.540 against the published 1.540 (Canuto & Taira
2015), insensitive to box size, so it is trustworthy. On the pitching plate, at times where the unsteady term is
small:
| resolution |
t |
C_D from ib_forces |
C_D from the control volume |
C_L from ib_forces |
C_L from the control volume |
| 4 cells across |
5.00 |
0.12 |
1.04 |
1.02 |
0.95 |
| 2 cells across |
7.08 |
-0.22 |
0.85 |
0.86 |
0.87 |
| 2 cells across |
8.33 |
-0.22 |
1.13 |
0.92 |
0.71 |
So the flow is approximately right and the reported streamwise force is not. Refining from 2 to 4 cells across
the section removes the negative sign but leaves the magnitude an order of magnitude low.
What I think is going on
I have not pinned the mechanism, so treat this as a report rather than a diagnosis. The volume integral equals
the surface traction only if the field inside the body is a smooth extension of the wall state. For a body a few
cells thick, every interior cell is a ghost point whose image point is reflected across the nearest surface, and
the fd_order = 4 stencil used in the integral reaches two cells beyond the body on both sides. My guess is
that the telescoping that should leave a surface term is incomplete in the direction across which the body is
thin, and at incidence that direction has a streamwise projection.
Things ruled out along the way: the wing root sitting on the symmetry plane (extending the plate through the
plane changed nothing), domain blockage (a wider domain moved results the other way), and grid resolution alone
(the error survives a 2x refinement).
Why it matters
Thin lifting surfaces are a natural use of the IB, and the force is usually the quantity of interest. Anyone
computing drag or thrust on a plate, wing or flapping surface with the current diagnostic will get a number that
looks plausible and is wrong.
Reproducer
examples/3D_ibm_pitchup_plate (added in #1847) at its default settings; the C_D/C_L ratio after the ramp is
the tell, and needs no reference data to see.
Summary
The immersed-boundary force that MFC reports (
D/ib<id>_forces.dat, and the force/torque in the IB state files)is computed as a volume integral of
-grad p + div tauover the cells marked as body, ins_compute_ib_forces.For a thin plate inclined to the mesh, the streamwise component of that integral is wrong by an order of
magnitude, and can come out with the wrong sign. The transverse component is fine.
Evidence
Case: rectangular flat plate, aspect ratio 4, pitching about its leading edge from 0 to 45 degrees on the
AIAA canonical smoothed ramp (K = pi/8), Re_c = 300, Ma 0.2, half span with a symmetry plane at the root,
WENO5 + HLLC,
fd_order = 4.A plate held at 45 degrees carries a force essentially normal to its surface, so
C_D / C_Lshould be about 1.It is, at the instant the rotation stops, and then the streamwise component collapses while the transverse one
holds:
A negative drag on a plate at 45 degrees is not physically possible.
Cross-checked with a control-volume momentum balance over a box enclosing the body,
evaluated entirely on grid planes away from the body, so it does not depend on the IB reconstruction. On a
static cylinder at Re 40 this balance returns C_D = 1.534 to 1.540 against the published 1.540 (Canuto & Taira
2015), insensitive to box size, so it is trustworthy. On the pitching plate, at times where the unsteady term is
small:
ib_forcesib_forcesSo the flow is approximately right and the reported streamwise force is not. Refining from 2 to 4 cells across
the section removes the negative sign but leaves the magnitude an order of magnitude low.
What I think is going on
I have not pinned the mechanism, so treat this as a report rather than a diagnosis. The volume integral equals
the surface traction only if the field inside the body is a smooth extension of the wall state. For a body a few
cells thick, every interior cell is a ghost point whose image point is reflected across the nearest surface, and
the
fd_order = 4stencil used in the integral reaches two cells beyond the body on both sides. My guess isthat the telescoping that should leave a surface term is incomplete in the direction across which the body is
thin, and at incidence that direction has a streamwise projection.
Things ruled out along the way: the wing root sitting on the symmetry plane (extending the plate through the
plane changed nothing), domain blockage (a wider domain moved results the other way), and grid resolution alone
(the error survives a 2x refinement).
Why it matters
Thin lifting surfaces are a natural use of the IB, and the force is usually the quantity of interest. Anyone
computing drag or thrust on a plate, wing or flapping surface with the current diagnostic will get a number that
looks plausible and is wrong.
Reproducer
examples/3D_ibm_pitchup_plate(added in #1847) at its default settings; theC_D/C_Lratio after the ramp isthe tell, and needs no reference data to see.