Advertisement
Geometrian

Bremsstrahlung Beam Calculations

Dec 7th, 2018
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.93 KB | None | 0 0
  1. from math import *
  2.  
  3.  
  4.  
  5. eps0 = 8.854187817e-12 #F/m
  6. c    = 299792458.0 #m/s
  7. u    = 1.660539040e-27 #Da (unified atomic mass unit)
  8.  
  9. def lorentz(vel):
  10.     beta = vel / c
  11.     gamma = (1.0-beta*beta) ** -0.5
  12.     return gamma
  13.  
  14. def kinetic_energy(kg,vel):
  15.     gamma = lorentz(vel)
  16.     return kg * c*c * (gamma-1.0)
  17. def kinetic_energy_invmass(energy,vel):
  18.     gamma = lorentz(vel)
  19.     return energy / ( c*c * ( gamma - 1.0 ) )
  20.  
  21. ##def parallel_decel_1q( vel,decel ):
  22. ##    #https://en.wikipedia.org/wiki/Bremsstrahlung#Total_radiated_power
  23. ##    a = decel
  24. ##    q = 1.6021766208e-19
  25. ##    gamma = lorentz(vel)
  26. ##    power = q*q * a*a * (gamma**6) / ( 6.0*pi * eps0 * c*c*c )
  27. ##    return power
  28.  
  29. def parallel_decel_1q( vel0, accel ):
  30.     #https://en.wikipedia.org/wiki/Bremsstrahlung#Total_radiated_power
  31.     a = accel
  32.     v_0 = vel0
  33.     q = 1.6021766208e-19
  34.    
  35. ##    def integrated(t):
  36. ##        u = (v_0 + a*t)/c
  37. ##        A = ( 10.0*u - 6*u*u*u ) / ( (u*u-1.0)**2 )
  38. ##        B = -3.0 * log(1.0-u)
  39. ##        C =  3.0 * log(1.0+u)
  40. ##        return (1.0/16.0)*( A + B + C )
  41. ##    energy = q*q * a / ( 6.0*pi * eps0 * c*c*c )
  42. ##    energy *= integrated(vel0/-a) - integrated(0.0)
  43.  
  44.     def get_power(vel):
  45.         gamma = lorentz(vel)
  46.         power = q*q * a*a * (gamma**6) / ( 6.0*pi * eps0 * c*c*c )
  47.         return power
  48.     def get_vel(t):
  49.         return v_0 - a*t
  50.     stopping_time = particle_speed / -accel
  51.     N = 1000000
  52.     dt = stopping_time / float(N)
  53.     energy = 0.0
  54.     for i in range(N):
  55.         t = (i+0.5)*dt
  56.         energy += get_power(get_vel(t))*dt
  57.    
  58.     return energy
  59.  
  60. def parallel_decel( kg, vel,accel ):
  61.     num_atoms = kg / (12.011 * u) #Carbon
  62.     num_protons = 6 * num_atoms
  63.     num_electrons = num_protons
  64.     return (num_protons+num_electrons)*parallel_decel_1q( vel,accel )
  65. def parallel_stop( kg, vel,stop_dist ):
  66.     #d = v v / (2 a), so:
  67.     #2 a d = v*v
  68.     #a = v*v / (2 d)
  69.     accel = -vel*vel / (2.0*stop_dist)
  70.     return parallel_decel( kg, vel,accel )
  71.  
  72.  
  73.  
  74. power_beam     = 1.0e9
  75. particle_speed = 0.3 * c
  76. particle_mass  = 1.0e-9 * 1.0e-3
  77. stopping_dist  = 0.001
  78.  
  79.  
  80.  
  81. accel = -particle_speed*particle_speed / (2.0*stopping_dist)
  82. mass_flow_rate = kinetic_energy_invmass(power_beam,particle_speed)
  83. particles_rate = mass_flow_rate / particle_mass
  84. kinetic_energy_per_particle = kinetic_energy(particle_mass,particle_speed)
  85. bremsstrahlung_per_particle = parallel_stop(particle_mass, particle_speed,stopping_dist)
  86. bremsstrahlung_beam_avg     = bremsstrahlung_per_particle * particles_rate
  87.  
  88. def fmt(value):
  89.     s = "%g" % value
  90.     if "e" in s:
  91.         s = "%.4g" % value
  92.         mantissa,exponent = s.split("e")
  93.         s = mantissa + "⨯10"
  94.         if exponent[0]=="-": s+="⁻"
  95.         exponent = exponent[1:]
  96.         started = False
  97.         for c in exponent:
  98.             c = "⁰¹²³⁴⁵⁶⁷⁸⁹"[int(c)]
  99.             if c != "⁰":
  100.                 started = True
  101.                 s += c
  102.             elif started:
  103.                 s += c
  104.     return s
  105. print("""
  106. Power (beam):                        %s W
  107. Particle speed:                      %s c
  108. Particle mass:                       %s kg
  109. Stopping distance:                   %s m
  110.  
  111. Mass flow rate:                      %s kg/s
  112. Particles rate:                      %s particles/s
  113. Particle stopping time:              %s s
  114. Particle acceleration:               %s m/s²
  115. Kinetic energy (per particle):       %s J
  116. Bremsstrahlung (per particle):       %s J (= %s %% of KE)
  117. Bremsstrahlung (beam temporal avg.): %s W"""%(
  118.     fmt( power_beam ),
  119.     fmt( particle_speed / c ),
  120.     fmt( particle_mass ),
  121.     fmt( stopping_dist ),
  122.    
  123.     fmt( mass_flow_rate ),
  124.     fmt( particles_rate ),
  125.     fmt( particle_speed / -accel ),
  126.     fmt( accel ),
  127.     fmt( kinetic_energy_per_particle ),
  128.     fmt( bremsstrahlung_per_particle ), fmt( 100.0*bremsstrahlung_per_particle/kinetic_energy_per_particle ),
  129.     fmt( bremsstrahlung_beam_avg )
  130. ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement