///|
pub(all) struct Nasa7Segment {
  range : TemperatureRange
  a1 : Double
  a2 : Double
  a3 : Double
  a4 : Double
  a5 : Double
  a6 : Double
  a7 : Double
} derive(Debug, Eq)

///|
pub fn Nasa7Segment::new(
  range~ : TemperatureRange,
  a1~ : Double,
  a2~ : Double,
  a3~ : Double,
  a4~ : Double,
  a5~ : Double,
  a6~ : Double,
  a7~ : Double,
) -> Nasa7Segment {
  { range, a1, a2, a3, a4, a5, a6, a7 }
}

///|
pub fn Nasa7Segment::cp_over_r(
  self : Nasa7Segment,
  temperature : Double,
) -> Double raise ThermoError {
  self.range.validate(temperature)
  let t2 = temperature * temperature
  let t3 = t2 * temperature
  let t4 = t3 * temperature
  self.a1 + self.a2 * temperature + self.a3 * t2 + self.a4 * t3 + self.a5 * t4
}

///|
pub fn Nasa7Segment::h_over_rt(
  self : Nasa7Segment,
  temperature : Double,
) -> Double raise ThermoError {
  self.range.validate(temperature)
  let t2 = temperature * temperature
  let t3 = t2 * temperature
  let t4 = t3 * temperature
  self.a1 +
  self.a2 * temperature / 2.0 +
  self.a3 * t2 / 3.0 +
  self.a4 * t3 / 4.0 +
  self.a5 * t4 / 5.0 +
  self.a6 / temperature
}

///|
pub fn Nasa7Segment::s_over_r(
  self : Nasa7Segment,
  temperature : Double,
) -> Double raise ThermoError {
  self.range.validate(temperature)
  let t2 = temperature * temperature
  let t3 = t2 * temperature
  let t4 = t3 * temperature
  self.a1 * @math.ln(temperature) +
  self.a2 * temperature +
  self.a3 * t2 / 2.0 +
  self.a4 * t3 / 3.0 +
  self.a5 * t4 / 4.0 +
  self.a7
}