In [ ]:
import numpy as np
import matplotlib.pyplot as plt

In [ ]:
P = 0.0
B_z = 0.0

rr = np.linspace(0.0, 1.0, 100)


class Hat(object):
    def __init__(self, r1, r2, type='linear'):
        self.r1 = r1
        self.r2 = r2
        self.func = getattr(self, type)
    
    def value(self, r):
        return self.func(r)
        
    def linear(self, r):
        r1 = self.r1
        r2 = self.r2
        if r < r1:
            return r/r1
        if r >= r1 and r <= r2:
            return 1.0
        if r > r2:
            return 1.0 - (r-r2)/r1
        
    def poly(self, r):
        r1 = self.r1
        r2 = self.r2
        if r < r1:
            return -2.0/(r1**3)*r**3 + 3.0/(r1**2)*r**2
        if r >= r1 and r <= r2:
            return 1.0
        if r > r2:
            return -2.0/(1-r2)**3*(1-r)**3 + 3.0/(1-r2)**2*(1-r)**2
    
    def sin(self, r):
        r1 = self.r1
        r2 = self.r2
        if r < r1:
            return 0.5 - 0.5*np.cos(r/r1*np.pi)
        if r >= r1 and r <= r2:
            return 1.0
        if r > r2:
            return  0.5 + 0.5*np.cos((r-r2)/r1*np.pi)
    
def B_phi(rr, r1=0.1, r2=0.9, type='linear'):
    hat = Hat(r1, r2, type=type)
    return np.array([hat.value(r) for r in rr])

In [ ]:
Bp = B_phi(rr, r1=0.2, r2=0.8, type='poly')
Bs = B_phi(rr, r1=0.2, r2=0.8, type='sin')
Bl = B_phi(rr, r1=0.2, r2=0.8, type='linear')

In [ ]:
plt.plot(rr, Bp, label='polynomial')
plt.plot(rr, Bs, label='sinusoidal')
plt.plot(rr, Bl, label='linear')
plt.legend(loc=8)

In [ ]:
#fig = plt.figure(figsize=(6,4))
plt.xlabel(r'$\rho$')
plt.ylabel(r'$B_{\phi}$')
plt.plot(rr, Bp, label='polynomial')

In [ ]:


In [ ]: