前言

部分模组有对热现象的处理,例如通用机械(Mekanism,以下简称Mek)、气动工艺沉浸工程。但由于Forge没有规范的热传导逻辑,不同模组对热现象的处理不尽相同。本文介绍1.16.X版本Mek对于热现象的处理,旨在帮助玩家解决诸如裂变/聚变反应堆设计、热力蒸馏塔加热功率、热导线缆热量损耗等问题。

预备知识与说明

单位

  1. 时间单位。Minecraft游戏中对游戏逻辑的最小处理时间间隔为0.05秒(second,以下简称s),被称为游戏刻(tick,以下简称t)。因此本文大多数时候使用t作为时间单位。1t = 1/20s。

  2. 能量单位。Mek的默认能量单位为焦耳(Joule,以下简称J)。它与其它模组的能量单位换算为 1EU = 2AE = 4RF = 10J = 4FE。同时,过大或过小的数值会自动切换单位[Mekanism/src/main/java/mekanism/common/util/UnitDisplayUtils.java 215-288]:1,000fJ = 1pJ;1,000pJ = 1nJ; 1,000nJ = 1μJ; 1,000μJ = 1mJ; 1,000mJ = 1J; 1,000J = 1kJ; 1,000kJ = 1MJ; 1,000MJ = 1GJ; 1,000GJ = 1TJ; 1,000TJ = 1PJ; 1,000PJ = 1EJ; 1,000EJ = 1ZJ; 1,000ZJ = 1YJ。不只是能量,其它的大小数也会换算单位。

  3. 热量单位。Mek的默认热量单位为J。

  4. 温度单位。Mek的代码默认温度单位为开尔文(Kelvin,以下简称K)。它与摄氏度(Celsius,以下简称℃)、兰氏度(Rakine,以下简称R)、华氏度(Fahrenheit,以下简称℉)、环境温标(以下简称+STP)的换算关系如下[Mekanism/src/main/java/mekanism/common/util/UnitDisplayUtils.java 153-177]:

    单位零点偏移缩放比例
    273.151
    R01.8
    459.671.8
    +STP3001

    当某一温标下的温度T1要转化为开尔文温标(热力学温标)下的温度T2时,使用公式 T2 = (T1 + 零点偏移)/缩放比例;反之,当开尔文温标下的温度T2要转化为某一温标下的温度T1时,使用公式 T1 = T2*缩放比例 - 零点偏移

  5. 体积单位。Minecraft中每一个方格为标准的边长为1米(meter,以下简称m)的立方体。因此Mek中的体积单位取m^3。

  6. 流体量单位。Minecraft中的流体主要以方块形式或者以桶装形式存在。但1桶作为单位太大,因此Mek中使用毫桶(mili-bucket,以下简称mB)作为流体的量的单位。这也意味着1桶(bucket,以下简称B) = 1,000mB。

说明

  1. Minecraft中的坐标为三维坐标(x, y, z),其中x坐标正方向向东,y坐标正方向向上,z坐标正方向向南。

  2. 本文中会经常参考代码中的内容。在需要参考的地方后会用中括号标注参考的代码文档以及行号范围。

  3. 由于大小数切换单位的倍率为1,000,本文的大数使用千位分隔符,即每隔3位加一个逗号以示区分。例如数字123456789.9876写作123,456,789.9876。

  4. 本文中的公式用绿色文字标注,机器热处理逻辑用蓝色文字标注,未验证内容用红色文字标注。

  5. 由于本文内容繁多,想要快速查找感兴趣的内容可以使用浏览器的查找功能,大多数浏览器默认快捷键"Ctrl + F"。

热传递基础

Mek中参与热传递的基本单元为热容器(heat capacitor)[Mekanism/src/main/java/mekanism/common/capabilities/heat/BasicHeatCapacitor.java],它有几个主要参数:

  • 热容(heat capacity),升高热容器单位温度所需的热量,相当于比热容*质量,决定了热容器升温的快慢和储存热量的能力。高热容的热容器在相同温度时能储存多的热量,接收相同热量时升温更慢。

  • 逆传导系数(inverse conduction coefficient,以下简称热导),决定了换热速度,体现在环境散热和与相邻热容器换热的过程中。

  • 逆绝热系数(inverse insulation coefficient,以下简称热阻),决定了散热速度,只体现在环境散热过程中。

  • 热量(heat),即热容器储存的热量,更准确地应该称为内能。

  • 温度(temperature),等于热量/热容。

对于多个热容器[Mekanism/src/api/java/mekanism/api/heat/ISideHeatHandler.java],其总热容等于所有单个热容器的热容之和;总热导[Mekanism/src/api/java/mekanism/api/heat/IMekanismHeatHandler.java 105-116]等于所有单个热容器的热导依据热容加权平均;总热阻等于所有单个热容器的热阻依据热容加权平均;总温度等于所有单个热容器的温度依据热容加热平均;传递热量时每个热容器依据热容权重参与换热。

一个具有处理热的能力的方块/结构可能有一个至多个热容器。热容器对方块的六个面开放,开放面的热容器将会参与环境换热。但热容器并非对方块的所有面可用。一个简单的判定方法是在这个面放置一个热导线缆,若线缆能自动连接则热容器对这个面可用。仅对这个面可用的热容器会参与与这个面相邻的热容器换热。

热容器每t会执行两种换热:

  1. 环境换热(environment transfer)[Mekanism/src/main/java/mekanism/common/capabilities/heat/ITileHeatHandler.java 49-64]

    对于方块的每个面,读取对这个面开放的热容器。计算

    逆传导 = 空气热导[Mekanism/src/api/java/mekanism/api/heat/HeatAPI.java 22](常量10,000) + 总热阻 + 总热导

    温度散失(单位:K) = (总温度 - 环境温度[Mekanism/src/api/java/mekanism/api/heat/HeatAPI.java 18](默认常量300))/逆传导

    热容器热量散失(单位:J) = 温度散失*总热容

    举例:一个500K的电阻型加热器(含有一个对所有面开放的,热容100,热导5,热阻100的热容器)的每个面的逆传导 = 10,000 + 100 + 5 = 10,105;温度散失 = (500 - 300)/10,105 = 0.01979K;热量散失 = 0.01979*100 = 1.979J。6个面总温度散失 = 6*0.01979 = 0.1187K;总热量散失 = 6*1.979 = 11.87J。以上计算假定环境温度为默认300K。

    由公式可看出,热阻和热导共同影响着环境散热。热阻和热导越高,环境散热就越小。另一不同寻常的地方是温度散失与温差成正比,而不是热量散失与温差成正比。因此高热容不一定是好事,它可能会加速热量流失。

    仅当计算面的温度散失为正(即热容器温度高于这个面的环境温度)时,温度散失会被计入GUI的“散失”当中。

  2. 邻近换热(adjacent transfer)[Mekanism/src/main/java/mekanism/common/capabilities/heat/ITileHeatHandler.java 66-103]

    对于方块的每个面,读取对这个面可用的热容器,并读取相邻方块对该面可用的热容器(暂且称之为邻热容器)。计算

    逆传导 = 邻总热导 + 总热导

    温度散失(单位:K) = (总温度 - 环境温度)/逆传导

    热容器热量散失(单位:J) = 温度散失*总热容

    邻热容器热量获得(单位:J) = 热容器热量散失

    举例:一个500K的电阻型加热器(含有一个对所有面开放的,热容100,热导5,热阻100的热容器)连接了一个800K的基础热导线缆(含有一个对所有面开放的,热容1,热导5,热阻10的热容器),计算电阻型加热器的邻近换热:逆传导 = 5 + 5 = 10;温度散失 = (500 - 300)/10 = 20K;电阻型加热器热量散失 = 20*100 = 2,000J;基础热导线缆热量获得 = 2,000J。计算基础热导线缆的邻近换热:温度散失 = (800 - 300)/10 = 50K;基础热导线缆热量散失 = 50*1 = 50J;电阻型加热器热量获得 = 50J。电阻型加热器总计损失热量1,950J;基础热导线缆总计获得热量1,950J。以上计算假定环境温度为默认300K。

    由公式可看出,仅热导影响邻近换热。通常而言机器的热导都非常小,因此邻近换热十分迅速。邻近换热与相邻两个热容器的温差没有直接关系,由上面的例子可知,低温方块也可以向高温方块导热,这是因为邻近换热的温差选用的是与环境的温差,并且热量传递还需乘以自身热容,因此热容大的热容器更容易向热容小的热容器导热,并且可以制造很高的温度差。

单方块机器

Mek中有热效应的单方块机器包含热导线缆固体燃料加热器电阻型加热器量子传送装置热力发电机。下面将一一介绍。首先介绍一个通用的计算环境温度的函数[Mekanism/src/main/java/mekanism/common/capabilities/heat/CachedAmbientTemperature.java]。它首先读取方块所在的世界类型,若世界类型为空则直接返还默认环境温度300K。否则依据输入的朝向返还方块本身位置或方块的朝向方向相邻方块的位置处的世界温度。世界温度[Mekanism/src/api/java/mekanism/api/heat/HeatAPI.java 48-73]由群系温度计算而来:原版的群系温度范围为[-0.7, 2.0],不过为了防止某些模组的极端温度,首先将群系温度限制在[-5, 5]范围内。接下来,以平原群系的温度0.8为基准,将差值放大25倍修正环境温度。具体公式为

世界温度(单位:K) = 默认环境温度300 + 25*(max{min{群系温度, 5}, -5} - 0.8)

群系温度可以在wiki界面查阅获得。简单来说,在Y=64及以下,群系温度取该群系的基础温度值;当Y≥65时,基础温度值会根据一个XZ平面上的噪声函数随机上下浮动,然后在浮动后的温度值的基础上,高度每升高1格温度下降0.0016 = 1/625。举例:在虚空的Y=200高度,在不考虑噪声浮动的情况下,世界温度 = 300 + 25*(0.5 - 0.0016*(200 - 64) - 0.8) = 287.06K。

热导线缆

热导线缆共有4个等级[Mekanism/src/main/java/mekanism/common/tier/ConductorTier.java 11-14]:基础、高级、精英、终极。所有热导线缆都只有一个对所有面开放的热容器,热容均为1,热导均为5,热阻分别为10,400,8,000,100,000。在放置热导线缆时热容器的初始温度被设置为热导线缆所在位置的环境温度。

热导线缆每t执行环境换热、邻近换热。环境换热与邻近换热时,环境温度取与选取面相邻的方块位置的环境温度。举例:一个坐标位于(0, 16, 0)的基础热导线缆,其东面方向(X坐标增大方向)的环境换热与邻近换热中的环境温度都取坐标(1, 16, 0)处的环境温度。

固体燃料加热器

固体燃料加热器[Mekanism/src/main/java/mekanism/common/tile/machine/TileEntityFuelwoodHeater.java]燃烧一切熔炉可接受的燃料,但燃烧时间只有熔炉中的一半。它有一个对所有面开放的热容器,热容为100,热导为5,热阻为10。

固体燃料加热器每t执行燃烧燃料、环境换热、邻近换热。它有一个内置的剩余燃料量,在其打开的机器界面(Graphical User Interface,以下简称GUI)中显示为燃料。当剩余燃料量为0时,它会尝试燃烧燃料槽中的燃料,将剩余燃料量设置为燃料的燃烧时间(以t为单位)。固体燃料加热器每t消耗的燃料量是可配置的,称为燃料刻乘数,在配置文件"config/Mekanism/general.toml"中默认为"fuelwoodTickMultiplier = 1"。而固体燃料加热器消耗的每1燃料量产生的热量也是可配置的,称为每燃料刻热量,在配置文件"config/Mekanism/general.toml"中默认为"heatPerFuelTick = 400.0"。固体燃料加热器将燃烧掉燃料刻乘数数量的燃料(当剩余燃料量不足时燃烧掉剩余燃料量),并乘以每燃料刻热量传递给热容器。具体公式为

热容器接受的热量(单位:J) = 每燃料刻热量(默认400)*min{燃料刻乘数(默认1), 剩余燃料量}

在放置固体燃料加热器时热容器的初始温度被设置为固体燃料加热器所在位置的环境温度。环境换热与邻近换热时,环境温度取与选取面相邻的方块位置的环境温度。举例:一个坐标位于(0, 64, 0)的固体燃料加热器,其顶面方向(Y坐标增大方向)的环境换热与邻近换热中的环境温度都取坐标(0, 65, 0)处的环境温度。由环境温度计算公式,Y=65处的世界温度一般与Y=64处的世界温度不同,因此刚放置于Y=64的固体燃料加热器在其GUI左下角会显示非零的温度散失。然而同一群系的Y≤64的温度都是相同的,因此除非放置在群系的分界线上,否则在Y≤63的位置放置固体燃料加热器将不会有任何环境温度散失。又由于GUI中的“散失”仅计入热容器温度高于环境温度的面,在不考虑噪声浮动的情况下,放置在Y≥65的固体燃料加热器仍然会显示温度散失,散失量为 25*0.0016/10,015 = 3.99μK。而下方环境给固体燃料加热器传递温度同为3.99μK,因此固体燃料加热器实际上保持温度不变,GUI中的“散失”温度不会变化。实际中由于有温度的噪声浮动,散失数值一定会高于3.99μK,但仍然几乎不会改变。

电阻型加热器

电阻型加热器[Mekanism/src/main/java/mekanism/common/tile/machine/TileEntityResistiveHeater.java]将电力转化为热量。它有一个对所有面开放的热容器,热容为100,热导为5,热阻为100。放置时,水平方向上面朝玩家的面为它的正面。它只有正面左右的两个水平方向上的侧面可以接受能量。举例:玩家面朝西方向放置的电阻型加热器正面为东方,它的北面与南面是仅有的两个接受能量输入的面。在方块贴图上它的能量接受面显示为一个绿色的能量框(聚能环),很好辨认。它还有一个容量为设定值400倍的能量槽[Mekanism/src/main/java/mekanism/common/capabilities/energy/ResistiveHeaterEnergyContainer.java 36-39]。电阻型加热器的输入框只能输入不超过7位的整数。因此切换能量单位为J时(左键点击GUI左下角能耗框可循环切换能量单位)可以设置最低正能耗为1J/t;切换能量单位为EU时可以设置最高能耗为9,999,999EU/t = 99,999,999J/t,显示为10MEU/t或100MJ/t。

电阻型加热器每t执行消耗能量、环境换热、邻近换热。其中消耗单位能量产出的热量可配置,称为电阻型加热器效率,在配置文件"config/Mekanism/general.toml"中默认为"resistiveHeaterEfficiency = 0.6"。因此当能量充足时,

热容器接受的热量(单位:J) = 电阻型加热器效率(默认0.6)*设定能耗

在放置电阻型加热器时热容器的初始温度被设置为电阻型加热器所在位置的环境温度。环境换热与邻近换热时,环境温度取与选取面相邻的方块位置的环境温度。尽管电阻型加热器的热阻为100,而固体燃料加热器的热阻为10,它们在环境换热时的逆传导分别为10,105、10,015,几乎没有差距,这是因为默认的空气热导非常大。同样的问题出现在热导线缆上。高级热导线缆相比于基础热导线缆的热量损耗几乎没有降低,环境换热的热量损耗仅降低了 1 - 10,015/10,405 = 3.75%。真正的提高在于精英热导线缆到终极热导线缆的升级,环境换热的热量损耗降低了 1 - 18,005/110,005 = 83.6%。

量子传送装置

量子传送装置[Mekanism/src/main/java/mekanism/common/tile/TileEntityQuantumEntangloporter.java]可以远程传递不同种类的属性,包括物品、流体、气体、灌注类型、颜料、浆液、能量和热量。每个频道有一个对使用该频道的所有量子传送装置的所有面开放的热容器,热容为1,热导为1,热阻为1,000[Mekanism/src/main/java/mekanism/common/content/entangloporter/InventoryFrequency.java 115-116]。当且仅当一个量子传送装置设定频道后,它才能使用这个频道的热容器。

量子传送装置每t执行环境换热、邻近换热。某一频道的热容器的初始温度被设置为首次设置该频道的量子传送装置所在位置的环境温度。环境换热与邻近换热时,环境温度取与选取面相邻的方块位置的环境温度。GUI左下角的“已传输”显示的是当前量子传送装置的邻近温度散失,它可以是负值,代表邻近方块传热给量子传送装置。

热力发电机

热力发电机 [Mekanism/src/generators/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java]是一种将热量转化为能量的机器。它有一个只支持熔岩的液体槽,容量为24,000mB。任何流体管道不支持从正面输入熔岩,只能从其它5个面输入。它有一个支持一切熔炉可接受的燃料的燃料物品栏。燃料物品栏的自动化输入只能从除了右面的其它5个面输入。它的能量物品栏只能从右面自动化输入/输出。它储存的能量只能从正面导出。事实上,Mek的所有单方块发电机,包括风力发电机以及高级太阳能发电机,它们的电力都只能从正面输出。除了太阳能发电机,它的电力只能从底面输出。热力发电机有一个对所有面开放的热容器,热容为10,热导为5,热阻为100。热容器仅对底面可用,因此热力发电机的邻近换热只存在于底面。另外,当考虑底面的环境换热时,热容器的热阻将暂时地变为0。

热力发电机每t执行燃烧物品燃料、被动产热、主动产热、热能发电、环境换热、邻近换热。一桶熔岩为1,000mB,可以烧炼100个物品,每个物品在熔炉中烧炼10s,因此1mB熔岩可以在熔炉中燃烧20t。因此作为换算,每消耗一个物品燃料,就向液体槽中增加燃料燃烧时间(单位:t)/20mB的熔岩。举例:1个煤炭块可以烧炼80个物品,因此可以在熔炉中燃烧 80*10*20 = 16,000t,因此1个煤炭块可以为液体槽添加 16,000/20 = 800mB熔岩。被动产热包含两部分:接触熔岩产热与极热环境产热。热力发电机的每个面相邻的方块若是熔岩源或流动熔岩,则为接触熔岩面计数加1。热力发电机本身含熔岩也能为接触熔岩面计数加1。每个接触熔岩面为热力发电机提供的热量可配置,称为熔岩生产热量,在配置文件"config/Mekanism/generators.toml"中默认为"heatGenerationLava = 30"。若热力发电机处于一个极热的维度,原版只有下界,则它还将被动获得一部分热量,这部分热量也是可配置的,称为下界生产热量,在配置文件"config/Mekanism/generators.toml"中默认为"heatGenerationNether = 100"。热力发电机会主动消耗液体槽中的熔岩以产生热量。它每次消耗的熔岩量可配置,称为热量生产流体速率,在配置文件"config/Mekanism/generators.toml"中默认为"heatGenerationFluidRate = 10"。若液体槽中有足够的熔岩,那么这1t热力发电机将工作,产生一定热量。产生的热量可配置,称为热量生产,在配置文件"config/Mekanism/generators.toml"中默认为"heatGeneration = 200"。接下来根据热力发电机的温度生成能量。环境温度取热力发电机位置处的环境温度。计算

卡诺效率 = 1 - min{热容器温度, 环境温度}/max{热容器温度, 环境温度}

热量损失(单位:J) = 热效率(常量0.5)*(热容器温度 - 环境温度)

生成能量(单位:J) = min{最大产能(常量500), abs(热量损失)*卡诺效率}

其中abs( )为取绝对值函数。热力发电机的最大输出为2*热量生产(默认200) = 默认400J/t。在放置热力发电机时热容器的初始温度被设置为热力发电机所在位置的环境温度。环境换热与邻近换热时,环境温度取与选取面相邻的方块位置的环境温度。

举例:下面来计算主世界完全由接触熔岩被动产热的热力发电机稳定时的产能功率。假设热力发电机放置在基础群系温度为0.8(例如平原)的群系的Y≤63处,此时参与环境换热与邻近换热的所有环境温度均为300K。假设热力发电机的温度为T,接触熔岩面总数为n。热力发电机温度稳定时,热量平衡。产热只有接触熔岩产热,为30*n。热量损失包含两部分:发电的损失与环境换热损失。环境换热损失(需注意到底面的热阻为0)为 (T - 300)/10,105*5*10 + (T - 300)/10,005*10 = (T - 300)*(50/10,105 + 10/10,005)。根据产能公式,卡诺效率 = 1 - 300/T,热量损失 = 0.5*(T - 300),生成能量 = 0.5*(T - 300)*(1 - 300/T)。由热量平衡,30*n = (T - 300)*(50/10,105 + 10/10,005) + 0.5*(T - 300),解得T = 30*n/(50/10,105 + 10/10,005 + 0.5),代入生成能量可以获得产能功率。温度散失 = (T - 300)*(5/10,105 + 1/10,005)。详细信息见下表

熔岩接触面数热力发电机温度(K)热力发电机温度散失(K/t)产能(J/t)产能(FE/t)
1359.290.0352654.89271.9570
2418.580.07053116.7986.7194
3477.880.1057933.10713.242
4537.170.1410652.36020.944
5596.470.1763273.68029.472
6655.760.2115996.50538.602
7715.060.24686120.4648.185

多方块机器

Mek中有热效应的多方块机器包含热力蒸馏塔裂变反应堆热力锅炉工业蒸汽涡轮聚变反应堆。下面将一一介绍。由于多方块结构占据了不止一个方块,环境温度需要重新定义。首先取8个角落方块(对于聚变反应堆,取其外接立方体的8个角落方块)的群系温度的平均值,再代入公式[Mekanism/src/main/java/mekanism/common/lib/multiblock/MultiblockData.java 138-159]

环境温度(单位:K) = 300 + 25*(平均群系温度 - 0.8)

同时,由于多方块结构暴露的面太多,干脆取消了多方块结构的邻近换热,并重写了环境换热。现在多方块机器只能被动接受与接口贴合的单方块机器的邻近换热。

热力蒸馏塔

热力蒸馏塔[Mekanism/src/main/java/mekanism/common/content/evaporation/EvaporationMultiblockData.java]是一种升温后将蒸馏为盐水,将盐水蒸馏为液态锂的多方块结构。热力蒸馏塔有一个容量为高度*256,000mB的液体原料槽和一个容量为10,000mB的液体产物槽。热力蒸馏塔含有一个热容器,热导为1,热阻为0,热容与层数成正比。每层提供的热容是一个可配置量,称为每层热容,在配置文件"config/Mekanism/general.toml"中默认为"heatCapacity = 100.0"。于是热容 = 层数*每层热容(默认100)。热力蒸馏塔刚形成时的温度设置为多方块结构环境温度。

热力蒸馏塔每t执行环境换热、蒸馏。多方块结构的环境换热都是独特的。热力蒸馏塔最顶层的4个角落方块可以替换为高级太阳能发电机。每个有效的高级太阳能发电机(即能见到太阳,也即至少有一个方块露天且为白天)都会给热力蒸馏塔提升一定温度,这是个可配置量,称为太阳能乘数,在配置文件"config/Mekanism/general.toml"中默认为"solarMultiplier = 0.2"。热力蒸馏塔从高级太阳能发电机获得的热量由如下公式决定

高级太阳能发电机传递热量(单位:J) = 有效高级太阳能发电机数*太阳能乘数(默认0.2)*热容

若热力蒸馏塔的温度与环境温度的差小于0.001,那么环境散热会立即发生完全,也就是热力蒸馏塔会散热至与环境温度同温。除去这种情况,热力蒸馏塔会向环境散热或从环境中获得热量。散热速度可配置,称为热耗散,在配置文件"config/Mekanism/general.toml"中默认为"heatDissipation = 0.02"。耗散的热量由如下公式决定

温差(单位:K) = 热力蒸馏塔温度 - 环境温度

环境散热(单位:J) = 热耗散(默认0.02)* sign(温差)*sqrt(abs(温差))*热容

其中,sign( )为符号函数,当x>0时sign(x)=1;当x=0时sign(x)=0;当x<0时sign(x)=-1。sqrt( )为算术平方根,例如sqrt(4)=2。abs( )为绝对值函数,例如abs(-5)=5。上述公式的目的在于环境散热的速度与温差的平方根成正比,但为了保持热传递的方向,因此做了些数学上的处理。绝大多数情况下热力蒸馏塔的温度高于环境温度,因此环境散热可以简化为

环境散热(单位:J) = 热耗散(默认0.02)*sqrt(温差)*热容

同样的,负散热,即从环境中获得热量不显示在GUI的“散失”中。接下来根据热力蒸馏塔的温度处理蒸馏过程。其中有一个可配置量调节蒸馏速度,称为温度乘数,在配置文件"config/Mekanism/general.toml"中默认为"tempMultiplier = 0.4"。由此可计算出处理速度

处理速度(单位:次) = (min{最大乘数温度(常量3,000), 热力蒸馏塔温度} - 默认环境温度(常量300))*温度乘数(默认0.4)*高度/最大高度(常量18)

这里使用次作为单位是因为有可能有单次产出超过1mB液体的配方。不过对于未经修改过的Mek来说,两个配方都是单次产出1mB液体,因此处理速度也就和产量相等了。

根据公式,热力蒸馏塔的处理过程并不消耗热量,因此只要维持高温就能获得高产量。此外,环境散热与温差的1/2次方成正比,相较于其它机器的1次方,热力蒸馏塔更容易维持高温。热容并不影响高级太阳能发电机给热力蒸馏塔供热,平均而言每个高级太阳能发电机能抵消0.2K/t的温度散失。

举例:计算仅用高级太阳能发电机为热力蒸馏塔供热的产量。假设热力蒸馏塔为满层18层,全部方块位于基础群系温度为0.8(例如平原)的群系的Y≤64处,于是环境温度为默认300K。假设共有n个有效的高级太阳能发电机,热力蒸馏塔温度为T。高级太阳能发电机传递热量 = 0.2*n*1,800;温差 = T - 300;环境散热 = 0.02*sqrt(T - 300)*1,800。由热量平衡,0.2*n*1,800 = 0.02*sqrt(T - 300)*1,800,解得T = 300 + (10*n)^2。产量 = (10*n)^2*0.4*18/18 = 0.4*(10*n)^2。下表中列出了所有情况。

有效高级太阳能发电机数热力蒸馏塔温度(K)热力蒸馏塔温度散失(K/t)产量(mB/t)
14000.240
27000.4160
31,2000.6360
41,9000.8640

另一个感兴趣的问题是使用单个电阻型加热器需要设置多少能耗才能维持热力蒸馏塔为最高产量。假设热力蒸馏塔为满层18层,全部方块位于基础群系温度为0.8(例如平原)的群系的Y≤64处,于是环境温度为默认300K。假设电阻型加热器紧贴热力蒸馏阀门。电阻型加热器的温度为T,能耗为P。不妨直接设定热力蒸馏塔温度为最大乘数温度3,000K。热力蒸馏塔环境散热 = 0.02*sqrt(3,000 - 300)*1,800 = 1,080*sqrt(3) = 电阻型加热器向热力蒸馏塔传热 = (T - 300)/(5 + 1)*100,解得T = 412.23K。电阻型加热器环境换热 = (T - 300)/10,105*6*100;耗能产热 = 0.6*P = (T - 300)/(5 + 1)*100 + (T - 300)/10,105*6*100,解得P = 3,128.8J/t。实际建造中,环境温度可能低于300K,因此可以先调大能耗,待热力蒸馏塔达到3,000K温度后再设置能耗为3,200J/t左右来维持温度。

裂变反应堆

裂变反应堆[Mekanism/src/generators/java/mekanism/generators/common/content/fission/FissionReactorMultiblockData.java]是一种燃烧裂变燃料获得裂变产物以及大量热量的多方块结构。裂变反应堆的 体积(单位:m^3) = 长*宽*高。它有一个容量为体积*100,000mB的流体槽用来装冷却剂,可以是或者钠蒸汽;有一个容量为裂变燃料组件数*8,000mB的气体槽用来装裂变燃料;有一个容量为体积*1,000,000mB的气体槽用来装过热的冷却剂,可以是蒸汽或者过热的钠蒸汽;有一个容量为裂变燃料组件数*8,000mB的气体槽用来装核废料;有一个热容器,热导为10,热阻为10,000,热容与外壳体积成正比,比例是一个可配置量,称为外壳热容,在配置文件"config/Mekanism/generators.toml"中默认为"casingHeatCapacity = 1000.0"。于是 热容 = (长*宽*高 - (长 - 2)*(宽 - 2)*(高 - 2))*外壳热容(默认1,000)。裂变反应堆刚形成时的温度设置为多方块结构环境温度。

裂变反应堆每t执行燃烧燃料、转化冷却液、环境换热、处理损坏、处理辐射。裂变反应堆燃烧燃料的速度可以在GUI左上角统计信息中设置,至多输入4个字符,最小精度为0.01。最大燃烧速率由裂变燃料组件数决定,每个裂变燃料组件能提供的燃烧速率是可配置的,称为每组件燃烧速率,在配置文件"config/Mekanism/generators.toml"中默认为"burnPerAssembly = 1"。裂变反应堆每燃烧1mB燃料产生的热量可配置,称为每裂变燃料能量,在配置文件"config/Mekanism/generators.toml"中默认为"energyPerFissionFuel = 1000000"。产生的热量将直接添加到热容器,同时产生等量的核废料。若废水箱已满,则溢出的核废料将按照剂量产生放射性。燃料表面积为只看裂变燃料组件时的表面积。例如两个紧挨着的12层裂变燃料组件,只看裂变燃料组件时相当于一个1*2*12的长方体,表面积为2*(2+12+24)=76m^3。将表面积分摊到每一个裂变燃料组件可以得到 平均表面积 = 燃料表面积/裂变燃料组件数。为达到满沸腾效率,平均表面积应达到一个目标,这个目标可配置,称为表面积目标,在配置文件"config/Mekanism/generators.toml"中默认为"surfaceAreaTarget = 4.0"。

沸腾效率 = min{1, 平均表面积/表面积目标(默认4)}

可用热量(单位:J) = 沸腾效率*(裂变反应堆温度 - 沸腾温度[Mekanism/src/main/java/mekanism/common/util/HeatUtils.java 17](常量373.15))*热容

接下来分冷却剂为水和钠蒸汽两种情况。当冷却液为水时

热容器实际上传递给水的热量(单位:J) = 可用热量*水的热导(常量0.5)

蒸发水的量(单位:mB) = 蒸汽能量效率[Mekanism/src/main/java/mekanism/common/util/HeatUtils.java 25-27](常量0.2)*热容器实际上传递给水的热量/水的热焓[Mekanism/src/main/java/mekanism/common/util/HeatUtils.java 21-23](可配置,默认10)

其中水的热焓是个可配置量,称为每蒸汽最大能量,在配置文件"config/Mekanism/general.toml"中默认为"maxEnergyPerSteam = 10"。注意当水不足蒸发水的量时传热将以实际剩余水量计算。但若蒸汽箱已满,则产生的多余蒸汽将直接排出,不会限制换热。

当冷却液为钠蒸汽时

热容器实际上传递给钠蒸汽的热量(单位:J) = 可用热量*钠蒸汽的热导[Mekanism/src/main/java/mekanism/common/registries/MekanismGases.java 56](常量1)

过热钠蒸汽的量(单位:mB) = 热容器实际上传递给钠蒸汽的热量/钠蒸汽的热焓[Mekanism/src/main/java/mekanism/common/registries/MekanismGases.java 56](常量5)

注意当钠蒸汽不足过热钠蒸汽的量时传热将以实际剩余钠蒸汽量计算。同样的,多余的过热的钠蒸汽将会直接排出。GUI中加热速率显示的是加热后的冷却剂的量,即蒸发水的量或过热钠蒸汽的量。

环境换热公式与单方块机器的环境换热公式类似

逆传导 = 空气热导(常量10,000) + 热导 + 热阻

温度散失(单位:K) = (热容器温度 - 环境温度)/逆传导

热量散失(单位:J) = 温度散失*热容

紧接着处理损坏。若热容器温度高于最低损坏温度(常量1,200),损坏度将增加 min{热容器温度, 最大损坏温度(常量1,800)}/(最低损坏温度*10)。而若热容器温度不高于最低损坏温度,则损坏度将减少 (最低损坏温度 - 热容器温度)/(最低损坏温度*100),至多减到0。可配置裂变反应堆是否开启融毁,称为开启融毁,在配置文件"config/Mekanism/generators.toml"中默认为"meltdownsEnabled = true"。若开启了融毁,温度超过最低损坏温度,损坏度超过最大损坏度(常量100),则生成一个(0,1)的随机数,若随机数小于 损坏度/最大损坏度*融毁几率(可配置,默认0.001),则触发融毁。其中融毁几率可配置,在配置文件"config/Mekanism/generators.toml"中默认为"meltdownChance = 0.001"。

处于裂变反应堆内部的生物将受到辐射。辐射来源有两方面:正在燃烧的燃料会立即辐射,生物获得辐射(单位:Sv/s) = 燃烧速度;废水箱中的核废料会缓慢辐射,生物获得辐射(单位:Sv/s) = 核废料量*核废料放射性(常量10mSv/h)/3,600

融毁只会发生于温度过高且损坏度超标,因此若能及时降温裂变反应堆,例如关停裂变反应堆、补充冷却剂、释放工业蒸汽涡轮的能量或者蒸汽,使得裂变反应堆温度降低至最低损坏温度以下,则不必担心融毁风险,再高的损坏度也不会触发融毁。

在接下来介绍完热力锅炉后可以得知,选用不同的冷却剂并不会影响最终产出的蒸汽的量,因此发电量没有区别。但在相同可用热量下,过热的钠蒸汽带走的热量是蒸汽带走的热量的2倍,因此仅仅将冷却剂从水换成钠蒸汽可以让裂变反应堆温度与沸腾温度的差距缩小到原来的1/2,因而在保证温度安全的情况下允许的燃烧速率也几乎翻倍。但钠蒸汽也有一些限制。首先是钠的热焓只有蒸汽的1/2,而蒸汽还要考虑蒸汽能量效率,导致相同燃烧速率下,钠蒸汽的加热速率是水的10倍,这很可能会因为冷却液箱容量不够所限制。其次是钠蒸汽的生产需要热力蒸馏塔,一座满速热力蒸馏塔只能产出108mB/t的钠蒸汽,需要积攒很久才能充满冷却液箱。待裂变反应堆开启后,热力锅炉中会残留大量的过热的钠蒸汽,还需要继续向裂变反应堆补充钠蒸汽缺口。最后是使用钠蒸汽需要配套热力锅炉,匹配合适的尺寸又将是一个很大的计算量。

我们将会看到,相比于燃烧裂变燃料释放的大量热量,环境散失的热量可以忽略。处于最低损坏温度下的裂变反应堆,环境温度散失为 (1,200 - 300)/20,010 = 0.04497K/t。这相当于最大尺寸的裂变反应堆(18*18*18)以 (1,200 - 300)/20,010*(18^3 - 16^3)*1,000/1,000,000 = 0.07808mB/t速率燃烧裂变燃料产生的热量。对于更小尺寸与更低的温度,这个数会更小。因此,对于一个以10mB/t燃烧裂变燃料的裂变反应堆,环境散热损失只占了不到1%,在粗略计算中可以忽略环境换热。另一方面说明,最大尺寸的裂变反应堆可以以0.07mB/t的速率燃烧裂变燃料而不需要其它降温措施,俗称自冷。

尽管单方块机器可以通过裂变反应堆端口主动对裂变反应堆进行邻近换热,但由于邻近换热只与环境温差有关,找不到一个温度能长期远低于环境温度的单方块机器。同时由于裂变反应堆运行起来产热巨大,依靠单方块机器来主动吸热也是杯水车薪。唯一可能做到的是量子传送装置。在一个极冷群系的高空放置很多量子传送装置,都设置为频道A,再在裂变反应堆端口处放置一个量子传送装置,设置为频道A。这样频道A的热容器就能从裂变反应堆吸热,向极冷群系放热了。原版基础群系温度下限为-0.7(冰封山峰与尖峭山峰),因此最低世界温度为 300 + 25*(-0.7 - (256 - 64)*0.0016 - 0.8) = 254.82K。假设放置足够多量子传送装置使得频道A的热容器可以保持在这一温度,并假定裂变反应堆处的环境温度为最高 300 + 25*(2 - 0.8) = 330K,则与裂变反应堆接触的量子传送装置将向裂变反应堆吸热 (330 - 254.82)/11*1 = 6.834J/t,远不及环境散热。主要原因是量子传送装置的热容太小,只有1。

热力锅炉

热力锅炉[Mekanism/src/main/java/mekanism/common/content/boiler/BoilerMultiblockData.java]是一种用热量加热产生蒸汽的多方块结构。热力锅炉的 体积(单位:m^3) = 长*宽*高下层体积[Mekanism/src/main/java/mekanism/common/content/boiler/BoilerValidator.java 115-119](单位:m^3) = 除去分压元件层及以上方块的剩余体积 - 分压元件数上层体积[Mekanism/src/main/java/mekanism/common/content/boiler/BoilerValidator.java 127](单位:m^3) = 除去分压元件层及以下方块的剩余体积。下层是水箱,兼做过热冷却液箱;上层是蒸汽箱,兼做冷却液箱。水箱容量(单位:mB) = 下层体积*每体积水量(常量16,000)过热冷却液箱容量(单位:mB) = 下层体积*每体积过热冷却液量(常量256,000)蒸汽箱容量(单位:mB) = 上层体积*每体积蒸汽量(常量160,000)冷却液箱容量(单位:mB) = 上层体积*每体积冷却液量(常量160,000)。热力锅炉刚形成时的温度设置为多方块结构环境温度。它有一个热容器,热导为1,热阻为100,000,热容 = 外壳体积*每外壳热容(常量50) = ((长*宽*高 - (长 - 2)*(宽 - 2)*(高 - 2))*每外壳热容

热力锅炉每t执行环境换热、转化过热冷却剂、转化水。环境换热公式与裂变反应堆相同

逆传导 = 空气热导(常量10,000) + 热导 + 热阻

温度散失(单位:K) = (热容器温度 - 环境温度)/逆传导

热量散失(单位:J) = 温度散失*热容

接下来转化过热冷却剂(主要是过热的钠蒸汽)

过热的钠蒸汽转化量(单位:mB) = min{冷却液缺口, 冷却效率(常量0.4)*过热的钠蒸汽现有储量*(1 - 热力锅炉温度/过热冷却液温度[Mekanism/src/main/java/mekanism/common/util/HeatUtils.java 19](常量100,000))}

热容器获得热量(单位:J) = 过热的钠蒸汽转化量*钠蒸汽的热焓(常量5)

其中冷却液缺口指的是 冷却液箱容量-钠蒸汽现有储量。代码中有一些取整操作,可能会带来一点点误差。接下来转化水。这一过程仅当热力锅炉温度超过沸腾温度(常量373.15)时才会发生。

可用热量(单位:J) = min{过热元件数*每过热元件热传递(可配置,默认16,000,000), (热力锅炉温度 - 沸腾温度(常量373.15))*热容*锅炉水热导(可配置,默认0.7)}

其中每过热元件传递可配置,在配置文件"config/Mekanism/general.toml"中默认为"superheatingHeatTransfer = 1.6E7"。1.6E7是科学计数法,表示1.6*10^7。锅炉水热导可配置,在配置文件"config/Mekanism/general.toml"中默认为"boilerWaterConductivity = 0.7"。

水转化量(单位:mB) = min{蒸汽缺口, 水储量, 可用热量*蒸汽能量效率(常量0.2)/水的热焓(默认10)}

热容器失去热量(单位:J) = 水转化量*水的热焓(默认10)/蒸汽能量效率(常量0.2)

GUI中显示的“沸腾速率”为水转化量。

现在我们可以重新审视一下裂变反应堆使用水或钠蒸汽作为冷却剂在蒸汽产量上的区别。首先说明热力锅炉的的环境散热也可以忽略不计。极端假设热力锅炉的温度已经达到最高100,000K(在仅使用过热的钠蒸汽加热水的情况下),温度散失为 (100,000 - 300)/110,001 = 0.9063K/t,这里假设环境温度为300K。环境温度的选取对结果几乎没有影响。假设热力锅炉的尺寸为最大18*18*18(这样环境散热最多),热容为 (18^3 - 16^3)*50 = 86800,环境散热为 (100,000 - 300)/110,001*(18^3 - 16^3)*50 = 78,671.6484J/t,相当于裂变反应堆燃料燃烧速率 78,671.6484/1,000,000 = 0.07861mB/t。对于更小的尺寸和更低的温度,这个数会更小。和裂变反应堆的讨论一样,在粗略计算中可以忽略环境换热。假设热力锅炉的尺寸足够完全转移来自裂变反应堆的过热的钠蒸汽的热量,则由热量平衡,热容器失去热量 = 热容器获得热量,算出 水转化量 = 过热的钠蒸汽转化量*钠蒸汽的热焓(常量5)*蒸汽能量效率(常量0.2)/水的热焓(默认10) = 过热的钠蒸汽转化量/10。而在裂变反应堆小节,我们说明了相同燃烧速率下,钠蒸汽的加热速率是水的10倍,因此过热的钠蒸汽在热力锅炉中产生的蒸汽的量与裂变反应堆使用水作为冷却剂产生的蒸汽的量完全相同。

由于热力锅炉转化过热的钠蒸汽有一个温度上限100,000K,且热力锅炉转化过热的钠蒸汽的效率随温度升高而降低,因此聚变反应堆产生的热量不要直接导入裂变产线的热力锅炉,否则会导致过热的钠蒸汽传热变慢,裂变反应堆升温损坏。

热力锅炉最多只能转化40%储量的过热的钠蒸汽,考虑到温度影响,这个数值会更小。因此裂变产业中热力锅炉会存留大量过热的钠蒸汽,这在刚启动裂变反应堆时可能会导致裂变反应堆的钠蒸汽过少,换热不足从而升温损坏。解决办法是外部不间断给裂变反应堆提供钠蒸汽,裂变反应堆从小的燃烧速率开始缓慢往上增加,保证外部供应能填补裂变反应堆的钠蒸汽空缺。

工业蒸汽涡轮

工业蒸汽涡轮[Mekanism/src/generators/java/mekanism/generators/common/content/turbine/TurbineMultiblockData.java]是一种利用蒸汽发电并返还的多方块结构。工业蒸汽涡轮的 体积(单位:m^3) = 长*宽*高,下层体积[Mekanism/src/generators/java/mekanism/generators/common/content/turbine/TurbineValidator.java 183] = 长*宽*涡轮转子高度。它的 能量储存上限(单位:J) 体积*16,000,000蒸汽箱容量(单位:mB) = 下层体积*每体积气体量(常量64,000)。它有一个内置的水箱用来装冷却水,容量为 冷凝器数量*冷凝率(可配置,默认64,000),其中冷凝率可配置,在配置文件"config/Mekanism/generators.toml"中默认为"condenserRate = 64000"。工业蒸汽涡轮本身没有热容器,因此严格来说不参与Mek的热现象。但工业蒸汽涡轮是处理热交换产物——蒸汽的多方块结构,是裂变产线与聚变产线中的一员,因此将其纳入进来也算合理。

在建造判定时,并不需要底面是正方形,只需要保证长(长边)和宽(短边)都是奇数。但此时分压元件层(或复杂旋钮装置层)的分压元件不能摆满,而是要围绕复杂旋钮装置摆一层正方形填满短边。即分压元件摆成的正方形中心是复杂旋钮装置,边长是宽-2。这一层的其他方块应该留空。如下图片展示了一个“畸形”的17*5*5的工业蒸汽涡轮。Mek热力学-第1张图片

工业蒸汽涡轮每t执行蒸汽转化能量、排出过量蒸汽

能量乘数 = 每蒸汽最大能量(可配置,默认10)*min{涡轮叶片数, 电磁线圈数*每线圈涡轮叶片(可配置,默认4)}/最大叶片数[Mekanism/src/generators/java/mekanism/generators/common/content/turbine/TurbineValidator.java 31](常量28)

其中每蒸汽最大能量可配置,在配置文件"config/Mekanism/general.toml"中默认为"maxEnergyPerSteam = 10"。每线圈涡轮叶片可配置,"config/Mekanism/generators.toml"中默认为"turbineBladesPerCoil = 4"。

蒸汽流量(单位:mB) = 蒸汽储量/蒸汽箱容量*min{蒸汽储量, 能量缺口/能量乘数, 涡轮排气口数*涡轮排气口气流速率(可配置,默认32,000), 下层体积*分压元件数*分压元件气流速度(可配置,默认1,280)}

产生能量(单位:J) = 能量乘数*蒸汽流量

其中涡轮排气口气流速率可配置,在配置文件"config/Mekanism/generators.toml"中默认为"turbineVentGasFlow = 32000.0"。分压元件气流速度可配置,在配置文件"config/Mekanism/generators.toml"中默认为"turbineDisperserGasFlow = 1280.0"。若蒸汽流量超过内置冷却水箱容量,则返还水的量只取冷却水箱容量,多余的蒸汽会被排出。

若蒸汽箱为排空模式,蒸汽箱清空;若蒸汽箱为排出过量模式,蒸汽量不会超过 蒸汽箱容量*排出过量保留比例(可配置,默认0.9),其中排出过量保留比例可配置,在配置文件"config/Mekanism/general.toml"中默认为"dumpExcessKeepRatio = 0.9"。

由公式可知,蒸汽流量的限制因素有很多:涡轮排气口数,分压元件数,蒸汽箱内蒸汽占比,甚至能量缺口也会影响蒸汽流量。而饱和冷凝器并不影响蒸汽流量,只会影响回流的水量。

工业蒸汽涡轮必须要让蒸汽填满蒸汽箱才会达到最大流量,因此在蒸汽箱中会存留大量的蒸汽,这在裂变反应堆开启的瞬间可能会造成热力锅炉大量缺水,导致换热不足从而损坏裂变反应堆。解决办法是外部不间断给热力锅炉供水,裂变反应堆从小的燃烧速率开始缓慢往上增加,保证外部供水填补热力锅炉的水量空缺。

工业蒸汽涡轮最高效时可以将蒸汽的所有热量(蒸汽流量*蒸汽的热焓(默认10))转化为能量,但这要求高度为14的涡轮转子,算上2层外壳、1层分压元件,必须使用最高的18层工业蒸汽涡轮才能剩余1层留给电磁线圈和饱和冷凝器。这会对流量产生极大限制,从而限制最大发电量。玩家必须在能量转化效率(增加下层高度)与最大发电量(增加上层高度以容纳更多的饱和冷凝器、涡轮排气口)之间做出取舍。

聚变反应堆

聚变反应堆[Mekanism/src/generators/java/mekanism/generators/common/content/fusion/FusionReactorMultiblockData.java]是Mek中的终极产热和发电机器。它输入或直接输入氘氚燃料,燃烧氘氚燃料释放大量热并获得能量。它有一个容量为1,000mB的氘箱,一个容量为1,000mB的氚箱,一个容量为1,000mB的氘氚燃料箱,一个容量为 输入速率*1,000,000mB 的水箱,一个容量为 输入速率*100,000,000mB 的蒸汽箱和一个容量为1,000,000,000J的能量槽。它的外壳有一个热容器,热容为1,热阻为1,000,000,热导为1/外壳热导(可配置,默认0.1),其中外壳热导可配置,在配置文件"config/Mekanism/generators.toml"中默认为"casingThermalConductivity = 0.1"。热容器的初始温度为聚变反应堆成型时的多方块结构环境温度。热容器对每个聚变反应堆端口的每个面开放[猜测,未从代码证实,否则解释不了聚变反应堆主动邻近换热]。聚变反应堆有一个内部等离子体,可以视为一个热容器,其热容为100。由于等离子体只与聚变反应堆外壳换热,因此不定义热导和热阻,而是用等离子体与外壳间热导(常量0.2)来衡量彼此之间的换热速度。聚变反应堆可以设定输入速率,这实际上是聚变反应堆内部的氘与氚合成为氘氚燃料的速率。输入框只能输入2个字符,且必须为偶数,因此只能设定输入速率为[0,98]之间的偶数。

聚变反应堆每t执行检查点火、等离子体与外壳换热、外壳与水换热、聚变反应端口的环境换热与邻近换热、被动产能、伤害内部生物

检查点火只在等离子体温度大于等于点火温度(常量100,000,000)的情况下发生。若聚变反应堆未点火且放置了准备好的黑体辐射腔,消耗黑体辐射腔,将黑体辐射腔内的氘氚燃料转移到氘氚燃料箱,点燃反应堆。若聚变反应堆已点火,则按照设定速率将氘和氚合称为氘氚燃料注入到氘氚燃料箱,并燃烧氘氚燃料。

氘氚燃料燃烧量(单位:mB) = min{氘氚燃料储量, max{0, 上1t等离子体温度 - 点火温度(常量100,000,000)}*燃烧比例(常量1)}

等离子体获得热量(单位:J) = 氘氚燃料燃烧量*每聚变燃料能量(可配置,默认10,000,000)

其中每聚变燃料能量可配置,在配置文件"config/Mekanism/generators.toml"中默认为"energyPerFusionFuel = 10000000"。若检测到没有氘氚燃料被燃烧,则聚变反应堆停火。

等离子体给外壳的热量(单位:J) = 等离子体与外壳间热导(常量0.2)*(等离子体温度 - 外壳温度)

假定水充足且蒸汽箱剩余容量充足,则

外壳给水的热量(单位:J) = 水加热比例(可配置,默认0.3)*(外壳温度 - 环境温度)

蒸发水的量(单位:mB) = 外壳给水的热量*蒸汽能量效率(常量0.2)/水的热焓(默认10)

接下来每个聚变反应堆端口执行单方块的环境换热与邻近换热[未找到代码中声明聚变反应堆端口使用哪个热容器,按照热交换逻辑猜测应该是使用外壳的热容器进行换热]。接下来是被动产热。

外壳给空气的热量(单位:J) = 外壳热导(可配置,默认0.1)*(外壳温度 - 环境温度)

聚变反应堆产生能量(单位:J) = 外壳给空气的热量*热耦合效率(可配置,默认0.05)

其中热耦合效率可配置,在配置文件"config/Mekanism/generators.toml"中默认为"thermocoupleEfficiency = 0.05"。

聚变反应堆可以直接输入氘氚燃料而不需要输入氘和氚。大多数情况下氘氚燃料会被立即燃烧。但需要注意一旦有1t氘氚燃料停供,则会触发停火条件,而开火必定需要准备好的黑体辐射腔,这将导致聚变反应堆停工。因此最好同时向聚变反应堆输入氘和氚,设置一个小的输入速率,这样可以保证在不稳定输入氘氚燃料情形下做到不停火。

氘氚燃料的能量密度是裂变燃料的10倍。使用气冷时,氘氚燃料产生的热量有5%转化为能量。而裂变燃料燃烧产生的热量有20%转化为能量。因此在相同燃料燃烧速率下,聚变反应堆气冷产生的能量是裂变反应堆的2.5倍。聚变反应堆使用水冷时,3/4的能量传递给水,这部分热量有20%转化为能量;1/4的能量传递给空气,这部分热量有5%转化为能量。因此使用水冷的聚变反应堆产生的能量是使用气冷的聚变反应堆产生的能量的 (3/4*0.2 + 1/4*0.05)/0.05 = 3.25倍。热力锅炉同样将热量的20%转化为能量。因此若将聚变反应堆的热量导入热力锅炉并用工业蒸汽涡轮发电,将有更多的热量享有20%的能量转化效率。极限情况下,氘氚燃料产生的所有热量以20%的效率转化为能量,这样产生的能量还能提高到水冷聚变反应堆的 0.2/(3/4*0.2 + 1/4*0.05) = 1.23倍。

聚变反应堆通常需要激光点火。创造模式玩家手持配置模式下的配置器右击聚变反应堆的激光聚焦矩阵可以直接设定等离子体温度为1,000,000,000K = 1GK。若激光聚焦矩阵接受到激光能量,判断聚变反应堆是否处于燃烧状态:若处于燃烧状态,等离子体将获得激光能量等量的热量;若处于停火状态,则等离子体获得激光能量*10的热量。由于点火温度为100MK,相当于10GJ的热量,因此激光增幅器只需要积攒1GJ的能量就可以成功点火。由于水冷聚变反应堆的能量效率大约为3/4*0.2 + 1/4*0.05 = 0.1625,因此单纯用停火的水冷聚变反应堆的产能通过激光增幅器加热自己将获得0.0625倍率的净能量产出。但正常搭建的聚变反应堆产能已经足够,若是不想搭建氘氚燃料产线的玩家可以尝试这种玩法。

讨论

热力发电机是最高效的热转能机器

给热力发电机输入热量,使其达到最大能量输出400J/t。由于卡诺效率<1,热量损失 = 产能/卡诺效率 > 400J,热容器温度 - 环境温度 = 热量损失/热效率 > 800K,卡诺效率 = 1 - 环境温度/热容器温度 > 800/(800 + 环境温度) = 72.7%,这里假定环境温度为300K。因此热量损失 = 产能/卡诺效率 < 550J,热容器温度 - 环境温度 = 热量损失/热效率 < 1100K,环境热量散失 = (热容器温度 - 环境温度)*(50/10,105 + 10/10,005) < 6.54J,因此平衡时热机效率 = 产出能量/输入热量 = 产出能量/(热量损失 + 环境热量散失) > 400/(550 + 6.54) > 71.8%。

作为对比,裂变反应堆蒸发水的量 = 0.02*热容器传递给水的热量,聚变反应堆蒸发水的量 = 0.02*外壳传递给水的热量,热力锅炉蒸发水的量 = 0.02*热容器给水的热量,而工业蒸汽涡轮产能 = 10*蒸汽流量,因此裂变反应堆、聚变反应堆和热力锅炉的热能转化效率都不足20%。

可惜的是,热力发电机的最大能量输出为400J/t,最大产能限制为500J/t,这只相当于0.0005mB/t的裂变燃料燃烧速率或0.00005mB/t的氘氚燃料燃烧速率,规模实在太小,无法作为大规模发电使用。此外,热力发电机仅热能转化效率高,其燃料转化为热量的效率其实非常低。1桶熔岩1,000mB,在热力发电机中以10mB/t的默认速率消耗,共燃烧100t,总计产生100*200 = 20,000J的热量。然而1桶熔岩在固体燃料加热器中可以燃烧100*10*20/2 = 10,000t,总计产生10,000*400 = 4,000,000J的热量,是热力发电机的200倍,更不用说固体燃料加热器的产热功率是热力发电机的2倍。因此若想要燃烧燃料发电,热力发电机最好搭配固体燃料加热器使用。需要注意热力发电机的热容器仅对底面可用,因此要么将固体燃料加热器放置在热力发电机底面,要么从底面用热导线缆将热量导入热力发电机。

满速热力蒸馏塔方案

在热力蒸馏塔小节中,我们已经计算出为了维持一个18层热力蒸馏塔满效率运行,需要输入大约3,200J/t的热量。除了使用电阻型加热器,也可以使用8个固体燃料加热器来提供相同的热量。考虑普遍一些的情况,假设热力蒸馏塔为n层,有m个有效的高级太阳能发电机,热力蒸馏阀门紧贴能耗为P的电阻型加热器,热力蒸馏塔温度为T1,电阻型加热器温度为T2,环境温度300K,则

热容 = 100*n

高级太阳能发电机传递热量 = 0.2*m*100*n = 20*m*n

环境散热 = 0.02*sqrt(T1 - 300)*100*n = 2*n*sqrt(T1 - 300)

电阻型加热器环境散热 = (T2 - 300)/10,105*6*100

电阻型加热器向热力蒸馏塔传热 = (T2 - 300)/6*100

由电阻型加热器热量平衡

0.6*P = (T2 - 300)/10,105*6*100 + (T2 - 300)/6*100

由热力蒸馏塔热量平衡

20*m*n + (T2 - 300)/6*100 = 2*n*sqrt(T1 - 300)

解得T2 - 300 = 0.03587*P,T1 - 300 = (10*m + 0.2989*P/n)^2

反之,为达到3,000K最大温度,则要求P = (60*sqrt(3) - 20*m)*n*6/100*(6*100/10,105 + 100/6)/0.6。下表列出了不同的m(高级太阳能发电机数量)和n(热力蒸馏塔层数)值下保持白天热力蒸馏塔最高产量电阻型加热器需要的最低能耗以及此时的产量


m=0m=1m=2m=3m=4产量(mB/t)
n=3521.47421.11320.75220.40120.04180
n=4695.29561.48427.67293.86160.06240
n=5869.11701.85534.59367.33200.07300
n=61042.93842.22641.51440.80240.08360
n=71216.75982.59748.43514.26280.10420
n=81390.581122.96855.34587.73320.11480
n=91564.401263.33962.26661.19360.12540
n=101738.221403.701069.18734.66400.14600
n=111912.041544.071176.10808.12440.15660
n=122085.871684.441283.02881.59480.17720
n=132259.691824.811389.93955.06520.18780
n=142433.511965.181496.851028.52560.19840
n=152607.332105.551603.771101.99600.21900
n=162781.152245.921710.691175.45640.22960
n=172954.982386.291817.611248.92680.231020
n=183128.802526.661924.521322.39720.251080

值得注意的是,尽管以上表格列出了最低能耗,还是建议玩家在此基础上增加一些能耗,保证从夜晚到白天的时候能更快加热到满速温度。

裂变产业

相信有很大一部分玩家在期待这一节。毕竟其他发电机只要原料充足无论如何都能安全运作,而裂变产线一旦设计得不好则会寸草不生。这里给出一个我设计裂变产线的例子,大家可以参考其中的思路和原理设计自己心仪的裂变产线。总体思路其实就是寻找限制条件,设计尺寸以满足限制条件。

Mek中的多方块结构在跨区块时可能会产生问题,因此我设计的前提是多方块结构必须在同一区块中,因此尺寸最大为16*18*16。若裂变产线中不同结构位于不同区块,则可能在其中一个区块加载而另一个区块未加载时产生问题。因此尽量将所有结构压缩到一个区块中。暂时假定一个16*16区块的[0, 7]*[0, 7]建造一个8*?*8的裂变反应堆,[8, 15]*[8, 15]建造一个8*?*8的热力锅炉,而在[8, 14]*[1, 7]和[1, 7]*[8, 14]建造2个紧贴裂变反应堆和热力锅炉的工业蒸汽涡轮。但我们知道工业蒸汽涡轮并不需要底面正方形,将两个相同尺寸的工业蒸汽涡轮拼接在一起(中间重合掉1面或长边增加1保证长为奇数),能量乘数、分压元件数不变,蒸汽箱容量、能量槽容量、体积、下层体积、饱和冷凝器数翻倍,涡轮排气口尽管距离翻倍还有贴合面的损失,但只要保证涡轮排气口不限制流量,那么蒸汽流量就能翻倍,因此产能也能翻倍,产能和蒸汽流量没有损失,但却节约了2个面和一半的分压元件的建造材料。因此另一个设计是将热力锅炉移至[8, 15]*[0, 7]贴合裂变反应堆,而在[1, 15]*[8, 15]建造一个14*?*7的工业蒸汽涡轮。

作为案例,我们只考虑第一种造法。在最开始的粗略设计中,不需要考虑环境换热,理由在裂变反应堆小节和热力锅炉小节都有说明。一个8*8*8的裂变反应堆,内部空间为6*6*6,可以间隔摆放3*6=18根高度为6的堆叠裂变燃料组件棒。其中最顶层为控制棒组件,因此裂变燃料组件数为18*5 = 90,这是保证沸腾效率为1的软上限,实际上还可以略微增加。先来看基础数据:

体积 = 8*8*8 = 512m^3

外壳体积 = 8*8*8 - 6*6*6 = 296m^3

冷却液箱容量 = 512*100,000 = 51,200,000mB

过热冷却液箱容量 = 512*1,000,000 = 512,000,000mB

热容 = 296*1,000 = 296,000

沸腾效率暂定1

设计裂变反应堆肯定要保证它全速运行时的安全,因此假设温度为1,200K。假设所有环境温度都是300K。那么

给钠蒸汽的热量 = 1*可用热量 = 1*(1,200 - 300)*296,000 = 266,400,000J

过热的钠蒸汽的量 = 266,400,000/5 = 53,280,000mB

检查一下,超过了冷却箱容量。但此时

裂变燃料燃烧速率 = 226,400,000/1,000,000 = 226.4mB/t

远远达不到。因此限制条件变为裂变燃料的燃烧速率。以90mB/t的裂变燃料燃烧速率计算,

给钠蒸汽的热量 = 90*1,000,000 = 90,000,000J

温度 - 300 = 90,000,000/296,000 = 304.05K

注意到即使温差*2也达不到危险温度,因此可以使用水冷。于是修改设计,取消热力锅炉,让工业蒸汽涡轮直接紧贴裂变反应堆。这时

蒸发水的量 = 90,000,000*0.2/10 = 1,800,000mB/t

这也是裂变反应堆传递给工业蒸汽涡轮的最终产物,因此裂变反应堆部分计算完毕。接下来计算工业蒸汽涡轮。

工业蒸汽涡轮的主要目的是消耗掉输入的所有蒸汽并返还所有的水。因此一切设计以保证流量为目的。在蒸汽量足够且能量完全输出的情况下,影响流量和回流量的因素的有涡轮排气口数、下层体积、分压元件数和饱和冷凝器数。为了照顾大家,暂时只设计底面为正方形的标准工业蒸汽涡轮。底面最大为7*7(因为不能超出区块),因此

分压元件数 = 5*5 - 1 = 24

为保证处理1,800,000mB的蒸汽流量,需要

最小下层体积 = 1,800,000/24/1,280 = 58.59 = 59

最少饱和冷凝器数 = 1,800,000/64,000 = 28.125 = 29

最少涡轮排气口数 = 1,800,000/32,000 = 56.25 = 57

由于一层的内部容量为5*5 = 25,因此饱和冷凝器至少要占2层。除了顶面可以摆满25个涡轮排气口,侧面的每层只能再摆5*4 = 20个涡轮排气口,因此涡轮排气口至少需要占据侧面的(57 - 25)/20 = 1.6 = 2层。为保证下层体积,至少需要涡轮转子59/25 = 2.36 = 3个。因此在不考虑能量转化效率的情况下,最小需要一个7*8*7的工业蒸汽涡轮,其中2到4层放置3个涡轮转子,第5层放置分压元件,第6、7层放置2个电磁线圈和29个饱和冷凝器,第6层及以上的外壳放置57个涡轮排气口。

大部分人使用裂变反应堆是为了获得裂变产物——核废料,用于制作钚、钋,进而制作高级组件和反物质。如果你有其它的大功率发电设备,这样的设计就已经足够了。而若想用裂变反应堆发电,则还需要考虑超临界移相器的耗电。超临界移相器在钋充足的情况下,每消耗1,000mB钋就会消耗1GJ能量,而1,000mB钋需要10,000mB裂变燃料,燃烧会产生10,000*1,000,000 = 10,000,000,000J = 10GJ能量,因此若要保证裂变反应堆产能足够超临界移相器持续工作,则需要保证裂变产线的能量利用率超过10%。考虑到蒸汽能量效率只有20%,这需要工业蒸汽涡轮的能量乘数达到0.5,也就是至少14个涡轮叶片,7个涡轮转子。如果考虑裂变产线配套的生产裂变燃料、钠蒸汽、水的产线,还需要更多的涡轮转子。这里假定其它产能充足,裂变反应堆只用来获得裂变产物,工业蒸汽涡轮选用7*8*7的尺寸。

最后来计算一下精确数据。

假设裂变反应堆的温度为T。根据热量平衡,裂变燃料释放的热量 = 环境散热 + 传递给水的热量

90*1,000,000 = (T - 300)/20,010*296,000 + 1*(T - 373.15)*296,000*0.5

解得T = 981.19K,环境温度散失为(T - 300)/20,010 = 0.03403K/t = 34.04mK/t,蒸发水的量为(T - 373.15)*296,000*0.5*0.2/10 = 1,799,798.4685mB

燃料表面积 = 18*(4*5+2) = 396m^2,裂变燃料容量 = 裂变燃料组件数*8,000 = 720,000mB = 核废料箱容量。

工业蒸汽涡轮体积 = 7*8*7 = 392m^3,下层体积 = 7*3*7 = 147m^3,能量乘数 = 10*6/28 = 2.14,能量产出 = 能量乘数*蒸汽流量 = 3856711.0039J,最大蒸汽流量(被涡轮排气口限制) = 57*32,000 = 1,824,000mB,最大产能 = 3,908,571.4285J,蒸汽箱容量 = 下层体积*64,000 = 9,408,000mB,能量储存上限 = 体积*16,000,000 = 6,272,000,000J。

于是裂变反应堆以90mB/t满速运作时,GUI左上角统计信息显示:

产热统计

热容:296,000J/K

燃料表面积:396m^2

沸腾效率:1.0

燃料统计

最大燃烧速率:90mB/t

速率限制:90.0mB/t

GUI中:

冷却液箱容量 = 51,200,000mB

燃油箱容量 = 720,000mB

已加热的冷却液箱容量 = 512,000,000mB

废水箱容量 = 720,000mB

状态:激活

消耗速度:90.0

加热速率:在1,799,798mB/t与1,799,799mB/t之间反复横跳

温度:981.19K

损坏:0%

GUI左下角温度卡

散失:34.04mK/t

单位:K

工业蒸汽涡轮数据:

GUI左上角涡轮参数:

储罐容积:147

蒸汽处理

分散器数量:24

排气口:57

产出

涡轮叶片数:6

电磁线圈数:2

最大产出:3.90MJ

最大水输出:1,856,000mB/t

GUI中:

产出:3.85MJ

蒸汽流量:在1,799,798mB/t与1,799,799mB/t之间反复横跳

容量:9,408,000mB

最大流量:1,824,000mB/t

能量储存上限 = 6.27GJ

至此,一个小型裂变产线就已经全部设计完成。Mek热力学-第2张图片

聚变产业

由于聚变反应端口的换热机制理解得不够清楚,暂不设计聚变产业的例子。各位玩家可以参照裂变产业的设计原理和思路设计,或干脆随心所欲,因为聚变产业无放射性,没有任何危险。

附录

不同结构的热容器数据


结构名称热容器数量热容热导热阻是否环境换热是否邻近换热可用面
基础热导线缆11510连接面
高级热导线缆115400连接面
精英热导线缆1158,000连接面
终极热导线缆115100,000连接面
固体燃料加热器1100510所有
电阻型加热器11005100所有
量子传送装置每个频道1个111,000热量配置界面中的输入/输出面
热力发电机1105100(底面为0)底面
热力蒸馏塔1层数*10010是(独特)热力蒸馏阀门外侧面
裂变反应堆1外壳数*1,0001010,000是(独特)裂变反应堆端口外侧面
热力锅炉1外壳数*501100,000是(独特)锅炉阀门外侧面
聚变反应堆外壳11101,000,000是(独特)

聚变反应堆端口与聚变反应堆外壳共用1101,000,000

外侧面

聚变反应堆等离子体1100不定义不定义