Skip to content

Make Cylinder jet actuation zero-net-mass-flux - #362

Open
NopeCharon wants to merge 1 commit into
dynamicslab:mainfrom
NopeCharon:fix/cylinder-znmf-jets
Open

NopeCharon wants to merge 1 commit into
dynamicslab:mainfrom
NopeCharon:fix/cylinder-znmf-jets

Conversation

@NopeCharon

Copy link
Copy Markdown
Contributor

Closes #360

Cylinder.cyl_velocity_field added the upper and lower jet profiles with the same sign. (x, y) points out of the cylinder at both jets, so a positive control blew through both of them and a negative control sucked through both. The actuation was symmetric and put net mass into the flow, not the zero-net-mass-flux blowing/suction from Rabault et al. that #141 set out to add.

Changes

  • The lower jet profile is now subtracted (A_up - A_lo). A positive control blows through the upper jet and sucks through the lower jet at the same flow rate.
  • New test_jet_zero_net_mass_flux in test/test_cyl.py: for unit control the upper jet has to blow, and the fluxes through the two jets have to cancel.
  • The docstring, the generated API page and docs/docs/examples/firedrake/cylinder.md now say the jets have zero net mass flux. The example page also called the jets "tangential", but they're normal to the wall.

Validation

All runs used the firedrakeproject/firedrake-vanilla-default container.

  • Flux through each jet for unit control (medium mesh): main gives +1.0033 / +1.0033, so the net flux is 2.0. With this PR it's +1.0033 / -1.0033, with a relative imbalance of 2e-16 (9e-16 on the fine mesh).
  • Steady Newton solve at Re = 40 (medium mesh):
CL CD
u = 0 0.00003 1.789
u = 0.1, main 0.00031 2.050
u = 0.1, this PR -1.272 1.732
  • test_jet_zero_net_mass_flux fails on main and passes with this change. test_integrate[1], test_integrate[3], test_env and test_control also pass.
  • test_steady, test_steady_rotation, test_linearize and test_act_implicit_no_damp fail the same way on main and on this branch: the Newton solve doesn't converge, and test_steady_rotation gets the wrong CL. This PR doesn't touch them.
  • ruff check, ruff format --check, isort --check-only and codespell pass.

The jet actuation of the Firedrake Cylinder environment was introduced
as zero-net-mass-flux (ZNMF) blowing/suction following Rabault et al.,
where the two jets satisfy Q1 + Q2 = 0. However, cyl_velocity_field
summed the upper and lower jet profiles with the same sign. Since the
radial vector (x, y) points out of the cylinder at both jets, a
positive control blew through both jets and a negative control sucked
through both. The actuation was symmetric about the centreline, injected
net mass and had no authority over lift: a steady Re=40 solve at the
maximum control u=0.1 gave CL=0.0003 and raised CD from 1.789 to 2.050.

Subtract the lower jet profile instead, so a positive control blows
through the upper jet and sucks through the lower jet with equal flow
rate. The same steady solve now gives CL=-1.272 and CD=1.732.

Add test_jet_zero_net_mass_flux, which checks that the upper jet blows
for a positive control and that the flux through the two jets cancels.
Document the ZNMF pairing in the docstring, the generated API page and
the cylinder example page, which also called the jets "tangential"
although they are normal to the wall.

Closes dynamicslab#360

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Cylinder jet actuation is not zero-net-mass-flux

1 participant