我的世界【拯救强迫症】Mek热力蒸馏塔产量&热量计算
近日,在玩某整合包的时,强迫症犯了,盐水的产量和锂的产量没有办法做到一个较好的配比。mcmod,ftbwiki什么都看了一圈也没个公式。由于整合包发电、合成等套娃很多,也无法通过直接拉满产量的方式以绝后患,遂出此篇文章。
幸好,Mek是开源的,我们在源码中找到了这样一行:
MekanismLang.FLUID_PRODUCTION.translate(Math.round(multiblock.lastGain * 100D) / 100D));
产出由lastGain获取,进而发现
if (tempMultiplier > 0 && tempMultiplier < 1) {
lastGain = 1F / (int) Math.ceil(1 / tempMultiplier);
} else {
lastGain = tempMultiplier;
}
好家伙你也套娃
tempMultiplier = (Math.min(MAX_MULTIPLIER_TEMP, getTemperature()) - HeatAPI.AMBIENT_TEMP) * MekanismConfig.general.evaporationTempMultiplier.get() *
((double) height() / MAX_HEIGHT);
在Mek的配置文件(Config)中可以找到
# Temperature to amount produced ratio for Thermal Evaporation Tower.
D:EvaporationTempMultiplier=0.1
# Max Temperature of the Thermal Evaporation Tower.
D:EvaporationMaxTemp=3000.0
此外一个常量的定义是
public static final double AMBIENT_TEMP = 300;
以上均为源码,翻译一下,产量的计算公式为:
产量=(温度-300)*0.1*(蒸馏塔高度/18) 结果四舍五入保留两位小数
温度单位为K,最大高度为18,温度最高可以达到3300K,所以最高产量是3000*0.1*1=300mB/t
将上方两张图数据代入:
(336.85-300)*0.1*(5/18)=1.02361,四舍五入后就是1.02
(925.1-300)*0.1*(3/18)=10.4183,四舍五入后就是10.42
与图上结果是相符的
配置文件中的EvaporationTempMultiplier即为算式中的0.1倍率项,修改此项可以直接提高产量,并等倍放大产量的最大量
配置文件中的EvaporationMaxTemp是算式中 温度可以达到的最高值-300 ,将温度上限提高可以提高产量的最大量
但我光知道产量没用啊,温度怎么控制?有电阻加热/太阳能加热/热力加热等多种方式(注意后面两个均是MekG这个附属加的)
public double getTemperature() {
return getHeat() / getHeatCapacity();
}
public double getHeat() {
initStoredHeat();
return storedHeat;
}
private void initStoredHeat() {
if (storedHeat == -1) {
//If the stored heat hasn't been initialized yet, update the stored heat based on initial capacity
storedHeat = heatCapacity * getAmbientTemperature();
}
}
protected double getAmbientTemperature() {
return ambientTempSupplier == null ? HeatAPI.AMBIENT_TEMP : ambientTempSupplier.getAsDouble();
}
public static final double AMBIENT_TEMP = 300;
public double getAsDouble() {
return getTemperature(null);
}
public double getTemperature(@Nullable Direction side) {
int index = side == null ? EnumUtils.DIRECTIONS.length : side.ordinal();
double biomeAmbientTemp = ambientTemperature[index];
if (biomeAmbientTemp == -1) {
World world = worldSupplier.get();
if (world == null) {
return HeatAPI.AMBIENT_TEMP;
}
BlockPos pos = positionSupplier.get();
if (side != null) {
pos = pos.relative(side);
}
return ambientTemperature[index] = HeatAPI.getAmbientTemp(world, pos);
}
return biomeAmbientTemp;
}
public static double getAmbientTemp(@Nullable IWorldReader world, BlockPos pos) {
if (world == null) {
return AMBIENT_TEMP;
}
return getAmbientTemp(world.getBiome(pos).getTemperature(pos));
}
public static double getAmbientTemp(double biomeTemp) {
//See implementation note about this range. If any other mods do have valid more extreme temperatures,
// we may want to consider expanding this range to [-10, 10]
biomeTemp = Math.max(Math.min(biomeTemp, 5), -5);
return AMBIENT_TEMP + 25 * (biomeTemp - 0.8);
}
到这里的话才一半,仅能看到群系温度计算,而另一半是HeatCapacity
看了一圈,我没找到具体的代码...
我知道,没人喜欢看源码,但源码是必须的,但以下内容不全部是通过源码获得的(因为存疑)
关于温度,其中一个重要的数值便是群系的温度,这个可以直接通过查询wiki的方式知晓,例如沙漠是2.0
这会直接影响你摆出来的热力蒸馏塔的初始温度,初始温度=300 + 25 * (群系温度 – 0.8)
在沙漠中是330K;平原温度是0.8,但结果是306K;森林里换个位置温度就不一样,这具体是什么原因我暂且蒙在鼓里,为什么不符合公式我也没明白
具体产热:
电阻加热装置在1000RF/t的情况下,温度平衡时的温度流失为2.49K/t,此时电阻空转温度为4585.4K+300K=488.5K
1个电阻加热装置与热力蒸馏塔相连的情况下,设置为10RF/t,热力蒸馏塔的流失为8.31mK/t,电阻加热装置流失为67.96uK/t,蒸馏塔的温度为307.54K;100RF/T,热力蒸馏塔流失为83.09mK/t,电阻加热装置流失为679.65uK/t,蒸馏塔温度为461.26K
3*83.09+0.67965=24.91965 这样计算的话流失与空转时的流失较为符合
10RF/t的耗电会提高1.54K的温度,每多加一台10RF/的电阻加热装置提高1.54K的温度,100RF/T的耗电提高155.26K的温度
果然还只是半人半灵的半吊子吗?哎