-
Notifications
You must be signed in to change notification settings - Fork 525
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
Design of the MicroXS
and IndependentOperator
classes
#2580
Comments
Thanks for starting this @paulromano! I think if we look at the highest level and go from there the thought process might be something like this:
I guess when I start thinking about it a bit more I wonder if we need to add an |
Being able to easily compare with inventory codes that don't handle transport like would be really helpful. I'm often asked to compared code outputs and was actually thinking of comparing with ALARA as it is open source. I guess it is double the work but would it be worth fleshing out both approaches as skeleton PRs in case we discover any performance or usability benefits of one approach over the other. |
Thanks for starting an in-depth conversation about this @paulromano! My thoughts on this are pretty in-line with @eepeterson's on this. It would be very convenient to have our In my head, this would mean that the loop from option 2 above would exist inside the As @eepeterson said, an additional step might be to separate burnup matrices from the operators fo for each domain. I'm curious as to whether or not we would be able to "stack" those to perform the Bateman solve more efficiently than repeated calls. In this case, it would be nice to be able to detect when we can avoid duplication of these matrices (i.e. when doing cell-based depletion with cells containing the same material). A good deal of that is probably me just rephrasing previous thoughts as I understand them 😄 but let me know if I'm missing the mark here. |
Responding to @shimwell:
I don't think it's going to be double the work. It just requires careful thought about the normalization of the multigroup flux being passed to the operator and similarly the source rate passed to the integrator. Clearly in the case where you just have a flux spectrum (absolute units) and you want to activate a material, the source rate will not just be [neutrons/sec] anymore. So, either we need very good documentation and/or some helper functions/classes to ease the burden. Responding to @pshriwise:
In fact, Thanks all for the (very prompt) feedback! I agree with the points and it sounds like we're converging around the idea of |
Hopefully I'm not too late on this @paulromano. To answer your question
I think option 1 is more in line with the design goals we initially had for In response to the additonal discussion, I have some additional points for consideration in the context of how
|
A transport simulation would be needed, because you need to know the relative fluxes in each domain based on the source rate. This can easily be streamlined by just extending I'm planning on breaking down the work as follows:
Question for whoever would like to review my PRs related to this — normally I like to break things up into PRs that are as small as possible, but in this case, successive PRs will keep changing the APIs which might be annoying. Would people prefer that I group all the API-changing behavior into a single PR? |
I'd be happy to review this and would say yes to putting it in a single PR. When doing a large refactor it's easier for me to see all the API changes and how they work together in one spot even if it is a big change set. |
I'm currently working on refactoring the
MicroXS
andIndependentOperator
classes to support a wider variety of use cases. Namely, theMicroXS
class currently stores one-group microscopic cross sections that are to be paired with one-group fluxes. For our FES shutdown dose rate project, we need the ability to do activation calculations using a multigroup flux spectrum / cross sections. Furthermore, theMicroXS
andIndependentOperator
class are not currently structured to support multiple materials very well (you can have multiple materials inIndependentOperator
but only a singleMicroXS
).As I'm envisioning a refactor of these two classes, one issue I'm having trouble resolving in my mind is how to handle multiple materials. For example, I can imagine something like the following
The main issue is: how do we specify the source rates for multiple materials? The options are:
fluxes
to the independent operator corresponding to a unity source rate, and then all the reaction rates would be scaled accordingly.Option 2 is arguably closer to how codes like FISPACT work. The multigroup flux provided to the operator has arbitrary units and everything is normalized to the total flux in [n/cm²-s]. Option 1 feels syntactically cleaner and more consistent with
CoupledOperator
, but it does imply that the units onfluxes
matter.Anyone have thoughts on this? @eepeterson @shimwell @yardasol @pshriwise
The text was updated successfully, but these errors were encountered: