function mechanical_mobility { air nitrogen } {velocity/force} (GasMass {amu}, { 28.96 28.02 } { (m/s) / fN } Polarizability {nm3}, { 0.00171 0.00174 } { 1e12 CGS } VisCon1 {nm}, { 0.3036 0.2996 } {JAS26, 1995} VisCon2 {K}, { 44 40 } {pp. 459-475} VisCon3, { 0.8 0.7 } {corrected 2011} Pressure {mb}, Temperature {K}, ParticleDensity {g cm-3, for cluster ions typically 2.08}, ParticleCharge {e, for cluster ions 1}, MassDiameter {nm} : real) : real; {NB: Multiply with 1.6022 to get electrical mobility of a single charged cluster or particle in cm2V-1s-1} 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 a = 1.165; b = 0.48; c = 1.001; {the slip factor coefficients} // a = 1.2; b = 0.5; c = 1; {old version} ExtraDistance = 0.115 {nm}; TransitionDiameter = 2.48 {nm}; var GasDiameter, MeanVelocity, Viscosity, FreePath, DipolEffect, DeltaTemperature, CheckMark, ParticleMass, CollisionDistance, Kn, Omega, s, x, y : real; begin if MassDiameter < 0.2 then // emergency exit begin mechanical_mobility := 1e99; exit; end; Viscosity {microPa s} := 0.02713 * sqrt (GasMass * Temperature) / sqr (VisCon1 * (1 + exp (VisCon3 * ln (VisCon2 / Temperature)))); MeanVelocity {m/s} := 145.5 * sqrt (Temperature / GasMass); FreePath {nm} := (166251 * Viscosity * Temperature) / (GasMass * Pressure * MeanVelocity); ParticleMass {amu} := 315.3 * ParticleDensity * exp (3 * ln (MassDiameter)); DeltaTemperature := Temperature; repeat CheckMark := DeltaTemperature; GasDiameter {nm} := VisCon1 * (1 + exp (VisCon3 * ln (VisCon2 / DeltaTemperature))); CollisionDistance {nm} := MassDiameter / 2 + ExtraDistance + GasDiameter / 2; DipolEffect := 8355 * sqr (ParticleCharge) * Polarizability / sqr (sqr (CollisionDistance)); {NB: erratum (ParticleCharge) in JAS is corrected} 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); {NB! erratum in JAS (y := 1) corrected!} 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); mechanical_mobility := ((2.25 / (a + b)) / (Omega + s - 1)) * sqrt (1 + GasMass / ParticleMass) * (1 + Kn * (a + b * y)) / (6 * PI * Viscosity * CollisionDistance); end;