83 def get_old(self, x,y,z,derivative,fComponent,dComponent):
88 r2 = r[0]*r[0]+r[1]*r[1]+r[2]*r[2]
93 r5 = (r2*r2*np.sqrt(r2))
94 rdotq=self.
q[0]*r[0] + self.
q[1]*r[1] +self.
q[2]*r[2]
95 B=( 3*r[fComponent]*rdotq-self.
q[fComponent]*r2)/r5
100 elif(derivative == 1):
102 if(dComponent==fComponent):
107 return -5*B*r[dComponent]/r2+(3*self.
q[dComponent]*r[fComponent] - 2*self.
q[fComponent]*r[dComponent] + 3*rdotq*sameComponent)/r5
146 def get(self, x,y,z,derivative,fComponent,dComponent):
153 r2 = r[0]*r[0]+r[1]*r[1]+r[2]*r[2]
168 rdotq=self.
q[0]*r[0] + self.
q[1]*r[1] +self.
q[2]*r[2]
169 B=( 3*r[fComponent]*rdotq-self.
q[fComponent]*r2)/r5
171 if(derivative == 0)
and (r1 <= self.
radius[0]):
175 if(derivative == 1)
and (r1 <= self.
radius[0]):
177 if(dComponent==fComponent):
184 return -5*B*r[dComponent]/r2+(3*self.
q[dComponent]*r[fComponent] - 2*self.
q[fComponent]*r[dComponent] + 3*rdotq*sameComponent)/r5
192 A[0] = (self.
q[1]*r[2]-self.
q[2]*r[1]) / (r2*r1)
193 A[1] = (self.
q[2]*r[0]-self.
q[0]*r[2]) / (r2*r1)
194 A[2] = (self.
q[0]*r[1]-self.
q[1]*r[0]) / (r2*r1)
199 S2 = 6.*Sx2*Sx2*Sx - 15.*Sx2*Sx2 + 10.*Sx2*Sx
200 dS2dr = -(30.*Sx2*Sx2 - 60.*Sx2*Sx + 30.*Sx2)/(self.
radius[1]-self.
radius[0])
210 dS2cart[0] = (r[0]/r1)*dS2dr
211 dS2cart[1] = (r[1]/r1)*dS2dr
212 dS2cart[2] = (r[2]/r1)*dS2dr
215 if(derivative == 0)
and (r1 > self.
radius[0]):
246 delS2crossA=np.zeros(3)
247 delS2crossA[0] = dS2cart[1]*A[2] - dS2cart[2]*A[1]
248 delS2crossA[1] = dS2cart[2]*A[0] - dS2cart[0]*A[2]
249 delS2crossA[2] = dS2cart[0]*A[1] - dS2cart[1]*A[0]
251 return S2*B + delS2crossA[fComponent]
253 elif(derivative == 1)
and (r1 > self.
radius[0]):
278 if(dComponent==fComponent):
284 delB = -5*B*r[dComponent]/r2 + (3*self.
q[dComponent]*r[fComponent] - 2*self.
q[fComponent]*r[dComponent] + 3*rdotq*sameComponent)/r5
290 delAx[0] = (-3./(r2*r2*r1))*(self.
q[1]*r[2]-self.
q[2]*r[1])*r[0]
291 delAx[1] = (-3./(r2*r2*r1))*(self.
q[1]*r[2]-self.
q[2]*r[1])*r[1] -self.
q[2]/(r2*r1)
292 delAx[2] = (-3./(r2*r2*r1))*(self.
q[1]*r[2]-self.
q[2]*r[1])*r[2] +self.
q[1]/(r2*r1)
293 delAy[0] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[0] +self.
q[2]/(r2*r1)
294 delAy[1] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[1]
295 delAy[2] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[2] -self.
q[0]/(r2*r1)
296 delAz[0] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[0] -self.
q[1]/(r2*r1)
297 delAz[1] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[1] +self.
q[0]/(r2*r1)
298 delAz[2] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[2]
306 deldS2dx[0] = ddidS2dr*r[0]*r[0] -(r[0]/(r2*r1))*dS2dr*r[0] + dS2dr/r1
307 deldS2dx[1] = ddidS2dr*r[0]*r[1] -(r[0]/(r2*r1))*dS2dr*r[1]
308 deldS2dx[2] = ddidS2dr*r[0]*r[2] -(r[0]/(r2*r1))*dS2dr*r[2]
309 deldS2dy[0] = ddidS2dr*r[1]*r[0] -(r[1]/(r2*r1))*dS2dr*r[0]
310 deldS2dy[1] = ddidS2dr*r[1]*r[1] -(r[1]/(r2*r1))*dS2dr*r[1] + dS2dr/r1
311 deldS2dy[2] = ddidS2dr*r[1]*r[2] -(r[1]/(r2*r1))*dS2dr*r[2]
312 deldS2dz[0] = ddidS2dr*r[2]*r[0] -(r[2]/(r2*r1))*dS2dr*r[0]
313 deldS2dz[1] = ddidS2dr*r[2]*r[1] -(r[2]/(r2*r1))*dS2dr*r[1]
314 deldS2dz[2] = ddidS2dr*r[2]*r[2] -(r[2]/(r2*r1))*dS2dr*r[2] + dS2dr/r1
317 ddS2crossA=np.zeros([3,3])
319 ddS2crossA[0][0] = deldS2dy[0]*A[2] + dS2cart[1]*delAz[0] - deldS2dz[0]*A[1] - dS2cart[2]*delAy[0]
320 ddS2crossA[0][1] = deldS2dy[1]*A[2] + dS2cart[1]*delAz[1] - deldS2dz[1]*A[1] - dS2cart[2]*delAy[1]
321 ddS2crossA[0][2] = deldS2dy[2]*A[2] + dS2cart[1]*delAz[2] - deldS2dz[2]*A[1] - dS2cart[2]*delAy[2]
323 ddS2crossA[1][0] = deldS2dz[0]*A[0] + dS2cart[2]*delAx[0] - deldS2dx[0]*A[2] - dS2cart[0]*delAz[0]
324 ddS2crossA[1][1] = deldS2dz[1]*A[0] + dS2cart[2]*delAx[1] - deldS2dx[1]*A[2] - dS2cart[0]*delAz[1]
325 ddS2crossA[1][2] = deldS2dz[2]*A[0] + dS2cart[2]*delAx[2] - deldS2dx[2]*A[2] - dS2cart[0]*delAz[2]
327 ddS2crossA[2][0] = deldS2dx[0]*A[1] + dS2cart[0]*delAy[0] - deldS2dy[0]*A[0] - dS2cart[1]*delAx[0]
328 ddS2crossA[2][1] = deldS2dx[1]*A[1] + dS2cart[0]*delAy[1] - deldS2dy[1]*A[0] - dS2cart[1]*delAx[1]
329 ddS2crossA[2][2] = deldS2dx[2]*A[1] + dS2cart[0]*delAy[2] - deldS2dy[2]*A[0] - dS2cart[1]*delAx[2]
331 return S2*delB + dS2cart[dComponent]*B + ddS2crossA[fComponent][dComponent]
336 def getX(self, x,y,z,derivative,fComponent,dComponent):
342 r2 = r[0]*r[0]+r[1]*r[1]+r[2]*r[2]
357 rdotq=self.
q[0]*r[0] + self.
q[1]*r[1] +self.
q[2]*r[2]
358 B=( 3*r[fComponent]*rdotq-self.
q[fComponent]*r2)/r5
360 if(derivative == 0)
and (x <= self.
radius[0]):
364 if(derivative == 1)
and (x <= self.
radius[0]):
366 if(dComponent==fComponent):
373 return -5*B*r[dComponent]/r2+(3*self.
q[dComponent]*r[fComponent] - 2*self.
q[fComponent]*r[dComponent] + 3*rdotq*sameComponent)/r5
381 A[0] = (self.
q[1]*r[2]-self.
q[2]*r[1]) / (r2*r1)
382 A[1] = (self.
q[2]*r[0]-self.
q[0]*r[2]) / (r2*r1)
383 A[2] = (self.
q[0]*r[1]-self.
q[1]*r[0]) / (r2*r1)
388 S2 = 6.*Sx2*Sx2*Sx - 15.*Sx2*Sx2 + 10.*Sx2*Sx
389 dS2dr = -(30.*Sx2*Sx2 - 60.*Sx2*Sx + 30.*Sx2)/(self.
radius[1]-self.
radius[0])
404 if(derivative == 0)
and (x > self.
radius[0]):
435 delS2crossA=np.zeros(3)
437 delS2crossA[1] = - dS2cart[0]*A[2]
438 delS2crossA[2] = dS2cart[0]*A[1]
440 return S2*B + delS2crossA[fComponent]
442 elif(derivative == 1)
and (x > self.
radius[0]):
467 if(dComponent==fComponent):
473 delB = -5*B*r[dComponent]/r2 + (3*self.
q[dComponent]*r[fComponent] - 2*self.
q[fComponent]*r[dComponent] + 3*rdotq*sameComponent)/r5
482 delAy[0] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[0] +self.
q[2]/(r2*r1)
483 delAy[1] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[1]
484 delAy[2] = (-3./(r2*r2*r1))*(self.
q[2]*r[0]-self.
q[0]*r[2])*r[2] -self.
q[0]/(r2*r1)
485 delAz[0] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[0] -self.
q[1]/(r2*r1)
486 delAz[1] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[1] +self.
q[0]/(r2*r1)
487 delAz[2] = (-3./(r2*r2*r1))*(self.
q[0]*r[1]-self.
q[1]*r[0])*r[2]
496 deldS2dx[0] = ddxdS2dx
510 ddS2crossA=np.zeros([3,3])
512 ddS2crossA[0][0] = 0.
513 ddS2crossA[0][1] = 0.
514 ddS2crossA[0][2] = 0.
516 ddS2crossA[1][0] = - deldS2dx[0]*A[2] - dS2cart[0]*delAz[0]
517 ddS2crossA[1][1] = - deldS2dx[1]*A[2] - dS2cart[0]*delAz[1]
518 ddS2crossA[1][2] = - deldS2dx[2]*A[2] - dS2cart[0]*delAz[2]
520 ddS2crossA[2][0] = deldS2dx[0]*A[1] + dS2cart[0]*delAy[0]
521 ddS2crossA[2][1] = deldS2dx[1]*A[1] + dS2cart[0]*delAy[1]
522 ddS2crossA[2][2] = deldS2dx[2]*A[1] + dS2cart[0]*delAy[2]
524 return S2*delB + dS2cart[dComponent]*B + ddS2crossA[fComponent][dComponent]