Particle balance constraint updated#4395
Conversation
…ng to be used to solve the fuelling and burnup equations
…riton, needed to know the indvidual fuel production and removal rates
…ude the equations for main fuel species flow and thermal alpha flow
…PlasmaFuelling model
…Physics class run workflow
…euterium, helium-3, and alpha particles
… for the burnup and fuelling rate now being calculated implicitly
…to previous functions and tests
…ass. Add details for some fusion reactions also
…ay in summary file
j-a-foster
left a comment
There was a problem hiding this comment.
Just a couple of notes, otherwise happy with the changes.
| f"Plasma power: {mfile.get('p_plasma_alpha_mw', scan=scan):.4f} MW\n" | ||
| f"Beam power: {mfile.get('p_beam_alpha_mw', scan=scan):.4f} MW\n\n" | ||
| f"Rate density total: {mfile.get('fusden_alpha_total', scan=scan):.4e} particles/m$^3$/sec\n" | ||
| f"Rate density, plasma: {mfile.get('fusden_plasma_alpha', scan=scan):.4e} particles/m$^3$/sec\n\n" |
There was a problem hiding this comment.
Why are these /sec and not /s?
| linewidths=2, | ||
| ) | ||
|
|
||
| # Plot star for mfile values |
There was a problem hiding this comment.
Is it worth adding a note or legend that explains what the star means in the PDF?
jonmaddock
left a comment
There was a problem hiding this comment.
- Please sort out the PR description: I think it's too verbose and misses/buries the key point which is that you're introducing constraints to enforce density equilibrium of individual ion species. Why are you making this PR?
- Have you removed the original
molflow_plasma_fuelling_requiredas an output? I might have missed that - I counted 6 new optimisation parameters and 5 new constraints: as per our conversation, can you describe how this might work in solution mode, i.e. when we require a determined system?
- Some plots to demonstrate these changes would be useful: for example how the constraints are accommodated with increasing te or ne, for example. How does this change the current large tokamak solution?
- Please don't rebase until the PR is approved, so we can track comments
- How does this compare to the existing burnup calculation? Has it been removed?
- The created docs were excellent
- I'd like this PR to include what equations and parameters should be included in optimisation and solution scenarios. If the solution system is under-determined, how useful is it?
- I'm not sure about the fuelling composition constraint and total fuelling rate. Would individual species rates reduce the dimensionality?
- Should the recycling fraction and fuelling efficiency be optimisation parameters? (I realise we've discussed this, but I think it should be made clear why these can be used to solve the constraints).
Thanks for the fixed-up commits, this was much easier to review.
|
|
||
|
|
||
| class PlasmaFuelling(Model): | ||
| """Class to hold plasma fuelling calculations for plasma processing.""" |
There was a problem hiding this comment.
Plasma processing? Could you be a bit more descriptive here?
| Returns | ||
| ------- | ||
| float | ||
| Alpha particle flow rate in the plasma exhaust (particles/s). |
There was a problem hiding this comment.
Isn't this the wrong way around? It's the flow rate into the plasma (for a positive returned value), not the exhaust?
| nd_plasma_alphas_vol_avg: float, | ||
| vol_plasma: float, | ||
| ) -> float: | ||
| """Calculate the alpha particle flow rate in the plasma exhaust. |
There was a problem hiding this comment.
Shouldn't these be in the exhaust model?
There was a problem hiding this comment.
The comment has been ammended, since it works the exact same as the other fuel models and returns the source rate, I think it is best to leave it with the group.
|
|
||
| self.data.physics.fusrat_dt_total = ( | ||
| self.data.physics.p_dt_total_mw * 1e6 / (constants.D_T_ENERGY) | ||
| ) |
There was a problem hiding this comment.
Are all of these not already calculated elsewhere?
There was a problem hiding this comment.
No, I had to add them. We have values for the powers but all of the actual rates were done in situ before. There is changes to the fusion power summary page which I will add to the PR overview also
|
|
||
| Notes | ||
| ----- | ||
| The fusion rate is multiplied by two to convert from nucleus pairs to particles, |
There was a problem hiding this comment.
Not multiplied by 2 here.
| * data.physics.vol_plasma | ||
| * data.physics.f_plasma_fuel_helium3 | ||
| ) / ( | ||
| data.physics.t_energy_confinement |
There was a problem hiding this comment.
Does He3 follow the energy confinement time rather than the tau_alpha / tau_E = 5 relation?
There was a problem hiding this comment.
This is a point we should discuss, I dont see why we wouldn't treat it the same as 4He
| \tau_{\alpha} = f_{\alpha}\tau_{\text{E}}\frac{R}{1-R}\tau_{\text{ne}} | ||
| $$ | ||
|
|
||
| This is the model currently in METIS[^2] and is found in [^3] |
There was a problem hiding this comment.
But this isn't used in Process?
|
|
||
| -------------- | ||
|
|
||
| ### Tritium Flow Rate | `calculate_plasma_tritium_flow_rate()` |
There was a problem hiding this comment.
Not sure about "flow rate": it's the density derivative in the plasma.
There was a problem hiding this comment.
I left it as flow rate as the functions returns the net particle flow in the plasma, so not necessarily the density
| f_{\text{fuelling,D}} + f_{\text{fuelling,T}} + f_{\text{fuelling,3He}} = 1.0 | ||
| $$ | ||
|
|
||
| **It is recommended to have this constraint on as it is a plasma consistency model** |
There was a problem hiding this comment.
I think you need to be more explicit about the system of equations (i.e. all of the above constraints) and the solution parameters (i.e. optimisation parameters) used to solve them. What's should the user do to enforce all of these constraints in their optimisation problem?
| ) | ||
|
|
||
| plot_fuelling_info(pages["fuelling"], m_file, scan) | ||
|
|
There was a problem hiding this comment.
Can I see these plots in the PR please?
|
@timothy-nunn If I try and use the functions in |
This pull request introduces a comprehensive plasma fuelling model to the codebase, including new physical variables, input parameters, constraints, and documentation. The main focus is to enable detailed particle balance and burnup fraction calculations for deuterium, tritium, and helium-3 in the plasma, and to ensure consistency through new constraint equations. Several new variables and iteration parameters are added to support these models, and the documentation is expanded to explain the physical basis and equations.
Key changes:
1. Plasma fuelling and particle balance model:
plasma_fuelling.md). This includes explanations of fuelling efficiency, recycling, and burnup fractions.PhysicsDatafor burnup fractions and detailed fusion reaction rates, enabling more granular tracking of fuel species and reactions.2. New input and iteration variables:
input.pyfor fuelling efficiency, injected fuel rates, and fuelling fractions for each species.3. Particle balance and consistency constraints:
constraints.pyto enforce particle balance for tritium, deuterium, helium-3, alpha particles, and to ensure fuelling fractions sum to unity. These constraints help maintain physical consistency in the plasma model.4. Documentation and navigation updates:
mkdocs.yml, making the new model easily accessible in the documentation site.5. Miscellaneous improvements:
scan.py.These changes collectively provide a robust framework for modeling plasma fuelling, tracking individual fuel species, and ensuring physical consistency in fusion plasma simulations.
🎨 Output additions
Expanded and added more values for rates to the fusion reaction summary page:

Added a fuelling summary page that shows the contour graphs of the fuelling solutions, along with burnup data:
Checklist
I confirm that I have completed the following checks: