Even in those purely theoretical-physical problems you are referring to, the own scale of a subsystem may have some arbitrary relations with the “outer” scales. But enter material world, and applying Buckingham’s theorem is getting difficult. Let’s take your example.
the spring has spring constant k
which is not constant at all, but depends on temperature (and probably other factors). So let’s assume the dependence k(T) is known, and we are building a thermometer out our oscillator. The T(k) is empirically approximated by some polynomial of temperature. What should I take for natural units?
Just off the top of the internal package I’m working on right now: The pressure of saturated water vapor.
Dirty formula
function buck_eq(temp::T) where T<:Unitful.Temperature
Tc = temp |> u"°C" |> ustrip
aw = 6.1121
bw = 18.678
cw = 257.14
dw = 234.5
return aw * exp((bw - Tc/dw) * Tc/(Tc + cw)) * u"hPa"
end
LOL! If you look in the history of the wikipedia article on the Arden Buck equation you’ll find that I wrote the initial article in 2007! blast from the past. I needed something for looking at water vapor in building materials and did some research then summarized it on the wiki page. Small world!
Ideally, Buck would have expressed his model in a more explicitly nondimensional form. I’m happy to show how dimensionless form for such things could work well but it’s offtopic, if a moderator wants to split this thread to a new offtopic one we could continue there? Otherwise maybe send me a DM?
The short version is you’re working with conditions not far from freezing at atmospheric pressure so you’d probably use dimensionless temp T’ = T/T_ice and Pressure as P’ = P/P_atm and then do the algebra to rearrange his equation a little. You might also choose P’ = P/P_0 where P_0 is the vapor pressure of water in equilibrium with ice at 0 C and atmospheric pressure.
For his equation this would put T’ in the range about [0.7, 1.18] and the P’ would also be in unit type ranges.
Oh nice, they split off our topic, so I can say here what I said in DM, which is basically that YES you want to nondimensionalize everything, but NO you don’t usually do that in a separate way for every subsystem of a complex problem.
When things have multiple scales it’s definitely possible to find that in dimensionless terms, some of the values are by design near 1, and others are “small parameters” or “large parameters”.
When you’re just taking a published correlation equation and using it, of course it’s not necessarily great to rewrite the published equations, but you can still do things like:
function buck_eq_ND(tempND)
tC = NDtoC(tempND)
... Published Celsius buck equation stuff here ...
press_hPa ...
press_ND = hPatoND(press_hPa)
end
So that you can use the temperature scales appropriate for your real problem (dimensionless) while invoking the published equation which only works in units of C.