Fluid equation of state with density floor#359
Conversation
Consistently treat internal energy as Nlim * T, so that advection of thermal energy takes into account the density floor. Appears to reduce artefacts where the density falls below the floor.
Improve handling of low density regions by defining the fluid internal energy as Nlim * T. Modifies the pressure equation.
The internal energy of a fluid is modified to be Nlim * T. This changes the pressure equation to be consistent with the application of a density floor.
|
@bendudson this is awesome. Looking at What about flooring pressure itself? I see that now it's only flooring the density. I raised an issue to put clang-format in the CI: #360 |
|
Hey @mikekryjak . Thanks! The solver now evolves a modified internal energy |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #359 +/- ##
==========================================
+ Coverage 48.54% 48.59% +0.04%
==========================================
Files 96 96
Lines 9842 9836 -6
Branches 1435 1431 -4
==========================================
+ Hits 4778 4780 +2
+ Misses 4574 4566 -8
Partials 490 490 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Perpendicular advection of NV uses Nlim, consistent with parallel advection.
|
@bendudson am I right in thinking that this PR will have no effect if no floor is crossed? |
|
Hey @mikekryjak ! I think that's right, though the |
| * Div_a_Grad_perp_flows(DnnPn, logPnlim, ef_adv_perp_xlow, ef_adv_perp_ylow); | ||
| ddt(Pn) += (5. / 3) | ||
| * Div_a_Grad_perp_flows(Dnn * e_plus_p, logPnlim, ef_adv_perp_xlow, | ||
| ef_adv_perp_ylow); |
There was a problem hiding this comment.
Hi @bendudson
Maybe I am misunderstanding something, but isn't the 5/3 already included in basically e_plus_p? That was my understanding why it is not present in the parallel advection anymore.
There was a problem hiding this comment.
Thanks, @totork ! Yes I think you are right: e_plus_p is (5/3) * P so the leading factor should be removed
Fixing issue noted by @totork. e_plus_p includes the factor of 5/3 because it is p + 2/3 * p.
A relatively simple fix that seems to greatly help reduce unphysical behavior near density floors.
Defines the internal energy E as E = Cv * Nlim * T rather than the usual Cv * N * T. This effectively puts a floor on the heat capacity of the fluid. Then solve the pressure equation consistent with this equation of state.
Changes made to pressure equations in
evolve_pressure,neutral_mixedandneutral_full_velocity. Unfortunately I ran clang-format on the files so the changes seem numerous. The actual change is quite small: In the pressure advection replace(5/3)PwithNlim * T + (2/3) * P.This is an example from the midplane of a DIII-D simulation using
neutral_full_velocity. The density floor is 1e-5, and previously produced quite unphysical behavior.