Advertisement
Guest User

gas.py

a guest
Dec 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. #Gas.py
  2. from vpython import*
  3.  
  4. #size_N,size_O,size_C,size_H=65E-12,60E-12,70E-12,25E-12
  5. size_N,size_O,size_C,size_H=65E-3,60E-3,70E-3,25E-3
  6. #m_N,m_O,m_C,m_H=14/(6E23),16/(6E23),12/(6E23),1/(6E23)
  7. m_N,m_O,m_C,m_H=14,16,12,1
  8.  
  9. bondlen_N2,bondlen_O2,bondlen_CO2,bondlen_H2=145E-3,148E-3,116E-12,74E-12
  10. dN2=2.5*size_N #
  11. #k_N2,k_O2,k_CO2,k_H2=
  12. k_bond=186000
  13. dt=1E-16
  14.  
  15. class N2_molecule:
  16. def __init__(self,pos,axis):
  17. self.Na=sphere(pos=pos,radius=size_N,color=color.red)
  18. self.Nb=sphere(pos=pos+axis,radius=size_N,color=color.red)
  19. self.bond=cylinder(pos=pos,axis=axis,radius=size_N/2.0,color=color.white)
  20. self.Na.m=m_N
  21. self.Nb.m=m_N
  22. self.bond.k=k_bond
  23.  
  24. def bond_force_on_Nb(self):
  25. return self.bond.k*(mag(self.bond.axis)-bondlen_N2)*norm(self.bond.axis)
  26.  
  27. def N2time_lapse(self,dt):
  28. self.Na.a=self.bond_force_on_Nb()/self.Na.m
  29. self.Nb.a=-self.bond_force_on_Nb()/self.Nb.m
  30. self.Na.v=self.Na.v+self.Na.a*dt
  31. self.Nb.v=self.Nb.v+self.Nb.a*dt
  32. self.Na.pos=self.Na.pos+self.Na.v*dt
  33. self.Nb.pos=self.Nb.pos+self.Nb.v*dt
  34. self.bond.axis=self.Nb.pos-self.Na.pos
  35. self.bond.pos=self.Na.pos
  36.  
  37. class O2_molecule:
  38. def __init__(self,pos,axis):
  39. self.Oa=sphere(pos=pos,radius=size_O,color=color.blue)
  40. self.Ob=sphere(pos=pos+axis,radius=size_O,color=color.blue)
  41. self.bond=cylinder(pos=pos,axis=axis,radius=size_O/2.0,color=color.white)
  42. self.Oa.m=m_O
  43. self.Ob.m=m_O
  44. self.bond.k=k_bond
  45.  
  46. def bond_force_on_Ob(self):
  47. return self.bond.k*(mag(self.bond.axis)-bondlen_O2)*norm(self.bond.axis)
  48.  
  49. def O2time_lapse(self,dt):
  50. self.Oa.a=self.bond_force_on_Ob()/self.Oa.m
  51. self.Ob.a=-self.bond_force_on_Ob()/self.Ob.m
  52. self.Oa.v=self.Oa.v+self.Oa.a*dt
  53. self.Ob.v=self.Ob.v+self.Ob.a*dt
  54. self.Oa.pos=self.Oa.pos+self.Oa.v*dt
  55. self.Ob.pos=self.Ob.pos+self.Ob.v*dt
  56. self.bond.axis=self.Ob.pos-self.Oa.pos
  57. self.bond.pos=self.Oa.pos
  58.  
  59. def collision(a1,a2):
  60. v1prime=a1.v-2*a2.m/(a1.m+a2.m)*(a1.pos-a2.pos)*dot(a1.v-a2.v,a1.pos-a2.pos)/mag(a1.pos-a2.pos)**2
  61. v2prime=a2.v-2*a1.m/(a1.m+a2.m)*(a2.pos-a1.pos)*dot(a2.v-a1.v,a2.pos-a1.pos)/mag(a2.pos-a1.pos)**2
  62. return v1prime,v2prime
  63.  
  64. if __name__=='__main__':
  65. a=N2_molecule(pos=vector(0,0,0),axis=vector(0.5*bondlen_N2,0,0))
  66. a.Na.v=vector(1.0,1.0,0)
  67. a.Nb.v=vector(2.0,-1.0,0)
  68. a.N2time_lapse(dt)
  69.  
  70. b=O2_molecule(pos=vector(0,2*size_N,0),axis=vector(bondlen_O2,0,0))
  71. b.Oa.v=vector(1.0,1.0,0)
  72. b.Ob.v=vector(2.0,-1.0,0)
  73. b.O2time_lapse(dt)
  74. print(a.bond_force_on_Nb(),b.bond_force_on_Ob())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement