Skip to content

Instantly share code, notes, and snippets.

@vadimkantorov
Last active August 29, 2015 14:21
Show Gist options
  • Save vadimkantorov/2d6e8c10854166497389 to your computer and use it in GitHub Desktop.
Save vadimkantorov/2d6e8c10854166497389 to your computer and use it in GitHub Desktop.
open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames
open Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols
[<Measure>]
type mm =
static member perMeter = 1e+3<mm/m>
let pi = System.Math.PI
let epsilon_0 = 8.854187817e-12<F m^-1>
let elementary_charge = 1.602176565e-19<coulomb>
let R_1 = 6.0<mm> / mm.perMeter
let R_2 = 18.0<mm> / mm.perMeter
let E_d = 427.4<volt / m>
let r_a = R_1
let r_b = 9.0<mm> / mm.perMeter
let r_c = R_2
let r_d = 90.0<mm> / mm.perMeter
let q = elementary_charge
let m = 1.67262177774e-27<kg>
let sqr (x:float<_>) = x * x
let sigma = E_d * epsilon_0 * (sqr r_d) / (sqr R_1 + sqr R_2)
let q_1 = 4.0 * pi * sqr R_1 * sigma
let q_2 = 4.0 * pi * sqr R_2 * sigma
let C = 1.0 / (4.0 * pi * epsilon_0)
let phi r1 r2 = C * q_1 / r1 + C * q_2 / r2
let E_I r = C * 0.0<coulomb m^-2>
let E_II r = C * q_1 / sqr r
let E_III r = C * q_1 / sqr r + C * q_2 / sqr r
let E_a_in = E_I r_a
let E_a_ex = E_II r_a
let E_b = E_II r_b
let E_c_in = E_II r_c
let E_c_ex = E_III r_c
let omega_b = epsilon_0 * sqr E_b / 2.0
let phi_c = phi r_c r_c
let phi_d = phi r_d r_d
let phi_b = phi r_b r_c
let phi_a = phi r_a r_c
let W_b = q*(C*q_1 / r_b)
let A_bd = -(phi_d - phi_b)*q
let V_d = sqrt (q*(C * q_1 / r_d + C * q_2 / r_d) / (m / 2.0))
printfn "sigma = %A [10^-9 coulomb m^-2]" (float sigma / 1e-9)
let print_E s e = printfn "%s = %A [10^3 volt m^-1]" s (float e / 1e+3)
print_E "E_a_in" E_a_in
print_E "E_a_ex" E_a_ex
print_E "E_b" E_b
print_E "E_c_in" E_c_in
print_E "E_a_ex" E_c_ex
print_E "E_d" E_d
printfn "omega_b = %A [joule m^-3]" (float omega_b / 1e-5)
let print_phi s e = printfn "%s = %A [volt]" s e
print_phi "phi_a" phi_a
print_phi "phi_b" phi_b
print_phi "phi_c" phi_c
print_phi "phi_d" phi_d
let print_aw s e = printfn "%s = %A [10^-19 joule]" s (float e / 1e-19)
print_aw "W_b" W_b
print_aw "A_bd" A_bd
printfn "V_d = %A [10^6 m s^-1]" (float V_d / 1e+6)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment