jax_sn.operator_creation.builders module¶
Builders: a derivation graph per operator kind.
Two axes. The operator axis is this file’s class ladder – each rung adds the primitives that
operator is built from (its strategy, its angle, its energy group) and the quantities that follow.
The storage axis is generated: .varying(...) / .freezing(...) on any rung returns a class
storing everything the named primitives do not determine (see jax_sn.tools.parametrisation).
Which tier an operator needs is visible in its registry rather than declared: only the rungs whose
operator actually sweeps carry sweep_data and mark it NON_DIFFERENTIABLE. The others build
their narrow data type directly, so there is no sweep to skip and no placeholder to invent.
- class TopologyBuild(etoe: Array, etof: Array, face_perm_idx: Array)[source]¶
Bases:
Module- etoe: Array¶
- etof: Array¶
- face_perm_idx: Array¶
- face_normals(vertices: Array, connectivity: Array, face_template: Array)[source]¶
- Return type:
Array
- geometric_domain(vertices: Array, connectivity: Array, face_normals: Array, topology_build: TopologyBuild, face_template: Array)[source]¶
- Return type:
- domain(geometric_domain: GeometricDomain, cross_sections_indexed: CrossSectionsIndexed)[source]¶
- Return type:
- precomputed_geometric_data(element: Element, geometric_domain: GeometricDomain)[source]¶
- Return type:
- spatial_data(domain: Domain, fem_matrices: FEMMatrices, precomputed_geometric_data: PrecomputedGeometricData, element: Element)[source]¶
- Return type:
- solution_domain(spatial_data: SpatialData)[source]¶
- Return type:
- angular_data(quadrature_set: QuadratureSetBase, cross_sections_indexed: CrossSectionsIndexed)[source]¶
- Return type:
- discretisation_data(spatial_data: SpatialData, angular_data: AngularData)[source]¶
- Return type:
- non_differentiable_data(geometric_domain: GeometricDomain, quadrature_set: QuadratureSetBase, strategy: MultiGroupStrategy)[source]¶
- Return type:
- sweep_data(non_differentiable_data: NonDifferentiableData)[source]¶
- Return type:
- operator_data(discretisation_data: DiscretisationData, non_differentiable_data: NonDifferentiableData)[source]¶
- Return type:
- multi_group_operator(operator_data: OperatorData, strategy: MultiGroupStrategy)[source]¶
- Return type:
- single_group_data(operator_data: OperatorData, energy_group: int)[source]¶
- Return type:
- single_group_operator(single_group_data: SingleGroupData, strategy: SingleGroupStrategy)[source]¶
- Return type:
- single_group_chain_operator(single_group_data: SingleGroupData, strategy: SingleGroupChainStrategy)[source]¶
- Return type:
- single_group_source_operator(single_group_data: SingleGroupData, strategy: SingleGroupSourceStrategy)[source]¶
- Return type:
- mass_data(fem_matrices: FEMMatrices, precomputed_geometric_data: PrecomputedGeometricData)[source]¶
- Return type:
- mass_operator(mass_data: MassData, additional_shape: Tuple[int, ...], strategy: MassStrategy)[source]¶
- Return type:
- moment_data(angular_data: AngularData)[source]¶
- Return type:
- moment_operator(moment_data: MomentData, spatial_data: SpatialData, strategy: FluxMomentStrategy)[source]¶
- Return type:
- discrete_data(angular_data: AngularData)[source]¶
- Return type:
- discrete_operator(discrete_data: DiscreteData, spatial_data: SpatialData, strategy: FluxMomentStrategy)[source]¶
- Return type:
- scatter_data(energy_group_out: int, energy_group_in: int, cross_sections_indexed: CrossSectionsIndexed)[source]¶
- Return type:
- scatter_operator(scatter_data: ScatterData, strategy: ScatterStrategy, spatial_data: SpatialData, angular_data: AngularData)[source]¶
- Return type:
- transport_sweep_data(geometric_domain: GeometricDomain, angle: Array, inversion_strategy: Union[SingleAngleInversionStrategy, MultiAngleInversionStrategy])[source]¶
- Return type:
- transport_data(spatial_data: SpatialData, energy_group: int, angle: Array, sweep_data: SweepData)[source]¶
- Return type:
- single_angle_transport_operator(transport_data: TransportData, forward_strategy: SingleAngleForwardStrategy, inversion_strategy: SingleAngleInversionStrategy)[source]¶
- Return type:
- multi_angle_transport_operator(transport_data: TransportData, forward_strategy: MultiAngleForwardStrategy, inversion_strategy: MultiAngleInversionStrategy)[source]¶
- Return type:
- class SpatialBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed)[source]¶
Bases:
ParametrisedModuleThe problem’s spatial description: a mesh, an element and its materials.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- vertices: Array¶
- connectivity: Array¶
- cross_sections_indexed: CrossSectionsIndexed¶
- classmethod from_solution_domain(solution_domain: SolutionDomain, **primitives: Any)[source]¶
Recover a builder from an already-built
SolutionDomain. Nothing is recomputed: the solution domain is stored whole and the spatial tier is projected back out.primitivessupplies whatever else the rung needs (a quadrature set, a strategy, an angle, …).- Return type:
- class DiscretisationBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase)[source]¶
Bases:
SpatialBuilderThe spatial description plus an angular discretisation.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'angular_data': {'cross_sections_indexed': <function DiscretisationBuilder.<lambda>>}}¶
- quadrature_set: QuadratureSetBase¶
- class SweptBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase)[source]¶
Bases:
DiscretisationBuilderThe rungs whose operator sweeps, and therefore carry the combinatorial tier.
strategybuilds the tier itself (build_default_non_differentiable_data()), so a builder cannot disagree with the operator it builds, and a strategy that comes to need more of that tier than a sweep ordering – or a knob to build it with – changes nothing here. The tier is marked non-differentiable on the registry rather than inside the derivation, so it holds on the stored and projected paths too.- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- NON_DIFFERENTIABLE: ClassVar[FrozenSet[str]] = frozenset({'non_differentiable_data', 'sweep_data'})¶
- RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'angular_data': {'cross_sections_indexed': <function DiscretisationBuilder.<lambda>>}, 'non_differentiable_data': {'strategy': <function SweptBuilder.<lambda>>}}¶
- class MultiGroupBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: MultiGroupStrategy)[source]¶
Bases:
SweptBuilderThe full multigroup operator \(I - M T^{-1} H D S\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'multi_group_operator': <function multi_group_operator>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'multi_group_operator': <function MultiGroupBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: MultiGroupStrategy¶
- class SingleGroupBuilderBase(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int)[source]¶
Bases:
SweptBuilderOne energy group.
energy_groupis a primitive, so a per-group loop can hold the sort: the group index touches neither the geometry nor the angles it was built from.The three flavours below are three different operators, so they are three rungs rather than one that dispatches on the strategy.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- energy_group: int¶
- class SingleGroupBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupStrategy)[source]¶
Bases:
SingleGroupBuilderBaseThe full single-group operator \(I - M T^{-1} H D S_{gg}\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'single_group_operator': <function single_group_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_operator': <function SingleGroupBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: SingleGroupStrategy¶
- class SingleGroupChainBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupChainStrategy)[source]¶
Bases:
SingleGroupBuilderBaseThe chain operator \(M T^{-1} H D\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_chain_operator': <function single_group_chain_operator>, 'single_group_data': <function single_group_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_chain_operator': <function SingleGroupChainBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: SingleGroupChainStrategy¶
- class SingleGroupSourceBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, energy_group: int, strategy: SingleGroupSourceStrategy)[source]¶
Bases:
SingleGroupBuilderBaseThe source operator \(M T^{-1} H\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'non_differentiable_data': <function non_differentiable_data>, 'operator_data': <function operator_data>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'single_group_data': <function single_group_data>, 'single_group_source_operator': <function single_group_source_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function sweep_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discretisation_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'non_differentiable_data': {'operator_data': <function SweptBuilder.<lambda>>}, 'operator_data': {'single_group_data': <function SingleGroupBuilderBase.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'single_group_data': {'single_group_source_operator': <function SingleGroupSourceBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'sweep_data': {'non_differentiable_data': <function SweptBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: SingleGroupSourceStrategy¶
- class MassBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, strategy: MassStrategy, additional_shape: Tuple[int, ...])[source]¶
Bases:
SpatialBuilderThe mass operator. Needs no angular discretisation, so it hangs off the spatial spine.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'mass_data': <function mass_data>, 'mass_operator': <function mass_operator>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'mass_data': {'mass_operator': <function MassBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: MassStrategy¶
- additional_shape: Tuple[int, ...]¶
- class MomentBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: FluxMomentStrategy)[source]¶
Bases:
DiscretisationBuilderThe discrete-to-moment operator \(M\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'moment_data': <function moment_data>, 'moment_operator': <function moment_operator>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'moment_data': {'moment_operator': <function MomentBuilder.<lambda>>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: FluxMomentStrategy¶
- class DiscreteBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: FluxMomentStrategy)[source]¶
Bases:
DiscretisationBuilderThe moment-to-discrete operator \(D\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discrete_data': <function discrete_data>, 'discrete_operator': <function discrete_operator>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'discrete_data': {'discrete_operator': <function DiscreteBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: FluxMomentStrategy¶
- class ScatterBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, quadrature_set: QuadratureSetBase, strategy: ScatterStrategy, energy_group_out: int, energy_group_in: int)[source]¶
Bases:
DiscretisationBuilderThe group-to-group scatter \(S_{\tilde{g}g}\).
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'angular_data': <function angular_data>, 'discretisation_data': <function discretisation_data>, 'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'scatter_data': <function scatter_data>, 'scatter_operator': <function scatter_operator>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'topology_build': <function topology_build>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'angular_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>}, 'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'scatter_data': {'scatter_operator': <function ScatterBuilder.<lambda>>}, 'spatial_data': {'discretisation_data': <function DiscretisationBuilder.<lambda>>, 'solution_domain': <function SpatialBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- strategy: ScatterStrategy¶
- energy_group_out: int¶
- energy_group_in: int¶
- class TransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int)[source]¶
Bases:
SpatialBuilderShared base for the transport rungs: no quadrature set, since the sort is for
angle.Single- and multi-angle are separate rungs rather than one that dispatches on
angle.ndim: they are different operators, and separating them turns the shape/strategy compatibility checks into__check_init__invariants that re-fire on every update.- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}}¶
- NON_DIFFERENTIABLE: ClassVar[FrozenSet[str]] = frozenset({'sweep_data'})¶
- RETAINED_UNDER: ClassVar[Mapping[str, Mapping[str, Callable[[Any, Any], bool]]]] = {'sweep_data': {'inversion_strategy': <function TransportBuilder.<lambda>>}}¶
- angle: Array¶
- energy_group: int¶
- class SingleAngleTransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int, forward_strategy: SingleAngleForwardStrategy, inversion_strategy: SingleAngleInversionStrategy)[source]¶
Bases:
TransportBuilderTransport for one direction.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>, 'transport_operator': <function single_angle_transport_operator>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}, 'transport_data': {'transport_operator': <function SingleAngleTransportBuilder.<lambda>>}}¶
- forward_strategy: SingleAngleForwardStrategy¶
- inversion_strategy: SingleAngleInversionStrategy¶
- class MultiAngleTransportBuilder(vertices: Array, connectivity: Array, element: Element, cross_sections_indexed: CrossSectionsIndexed, angle: Array, energy_group: int, forward_strategy: MultiAngleForwardStrategy, inversion_strategy: MultiAngleInversionStrategy)[source]¶
Bases:
TransportBuilderTransport batched over the angle axis.
- DERIVATIONS: ClassVar[Mapping[str, Callable]] = {'domain': <function domain>, 'face_normals': <function face_normals>, 'face_template': <function face_template>, 'fem_matrices': <function fem_matrices>, 'geometric_domain': <function geometric_domain>, 'precomputed_geometric_data': <function precomputed_geometric_data>, 'solution_domain': <function solution_domain>, 'spatial_data': <function spatial_data>, 'sweep_data': <function transport_sweep_data>, 'topology_build': <function topology_build>, 'transport_data': <function transport_data>, 'transport_operator': <function multi_angle_transport_operator>}¶
- PROJECTIONS: ClassVar[Mapping[str, Mapping[str, Callable]]] = {'domain': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'face_normals': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'face_template': {'geometric_domain': <function SpatialBuilder.<lambda>>}, 'fem_matrices': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'geometric_domain': {'domain': <function _geometric_domain_of>}, 'precomputed_geometric_data': {'spatial_data': <function SpatialBuilder.<lambda>>}, 'spatial_data': {'solution_domain': <function SpatialBuilder.<lambda>>, 'transport_data': <function TransportBuilder.<lambda>>}, 'sweep_data': {'transport_data': <function TransportBuilder.<lambda>>}, 'topology_build': {'geometric_domain': <function _topology_build_of>}, 'transport_data': {'transport_operator': <function MultiAngleTransportBuilder.<lambda>>}}¶
- forward_strategy: MultiAngleForwardStrategy¶
- inversion_strategy: MultiAngleInversionStrategy¶