#! /bin/zsh # # this file: # https://dataswamp.org/~incal/conf/.zsh/air # # thanks bildramer at ##math, freenode: # the simplest way for 2D data is bilinear # interpolation: given that the next lowest data # point is (x0, y0) and the next highest is # (x1, y1) you calculate s = (x - x0)/(x1 - x0) and # t = (y - y0)/(y1 - y0). then the output is # (1 - s)((1 - t)f00 + t*f01) + s((1 - t)f10 + t*f11) # # Let's model an inflated bicycle tube/tire in the form of # a torus, as in this figure: [1] # # We use the ISO ETRTO notation for bicycle tire sizes. # For example, a typical 29-er MTB tire is 57-622, where 57 is # the tire width and 622 the rim BSD (Bead Seat Diameter) in # mm. See [2]. Let's denote the width w and the BSD b. # # Comparing [1] and [2], we understand that # # r = w/2 # # and # # R = b/2 + r # # R = b/2 + w/2 # # with the volume of a torus being # # V = 2 * pi^2 * R * r^2 # # V = 2 * pi^2 * (b/2 + w/2) * (w/2)^2 # # V = pi^2w(b+w^2)/4 # # Now let's put all that into a function to evermore do # the math for us: bike-tire-volume () { local width=$1 local bsd=$2 local pi=3.1415 local vmm=$(( $pi**2 * $width * ($bsd + $width**2) / 4 )) local vcm=$(units -t "$vmm mm3" cm3) local rvcm=$(( rint($vcm) )) printf "V = %d cm3\n" $rvcm return $rvcm } # Example invocation, our MTB 29-er: # # $ bike-tire-volume 57 622 # $ V = 544 cm3 # # Next step... # # We assume that air behaves like an ideal gas at reasonable # preassure levels with respect to bike tires, and at the # given temperature. That means we can use the ideal gas law, # PV = nRT (even tho air isn't an ideal gas, but it's close # enough for our purposes. [3]) # # Finally, we change the units into SI and then compute. # # SUMMARY # # The air, in mols, in a bicycle tire is # # n = Ppi^2w(b + w^2)/4RT # # where # # P is the air pressure (in liters; her inputted in psi) # w .. the tire width in mm # b .. the rim BSD (in mm) # R .. the gas constant, 0.0822 l-atm/mol-K # T .. the temperature, arbitrarily set to 290.45K (+17.3C) [4] # # Now we put everything together... bike-tire-air () { local width=$1 local bsd=$2 local psi=$3 bike-tire-volume $width $bsd local vcm=$? local p=$(units -t "$psi psi" atm) local v=$(units -t "$vcm cm3" liters) local t=290.45 local r=0.0821 local n=$(( ($p * $v) / ($r * $t) )) printf "%f moles of air gas\n" $n } # Here are some interesting results, all using common bicycle # tire/preassure configurations as indata. # # MTB 29-er: 57-622, 65 psi # $ bike-tire-air 57 622 65 # $ V = 544 cm3 # $ 0.100902 moles of air gas # # road bike, tire at maximum psi: 23-622, 145 psi # $ bike-tire-air 23 622 145 # $ V = 65 cm3 # $ 0.026895 moles of air gas # # we compare the road bike to the MTB: # (/ 0.026895 0.100902) ; 26% of MTB tire air in the road bike tire # # road bike, a realistic psi for a ~80 kg rider: 23-622, 115 psi # $ bike-tire-air 23 622 115 # V = 65 cm3 # 0.021330 moles of air gas # (/ 0.021330 0.100902) ; 21% v MTB # # road bike: is it worth upgrading from 23 mm (115 psi) to # 25 mm (100 psi)? # $ bike-tire-air 23 622 115 # V = 65 cm3 # 0.021330 moles of air gas # $ bike-tire-air 25 622 100 # V = 77 cm3 # 0.021972 moles of air gas # (- 100 (* 100 (/ 0.021330 0.021972))) ; only +2.9%! :O # so two new, expensive tires equals a mere (* 2 2.9) ; +5.8% # # some budget tires I have on a fixie # $ bike-tire-air 28 622 85 # V = 97 cm3 # 0.023528 moles of air gas # (/ 0.023528 0.100902) ; 23% v. MTB # Also, that is only a +2% increase compared to the # 23 mm road tire which is supposedly 5 mm less wide. But this # may not be shocking tho given the steep drop from 115 # to 85 psi in air preassure. # # [1] https://www.mathsisfun.com/geometry/torus.html # # [2] https://dataswamp.org/~incal/bike/tire-size.png # # [3] In theory, air isn't an ideal gas. To compute # a meticulous result one would have to include Z, the air # compressibility factor: PV = nRTZ (for an ideal gas, # Z is 1 and thus falls from the equation). However, even # with air, at temperature T = 300 K (+27C) and preassure # P between 5-10 bar (73-145 psi), Z is between # 0.9974-0.9987. So for the purpose of this document air # is practically ideal. # # # # # [4] 290.45K or +17.3C is the average temperature in Liège in # July, the hottest month of the year. #