diff --git a/examples/leo-delay-tracing-example.cc b/examples/leo-delay-tracing-example.cc index 28b0657..733c48a 100644 --- a/examples/leo-delay-tracing-example.cc +++ b/examples/leo-delay-tracing-example.cc @@ -99,12 +99,13 @@ int main (int argc, char *argv[]) } else { - // Install internet stack on nodes AodvHelper aodv; - aodv.Set ("EnableHello", BooleanValue (false)); + //aodv.Set ("EnableHello", BooleanValue (false)); stack.SetRoutingHelper (aodv); } + + // Install internet stack on nodes stack.Install (satellites); stack.Install (stations); diff --git a/model/leo-propagation-loss-model.cc b/model/leo-propagation-loss-model.cc index 23a49bf..c01a0b5 100644 --- a/model/leo-propagation-loss-model.cc +++ b/model/leo-propagation-loss-model.cc @@ -21,12 +21,6 @@ LeoPropagationLossModel::GetTypeId (void) .SetParent () .SetGroupName ("Leo") .AddConstructor () - .AddAttribute ("MaxDistance", - "Cut-off distance for signal propagation", - DoubleValue (2500.0), - MakeDoubleAccessor (&LeoPropagationLossModel::SetCutoffDistance, - &LeoPropagationLossModel::GetCutoffDistance), - MakeDoubleChecker ()) .AddAttribute ("ElevationAngle", "Cut-off angle for signal propagation", DoubleValue (40.0), @@ -60,54 +54,45 @@ LeoPropagationLossModel::~LeoPropagationLossModel () { } -double -LeoPropagationLossModel::GetAngle (Ptr a, Ptr b) -{ - Vector3D x = a->GetPosition (); - Vector3D y = b->GetPosition (); - - Vector3D pa, pb; - if (x.GetLength () < y.GetLength ()) - { - pa = x - y; - pb = y; - NS_LOG_DEBUG ("LEO ground -> space"); - } - else - { - pa = y - x; - pb = x; - NS_LOG_DEBUG ("LEO space -> ground"); - } - - double prod = abs ((pa.x*-pb.x) + (pa.y*-pb.y) + (pa.z*-pb.z)); - double norm = pa.GetLength () * pb.GetLength (); - - return acos (prod / norm); -} - void LeoPropagationLossModel::SetElevationAngle (double angle) { - m_elevationAngle = (90 - angle) * (M_PI/180.0); + m_elevationAngle = angle * (M_PI/180.0); +} + +double +LeoPropagationLossModel::GetCutoffDistance (const Ptr sat) const +{ + double angle = m_elevationAngle; + double hs = sat->GetPosition ().GetLength (); + + double a = 1 + tan (angle) * tan (angle); + double b = 2.0 * tan (angle) * hs; + double c = hs*hs - LEO_PROP_EARTH_RAD*LEO_PROP_EARTH_RAD; + + double disc = b*b + 4*a*c; + + NS_LOG_DEBUG ("angle="<GetNode ()->GetId () << " from " << src->GetNode ()->GetId ()); return false; diff --git a/test/leo-propagation-test-suite.cc b/test/leo-propagation-test-suite.cc index ef19298..7dd9a0d 100644 --- a/test/leo-propagation-test-suite.cc +++ b/test/leo-propagation-test-suite.cc @@ -8,102 +8,6 @@ using namespace ns3; -class LeoPropagationAngleTestCase1 : public TestCase -{ -public: - LeoPropagationAngleTestCase1 (); - virtual ~LeoPropagationAngleTestCase1 (); - -private: - virtual void DoRun (void); -}; - -LeoPropagationAngleTestCase1::LeoPropagationAngleTestCase1 () - : TestCase ("Test angle computation 90 deg") -{ -} - -LeoPropagationAngleTestCase1::~LeoPropagationAngleTestCase1 () -{ -} - -void -LeoPropagationAngleTestCase1::DoRun (void) -{ - Ptr a = CreateObject (); - a->SetPosition (Vector3D (10, 0, 0)); - Ptr b = CreateObject (); - b->SetPosition (Vector3D (0, 10, 0)); - - double angle = LeoPropagationLossModel::GetAngle (a, b); - - NS_TEST_ASSERT_MSG_EQ ((M_PI/4 - 0.1 < angle && angle < M_PI/4 + 0.1), true, "Angle should be 90 deg."); -} - -class LeoPropagationAngleTestCase2 : public TestCase -{ -public: - LeoPropagationAngleTestCase2 (); - virtual ~LeoPropagationAngleTestCase2 (); - -private: - virtual void DoRun (void); -}; - -LeoPropagationAngleTestCase2::LeoPropagationAngleTestCase2 () - : TestCase ("Test angle computation 0 deg") -{ -} - -LeoPropagationAngleTestCase2::~LeoPropagationAngleTestCase2 () -{ -} - -void -LeoPropagationAngleTestCase2::DoRun (void) -{ - Ptr a = CreateObject (); - a->SetPosition (Vector3D (10, 0, 0)); - Ptr b = CreateObject (); - b->SetPosition (Vector3D (10, 0, 0)); - - double angle = LeoPropagationLossModel::GetAngle (a, b); - - NS_TEST_ASSERT_MSG_EQ (isnan(angle), true, "Angle should be 0 deg."); -} - -class LeoPropagationAngleTestCase3 : public TestCase -{ -public: - LeoPropagationAngleTestCase3 (); - virtual ~LeoPropagationAngleTestCase3 (); - -private: - virtual void DoRun (void); -}; - -LeoPropagationAngleTestCase3::LeoPropagationAngleTestCase3 () - : TestCase ("Test angle computation 0 vector") -{ -} - -LeoPropagationAngleTestCase3::~LeoPropagationAngleTestCase3 () -{ -} - -void -LeoPropagationAngleTestCase3::DoRun (void) -{ - Ptr a = CreateObject (); - a->SetPosition (Vector3D (0, 0, 0)); - Ptr b = CreateObject (); - b->SetPosition (Vector3D (0, 0, 0)); - - double angle = LeoPropagationLossModel::GetAngle (a, b); - - NS_TEST_ASSERT_MSG_EQ (isnan(angle), true, "Angle should be NaN"); -} - class LeoPropagationRxNoLosTestCase : public TestCase { public: @@ -228,9 +132,6 @@ LeoPropagationTestSuite::LeoPropagationTestSuite () : TestSuite ("leo-propagation", UNIT) { // TestDuration for TestCase can be QUICK, EXTENSIVE or TAKES_FOREVER - AddTestCase (new LeoPropagationAngleTestCase1, TestCase::QUICK); - AddTestCase (new LeoPropagationAngleTestCase2, TestCase::QUICK); - AddTestCase (new LeoPropagationAngleTestCase3, TestCase::QUICK); AddTestCase (new LeoPropagationRxNoLosTestCase, TestCase::QUICK); AddTestCase (new LeoPropagationRxLosTestCase, TestCase::QUICK); AddTestCase (new LeoPropagationBadAngleTestCase, TestCase::QUICK);