Open ntouran opened 1 year ago
@drewj-usnctech Just FYI.
@ntouran, I think there is a challenge associated with parameter definitions and assignments of a composite tree like this, at least in the context of how we are doing things. I think that every Assemblies and Blocks aren't really all that special, just that we have associates them in a certain way and then applied methods on those classes to make them special. If anything, the assembly and blocks are just short cuts that we take to associate the composites within together for fuel management and some axial "mesh" for Neutronics related calculations.
It would be interesting to me if we were to look at what it would mean to get rid of blocks and move to a mesh-based system for parameter storage.
I have a hard time knowing what we mean by an arbitrarily deep tree if we don't consider also rethinking assemblies and blocks. Also, will number density calculations start taking a very long time if we have like 4+ layers of composites? We might need to get a bit fancier with caching again?
😍
I put a lot of my thoughts on some possible extension classes in https://github.com/terrapower/armi/discussions/960
I think there is merit to having the Composites
be semi-physically grounded (e.g., an Assembly contains Blocks axially stacked together) because Monte Carlo codes modeling the full Reactor state need to know where things are. Another way of putting this, I don't think adding a free Component
to an Assembly
is a good move: where does that Component
live in the reactor?
Blocks are kind of a mix of 0-D to 2-D collections of components already depending on how you view the geometry
will number density calculations start taking a very long time if we have like 4+ layers of composites?
probably? This could be an opportunity to look at distributing the composite tree navigation in parallel with threading, multiprocesing, or something extra. The number density of one component in a block doesn't depend on it's neighbor so they could be done in parallel
Bump. This is still super important.
Perhaps I need to pin this as High Priority for the next release.
Right now we have a sort-of hybrid Composite design pattern for the reactor data model, with the following players:
ArmiObject
is the official pattern'sComponent
(sorry, we have a naming conflict here)Composite
is the pattern'sComposite
(yay)Component
is the pattern'sLeaf
Things that could be improved:
Leaf
class is the parent ofComponent
andMaterial
. This should be cleaned up so that there's justComponent
and it' only used forComponent
. (this is #1007)Component
s andComposite
s to any parentComposite
arbitrarily.Assembly
andBlock
are specialComposites
. This is sort of ok but shouldn't be forced.But for this ticket, let's just focus on the 2nd bullet: Allow deeper nesting of components and composites within composites.
This will support #477.