Skip to content

Porous burner example#1443

Merged
ischoegl merged 6 commits intoCantera:mainfrom
g3bk47:PorousBurnerExample
Mar 20, 2023
Merged

Porous burner example#1443
ischoegl merged 6 commits intoCantera:mainfrom
g3bk47:PorousBurnerExample

Conversation

@g3bk47
Copy link
Copy Markdown
Contributor

@g3bk47 g3bk47 commented Feb 26, 2023

Hi all,
I really like the extensible reactor classes. However, I feel that they are more powerful than what the currently available examples show. Therefore, I would like to contribute another example which uses the extensible reactors to simulate reacting flows in porous media burners. The porous media burner in question has been experimentally investigated and the burner setup as well as the governing equations are described in a recent publication (https://doi.org/10.1016/j.combustflame.2023.112642).
Since the code in this example uses the real properties and submodels for the different burner sections, it is quite a bit longer than other examples available in Cantera. I already simplified the code a bit compared to the actual code available in the supplementary materials of the paper, but it is still quite involved. The example showcases:

  • how to add a temperature equation for a solid phase;
  • add submodels for heat transfer between gas and solid, radiation, solid heat conduction;
  • describe the burner with an arbitrary amount of reactors;
  • describe the burner with an arbitrary amount of sections filled with different porous materials;
  • create a reactor cascade without mass flow controllers or pressure valves by assuming steady-state conditions and constant pressure.

Let me know what you think of this example and if I should simplify/shorten it further.

T

Checklist

  • The pull request includes a clear description of this code change
  • Commit messages have short titles and reference relevant issues
  • Build passes (scons build & scons test) and unit tests address code coverage
  • Style & formatting of contributed code follows contributing guidelines
  • The pull request is ready for review

@codecov
Copy link
Copy Markdown

codecov bot commented Feb 26, 2023

Codecov Report

Merging #1443 (5cd73e6) into main (6392724) will decrease coverage by 0.99%.
The diff coverage is n/a.

❗ Current head 5cd73e6 differs from pull request most recent head 0db9139. Consider uploading reports for the commit 0db9139 to get more accurate results

@@            Coverage Diff             @@
##             main    #1443      +/-   ##
==========================================
- Coverage   70.91%   69.92%   -0.99%     
==========================================
  Files         369      377       +8     
  Lines       55232    57262    +2030     
  Branches    18196    19151     +955     
==========================================
+ Hits        39168    40043     +875     
- Misses      13602    14669    +1067     
- Partials     2462     2550      +88     

see 257 files with indirect coverage changes

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@ischoegl ischoegl self-assigned this Feb 26, 2023
@ischoegl ischoegl self-requested a review February 26, 2023 17:18
@ischoegl ischoegl removed their assignment Feb 26, 2023
Copy link
Copy Markdown
Member

@speth speth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for providing this example, @g3bk47. I definitely agree that capabilities of the ExtensibleReactor classes are not fully explored in the existing examples. Your use case here isn't something I anticipated, but I'm glad to see that you were able to use it effectively.

While this is somewhat longer than other examples, I think that's completely fine, and this is a really nice example of building a "device scale" model on top of Cantera without being too complex.

AUTHORS Outdated
Su Sun (@ssun30), Northeastern University
Sergey Torokhov (@band-a-prend)
Laurien Vandewalle (@lavdwall)
Guillaume Vignat, Stanford University
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If Guillaume has a GitHub account, can you (a) add their account name here like it is for others?

Also, please amend the commit message for the commit that adds the example to contain a line formatted like:

Co-authored-by: Guillaume Vignat <[email protected]>

@g3bk47 g3bk47 force-pushed the PorousBurnerExample branch from 6921266 to 9f73650 Compare March 20, 2023 18:43
@g3bk47
Copy link
Copy Markdown
Contributor Author

g3bk47 commented Mar 20, 2023

Hi Ray, thanks for the review! I think I incorporated all of your comments with the latest commit.

Copy link
Copy Markdown
Member

@ischoegl ischoegl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @g3bk47 ... thanks for contributing a nice example based on ExtensibleReactor.

I believe that details of the implementation are in good hands (@speth already commented).

From my perspective, I wanted to make sure that the example description includes a disclaimer clearly stating limitations of the model. Porous burners are intrinsically 1D; while it is certainly legitimate to simplify for some applications (e.g. coarse approximations of temperatures or predictions of emissions), a reactor cascade has inherent limitations that will not capture the full range of behaviors. At the same time the example will capture excess enthalpy creating superadiabatic conditions that promote combustion beyond conventional flammability limits and/or at rates that are significantly higher than adiabatic flame speeds.

The most interesting aspect of two-section burners is that they possess the ability to stabilize flames for a broad range of inlet mass fluxes due to internal heat recirculation across the interface: stabilization is accomplished by mismatched matrix properties, where the downstream section by itself promotes flash-back while the upstream section by itself promotes blow-off. The stabilization mechanism is based on solid conduction / radiation, where implementation details are extremely relevant if one wants to predict flashback or blow-off behavior. It is unrealistic to capture these physics with a coarsely refined 0D approach (or disabling reactions).

In a nutshell, the model is certainly ok for illustration purposes, but will not necessarily have predictive qualities when it comes to conditions that can be realized in experiments. Thus, it is prudent to clearly point out these limitations to avoid misleading conclusions by users

@g3bk47
Copy link
Copy Markdown
Contributor Author

g3bk47 commented Mar 20, 2023

Hi @ischoegl,
Thanks for your comments! I added clarifications about the limitations of this simple model and included references for the heat conductivity of the solids.

ischoegl
ischoegl previously approved these changes Mar 20, 2023
Copy link
Copy Markdown
Member

@ischoegl ischoegl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@g3bk47 ... thanks for the prompt updates!

Copy link
Copy Markdown
Member

@speth speth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates, @g3bk47. I think this looks good. I just pushed an update to squash a couple of the typo-fix commits together. We can merge as soon as the CI finishes.

@ischoegl ischoegl merged commit 243fac5 into Cantera:main Mar 20, 2023
@HadiEbrahimiHaratameh
Copy link
Copy Markdown

Hi @g3bk47 ... thanks for contributing a nice example based on ExtensibleReactor.

I believe that details of the implementation are in good hands (@speth already commented).

From my perspective, I wanted to make sure that the example description includes a disclaimer clearly stating limitations of the model. Porous burners are intrinsically 1D; while it is certainly legitimate to simplify for some applications (e.g. coarse approximations of temperatures or predictions of emissions), a reactor cascade has inherent limitations that will not capture the full range of behaviors. At the same time the example will capture excess enthalpy creating superadiabatic conditions that promote combustion beyond conventional flammability limits and/or at rates that are significantly higher than adiabatic flame speeds.

The most interesting aspect of two-section burners is that they possess the ability to stabilize flames for a broad range of inlet mass fluxes due to internal heat recirculation across the interface: stabilization is accomplished by mismatched matrix properties, where the downstream section by itself promotes flash-back while the upstream section by itself promotes blow-off. The stabilization mechanism is based on solid conduction / radiation, where implementation details are extremely relevant if one wants to predict flashback or blow-off behavior. It is unrealistic to capture these physics with a coarsely refined 0D approach (or disabling reactions).

In a nutshell, the model is certainly ok for illustration purposes, but will not necessarily have predictive qualities when it comes to conditions that can be realized in experiments. Thus, it is prudent to clearly point out these limitations to avoid misleading conclusions by users

Hi,
I Thank @g3bk47 and @speth for the code and comments on it.
I think we should apply the Porous including adding the energy equation for the solid in 1D rather than 0D.
If the class ExtensibleReactor could be extended for 1D reactor model (e.g. PFR), the network of the reactors such a way that a network of the PFR reactors are used, the results may be more realistic,
Thank you
Hadi

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.

4 participants