Jump to content

How to prevent the kiln (and batteries - and maybe more) from emitting heat - Problem Found - Thanks R9MX4


Recommended Posts

Problem Found - Bug has been in code for over a year, just surfaces in odd places when not expected. Thanks @R9MX4.

-----

Maybe this bug has already been noticed and commented on, but I couldn't find it after a 10 minute search though the bug reports.  If you are aware of the bug, please let me know so I don't double post it.  

I wanted to try cooking oil into petroleum using the kiln. I prepared a nice vacuum chamber, added a small amount of oil, built my kiln out of gold, and qued up 20 recipes.  Waited, waited, and waited, and the temp kept.... dropping!!!!  What? The temp dropped to match the input coal and clay,. No heat was ever created. 

5c2fd1572a4db_Screenshotfrom2019-01-0414-04-14.thumb.png.cae2154a2922c348fbb0b13eb944a3fd.png

So I played around with this a bit more.  I build a kiln out of gold, iron, copper, steel, niobium, and thermium. I placed the kiln on a 1kg layer of oil, petro, water, and added a control layer of just vacuum.

5c2fd1604be8b_Screenshotfrom2019-01-0414-32-54.thumb.png.88eb034c24fcbf1c9b1ce0fd72d2495d.png

With vacuum above each liquid, the kiln produces zero (update) very little/not the correct amount of heat when making ceramics. In complete vacuum, the kiln produces heat. With gas above the kiln (the screenshot above), it produces some an appropriate amount of heat. Odd things are happening. I'll report this bug later today or tomorrow, after it's been discussed and details are flushed out.

Current exploit: Build kiln in vacuum. Add a very thin layer of liquid to bottom layer (water, crude, petro). Then use kiln as much as you want with almost zero heat output. Place it next to your vacuum fridges, and your refrigerator doubles as a furnace. 

 

 

Link to comment
Share on other sites

Not really related to the issue you're seeing, but also kiln related.. The priority seems to be broken on kilns.  I set mine to priority 1, with other operate tasks at 7-8, and my operator dupes will continue to non-stop deliver to the kiln.  Can't imagine it's related, but who knows.

Link to comment
Share on other sites

Will do.  First, the problem isn't just the kiln.  It's also batteries (and I'm gonna guess most every other heat producing building).  Both of the below produce the same result.  Simple battery heat solution... Just store the battery in a 1 layer liquid vacuum storage unit.  

5c2fd7aa80f0c_Screenshotfrom2019-01-0414-58-08.png.8fea4176049a667ef1e741686e035180.png 5c2fd7ab7e557_Screenshotfrom2019-01-0414-58-19.png.acf4d8dcf53c7963b7dfdb52a8cd1e85.png

44 minutes ago, Kabrute said:

put kiln on vacuum airflow tiles, then retry

Done.  Here are the results.

5c2fd919eb37d_Screenshotfrom2019-01-0415-06-28.png.ebb60723bf32da9b2cac37a7c458409d.png  5c2fd918e6b2a_Screenshotfrom2019-01-0415-06-19.png.d3199378b13301047530a16cbf744031.png

For the kiln and battery, same behavior. As long as there is a thin layer of crude covering the bottom leftmost tile, then no heat at all heat output is reduced. 

5c2fd917e87b0_Screenshotfrom2019-01-0415-06-08.png.802047cc3e7b86bbe51dd39433aed736.png

I mopped up the crude under this battery. The temp started rising rapidly. I replaced the igneous tiles with airflow, and the temp rise was much more rapid (expected). 

Link to comment
Share on other sites

1 hour ago, Nitroturtle said:

Not really related to the issue you're seeing, but also kiln related.. The priority seems to be broken on kilns.  I set mine to priority 1, with other operate tasks at 7-8, and my operator dupes will continue to non-stop deliver to the kiln.  Can't imagine it's related, but who knows.

file a bug report please, there was a similar issue with outhouses set to priority 1, dupes would drop everything to clean them like they were at priority 10

most often seemed to happen on save/load at the time

 

@mathmanican  the airflow vacuum tile prevents building contents from interacting with the floor
should have no discernable impact on batteries unless battery metal is being counted as a content.....

Link to comment
Share on other sites

2 hours ago, Nitroturtle said:

Not really related to the issue you're seeing, but also kiln related.. The priority seems to be broken on kilns.  I set mine to priority 1, with other operate tasks at 7-8, and my operator dupes will continue to non-stop deliver to the kiln.  Can't imagine it's related, but who knows.

The kiln uses the operate priority for delivery. Similar to how the electric grill uses cook priority for deliveries. It seems intended but IMO it`s a bad idea. I think delivery tasks should be unified. I`m pretty sure it`s unrelated to the original topic though.

Link to comment
Share on other sites

2 hours ago, ONIfreak said:

Is it not that vacuum doesn't transfer the heat? Like kilns will be hot but they will not heat up area around?

The kiln should be heating itself up (it can't transfer the heat to anything in a vacuum).  This is precisely what happens in a pure vacuum.  The crazy part is that 350g of crude oil completely kills the heat generation.  The heat isn't going into the 350g (wouldn't take much heat to boil that little anyway).  

The crazy part here is that a tiny layer of liquid is preventing the machine from generating most of its heat.

Maybe I should state, for clarification, that I am no longer trying to make petro this way.  Instead, this now gives anyone a way to create things that should be really hot, without having to worry about the heat at all. Why bother trying to cool things down if you can just skip the heat generation completely?  Has anyone else noticed this?

Link to comment
Share on other sites

1 hour ago, mathmanican said:

Instead, this now gives anyone a way to create things that should be really hot, without having to worry about the heat at all. Why bother trying to cool things down if you can just skip the heat generation completely?  Has anyone else noticed this?

I'm guessing this apply to kiln only?

Link to comment
Share on other sites

47 minutes ago, R9MX4 said:

temperature, mass.

Haha.  I have redone several experiments today.  The battery issue might be 100% just temperature and mass.  However, the kiln issue is definitely not. Here's 3 scenarios. All began with 293.2K temps on all items involved. 

  1. Kiln in vaccuum. 20 recipes.  Temp raises several hundred K on kiln. 
  2. Kiln in 1kg hydrogen, trapped by viscogel and insulated insulation. 20 recipes completed.  Kiln, hydrogen, 200kg viscogel, all rise in temp (as expected - probably exactly the same as (1).
  3. Kiln in 1kg crude oil, vacuum above. Temp raises some, but less than (2). This makes no sense as the viscogel is basically the heat buffer in (2), but we're missing 200kg of liquid in this setup.  The Kiln's temp output is bugged. 

Anyone want to conduct a similar experiment? 

Link to comment
Share on other sites

14 minutes ago, R9MX4 said:

BTW, I suggest you surround your klin by neutronium.

I'll repeat the experiment with neutronium later if needed, and even add a control room with pure vacuum. 

The experiment below was done with insulated insulation.

5c303e096b91f_Screenshotfrom2019-01-0422-02-08.thumb.png.6f17aebd772aaf6c1788276b35bdbaf4.png

All three kilns start out the same. All temps of liquids, solids are 293K, if spawned by sandbox.  Buildings all start at 293.2K. Viscogel is 100kg per tile at 293K. I spawned in 500kg coal and 2000kg clay to the right of the sweepers so I could run 20 ceramics.  Here are the three setups.

  1. Hydrogen 1kg total in the 6 spots (so 166.7g in each) spot.  
  2. Crude oil. 1kg total. 625g in left spot, 375g in right. 
  3. Water. 30.2g left, 32.9g right. Practically none. 

After 20 ceramic runs, you would expect the water area to have the highest temp (less than 70g of water.. is there any argument here)?  However, here is the conclusion.

  1. Hydrogen and 200kg viscogel have temps around 298K. The ceramic in that room is 294.4K.
  2. Crude oil temp is 295.5.  The ceramic in that room is 295.3K.  The ceramic temp difference might be the reason why the crude is colder than the viscogel and hydrogen.  However.....
  3. Water temp is 294.7. The ceramic in that room is 294.5K (basically the same as the hydrogen room).

The oddest is the water room. Lower temp than crude, ceramic is basically the exact same as hydrogen room, but the hydrogen room clearly rose a bunch in temp with the viscogel being the heat sink.  Where did the heat go?  Best guess... Bugged somewhere in the last few updates (or maybe there all along). I can think of tons of other experiments to run to track down the bug. This reminds me of the pitcher pump bug (which by the way is still there, and a couple pitcher pumps in 800kg crude oil work great as a heat sink to cool a gold volcano). 

Is anyone else interested in tracking this bug down, or has anyone seen it at work?

Link to comment
Share on other sites

11 minutes ago, mathmanican said:

I'll repeat the experiment with neutronium later if needed, and even add a control room with pure vacuum. 

The experiment below was done with insulated insulation.

5c303e096b91f_Screenshotfrom2019-01-0422-02-08.thumb.png.6f17aebd772aaf6c1788276b35bdbaf4.png

All three kilns start out the same. All temps of liquids, solids are 293K, if spawned by sandbox.  Buildings all start at 293.2K. Viscogel is 100kg per tile at 293K. I spawned in 500kg coal and 2000kg clay to the right of the sweepers so I could run 20 ceramics.  Here are the three setups.

  1. Hydrogen 1kg total in the 6 spots (so 166.7g in each) spot.  
  2. Crude oil. 1kg total. 625g in left spot, 375g in right. 
  3. Water. 30.2g left, 32.9g right. Practically none. 

After 20 ceramic runs, you would expect the water area to have the highest temp (less than 70g of water.. is there any argument here)?  However, here is the conclusion.

  1. Hydrogen and 200kg viscogel have temps around 298K. The ceramic in that room is 294.4K.
  2. Crude oil temp is 295.5.  The ceramic in that room is 295.3K.  The ceramic temp difference might be the reason why the crude is colder than the viscogel and hydrogen.  However.....
  3. Water temp is 294.7. The ceramic in that room is 294.5K (basically the same as the hydrogen room).

The oddest is the water room. Lower temp than crude, ceramic is basically the exact same as hydrogen room, but the hydrogen room clearly rose a bunch in temp with the viscogel being the heat sink.  Where did the heat go?  Best guess... Bugged somewhere in the last few updates (or maybe there all along). I can think of tons of other experiments to run to track down the bug. This reminds me of the pitcher pump bug (which by the way is still there, and a couple pitcher pumps in 800kg crude oil work great as a heat sink to cool a gold volcano). 

Is anyone else interested in tracking this bug down, or has anyone seen it at work?

Machine in vacuum generates less heat.

 

Both of phenomena are more obvious to liquid tepidizer because liquid tepidizer produces most(around 98.4%) of its heat to surroundings directly.

--------------------------------------------------------------
Note: Kiln exhausts 80% of its heat to surroundings directly.

Other transfers

  • building/cell transfer of "excess" heat: each cell receives the excess heat, divided by the area of the building, and this transferred heat is proportionally scaled down if the cell as less than 1.5kg of content (source: C# code)

-----------------------------

Note: relating code

StructureTemperatureComponents

Spoiler

	public override void Sim200ms(float dt)
	{
		int num = 0;
		int num2 = 0;
		int num3 = 0;
		List<StructureTemperatureHeader> list;
		List<StructureTemperaturePayload> list2;
		base.GetDataLists(out list, out list2);
		ListPool<int, StructureTemperatureComponents>.PooledList pooledList = ListPool<int, StructureTemperatureComponents>.Allocate();
		pooledList.Capacity = Math.Max(pooledList.Capacity, list.Count);
		ListPool<int, StructureTemperatureComponents>.PooledList pooledList2 = ListPool<int, StructureTemperatureComponents>.Allocate();
		pooledList2.Capacity = Math.Max(pooledList2.Capacity, list.Count);
		ListPool<int, StructureTemperatureComponents>.PooledList pooledList3 = ListPool<int, StructureTemperatureComponents>.Allocate();
		pooledList3.Capacity = Math.Max(pooledList3.Capacity, list.Count);
		for (int num4 = 0; num4 != list.Count; num4++)
		{
			StructureTemperatureHeader value = list[num4];
			if (Sim.IsValidHandle(value.simHandle))
			{
				pooledList.Add(num4);
				if (value.dirty)
				{
					pooledList2.Add(num4);
					value.dirty = false;
					list[num4] = value;
				}
				if (value.isActiveBuilding)
				{
					pooledList3.Add(num4);
				}
			}
		}
		foreach (int index in pooledList2)
		{
			StructureTemperaturePayload structureTemperaturePayload = list2[index];
			StructureTemperatureComponents.UpdateSimState(ref structureTemperaturePayload);
		}
		foreach (int index2 in pooledList2)
		{
			if (list2[index2].pendingEnergyModifications != 0f)
			{
				StructureTemperaturePayload value2 = list2[index2];
				SimMessages.ModifyBuildingEnergy(value2.simHandleCopy, value2.pendingEnergyModifications, 0f, 10000f);
				value2.pendingEnergyModifications = 0f;
				list2[index2] = value2;
			}
		}
		foreach (int index3 in pooledList3)
		{
			StructureTemperaturePayload value3 = list2[index3];
			if (value3.operational == null || value3.operational.IsActive)
			{
				num++;
				if (!value3.isActiveStatusItemSet)
				{
					num3++;
					value3.primaryElement.GetComponent<KSelectable>().SetStatusItem(Db.Get().StatusItemCategories.OperatingEnergy, this.operatingEnergyStatusItem, value3.simHandleCopy);
					value3.isActiveStatusItemSet = true;
				}
				value3.energySourcesKW = this.AccumulateProducedEnergyKW(value3.energySourcesKW, value3.OperatingKilowatts, BUILDING.STATUSITEMS.OPERATINGENERGY.OPERATING);
				if (value3.ExhaustKilowatts != 0f)
				{
					num2++;
					Extents extents = value3.GetExtents();
					int num5 = extents.width * extents.height;
					float num6 = value3.ExhaustKilowatts * dt / (float)num5;
					for (int i = 0; i < extents.height; i++)
					{
						int num7 = extents.y + i;
						for (int j = 0; j < extents.width; j++)
						{
							int num8 = extents.x + j;
							int num9 = num7 * Grid.WidthInCells + num8;
							float a = Grid.Mass[num9];
							float num10 = Mathf.Min(a, 1.5f) / 1.5f;
							float kilojoules = num6 * num10;
							SimMessages.ModifyEnergy(num9, kilojoules, value3.maxTemperature, SimMessages.EnergySourceID.StructureTemperature);
						}
					}
					value3.energySourcesKW = this.AccumulateProducedEnergyKW(value3.energySourcesKW, value3.ExhaustKilowatts, BUILDING.STATUSITEMS.OPERATINGENERGY.EXHAUSTING);
				}
			}
			else if (value3.isActiveStatusItemSet)
			{
				num3++;
				value3.primaryElement.GetComponent<KSelectable>().SetStatusItem(Db.Get().StatusItemCategories.OperatingEnergy, null, null);
				value3.isActiveStatusItemSet = false;
			}
			list2[index3] = value3;
		}
		pooledList3.Recycle();
		pooledList2.Recycle();
		pooledList.Recycle();
	}

 

This line is the key point

float num10 = Mathf.Min(a, 1.5f) / 1.5f;

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Please be aware that the content of this thread may be outdated and no longer applicable.

×
  • Create New...