Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve continuation methods for flamelets #4

Open
4 tasks
michael-a-hansen opened this issue Mar 18, 2020 · 2 comments
Open
4 tasks

Improve continuation methods for flamelets #4

michael-a-hansen opened this issue Mar 18, 2020 · 2 comments
Labels
enhancement New feature or request
Milestone

Comments

@michael-a-hansen
Copy link
Collaborator

  • Add arc-length continuation to support S-curve calculations and progress variable tabulation for flamelets

  • Add automatic estimation (to chosen precision) of adiabatic flamelet extinction limits. This will likely be a bisection approach and/or a PI controller approach.

  • Implement automatic continuation with various homotopy maps, considering both global and local variants. These should support a tabulation API where only points of interest are provided by the user and spitfire automatically does continuation optimally behind the scenes, followed by interpolation onto points of interest and refinement

  • Improve calculation of the SLFM flamelet solution for the first nonzero dissipation rate. We currently use the equilibrium or Burke-Schumann solution as the initial guess, which leads to slow convergence and needs the GESAT pseudo-transient continuation method that doesn't scale particularly well for mechanisms with more than 150-200 species. This ultimately means that we spend 25-50% of the time building an adiabatic SLFM library in the first solve. It's possible that convex homotopies could improve performance or at least provide another alternative to GESAT that may outperform it on extremely large mechanisms.

@michael-a-hansen michael-a-hansen added the enhancement New feature or request label Mar 18, 2020
@michael-a-hansen michael-a-hansen modified the milestones: v1.1, v2.0 Mar 18, 2020
@michael-a-hansen michael-a-hansen changed the title Improve continuation methods for reactors and flamelets Improve continuation methods for flamelets Mar 21, 2021
@gpavanb1
Copy link

Hi Michael,

Great work. I've written an arc-length continuation based on Spitfire at this link

@michael-a-hansen
Copy link
Collaborator Author

@gpavanb1 that's great, thank you for showing me. I'm always happy to see somebody new using Spitfire, please don't hesitate to let me know if you would like to see any changes or have any ideas.

Something you could look into for your code is using Spitfire's BTDDOD ("Block TriDiagonal with Diagonal Off-Diagonal blocks") linear solver. It is hand-coded in C++ with LAPACK for block factorizations and is significantly faster than SuperLU or any other sparse solvers in SciPy and you shouldn't have to do any work to get the Jacobian in the right form. It is the default linear solver and provides factorization and back-solve steps (which Spitfire splits as much as possible but with pacopy's interface you probably just have to always do both at once).

I'll definitely look into using pacopy with Spitfire. I've delved into continuation methods enough to make progress but just haven't had time to add all the methods I'm curious about. In case you're curious here's a SIAM article on the GESAT method in Spitfire (minus a correction for flamelets) which has mostly found use here for initializing a flamelet series. It is exceptionally robust but scales poorly for very large mechanisms (you can really feel it being slow with the full Cal Tech mech, about 200 species). My first hope for pacopy would be that it would provide something that can initialize the low-dissipation point on the extinction branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants