function electrical_mobility_air (                                 {cm2 V-1 s-1}
                    Millibar,
                    Celsius,
                    ParticleDensity {g cm-3, for cluster ions typically 2.08},
                    ParticleCharge  {e, for cluster ions 1},
                    MassDiameter    {nm} : real) : real; {NB: Massdiameter > 0.2 nm!}

  function Omega11 (x : real) : real; {*(1,1)*(T*) for (*-4) potential}
    var p, q : real;                  {and elastic-specular collisions}
    begin
      if x > 1 then Omega11 := 1 + 0.106 / x + 0.263 / exp ((4/3) * ln (x))
      else begin p := sqrt (x); q := sqrt (p);
        Omega11 := 1.4691 / p - 0.341 / q + 0.181 * x * q + 0.059 end;
    end;

  const GasMass = 28.96; {amu} Polarizability = 0.00171; {nm3}
        a = 1.165; b = 0.483; c = 0.997; {ISO15900 slip factor coefficients}
        ExtraDistance = 0.115 {nm}; TransitionDiameter = 2.48 {nm};
  var   Temperature, GasDiameter, Viscosity, FreePath, DipolEffect,
        DeltaTemperature, CheckMark, ParticleMass, CollisionDistance,
        Kn, Omega, s, x, y, r1, r2 : real;
  begin
    if MassDiameter < 0.2 then {emergency exit}
    begin electrical_mobility_air := 1e99; exit; end;
    Temperature := Celsius + 273.15;
    r1 := Temperature / 296.15; r2 := 406.55 / (Temperature + 110.4);
    Viscosity {microPa s} := 18.3245 * r1 * sqrt (r1) * r2;
    FreePath {nm} := 67.3 * sqr (r1) * (1013 / millibar) * r2;
    ParticleMass {amu} := 315.3 * ParticleDensity * exp (3 * ln (MassDiameter));
    DeltaTemperature := Temperature;
    repeat
      CheckMark := DeltaTemperature;
      GasDiameter {nm} := 0.3036 * (1 + exp (0.8 * ln (44 / DeltaTemperature)));
      CollisionDistance {nm} := MassDiameter / 2 + ExtraDistance +
                                 GasDiameter / 2;
      DipolEffect := 8355 * sqr (ParticleCharge) * Polarizability /
                            sqr (sqr (CollisionDistance));
      DeltaTemperature := Temperature + DipolEffect;
    until abs (CheckMark - DeltaTemperature) < 0.01;
    if ParticleCharge = 0 then Omega := 1
                          else Omega := Omega11 (Temperature / DipolEffect);
    Kn := FreePath / CollisionDistance;
    if Kn < 0.03 {underflow safe} then y := 0 else y := exp (- c / Kn);
    x := (273.15 / DeltaTemperature) *
         exp (3 * ln (TransitionDiameter / MassDiameter));
    if x > 30 {overflow safe} then s := 1
      else if x > 0.001
      then s := 1 + exp (x) * sqr (x / (exp (x) - 1)) * (2.25 / (a + b) - 1)
      else {underflow safe}  s := 1 + (2.25 / (a + b) - 1);
    electrical_mobility_air := 1.6022 * ParticleCharge *
                             ((2.25 / (a + b)) / (Omega + s - 1)) *
                               sqrt (1 + GasMass / ParticleMass) *
                             (1 + Kn * (a + b * y)) /
                             (6 * PI * Viscosity * CollisionDistance);
  end;