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)
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)