factoring out heat calculation under Interface IHeatCalculator