示例#1
0
 def SingleParticleDerivativeVector(self, kstate, particle, t):
     #print("\n\n\nInput XYZ state: ", self.state)
     if self.interaction == False:
         rad = farts.xy2rad(kstate[particle])
     elif self.interaction == 'ClassicalNBody':
     	rad = farts.xy2rad(kstate[particle],
             	           self.SingleParticleNewtonianForce(particle, 100, self.cr))
     elif self.interation == True:
     	raise ValueError('Ambiguous interaction specification')
     r = rad[0,0]
     theta = rad[0,1]
     phi = rad[0,2]
     if(r > 999 or r < self.event_horizon+0.2):
         if particle not in self.cleanup:
             self.cleanup.append(particle)
     f = np.array(([rad[0,0],rad[1,0]],
                   [rad[0,1],rad[1,1]],
                   [rad[0,2],rad[1,2]]))
     #print("\nInput RTP state: ", f)
     rdd = (-4*pow(self.M,3) + f[0,0]*(4*pow(self.M,2) + f[0,0]*(-self.M + self.M*pow(f[0,1],2) + f[0,0]*pow(-2*self.M + f[0,0],2)*(pow(f[1,1],2) + pow(f[2,1],2)*pow(np.sin(f[1,0]),2)))))/(pow(f[0,0],3)*(-2*self.M + f[0,0]))
             
     Tdd = (-2*f[0,1]*f[1,1])/f[0,0] + np.cos(f[1,0])*pow(f[2,1],2)*np.sin(f[1,0])
     
     Pdd = (-2*(f[0,1] + (np.cos(f[1,0])/np.sin(f[1,0]))*f[0,0]*f[1,1])*f[2,1])/f[0,0]
     
     # The Kerr metric
     G = np.array([[f[0,1],rdd],
                   [f[1,1],Tdd],
                   [f[2,1],Pdd]])
     #print("\nRTP G: ",G)
     #print("G: \n", G)
     xyG = farts.G2xy(G,r,theta,phi)
     #print("\nXYZ G: ",xyG)
     #print("\nxyG: \n",xyG)
     return(xyG)
示例#2
0
 def MakeInitialConditions(self):
     self.cleanup = []
     vecs = np.zeros((self.start_particles,2,2))
     for vec in xrange(self.start_particles):
         r = ((12-5)*np.random.random())+5
         phi = 2*np.pi*np.random.random()
         phid = ((0.1-0.001)*np.random.random())+0.001
         vecs[vec] = [[r*np.cos(phi), r*np.sin(phi)],
                      [-r*np.sin(phi)*phid, r*np.cos(phi)*phid]]
     return(vecs)