Jump to content

[1.12.x] SystemHeat - a replacement for the CoreHeat system (November 20)


Nertea

Recommended Posts

Been fixing Waterfall bugs for a while but starting to think about work on this again. I thought a lot about the problem we're discussing and perhaps there is no functional reason for there to be loop temperature modifiers like the compressor at all. There should simply be cross-loop heat transfer 'exchangers'. An Exchanger would subtract heat from one loop and add it to the other (you choose the direction). Then you can have a cold loop and a hot loop.

  • An Exchanger subtracts a configurable amount of heat flux from Loop A and adds it to Loop B
  • An Exchanger adds heat to Loop B at the temperature of Loop A
  • An Exchanger can increase the temperature of its heat output for a power cost.

This seems to get at the main use case, which is creating loops that run hotter than they should be allowed based on their members (Loop B can be very hot). Anything i'm missing here?

 

On 8/14/2020 at 10:24 PM, danfarnsy said:

Loop IDs bumped enough times get to Loop ID **Not Found**, after which it won't increment to 0 again.

Ok, they should 'wrap' to 0 after 10. I suppose fundamentally there's no reason they couldn't go to 2,147,483,647 though. I can change that.

On 8/14/2020 at 10:24 PM, danfarnsy said:

I don't intend to be argumentative about the sources and radiators balance, since you explained your concern about simulation, but I just wanted to still give the feedback that it feels weird to have a system that is perfectly balanced at 805 K, deactivate a radiator for a moment while the system climbs to 1005 K, then turn that radiator back on, and have the system be in perfect equilibrium at 1005 K as well, even though the radiators are hotter. Should radiators balanced with sources ought to be able to bring temperature back to equilibrium at Loop nominal temp?

I mean it's worth thinking about. My main concern isn't weirdness or thermodynamics in this case (the result is the same either way) but user predictability. 

 

 

Link to comment
Share on other sites

2 hours ago, Nertea said:

There should simply be cross-loop heat transfer 'exchangers'. An Exchanger would subtract heat from one loop and add it to the other (you choose the direction). Then you can have a cold loop and a hot loop.

  • An Exchanger subtracts a configurable amount of heat flux from Loop A and adds it to Loop B
  • An Exchanger adds heat to Loop B at the temperature of Loop A
  • An Exchanger can increase the temperature of its heat output for a power cost.

This seems to get at the main use case, which is creating loops that run hotter than they should be allowed based on their members (Loop B can be very hot). Anything i'm missing here?

Yeah, that's probably a better way to do it than the two-temperature thing I mentioned last.

I'd add to that two things though:
- Call it a heat pump instead of a heat exchanger (the term more accurately represents what you're describing)
- In order to not violate the laws of thermodynamics, have the pump always consume power to move heat from cold to hot (this means the pump itself would also necessarily produce a small amount of heat).

Link to comment
Share on other sites

7 hours ago, WarriorSabe said:

Yeah, that's probably a better way to do it than the two-temperature thing I mentioned last.

I'd add to that two things though:
- Call it a heat pump instead of a heat exchanger (the term more accurately represents what you're describing)
- In order to not violate the laws of thermodynamics, have the pump always consume power to move heat from cold to hot (this means the pump itself would also necessarily produce a small amount of heat).

I like exchanger mostly because it's quite clear in my mind what it does (exchange heat), but the name is not really important at this stage. 

The second, yeah that's probably going to happen, but again, needs to be communicated well and not overcomplicated to the player.

Link to comment
Share on other sites

17 hours ago, Nertea said:

Been fixing Waterfall bugs for a while but starting to think about work on this again. I thought a lot about the problem we're discussing and perhaps there is no functional reason for there to be loop temperature modifiers like the compressor at all. There should simply be cross-loop heat transfer 'exchangers'. An Exchanger would subtract heat from one loop and add it to the other (you choose the direction). Then you can have a cold loop and a hot loop.

  • An Exchanger subtracts a configurable amount of heat flux from Loop A and adds it to Loop B
  • An Exchanger adds heat to Loop B at the temperature of Loop A
  • An Exchanger can increase the temperature of its heat output for a power cost.

This seems to get at the main use case, which is creating loops that run hotter than they should be allowed based on their members (Loop B can be very hot). Anything i'm missing here?

I like the idea. A few things I'm thinking about:

Currently, the nominal temperature of a loop is determined by heat source parts, like drills, ISRUs, reactors. Radiators just try to get rid of heat in excess, e.g. you can't use radiators to make an 800 K reactor 650 K (though you could use the current compressor part for that). Since radiators don't determine the preferred nominal temperature of a loop, what happens with a loop that only has radiators on it, with an exchanger pumping to it? Does the exchanger count as a source on Loop B with its own preferred nominal temp? Does the exchanger draw more electrical power to pump as Loop B gets that much hotter than Loop A? And if so, does that cause a reactor on Loop A to increase throttle, providing more heat that needs to be rejected, creating feedback in Loop B?

Link to comment
Share on other sites

4 hours ago, danfarnsy said:

I like the idea. A few things I'm thinking about:

Currently, the nominal temperature of a loop is determined by heat source parts, like drills, ISRUs, reactors. Radiators just try to get rid of heat in excess, e.g. you can't use radiators to make an 800 K reactor 650 K (though you could use the current compressor part for that). Since radiators don't determine the preferred nominal temperature of a loop, what happens with a loop that only has radiators on it, with an exchanger pumping to it? Does the exchanger count as a source on Loop B with its own preferred nominal temp? Does the exchanger draw more electrical power to pump as Loop B gets that much hotter than Loop A? And if so, does that cause a reactor on Loop A to increase throttle, providing more heat that needs to be rejected, creating feedback in Loop B?

Let's try to firm the definition up a bit in response to these questions.

  • An Exchanger is a part which connects two Loops (A and B). The direction can be changed. 
  • An Exchanger subtracts heat flux from Loop A and adds it to Loop B, if Loop B's temperature is below its nominal temperature
    • Example: Loop A has a reactor and no radiators, with an excess heat flux of 200 kW. The Exchanger will subtract 200 kW from Loop A and add 200 KW to Loop B. Loop A is now stable, and Loop B requires another 200 kW of heat rejection capacity
  • An Exchanger has an outlet temperature into Loop B equal to the (nominal?) temperature of Loop A
    • Example: Loop A has a reactor with outlet temperature of 800K. The Exchanger will have an outlet temperature of 800K into Loop B. 
  • An Exchanger can change the outlet temperature into Loop B according to the player's demands. This consumes power in proportion to the increase or decrease in temperature, and also adds heat flux in proportion to the change in temperature.
    • Example: Loop A has a reactor with an outlet temperature of 800K. The player wishes to raise the temperature of Loop B to 1200K. They set the temperature adjustment of the Exchanger to +400K. The Exchanger now will have an outlet temperature of 1200K into Loop B.  However, the cost of increasing the temperature by 400 K is 800 kW. The Exchanger is now subtracting 200 kW from Loop A, adding this 200 kW to Loop B, and adding 800 kW to Loop B. Loop A is now stable, and Loop B requires another 1000 kW of heat rejection at 1200K. 
Link to comment
Share on other sites

4 hours ago, Nertea said:

Let's try to firm the definition up a bit in response to these questions.

This cleared up a lot. Thank you.

I'm looking forward to testing when it's available. I'm thinking of a few use cases I expect to backfire. Here's one: ISRU on Loop A operates at 450 K. Reactor and radiators are stable on Loop B at 800 K, and have an extra 200 kW radiative capacity. I add the exchanger between A and B, sending 200 kW of heat to B. The exchanger has an outlet temperature of 450 K on Loop B, so now loop B has a nominal loop temperature of 625 K (average between reactor and exchanger), making the radiators on B less efficient and failing to actually reject the extra heat. The reactor then overheats and shuts down. This sounds like fun.

Link to comment
Share on other sites

20 hours ago, Nertea said:

I like exchanger mostly because it's quite clear in my mind what it does (exchange heat)

I know I'm probably getting pedantic at this point, but I feel like the term Heat Pump is also clear in what it does - it pumps heat from one place to another. 
The term heat pump is also used irl for things that do what you describe (move heat from cold to hot) while the term heat exchanger does not (it's something that enhances the normal passive flow of heat).

Unless you wish to further this particular discussion, that's all I really have to say; terminology is just important to me.

Link to comment
Share on other sites

13 hours ago, danfarnsy said:

This cleared up a lot. Thank you.

I'm looking forward to testing when it's available. I'm thinking of a few use cases I expect to backfire. Here's one: ISRU on Loop A operates at 450 K. Reactor and radiators are stable on Loop B at 800 K, and have an extra 200 kW radiative capacity. I add the exchanger between A and B, sending 200 kW of heat to B. The exchanger has an outlet temperature of 450 K on Loop B, so now loop B has a nominal loop temperature of 625 K (average between reactor and exchanger), making the radiators on B less efficient and failing to actually reject the extra heat. The reactor then overheats and shuts down. This sounds like fun.

Hope it works out - I think cross-loop transfer is definitely an advanced feature that is not needed in most use cases, but does add depth for the expert user. I like that kind of feature. 

11 hours ago, WarriorSabe said:

I know I'm probably getting pedantic at this point, but I feel like the term Heat Pump is also clear in what it does - it pumps heat from one place to another. 
The term heat pump is also used irl for things that do what you describe (move heat from cold to hot) while the term heat exchanger does not (it's something that enhances the normal passive flow of heat).

Unless you wish to further this particular discussion, that's all I really have to say; terminology is just important to me.

It is indeed a bit pedantic. I'd wager you're probably unhappy with a bunch of terminology in my mods then...

Edited by Nertea
Link to comment
Share on other sites

  • 2 weeks later...

Some new fixes pushed. This will be the last version before 'real' release packages.

  • Some more fixes to loop simulation edge cases
  • It is now possible to change sim rate in the editor (default before was 100x)
  • Removed the old debug overlay (not useful anymore)
  • Removed compressor part and module
  • Added exchanger part and module (as described earlier)
  • More localization updates
Link to comment
Share on other sites

  • 1 month later...

The first version controlled release has been uploaded to GitHub.

Important changes

  • Some more fixes to loop simulation edge cases
  • Ability to turn on/off individual loops in the UI
  • Loop reporting information in the UI
  • Bugfixes to compatibility patches

Quick look at the UI reporting info:

Capture.PNG

Edited by Nertea
Link to comment
Share on other sites

@Nertea

    // must be unique
    moduleID = converter1

Looking through the config files, does this need to be unique across all parts, or only within the part? (Can I have two sizes of ISRU that both have an ID of converter1, for example)

Im planning on perhaps submitting a generic patch for ISRU and drills, I think I can base heat output on electric charge consumed, and defaulting to 500K outlet temp, as that is what you chose for all the stock ISRU options. (It would not overwrite systemheat modules, of course).

Then, manual patches can be applied where things should be different, such as in high temp 'smelting' processes, like lithium or uranium extraction.

 

Also, it might be a good idea to give nuculear engines Module RadioactiveStorageContainer , in order for them to be refueled by kerbal engineers.

 

Link to comment
Share on other sites

2 hours ago, toric5 said:

Looking through the config files, does this need to be unique across all parts, or only within the part? (Can I have two sizes of ISRU that both have an ID of converter1, for example)

It should be unique within a part, between parts doesn't matter.

2 hours ago, toric5 said:

Im planning on perhaps submitting a generic patch for ISRU and drills, I think I can base heat output on electric charge consumed, and defaulting to 500K outlet temp, as that is what you chose for all the stock ISRU options. (It would not overwrite systemheat modules, of course).

Then, manual patches can be applied where things should be different, such as in high temp 'smelting' processes, like lithium or uranium extraction.

Yes this sounds good. I don't know if I've balanced the patches right yet, so be aware that might change.

2 hours ago, toric5 said:

Also, it might be a good idea to give nuculear engines Module RadioactiveStorageContainer , in order for them to be refueled by kerbal engineers.

Uh yea good point, that is in the NFe patch but not this.

Link to comment
Share on other sites

SystemHeat 0.1.1. Bunch of major issues fixed here.

  • Fixed issue with map vector camera not being reset when entering map view (messing up orbit lines)
  • Fixed some issues with ModuleSystemHeatEngine contributing to loop max temperatures despite being off
  • Fixed global thermal scaling being set to 0.025x what was intended, causing UI confusion
  • Fixed some cases of NREs where parts were destroyed
  • Tweaked behaviour of radiators to allow cooling when nominal temperatures are low but actual temperatures are high
  • Thermal summary in toolbar window now turns orange when a value is bad
  • Turned off PAW debug by default
Link to comment
Share on other sites

SystemHeat 0.1.3

  • Worked on localization of things not previously localized (reactor panel, toolbar panel, ModuleHeatSink)
  • Added a UI button to charge fusion reactors in the reactor panel
  • Reactor/Heat toolbar buttons should now hide when looking at a vessel without reactors or heat modules
  • More random bugfixes
Link to comment
Share on other sites

There doesnt seem to be a way to change the power output of a reactor post launch. In the VAB, there is the power output slider like there used to be in NFE. However, once launched, reactor power setting seems fixed. Is this intentional?

Link to comment
Share on other sites

23 hours ago, darthgently said:

Ok.  I'd guess it would cool the tank to some degree in the real world, but maybe not significantly

The way I've modeled the plugin in CryoTanks is that the cryocooler is built into the tank, so it's just an electricity and mass tax on the tank. You could easily write a SystemHeat boilofff module that required maintenance of particular temperatures to prevent boiloff. I don't think I'll be doing it though, can get into details as to why. 

19 hours ago, toric5 said:

There doesnt seem to be a way to change the power output of a reactor post launch. In the VAB, there is the power output slider like there used to be in NFE. However, once launched, reactor power setting seems fixed. Is this intentional?

That's correct, reactors auto-adjust output now (with a minimum rate)

Link to comment
Share on other sites

Fundamentally in systemheat model they would be heat generators with an ideal temperature lower than everything else in the game. They'd always be in their own loop. The radiator power needed would be low, and there's nothing interesting to do with those parameters. Every ship would have a single separate loop with one radiator to handle boiloff. All that does is add a small mass and power tax, and needs the overhead of running the heat sim, and another part or two for the ship. Additional complexity for little gain.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...