Compressible Navier-Stokes equations

Dear all,

I am looking for an or more examples of FreeFEM codes for solving the complete time-dependent compressible Navier-Stokes equations.

Many thanks.

Regards.

I suggest you look around in the Stabfem library.

An example is Third derivative - #4 by fb77 but it does not handle shocks.

You can also see some examples in ff-bifbox. These examples can all be time integrated with adaptive remeshing using the tdnscompute.edp routine. These use a simple first-order fully implicit solver, so they are relatively stable but not optimized for efficient time stepping.
See examples/fani_etal_2018 for a compressible nonreacting flow case and examples/brokof_etal_2024 for a reacting compressible flow case. You may also be interested in the weakly compressible (low Mach) reacting flow case at examples/douglas_etal_2023.

Thank all of you, Aszaboa, François Bouchut and Chris, for the nice and kind information! It is really helpful.

It seems to me that in all the Stabfem and ff-bifbox libraries, the considered equations are always linear (linearized compressible NS around some particular steady flows) thus focusing on wave emission and stability studies.

The tdnscompute.edp routine (time-domain nonlinear simulation) is fully nonlinear. I believe StabFEM has nonlinear timestepping capabilities as well. You are correct though that these tools are not really optimized for time integration.

Hi, Chris. Thanks for your nice suggestions!
I see the compressible flow examples in ff-bifbox, which helps me a lot. The case of /fani_etal_2018 is simple and I have also calculated this case within stabfem before. But somewhere in the case of /brokof_etal_2024 seems strange to me.
In examples/brokof_etal_2024/eqns_brokof_etal_2024.idp, I find the residual part for momentum equation in line 70 is defined as:

  • -ubrho*ugradu(ub, ub, v) - div(v)*ubp …

I think it might be:

  • -ubrho*ugradu(ub, ub, v) + div(v)*ubp …

but I am not sure whether it is related to the boundary condition for BCin and BCout:

  • int1d(Th, BCin, BCout)( (vp + vdotu(v, ub))* ubrho *ndotu(ub) - ndotgraduT(v, ub)/params[“Re”] )

I think the first term comes from the continuity equation and the last term comes from the viscous term in momentum equation, but I could not figure out where the second term comes from.

  • vdotu(v, ub))* ubrho *ndotu(ub)

Thansk again ~

I’m sorry for the early message, I made a foolish mistake :sweat:.
I didn’t notice that the definition of convection term is different in two scripts. The convection term is integrated by parts as well in examples/brokof_etal_2024/eqns_brokof_etal_2024.idp but not in /fani_etal_2018, which I failed to observe earlier. And I am no longer confused about this .
Thank you again for your work.

1 Like

Hi there, glad to hear you found them helpful! Yes, the integration by parts is a key difference; you are exactly right. The BCs in the brokof_etal_2024 case are based on acoustic characteristics that appear in the boundary integrals for the mass and momentum flux terms. This is detailed in a PROCI paper that will come out next month. Let me know if you have any further questions!

1 Like