coriolis icon indicating copy to clipboard operation
coriolis copied to clipboard

Calculate ship heat

Open SapiensAnatis opened this issue 7 years ago • 10 comments

So, I don't know if feature requests are appropriate for GitHub, however I can't think of a better place, so here goes:

Coriolis is great, but if I had to state an issue with it, it's that there are too many numbers and there isn't enough demonstration. The latest update added the pips which was nice, but I think there could still be more work on this.

I use it primarily for combat builds, so I'd like it if I could view my capacitors and heat as I changed the pips and fired weapons, maybe even charged my FSD. The "distributor drains in" numbers are nice for things like lasers and multicannons, but don't really make sense in the context of plasma accelerators or railguns.

Perhaps this it out of scope and more suited for another site (taking a Coriolis link as input data). I figure it's worth suggesting anyway.

SapiensAnatis avatar May 01 '17 21:05 SapiensAnatis

Unfortunately heat is one area that is not well-understood in Elite so we have no model to work from. It is something that we are discussing with Frontier to see if we can obtain an idea of how it works but right now there's not a lot we can work with.

cmdrmcdonald avatar May 05 '17 12:05 cmdrmcdonald

I've worked a lot with stealth and making ships have very cold idle heat; my corvette and python for example run idle at 14% heat and the Vette still has 2000mj of shields - and I've made it so my exploration ships can sit fuel scooping at a steady 65% heat without gaining anything extra.

From testing the determining factors for temperature are

  1. Heat added to ship from power draw
  2. Module usage (guns, thrusters, etc)
  3. External heat (proximity to star, special effects from attacking weapons)
  4. Power Plant's Heat Dissipation (PP class makes no difference)
  5. The Ship's innate Heat Dissipation capability

Dissipation is calculated from Power Draw, Power Plant Efficiency and Ship Efficiency And given a "heat load", dissipation results in %heat gained or lost per second

BeckyYork avatar May 18 '17 13:05 BeckyYork

Relevant forum thread:

https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics

andrewgoz avatar May 24 '17 07:05 andrewgoz

I've been doing some sleuthing into the math behind heat. There's a fairly simple equation for the resting heat of a ship that could be really helpful to see in Coriolis. The folks in the thread linked above have done a ton of good work.

Resting Heat = SQRT( ( ( Power Plant Current Output * Power Plant Efficiency ) / Ship Heat Capacity ) / 0.2 )

This doesn't account for thrusters' thermal load modifier.

figrin avatar Nov 21 '18 17:11 figrin

@figrin I have just added to beta.coriolis.io a resting heat column based on that formula.

jessb321 avatar Nov 21 '18 20:11 jessb321

Thanks @willyb321 , it's awesome that this is being tested out for implementation.

It looks like it looks like the numbers the code is using aren't quite right.

  • Resting temperature isn't being adjusted when the power plant's efficiency is modified with engineering.
  • Resting temperature isn't being adjusted when a ship's modules are being changed.
  • Temperatures in general also appear too high.

I should clarify that the formula I referenced earlier, power Plant Current Output should be current power draw from modules. This should be equal to the Retracted Power Draw that Coriolis shows at the bottom of the screen, minus the power draw from thrusters (these only draw full power when in use).

Ship Heat Capacity is a value attached to each ship, and may need to be added to each ship's data in coriolis. There's a fairly up to date table showing each ship's heat capacity as determined through community testing here: https://docs.google.com/spreadsheets/d/1Evn8wnlO4-LS0IkuBz_uuYI_QtMMyX0epsfuzX90vnA/edit?usp=sharing

figrin avatar Nov 21 '18 21:11 figrin

Thanks, will take a look soon

jessb321 avatar Nov 21 '18 22:11 jessb321

What is wrong with the calculations used by EDSY (edshipyard.com)? EDSY is licenced Creative Commons Attribution-NonCommercial 4.0 and everything is calculated on the client side.

So, why not extract the heat calculations from there?

code from EDSY:

var getEquilibriumHeatLevel = function(heatdismax, thmload) {
	// https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics
	// https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics?p=6399855&viewfull=1#post6399855
	return sqrt(thmload / heatdismax);
}; // getEquilibriumHeatLevel()


var getTimeUntilHeatLevel = function(heatcap, heatdismax, thmload, heatlevel0, heatlevel) {
	// https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics?p=6519883&viewfull=1#post6519883
	heatdismax /= heatcap;
	if (!thmload) {
		var C = -1 / (heatdismax * heatlevel0);
		return ((1 / (heatdismax * heatlevel)) + C);
	}
	thmload /= heatcap;
	var sqrtAdivB = sqrt(heatdismax / thmload);
	var sqrtAmulB = sqrt(heatdismax * thmload);
	var C = -atanh(heatlevel0 * sqrtAdivB) / sqrtAmulB
	return ((atanh(heatlevel * sqrtAdivB) / sqrtAmulB) + C);
}; // getTimeUntilHeatLevel()


var getHeatLevelAtTime = function(heatcap, heatdismax, thmload, heatlevel0, seconds) {
	// https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics?p=6519883&viewfull=1#post6519883
	heatdismax /= heatcap;
	if (!thmload) {
		var C = -1 / (heatdismax * heatlevel0);
		return ((1 / (seconds - C)) / heatdismax);
	}
	thmload /= heatcap;
	var sqrtAdivB = sqrt(heatdismax / thmload);
	var sqrtAmulB = sqrt(heatdismax * thmload);
	var C = -atanh(heatlevel0 * sqrtAdivB) / sqrtAmulB
	return (tanh((seconds - C) * sqrtAmulB) / sqrtAdivB);
}; // getHeatLevelAtTime()


var getEffectiveWeaponThermalLoad = function(thmload, distdraw, wepcap, weplvl) {
	// https://forums.frontier.co.uk/showthread.php/286628-Research-Detailed-Heat-Mechanics?p=6408594&viewfull=1#post6408594
	return (thmload * (1 + 4 * min(max(1 - (wepcap * weplvl - distdraw) / wepcap, 0), 1)));
}; // getEffectiveWeaponThermalLoad()

Jacco-V avatar Apr 24 '19 10:04 Jacco-V

Thanks for looking up the code. There is nothing wrong with these calculations but putting them in the right place and making sure, that we have all the data points needed to do the calculations is extra work and not our current top priority. As the development of ed-forge progresses, I'm sure that we will have a look at this.

felixlinker avatar Apr 29 '19 11:04 felixlinker

I have a working implementation (based on EDSY). I plan on cleaning up the code a bit more, but I should be able to provide a pr soon. Is a pr still welcome? or is this codebase considered stale?

Jacco-V avatar Sep 24 '23 21:09 Jacco-V