diff --git a/wetb/control/control.py b/wetb/control/control.py index ed9c9c65d6bacb569059ce6a57cb2fac735f6e09..771c97d80cf285e125c44296c07b87ab3ed6f789 100644 --- a/wetb/control/control.py +++ b/wetb/control/control.py @@ -78,6 +78,41 @@ class Control(object): return kp, ki, K1, K2 + def K_omega2(V, P, R, TSR): + + Va = np.array(V) + Pa = np.array(P) + Ra = np.array(R) + TSRa = np.array(TSR) + K = Ra**3 * np.mean(Pa/(TSRa*Va)**3) + + return K + + def select_regions(self, pitch, omega, power): + + i12 = 0 + + n = len(pitch) + + for i in range(n-1): + if (abs(power[i]/power[i+1] - 1.) > 0.01): + if (abs(omega[i] / omega[i+1] - 1.) > 0.01): + i12 = i + break + i23 = n-1 + for i in range(i12, n-1): + if (abs(omega[i] / omega[i+1] - 1.) < 0.01): + i23 = i + break + + i34 = i23 + for i in range(i23, n-1): + if (abs(power[i]/power[i+1] - 1.) > 0.01): + if (abs(omega[i] / omega[i+1] - 1.) < 0.01): + i34 = i+1 + + return i12, i23, i34 + if __name__ == '__main__': diff --git a/wetb/control/tests/test_control.py b/wetb/control/tests/test_control.py index f16b6aa175152f25b89ed826fc5a5ff02a480a2a..721ffdc98189212ba7bf082e4d324c6ee9933abc 100644 --- a/wetb/control/tests/test_control.py +++ b/wetb/control/tests/test_control.py @@ -66,6 +66,70 @@ class TestControl(unittest.TestCase): self.assertEqual(K1, 10.01111637532056) self.assertEqual(K2, 599.53659803157643) + def test_regions(self): + + crt = control.Control() + + pitch = np.array([0.,-2.,-2.,-2.,-2.,-2.,-2.,-1., 0., ]) + omega = np.array([1., 1., 1., 2., 3., 3., 3., 3., 3., ]) + power = np.array([1., 2., 3., 4., 5., 6., 7., 7., 7., ]) + + istart, iend = 0, -1 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 2) + self.assertEqual(i2, 4) + self.assertEqual(i3, 6) + + istart, iend = 3, -1 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 1) + self.assertEqual(i3, 3) + + istart, iend = 5, -1 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 0) + self.assertEqual(i3, 1) + + istart, iend = 6, -1 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 0) + self.assertEqual(i3, 0) + + istart, iend = 5, -2 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 0) + self.assertEqual(i3, 1) + + istart, iend = 3, -3 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 1) + self.assertEqual(i3, 2) + + istart, iend = 2, -4 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 2) + self.assertEqual(i3, 2) + + istart, iend = 0, 3 + i1, i2, i3 = crt.select_regions(pitch[istart:iend], omega[istart:iend], + power[istart:iend]) + self.assertEqual(i1, 0) + self.assertEqual(i2, 0) + self.assertEqual(i3, 2) + if __name__ == "__main__": unittest.main()