Facilities Package

The facilities module contains the implementations of the facilities used in the fuel cycle. These include facilities for Mining and Milling, Shipping, Conversion, Enrichment, Fuel Fabrication, Reactors, and Storage. The facility modules implement the processes and storage for each facility, and the parameters of each facility are set by the fuel cycle configuration file.

Base Facility Module

class mints.facilities.base.SimulationFacility(name, env, indexer, **kwargs)

Bases: object

‘SimulationFacility’ is a base class for MINTs simulations to extend.

Raises:
  • NotImplementedError – Error is raised if the facility does not implement the required :py:meth:’dict_of_stores’ method

  • NotImplementedError – Error is reaise if the facility does not implement the required :py:meth:’initialize_process’ method

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

place_items(store, items)

Places the items in :var:’items’ into the MonitoredFilterStore store and updates the items arrival times to the current simulation time.

Parameters:
  • store (MonitoredFilterStore) – The MINTS/MonitoredFilterStore to place the items into.

  • items (list) – The items to be placed in the store.

Conversion Module

class mints.facilities.conversion.Conversion(name, env, indexer, in_material=<class 'mints.resources.UraniumDioxide'>, out_material=<class 'mints.resources.UraniumHexaFlouride'>, in_enrichment=None, out_enrichment=None, drum_weight_mean_kg=400, drum_weight_std_kg=0.1, drum_weight_dist=<bound method RandomState.normal of RandomState(MT19937)>, priority=1, shipping_max_inventory=30, **kwargs)

Bases: SimulationFacility

Conversion facility class received drums are placed in receiving store, drums are moved to the chemistry mba and then broken into isotopes in sepetate stores by material weight Isotopes are moved from the chemistry process to product. Converted drums are created from isotopes is in product stores stores but material weight in_material : Input material (mints.resources) to be converted out_material : Output material (mints.resources) to be shipped

receivingstore {MonitoredFilterStore} :Contains drums of {in_material} shipped from shipper chemistry_mab_drums {MonitoredFilterStore} :Contains drums of {in_material} moved from recieving to chemisrty (unopened) chem_mba_process {Dictionary}{‘Isotope’:MonitoredContainer} :Dictionary of containers for isotopes in process in chemistry MBA chem_mba_product {Dictionary}{‘Isotope’:MonitoredContainer} :Dictionary of container for isotopes finished converting and ready to be packaged

shippingstore {MonitoredFilterStore} :Contains drums of {out_material} ready to be shipped priority {int} : Facilities priority when ordering {in_material} from shipper

conversion_chemistry(conversion_max_drum_throughput=6, process_loss_distribution=<bound method RandomState.normal of RandomState(MT19937)>, process_loss_parameters=[0, 0], output_container_type='drum', input_container_type='drum', **kwargs)

Gets items {drums/cylinders} of in_material from recieving. Opens items and places respective isotopes in chemistry process stores. Moves isotopes from chemistry process stores to chemistry product stores. Fills items {drums/cylinders} with isotopes from chemistry product stores. max_drum_througput {int} :Maximum number of drums that can be filled in one timestep process_loss {float} : Process loss, (1+process_loss) material is taken from stores for each 1 material converted

conversion_receiving(shipper, receiving_drum_throughput=7, receiving_max_inventory=40, input_container_type='drum', **kwargs)

Orders in_material in (drums/cylinders) from shipper shipper {MonitoredFilterStore} : shipping store of the shipper drum_throughput {int} : Max number of drums to order each timestep max_inventory {int} : Max number of items {drums/cylinders} that can be stored in recieving

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

Enrichment Module

class mints.facilities.enrichment.Enrichment(name, env, indexer, priority=1, product_rate=36822, feed_material=<class 'mints.resources.UraniumHexaFlouride'>, feed_enrichment=None, product_material=<class 'mints.resources.UraniumHexaFlouride'>, product_enrichment=0.05, tail_material=<class 'mints.resources.UraniumHexaFlouride'>, tail_depletion=0.003, out_fill_weight_dist=<bound method RandomState.normal of RandomState(MT19937)>, **kwargs)

Bases: SimulationFacility

Enrichment facility class received containers of {in_material} are placed in receiving store, and then moved to the cascade_mba. Containers are opened and place in the cascade stores. Prodcut {product_material} and tails {tail_material} are moved from cascade stores to containers for shipping or storage

receivingstore {MonitoredFilterStore} :Contains containers of {in_material} shipped from shipper cascade_mba {MonitoredFilterStore} :Contains containers of {in_material} moved from recieving to the cascade mba (unopened) oxygenstore {MonitoredContainer} :Contains Oxygen(kg) represents the isope in process in the cascade u235store {MonitoredContainer} :Contains u235(kg) represents the isope in process in the cascade u238store {MonitoredContainer} :Contains u238(kg) represents the isope in process in the cascade cascade_feed_bulk {MonitoredContainer} :Contains bulk {in_material} to be fed into the cascade cascade_product_bulk {MonitoredContainer} :Contains bulk {product_material} to be moved into containers shippingstore {MonitoredFilterStore} :Contains containers of {product_material} for shipping priority {int}: Facilities priority when ordering {in_material} from {shipper} product_rate {float}: Max kg product to produce each timestep feed_material {mints.material}: Feed material for the cascade product_material {mints.material}: Product material produced from cascade tail_material {mints.material}: Tail material to remove from cascade

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

enrichment_cascade(cascade_max_drum_throughput=10, process_loss=0, input_container_type='cylinder40y', out_fill_weight_mean_kg=2277, out_fill_weight_std_kg=0.1, out_container='cylinder30b', **kwargs)

Gets isotopes from bulk stores and creates drums of output material by % weight of isotopes max_drum_througput {int} :Maximum number of drums that can be converted in one timestep process_loss {float} : Process loss, (1+process_loss) material is taken from stores for each 1 material converted

enrichment_receiving(shipper, receiving_drum_throughput=7, receiving_max_inventory=40, **kwargs)

Gets drums for shipper, put into receiving mba stores by isotope

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

Fuel Fabrication Module

class mints.facilities.fuel_fabrication.Fuel_Fab(name, env, indexer, pellet_batch_size=600, priority=1, **kwargs)

Bases: SimulationFacility

Facility for Fuel Fabrication: receives drums uo2 from shipper and manufactures pellets/rods/assemblies, assemblies are shipped from shipping store. receivingstore {MonitoredFilterStore} :Contains drums of {uo2} shipped from shipper powderstore {MonitoredContainer} :Contains {uo2} (kg) for pellet manufacuring pelletstore {MonitoredFilterStore} :Contains pellet batches for rod manufacturing rodtstore {MonitoredFilterStore} :Contains rods for rod manufacturing shippingstore {MonitoredFilterStore} :Contains completed assemblies for shipping throughput {int} :Max number of drums to order in each timestep (also max number of drums opened)

assembly_assembler(throughput_assemblies=112, rods_per_assembly=37, **kwargs)

Gets rods from rod store, fills assemblies with rods and places them in shippingstore

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

pellet_press(throughput_pellets=124320, pellet_press_input_material=<class 'mints.resources.UraniumDioxide'>, pellet_press_input_enrichment=None, pellet_weight_mean_kg=0.02, pellet_weight_std_kg=0.0005, pellet_powder_loss_distribution=<bound method RandomState.normal of RandomState(MT19937)>, pellet_powder_loss_parameters=[0, 0], **kwargs)

Pellet press gets bulk material from bulk store, then creates pellets(ITEM) and places them in the pellet store

receiving(shipper, receiving_drum_throughput=7, receiving_max_inventory=40, **kwargs)

Receiving process gets drums(not checked) from shipper, then opens drums and adds weight of material to bulk store

rod_fill(throughput_rods=4144, pellets_per_rod=30, **kwargs)

Rod fill gets pellets from pellet store, then fills rods with pellets and places them in the rod store

Reactors Module

class mints.facilities.reactors.LWR_Reactor(name, env, indexer, reactor_load_time=1, priority=1, **kwargs)

Bases: SimulationFacility

Reactor class has store for fresh fuel assemblies,spent fuel assembiles and the core receivingstore {MonitoredFilterStore} :Contains fuel assemblies shipped from shipper reactor_mba {MonitoredFilterStore} :Contains fuel assemblies moved from recieving to the loading area core_mba1 {MonitoredFilterStore} :Contains fuel assemblies in the reactors outermost zone core_mba2 {MonitoredContainer} :Contains fuel assemblies in the reactors core, moved from zone1 core_mba3 {MonitoredContainer} :Contains fuel assemblies in the reactors core, moved from zone2 priority {int}: Facilities priority when ordering {in_material} from {shipper} load_time {int}: Number of Weeks between reactor reloads feed_material {mints.material}: Feed material for the cascade

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

reactor_load(reload_batch_size=59, core_capacity=177, core_1_pu_pct=0.003, core_2_pu_pct=0.002, core_3_pu_pct=0.001, **kwargs)

Reactor load takes assemblies from receiving and places them in the reactor_mab_store. Once num_per_zone asseblies are availiable a loading opperation will load the assemblies into the core and shuffle assemblies in the core. If an assembly has been burned 3 times it is moved to spent fuel core_capacity {int}: Number of Assemblies in the core when full

reactor_receiving(shipper, receiving_assemblies_throughput=60, receiving_max_inventory=200, **kwargs)

Reactor receiving gets assemblies from shipper and places them in recieving store

class mints.facilities.reactors.PHWR_Reactor(name, env, indexer, load_time=1, priority=1, **kwargs)

Bases: SimulationFacility

Reactor class has store for fresh fuel assemblies,spent fuel assembiles and the core

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

initialize_processes(env, config, facilities)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

reactor_load(reload_batch_size=112, core_capacity=4560, depletion_pu_pct=0.0023, **kwargs)

Reactor load takes assemblies from fresh fuel store and places in core. If core is full an assebly is first removed (FIFO by default) All pellets in assembly are “transmuted” to spent fuel when removed from the core This is very CANDU and LWR will be very different Reactor “turns on” when 4560 asseblies are loaded

reactor_receiving(shipper, receiving_assemblies_throughput=112, receiving_max_inventory=300, **kwargs)

Reactor receiving gets assemblies from shipper and places them in fresh fuel store

Shipping and Receiving Module

class mints.facilities.shipping_receiving.Mat_shipper(name, env, indexer, priority=1, ship_material=<class 'mints.resources.UraniumHexaFlouride'>, ship_enrichment=None, **kwargs)

Bases: SimulationFacility

drum_fill(drum_throughput=7)

Makes containers of ship_material

class mints.facilities.shipping_receiving.Mine(name, env, indexer, **kwargs)

Bases: SimulationFacility

Uranium mine class name: name for the facility (ex. mine1) Contains shipping store for drums(U3O8) to be shipped

dict_of_stores()

Return a dictionary of stores used by facility

Raises:

NotImplementedError – _description_

Returns:

Stores / MBAs in facility

Return type:

dict

drum_fill(drum_throughput=7, drum_weight_mean_kg=400, drum_weight_std_kg=0.1, drum_weight_dist=<bound method RandomState.normal of RandomState(MT19937)>, out_material=<class 'mints.resources.TriuraniumOctoxide'>, **kwargs)

Uranium mine processes Creates Drums of UO2 and places them in the shippingstore throughput {int} : The number of drums to be place in the shipping store (mined) in each timestep

static drum_weight()
initialize_processes(env, config, facilities=None)

Initialize all simpy environment processes for this facility

Parameters:
  • env (Environment) – Simpy simulation environment

  • config (dict) – Dictionary of keyword parameters for facility and processes

  • facilities (dict) – Dictionary of other facilities in simulation

Utilities Module

mints.facilities.utils.get_UO2_concentration(material)
mints.facilities.utils.get_enrichment(isotope1, isotope1_weight, isotope2, isotope2_weight)
mints.facilities.utils.get_pu_concentration(material)
mints.facilities.utils.monitor_facility_inventory(env, facility)