# Nuclear Fission Reactor Design
## Inspiration
- Minecraft IC2 Reactor
- Rimatomics reactor
## Random notes
- plasma as an exciting medium, as in neutron multiplier when used in the cooling loop
- alternatively, plasma as a neutron accelerator - that'd be weird and neat
- ice "fuel" rod that eats neutrons, cools the reactor down, then melts - enable through matsci properties rather than doing directly
## Basic Principles
- Slots for fuel rod/control rod/heat exchangers/cooling channels - matsci properties for each
- Fuel rods emit neutrons at a rate determined by matsci properties
- Fuel rods hit by a neutron heat up and release more neutrons
- heat exchangers equalise temperature with surrounding components
- cooling channels exchange heat with the gas being pumped through
- control rods asborb neutrons based on matsci + how much they're inserted
- Material morphing over time? Look into alloys, probably some good code to poke at there
- Gas cooling loop into a turbine to generate power
- material refinement (ie, centrifuge)?
- console for coolant flow, control rods
- neutron reflector components (some fucker is gonna make a fission bomb)
## Style
![](https://i.imgur.com/kVkeG6t.png)
![](https://i.imgur.com/R9z4PNz.png)
## Actual Coding Considerations
- TGUI for component placement in the reactor
- Base icon + overlays for each component slot
- Look at TEG code for hooking onto pipe grids and doing heat exchange
- Find a good algo for grid interactions, for the actual fission simulation
- Look at the TEG burn computer for graphs + stuff, we're gonna need an info dump screen for the turbo nerds
- pre-calculated ray tracing for neutrons?
### Turbine
- Energy determined by speed/load
- Load is configurable by user
- Speed is proportional to pressure of the medium
- delta-T of the medium should be proportional to energy
- max turbine speed
- failure mode? maybe spun too fast for too long? Turbine failure = no cooling = overheat reactor = boom
- Pipes will have upper limit on pressure as well, don't forget
### Reactor Class
#### Component grid
- matrix of /obj/item/reactor/component
#### Process()
- move gas in/out of gas components
- simulate component grid neutrons
- simulate component grid heat
- handle alerts (oh god shit's on fire PDA messages for everyone)
### Reactor/Component
#### processGas(inGas)
return inGas //most components won't touch gas
#### processNeutrons(inNeutrons)
return outNeutrons
#### processHeat(touchingComponents = [])
do heat exchange here? or in sim code?
return newheat?
### Reactor/Component/GasChannel
#### processGas(inGas)
outgas = src.currentgas
src.currentgas = ingas
heat exchange with self and current gas
return outgas
### Reactor/Component/FuelRod
basically will act like any other mat based component, but with more mass?