def test_RC1(self): """Lcapy: check RC network """ a = Circuit() a.add('R1 1 2') a.add('C1 2 0') self.assertEqual2(a.impedance(1, 2), R('R1').impedance, "Z incorrect for R1.") self.assertEqual2(a.impedance(2, 0), C('C1').impedance, "Z incorrect for C1.") self.assertEqual2(a.impedance(1, 0), (R('R1') + C('C1')).impedance, "Z incorrect for R1 + C1.") self.assertEqual2(a.admittance(1, 2), R('R1').Y, "Y incorrect for R1.") self.assertEqual2(a.admittance(2, 0), C('C1').Y, "Y incorrect for C1.") self.assertEqual2(a.admittance(1, 0), (R('R1') + C('C1')).Y, "Y incorrect for R1 + C1.") self.assertEqual2(a.Isc(1, 0), I(0).Isc, "Isc incorrect") self.assertEqual(a.R1.Z, expr('R1'), "Z incorrect") self.assertEqual(a.R1.R, expr('R1'), "R incorrect") self.assertEqual(a.R1.X, 0, "X incorrect") self.assertEqual(a.C1.Y, expr('j * omega * C1'), "Y incorrect") self.assertEqual(a.C1.G, 0, "G incorrect") self.assertEqual(a.C1.B, expr('-omega * C1'), "B incorrect")
def test_IV_parallel(self): a = Circuit(""" V 1 0 dc I 1 0 dc R 1 0""") self.assertEqual(a.R.v, expr('V'), "R voltage incorrect") self.assertEqual(a.R.i, expr('V / R'), "R current incorrect")
def test_IV_series(self): a = Circuit(""" V 2 1 dc I 1 0 dc R 2 0""") self.assertEqual(a.R.v, expr('I * R'), "R voltage incorrect") self.assertEqual(a.R.i, expr('I'), "R current incorrect")
def test_TF(self): a = Circuit(""" TF 2 0 1 0 k R 2 0""") self.assertEqual(a.impedance(1, 0), expr('R / k**2'), "incorrect impedance")
def test_K(self): a = Circuit(""" V1 1 0 ac; down W 1 1_1; right L1 1_1 0_1 L; down W 0 0_1; right W 0_1 0_2; right W 0_1 0_2; right L2 2 0_2 L; down W 2 2_1; right R1 2_1 0_3; down W 0_2 0_3; right K L1 L2 1; invisible""") self.assertEqual( a.R1.v, expr('V1 * cos(omega_0 * t) * abs(omega_0) / omega_0'), "coupling incorrect")
def test_VRC1(self): """Lcapy: check VRC circuit """ a = Circuit(""" V1 1 0 R1 1 2 C1 2 0""") ss = a.ss self.assertEqual2(expr(ss.x[0]), expr('vC1(t)'), "Incorrect state variable") self.assertEqual2(expr(ss.y[0]), expr('vn1(t)'), "Incorrect output variable1") self.assertEqual2(expr(ss.y[1]), expr('vn2(t)'), "Incorrect output variable2") self.assertEqual2(expr(ss.A[0]), expr('-1/(R1 * C1)'), "Incorrect A matrix") self.assertEqual2(expr(ss.B[0]), expr('1/(R1 * C1)'), "Incorrect B matrix") self.assertEqual2(expr(ss.C[0]), expr(0), "Incorrect C[0] matrix") self.assertEqual2(expr(ss.C[1]), expr(1), "Incorrect C[1] matrix") self.assertEqual2(expr(ss.D[0]), expr(0), "Incorrect D[0] matrix") self.assertEqual2(expr(ss.D[1]), expr(0), "Incorrect D[1] matrix") self.assertEqual2(expr(ss.eigenvalues[0]), expr('-1/(R1 * C1)'), "Incorrect eigenvalues")
def test_params(self): a = Circuit(""" R1 1 2; R2 2 0; R3 2 3""") A = a.Aparams(3, 0, 1, 0) # TODO, FIXME without passing matrix elements through expr self.assertEqual(expr(A[0, 0]), expr('(R2 + R3) / R2'), "A11") self.assertEqual(expr(A[0, 1]), expr('R1 + R1 * R3 / R2 + R3'), "A12") self.assertEqual(expr(A[1, 0]), expr('1 / R2'), "A21") self.assertEqual(expr(A[1, 1]), expr('(R1 + R2) / R2'), "A22") Z = a.Zparams(3, 0, 1, 0) self.assertEqual(expr(Z[0, 0]), expr('R2 + R3'), "Z11") self.assertEqual(expr(Z[0, 1]), expr('R2'), "Z12") self.assertEqual(expr(Z[1, 0]), expr('R2'), "Z21") self.assertEqual(expr(Z[1, 1]), expr('R1 + R2'), "Z22")
def test_VRL1(self): """Lcapy: check VRL circuit """ a = Circuit(""" V1 1 0 R1 1 2 L1 2 0""") ss = a.ss self.assertEqual2(expr(ss.x[0]), expr('i_L1(t)'), "Incorrect state variable") self.assertEqual2(expr(ss.y[0]), expr('v_1(t)'), "Incorrect output variable1") self.assertEqual2(expr(ss.y[1]), expr('v_2(t)'), "Incorrect output variable2") self.assertEqual2(expr(ss.A[0]), expr('-R1 / L1'), "Incorrect A matrix") self.assertEqual2(expr(ss.B[0]), expr('1 / L1'), "Incorrect B matrix") self.assertEqual2(expr(ss.C[0]), expr(0), "Incorrect C[0] matrix element") self.assertEqual2(expr(ss.C[1]), expr('-R1'), "Incorrect C[1] matrix element") self.assertEqual2(expr(ss.D[0]), expr(1), "Incorrect D[0] matrix element") self.assertEqual2(expr(ss.D[1]), expr(1), "Incorrect D[1] matrix element") self.assertEqual2(expr(ss.eigenvalues[0]), expr('-R1 / L1'), "Incorrect eigenvalues")