Uranium enrichment via centrifuge

Replacing the extractor-based system, uranium to be used as reactor fuel
must now be enriched in stages using the centrifuge.  Uranium metal can
exist at 36 levels of fissile content, from 0.0% to 3.5% in steps of 0.1%.
One round of centrifuging splits two dust of a particular grade in to one
dust each of the two neighbouring grades.  Uranium of each grade can exist
as dust, ingot, and block, with all the regular metal processes to convert
between them.  Uranium from ore exists in lump form, and is 0.7% fissle.
The blocks are radioactive to a degree dependent on fissile content.
Thus the chemical refinement and processing of uranium now follows the
standard pattern for metals, and is orthogonal to isotopic enrichment.
Each form of uranium (dust, ingot, block) intentionally looks identical
regardless of fissile grade.

If technic_worldgen is used alone, it defines only one grade of uranium
(as before), but defines it in the regular metal pattern, with lump, ingot
produced by cooking lump, and block crafted from ingots.  It identifies
the metal only as "uranium".  The multiple grades of uranium are defined
by the technic mod, which identifies each grade as "N.N%-fissile
uranium".  The single grade that was registered by technic_worldgen
is redefined to be described specifically as "0.7%-fissile uranium".
For the redefinition to work, technic_worldgen must load before technic,
so technic now declares a dependency on technic_worldgen.

Each fuel rod is made from five 3.5%-fissile ingots, each of which in
turn requires one to start with five 0.7%-fissile dust, so each fuel rod
is now derived from 12.5 uranium lumps (or 25 if the lumps were first
cooked rather than being ground).  This replaces the 20 lumps required
by the former recipes.  After setting up and priming the centrifuge
cascade, enriching a full set of fuel for the reactor (six fuel rods)
takes 14700 centrifuge operations.  It's intended to be a practical
necessity to automate the centrifuge.  In the absence of EU upgrades
for the centrifuges, these operations consume 5.88e8 EU, about 0.97%
of the 6.048e10 EU that the fuel set will produce in the reactor.
The intent is that, in this respect as in others, operating a reactor
should carry a very high up-front cost, but ultimately be very profitable.
This commit is contained in:
Zefram 2014-07-27 02:48:08 +01:00
parent d60e3fe939
commit b0faa70873
21 changed files with 125 additions and 18 deletions

View File

@ -1,5 +1,6 @@
default
pipeworks
technic_worldgen
bucket?
mesecons_mvps?
intllib?

View File

@ -11,11 +11,6 @@ minetest.register_craftitem( "technic:doped_silicon_wafer", {
inventory_image = "technic_doped_silicon_wafer.png",
})
minetest.register_craftitem("technic:enriched_uranium", {
description = S("Enriched Uranium"),
inventory_image = "technic_enriched_uranium.png",
})
minetest.register_craftitem("technic:uranium_fuel", {
description = S("Uranium Fuel"),
inventory_image = "technic_uranium_fuel.png",
@ -163,3 +158,37 @@ minetest.register_node("technic:machine_casing", {
tiles = {"technic_machine_casing.png"},
sounds = default.node_sound_stone_defaults(),
})
for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p
local ingot = "technic:uranium"..psuffix.."_ingot"
local block = "technic:uranium"..psuffix.."_block"
local ov = p == 7 and minetest.override_item or nil;
(ov or minetest.register_craftitem)(ingot, {
description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10),
inventory_image = "technic_uranium_ingot.png",
groups = {uranium_ingot=1, not_in_creative_inventory=nici},
});
(ov or minetest.register_node)(block, {
description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10),
tiles = {"technic_uranium_block.png"},
is_ground_content = true,
groups = {uranium_block=1, not_in_creative_inventory=nici, cracky=1, level=2, radioactive=math.floor(math.sqrt(p) + 0.5)},
sounds = default.node_sound_stone_defaults(),
});
if not ov then
minetest.register_craft({
output = block,
recipe = {
{ingot, ingot, ingot},
{ingot, ingot, ingot},
{ingot, ingot, ingot},
},
})
minetest.register_craft({
output = ingot.." 9",
recipe = {{block}},
})
end
end

View File

@ -29,6 +29,7 @@ technic.legacy_nodenames = {
["technic:generator"] = "technic:lv_generator",
["technic:generator_active"] = "technic:lv_generator_active",
["technic:iron_dust"] = "technic:wrought_iron_dust",
["technic:enriched_uranium"] = "technic:uranium35_ingot",
}
for old, new in pairs(technic.legacy_nodenames) do

View File

@ -29,6 +29,8 @@ Graphite = Graphit
Carbon Cloth = Kohlefasergewebe
Raw Latex = Rohlatex
Rubber Fiber = Gummifaser
%.1f%%-Fissile Uranium Ingot =
%.1f%%-Fissile Uranium Block =
## Machine misc
Machine cannot be removed because it is not empty = Die Maschine kann nicht entfernt werden, weil sie noch nicht leer ist.
@ -162,6 +164,7 @@ Talinite = Talinite
Tin = Zinn
Wrought Iron = Schmiedeeisen
Zinc = Zink
%.1f%%-Fissile Uranium =
## Tools
RE Battery = Akkubatterie

View File

@ -29,6 +29,8 @@ Graphite = Grafito
Carbon Cloth = Tela de Carbon
Raw Latex = Latex Crudo
Rubber Fiber = Fibra de Hule
%.1f%%-Fissile Uranium Ingot =
%.1f%%-Fissile Uranium Block =
## Machine misc
Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia
@ -152,6 +154,7 @@ Talinite = Talinita
Tin = Estanio
Wrought Iron = Hierro Forjado
Zinc = Zinc
%.1f%%-Fissile Uranium =
## Tools
RE Battery =

View File

@ -26,6 +26,8 @@ Graphite = Lastra in graffite
Carbon Cloth = Fibra di carbonio
Raw Latex = Latex grezzo
Rubber Fiber = Fibra di gomma
%.1f%%-Fissile Uranium Ingot =
%.1f%%-Fissile Uranium Block =
## Machine misc
Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota
@ -159,6 +161,7 @@ Talinite = Talinite
Tin = Stagno
Wrought Iron = Ferro Battuto
Zinc = Zinco
%.1f%%-Fissile Uranium =
## Tools
RE Battery =

View File

@ -29,6 +29,8 @@ Graphite =
Carbon Cloth =
Raw Latex =
Rubber Fiber =
%.1f%%-Fissile Uranium Ingot =
%.1f%%-Fissile Uranium Block =
## Machine misc
Machine cannot be removed because it is not empty =
@ -167,6 +169,7 @@ Talinite =
Tin =
Wrought Iron =
Zinc =
%.1f%%-Fissile Uranium =
## Tools
RE Battery =

View File

@ -493,7 +493,6 @@ local default_radiation_resistance_per_node = {
["technic:mineral_uranium"] = 71,
["technic:mineral_zinc"] = 19,
["technic:stainless_steel_block"] = 40,
["technic:uranium_block"] = 500,
["technic:zinc_block"] = 36,
["tnt:tnt"] = 11,
["tnt:tnt_burning"] = 11,
@ -501,6 +500,7 @@ local default_radiation_resistance_per_node = {
local default_radiation_resistance_per_group = {
concrete = 16,
tree = 3.4,
uranium_block = 500,
wood = 1.7,
}
local cache_radiation_resistance = {}

View File

@ -20,6 +20,21 @@ local recipes = {
{ "moretrees:rubber_tree_trunk", rubber_tree_planks.." 4", "technic:raw_latex" },
}
-- Refining uranium via centrifuge is intended to make it a practical
-- necessity to set up an automated cascade of centrifuges. Once the
-- cascade has been primed, production of one 3.5%-fissile dust requires
-- input of five 0.7%-fissile dust and 490 centrifuge operations, and
-- produces four 0.0%-fissile dust as a byproduct. The busiest stage
-- of the cascade is the one taking 0.7%-fissile dust, which performs 28
-- of the 490 operations. The least busy is the one taking 3.4%-fissile
-- dust, which performs 1 of the 490 operations.
local function uranium_dust(p)
return "technic:uranium"..(p == 7 and "" or p).."_dust"
end
for p = 1, 34 do
table.insert(recipes, { uranium_dust(p).." 2", uranium_dust(p-1), uranium_dust(p+1) })
end
if minetest.get_modpath("bushes_classic") then
for _, berry in ipairs({ "blackberry", "blueberry", "gooseberry", "raspberry", "strawberry" }) do
table.insert(recipes, { "bushes:"..berry.."_bush", "default:stick 20", "bushes:"..berry.." 4" })

View File

@ -15,7 +15,7 @@ local recipes = {
{"default:copper_ingot 5", "technic:copper_plate"},
{"technic:coal_dust 4", "technic:graphite"},
{"technic:carbon_cloth", "technic:carbon_plate"},
{"technic:enriched_uranium 4", "technic:uranium_fuel"},
{"technic:uranium35_ingot 5", "technic:uranium_fuel"},
}
for _, data in pairs(recipes) do

View File

@ -24,9 +24,6 @@ local recipes = {
{"technic:raw_latex", "technic:rubber 3"},
{"moretrees:rubber_tree_trunk_empty", "technic:rubber"},
{"moretrees:rubber_tree_trunk", "technic:rubber"},
-- Other
{"technic:uranium 5", "technic:enriched_uranium"},
}
for _, data in pairs(recipes) do

View File

@ -16,6 +16,7 @@ local recipes = {
{"default:gold_lump", "technic:gold_dust 2"},
{"default:iron_lump", "technic:wrought_iron_dust 2"},
{"technic:chromium_lump", "technic:chromium_dust 2"},
{"technic:uranium_lump", "technic:uranium_dust 2"},
{"technic:zinc_lump", "technic:zinc_dust 2"},
-- Other
@ -87,6 +88,41 @@ if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
register_dust("Talinite", "glooptest:talinite_ingot")
end
for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p
local ingot = "technic:uranium"..psuffix.."_ingot"
local dust = "technic:uranium"..psuffix.."_dust"
minetest.register_craftitem(dust, {
description = S("%s Dust"):format(string.format(S("%.1f%%-Fissile Uranium"), p/10)),
inventory_image = "technic_uranium_dust.png",
on_place_on_ground = minetest.craftitem_place_item,
groups = {uranium_dust=1, not_in_creative_inventory=nici},
})
minetest.register_craft({
type = "cooking",
recipe = dust,
output = ingot,
})
technic.register_grinder_recipe({ input = {ingot}, output = dust })
end
local function uranium_dust(p)
return "technic:uranium"..(p == 7 and "" or p).."_dust"
end
for pa = 0, 34 do
for pb = pa+1, 35 do
local pc = (pa+pb)/2
if pc == math.floor(pc) then
minetest.register_craft({
type = "shapeless",
recipe = { uranium_dust(pa), uranium_dust(pb) },
output = uranium_dust(pc).." 2",
})
end
end
end
minetest.register_craft({
type = "fuel",
recipe = "technic:coal_dust",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,11 +1,19 @@
local S = technic.worldgen.gettext
minetest.register_craftitem(":technic:uranium", {
description = S("Uranium"),
inventory_image = "technic_uranium.png",
minetest.register_craftitem(":technic:uranium_lump", {
description = S("Uranium Lump"),
inventory_image = "technic_uranium_lump.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_alias("technic:uranium", "technic:uranium_lump")
minetest.register_craftitem(":technic:uranium_ingot", {
description = S("Uranium Ingot"),
inventory_image = "technic_uranium_ingot.png",
on_place_on_ground = minetest.craftitem_place_item,
groups = {uranium_ingot=1},
})
minetest.register_craftitem(":technic:chromium_lump", {
description = S("Chromium Lump"),
@ -74,7 +82,7 @@ local function register_block(block, ingot)
})
end
register_block("technic:uranium_block", "technic:uranium")
register_block("technic:uranium_block", "technic:uranium_ingot")
register_block("technic:chromium_block", "technic:chromium_ingot")
register_block("technic:zinc_block", "technic:zinc_ingot")
register_block("technic:brass_block", "technic:brass_ingot")
@ -94,6 +102,12 @@ minetest.register_craft({
output = "technic:chromium_ingot",
})
minetest.register_craft({
type = 'cooking',
recipe = "technic:uranium_lump",
output = "technic:uranium_ingot",
})
minetest.register_craft({
type = 'cooking',
recipe = minetest.registered_aliases["technic:wrought_iron_ingot"],

View File

@ -3,7 +3,8 @@
# by Xanthin
## crafts.lua
Uranium = Uran
Uranium Lump = Uranklumpen
Uranium Ingot = Uranbarren
Chromium Lump = Chromklumpen
Chromium Ingot = Chrombarren
Zinc Lump = Zinkklumpen

View File

@ -2,7 +2,8 @@
# technic_worldgen translation template
###crafts.lua
Uranium =
Uranium Lump =
Uranium Ingot =
Chromium Lump =
Chromium Ingot =
Zinc Lump =

View File

@ -7,7 +7,7 @@ minetest.register_node( ":technic:mineral_uranium", {
is_ground_content = true,
groups = {cracky=3, radioactive=1},
sounds = default.node_sound_stone_defaults(),
drop = 'craft "technic:uranium" 1',
drop = 'craft "technic:uranium_lump" 1',
})
minetest.register_node( ":technic:mineral_chromium", {
@ -56,7 +56,7 @@ minetest.register_node(":technic:uranium_block", {
description = S("Uranium Block"),
tiles = { "technic_uranium_block.png" },
is_ground_content = true,
groups = {cracky=1, level=2, radioactive=3},
groups = {uranium_block=1, cracky=1, level=2, radioactive=3},
sounds = default.node_sound_stone_defaults()
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

View File

Before

Width:  |  Height:  |  Size: 352 B

After

Width:  |  Height:  |  Size: 352 B