#[inline]
pub fn pvefficiency_adr(
effective_irradiance: f64,
temp_cell: f64,
k_a: f64,
k_d: f64,
tc_d: f64,
k_rs: f64,
k_rsh: f64,
) -> f64 {
let g_ref = 1000.0;
let t_ref = 25.0;
let s = effective_irradiance / g_ref;
let dt = temp_cell - t_ref;
let s_o = 10.0_f64.powf(k_d + dt * tc_d);
let s_o_ref = 10.0_f64.powf(k_d);
let v = (s / s_o + 1.0).ln() / (1.0 / s_o_ref + 1.0).ln();
k_a * ((1.0 + k_rs + k_rsh) * v - k_rs * s - k_rsh * v * v)
}
#[inline]
pub fn huld(
effective_irradiance: f64,
temp_module: f64,
pdc0: f64,
k: [f64; 6],
) -> f64 {
let gprime = effective_irradiance / 1000.0;
let tprime = temp_module - 25.0;
let log_g = if gprime > 0.0 { gprime.ln() } else { 0.0 };
gprime
* (pdc0
+ k[0] * log_g
+ k[1] * log_g * log_g
+ k[2] * tprime
+ k[3] * tprime * log_g
+ k[4] * tprime * log_g * log_g
+ k[5] * tprime * tprime)
}