I have a system where something akin to damage occurs over time. The damage goes from level 0 to level 10 in a type of scurve (starting at 0-ish at time=0, and ending at 10-ish after some period). This scurve is slightly stretched and different at different intensities. The whole surface can be modelled with a smooth function using some kind of made up extruded scurve. One simple example being:
def damage_func(duration_at_constant_intensity, intensity, *optimal_parameters):
return extruded_scurve(duration_at_constant_intensity, intensity, *optimal_parameters)
With an example of an extruded scurve: