def test_2layer_area(): er1, t1 = 5.0, 1e-3 er2, t2 = 1.0, 3e-3 A = 3.0 pp1 = ParallelPlates((er1, er2), (t1, t2)) pp2 = ParallelPlates((er1, er2), (t1, t2), area=A) Va = 25.0 X = np.linspace(0, t1 + t2, 11) assert pp1.capacitance() == approx(pp2.capacitance() / A) assert pp1.efield(X, Va) == approx(pp2.efield(X, Va)) assert pp1.potential(X, Va) == approx(pp2.potential(X, Va))
def test_potential_2layer(): er1, t1 = 5.0, 1e-3 er2, t2 = 1.0, 3e-3 pp = ParallelPlates((er1, er2), (t1, t2)) X = np.linspace(0, 4e-3, 5) V = pp.potential(X, 200) assert V == approx([0, 12.5, 75, 137.5, 200])
def test_poisson_1d_dielectric2(): pp = ParallelPlates((1.0, 5.0, 1.0), (2e-3, 1e-3, 1e-3)) v0 = 0 v1 = 200 X, er = pp.get_arrays(101) V = fdm.poisson_1d(X, dielectric=er, v_left=v0, v_right=v1, conv=1e-7) Va = pp.potential(X, v1 - v0, v0) assert V == approx(Va, abs=0.01)
def test_poisson_1d(): pp = ParallelPlates(1.0, 5e-3) X, _ = pp.get_arrays(101) v0 = -2 v1 = 5 V = fdm.poisson_1d(X, v_left=v0, v_right=v1, conv=1e-5) Va = pp.potential(X, v1 - v0, v0) assert V == approx(Va, abs=0.01)
def test_gauss_1d_dielectric(): pp = ParallelPlates((2.0, 4.0), (3e-3, 2e-3)) X, er = pp.get_arrays(101) v1 = 10.0 V = pp.potential(X, v1) Q = np.array([fdm.gauss_1d(X, V, er, i) for i in range(1, len(X) - 1)]) Qa = pp.charge(v1) assert Q == approx(Qa)
def test_potential(): t = 1e-3 N = 5 pp = ParallelPlates(3.5, t) X = np.linspace(0, t, N) Va = 10.0 expected = Va / t * X potential = pp.potential(X, Va) assert potential == approx(expected)
def test_potential_ref(): t = 1e-3 N = 5 pp = ParallelPlates(3.5, t) X = np.linspace(0, t, N) Va = 10.0 Vref = 5.0 expected = Va / t * X + Vref potential = pp.potential(X, Va, Vref=Vref) assert potential == approx(expected)
def test_efield_pplate(): er1, t1 = 5.0, 1e-3 er2, t2 = 1.0, 3e-3 Va = 200 pp = ParallelPlates((er1, er2), (t1, t2)) X, dx = np.linspace(0, 4e-3, 21, retstep=True) V = pp.potential(X, Va) E = pp.efield(X, Va) Ec = em.efield_1d(V, dx) assert Ec[:5] == approx(E[:5]) # discontinuity at boundary [5] assert Ec[6:] == approx(E[6:])
def test_efield_pplate_fdm(): er1, t1 = 5.0, 1e-3 er2, t2 = 1.0, 3e-3 Va = 200 pp = ParallelPlates((er1, er2), (t1, t2)) X, dx = np.linspace(0, 4e-3, 21, retstep=True) V = pp.potential(X, Va) E = em.efield_1d(V, dx) er = np.where(X[:-1] < t1, er1, er2) Vfdm = fdm.poisson_1d(X, dielectric=er, v_right=Va) Efdm = em.efield_1d(Vfdm, dx) assert Efdm == approx(E, rel=0.001)