Last active
August 22, 2020 01:42
-
-
Save ashiqopu/a66ad48f1f2bb9f5a22facd88fc6ed39 to your computer and use it in GitHub Desktop.
TCP Throughput above link capacity
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ | |
/* | |
* Copyright (c) 2009 The Boeing Company | |
* | |
* This program is free software; you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License version 2 as | |
* published by the Free Software Foundation; | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program; if not, write to the Free Software | |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
* | |
*/ | |
#include "ns3/core-module.h" | |
#include "ns3/network-module.h" | |
#include "ns3/internet-module.h" | |
#include "ns3/point-to-point-module.h" | |
#include "ns3/applications-module.h" | |
#include "ns3/flow-monitor-helper.h" | |
#include "ns3/ipv4-flow-classifier.h" | |
#include "ns3/traffic-control-module.h" | |
#include <fstream> | |
#include <vector> | |
#include <string> | |
#include <iomanip> | |
#include <map> | |
using namespace ns3; | |
NS_LOG_COMPONENT_DEFINE ("wired-tcp"); | |
Ptr<PacketSink> sink; /* Pointer to the packet sink application */ | |
uint64_t lastTotalRx = 0; /* The value of the last total received bytes */ | |
std::ofstream thWriter; | |
typedef struct D { | |
uint32_t rxPkts; | |
uint32_t txPkts; | |
double throughput; | |
double cwnd; | |
double rtt; | |
} Data; | |
std::map<uint32_t, Data> data; | |
void | |
CalculateThroughput () | |
{ | |
Time now = Simulator::Now (); /* Return the simulator's virtual time. */ | |
double cur = (sink->GetTotalRx () - lastTotalRx) * (double) 8.0 / 1e5; /* Convert Application RX Packets to MBits. */ | |
thWriter << now.GetSeconds() << "\t" | |
<< cur << "\n"; | |
lastTotalRx = sink->GetTotalRx (); | |
Simulator::Schedule (MilliSeconds (100), &CalculateThroughput); | |
} | |
void SimRun (uint32_t payloadSize, uint64_t maxBytes, uint32_t totalNodes, bool enableBtl, | |
double errRate, double simTime, std::string tcpVariant, uint32_t runID) | |
{ | |
std::string tcpAlg = tcpVariant; | |
tcpVariant = std::string ("ns3::") + tcpVariant; | |
// Select TCP variant | |
if (tcpVariant.compare ("ns3::TcpWestwoodPlus") == 0) | |
{ | |
// TcpWestwoodPlus is not an actual TypeId name; we need TcpWestwood here | |
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpWestwood::GetTypeId ())); | |
// the default protocol type in ns3::TcpWestwood is WESTWOOD | |
Config::SetDefault ("ns3::TcpWestwood::ProtocolType", EnumValue (TcpWestwood::WESTWOODPLUS)); | |
} | |
else | |
{ | |
TypeId tcpTid; | |
NS_ABORT_MSG_UNLESS (TypeId::LookupByNameFailSafe (tcpVariant, &tcpTid), "TypeId " << tcpVariant << " not found"); | |
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TypeId::LookupByName (tcpVariant))); | |
} | |
/* Configure TCP Options */ | |
Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize)); | |
Config::SetDefault ("ns3::TcpSocketBase::Sack", BooleanValue (true)); | |
TrafficControlHelper tchCoDel; | |
tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc"); | |
Config::SetDefault ("ns3::CoDelQueueDisc::UseEcn", BooleanValue (true)); | |
Config::SetDefault ("ns3::TcpSocketBase::EcnMode", StringValue ("ClassicEcn")); | |
NodeContainer c; | |
c.Create (totalNodes); | |
InternetStackHelper stack; | |
stack.Install (c); | |
// totalNodes-1 links and subnets | |
uint32_t midNode = (totalNodes/2.0); | |
PointToPointHelper p2p; | |
std::vector<NetDeviceContainer> devices(totalNodes-1); | |
for (uint32_t i = 0; i < totalNodes-1; i++) { | |
if ( i > 0 && i == midNode && enableBtl) { | |
p2p.SetDeviceAttribute ("DataRate", StringValue ("1Mbps")); | |
p2p.SetChannelAttribute ("Delay", StringValue ("10ms")); | |
} | |
else { | |
p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); | |
p2p.SetChannelAttribute ("Delay", StringValue ("1ms")); | |
} | |
devices[i] = p2p.Install(c.Get(i), c.Get(i+1)); | |
tchCoDel.Install (devices[i]); | |
} | |
NS_LOG_INFO ("assigning ip address"); | |
Ipv4AddressHelper ipv4; | |
NS_LOG_INFO ("Assign IP Addresses."); | |
std::vector<Ipv4InterfaceContainer> iface (totalNodes-1); | |
// set the n-1 subnets | |
for (uint32_t i = 0; i < totalNodes-1; i++) { | |
std::string subnetIP= "10.1." + std::to_string(i+1) + ".0"; | |
ipv4.SetBase (subnetIP.c_str(), "255.255.255.0"); | |
iface[i] = ipv4.Assign (devices[i]); | |
} | |
// Create router nodes, initialize routing database and set up the routing | |
// tables in the nodes. | |
Ipv4GlobalRoutingHelper::PopulateRoutingTables (); | |
DoubleValue rate (errRate); | |
Ptr<RateErrorModel> em1 = | |
CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1.0]"), "ErrorRate", rate); | |
Ptr<RateErrorModel> em2 = | |
CreateObjectWithAttributes<RateErrorModel> ("RanVar", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1.0]"), "ErrorRate", rate); | |
// This enables the specified errRate on both link endpoints. | |
devices[0].Get (0)->SetAttribute ("ReceiveErrorModel", PointerValue (em1)); | |
devices[totalNodes-2].Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em2)); | |
NS_LOG_INFO ("Create Applications."); | |
// | |
// Create a BulkSendApplication and install it on node 0 | |
// | |
uint16_t port = 9; // well-known echo port number | |
BulkSendHelper source ("ns3::TcpSocketFactory", | |
InetSocketAddress (iface[totalNodes-2].GetAddress(1), port)); | |
// Set the amount of data to send in bytes. Zero is unlimited. | |
source.SetAttribute ("MaxBytes", UintegerValue (maxBytes)); | |
ApplicationContainer sourceApps = source.Install (c.Get (0)); | |
sourceApps.Start (Seconds (0.0)); | |
sourceApps.Stop (Seconds (simTime)); | |
// | |
// Create a PacketSinkApplication and install it on node 1 | |
// | |
PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", | |
InetSocketAddress (Ipv4Address::GetAny (), port)); | |
ApplicationContainer sinkApps = sinkHelper.Install (c.Get (totalNodes-1)); | |
sink = StaticCast<PacketSink> (sinkApps.Get (0)); | |
sinkApps.Start (Seconds (0.0)); | |
sinkApps.Stop (Seconds (simTime)); | |
FlowMonitorHelper flowmon; | |
Ptr<FlowMonitor> monitor = flowmon.InstallAll (); | |
thWriter.open ("test-tcp-throughput.txt"); | |
Simulator::Schedule (Seconds (0.1), &CalculateThroughput); | |
Simulator::Stop (Seconds (simTime+2.0)); | |
Simulator::Run (); | |
double throughput = ((sink->GetTotalRx () * 8) / (1e6 * simTime)); | |
uint64_t totalRxPkts = sink->GetTotalRx()/payloadSize; | |
uint32_t totalTxPkts = 0; | |
// 10. Print per flow statistics | |
monitor->CheckForLostPackets (); | |
Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ()); | |
FlowMonitor::FlowStatsContainer stats = monitor->GetFlowStats (); | |
for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i) | |
{ | |
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (i->first); | |
if (t.sourceAddress == iface[0].GetAddress (0) && | |
t.destinationAddress == iface[totalNodes-2].GetAddress (1) ) | |
{ | |
//std::cout << "Flow " << i->first << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n"; | |
totalTxPkts = i->second.txPackets; | |
break; | |
// std::cout << " Tx Bytes: " << i->second.txBytes << "\n"; | |
// std::cout << " TxOffered: " << i->second.txBytes * 8.0 / 9.0 / 1024 / 1024 << " Mbps\n"; | |
// std::cout << " Rx Packets: " << i->second.rxPackets << "\n"; | |
// std::cout << " Rx Bytes: " << i->second.rxBytes << "\n"; | |
// std::cout << " Throughput: " << i->second.rxBytes * 8.0 / 9.0 / 1024 / 1024 << " Mbps\n"; | |
// std::cout << " Lost Packets: " << i->second.lostPackets << "\n"; | |
} | |
} | |
if ( data.find(totalNodes) == data.end() ) { | |
data[totalNodes].rxPkts = 0; | |
data[totalNodes].txPkts = 0; | |
data[totalNodes].throughput = 0.0; | |
data[totalNodes].cwnd = 0.0; | |
data[totalNodes].rtt = 0.0; | |
} | |
data[totalNodes].rxPkts += totalRxPkts; | |
data[totalNodes].txPkts += totalTxPkts; | |
data[totalNodes].throughput += throughput; | |
thWriter.close(); | |
Simulator::Destroy (); | |
} | |
int main (int argc, char *argv[]) | |
{ | |
uint32_t payloadSize = 1460; // bytes | |
uint64_t maxBytes = std::numeric_limits<uint64_t>::max()-10; // 10*1024*1024; // 10MB=10*1024*1024 | |
double simTime = 50.0; | |
std::string tcpVariant = "TcpBic"; // "TcpNewReno"; /* TCP variant type. */ | |
uint32_t totalNodes = 20; | |
uint32_t seed = 1; | |
bool enableBtl = true; | |
double errRate = 0.000010; // or 0.000001 | |
CommandLine cmd; | |
cmd.AddValue ("payloadSize", "size of application payload sent", payloadSize); | |
cmd.AddValue ("maxBytes","Total number of bytes for application to send", maxBytes); | |
cmd.AddValue ("totalNodes","Total number of nodes in the chain", totalNodes); | |
cmd.AddValue ("tcpVariant","TCP congestion control algorithm", tcpVariant); | |
cmd.AddValue ("enableBtl","Enable or Disable bottleneck link", enableBtl); | |
cmd.AddValue ("errRate", "Error rate to apply to link", errRate); | |
cmd.AddValue ("simTime","Set simulation time limit", simTime); | |
cmd.AddValue ("seed","Set simulation seed", seed); | |
cmd.Parse (argc, argv); | |
RngSeedManager::SetSeed (seed); // Changes seed from default of 1 to 3 | |
// RngSeedManager::SetRun (7); // Changes run number from default of 1 to 7 | |
SimRun(payloadSize, maxBytes, totalNodes, enableBtl, | |
errRate, simTime, tcpVariant, seed); | |
std::cout << "Throughput (Mbps): " << data[totalNodes].throughput << "\n"; | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+0.09999999999999999997 0 | |
+0.19999999999999999999 0.1168 | |
+0.29999999999999999996 0.2336 | |
+0.39999999999999999998 0.2336 | |
+0.5 0.1168 | |
+0.59999999999999999997 0.3504 | |
+0.69999999999999999999 0.7008 | |
+0.79999999999999999996 0.584 | |
+0.89999999999999999998 0.8176 | |
+1.0 0.9344 | |
+1.09999999999999999997 0.9344 | |
+1.19999999999999999999 0.9344 | |
+1.29999999999999999996 0.9344 | |
+1.39999999999999999998 0.9344 | |
+1.5 1.0512 | |
+1.59999999999999999997 0.9344 | |
+1.69999999999999999999 0.9344 | |
+1.79999999999999999996 0.9344 | |
+1.89999999999999999998 0.9344 | |
+2.0 0.9344 | |
+2.09999999999999999997 0.9344 | |
+2.19999999999999999999 0.7008 | |
+2.29999999999999999996 0 | |
+2.39999999999999999998 0 | |
+2.5 0 | |
+2.59999999999999999997 0 | |
+2.69999999999999999999 0 | |
+2.79999999999999999996 0 | |
+2.89999999999999999998 0 | |
+3.0 0 | |
+3.09999999999999999997 2.5696 | |
+3.19999999999999999999 7.008 | |
+3.29999999999999999996 0.87936 | |
+3.39999999999999999998 0 | |
+3.5 0 | |
+3.59999999999999999997 0 | |
+3.69999999999999999999 0.1168 | |
+3.79999999999999999996 0.9344 | |
+3.89999999999999999998 0.9344 | |
+4.0 0.9344 | |
+4.09999999999999999997 1.0512 | |
+4.19999999999999999999 0.9344 | |
+4.29999999999999999996 0.9344 | |
+4.39999999999999999998 0.9344 | |
+4.5 0.9344 | |
+4.59999999999999999997 0.9344 | |
+4.69999999999999999999 0.9344 | |
+4.79999999999999999996 1.0512 | |
+4.89999999999999999998 0.9344 | |
+5.0 0.9344 | |
+5.09999999999999999997 0.9344 | |
+5.19999999999999999999 0.4672 | |
+5.29999999999999999996 0 | |
+5.39999999999999999998 0 | |
+5.5 0 | |
+5.59999999999999999997 0 | |
+5.69999999999999999999 0 | |
+5.79999999999999999996 6.0736 | |
+5.89999999999999999998 0.9344 | |
+6.0 0.9344 | |
+6.09999999999999999997 0.9344 | |
+6.19999999999999999999 0.8176 | |
+6.29999999999999999996 0 | |
+6.39999999999999999998 0 | |
+6.5 0 | |
+6.59999999999999999997 0 | |
+6.69999999999999999999 4.7888 | |
+6.79999999999999999996 0.9344 | |
+6.89999999999999999998 0.9344 | |
+7.0 1.0512 | |
+7.09999999999999999997 0.9344 | |
+7.19999999999999999999 0 | |
+7.29999999999999999996 0 | |
+7.39999999999999999998 0 | |
+7.5 1.5184 | |
+7.59999999999999999997 2.92 | |
+7.69999999999999999999 0.8176 | |
+7.79999999999999999996 0 | |
+7.89999999999999999998 0 | |
+8.0 0 | |
+8.09999999999999999997 3.7376 | |
+8.19999999999999999999 0.9344 | |
+8.29999999999999999996 0.9344 | |
+8.39999999999999999998 1.0512 | |
+8.5 0.9344 | |
+8.59999999999999999997 0.9344 | |
+8.69999999999999999999 0.9344 | |
+8.79999999999999999996 0.9344 | |
+8.89999999999999999998 0.9344 | |
+9.0 0.9344 | |
+9.09999999999999999997 0.3504 | |
+9.19999999999999999999 0 | |
+9.29999999999999999996 0 | |
+9.39999999999999999998 3.3872 | |
+9.5 0.9344 | |
+9.59999999999999999997 0.9344 | |
+9.69999999999999999999 0.9344 | |
+9.79999999999999999996 0.9344 | |
+9.89999999999999999998 1.0512 | |
+10.0 0.9344 | |
+10.09999999999999999997 0.2336 | |
+10.19999999999999999999 0 | |
+10.29999999999999999996 2.4528 | |
+10.39999999999999999998 0.9344 | |
+10.5 0.9344 | |
+10.59999999999999999997 1.0512 | |
+10.69999999999999999999 0.9344 | |
+10.79999999999999999996 0.9344 | |
+10.89999999999999999998 0.9344 | |
+11.0 0.9344 | |
+11.09999999999999999997 0.9344 | |
+11.19999999999999999999 0.9344 | |
+11.29999999999999999996 1.0512 | |
+11.39999999999999999998 0.9344 | |
+11.5 0.9344 | |
+11.59999999999999999997 0.9344 | |
+11.69999999999999999999 0.9344 | |
+11.79999999999999999996 0.9344 | |
+11.89999999999999999998 0.9344 | |
+12.0 1.0512 | |
+12.09999999999999999997 0.9344 | |
+12.19999999999999999999 0.9344 | |
+12.29999999999999999996 0.8176 | |
+12.39999999999999999998 0 | |
+12.5 0 | |
+12.59999999999999999997 2.8032 | |
+12.69999999999999999999 0.9344 | |
+12.79999999999999999996 0.7008 | |
+12.89999999999999999998 0 | |
+13.0 0 | |
+13.09999999999999999997 3.0368 | |
+13.19999999999999999999 0.9344 | |
+13.29999999999999999996 0.9344 | |
+13.39999999999999999998 0.9344 | |
+13.5 1.0512 | |
+13.59999999999999999997 0.9344 | |
+13.69999999999999999999 0.9344 | |
+13.79999999999999999996 0.9344 | |
+13.89999999999999999998 0.9344 | |
+14.0 0.9344 | |
+14.09999999999999999997 0.9344 | |
+14.19999999999999999999 1.0512 | |
+14.29999999999999999996 0.9344 | |
+14.39999999999999999998 0.584 | |
+14.5 0 | |
+14.59999999999999999997 0 | |
+14.69999999999999999999 2.6864 | |
+14.79999999999999999996 0 | |
+14.89999999999999999998 2.2192 | |
+15.0 0.9344 | |
+15.09999999999999999997 0.9344 | |
+15.19999999999999999999 0.9344 | |
+15.29999999999999999996 0.9344 | |
+15.39999999999999999998 0.9344 | |
+15.5 0.9344 | |
+15.59999999999999999997 0.9344 | |
+15.69999999999999999999 1.0512 | |
+15.79999999999999999996 0.9344 | |
+15.89999999999999999998 0.9344 | |
+16.0 0.9344 | |
+16.09999999999999999997 0.9344 | |
+16.19999999999999999999 0.9344 | |
+16.29999999999999999996 0.3504 | |
+16.39999999999999999998 0 | |
+16.5 0 | |
+16.59999999999999999997 2.4528 | |
+16.69999999999999999999 0 | |
+16.79999999999999999996 1.2848 | |
+16.89999999999999999998 2.2192 | |
+17.0 0.9344 | |
+17.09999999999999999997 1.0512 | |
+17.19999999999999999999 0.9344 | |
+17.29999999999999999996 0.9344 | |
+17.39999999999999999998 0.9344 | |
+17.5 0.9344 | |
+17.59999999999999999997 0.9344 | |
+17.69999999999999999999 0.9344 | |
+17.79999999999999999996 0.7008 | |
+17.89999999999999999998 0 | |
+18.0 2.1024 | |
+18.09999999999999999997 0.9344 | |
+18.19999999999999999999 0.9344 | |
+18.29999999999999999996 0 | |
+18.39999999999999999998 1.752 | |
+18.5 0.4672 | |
+18.59999999999999999997 0.3504 | |
+18.69999999999999999999 0.3504 | |
+18.79999999999999999996 0 | |
+18.89999999999999999998 1.0512 | |
+19.0 0.2336 | |
+19.09999999999999999997 0.2336 | |
+19.19999999999999999999 0.1168 | |
+19.29999999999999999996 0.2336 | |
+19.39999999999999999998 0.2336 | |
+19.5 0.3504 | |
+19.59999999999999999997 0.4672 | |
+19.69999999999999999999 0.3504 | |
+19.79999999999999999996 0.3504 | |
+19.89999999999999999998 0.4672 | |
+20.0 0.7008 | |
+20.09999999999999999997 0.7008 | |
+20.19999999999999999999 0.4672 | |
+20.29999999999999999996 0.7008 | |
+20.39999999999999999998 0.8176 | |
+20.5 0.9344 | |
+20.59999999999999999997 0.7008 | |
+20.69999999999999999999 0 | |
+20.79999999999999999996 1.5184 | |
+20.89999999999999999998 0.4672 | |
+21.0 0.4672 | |
+21.09999999999999999997 0.3504 | |
+21.19999999999999999999 0.3504 | |
+21.29999999999999999996 0.4672 | |
+21.39999999999999999998 0.1168 | |
+21.5 0 | |
+21.59999999999999999997 0 | |
+21.69999999999999999999 0 | |
+21.79999999999999999996 0 | |
+21.89999999999999999998 0 | |
+22.0 0 | |
+22.09999999999999999997 0 | |
+22.19999999999999999999 0 | |
+22.29999999999999999996 0 | |
+22.39999999999999999998 0 | |
+22.5 1.9856 | |
+22.59999999999999999997 0.2336 | |
+22.69999999999999999999 0.2336 | |
+22.79999999999999999996 0 | |
+22.89999999999999999998 0.3504 | |
+23.0 0.2336 | |
+23.09999999999999999997 0.3504 | |
+23.19999999999999999999 0.4672 | |
+23.29999999999999999996 0.1168 | |
+23.39999999999999999998 0.4672 | |
+23.5 0.584 | |
+23.59999999999999999997 0.7008 | |
+23.69999999999999999999 0.4672 | |
+23.79999999999999999996 0.584 | |
+23.89999999999999999998 0.7008 | |
+24.0 0.9344 | |
+24.09999999999999999997 0.8176 | |
+24.19999999999999999999 0.8176 | |
+24.29999999999999999996 0.9344 | |
+24.39999999999999999998 0.9344 | |
+24.5 0.9344 | |
+24.59999999999999999997 1.0512 | |
+24.69999999999999999999 0.9344 | |
+24.79999999999999999996 0.9344 | |
+24.89999999999999999998 0.9344 | |
+25.0 0.9344 | |
+25.09999999999999999997 0.9344 | |
+25.19999999999999999999 0.9344 | |
+25.29999999999999999996 0.9344 | |
+25.39999999999999999998 1.0512 | |
+25.5 0.9344 | |
+25.59999999999999999997 0.9344 | |
+25.69999999999999999999 0.9344 | |
+25.79999999999999999996 0.9344 | |
+25.89999999999999999998 0.9344 | |
+26.0 0.8176 | |
+26.09999999999999999997 0 | |
+26.19999999999999999999 0 | |
+26.29999999999999999996 0 | |
+26.39999999999999999998 0 | |
+26.5 0 | |
+26.59999999999999999997 3.504 | |
+26.69999999999999999999 0 | |
+26.79999999999999999996 4.088 | |
+26.89999999999999999998 0.8176 | |
+27.0 0.9344 | |
+27.09999999999999999997 0.9344 | |
+27.19999999999999999999 0.9344 | |
+27.29999999999999999996 0.9344 | |
+27.39999999999999999998 0.9344 | |
+27.5 1.0512 | |
+27.59999999999999999997 0.9344 | |
+27.69999999999999999999 0.4672 | |
+27.79999999999999999996 0 | |
+27.89999999999999999998 0 | |
+28.0 0 | |
+28.09999999999999999997 0 | |
+28.19999999999999999999 3.9712 | |
+28.29999999999999999996 0 | |
+28.39999999999999999998 0 | |
+28.5 3.8544 | |
+28.59999999999999999997 0.9344 | |
+28.69999999999999999999 0.9344 | |
+28.79999999999999999996 0.9344 | |
+28.89999999999999999998 0.9344 | |
+29.0 1.0512 | |
+29.09999999999999999997 0.9344 | |
+29.19999999999999999999 0.9344 | |
+29.29999999999999999996 0.9344 | |
+29.39999999999999999998 0.9344 | |
+29.5 0.9344 | |
+29.59999999999999999997 0.2336 | |
+29.69999999999999999999 0 | |
+29.79999999999999999996 0 | |
+29.89999999999999999998 0 | |
+30.0 1.752 | |
+30.09999999999999999997 3.504 | |
+30.19999999999999999999 0.8176 | |
+30.29999999999999999996 0.9344 | |
+30.39999999999999999998 1.0512 | |
+30.5 0.9344 | |
+30.59999999999999999997 0.9344 | |
+30.69999999999999999999 0.9344 | |
+30.79999999999999999996 0.9344 | |
+30.89999999999999999998 0.9344 | |
+31.0 0.9344 | |
+31.09999999999999999997 0.9344 | |
+31.19999999999999999999 0.4672 | |
+31.29999999999999999996 0 | |
+31.39999999999999999998 0 | |
+31.5 3.2704 | |
+31.59999999999999999997 0.9344 | |
+31.69999999999999999999 0.9344 | |
+31.79999999999999999996 0.9344 | |
+31.89999999999999999998 1.0512 | |
+32.0 0.9344 | |
+32.09999999999999999997 0.9344 | |
+32.19999999999999999999 0.9344 | |
+32.29999999999999999996 0.9344 | |
+32.39999999999999999998 0.9344 | |
+32.5 0.9344 | |
+32.59999999999999999997 1.0512 | |
+32.69999999999999999999 0.9344 | |
+32.79999999999999999996 0.9344 | |
+32.89999999999999999998 0.9344 | |
+33.0 0.9344 | |
+33.09999999999999999997 0.9344 | |
+33.19999999999999999999 0.9344 | |
+33.29999999999999999996 1.0512 | |
+33.39999999999999999998 0.9344 | |
+33.5 0.9344 | |
+33.59999999999999999997 0.9344 | |
+33.69999999999999999999 0.9344 | |
+33.79999999999999999996 0.9344 | |
+33.89999999999999999998 0.9344 | |
+34.0 0.9344 | |
+34.09999999999999999997 1.0512 | |
+34.19999999999999999999 0.9344 | |
+34.29999999999999999996 0.9344 | |
+34.39999999999999999998 0.9344 | |
+34.5 0.9344 | |
+34.59999999999999999997 0.9344 | |
+34.69999999999999999999 0.9344 | |
+34.79999999999999999996 1.0512 | |
+34.89999999999999999998 0.9344 | |
+35.0 0.9344 | |
+35.09999999999999999997 0.9344 | |
+35.19999999999999999999 0.9344 | |
+35.29999999999999999996 0.9344 | |
+35.39999999999999999998 0.9344 | |
+35.5 1.0512 | |
+35.59999999999999999997 0.9344 | |
+35.69999999999999999999 0.9344 | |
+35.79999999999999999996 0.9344 | |
+35.89999999999999999998 0.9344 | |
+36.0 0.9344 | |
+36.09999999999999999997 0.9344 | |
+36.19999999999999999999 1.0512 | |
+36.29999999999999999996 0.9344 | |
+36.39999999999999999998 0.9344 | |
+36.5 0.9344 | |
+36.59999999999999999997 0 | |
+36.69999999999999999999 0 | |
+36.79999999999999999996 0 | |
+36.89999999999999999998 0 | |
+37.0 0 | |
+37.09999999999999999997 0 | |
+37.19999999999999999999 0 | |
+37.29999999999999999996 0 | |
+37.39999999999999999998 5.0224 | |
+37.5 0 | |
+37.59999999999999999997 0 | |
+37.69999999999999999999 3.1536 | |
+37.79999999999999999996 0 | |
+37.89999999999999999998 0 | |
+38.0 2.65952 | |
+38.09999999999999999997 0.9344 | |
+38.19999999999999999999 1.0512 | |
+38.29999999999999999996 0.2336 | |
+38.39999999999999999998 0 | |
+38.5 0 | |
+38.59999999999999999997 0 | |
+38.69999999999999999999 0 | |
+38.79999999999999999996 0 | |
+38.89999999999999999998 0 | |
+39.0 0 | |
+39.09999999999999999997 0 | |
+39.19999999999999999999 8.8768 | |
+39.29999999999999999996 0 | |
+39.39999999999999999998 0.2336 | |
+39.5 0.3504 | |
+39.59999999999999999997 0.3504 | |
+39.69999999999999999999 0.3504 | |
+39.79999999999999999996 0.4672 | |
+39.89999999999999999998 0.9344 | |
+40.0 0.8176 | |
+40.09999999999999999997 0.9344 | |
+40.19999999999999999999 0.9344 | |
+40.29999999999999999996 0.9344 | |
+40.39999999999999999998 0.9344 | |
+40.5 0.9344 | |
+40.59999999999999999997 0.9344 | |
+40.69999999999999999999 1.0512 | |
+40.79999999999999999996 0.9344 | |
+40.89999999999999999998 0.9344 | |
+41.0 0.9344 | |
+41.09999999999999999997 0.9344 | |
+41.19999999999999999999 0.9344 | |
+41.29999999999999999996 0.9344 | |
+41.39999999999999999998 1.0512 | |
+41.5 0.9344 | |
+41.59999999999999999997 0.9344 | |
+41.69999999999999999999 0.9344 | |
+41.79999999999999999996 0.9344 | |
+41.89999999999999999998 0.9344 | |
+42.0 0.9344 | |
+42.09999999999999999997 0.8176 | |
+42.19999999999999999999 0 | |
+42.29999999999999999996 0 | |
+42.39999999999999999998 2.92 | |
+42.5 0.9344 | |
+42.59999999999999999997 0.9344 | |
+42.69999999999999999999 0.9344 | |
+42.79999999999999999996 1.0512 | |
+42.89999999999999999998 0.9344 | |
+43.0 0.9344 | |
+43.09999999999999999997 0.9344 | |
+43.19999999999999999999 0.9344 | |
+43.29999999999999999996 0.9344 | |
+43.39999999999999999998 0.9344 | |
+43.5 0.9344 | |
+43.59999999999999999997 1.0512 | |
+43.69999999999999999999 0.9344 | |
+43.79999999999999999996 0.9344 | |
+43.89999999999999999998 0.9344 | |
+44.0 0.9344 | |
+44.09999999999999999997 0.9344 | |
+44.19999999999999999999 0.9344 | |
+44.29999999999999999996 1.0512 | |
+44.39999999999999999998 0.9344 | |
+44.5 0.9344 | |
+44.59999999999999999997 0.9344 | |
+44.69999999999999999999 0.9344 | |
+44.79999999999999999996 0.9344 | |
+44.89999999999999999998 0.9344 | |
+45.0 1.0512 | |
+45.09999999999999999997 0 | |
+45.19999999999999999999 0 | |
+45.29999999999999999996 0 | |
+45.39999999999999999998 1.168 | |
+45.5 1.0512 | |
+45.59999999999999999997 2.8032 | |
+45.69999999999999999999 0.8176 | |
+45.79999999999999999996 0.9344 | |
+45.89999999999999999998 0.2336 | |
+46.0 0 | |
+46.09999999999999999997 0 | |
+46.19999999999999999999 3.3872 | |
+46.29999999999999999996 0.9344 | |
+46.39999999999999999998 0.9344 | |
+46.5 1.0512 | |
+46.59999999999999999997 0.9344 | |
+46.69999999999999999999 0.9344 | |
+46.79999999999999999996 0.9344 | |
+46.89999999999999999998 0.9344 | |
+47.0 0.9344 | |
+47.09999999999999999997 0.9344 | |
+47.19999999999999999999 1.0512 | |
+47.29999999999999999996 0.9344 | |
+47.39999999999999999998 0.9344 | |
+47.5 0.9344 | |
+47.59999999999999999997 0.9344 | |
+47.69999999999999999999 0.9344 | |
+47.79999999999999999996 0.9344 | |
+47.89999999999999999998 1.0512 | |
+48.0 0.9344 | |
+48.09999999999999999997 0.9344 | |
+48.19999999999999999999 0.9344 | |
+48.29999999999999999996 0.9344 | |
+48.39999999999999999998 0.9344 | |
+48.5 0.9344 | |
+48.59999999999999999997 1.0512 | |
+48.69999999999999999999 0.9344 | |
+48.79999999999999999996 0.9344 | |
+48.89999999999999999998 0.9344 | |
+49.0 0.9344 | |
+49.09999999999999999997 0.9344 | |
+49.19999999999999999999 0.9344 | |
+49.29999999999999999996 0.9344 | |
+49.39999999999999999998 0.3504 | |
+49.5 0 | |
+49.59999999999999999997 0 | |
+49.69999999999999999999 0 | |
+49.79999999999999999996 0 | |
+49.89999999999999999998 5.256 | |
+50.0 0.9344 | |
+50.09999999999999999997 1.0512 | |
+50.19999999999999999999 0.9344 | |
+50.29999999999999999996 0.9344 | |
+50.39999999999999999998 0.9344 | |
+50.5 0.9344 | |
+50.59999999999999999997 0.9344 | |
+50.69999999999999999999 0.9344 | |
+50.79999999999999999996 1.0512 | |
+50.89999999999999999998 0.2336 | |
+51.0 0 | |
+51.09999999999999999997 0 | |
+51.19999999999999999999 0 | |
+51.29999999999999999996 0 | |
+51.39999999999999999998 0 | |
+51.5 0 | |
+51.59999999999999999997 0 | |
+51.69999999999999999999 0 | |
+51.79999999999999999996 0 | |
+51.89999999999999999998 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment