function mass_diameter_air ( {Tammet95m} millibar, Celsius, density {g cm-3, for cluster ions typically 2}, charge {e, for cluster ions 1}, Z {cm2 V-1 s-1} : real) : real; {Uses external function "electrical_mobility_air"} var y0, dx, d1, d2 : real; function y (d : real) : real; begin // nnn := nnn + 1; y := 1.6022 * charge / electrical_mobility_air (millibar, Celsius, density, charge, d); end; begin y0 := 1.6022 * charge / Z; d1 := ((0.6 + sqrt (0.36 + 200 * 150 / y0)) / (150 / y0) - 0.35) / (1.1 + 0.001 * z * z * z * charge * charge); d2 := d1; while y (d1) > y0 do d1 := d1 / 1.2; while y (d2) < y0 do d2 := d2 * 1.2; repeat dx := (d1 + d2) / 2; if y (dx) > y0 then d2 := dx else d1 := dx; until abs (d2 - d1) / d1 < 1e-6; mass_diameter_air := (d2 + d1) / 2; end;