diff --git a/Authors.md b/Authors.md index c82bfa444..b5179f424 100644 --- a/Authors.md +++ b/Authors.md @@ -9,6 +9,7 @@ * Sara Metwalli * Michal Hadjusek * Makoto Nakai +* Paolo Fittipaldi ## Senior Advisors: diff --git a/quisp/.nedfolders b/quisp/.nedfolders index 2c61d0d51..811f76d58 100644 --- a/quisp/.nedfolders +++ b/quisp/.nedfolders @@ -1,4 +1,4 @@ . -./channels -./modules -./networks +channels +modules +networks diff --git a/quisp/channels/CSVParser.cc b/quisp/channels/CSVParser.cc new file mode 100644 index 000000000..c2fb63d0b --- /dev/null +++ b/quisp/channels/CSVParser.cc @@ -0,0 +1,59 @@ +/** \file CSVParser.cc + * + * \brief CSVParser + * + * + * Quick parser for CSVs, written for csv-based Free-space channels. + */ + +#include "CSVParser.h" + +CSVParser::CSVParser(const string filename) { + file.open(filename); + if (!file.is_open()) throw cRuntimeError("Couldn't find CSV file!"); + string line; + double key = 0; + double val = 0; + char sep; // throwaway + while (file >> line) { + std::istringstream ss(line); + ss >> key >> sep >> val; + property.insert(std::pair(key, val)); + } + return; +} + +double CSVParser::getPropertyAtTime(const double time) { + if (time < getLowestDatapoint()) return getLowestDatavalue(); + if (time > getHighestDatapoint()) return getHighestDatavalue(); + + // These two first lines are there just to provide mathematically sound results. + // They should never be used in actual simulation, as they are NOT in any way + // guaranteed to be accurate. + + if (time != last_polled_time) { + last_polled_time = time; + auto u_b = property.upper_bound(time); + if (u_b == property.end()) { + last_polled_value = (--u_b)->second; + } else if (u_b == property.begin()) { + last_polled_value = u_b->second; + } else { + auto l_b = u_b; + --l_b; + const double delta = (time - l_b->first) / (u_b->first - l_b->first); + last_polled_value = delta * u_b->second + (1 - delta) * l_b->second; + } + } + return last_polled_value; +} + +int CSVParser::getLowestDatapoint() { return property.begin()->first; } + +int CSVParser::getHighestDatapoint() { return property.rbegin()->first; } + +double CSVParser::getLowestDatavalue() { return property.begin()->second; } + +double CSVParser::getHighestDatavalue() { return property.rbegin()->second; } + +CSVParser::~CSVParser() {} diff --git a/quisp/channels/CSVParser.h b/quisp/channels/CSVParser.h new file mode 100644 index 000000000..fb9374197 --- /dev/null +++ b/quisp/channels/CSVParser.h @@ -0,0 +1,41 @@ +/* + * CSVParser.h + * + * Created on: Nov 28, 2023 + * Author: paolo + */ + +#ifndef CHANNELS_CSVPARSER_H_ +#define CHANNELS_CSVPARSER_H_ + +#include +#include +#include +#include +#include + +using namespace omnetpp; +using std::string; + +class CSVParser { + public: + CSVParser(); + CSVParser(const string filename); + virtual ~CSVParser(); + double getPropertyAtTime(const double time); + int getLowestDatapoint(); + int getHighestDatapoint(); + double getLowestDatavalue(); + double getHighestDatavalue(); + + char* getName; + + private: + std::ifstream file; + char* name; + double last_polled_time = -1; + double last_polled_value = -1; + std::map property; +}; + +#endif /* CHANNELS_CSVPARSER_H_ */ diff --git a/quisp/channels/CSVParser_test.cc b/quisp/channels/CSVParser_test.cc new file mode 100644 index 000000000..7a861b9a2 --- /dev/null +++ b/quisp/channels/CSVParser_test.cc @@ -0,0 +1,56 @@ +#include + +#include + +#include + +#include "CSVParser.h" + +#include + +using namespace quisp_test; +using namespace quisp_test::utils; +using namespace quisp::messages; +using namespace quisp::modules::SharedResource; + +namespace { + +class CSVParserTest : public ::testing::Test { + protected: + void SetUp() { + csv_to_generate.open("channels/test_csv.csv"); + csv_to_generate << "200,100000\n"; + csv_to_generate << "300,300000\n"; + csv_to_generate << "400,200000\n"; + csv_to_generate.close(); + csv_parser = new CSVParser("channels/test_csv.csv"); + } + void TearDown() { std::remove("channels/test_csv.csv"); } + + CSVParser* csv_parser; + std::ofstream csv_to_generate; +}; + +TEST_F(CSVParserTest, lowerBound) { + ASSERT_DOUBLE_EQ(csv_parser->getLowestDatapoint(), 200); + ASSERT_DOUBLE_EQ(csv_parser->getLowestDatavalue(), 100000); +} + +TEST_F(CSVParserTest, upperBound) { + ASSERT_DOUBLE_EQ(csv_parser->getHighestDatapoint(), 400); + ASSERT_DOUBLE_EQ(csv_parser->getHighestDatavalue(), 200000); +} + +TEST_F(CSVParserTest, lowerThanLB) { ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(100), 100000); } + +TEST_F(CSVParserTest, higherThanUB) { ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(500), 200000); } + +TEST_F(CSVParserTest, normalOperation) { + ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(250), 200000); + ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(300), 300000); + ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(350), 250000); + ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(234.5), 169000); + ASSERT_DOUBLE_EQ(csv_parser->getPropertyAtTime(287.4), 274800); +} + +} // namespace diff --git a/quisp/channels/FSChannel.cc b/quisp/channels/FSChannel.cc new file mode 100644 index 000000000..366e12442 --- /dev/null +++ b/quisp/channels/FSChannel.cc @@ -0,0 +1,68 @@ +/** \file FSChannel.cc + * + * \brief Freespace channel + * + * + */ + +#include "FSChannel.h" + +using namespace omnetpp; +namespace quisp::channels { + +FSChannel::FSChannel(){}; + +Define_Channel(FSChannel); + +void FSChannel::initialize() { + cDatarateChannel::initialize(); + const char *filename = par("distance_CSV").stringValue(); + dist_par = new CSVParser(filename); + op.orbit_period = par("orbital_period"); + op.vis_start_time = dist_par->getLowestDatapoint(); + op.vis_end_time = dist_par->getHighestDatapoint(); +} + +cChannel::Result FSChannel::processMessage(cMessage *msg, const SendOptions &options, simtime_t t) { + Result result; + + if (!checkLOS() and !dynamic_cast(msg)) { + result.discard = true; + } else { + recalculateChannelParameters(); + result = cDatarateChannel::processMessage(msg, options, t); + } + return result; +} + +bool FSChannel::checkLOS() { + Enter_Method("checkLOS()"); + const SimTime currentTime = fmod(simTime(), op.orbit_period); + if (currentTime >= op.vis_start_time and currentTime <= op.vis_end_time) { + return true; + } + return false; +} + +double FSChannel::getDistanceAtTime(const simtime_t time) { + recalculateChannelParameters(); + return dist_par->getPropertyAtTime(time.dbl()); +} + +SimTime FSChannel::getNext_check_time() { + Enter_Method("next_check_time()"); + const SimTime current_time = fmod(simTime(), op.orbit_period); + if (current_time >= op.vis_start_time and current_time <= op.vis_end_time) { + return 0; + } + if (current_time >= op.vis_end_time) { // Satellite already passed for this orbit + return op.vis_start_time + op.orbit_period - current_time; + } + return op.vis_start_time - current_time; +} + +void FSChannel::recalculateChannelParameters() { + par("distance").setDoubleValue(dist_par->getPropertyAtTime(simTime().dbl())); + if (par("CSV_varies_delay").boolValue()) par("delay").setDoubleValue(par("distance").doubleValue() / par("speed_of_light_in_FS").doubleValue()); +} +} // namespace quisp::channels diff --git a/quisp/channels/FSChannel.h b/quisp/channels/FSChannel.h new file mode 100644 index 000000000..0121c81ca --- /dev/null +++ b/quisp/channels/FSChannel.h @@ -0,0 +1,51 @@ +/** \file FSChannel.h + * + * \brief Freespace channel + * + * Loss model from 10.1038/s42005-022-01123-7. + * Base class for Free-space communication: this channel handles variable length and delay using a CSVParser. + * LOS-related methods are directly callable from outside since the pointing system is expected to be able to directly check whether there is visibility or not. + * + */ + +#ifndef CHANNELS_FSCHANNEL_H_ +#define CHANNELS_FSCHANNEL_H_ + +#include +#include +#include +#include +#include "CSVParser.h" +#include "PhotonicQubit_m.h" +#include "omnetpp/cexception.h" + +using namespace omnetpp; +using namespace quisp::messages; + +struct ORBITAL_PARAMETERS { + SimTime orbit_period = SIMTIME_MAX; + SimTime vis_start_time = SIMTIME_ZERO; + SimTime vis_end_time = SIMTIME_MAX; +}; + +namespace quisp::channels { +class FSChannel : public cDatarateChannel { + public: + FSChannel(); + virtual void initialize() override; + void set_orbit_parameters(double orb_period, double orb_vis_start_coeff, double orb_vis_end_coeff); + virtual void recalculateChannelParameters(); + bool checkLOS(); + double getDistanceAtTime(const simtime_t time); + virtual SimTime getNext_check_time(); + + private: + ORBITAL_PARAMETERS op; + CSVParser *dist_par; + + protected: + cChannel::Result processMessage(cMessage *msg, const SendOptions &options, simtime_t t) override; +}; +}; // namespace quisp::channels + +#endif /* CHANNELS_FSCHANNEL_H_ */ diff --git a/quisp/channels/FSChannel_test.cc b/quisp/channels/FSChannel_test.cc new file mode 100644 index 000000000..5118ed480 --- /dev/null +++ b/quisp/channels/FSChannel_test.cc @@ -0,0 +1,187 @@ +#include + +#include +#include + +#include "FSChannel.h" + +#include + +#include "modules/SharedResource/SharedResource.h" + +using namespace quisp_test; +using namespace quisp_test::utils; +using namespace quisp::messages; +using namespace quisp::modules::SharedResource; +using namespace omnetpp; +using namespace quisp_test::utils; +using OriginalFSChannel = quisp::channels::FSChannel; +using quisp_test::channel_type::TestChannelType; + +namespace { + +class MockNode : public quisp_test::TestQNode { + public: + MockNode(int addr, int mass, bool is_initiator, bool i_am_qnode) : TestQNode(addr, mass, is_initiator), is_qnode(i_am_qnode) {} + MockNode(int addr, int mass, bool is_initiator) : TestQNode(addr, mass, is_initiator), is_qnode(true) {} + bool is_qnode; +}; + +class FSChannel : public OriginalFSChannel { + public: + FSChannel() : OriginalFSChannel::FSChannel() { + setParDouble(this, "distance", 0); + setParDouble(this, "delay", 0); + setParDouble(this, "datarate", 0); + setParDouble(this, "ber", 0); + setParDouble(this, "per", 0); + setParDouble(this, "orbital_period", 86400); + setParDouble(this, "speed_of_light_in_FS", 299792458); + setParBool(this, "disabled", false); + setParBool(this, "CSV_varies_delay", true); + + setComponentType(new TestChannelType("test channel")); + } + cChannel::Result public_processMessage(cMessage* msg) { return processMessage(msg, SendOptions(), simTime()); }; + void addResultRecorders() override{}; +}; + +class TestSimpleModule : public cSimpleModule { + public: + virtual void scheduleAfter(simtime_t delay, cMessage* msg) override { + take(msg); + cSimpleModule::scheduleAfter(delay, msg); + } + virtual void addResultRecorders() override{}; + + virtual void handleMessage(cMessage* msg) override{}; + MockNode* parent; + cModule* getParentModule() const override { return parent; }; + + explicit TestSimpleModule(MockNode* parent_qnode) : cSimpleModule() { + this->setComponentType(new TestModuleType("test_simple_module")); + parent = parent_qnode; + auto* sim = getTestSimulation(); + sim->registerComponent(this); + port$o = new TestGate(this, "port$o"); + port$i = new TestGate(this, "port$i"); + this->addGate("port", cGate::INOUT); + } + + TestGate* port$i; + TestGate* port$o; + + std::map ports{}; + TestGate* gate(const char* gatename, int index = -1) override { + if (strcmp(gatename, "port$i") == 0) return port$i; + if (strcmp(gatename, "port$o") == 0) return port$o; + error("port: %s not found", gatename); + return nullptr; + } +}; + +class FSChannelTest : public ::testing::Test { + protected: + void SetUp() { + generateTestCSV("channels/test_dist_csv.csv"); + + sim = prepareSimulation(); + + sat_node = new MockNode(1, 0, false); + ground_node = new MockNode(2, 0, false); + + sat_simplemodule = new TestSimpleModule(sat_node); + + sat_gate = sat_node->addGate("sat_gate", cGate::INOUT); + ground_gate = ground_node->addGate("ground_gate", cGate::INOUT); + + downlink_chl = new FSChannel(); + + sim->registerComponent(downlink_chl); + + utils::setParStr(downlink_chl, "distance_CSV", "channels/test_dist_csv.csv"); + + sat_node->gate("sat_gate$o")->connectTo(ground_node->gate("ground_gate$i"), downlink_chl, true); + + sat_simplemodule->callInitialize(); + + downlink_chl->finalizeParameters(); // THIS METHOD MAY ONLY BE CALLED WHEN THE CHANNEL IS CONNECTED + downlink_chl->callInitialize(); + } + void TearDown() { std::remove("channels/test_dist_csv.csv"); } + + /** + * This function mimics the behavior of Omnet++ internals + * that sets up the message arrival to PointingSystem module. + * Call this function before PointingSystem->handleMessages + * when you want to retrieve the info of the arrival gate. + */ + + void generateTestCSV(const char* name) { + std::ofstream csv_to_generate; + csv_to_generate.open(name); + csv_to_generate << "200,100000\n"; + csv_to_generate << "300,300000\n"; + csv_to_generate << "400,200000\n"; + csv_to_generate.close(); + } + + TestSimulation* sim; + TestSimpleModule* sat_simplemodule; + MockNode* sat_node; + MockNode* ground_node; + FSChannel* downlink_chl; + cGate* sat_gate; + cGate* ground_gate; +}; + +TEST_F(FSChannelTest, messageWhenNonVisible) { + cMessage* msg = new cMessage(); + cChannel::Result res = downlink_chl->public_processMessage(msg); + sim->run(); + ASSERT_EQ(res.discard, true); +} + +TEST_F(FSChannelTest, messageWhenVisible) { + auto timeout = new cMessage; + sat_simplemodule->scheduleAfter(200, timeout); + sim->executeNextEvent(); + auto msg = new cMessage; + cChannel::Result res = downlink_chl->public_processMessage(msg); + sim->run(); + ASSERT_EQ(res.discard, false); + simtime_t delay = downlink_chl->par("distance").doubleValue() / downlink_chl->par("speed_of_light_in_FS").doubleValue(); + ASSERT_EQ(res.delay.raw(), delay.raw()); +} + +TEST_F(FSChannelTest, messageAfterVisible) { + auto timeout = new cMessage; + sat_simplemodule->scheduleAfter(600, timeout); + sim->executeNextEvent(); + auto msg = new cMessage; + cChannel::Result res = downlink_chl->public_processMessage(msg); + sim->run(); + ASSERT_EQ(res.discard, true); +} + +TEST_F(FSChannelTest, messageFollowingDayVisible) { + auto timeout = new cMessage; + sat_simplemodule->scheduleAfter(86700, timeout); + sim->executeNextEvent(); + auto msg = new cMessage; + cChannel::Result res = downlink_chl->public_processMessage(msg); + sim->run(); + ASSERT_EQ(res.discard, false); + simtime_t delay = downlink_chl->par("distance").doubleValue() / downlink_chl->par("speed_of_light_in_FS").doubleValue(); + ASSERT_EQ(res.delay.raw(), delay.raw()); // Comparing the raw int64_t values doesn't lose precision, unlike .dbl(). +} +TEST_F(FSChannelTest, messageFollowingDayNonVisible) { + auto timeout = new cMessage; + sat_simplemodule->scheduleAfter(86801, timeout); + sim->executeNextEvent(); + auto msg = new cMessage; + cChannel::Result res = downlink_chl->public_processMessage(msg); + sim->run(); + ASSERT_EQ(res.discard, true); +} +} // namespace diff --git a/quisp/channels/QuantumChannel_FS.cc b/quisp/channels/QuantumChannel_FS.cc new file mode 100644 index 000000000..9b7e54efd --- /dev/null +++ b/quisp/channels/QuantumChannel_FS.cc @@ -0,0 +1,194 @@ +/** \file QuantumChannel_FS.cc + * + * \brief Free Space Quantum Channel + */ + +#include +#include "CSVParser.h" +#include "FSChannel.h" + +using namespace omnetpp; +using namespace Eigen; +using namespace quisp::messages; + +namespace quisp::channels { + +/* The sum of Z, X and Y error rate equates to error_rate. Value could potentially between 0 ~ 1. */ +struct channel_error_model { + double error_rate; // total error rate + double z_error_rate; + double x_error_rate; + double y_error_rate; + double loss_rate; +}; + +/** \class QuantumChannel_FS QuantumChannel_FS.cc + * + * \brief QuantumChannel_FS + */ +class QuantumChannel_FS : public FSChannel { + public: + QuantumChannel_FS(); + + protected: + virtual void initialize() override; + virtual cChannel::Result processMessage(cMessage *msg, const SendOptions &options, simtime_t t) override; + + private: + void validateParameters(); + double calculateLossRate(); + void recalculateChannelParameters() override; + Matrix transition_matrix; + channel_error_model err; + CSVParser *Aatm_CSV; + + // Loss model - see 10.1038/s42005-022-01123-7 + double distance = 0; // in m + double lambda = 0; + double Dt = 0; + double Dr = 0; + double r0 = 0; + double Aatm = 1; + + // calculated in the code from the parameters above + double theta_diff = 0; + double theta_atm = 0; + double loss_rate = 0; + double attenuation_rate = 0; + + // statistics + // simsignal_t channel_length = registerSignal("channel_length"); + // simsignal_t channel_delay = registerSignal("channel_delay"); + // simsignal_t channel_t = registerSignal("channel_t"); + // simsignal_t channel_t_dB = registerSignal("channel_t_dB"); +}; + +Define_Channel(QuantumChannel_FS); + +QuantumChannel_FS::QuantumChannel_FS() {} + +void QuantumChannel_FS::initialize() { + FSChannel::initialize(); + distance = par("distance"); + Aatm_CSV = new CSVParser(par("Aatm_CSV")); + err.loss_rate = calculateLossRate(); + err.x_error_rate = par("channel_x_error_rate"); + err.y_error_rate = par("channel_y_error_rate"); + err.z_error_rate = par("channel_z_error_rate"); + err.error_rate = err.x_error_rate + err.y_error_rate + err.z_error_rate + err.loss_rate; + validateParameters(); + + //clang-format off + transition_matrix << 1 - err.error_rate, err.x_error_rate, err.z_error_rate, err.y_error_rate, err.loss_rate, err.x_error_rate, 1 - err.error_rate, err.y_error_rate, + err.z_error_rate, err.loss_rate, err.z_error_rate, err.y_error_rate, 1 - err.error_rate, err.x_error_rate, err.loss_rate, err.y_error_rate, err.z_error_rate, + err.x_error_rate, 1 - err.error_rate, err.loss_rate, 0, 0, 0, 0, 1; + // clang-format on +} + +cChannel::Result QuantumChannel_FS::processMessage(cMessage *msg, const SendOptions &options, simtime_t t) { + recalculateChannelParameters(); + PhotonicQubit *q = dynamic_cast(msg); + if (checkLOS()) { + if (q == nullptr) { + throw new cRuntimeError("something other than photonic qubit is sent through quantum channel"); + } + + MatrixXd probability_vector(1, 5); // I, X, Z, Y, Photon Lost + if (q->isLost()) { + probability_vector << 0, 0, 0, 0, 1; // Photon already lost due to the coupling lost. + } else { + probability_vector << 1, 0, 0, 0, 0; // No error + } + MatrixXd output_probability_vector(1, 5); + output_probability_vector = probability_vector * transition_matrix; + + // |-- no error --|-- x_error --|-- z_error --|-- y_error --|-- lost --| + double no_error_ceil = output_probability_vector(0, 0); + double x_error_ceil = no_error_ceil + output_probability_vector(0, 1); + double z_error_ceil = x_error_ceil + output_probability_vector(0, 2); + double y_error_ceil = z_error_ceil + output_probability_vector(0, 3); + + double rand = dblrand(); + if (rand < no_error_ceil) { + // Qubit will end up with no error + } else if (rand < x_error_ceil) { + // X error + q->getQubitRefForUpdate()->noiselessX(); + q->setXError(true); + } else if (rand < z_error_ceil) { + // Z error + q->getQubitRefForUpdate()->noiselessZ(); + q->setZError(true); + } else if (rand < y_error_ceil) { + // Y error + q->getQubitRefForUpdate()->noiselessX(); + q->getQubitRefForUpdate()->noiselessZ(); + q->setXError(true); + q->setZError(true); + } else { + // photon is lost + q->setLost(true); + } + } else + q->setLost(true); + + return {false, getDelay(), 0}; +} + +void QuantumChannel_FS::validateParameters() { + if (err.error_rate < 0 || 1 < err.error_rate) { + throw cRuntimeError("quantum channel has invalid total error rate. If this is a free space channel, check that you are in far-field of the transmitting telescope."); + } + if (err.x_error_rate < 0 || 1 < err.x_error_rate) { + throw cRuntimeError("quantum channel has invalid x error rate"); + } + if (err.y_error_rate < 0 || 1 < err.y_error_rate) { + throw cRuntimeError("quantum channel has invalid y error rate"); + } + if (err.z_error_rate < 0 || 1 < err.z_error_rate) { + throw cRuntimeError("quantum channel has invalid z error rate"); + } + if (err.loss_rate < 0 || 1 < err.loss_rate) { + throw cRuntimeError("quantum channel has invalid loss rate. If this is a free space channel, check that you are in far-field of the transmitting telescope."); + } +} + +double QuantumChannel_FS::calculateLossRate() { + distance = par("distance"); + lambda = par("wavelength"); + Dt = par("transmitter_telescope_diameter"); + Dr = par("receiver_telescope_diameter"); + r0 = par("Fried_parameter"); + + // hard-coded values from 10.1038/s42005-022-01123-7 + theta_diff = 1.27 * lambda / Dt; + theta_atm = 2.1 * lambda / r0; + attenuation_rate = ((pow(theta_diff, 2) + pow(theta_atm, 2)) / (pow(Dr, 2))) * pow(distance, 2) * Aatm; // from 10.1038/s42005-022-01123-7 + loss_rate = 1 - 1 / attenuation_rate; + + // emit(channel_t,1/attenuation_rate); + // emit(channel_t_dB,10*log10(1/attenuation_rate)); + + return loss_rate; +} + +void QuantumChannel_FS::recalculateChannelParameters() { + FSChannel::recalculateChannelParameters(); + Aatm = Aatm_CSV->getPropertyAtTime(simTime().dbl()); + err.loss_rate = calculateLossRate(); + err.error_rate = err.x_error_rate + err.y_error_rate + err.z_error_rate + err.loss_rate; + validateParameters(); + + //clang-format off + transition_matrix << 1 - err.error_rate, err.x_error_rate, err.z_error_rate, err.y_error_rate, err.loss_rate, err.x_error_rate, 1 - err.error_rate, err.y_error_rate, + err.z_error_rate, err.loss_rate, err.z_error_rate, err.y_error_rate, 1 - err.error_rate, err.x_error_rate, err.loss_rate, err.y_error_rate, err.z_error_rate, + err.x_error_rate, 1 - err.error_rate, err.loss_rate, 0, 0, 0, 0, 1; + // clang-format on + + // emit(channel_length,par("distance").doubleValue()); + // emit(channel_delay,getDelay()); + // emit(channel_att,attenuation_rate); + // emit(channel_att_dB,10*log10(attenuation_rate)); +} + +} // namespace quisp::channels diff --git a/quisp/channels/channels.ned b/quisp/channels/channels.ned index 0330ed98c..3985df516 100644 --- a/quisp/channels/channels.ned +++ b/quisp/channels/channels.ned @@ -5,24 +5,52 @@ import ned.DatarateChannel; import ned.DelayChannel; import ned.IdealChannel; -channel ClassicalChannel extends DatarateChannel -{ +channel FSChannel extends DatarateChannel { + @class(FSChannel); double cost = default(1); + double distance @unit(m) = default(20km) @mutable; + string distance_CSV; + double speed_of_light_in_FS @unit(m) = default(299792.458km); + double orbital_period @unit(s) = default(24h); + bool CSV_varies_delay = default(false); + delay = this.distance / speed_of_light_in_FS * 1s @mutable; + datarate = uniform(1kbps, 100kbps); +} + +channel FiberChannel extends DatarateChannel { + double cost = default(1); double distance @unit(km) = default(20km); double speed_of_light_in_fiber @unit(km) = default(208189.206944km); delay = this.distance / speed_of_light_in_fiber * 1s; + } + +channel ClassicalChannel extends FiberChannel { datarate = uniform(1kbps, 100kbps); } -channel QuantumChannel extends DatarateChannel +channel QuantumChannel extends FiberChannel { @class(QuantumChannel); - double cost = default(1); - double distance @unit(km) = default(20km); - double speed_of_light_in_fiber @unit(km) = default(208189.206944km); - delay = this.distance / speed_of_light_in_fiber * 1s; double channel_loss_rate = default(0); double channel_x_error_rate = default(0); double channel_z_error_rate = default(0); double channel_y_error_rate = default(0); } + +channel ClassicalChannel_FS extends FSChannel +{ + +} + +channel QuantumChannel_FS extends FSChannel +{ + @class(QuantumChannel_FS); + double channel_x_error_rate = default(0); + double channel_z_error_rate = default(0); + double channel_y_error_rate = default(0); + double wavelength @unit(m) = default(1550nm); + double transmitter_telescope_diameter @unit(m) = default(13.5cm); + double receiver_telescope_diameter @unit(m) = default(1m); + double Fried_parameter @unit(m) = default(10cm); + string Aatm_CSV; +} diff --git a/quisp/core b/quisp/core new file mode 100644 index 000000000..9c571a8e6 Binary files /dev/null and b/quisp/core differ diff --git a/quisp/messages/visibility_messages.msg b/quisp/messages/visibility_messages.msg new file mode 100644 index 000000000..a133f177a --- /dev/null +++ b/quisp/messages/visibility_messages.msg @@ -0,0 +1,14 @@ +namespace quisp::messages; + +packet VisibilityMessage {} + +packet VisCheckOutcome extends VisibilityMessage { + double next_check_time; +} + +packet VisCheckRequest extends VisibilityMessage { + string out_gate; + int index; +} + +packet VisCheckRetry extends VisibilityMessage {} \ No newline at end of file diff --git a/quisp/modules/Application/Application.cc b/quisp/modules/Application/Application.cc index 8826140ea..e8f759fa7 100644 --- a/quisp/modules/Application/Application.cc +++ b/quisp/modules/Application/Application.cc @@ -75,25 +75,25 @@ void Application::handleMessage(cMessage *msg) { } if (auto *req = dynamic_cast(msg)) { - logger->logPacket("handleMessage", msg); + // logger->logPacket("handleMessage", msg); send(msg, "toRouter"); return; } if (dynamic_cast(msg)) { - logger->logPacket("handleMessage", msg); + // logger->logPacket("handleMessage", msg); send(msg, "toRouter"); return; } if (dynamic_cast(msg)) { - logger->logPacket("handleMessage", msg); + // logger->logPacket("handleMessage", msg); send(msg, "toRouter"); return; } if (dynamic_cast(msg)) { - logger->logPacket("handleMessage", msg); + // logger->logPacket("handleMessage", msg); generateTraffic(); scheduleAt(simTime() + 100, msg); } diff --git a/quisp/modules/Common/GatedQueue.cc b/quisp/modules/Common/GatedQueue.cc new file mode 100644 index 000000000..9799e2d8d --- /dev/null +++ b/quisp/modules/Common/GatedQueue.cc @@ -0,0 +1,112 @@ + +#include "GatedQueue.h" + +namespace quisp::modules { + +GatedQueue::GatedQueue() : provider(utils::ComponentProvider{this}) {} + +GatedQueue::~GatedQueue() {} + +void GatedQueue::handleMessage(cMessage *msg) { + if (dynamic_cast(msg) and msg->arrivedOn("in")) { + send(msg, "line$o"); + return; + } + if (hasGUI()) { + bubble("GatedQueue received a message!\n"); + } + + if (msg->arrivedOn("from_ps") and dynamic_cast(msg) == nullptr) { + throw(cRuntimeError("Non-control message at the control gate of a gated queue, this should not happen.")); + } + + if (auto vco = dynamic_cast(msg)) { + if (vco->getNext_check_time() == 0) { + last_polling_time = simTime(); + pending_vcr = false; + msg = (cMessage *)queue.pop(); + emit(queuing_time_signal, simTime() - msg->getTimestamp()); + emit(qlen_signal, queue.getLength()); + startTransmitting(msg); + } else { + VisCheckRetry *retry = new VisCheckRetry(); + next_check_time = vco->getNext_check_time(); + scheduleAfter(next_check_time, retry); + } + delete vco; + return; + } + + if (dynamic_cast(msg)) { + VisCheckRequest *vis_check = new VisCheckRequest(); + vis_check->setOut_gate(gate("line$o")->getNextGate()->getName()); + if (gate("line$o")->getNextGate()->isVector()) + vis_check->setIndex(gate("line$o")->getNextGate()->getIndex()); + else + vis_check->setIndex(-1); + send(vis_check, "to_ps"); + delete msg; + return; + } + + if (msg->arrivedOn("line$i")) { + emit(rx_bytes_signal, (long)check_and_cast(msg)->getByteLength()); + send(msg, "out"); + return; + } + + if (msg == end_transmission_event) { // update busy status + // Transmission finished, we can start next one. + EV_INFO << "Transmission finished.\n"; + is_busy = false; + + if (queue.isEmpty()) { + emit(busy_signal, false); + return; + } + + if (!is_busy and !queue.isEmpty()) { + is_busy = true; + VisCheckRequest *vis_check = new VisCheckRequest(); + vis_check->setOut_gate(gate("line$o")->getNextGate()->getName()); + if (gate("line$o")->getNextGate()->isVector()) + vis_check->setIndex(gate("line$o")->getNextGate()->getIndex()); + else + vis_check->setIndex(-1); + send(vis_check, "to_ps"); + } + return; + } + + if (frame_capacity && queue.getLength() >= frame_capacity) { + EV_INFO << "Received " << msg << " but transmitter busy and queue full: discarding\n"; + emit(drop_signal, (long)check_and_cast(msg)->getByteLength()); + delete msg; + return; + } + + EV_INFO << "Received " << msg << ": queuing up\n"; + msg->setTimestamp(); + queue.insert(msg); + emit(qlen_signal, queue.getLength()); + + if (!is_busy and !queue.isEmpty() and !pending_vcr) { + if (last_polling_time < simTime()) { + pending_vcr = true; + VisCheckRequest *vis_check = new VisCheckRequest(); + vis_check->setOut_gate(gate("line$o")->getNextGate()->getName()); + if (gate("line$o")->getNextGate()->isVector()) + vis_check->setIndex(gate("line$o")->getNextGate()->getIndex()); + else + vis_check->setIndex(-1); + send(vis_check, "to_ps"); + } else { // not busy, there are messages, visibility already polled + msg = (cMessage *)queue.pop(); + emit(queuing_time_signal, simTime() - msg->getTimestamp()); + emit(qlen_signal, queue.getLength()); + startTransmitting(msg); + } + } +} + +} // namespace quisp::modules diff --git a/quisp/modules/Common/GatedQueue.h b/quisp/modules/Common/GatedQueue.h new file mode 100644 index 000000000..398110eee --- /dev/null +++ b/quisp/modules/Common/GatedQueue.h @@ -0,0 +1,42 @@ +/** + * \file GatedQueue.h + * + * \brief Queue, modified to query the pointing system before sending messages to the outside. + * + */ + +#ifndef __QUISP_GATEDQUEUE_H_ +#define __QUISP_GATEDQUEUE_H_ + +#include +#include "Queue.h" +#include "messages/link_generation_messages_m.h" +#include "messages/ospf_messages_m.h" +#include "messages/visibility_messages_m.h" +#include "utils/ComponentProvider.h" + +using namespace omnetpp; +using namespace quisp::messages; + +namespace quisp::modules { + +class GatedQueue : public Queue { + public: + GatedQueue(); + ~GatedQueue(); + + protected: + simtime_t next_check_time = 0; + simtime_t last_polling_time = -1; + virtual void handleMessage(cMessage *msg) override; + utils::ComponentProvider provider; + + private: + bool pending_vcr = false; +}; + +Define_Module(GatedQueue); + +} // namespace quisp::modules + +#endif diff --git a/quisp/modules/Common/GatedQueue.ned b/quisp/modules/Common/GatedQueue.ned new file mode 100644 index 000000000..528dbeab8 --- /dev/null +++ b/quisp/modules/Common/GatedQueue.ned @@ -0,0 +1,10 @@ + +package modules.Common; + +simple GatedQueue extends Queue +{ + @class(GatedQueue); + gates: + input from_ps; + output to_ps; +} diff --git a/quisp/modules/Common/GatedQueue_test.cc b/quisp/modules/Common/GatedQueue_test.cc new file mode 100644 index 000000000..b8cc64940 --- /dev/null +++ b/quisp/modules/Common/GatedQueue_test.cc @@ -0,0 +1,188 @@ +#include "GatedQueue.h" +#include +#include +#include "messages/visibility_messages_m.h" +#include "modules/SharedResource/SharedResource.h" +#include "test_utils/MockFreeSpaceChannel.h" +#include "test_utils/Stub.h" +#include "test_utils/TestUtilFunctions.h" + +using namespace quisp_test; +using namespace quisp_test::utils; +using namespace quisp::messages; +using namespace quisp::modules::SharedResource; +using quisp_test::FSChannel::MockFreeSpaceChannel; +using OriginalGatedQueue = quisp::modules::GatedQueue; +namespace { + +class MockNode : public quisp_test::TestQNode { + public: + MockNode(int addr, int mass, bool is_initiator, bool i_am_qnode) : TestQNode(addr, mass, is_initiator), is_qnode(i_am_qnode) {} + MockNode(int addr, int mass, bool is_initiator) : TestQNode(addr, mass, is_initiator), is_qnode(true) {} + bool is_qnode; +}; + +class Strategy : public quisp_test::TestComponentProviderStrategy { + public: + Strategy(MockNode* _qnode) : parent_qnode(_qnode) {} + cModule* getNode() override { return parent_qnode; } + int getNodeAddr() override { return parent_qnode->address; } + SharedResource* getSharedResource() override { return &shared_resource; } + + private: + MockNode* parent_qnode; + SharedResource shared_resource; +}; + +class GatedQueue : public OriginalGatedQueue { + public: + using OriginalGatedQueue::handleMessage; + using OriginalGatedQueue::initialize; + void addResultRecorders() override{}; + virtual void take(omnetpp::cOwnedObject* obj) override { OriginalGatedQueue::take(obj); }; + virtual void send(omnetpp::cMessage* msg, const char* gatename, int gateindex = -1) override { + take(msg); + OriginalGatedQueue::send(msg, gatename, gateindex); + }; + virtual void scheduleAt(omnetpp::simtime_t t, omnetpp::cMessage* msg) override { + take(msg); + OriginalGatedQueue::scheduleAt(t, msg); + }; + MockNode* parent; + + explicit GatedQueue(MockNode* parent_qnode) : OriginalGatedQueue() { + this->provider.setStrategy(std::make_unique(parent_qnode)); + this->setComponentType(new TestModuleType("test_gated_queue")); + setParBool(this, "useCutThroughSwitching", false); + setParInt(this, "frame_capacity", 0); + parent = parent_qnode; + auto* sim = getTestSimulation(); + sim->registerComponent(this); + inPort = new TestGate(this, "in"); + outPort = new TestGate(this, "out"); + line_inPort = new TestGate(this, "line$i"); + line_outPort = new TestGate(this, "line$o"); + from_psPort = new TestGate(this, "from_ps"); + to_psPort = new TestGate(this, "to_ps"); + + this->addGate("in", cGate::INPUT); + this->addGate("out", cGate::OUTPUT); + this->addGate("line", cGate::INOUT); + this->addGate("from_ps", cGate::INPUT); + this->addGate("to_ps", cGate::OUTPUT); + } + + TestGate* inPort; + TestGate* outPort; + TestGate* line_inPort; + TestGate* line_outPort; + TestGate* from_psPort; + TestGate* to_psPort; + + std::map ports{}; + TestGate* gate(const char* gatename, int index = -1) override { + if (strcmp(gatename, "in") == 0) return inPort; + if (strcmp(gatename, "out") == 0) return outPort; + if (strcmp(gatename, "line$i") == 0) return line_inPort; + if (strcmp(gatename, "line$o") == 0) return line_outPort; + if (strcmp(gatename, "from_ps") == 0) return from_psPort; + if (strcmp(gatename, "to_ps") == 0) return to_psPort; + error("port: %s not found", gatename); + return nullptr; + } + bool parentModuleIsQNode() { return dynamic_cast(provider.getNode())->is_qnode; } + void setIsQnode(bool is_qnode) { dynamic_cast(provider.getNode())->is_qnode = is_qnode; } +}; + +class GatedQueueTest : public ::testing::Test { + protected: + void SetUp() { + sim = prepareSimulation(); + node = new MockNode(0, 0, false); + gated_queue = new GatedQueue(node); + + chl = new MockFreeSpaceChannel("test_channel"); + quisp_test::utils::setParDouble(chl, "delay", 1); + + stub = new Stub(); + + outgate = node->addGate("test_out", cGate::OUTPUT); + stub_gate = stub->addGate("stub_gate", cGate::INPUT); + + outgate->connectTo(stub_gate, chl, true); + chl->finalizeParameters(); // THIS METHOD MAY ONLY BE CALLED WHEN THE CHANNEL IS CONNECTED + + gated_queue->callInitialize(); + chl->callInitialize(); + stub->callInitialize(); + + gated_queue->gate("line$o")->quiet_connectTo(outgate); + + // out_to_router = node->addGate("out_to_router", cGate::OUTPUT); + } + void TearDown() {} + + TestSimulation* sim; + GatedQueue* gated_queue; + MockNode* node; + MockFreeSpaceChannel* chl; + Stub* stub; + + cGate* outgate; + cGate* stub_gate; + // TestGate* node_out; +}; + +TEST_F(GatedQueueTest, handleNonVisMessage) { + auto msg = new cMessage; + msg->setArrival(gated_queue->getId(), gated_queue->findGate("from_ps"), simTime()); + EXPECT_THROW({ gated_queue->handleMessage(msg); }, cRuntimeError); +} + +TEST_F(GatedQueueTest, handleIncomingMessage) { + omnetpp::cPacket* pkt = new cPacket("TestPacket"); + gated_queue->take(pkt); + pkt->setArrival(gated_queue->getId(), gated_queue->findGate("line$i"), simTime()); + gated_queue->handleMessage(pkt); + ASSERT_EQ(gated_queue->gate("to_ps")->messages.size(), 0); // Must not request Vis info + ASSERT_EQ(*gated_queue->gate("out")->messages.front()->getName(), *pkt->getName()); // Must let message from outside pass always +} + +TEST_F(GatedQueueTest, handleOutgoingMessage_Visible) { + omnetpp::cPacket* pkt = new cPacket("TestPacket"); + // gated_queue->take(pkt); + pkt->setArrival(gated_queue->getId(), gated_queue->findGate("in"), simTime()); + gated_queue->handleMessage(pkt); + ASSERT_EQ(gated_queue->gate("to_ps")->messages.size(), 1); // Must request Vis info + ASSERT_EQ(gated_queue->gate("line$o")->messages.size(), 0); // Must not send message yet + VisCheckOutcome* vco = new VisCheckOutcome(); + vco->setNext_check_time(0); + vco->setArrival(gated_queue->getId(), gated_queue->findGate("from_ps"), simTime()); + gated_queue->handleMessage(vco); + ASSERT_EQ(*gated_queue->gate("line$o")->messages.front()->getName(), *pkt->getName()); // If receiver is visible, we can send the message. +} + +TEST_F(GatedQueueTest, handleOutgoingMessage_NonVisible) { + omnetpp::cPacket* pkt = new cPacket("TestPacket"); + gated_queue->take(pkt); + pkt->setArrival(gated_queue->getId(), gated_queue->findGate("in"), simTime()); + gated_queue->handleMessage(pkt); + ASSERT_EQ(gated_queue->gate("to_ps")->messages.size(), 1); // Must request Vis info + ASSERT_EQ(gated_queue->gate("line$o")->messages.size(), 0); // Must not send message yet + VisCheckOutcome* vco = new VisCheckOutcome(); + vco->setNext_check_time(1); + vco->setArrival(gated_queue->getId(), gated_queue->findGate("from_ps"), simTime()); + gated_queue->handleMessage(vco); + ASSERT_EQ(gated_queue->gate("line$o")->messages.size(), 0); // Must not send message yet + sim->executeNextEvent(); // resend vcr + ASSERT_EQ(simTime().dbl(), 1); + + ASSERT_EQ(gated_queue->gate("to_ps")->messages.size(), 2); // Must request Vis info + ASSERT_EQ(gated_queue->gate("line$o")->messages.size(), 0); // Must not send message yet + VisCheckOutcome* second_vco = new VisCheckOutcome(); + second_vco->setNext_check_time(0); + second_vco->setArrival(gated_queue->getId(), gated_queue->findGate("from_ps"), simTime()); + gated_queue->handleMessage(second_vco); + ASSERT_EQ(gated_queue->gate("line$o")->messages.size(), 1); // Finally send the message +} +} // namespace diff --git a/quisp/modules/Common/Queue.cc b/quisp/modules/Common/Queue.cc index 47b5e62e3..f2a1b1cc3 100644 --- a/quisp/modules/Common/Queue.cc +++ b/quisp/modules/Common/Queue.cc @@ -41,7 +41,9 @@ void Queue::startTransmitting(cMessage *msg) { emit(tx_bytes_signal, (long)num_bytes); // Schedule an event for the time when last bit will leave the gate. - simtime_t transmission_finish_time = gate("line$o")->getTransmissionChannel()->getTransmissionFinishTime(); + cChannel *chl = gate("line$o")->getTransmissionChannel(); + simtime_t transmission_finish_time = chl->getTransmissionFinishTime(); + EV_INFO << "Transmission will end in " << transmission_finish_time << "\n"; // pass end_transmission_event when it ends diff --git a/quisp/modules/Common/Queue.h b/quisp/modules/Common/Queue.h index 2e36cd511..f6ccc1a6e 100644 --- a/quisp/modules/Common/Queue.h +++ b/quisp/modules/Common/Queue.h @@ -24,7 +24,7 @@ namespace modules { * \brief Queue */ class Queue : public cSimpleModule { - private: + protected: long frame_capacity; cQueue queue; cMessage *end_transmission_event; diff --git a/quisp/modules/Common/Queue.ned b/quisp/modules/Common/Queue.ned index 6dcd00759..200fdc7e1 100644 --- a/quisp/modules/Common/Queue.ned +++ b/quisp/modules/Common/Queue.ned @@ -26,7 +26,7 @@ simple Queue // @statistic[txBytes](title="transmitting packet byte length"; unit=bytes; record=vector?,count,sum,histogram; interpolationmode=none); // @statistic[rxBytes](title="received packet byte length"; unit=bytes; record=vector?,count,sum,histogram; interpolationmode=none); gates: - input in; - output out; - inout line; + input in @loose; + output out @loose; + inout line @loose; } diff --git a/quisp/modules/Common/Router.cc b/quisp/modules/Common/Router.cc index 986b0cc44..82c3c3772 100644 --- a/quisp/modules/Common/Router.cc +++ b/quisp/modules/Common/Router.cc @@ -178,7 +178,9 @@ void Router::handleOspfHelloPacket(cMessage *msg) { } } -bool Router::parentModuleIsQNode() { return provider.getNode()->getModuleType() == cModuleType::get("modules.QNode"); } +bool Router::parentModuleIsQNode() { + return (provider.getNode()->getModuleType() == cModuleType::get("modules.QNode") || provider.getNode()->getModuleType() == cModuleType::get("modules.QNode_Sat")); +} /** * @details Unlike QNodes, BSA nodes are connected to only two nodes (at least that is the assumption) diff --git a/quisp/modules/EPPSNode_Sat.ned b/quisp/modules/EPPSNode_Sat.ned new file mode 100644 index 000000000..ad2e2562e --- /dev/null +++ b/quisp/modules/EPPSNode_Sat.ned @@ -0,0 +1,38 @@ +package modules; +@namespace(quisp::modules); + +import ned.DatarateChannel; +import ned.DelayChannel; +import ned.IdealChannel; +import modules.PhysicalConnection.EPPS.*; +import modules.Common.Router; +import modules.Common.GatedQueue; +import modules.Satellite.PointingSystem; + +module EPPSNode_Sat extends EPPSNode +{ + parameters: + @display("i=EPPS"); + bool is_satellite = default(true); + + + gates: + + submodules: + ps[sizeof(port)]: PointingSystem { + } + Gqueue[sizeof(port)]: GatedQueue { + parameters: + address = index; + //buffer = 8; + //@display("p=198,43"); + } + connections: + for i=0..sizeof(port)-1 { + router.toQueue[i] --> { @reconnect; } --> Gqueue[i].in; // Each routing port is connected to its own queue + router.fromQueue[i] <-- { @reconnect; } <-- Gqueue[i].out; + Gqueue[i].line <--> { @reconnect; } <--> port[i]; + Gqueue[i].to_ps --> ps[i].req; + Gqueue[i].from_ps <-- ps[i].ans; + } +} diff --git a/quisp/modules/PhysicalConnection/BSA/BSAController.cc b/quisp/modules/PhysicalConnection/BSA/BSAController.cc index 9d9f3de58..ae84d0b05 100644 --- a/quisp/modules/PhysicalConnection/BSA/BSAController.cc +++ b/quisp/modules/PhysicalConnection/BSA/BSAController.cc @@ -4,6 +4,7 @@ */ #include "BSAController.h" +#include #include #include #include "messages/BSA_ipc_messages_m.h" @@ -12,6 +13,8 @@ #include "omnetpp/cexception.h" #include "omnetpp/cmessage.h" +using quisp::channels::FSChannel; + namespace quisp::modules { Define_Module(BSAController); @@ -35,8 +38,11 @@ void BSAController::initialize() { left_qnic = getExternalQNICInfoFromPort(0); } is_active = strcmp(par("mode").stringValue(), "active") == 0; - left_travel_time = getTravelTimeFromPort(0); - right_travel_time = getTravelTimeFromPort(1); + left_travel_time = getPredictedTravelTimeFromPort(0); + right_travel_time = getPredictedTravelTimeFromPort(1); + time_interval_between_photons = SimTime(1, SIMTIME_S) / getParentModule()->getSubmodule("bsa")->par("photon_detection_per_second").intValue(); + simtime_t first_notification_timer = SimTime(par("initial_notification_timing_buffer").doubleValue()); + // right_qnic = getExternalQNICInfoFromPort(1); time_out_count = 0; time_out_message = new BSMNotificationTimeout("bsm_notification_timeout"); if (is_active) { @@ -50,11 +56,13 @@ void BSAController::initialize() { void BSAController::handleMessage(cMessage *msg) { if (msg == time_out_message) { + // P: For satellite links, we need to recalculate this for every pulse train due to variable channel length! send(generateFirstNotificationTiming(true), "to_router"); send(generateFirstNotificationTiming(false), "to_router"); bsa->resetState(); // set timeout to be twice the travel time plus number of no response time_out_count++; + scheduleAt(simTime() + (2 + time_out_count) * (offset_time_for_first_photon), msg); return; } @@ -100,6 +108,9 @@ void BSAController::sendMeasurementResults(BatchClickEvent *batch_click_msg) { click_result->setSrcAddr(left_qnic.parent_node_addr); send(click_result, "to_router"); } + // send(leftpk, "to_router"); + // send(rightpk, "to_router"); + offset_time_for_first_photon = calculateOffsetTimeFromDistance(); last_result_send_time = simTime(); } @@ -108,9 +119,15 @@ BSMTimingNotification *BSAController::generateFirstNotificationTiming(bool is_le int qnic_index = (is_left) ? left_qnic.index : right_qnic.index; auto qnic_type = (is_left) ? left_qnic.type : right_qnic.type; auto *notification_packet = new BSMTimingNotification(); + + offset_time_for_first_photon = calculateOffsetTimeFromDistance(); + left_travel_time = getPredictedTravelTimeFromPort(0); + right_travel_time = getPredictedTravelTimeFromPort(1); + auto travel_time = (is_left) ? left_travel_time : right_travel_time; // The node should emit at + simtime_t arrival_time = simTime() + offset_time_for_first_photon; simtime_t emit_time = arrival_time - travel_time; @@ -128,6 +145,11 @@ CombinedBSAresults *BSAController::generateNextNotificationTiming(bool is_left) int qnic_index = (is_left) ? left_qnic.index : right_qnic.index; auto qnic_type = (is_left) ? left_qnic.type : right_qnic.type; auto *notification_packet = new CombinedBSAresults(); + + offset_time_for_first_photon = calculateOffsetTimeFromDistance(); + left_travel_time = getPredictedTravelTimeFromPort(0); + right_travel_time = getPredictedTravelTimeFromPort(1); + auto travel_time = (is_left) ? left_travel_time : right_travel_time; // The node should emit at @@ -144,9 +166,11 @@ CombinedBSAresults *BSAController::generateNextNotificationTiming(bool is_left) } simtime_t BSAController::calculateOffsetTimeFromDistance() { - auto one_way_longer_travel_time = std::max(getTravelTimeFromPort(0), getTravelTimeFromPort(1)); + auto current_longer_travel_time = std::max(getCurrentTravelTimeFromPort(0), getCurrentTravelTimeFromPort(1)); + auto predicted_longer_travel_time = std::max(getPredictedTravelTimeFromPort(0), getPredictedTravelTimeFromPort(1)); + // we add 10 times the photon interval to offset the travel time for safety in case RuleEngine has internal delay; - return 2 * one_way_longer_travel_time + time_interval_between_photons * 10; + return current_longer_travel_time + predicted_longer_travel_time + time_interval_between_photons * 10; } int BSAController::getExternalAdressFromPort(int port) { @@ -205,8 +229,43 @@ int BSAController::getExternalQNICIndexFromPort(int port) { ->par("self_qnic_index"); } -simtime_t BSAController::getTravelTimeFromPort(int port) { +simtime_t BSAController::getPredictedTravelTimeFromPort(int port) { + cChannel *channel; + double distance = 0; // Initialization to avoid complaints + double speed_of_light_in_channel = 1; + // this port connects to internal QNIC + // since only port 0 is supposed to be connected to internal QNIC + if (port == 0 && (strcmp(getParentModule()->getName(), "qnic_r") == 0 || strcmp(getParentModule()->getName(), "qnic_rp") == 0)) { + return 0; + } else { + // this port connects to outside QNode + channel = getParentModule()->getSubmodule("bsa")->gate("quantum_port$i", port)->getIncomingTransmissionChannel(); + } + + if (FSChannel *FS_chl = dynamic_cast(channel)) { + speed_of_light_in_channel = FS_chl->par("speed_of_light_in_FS").doubleValue(); // km/sec + + // I need to predict where the satellite is going to be when emission starts. If I send the notification now, that's distance(simTime() + travel_time). + double current_distance = FS_chl->getDistanceAtTime(simTime()); + simtime_t current_travel_time = SimTime(current_distance / speed_of_light_in_channel); + + double predicted_distance = FS_chl->getDistanceAtTime(simTime() + current_travel_time); + double offset = (predicted_distance - current_distance) / speed_of_light_in_channel; + + // distance = FS_chl->getDistanceAtTime(simTime()); + return SimTime(current_distance / speed_of_light_in_channel) + offset; + + } else { + distance = channel->par("distance").doubleValue(); // km + speed_of_light_in_channel = channel->par("speed_of_light_in_fiber").doubleValue(); + return SimTime(distance / speed_of_light_in_channel); + } +} + +simtime_t BSAController::getCurrentTravelTimeFromPort(int port) { cChannel *channel; + double distance = 0; // Initialization to avoid complaints + double speed_of_light_in_channel = 1; // this port connects to internal QNIC // since only port 0 is supposed to be connected to internal QNIC if (port == 0 && (strcmp(getParentModule()->getName(), "qnic_r") == 0 || strcmp(getParentModule()->getName(), "qnic_rp") == 0)) { @@ -215,8 +274,15 @@ simtime_t BSAController::getTravelTimeFromPort(int port) { // this port connects to outside QNode channel = getParentModule()->getSubmodule("bsa")->gate("quantum_port$i", port)->getIncomingTransmissionChannel(); } - double distance = channel->par("distance").doubleValue(); // km - double speed_of_light_in_channel = channel->par("speed_of_light_in_fiber").doubleValue(); // km/sec + + if (FSChannel *FS_chl = dynamic_cast(channel)) { + speed_of_light_in_channel = FS_chl->par("speed_of_light_in_FS").doubleValue(); // km/sec + distance = FS_chl->getDistanceAtTime(simTime()); + + } else { + distance = channel->par("distance").doubleValue(); // km + speed_of_light_in_channel = channel->par("speed_of_light_in_fiber").doubleValue(); + } return SimTime(distance / speed_of_light_in_channel); } diff --git a/quisp/modules/PhysicalConnection/BSA/BSAController.h b/quisp/modules/PhysicalConnection/BSA/BSAController.h index 50b7aa920..af66107e6 100644 --- a/quisp/modules/PhysicalConnection/BSA/BSAController.h +++ b/quisp/modules/PhysicalConnection/BSA/BSAController.h @@ -1,6 +1,7 @@ /** \file BSA_Controller.h * * \brief BSAController + * */ #pragma once @@ -61,7 +62,9 @@ class BSAController : public cSimpleModule { int getExternalQNICIndexFromPort(int port); simtime_t calculateOffsetTimeFromDistance(); - simtime_t getTravelTimeFromPort(int port); + simtime_t getPredictedTravelTimeFromPort(int port); + simtime_t getCurrentTravelTimeFromPort(int port); + double getExternalDistanceFromPort(int port); QNicInfo getExternalQNICInfoFromPort(int port); void sendMeasurementResults(BatchClickEvent* msg); diff --git a/quisp/modules/PhysicalConnection/BSA/BellStateAnalyzer.cc b/quisp/modules/PhysicalConnection/BSA/BellStateAnalyzer.cc index 467a6e60d..76cb357e9 100644 --- a/quisp/modules/PhysicalConnection/BSA/BellStateAnalyzer.cc +++ b/quisp/modules/PhysicalConnection/BSA/BellStateAnalyzer.cc @@ -71,11 +71,11 @@ void BellStateAnalyzer::handleMessage(cMessage *msg) { } } - if (photon.from_port == PortNumber::First) + if (photon.from_port == PortNumber::First) { first_port_records.emplace_back(photon); - else + } else { second_port_records.emplace_back(photon); - + } if (!photon.is_last) { return; } @@ -98,9 +98,9 @@ void BellStateAnalyzer::processPhotonRecords() { for (int i = 0; i < number_of_possible_pairs; i++) { auto p = first_port_records[i]; auto q = second_port_records[i]; - if (fabs(p.arrival_time - q.arrival_time) < indistinguishability_window) { - batch_click_msg->appendClickResults(processIndistinguishPhotons(p, q)); + BSAClickResult res = processIndistinguishPhotons(p, q); + batch_click_msg->appendClickResults(res); } else { batch_click_msg->appendClickResults({.success = false, .correction_operation = PauliOperator::I}); discardPhoton(p); diff --git a/quisp/modules/PhysicalConnection/EPPS/EPPSController.cc b/quisp/modules/PhysicalConnection/EPPS/EPPSController.cc index 61bb2b3b0..7c4b45b6b 100644 --- a/quisp/modules/PhysicalConnection/EPPS/EPPSController.cc +++ b/quisp/modules/PhysicalConnection/EPPS/EPPSController.cc @@ -7,13 +7,16 @@ #include #include #include +#include "channels/FSChannel.h" #include "messages/QNode_ipc_messages_m.h" #include "messages/link_generation_messages_m.h" #include "modules/QNIC.h" #include "omnetpp/cmessage.h" #include "omnetpp/csimulation.h" #include "omnetpp/simtime.h" + using namespace omnetpp; +using quisp::channels::FSChannel; namespace quisp::modules { @@ -33,14 +36,19 @@ void EPPSController::initialize() { right_addr = getExternalAdressFromPort(1); left_qnic_index = getExternalQNICIndexFromPort(0); right_qnic_index = getExternalQNICIndexFromPort(1); - left_travel_time = getTravelTimeFromPort(0); - right_travel_time = getTravelTimeFromPort(1); + // left_travel_time = getCurrentTravelTimeFromPort(0); + // right_travel_time = getCurrentTravelTimeFromPort(1); time_out_count = 0; emission_stopped = false; checkNeighborsBSACapacity(); time_out_message = new EPPSNotificationTimeout(); simtime_t first_notification_timer = par("initial_notification_timing_buffer").doubleValue(); scheduleAt(first_notification_timer, time_out_message); + resync_delay = SimTime(par("SAT_resync_delay")); + if (resync_delay > 0) { + cMessage *resync = new cMessage("Resync"); + scheduleAt(first_notification_timer + resync_delay, resync); + } } void EPPSController::handleMessage(cMessage *msg) { @@ -49,20 +57,31 @@ void EPPSController::handleMessage(cMessage *msg) { scheduleAt(simTime() + pk->getIntervalBetweenPhotons(), pk); return; } else if (msg == time_out_message) { + left_travel_time = getCurrentTravelTimeFromPort(0); + right_travel_time = getCurrentTravelTimeFromPort(1); + local_emit_time = simTime() + std::max(left_travel_time, right_travel_time); + left_travel_time_predicted = getPredictedTravelTimeFromPort(0); + right_travel_time_predicted = getPredictedTravelTimeFromPort(1); + last_result_send_time = simTime(); - emit_time = simTime() + 2 * std::max(left_travel_time, right_travel_time); EPPSTimingNotification *left_pk = generateNotifier(true); EPPSTimingNotification *right_pk = generateNotifier(false); send(left_pk, "to_router"); send(right_pk, "to_router"); emit_req = new EmitPhotonRequest(); emit_req->setIntervalBetweenPhotons(time_interval_between_photons); - scheduleAt(emit_time, emit_req); + scheduleAt(local_emit_time, emit_req); } else if (dynamic_cast(msg)) { if (!emission_stopped) { cancelAndDelete(emit_req); emission_stopped = true; } + } else if (!strcmp(msg->getName(), "Resync")) { + cancelAndDelete(emit_req); + time_out_message = new EPPSNotificationTimeout(); + scheduleAt(simTime(), time_out_message); + scheduleAfter(resync_delay, msg); + return; } delete msg; return; @@ -77,12 +96,12 @@ EPPSTimingNotification *EPPSController::generateNotifier(bool is_left) { pk->setOtherQnicParentAddr(is_left ? right_addr : left_addr); pk->setOtherQnicIndex(is_left ? right_qnic_index : left_qnic_index); pk->setOtherQnicType(QNIC_RP); - pk->setFirstPhotonEmitTime(emit_time + (is_left ? left_travel_time : right_travel_time)); + pk->setFirstPhotonEmitTime(local_emit_time + (is_left ? left_travel_time_predicted : right_travel_time_predicted)); pk->setKind(4); pk->setInterval(time_interval_between_photons); pk->setSrcAddr(address); pk->setDestAddr(is_left ? left_addr : right_addr); - pk->setTotalTravelTime(left_travel_time + right_travel_time); + pk->setTotalTravelTime(left_travel_time_predicted + right_travel_time_predicted); return pk; } @@ -113,10 +132,42 @@ void EPPSController::checkNeighborsBSACapacity() { if (pump_rate > time_interval_between_photons) time_interval_between_photons = pump_rate; } -double EPPSController::getTravelTimeFromPort(int port) { +double EPPSController::getCurrentTravelTimeFromPort(int port) { cChannel *channel = getParentModule()->getSubmodule("epps")->gate("quantum_port$i", port)->getIncomingTransmissionChannel(); - double distance = channel->par("distance").doubleValue(); - double speed_of_light_in_channel = channel->par("speed_of_light_in_fiber"); + double distance = 1; + double speed_of_light_in_channel = 1; + if (FSChannel *FS_chl = dynamic_cast(channel)) { // free-space channel + distance = FS_chl->getDistanceAtTime(simTime()); + speed_of_light_in_channel = FS_chl->par("speed_of_light_in_FS").doubleValue(); // km/sec + } else { // fiber channel + distance = channel->par("distance").doubleValue(); + speed_of_light_in_channel = channel->par("speed_of_light_in_fiber"); + } + return distance / speed_of_light_in_channel; +} + +double EPPSController::getPredictedTravelTimeFromPort(int port) { + cChannel *channel = getParentModule()->getSubmodule("epps")->gate("quantum_port$i", port)->getIncomingTransmissionChannel(); + double distance = 1; + double speed_of_light_in_channel = 1; + if (FSChannel *FS_chl = dynamic_cast(channel)) { + speed_of_light_in_channel = FS_chl->par("speed_of_light_in_FS").doubleValue(); // km/sec + + // I need to predict where the satellite is going to be when emission starts. If I send the notification now, that's distance(simTime() + travel_time). + // double current_distance = FS_chl->getDistanceAtTime(simTime()); + // simtime_t current_travel_time = SimTime(current_distance / speed_of_light_in_channel); + + double predicted_distance = FS_chl->getDistanceAtTime(local_emit_time); + // double offset = (predicted_distance-current_distance)/speed_of_light_in_channel; + + // distance = FS_chl->getDistanceAtTime(simTime()); + return predicted_distance / speed_of_light_in_channel; // + offset; + + } else { + distance = channel->par("distance").doubleValue(); // km + speed_of_light_in_channel = channel->par("speed_of_light_in_fiber").doubleValue(); + } + return distance / speed_of_light_in_channel; } diff --git a/quisp/modules/PhysicalConnection/EPPS/EPPSController.h b/quisp/modules/PhysicalConnection/EPPS/EPPSController.h index 05a95515a..2aa7d3b84 100644 --- a/quisp/modules/PhysicalConnection/EPPS/EPPSController.h +++ b/quisp/modules/PhysicalConnection/EPPS/EPPSController.h @@ -33,7 +33,8 @@ class EPPSController : public cSimpleModule { virtual EPPSTimingNotification *generateNotifier(bool is_left); private: - double getTravelTimeFromPort(int port); + double getCurrentTravelTimeFromPort(int port); + double getPredictedTravelTimeFromPort(int port); int getExternalQNICIndexFromPort(int port); // information for communications @@ -44,9 +45,14 @@ class EPPSController : public cSimpleModule { int right_qnic_index; simtime_t left_travel_time; simtime_t right_travel_time; + simtime_t left_travel_time_predicted; + simtime_t right_travel_time_predicted; + simtime_t time_interval_between_photons; double photon_emission_per_second; - simtime_t emit_time; + simtime_t local_emit_time; + simtime_t left_emit_time; + simtime_t right_emit_time; EPPSNotificationTimeout *time_out_message; int time_out_count; simtime_t last_result_send_time; @@ -56,6 +62,9 @@ class EPPSController : public cSimpleModule { utils::ComponentProvider provider; EmitPhotonRequest *emit_req; bool emission_stopped; + + // Satellite specific + simtime_t resync_delay; }; } // namespace quisp::modules diff --git a/quisp/modules/PhysicalConnection/EPPS/EPPSController.ned b/quisp/modules/PhysicalConnection/EPPS/EPPSController.ned index c64561091..0a7931afa 100644 --- a/quisp/modules/PhysicalConnection/EPPS/EPPSController.ned +++ b/quisp/modules/PhysicalConnection/EPPS/EPPSController.ned @@ -6,6 +6,7 @@ simple EPPSController parameters: double photon_emission_per_second = default(1000000); double initial_notification_timing_buffer @unit(s) = default(0s); + double SAT_resync_delay @unit(s) = default(0s); gates: input from_router; output to_router; diff --git a/quisp/modules/QNode.ned b/quisp/modules/QNode.ned index 23a0b7b05..1cada06a5 100644 --- a/quisp/modules/QNode.ned +++ b/quisp/modules/QNode.ned @@ -3,7 +3,7 @@ package modules; import modules.Application.Application; import modules.QRSA.quantumRoutingSoft; -import modules.QNIC.*; +import modules.QNIC; import modules.Common.*; module QNode @@ -29,11 +29,11 @@ module QNode submodules: app: Application { parameters: - @display("p=30,43"); + @display("p=19,19"); } router: Router { parameters: - @display("p=140,94"); + @display("p=78,133"); gates: fromQueue[sizeof(parent.port)]; toQueue[sizeof(parent.port)]; @@ -43,7 +43,7 @@ module QNode address = index; //buffer = 8; //@display("p=198,43"); - @display("p=68,122"); + @display("p=265,182"); } qrsa: quantumRoutingSoft { parameters: diff --git a/quisp/modules/QNode_Sat.ned b/quisp/modules/QNode_Sat.ned new file mode 100644 index 000000000..62ade09d9 --- /dev/null +++ b/quisp/modules/QNode_Sat.ned @@ -0,0 +1,36 @@ +package modules; +@namespace(quisp::modules); + +import modules.Application.Application; +import modules.QRSA.quantumRoutingSoft; +import modules.Common.*; +import modules.Satellite.*; + +module QNode_Sat extends QNode +{ + parameters: + bool is_satellite = default(true); + + gates: + + submodules: + ps[sizeof(port)]: PointingSystem { + @display("p=530,273"); + } + Gqueue[sizeof(port)]: GatedQueue { + parameters: + address = index; + //buffer = 8; + //@display("p=198,43"); + @display("p=341,185"); + } + connections: + for i=0..sizeof(port)-1 { + router.toQueue[i] --> { @reconnect; } --> Gqueue[i].in; // Each routing port is connected to its own queue + router.fromQueue[i] <-- { @reconnect; } <-- Gqueue[i].out; + Gqueue[i].line <--> { @reconnect; } <--> port[i]; + Gqueue[i].to_ps --> ps[i].req; + Gqueue[i].from_ps <-- ps[i].ans; + } + +} diff --git a/quisp/modules/QRSA/RuleEngine/RuleEngine.cc b/quisp/modules/QRSA/RuleEngine/RuleEngine.cc index 1ccefbba7..1a60605bc 100644 --- a/quisp/modules/QRSA/RuleEngine/RuleEngine.cc +++ b/quisp/modules/QRSA/RuleEngine/RuleEngine.cc @@ -85,7 +85,9 @@ void RuleEngine::handleMessage(cMessage *msg) { auto qnic_index = notification_packet->getQnicIndex(); stopOnGoingPhotonEmission(type, qnic_index); freeFailedEntanglementAttemptQubits(type, qnic_index); - schedulePhotonEmission(type, qnic_index, notification_packet); + if (getEmitTimeFromBSMNotification(notification_packet) >= simTime()) + schedulePhotonEmission(type, qnic_index, + notification_packet); // If this check fails, it means that the BSM notification was from a previous passage and it makes no sense to emit photons. } else if (auto *pk = dynamic_cast(msg)) { auto type = pk->getQnicType(); auto qnic_index = pk->getQnicIndex(); @@ -140,7 +142,7 @@ void RuleEngine::handleMessage(cMessage *msg) { msm_info.partner_qnic_index = partner_qnic_index; msm_info.total_travel_time = notification_packet->getTotalTravelTime(); stopOnGoingPhotonEmission(QNIC_RP, qnic_index); - scheduleMSMPhotonEmission(QNIC_RP, qnic_index, notification_packet); + if (notification_packet->getFirstPhotonEmitTime() >= simTime()) scheduleMSMPhotonEmission(QNIC_RP, qnic_index, notification_packet); // handle result incoming from bsa } else if (auto *click_result = dynamic_cast(msg)) { handleSingleClickResult(click_result); @@ -212,6 +214,8 @@ void RuleEngine::scheduleMSMPhotonEmission(QNIC_type type, int qnic_index, EPPST timer->setFirst(true); timer->setIntervalBetweenPhotons(notification->getInterval()); timer->setMSM(true); + // if (first_photon_emit_time < simTime()) first_photon_emit_time = simTime(); + scheduleAt(first_photon_emit_time, timer); } diff --git a/quisp/modules/Satellite/PointingSystem.cc b/quisp/modules/Satellite/PointingSystem.cc new file mode 100644 index 000000000..3ce1f52c3 --- /dev/null +++ b/quisp/modules/Satellite/PointingSystem.cc @@ -0,0 +1,43 @@ +/** \file PointingSystem.cc + * + * \brief PointingSystem + */ +#include "PointingSystem.h" +#include "channels/FSChannel.h" +#include "messages/visibility_messages_m.h" + +using namespace quisp::channels; + +namespace quisp::modules::Satellite { + +Define_Module(PointingSystem); + +PointingSystem::PointingSystem() : provider(utils::ComponentProvider{this}) {} + +PointingSystem::~PointingSystem() {} + +void PointingSystem::initialize() {} + +void PointingSystem::handleMessage(cMessage* msg) { + if (dynamic_cast(msg)) { + if (auto vcr = dynamic_cast(msg)) { + VisCheckOutcome* vco = new VisCheckOutcome(); + const char* gate_to_check = vcr->getOut_gate(); + int gtc_index = vcr->getIndex(); + cChannel* chl = getParentModule()->gate(gate_to_check, gtc_index)->getChannel(); + if (auto* fs_chl = dynamic_cast(chl)) { + SimTime next_check_time = fs_chl->getNext_check_time(); + vco->setNext_check_time(next_check_time.dbl()); + } else { + EV << "WARNING: checking visibility along a fiber channel. Seems weird."; + vco->setNext_check_time(0); + } + send(vco, "ans"); + delete vcr; + } + } else + throw(cRuntimeError("Unexpected Message at Pointing System!")); + return; +}; + +} // namespace quisp::modules::Satellite diff --git a/quisp/modules/Satellite/PointingSystem.h b/quisp/modules/Satellite/PointingSystem.h new file mode 100644 index 000000000..0c27c5caf --- /dev/null +++ b/quisp/modules/Satellite/PointingSystem.h @@ -0,0 +1,35 @@ +/** \file PointingSystem.h + * + * \brief PointingSystem + */ +#pragma once + +#include +#include "channels/FSChannel.h" +#include "messages/visibility_messages_m.h" +#include "omnetpp/simtime.h" +#include "utils/ComponentProvider.h" + +using namespace omnetpp; +using namespace quisp::messages; + +/** \class PointingSystem PointingSystem.cc + * + * \brief PointingSystem: Crude, duty-cycle based model for the satellite orbiting in and out of sight. + */ +namespace quisp::modules::Satellite { +class PointingSystem : public cSimpleModule { + public: + PointingSystem(); + ~PointingSystem(); + + protected: + virtual void initialize() override; + virtual void handleMessage(cMessage *msg) override; + void toggleVisibility(); + double orbital_period; + double vis_start_coeff; + double vis_end_coeff; + utils::ComponentProvider provider; +}; +} // namespace quisp::modules::Satellite diff --git a/quisp/modules/Satellite/PointingSystem.ned b/quisp/modules/Satellite/PointingSystem.ned new file mode 100644 index 000000000..09e39df58 --- /dev/null +++ b/quisp/modules/Satellite/PointingSystem.ned @@ -0,0 +1,14 @@ +//Crude model for satellite visibility: this module checks whether the satellite should be visible or not at this time and sets the Line Of Sight +//parameter of Free-Space channels accordingly. + +package modules.Satellite; +@namespace(quisp::modules::Satellite); +simple PointingSystem +{ +parameters: + string name = "PointingSystem"; + @class(PointingSystem); +gates: + input req; + output ans; +} diff --git a/quisp/modules/Satellite/PointingSystem_test.cc b/quisp/modules/Satellite/PointingSystem_test.cc new file mode 100644 index 000000000..d047a8a24 --- /dev/null +++ b/quisp/modules/Satellite/PointingSystem_test.cc @@ -0,0 +1,174 @@ +#include + +#include + +#include "PointingSystem.h" +#include "messages/visibility_messages_m.h" +#include "modules/SharedResource/SharedResource.h" +#include "test_utils/MockFreeSpaceChannel.h" + +using namespace quisp_test; +using namespace quisp_test::utils; +using namespace quisp::messages; +using namespace quisp::modules::SharedResource; +using OriginalPointingSystem = quisp::modules::Satellite::PointingSystem; +using quisp_test::FSChannel::MockFreeSpaceChannel; + +namespace { + +class MockNode : public quisp_test::TestQNode { + public: + MockNode(int addr, int mass, bool is_initiator, bool i_am_qnode) : TestQNode(addr, mass, is_initiator), is_qnode(i_am_qnode) {} + MockNode(int addr, int mass, bool is_initiator) : TestQNode(addr, mass, is_initiator), is_qnode(true) {} + bool is_qnode; +}; + +class Strategy : public quisp_test::TestComponentProviderStrategy { + public: + Strategy(MockNode* _qnode) : parent_qnode(_qnode) {} + cModule* getNode() override { return parent_qnode; } + int getNodeAddr() override { return parent_qnode->address; } + SharedResource* getSharedResource() override { return &shared_resource; } + + private: + MockNode* parent_qnode; + SharedResource shared_resource; +}; + +class PointingSystem : public OriginalPointingSystem { + public: + using OriginalPointingSystem::handleMessage; + using OriginalPointingSystem::initialize; + void addResultRecorders() override{}; + virtual void send(omnetpp::cMessage* msg, const char* gatename, int gateindex = -1) override { + take(msg); + OriginalPointingSystem::send(msg, gatename, gateindex); + }; + + MockNode* parent; + cModule* getParentModule() const override { return parent; }; + + explicit PointingSystem(MockNode* parent_qnode) : OriginalPointingSystem() { + this->provider.setStrategy(std::make_unique(parent_qnode)); + this->setComponentType(new TestModuleType("test_pointing_system")); + parent = parent_qnode; + auto* sim = getTestSimulation(); + sim->registerComponent(this); + recPort = new TestGate(this, "rec"); + ansPort = new TestGate(this, "ans"); + this->addGate("rec", cGate::INPUT); + this->addGate("ans", cGate::OUTPUT); + } + + TestGate* ansPort; + TestGate* recPort; + + std::map ports{}; + TestGate* gate(const char* gatename, int index = -1) override { + if (strcmp(gatename, "rec") == 0) return recPort; + if (strcmp(gatename, "ans") == 0) return ansPort; + error("port: %s not found", gatename); + return nullptr; + } + bool parentModuleIsQNode() { return dynamic_cast(provider.getNode())->is_qnode; } + void setIsQnode(bool is_qnode) { dynamic_cast(provider.getNode())->is_qnode = is_qnode; } +}; + +class PointingSystemTest : public ::testing::Test { + protected: + void SetUp() { + sim = prepareSimulation(); + node = new MockNode(0, 0, false); + pointing_system = new PointingSystem(node); + chl = new MockFreeSpaceChannel("test_channel"); + stub = new Stub(); + + outgate = node->addGate("test_out", cGate::OUTPUT); + stub_gate = stub->addGate("stub_gate", cGate::INPUT); + + outgate->connectTo(stub_gate, chl, true); + chl->finalizeParameters(); // THIS METHOD MAY ONLY BE CALLED WHEN THE CHANNEL IS CONNECTED + + pointing_system->callInitialize(); + chl->callInitialize(); + stub->callInitialize(); + } + void TearDown() {} + + /** + * This function mimics the behavior of Omnet++ internals + * that sets up the message arrival to PointingSystem module. + * Call this function before PointingSystem->handleMessages + * when you want to retrieve the info of the arrival gate. + */ + void mockMessageArrival(cMessage* msg) { msg->setArrival(pointing_system->getId(), pointing_system->findGate("rec")); } + + TestSimulation* sim; + PointingSystem* pointing_system; + MockNode* node; + MockFreeSpaceChannel* chl; + Stub* stub; + + cGate* outgate; + cGate* stub_gate; +}; + +TEST_F(PointingSystemTest, handleNonControlMessage) { + auto msg = new cMessage; + mockMessageArrival(msg); + EXPECT_THROW({ pointing_system->handleMessage(msg); }, cRuntimeError); +} + +TEST_F(PointingSystemTest, handleVisRequest_VisibleChannel) { + chl->setNext_check_time(simTime()); + + auto vcr = new VisCheckRequest; + vcr->setOut_gate("test_out"); + vcr->setIndex(-1); + + mockMessageArrival(vcr); + pointing_system->handleMessage(vcr); + ASSERT_EQ(pointing_system->gate("ans")->messages.size(), 1); + { + auto* msg = pointing_system->gate("ans")->messages.at(0); + auto vco = dynamic_cast(msg); + ASSERT_EQ(vco->getNext_check_time(), 0); + } +} + +TEST_F(PointingSystemTest, handleVisRequest_NonVisibleChannel) { + chl->setNext_check_time(simTime() + 1); + + auto vcr = new VisCheckRequest; + vcr->setOut_gate("test_out"); + vcr->setIndex(-1); + + mockMessageArrival(vcr); + pointing_system->handleMessage(vcr); + ASSERT_EQ(pointing_system->gate("ans")->messages.size(), 1); + { + auto* msg = pointing_system->gate("ans")->messages.at(0); + auto vco = dynamic_cast(msg); + ASSERT_EQ(vco->getNext_check_time(), simTime().dbl() + 1); + } +} + +TEST_F(PointingSystemTest, handleVisRequest_NonFSChannel) { + outgate->disconnect(); + outgate->connectTo(stub_gate); + + auto vcr = new VisCheckRequest; + vcr->setOut_gate("test_out"); + vcr->setIndex(-1); + + mockMessageArrival(vcr); + pointing_system->handleMessage(vcr); + ASSERT_EQ(pointing_system->gate("ans")->messages.size(), 1); + { + auto* msg = pointing_system->gate("ans")->messages.at(0); + auto vco = dynamic_cast(msg); + ASSERT_EQ(vco->getNext_check_time(), 0); + } +} + +} // namespace diff --git a/quisp/modules/Satellite/README.md b/quisp/modules/Satellite/README.md new file mode 100644 index 000000000..dcc6add61 --- /dev/null +++ b/quisp/modules/Satellite/README.md @@ -0,0 +1,34 @@ +# Satellite Communication with QuISP + +## Quick Start + +To run a simulation with a satellite link, choose one of the SAT configurations in the `simulations_test.ini` file. To design your own, use Sat nodes both at the ground and at the space end of the link, specifying `is_satellite=true` in the parameters of the satellite node. You should provide two .csv files: one with `time (s),distance (m)` pairs and one with `time (s), atmospheric attenuation` pairs. The atmospheric attenuation quantity is _not_ expected to be in dB: it corresponds to what is defined in the _Methods_ section of [this paper](https://www.nature.com/articles/s42005-022-01123-7) as `10^(A_{atm,x}(t)/10)`. + +## Code Breakdown + +Enabling satellite communication with QuISP relies on three fundamental elements: the `PointingSystem`, the `GatedQueue` and the `Free Space Channel`. + +### The Gated Queue + +The purpose of `GatedQueue` is to buffer classical messages when the receiving node is not visible and therefore cannot receive messages. +This module works as an extension of the already present `Queue` module: whereas the original module was just in charge of queueing the packets that are incoming and outgoing from a given node, the `GatedQueue` adds a layer of control logic to the outgoing section. Whenever an outgoing message is ready to be sent, the `GatedQueue` runs a visibility check by generating a `VisibilityCheckRequest` packet and sending it to the `PointingSystem`. If the outcome of the visibility check is favorable (i.e. `NextCheckTime = 0`), the packet is sent normally. If not, another visibility check is run at `t + NextCheckTime`. + +### The Pointing System + +This module is in charge of simulating the acquisition, pointing and tracking between the satellite and the ground nodes. In practice, this node receives a `VisibilityCheckRequest` (VCR) packet and replies with a `VisibilityCheckOutcome` (VCO) packet, which contains the `NextCheckTime` variable, i.e. the time interval to wait for the satellite to be visible again. If the satellite is already visible, `NextCheckTime` is 0. + +### The Free Space Channel + +`ClassicalChannel_FS` and `QuantumChannel_FS` are two new channel objects that model the variable attenuation and delay that comes with free-space communication with a moving node. By parsing CSV files that specify the length and atmospheric attenuation of the satellite link, these channels recalculate link parameters as part of the `processMessage` method. Nodes should have a `PointingSystem` that checks whether there is visibility before communicating: if a message is sent through a free-space channel when the receiving node is not visible, it is discarded by the channel. + +## Modifications to existing components + +Most of QuISP's internals worked seamlessly over the transition to satellite communication. However, a couple lines of code required tweaking: + +- The (active) BSA and EPPS controllers calculate the time at which photon emission should happen and share it with their passive partners. Every time entanglement needs to be established, the active node schedules emission at `now + LinkDelay` and instructs the passive node to attempt latching qubits in memory at `now + 2LinkDelay`, to account for the latency of the link and emit synchronously. In the original code, the (fiber) link delay can be calculated once and cached. However, a satellite link must account for the varying delay of a free-space link. Due to hardware constraints, it is unfeasible to recalculate the photon emission delay for every single photon, so the time interval between photon is left constant. What is changed is the emission time of the first photon of each train: every time an active node needs to start entanglement generation, it reads the orbit data in order to calculate what the link delay is now (`CurrentLinkDelay`) and what it will be after the photon request arrives at the receiving node (`PredictedLinkDelay`). Then, it schedules local emission for `now + CurrentLinkDelay` and instructs the passive node to emit at `now + CurrentLinkDelay + PredictedLinkDelay`. This way, the first photon of every emission train lines up perfectly. Although the rest of the train slowly drifts out of sync, it is not enough to disrupt entanglement generation even at low indistinguishability window values. A note should be made on EPPS links: since they work with continuous emission by making each photon the first and last of its respective train and using the inter-train delay as interval between photons, it is not possible to apply this modification directly. The (hacky) solution that was implemented was to schedule a periodic recalculation of the photon emission time. The time interval at which resynchronization is performed is a tunable parameter. + +- The `RuleEngine` code was tweaked to reject a TimingNotification (BSA and EPPS) if it has a `first_photon_emit_time` that precedes the current `simTime()`. This of course never happens in the fiber case, but it covers the edge case of when the TimingNotification is generated with the satellite out of sight and sent when visibility is established again. Without this failsafe measure, Omnet++ produces an error when the `TimingNotification` is received and photon emission cannot be scheduled for a past time. + +### Acknowledgements + +Thank you very much to Valentina Marulanda Acosta and Matteo Schiavon for providing the example data included in the `satellite_csvs` directory. diff --git a/quisp/modules/SharedResource/SharedResource.cc b/quisp/modules/SharedResource/SharedResource.cc index 050c02299..cf072c80b 100644 --- a/quisp/modules/SharedResource/SharedResource.cc +++ b/quisp/modules/SharedResource/SharedResource.cc @@ -1,10 +1,13 @@ #include "SharedResource.h" +#include #include #include #include #include "omnetpp/ctopology.h" #include "utils/ComponentProvider.h" +using namespace quisp::channels; + namespace quisp::modules::SharedResource { SharedResource::SharedResource() {} @@ -77,7 +80,10 @@ void SharedResource::updateChannelWeightsOfNode(cTopology::Node *node, std::opti // The cost metric is taken from https://arxiv.org/abs/1206.5655 double SharedResource::calculateSecPerBellPair(const cModule *const rd_module, const cTopology::LinkOut *const outgoing_link) { - double speed_of_light_in_fiber = outgoing_link->getLocalGate()->getChannel()->par("speed_of_light_in_fiber"); + cChannel *channel = outgoing_link->getLocalGate()->getChannel(); + const char *speed_of_light_name = {dynamic_cast(channel) == nullptr ? "speed_of_light_in_fiber" : "speed_of_light_in_FS"}; + + double speed_of_light_in_medium = channel->par(speed_of_light_name); double channel_length = outgoing_link->getLocalGate()->getChannel()->par("distance"); auto *some_stationary_qubit_in_qnic = rd_module->findModuleByPath("^.^.qnic[0].statQubit[0]"); @@ -96,7 +102,7 @@ double SharedResource::calculateSecPerBellPair(const cModule *const rd_module, c error("cannot read emission_success_probability from file"); } - return (channel_length / speed_of_light_in_fiber) * emission_prob; + return (channel_length / speed_of_light_in_medium) * emission_prob; } /** diff --git a/quisp/networks/topology_simple_network.ned b/quisp/networks/topology_simple_network.ned index 9b37af638..28cfb828f 100644 --- a/quisp/networks/topology_simple_network.ned +++ b/quisp/networks/topology_simple_network.ned @@ -13,6 +13,7 @@ network Simple_MIM { parameters: **.speed_of_light_in_fiber = 208189.206944 km; + **.speed_of_light_in_FS = 299792.458 km; submodules: backend: Backend; @@ -35,9 +36,9 @@ network Simple_MIM connections: EndNode1.port++ <--> ClassicalChannel { distance = 0.5km; } <--> BSA.port++; - BSA.port++ <--> ClassicalChannel { distance = 0.5km; } <--> EndNode2.port++; + BSA.port++ <--> ClassicalChannel { distance = 0.5km; } <--> EndNode2.port++; EndNode1.quantum_port++ <--> QuantumChannel { distance = 0.5km; } <--> BSA.quantum_port++; - BSA.quantum_port++ <--> QuantumChannel { distance = 0.5km; } <--> EndNode2.quantum_port++; + BSA.quantum_port++ <--> QuantumChannel { distance = 0.5km; } <--> EndNode2.quantum_port++; } @@ -70,7 +71,6 @@ network Simple_MSM { parameters: **.speed_of_light_in_fiber = 208189.206944 km; - submodules: backend: Backend; logger: Logger; @@ -92,9 +92,69 @@ network Simple_MSM connections: EndNode1.port++ <--> ClassicalChannel { distance = 0.5km; } <--> EPPS.port++; - EPPS.port++ <--> ClassicalChannel { distance = 0.5km; } <--> EndNode2.port++; + EPPS.port++ <--> ClassicalChannel { distance = 0.5km; } <--> EndNode2.port++; EndNode1.quantum_port_receiver_passive++ <--> QuantumChannel { distance = 0.5km; } <--> EPPS.quantum_port++; - EPPS.quantum_port++ <--> QuantumChannel { distance = 0.5km; } <--> EndNode2.quantum_port_receiver_passive++; + EPPS.quantum_port++ <--> QuantumChannel { distance = 0.5km; } <--> EndNode2.quantum_port_receiver_passive++; +} + +network Simple_MSM_SAT +{ + parameters: + **.speed_of_light_in_FS = 299792.458 km; + submodules: + backend: Backend; + logger: Logger; + sharedResource: SharedResource; + EndNode1: QNode_Sat { + address = 1; + node_type = "EndNode"; + is_satellite = false; + is_initiator = true; + @display("i=COMP;p=101,264,m,5,60,60"); + } + EndNode2: QNode_Sat { + address = 2; + node_type = "EndNode"; + is_satellite = false; + @display("i=COMP;p=273,264,m,5,60,60"); + } + EPPS: EPPSNode_Sat { + address = 3; + @display("p=184,85,m,5,60,60"); + } + + connections: + EndNode1.port++ <--> ClassicalChannel_FS { distance = 5000km; } <--> EPPS.port++; + EPPS.port++ <--> ClassicalChannel_FS { distance = 5000km; } <--> EndNode2.port++; + EndNode1.quantum_port_receiver_passive++ <--> QuantumChannel_FS { distance = 5000km; } <--> EPPS.quantum_port++; + EPPS.quantum_port++ <--> QuantumChannel_FS { distance = 5000km; } <--> EndNode2.quantum_port_receiver_passive++; +} + +network Simple_MM_SAT +{ + parameters: + **.speed_of_light_in_FS = 299792.458 km; + submodules: + backend: Backend; + logger: Logger; + sharedResource: SharedResource; + EndNode1: QNode_Sat { + address = 1; + is_satellite = true; + node_type = "EndNode"; + @display("i=COMP;p=196,35,m,5,60,60"); + } + EndNode2: QNode_Sat { + address = 2; + is_satellite = false; + is_initiator = true; + node_type = "EndNode"; + @display("i=COMP;p=295,201,m,5,60,60"); + } + + connections: + EndNode1.port++ <--> ClassicalChannel_FS { distance = 400km; } <--> EndNode2.port++; + EndNode1.quantum_port++ <--> QuantumChannel_FS { distance = 400km; } <--> EndNode2.quantum_port_receiver++; } network three_node_MIM @@ -249,24 +309,24 @@ network n_node_MSM node_type = "EndNode"; @display("i=COMP"); } - EPPS[numEPPSs]: EPPSNode { - address = index + parent.numNodes; + EPPS[numEPPSs]: EPPSNode { + address = index + parent.numNodes; node_type = "EPPS"; - } + } connections: - EndNode[0].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> EPPS[0].port++; - EPPS[0].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> Repeater[0].port++; - EndNode[0].quantum_port_receiver_passive++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> EPPS[0].quantum_port++; - EPPS[0].quantum_port++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> Repeater[0].quantum_port_receiver_passive++; + EndNode[0].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> EPPS[0].port++; + EPPS[0].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> Repeater[0].port++; + EndNode[0].quantum_port_receiver_passive++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> EPPS[0].quantum_port++; + EPPS[0].quantum_port++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> Repeater[0].quantum_port_receiver_passive++; - Repeater[i].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> EPPS[i+1].port++ for i=0..numRepeaters - 2; - EPPS[i+1].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> Repeater[i+1].port++ for i=0..numRepeaters - 2; - Repeater[i].quantum_port_receiver_passive++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> EPPS[i+1].quantum_port++ for i=0..numRepeaters - 2; - EPPS[i+1].quantum_port++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> Repeater[i+1].quantum_port_receiver_passive++ for i=0..numRepeaters - 2; + Repeater[i].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> EPPS[i+1].port++ for i=0..numRepeaters - 2; + EPPS[i+1].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> Repeater[i+1].port++ for i=0..numRepeaters - 2; + Repeater[i].quantum_port_receiver_passive++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> EPPS[i+1].quantum_port++ for i=0..numRepeaters - 2; + EPPS[i+1].quantum_port++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> Repeater[i+1].quantum_port_receiver_passive++ for i=0..numRepeaters - 2; - EndNode[1].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> EPPS[sizeof(EPPS)-1].port++; - EPPS[sizeof(EPPS)-1].port++ <--> ClassicalChannel{distance = parent.classicalDistance / 2;} <--> Repeater[lastRepeaterIndex].port++; + EndNode[1].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> EPPS[sizeof(EPPS)-1].port++; + EPPS[sizeof(EPPS)-1].port++ <--> ClassicalChannel { distance = parent.classicalDistance / 2; } <--> Repeater[lastRepeaterIndex].port++; - EndNode[1].quantum_port_receiver_passive++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> EPPS[sizeof(EPPS)-1].quantum_port++; - EPPS[sizeof(EPPS)-1].quantum_port++ <--> QuantumChannel{ distance = parent.quantumDistance / 2;} <--> Repeater[lastRepeaterIndex].quantum_port_receiver_passive++; + EndNode[1].quantum_port_receiver_passive++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> EPPS[sizeof(EPPS)-1].quantum_port++; + EPPS[sizeof(EPPS)-1].quantum_port++ <--> QuantumChannel { distance = parent.quantumDistance / 2; } <--> Repeater[lastRepeaterIndex].quantum_port_receiver_passive++; } diff --git a/quisp/rules/Action_execution_test.cc b/quisp/rules/Action_execution_test.cc index 14105e207..d3ff2ab08 100644 --- a/quisp/rules/Action_execution_test.cc +++ b/quisp/rules/Action_execution_test.cc @@ -8,6 +8,7 @@ #include "modules/QNIC.h" #include "modules/QRSA/RuleEngine/QubitRecord/QubitRecord.h" #include "rules/RuleSetConverter/RuleSetConverter.h" +#include "runtime/RuleSet.h" #include "runtime/Runtime.h" #include "runtime/test.h" #include "runtime/types.h" @@ -28,6 +29,7 @@ using quisp::rules::Purification; using quisp::rules::PurType; using quisp::rules::Tomography; using quisp::rules::rs_converter::RuleSetConverter; +using quisp::runtime::RuleSet; Program terminator{"terminator", {INSTR_RET_ReturnCode_{{ReturnCode::RS_TERMINATED}}}}; Program always_pass{"cond", {INSTR_RET_ReturnCode_{{ReturnCode::COND_PASSED}}}}; class ActionExecutionTest : public testing::Test { diff --git a/quisp/satellite_csvs/Micius-Nice_distance.csv b/quisp/satellite_csvs/Micius-Nice_distance.csv new file mode 100644 index 000000000..d3023f752 --- /dev/null +++ b/quisp/satellite_csvs/Micius-Nice_distance.csv @@ -0,0 +1,284 @@ +4.380000000000000000e+02,1.151991103494759183e+06 +4.390000000000000000e+02,1.145297400832380168e+06 +4.400000000000000000e+02,1.138612166725703748e+06 +4.410000000000000000e+02,1.131935559252300533e+06 +4.420000000000000000e+02,1.125267739961027168e+06 +4.430000000000000000e+02,1.118608873953092610e+06 +4.440000000000000000e+02,1.111959130073681707e+06 +4.450000000000000000e+02,1.105318680879200576e+06 +4.460000000000000000e+02,1.098687702855890617e+06 +4.470000000000000000e+02,1.092066376468388829e+06 +4.480000000000000000e+02,1.085454886222435627e+06 +4.490000000000000000e+02,1.078853420827310532e+06 +4.500000000000000000e+02,1.072262173318435205e+06 +4.510000000000000000e+02,1.065681341129248030e+06 +4.520000000000000000e+02,1.059111126263159560e+06 +4.530000000000000000e+02,1.052551735372233903e+06 +4.540000000000000000e+02,1.046003379818633781e+06 +4.550000000000000000e+02,1.039466276005758904e+06 +4.560000000000000000e+02,1.032940645276321215e+06 +4.570000000000000000e+02,1.026426714261005982e+06 +4.580000000000000000e+02,1.019924714785267599e+06 +4.590000000000000000e+02,1.013434884225240559e+06 +4.600000000000000000e+02,1.006957465518258978e+06 +4.610000000000000000e+02,1.000492707462671446e+06 +4.620000000000000000e+02,9.940408647055319743e+05 +4.630000000000000000e+02,9.876021979252879974e+05 +4.640000000000000000e+02,9.811769741749681998e+05 +4.650000000000000000e+02,9.747654668321374338e+05 +4.660000000000000000e+02,9.683679559095263248e+05 +4.670000000000000000e+02,9.619847281718230806e+05 +4.680000000000000000e+02,9.556160773821503390e+05 +4.690000000000000000e+02,9.492623043773294194e+05 +4.700000000000000000e+02,9.429237174278004095e+05 +4.710000000000000000e+02,9.366006322305669310e+05 +4.720000000000000000e+02,9.302933723408021033e+05 +4.730000000000000000e+02,9.240022691862828797e+05 +4.740000000000000000e+02,9.177276624065386131e+05 +4.750000000000000000e+02,9.114699000122338766e+05 +4.760000000000000000e+02,9.052293386630283203e+05 +4.770000000000000000e+02,8.990063438387467759e+05 +4.780000000000000000e+02,8.928012901083091274e+05 +4.790000000000000000e+02,8.866145614037250634e+05 +4.800000000000000000e+02,8.804465511893618386e+05 +4.810000000000000000e+02,8.742976628581043333e+05 +4.820000000000000000e+02,8.681683097526108613e+05 +4.830000000000000000e+02,8.620589157527713105e+05 +4.840000000000000000e+02,8.559699152693443466e+05 +4.850000000000000000e+02,8.499017536433069035e+05 +4.860000000000000000e+02,8.438548874997133389e+05 +4.870000000000000000e+02,8.378297848217476858e+05 +4.880000000000000000e+02,8.318269255133214174e+05 +4.890000000000000000e+02,8.258468015143268276e+05 +4.900000000000000000e+02,8.198899171773319831e+05 +4.910000000000000000e+02,8.139567895612383727e+05 +4.920000000000000000e+02,8.080479488073659595e+05 +4.930000000000000000e+02,8.021639383182816673e+05 +4.940000000000000000e+02,7.963053152686472749e+05 +4.950000000000000000e+02,7.904726508409237722e+05 +4.960000000000000000e+02,7.846665305241495371e+05 +4.970000000000000000e+02,7.788875545302883256e+05 +4.980000000000000000e+02,7.731363381180877332e+05 +4.990000000000000000e+02,7.674135119204007788e+05 +5.000000000000000000e+02,7.617197223017958459e+05 +5.010000000000000000e+02,7.560556317269216524e+05 +5.020000000000000000e+02,7.504219190374577884e+05 +5.030000000000000000e+02,7.448192799229676602e+05 +5.040000000000000000e+02,7.392484271607644623e+05 +5.050000000000000000e+02,7.337100910289470339e+05 +5.060000000000000000e+02,7.282050196789498441e+05 +5.070000000000000000e+02,7.227339793165663723e+05 +5.080000000000000000e+02,7.172977547731609084e+05 +5.090000000000000000e+02,7.118971496579472441e+05 +5.100000000000000000e+02,7.065329867888648296e+05 +5.110000000000000000e+02,7.012061084108966170e+05 +5.120000000000000000e+02,6.959173765883630840e+05 +5.130000000000000000e+02,6.906676734360078117e+05 +5.140000000000000000e+02,6.854579014824697515e+05 +5.150000000000000000e+02,6.802889837949650828e+05 +5.160000000000000000e+02,6.751618643419599393e+05 +5.170000000000000000e+02,6.700775081640542485e+05 +5.180000000000000000e+02,6.650369015732661355e+05 +5.190000000000000000e+02,6.600410523670470575e+05 +5.200000000000000000e+02,6.550909898665260989e+05 +5.210000000000000000e+02,6.501877652161151636e+05 +5.220000000000000000e+02,6.453324512352466118e+05 +5.230000000000000000e+02,6.405261426359536126e+05 +5.240000000000000000e+02,6.357699559490882093e+05 +5.250000000000000000e+02,6.310650294635012979e+05 +5.260000000000000000e+02,6.264125231933130417e+05 +5.270000000000000000e+02,6.218136186243585544e+05 +5.280000000000000000e+02,6.172695186700634658e+05 +5.290000000000000000e+02,6.127814472566682380e+05 +5.300000000000000000e+02,6.083506490779826418e+05 +5.310000000000000000e+02,6.039783891544151120e+05 +5.320000000000000000e+02,5.996659524064287543e+05 +5.330000000000000000e+02,5.954146430711308494e+05 +5.340000000000000000e+02,5.912257841147296131e+05 +5.350000000000000000e+02,5.871007164413259597e+05 +5.360000000000000000e+02,5.830407981765838340e+05 +5.370000000000000000e+02,5.790474037187130889e+05 +5.380000000000000000e+02,5.751219227337401826e+05 +5.390000000000000000e+02,5.712657590804238571e+05 +5.400000000000000000e+02,5.674803295588678448e+05 +5.410000000000000000e+02,5.637670626876542810e+05 +5.420000000000000000e+02,5.601273971393638058e+05 +5.430000000000000000e+02,5.565627803323112894e+05 +5.440000000000000000e+02,5.530746666856502416e+05 +5.450000000000000000e+02,5.496645158500851830e+05 +5.460000000000000000e+02,5.463337908786301268e+05 +5.470000000000000000e+02,5.430839560794481076e+05 +5.480000000000000000e+02,5.399164750574773643e+05 +5.490000000000000000e+02,5.368328083085367689e+05 +5.500000000000000000e+02,5.338344109371788800e+05 +5.510000000000000000e+02,5.309227301946893567e+05 +5.520000000000000000e+02,5.280992028259437066e+05 +5.530000000000000000e+02,5.253652524525301997e+05 +5.540000000000000000e+02,5.227222867906045285e+05 +5.550000000000000000e+02,5.201716947541746194e+05 +5.560000000000000000e+02,5.177148435401855386e+05 +5.570000000000000000e+02,5.153530756378976512e+05 +5.580000000000000000e+02,5.130877057419639314e+05 +5.590000000000000000e+02,5.109200176624812884e+05 +5.600000000000000000e+02,5.088512611577867647e+05 +5.610000000000000000e+02,5.068826488496836973e+05 +5.620000000000000000e+02,5.050153529778653756e+05 +5.630000000000000000e+02,5.032505023728064843e+05 +5.640000000000000000e+02,5.015891792648517876e+05 +5.650000000000000000e+02,5.000324162735246355e+05 +5.660000000000000000e+02,4.985811934375183191e+05 +5.670000000000000000e+02,4.972364352878960781e+05 +5.680000000000000000e+02,4.959990080889827805e+05 +5.690000000000000000e+02,4.948697171633790131e+05 +5.700000000000000000e+02,4.938493043761759764e+05 +5.710000000000000000e+02,4.929384457674185396e+05 +5.720000000000000000e+02,4.921377493863227428e+05 +5.730000000000000000e+02,4.914477532858891063e+05 +5.740000000000000000e+02,4.908689237492686952e+05 +5.750000000000000000e+02,4.904016537334431196e+05 +5.760000000000000000e+02,4.900462615336027229e+05 +5.770000000000000000e+02,4.898029897130791796e+05 +5.780000000000000000e+02,4.896720042651768890e+05 +5.790000000000000000e+02,4.896533940466277418e+05 +5.800000000000000000e+02,4.897471704702428542e+05 +5.810000000000000000e+02,4.899532674630432157e+05 +5.820000000000000000e+02,4.902715416932232911e+05 +5.830000000000000000e+02,4.907017730586259859e+05 +5.840000000000000000e+02,4.912436654375353246e+05 +5.850000000000000000e+02,4.918968476947703748e+05 +5.860000000000000000e+02,4.926608749386043637e+05 +5.870000000000000000e+02,4.935352299975326168e+05 +5.880000000000000000e+02,4.945193251430518576e+05 +5.890000000000000000e+02,4.956125040180513170e+05 +5.900000000000000000e+02,4.968140437557641417e+05 +5.910000000000000000e+02,4.981231572976191528e+05 +5.920000000000000000e+02,4.995389958467091783e+05 +5.930000000000000000e+02,5.010606515054322663e+05 +5.940000000000000000e+02,5.026871600269689807e+05 +5.950000000000000000e+02,5.044175036685929517e+05 +5.960000000000000000e+02,5.062506141495496267e+05 +5.970000000000000000e+02,5.081853756846468896e+05 +5.980000000000000000e+02,5.102206280789398006e+05 +5.990000000000000000e+02,5.123551698457657476e+05 +6.000000000000000000e+02,5.145877613578969613e+05 +6.010000000000000000e+02,5.169171280045855092e+05 +6.020000000000000000e+02,5.193419633228000021e+05 +6.030000000000000000e+02,5.218609321289633517e+05 +6.040000000000000000e+02,5.244726735719910357e+05 +6.050000000000000000e+02,5.271758041948813479e+05 +6.060000000000000000e+02,5.299689208674459951e+05 +6.070000000000000000e+02,5.328506036949995905e+05 +6.080000000000000000e+02,5.358194187607984059e+05 +6.090000000000000000e+02,5.388739209536965936e+05 +6.100000000000000000e+02,5.420126564384051599e+05 +6.110000000000000000e+02,5.452341652885603253e+05 +6.120000000000000000e+02,5.485369838119351771e+05 +6.130000000000000000e+02,5.519196468385183252e+05 +6.140000000000000000e+02,5.553806899491464719e+05 +6.150000000000000000e+02,5.589186514120228821e+05 +6.160000000000000000e+02,5.625320742885220097e+05 +6.170000000000000000e+02,5.662195080554592423e+05 +6.180000000000000000e+02,5.699795104310818715e+05 +6.190000000000000000e+02,5.738106489021322923e+05 +6.200000000000000000e+02,5.777115022053251741e+05 +6.210000000000000000e+02,5.816806616975654615e+05 +6.220000000000000000e+02,5.857167325075312983e+05 +6.230000000000000000e+02,5.898183348026920576e+05 +6.240000000000000000e+02,5.939841047111250227e+05 +6.250000000000000000e+02,5.982126952822790481e+05 +6.260000000000000000e+02,6.025027773421221646e+05 +6.270000000000000000e+02,6.068530402436061995e+05 +6.280000000000000000e+02,6.112621924523755442e+05 +6.290000000000000000e+02,6.157289622162677115e+05 +6.300000000000000000e+02,6.202520979817768093e+05 +6.310000000000000000e+02,6.248303688476606039e+05 +6.320000000000000000e+02,6.294625649069607025e+05 +6.330000000000000000e+02,6.341474975369040621e+05 +6.340000000000000000e+02,6.388839995977784274e+05 +6.350000000000000000e+02,6.436709256032455014e+05 +6.360000000000000000e+02,6.485071518766541267e+05 +6.370000000000000000e+02,6.533915765503341099e+05 +6.380000000000000000e+02,6.583231195863561006e+05 +6.390000000000000000e+02,6.633007227880593855e+05 +6.400000000000000000e+02,6.683233497096233768e+05 +6.410000000000000000e+02,6.733899855370024452e+05 +6.420000000000000000e+02,6.784996369683404919e+05 +6.430000000000000000e+02,6.836513320826999843e+05 +6.440000000000000000e+02,6.888441200573965907e+05 +6.450000000000000000e+02,6.940770710602103500e+05 +6.460000000000000000e+02,6.993492759544583969e+05 +6.470000000000000000e+02,7.046598460510933073e+05 +6.480000000000000000e+02,7.100079127835420659e+05 +6.490000000000000000e+02,7.153926275482368656e+05 +6.500000000000000000e+02,7.208131612747663166e+05 +6.510000000000000000e+02,7.262687042001786176e+05 +6.520000000000000000e+02,7.317584654947024537e+05 +6.530000000000000000e+02,7.372816729319430888e+05 +6.540000000000000000e+02,7.428375725876769284e+05 +6.550000000000000000e+02,7.484254285170638468e+05 +6.560000000000000000e+02,7.540445222922526300e+05 +6.570000000000000000e+02,7.596941527977110818e+05 +6.580000000000000000e+02,7.653736357994413702e+05 +6.590000000000000000e+02,7.710823036116173025e+05 +6.600000000000000000e+02,7.768195047549866140e+05 +6.610000000000000000e+02,7.825846035691101570e+05 +6.620000000000000000e+02,7.883769799284600886e+05 +6.630000000000000000e+02,7.941960288396870019e+05 +6.640000000000000000e+02,8.000411600874594878e+05 +6.650000000000000000e+02,8.059117979682427831e+05 +6.660000000000000000e+02,8.118073809062434593e+05 +6.670000000000000000e+02,8.177273610618562670e+05 +6.680000000000000000e+02,8.236712041261735139e+05 +6.690000000000000000e+02,8.296383888910703827e+05 +6.700000000000000000e+02,8.356284069867403014e+05 +6.710000000000000000e+02,8.416407625087391352e+05 +6.720000000000000000e+02,8.476749718246632256e+05 +6.730000000000000000e+02,8.537305630855147028e+05 +6.740000000000000000e+02,8.598070761214732192e+05 +6.750000000000000000e+02,8.659040620523090474e+05 +6.760000000000000000e+02,8.720210829602723243e+05 +6.770000000000000000e+02,8.781577117273455951e+05 +6.780000000000000000e+02,8.843135315915809479e+05 +6.790000000000000000e+02,8.904881360661346698e+05 +6.800000000000000000e+02,8.966811285565216094e+05 +6.810000000000000000e+02,9.028921221431501908e+05 +6.820000000000000000e+02,9.091207392891958589e+05 +6.830000000000000000e+02,9.153666116551219020e+05 +6.840000000000000000e+02,9.216293798284447985e+05 +6.850000000000000000e+02,9.279086930694557959e+05 +6.860000000000000000e+02,9.342042091227910714e+05 +6.870000000000000000e+02,9.405155939337619347e+05 +6.880000000000000000e+02,9.468425215428760275e+05 +6.890000000000000000e+02,9.531846737108177040e+05 +6.900000000000000000e+02,9.595417399162219372e+05 +6.910000000000000000e+02,9.659134169500402641e+05 +6.920000000000000000e+02,9.722994088214384392e+05 +6.930000000000000000e+02,9.786994266293526161e+05 +6.940000000000000000e+02,9.851131881906860508e+05 +6.950000000000000000e+02,9.915404180761926109e+05 +6.960000000000000000e+02,9.979808472796467831e+05 +6.970000000000000000e+02,1.004434213118449668e+06 +6.980000000000000000e+02,1.010900259015177377e+06 +6.990000000000000000e+02,1.017378734397495398e+06 +7.000000000000000000e+02,1.023869394519871799e+06 +7.010000000000000000e+02,1.030372000236248598e+06 +7.020000000000000000e+02,1.036886317997755250e+06 +7.030000000000000000e+02,1.043412119539096486e+06 +7.040000000000000000e+02,1.049949181884855963e+06 +7.050000000000000000e+02,1.056497287127521122e+06 +7.060000000000000000e+02,1.063056222336504841e+06 +7.070000000000000000e+02,1.069625779353779973e+06 +7.080000000000000000e+02,1.076205754773830064e+06 +7.090000000000000000e+02,1.082795949714448303e+06 +7.100000000000000000e+02,1.089396169814617839e+06 +7.110000000000000000e+02,1.096006225011854433e+06 +7.120000000000000000e+02,1.102625929482876090e+06 +7.130000000000000000e+02,1.109255101533809444e+06 +7.140000000000000000e+02,1.115893563429305330e+06 +7.150000000000000000e+02,1.122541141460597748e+06 +7.160000000000000000e+02,1.129197665587339550e+06 +7.170000000000000000e+02,1.135862969586576335e+06 +7.180000000000000000e+02,1.142536890763966832e+06 +7.190000000000000000e+02,1.149219270001381868e+06 +7.200000000000000000e+02,1.155909951634756057e+06 +7.210000000000000000e+02,1.162608783280223142e+06 diff --git a/quisp/satellite_csvs/Micius-Nice_tatm_1550.csv b/quisp/satellite_csvs/Micius-Nice_tatm_1550.csv new file mode 100644 index 000000000..569c4bab0 --- /dev/null +++ b/quisp/satellite_csvs/Micius-Nice_tatm_1550.csv @@ -0,0 +1,284 @@ +4.380000000000000000e+02,7.733517289161682129e-01 +4.390000000000000000e+02,7.750507593154907227e-01 +4.400000000000000000e+02,7.767462730407714844e-01 +4.410000000000000000e+02,7.784193158149719238e-01 +4.420000000000000000e+02,7.800610065460205078e-01 +4.430000000000000000e+02,7.816938161849975586e-01 +4.440000000000000000e+02,7.833094000816345215e-01 +4.450000000000000000e+02,7.849309444427490234e-01 +4.460000000000000000e+02,7.865795493125915527e-01 +4.470000000000000000e+02,7.881526350975036621e-01 +4.480000000000000000e+02,7.897133827209472656e-01 +4.490000000000000000e+02,7.913169264793395996e-01 +4.500000000000000000e+02,7.928786873817443848e-01 +4.510000000000000000e+02,7.944483160972595215e-01 +4.520000000000000000e+02,7.959617376327514648e-01 +4.530000000000000000e+02,7.974969148635864258e-01 +4.540000000000000000e+02,7.990317940711975098e-01 +4.550000000000000000e+02,8.005355596542358398e-01 +4.560000000000000000e+02,8.020445704460144043e-01 +4.570000000000000000e+02,8.035411834716796875e-01 +4.580000000000000000e+02,8.050443530082702637e-01 +4.590000000000000000e+02,8.064792752265930176e-01 +4.600000000000000000e+02,8.079520463943481445e-01 +4.610000000000000000e+02,8.094534277915954590e-01 +4.620000000000000000e+02,8.108844757080078125e-01 +4.630000000000000000e+02,8.123330473899841309e-01 +4.640000000000000000e+02,8.137497901916503906e-01 +4.650000000000000000e+02,8.151676058769226074e-01 +4.660000000000000000e+02,8.165815472602844238e-01 +4.670000000000000000e+02,8.179670572280883789e-01 +4.680000000000000000e+02,8.193655610084533691e-01 +4.690000000000000000e+02,8.207247257232666016e-01 +4.700000000000000000e+02,8.221182227134704590e-01 +4.710000000000000000e+02,8.234706521034240723e-01 +4.720000000000000000e+02,8.248324990272521973e-01 +4.730000000000000000e+02,8.261623382568359375e-01 +4.740000000000000000e+02,8.275287747383117676e-01 +4.750000000000000000e+02,8.288485407829284668e-01 +4.760000000000000000e+02,8.301666975021362305e-01 +4.770000000000000000e+02,8.315043449401855469e-01 +4.780000000000000000e+02,8.327595591545104980e-01 +4.790000000000000000e+02,8.340648412704467773e-01 +4.800000000000000000e+02,8.353663682937622070e-01 +4.810000000000000000e+02,8.366428613662719727e-01 +4.820000000000000000e+02,8.379490375518798828e-01 +4.830000000000000000e+02,8.391531705856323242e-01 +4.840000000000000000e+02,8.404001593589782715e-01 +4.850000000000000000e+02,8.416501879692077637e-01 +4.860000000000000000e+02,8.428988456726074219e-01 +4.870000000000000000e+02,8.441222906112670898e-01 +4.880000000000000000e+02,8.453149199485778809e-01 +4.890000000000000000e+02,8.465176820755004883e-01 +4.900000000000000000e+02,8.477207422256469727e-01 +4.910000000000000000e+02,8.489561676979064941e-01 +4.920000000000000000e+02,8.501064777374267578e-01 +4.930000000000000000e+02,8.513059020042419434e-01 +4.940000000000000000e+02,8.524510264396667480e-01 +4.950000000000000000e+02,8.536071181297302246e-01 +4.960000000000000000e+02,8.547531962394714355e-01 +4.970000000000000000e+02,8.558931350708007812e-01 +4.980000000000000000e+02,8.570019006729125977e-01 +4.990000000000000000e+02,8.581557869911193848e-01 +5.000000000000000000e+02,8.592464923858642578e-01 +5.010000000000000000e+02,8.603636622428894043e-01 +5.020000000000000000e+02,8.614669442176818848e-01 +5.030000000000000000e+02,8.625484704971313477e-01 +5.040000000000000000e+02,8.636292815208435059e-01 +5.050000000000000000e+02,8.646842837333679199e-01 +5.060000000000000000e+02,8.657494783401489258e-01 +5.070000000000000000e+02,8.667933344841003418e-01 +5.080000000000000000e+02,8.678454160690307617e-01 +5.090000000000000000e+02,8.688773512840270996e-01 +5.100000000000000000e+02,8.699125647544860840e-01 +5.110000000000000000e+02,8.709260225296020508e-01 +5.120000000000000000e+02,8.719201683998107910e-01 +5.130000000000000000e+02,8.729092478752136230e-01 +5.140000000000000000e+02,8.738842010498046875e-01 +5.150000000000000000e+02,8.748750090599060059e-01 +5.160000000000000000e+02,8.758282661437988281e-01 +5.170000000000000000e+02,8.767933845520019531e-01 +5.180000000000000000e+02,8.777240514755249023e-01 +5.190000000000000000e+02,8.786643743515014648e-01 +5.200000000000000000e+02,8.796049952507019043e-01 +5.210000000000000000e+02,8.805173039436340332e-01 +5.220000000000000000e+02,8.814221620559692383e-01 +5.230000000000000000e+02,8.823069334030151367e-01 +5.240000000000000000e+02,8.831890225410461426e-01 +5.250000000000000000e+02,8.840737342834472656e-01 +5.260000000000000000e+02,8.849211931228637695e-01 +5.270000000000000000e+02,8.857747316360473633e-01 +5.280000000000000000e+02,8.866004943847656250e-01 +5.290000000000000000e+02,8.874522447586059570e-01 +5.300000000000000000e+02,8.882652521133422852e-01 +5.310000000000000000e+02,8.890529274940490723e-01 +5.320000000000000000e+02,8.898593187332153320e-01 +5.330000000000000000e+02,8.906114697456359863e-01 +5.340000000000000000e+02,8.913756012916564941e-01 +5.350000000000000000e+02,8.921464085578918457e-01 +5.360000000000000000e+02,8.928758502006530762e-01 +5.370000000000000000e+02,8.936057090759277344e-01 +5.380000000000000000e+02,8.943330049514770508e-01 +5.390000000000000000e+02,8.950222730636596680e-01 +5.400000000000000000e+02,8.957142829895019531e-01 +5.410000000000000000e+02,8.963857889175415039e-01 +5.420000000000000000e+02,8.970561623573303223e-01 +5.430000000000000000e+02,8.976911306381225586e-01 +5.440000000000000000e+02,8.983307480812072754e-01 +5.450000000000000000e+02,8.989358544349670410e-01 +5.460000000000000000e+02,8.995426297187805176e-01 +5.470000000000000000e+02,9.001360535621643066e-01 +5.480000000000000000e+02,9.007050395011901855e-01 +5.490000000000000000e+02,9.012585878372192383e-01 +5.500000000000000000e+02,9.018024206161499023e-01 +5.510000000000000000e+02,9.023167490959167480e-01 +5.520000000000000000e+02,9.028397798538208008e-01 +5.530000000000000000e+02,9.033271074295043945e-01 +5.540000000000000000e+02,9.037995934486389160e-01 +5.550000000000000000e+02,9.042523503303527832e-01 +5.560000000000000000e+02,9.047019481658935547e-01 +5.570000000000000000e+02,9.051223993301391602e-01 +5.580000000000000000e+02,9.055447578430175781e-01 +5.590000000000000000e+02,9.059211611747741699e-01 +5.600000000000000000e+02,9.062931537628173828e-01 +5.610000000000000000e+02,9.066607952117919922e-01 +5.620000000000000000e+02,9.069914221763610840e-01 +5.630000000000000000e+02,9.073082208633422852e-01 +5.640000000000000000e+02,9.075964093208312988e-01 +5.650000000000000000e+02,9.078992605209350586e-01 +5.660000000000000000e+02,9.081414937973022461e-01 +5.670000000000000000e+02,9.083930850028991699e-01 +5.680000000000000000e+02,9.086208343505859375e-01 +5.690000000000000000e+02,9.088206887245178223e-01 +5.700000000000000000e+02,9.090064167976379395e-01 +5.710000000000000000e+02,9.091812968254089355e-01 +5.720000000000000000e+02,9.093051552772521973e-01 +5.730000000000000000e+02,9.094454646110534668e-01 +5.740000000000000000e+02,9.095376133918762207e-01 +5.750000000000000000e+02,9.096450209617614746e-01 +5.760000000000000000e+02,9.096938967704772949e-01 +5.770000000000000000e+02,9.097355604171752930e-01 +5.780000000000000000e+02,9.097695350646972656e-01 +5.790000000000000000e+02,9.097864031791687012e-01 +5.800000000000000000e+02,9.097562432289123535e-01 +5.810000000000000000e+02,9.097233414649963379e-01 +5.820000000000000000e+02,9.096943736076354980e-01 +5.830000000000000000e+02,9.095984101295471191e-01 +5.840000000000000000e+02,9.095288515090942383e-01 +5.850000000000000000e+02,9.094136953353881836e-01 +5.860000000000000000e+02,9.092773199081420898e-01 +5.870000000000000000e+02,9.091252088546752930e-01 +5.880000000000000000e+02,9.089583754539489746e-01 +5.890000000000000000e+02,9.087555408477783203e-01 +5.900000000000000000e+02,9.085567593574523926e-01 +5.910000000000000000e+02,9.083386063575744629e-01 +5.920000000000000000e+02,9.080931544303894043e-01 +5.930000000000000000e+02,9.078165888786315918e-01 +5.940000000000000000e+02,9.075511097908020020e-01 +5.950000000000000000e+02,9.072384238243103027e-01 +5.960000000000000000e+02,9.069266915321350098e-01 +5.970000000000000000e+02,9.065869450569152832e-01 +5.980000000000000000e+02,9.062135815620422363e-01 +5.990000000000000000e+02,9.058365821838378906e-01 +6.000000000000000000e+02,9.054601192474365234e-01 +6.010000000000000000e+02,9.050529003143310547e-01 +6.020000000000000000e+02,9.046092033386230469e-01 +6.030000000000000000e+02,9.041732549667358398e-01 +6.040000000000000000e+02,9.037227034568786621e-01 +6.050000000000000000e+02,9.032533764839172363e-01 +6.060000000000000000e+02,9.027512073516845703e-01 +6.070000000000000000e+02,9.022476077079772949e-01 +6.080000000000000000e+02,9.017133712768554688e-01 +6.090000000000000000e+02,9.011879563331604004e-01 +6.100000000000000000e+02,9.006215929985046387e-01 +6.110000000000000000e+02,9.000450372695922852e-01 +6.120000000000000000e+02,8.994779586791992188e-01 +6.130000000000000000e+02,8.988630175590515137e-01 +6.140000000000000000e+02,8.982497453689575195e-01 +6.150000000000000000e+02,8.975967764854431152e-01 +6.160000000000000000e+02,8.969701528549194336e-01 +6.170000000000000000e+02,8.963229656219482422e-01 +6.180000000000000000e+02,8.956459164619445801e-01 +6.190000000000000000e+02,8.949680328369140625e-01 +6.200000000000000000e+02,8.942645788192749023e-01 +6.210000000000000000e+02,8.935660719871520996e-01 +6.220000000000000000e+02,8.928281664848327637e-01 +6.230000000000000000e+02,8.921109437942504883e-01 +6.240000000000000000e+02,8.913583159446716309e-01 +6.250000000000000000e+02,8.905994892120361328e-01 +6.260000000000000000e+02,8.898113965988159180e-01 +6.270000000000000000e+02,8.890489339828491211e-01 +6.280000000000000000e+02,8.882446289062500000e-01 +6.290000000000000000e+02,8.874462246894836426e-01 +6.300000000000000000e+02,8.866343498229980469e-01 +6.310000000000000000e+02,8.857858180999755859e-01 +6.320000000000000000e+02,8.849609494209289551e-01 +6.330000000000000000e+02,8.841043710708618164e-01 +6.340000000000000000e+02,8.832251429557800293e-01 +6.350000000000000000e+02,8.823574781417846680e-01 +6.360000000000000000e+02,8.814826011657714844e-01 +6.370000000000000000e+02,8.805871605873107910e-01 +6.380000000000000000e+02,8.796756267547607422e-01 +6.390000000000000000e+02,8.787702918052673340e-01 +6.400000000000000000e+02,8.778424859046936035e-01 +6.410000000000000000e+02,8.768937587738037109e-01 +6.420000000000000000e+02,8.759621977806091309e-01 +6.430000000000000000e+02,8.750107884407043457e-01 +6.440000000000000000e+02,8.740504980087280273e-01 +6.450000000000000000e+02,8.730862140655517578e-01 +6.460000000000000000e+02,8.720933198928833008e-01 +6.470000000000000000e+02,8.711148500442504883e-01 +6.480000000000000000e+02,8.701223731040954590e-01 +6.490000000000000000e+02,8.690968751907348633e-01 +6.500000000000000000e+02,8.680728673934936523e-01 +6.510000000000000000e+02,8.670585155487060547e-01 +6.520000000000000000e+02,8.660422563552856445e-01 +6.530000000000000000e+02,8.649957180023193359e-01 +6.540000000000000000e+02,8.639369010925292969e-01 +6.550000000000000000e+02,8.628755807876586914e-01 +6.560000000000000000e+02,8.617812991142272949e-01 +6.570000000000000000e+02,8.607395887374877930e-01 +6.580000000000000000e+02,8.596352934837341309e-01 +6.590000000000000000e+02,8.585319519042968750e-01 +6.600000000000000000e+02,8.574599623680114746e-01 +6.610000000000000000e+02,8.563515543937683105e-01 +6.620000000000000000e+02,8.552168607711791992e-01 +6.630000000000000000e+02,8.540834188461303711e-01 +6.640000000000000000e+02,8.529624938964843750e-01 +6.650000000000000000e+02,8.517999649047851562e-01 +6.660000000000000000e+02,8.506557941436767578e-01 +6.670000000000000000e+02,8.494852781295776367e-01 +6.680000000000000000e+02,8.483033776283264160e-01 +6.690000000000000000e+02,8.471585512161254883e-01 +6.700000000000000000e+02,8.459653258323669434e-01 +6.710000000000000000e+02,8.447564244270324707e-01 +6.720000000000000000e+02,8.435704708099365234e-01 +6.730000000000000000e+02,8.423551321029663086e-01 +6.740000000000000000e+02,8.411523103713989258e-01 +6.750000000000000000e+02,8.399544954299926758e-01 +6.760000000000000000e+02,8.387187123298645020e-01 +6.770000000000000000e+02,8.374165892601013184e-01 +6.780000000000000000e+02,8.361832499504089355e-01 +6.790000000000000000e+02,8.349141478538513184e-01 +6.800000000000000000e+02,8.336737751960754395e-01 +6.810000000000000000e+02,8.324011564254760742e-01 +6.820000000000000000e+02,8.311048150062561035e-01 +6.830000000000000000e+02,8.298447728157043457e-01 +6.840000000000000000e+02,8.285345435142517090e-01 +6.850000000000000000e+02,8.272107243537902832e-01 +6.860000000000000000e+02,8.259122967720031738e-01 +6.870000000000000000e+02,8.245975971221923828e-01 +6.880000000000000000e+02,8.232430815696716309e-01 +6.890000000000000000e+02,8.219260573387145996e-01 +6.900000000000000000e+02,8.205344080924987793e-01 +6.910000000000000000e+02,8.192035555839538574e-01 +6.920000000000000000e+02,8.178434371948242188e-01 +6.930000000000000000e+02,8.164524435997009277e-01 +6.940000000000000000e+02,8.150789141654968262e-01 +6.950000000000000000e+02,8.137055635452270508e-01 +6.960000000000000000e+02,8.122891783714294434e-01 +6.970000000000000000e+02,8.108277320861816406e-01 +6.980000000000000000e+02,8.094335794448852539e-01 +6.990000000000000000e+02,8.080191016197204590e-01 +7.000000000000000000e+02,8.065620064735412598e-01 +7.010000000000000000e+02,8.051553368568420410e-01 +7.020000000000000000e+02,8.036579489707946777e-01 +7.030000000000000000e+02,8.022306561470031738e-01 +7.040000000000000000e+02,8.007238507270812988e-01 +7.050000000000000000e+02,7.992864251136779785e-01 +7.060000000000000000e+02,7.977329492568969727e-01 +7.070000000000000000e+02,7.962495088577270508e-01 +7.080000000000000000e+02,7.947389483451843262e-01 +7.090000000000000000e+02,7.932316660881042480e-01 +7.100000000000000000e+02,7.916868925094604492e-01 +7.110000000000000000e+02,7.901374101638793945e-01 +7.120000000000000000e+02,7.885731458663940430e-01 +7.130000000000000000e+02,7.870432138442993164e-01 +7.140000000000000000e+02,7.854807972908020020e-01 +7.150000000000000000e+02,7.839025259017944336e-01 +7.160000000000000000e+02,7.822816967964172363e-01 +7.170000000000000000e+02,7.806711196899414062e-01 +7.180000000000000000e+02,7.790497541427612305e-01 +7.190000000000000000e+02,7.774293422698974609e-01 +7.200000000000000000e+02,7.758010625839233398e-01 +7.210000000000000000e+02,7.741361260414123535e-01 diff --git a/quisp/satellite_csvs/Micius-Paris_distance.csv b/quisp/satellite_csvs/Micius-Paris_distance.csv new file mode 100644 index 000000000..6610c04d2 --- /dev/null +++ b/quisp/satellite_csvs/Micius-Paris_distance.csv @@ -0,0 +1,282 @@ +5.290000000000000000e+02,1.157206766706098802e+06 +5.300000000000000000e+02,1.150580757290502312e+06 +5.310000000000000000e+02,1.143964049002653221e+06 +5.320000000000000000e+02,1.137356812264034757e+06 +5.330000000000000000e+02,1.130759221160837449e+06 +5.340000000000000000e+02,1.124171453601191053e+06 +5.350000000000000000e+02,1.117593691294409335e+06 +5.360000000000000000e+02,1.111026119987737155e+06 +5.370000000000000000e+02,1.104468929492925061e+06 +5.380000000000000000e+02,1.097922313780592289e+06 +5.390000000000000000e+02,1.091386471128707984e+06 +5.400000000000000000e+02,1.084861604159342591e+06 +5.410000000000000000e+02,1.078347920108371880e+06 +5.420000000000000000e+02,1.071845630711128470e+06 +5.430000000000000000e+02,1.065354952551265247e+06 +5.440000000000000000e+02,1.058876107036804548e+06 +5.450000000000000000e+02,1.052409320535696577e+06 +5.460000000000000000e+02,1.045954824629754294e+06 +5.470000000000000000e+02,1.039512855997334351e+06 +5.480000000000000000e+02,1.033083656880881987e+06 +5.490000000000000000e+02,1.026667474925598130e+06 +5.500000000000000000e+02,1.020264563477737247e+06 +5.510000000000000000e+02,1.013875181761660846e+06 +5.520000000000000000e+02,1.007499594875932089e+06 +5.530000000000000000e+02,1.001138074081289698e+06 +5.540000000000000000e+02,9.947908969480772503e+05 +5.550000000000000000e+02,9.884583474370199256e+05 +5.560000000000000000e+02,9.821407161163601559e+05 +5.570000000000000000e+02,9.758383003730387427e+05 +5.580000000000000000e+02,9.695514045259490376e+05 +5.590000000000000000e+02,9.632803400456537493e+05 +5.600000000000000000e+02,9.570254256467733067e+05 +5.610000000000000000e+02,9.507869876666272758e+05 +5.620000000000000000e+02,9.445653599764901446e+05 +5.630000000000000000e+02,9.383608845082606422e+05 +5.640000000000000000e+02,9.321739111757684732e+05 +5.650000000000000000e+02,9.260047982003933284e+05 +5.660000000000000000e+02,9.198539123702151701e+05 +5.670000000000000000e+02,9.137216291263621533e+05 +5.680000000000000000e+02,9.076083328912470024e+05 +5.690000000000000000e+02,9.015144172425747383e+05 +5.700000000000000000e+02,8.954402851621774025e+05 +5.710000000000000000e+02,8.893863492199096363e+05 +5.720000000000000000e+02,8.833530319088530960e+05 +5.730000000000000000e+02,8.773407657897878671e+05 +5.740000000000000000e+02,8.713499937770350371e+05 +5.750000000000000000e+02,8.653811694271682063e+05 +5.760000000000000000e+02,8.594347570885736495e+05 +5.770000000000000000e+02,8.535112322943778709e+05 +5.780000000000000000e+02,8.476110819204244763e+05 +5.790000000000000000e+02,8.417348044898870867e+05 +5.800000000000000000e+02,8.358829104625021573e+05 +5.810000000000000000e+02,8.300559224886159645e+05 +5.820000000000000000e+02,8.242543756579702022e+05 +5.830000000000000000e+02,8.184788178350678645e+05 +5.840000000000000000e+02,8.127298099119678373e+05 +5.850000000000000000e+02,8.070079260834312299e+05 +5.860000000000000000e+02,8.013137541044447571e+05 +5.870000000000000000e+02,7.956478956773312530e+05 +5.880000000000000000e+02,7.900109666557338787e+05 +5.890000000000000000e+02,7.844035973324525403e+05 +5.900000000000000000e+02,7.788264327615353977e+05 +5.910000000000000000e+02,7.732801329904368613e+05 +5.920000000000000000e+02,7.677653734315782785e+05 +5.930000000000000000e+02,7.622828450633807806e+05 +5.940000000000000000e+02,7.568332547160323011e+05 +5.950000000000000000e+02,7.514173253793586046e+05 +5.960000000000000000e+02,7.460357964599969564e+05 +5.970000000000000000e+02,7.406894240331957117e+05 +5.980000000000000000e+02,7.353789810777114471e+05 +5.990000000000000000e+02,7.301052577449657256e+05 +6.000000000000000000e+02,7.248690615830078023e+05 +6.010000000000000000e+02,7.196712177489660680e+05 +6.020000000000000000e+02,7.145125692414124496e+05 +6.030000000000000000e+02,7.093939770590172848e+05 +6.040000000000000000e+02,7.043163204252568539e+05 +6.050000000000000000e+02,6.992804968712618575e+05 +6.060000000000000000e+02,6.942874224292092258e+05 +6.070000000000000000e+02,6.893380317051113816e+05 +6.080000000000000000e+02,6.844332780693320092e+05 +6.090000000000000000e+02,6.795741335209914250e+05 +6.100000000000000000e+02,6.747615889537599869e+05 +6.110000000000000000e+02,6.699966539525032276e+05 +6.120000000000000000e+02,6.652803568740737392e+05 +6.130000000000000000e+02,6.606137447645647917e+05 +6.140000000000000000e+02,6.559978831644253805e+05 +6.150000000000000000e+02,6.514338561059001368e+05 +6.160000000000000000e+02,6.469227656834087102e+05 +6.170000000000000000e+02,6.424657320480757626e+05 +6.180000000000000000e+02,6.380638929356615990e+05 +6.190000000000000000e+02,6.337184033709238283e+05 +6.200000000000000000e+02,6.294304352264801273e+05 +6.210000000000000000e+02,6.252011767221156042e+05 +6.220000000000000000e+02,6.210318319714219542e+05 +6.230000000000000000e+02,6.169236202262550360e+05 +6.240000000000000000e+02,6.128777753030207241e+05 +6.250000000000000000e+02,6.088955447876264807e+05 +6.260000000000000000e+02,6.049781891769927461e+05 +6.270000000000000000e+02,6.011269809553112136e+05 +6.280000000000000000e+02,5.973432036525987787e+05 +6.290000000000000000e+02,5.936281506724477513e+05 +6.300000000000000000e+02,5.899831241837231210e+05 +6.310000000000000000e+02,5.864094338270744774e+05 +6.320000000000000000e+02,5.829083953660242260e+05 +6.330000000000000000e+02,5.794813292364689987e+05 +6.340000000000000000e+02,5.761295590240985621e+05 +6.350000000000000000e+02,5.728544098278023303e+05 +6.360000000000000000e+02,5.696572065068290103e+05 +6.370000000000000000e+02,5.665392719088074518e+05 +6.380000000000000000e+02,5.635019249607278034e+05 +6.390000000000000000e+02,5.605464786544996314e+05 +6.400000000000000000e+02,5.576742379884610418e+05 +6.410000000000000000e+02,5.548864978216069285e+05 +6.420000000000000000e+02,5.521845406339329202e+05 +6.430000000000000000e+02,5.495696342093372950e+05 +6.440000000000000000e+02,5.470430293163566384e+05 +6.450000000000000000e+02,5.446059572317095008e+05 +6.460000000000000000e+02,5.422596272978661582e+05 +6.470000000000000000e+02,5.400052244049871806e+05 +6.480000000000000000e+02,5.378439064656151459e+05 +6.490000000000000000e+02,5.357768017963111633e+05 +6.500000000000000000e+02,5.338050065914635779e+05 +6.510000000000000000e+02,5.319295823132039513e+05 +6.520000000000000000e+02,5.301515531467136461e+05 +6.530000000000000000e+02,5.284719034593031975e+05 +6.540000000000000000e+02,5.268915752895609476e+05 +6.550000000000000000e+02,5.254114658960903762e+05 +6.560000000000000000e+02,5.240324254036181374e+05 +6.570000000000000000e+02,5.227552544627522002e+05 +6.580000000000000000e+02,5.215807020592947374e+05 +6.590000000000000000e+02,5.205094634052115725e+05 +6.600000000000000000e+02,5.195421779516483657e+05 +6.610000000000000000e+02,5.186794275416461169e+05 +6.620000000000000000e+02,5.179217346916986280e+05 +6.630000000000000000e+02,5.172695610471131513e+05 +6.640000000000000000e+02,5.167233059942524997e+05 +6.650000000000000000e+02,5.162833054435453378e+05 +6.660000000000000000e+02,5.159498308085380122e+05 +6.670000000000000000e+02,5.157230881719638710e+05 +6.680000000000000000e+02,5.156032176437690505e+05 +6.690000000000000000e+02,5.155902929296446964e+05 +6.700000000000000000e+02,5.156843210998743889e+05 +6.710000000000000000e+02,5.158852425647092750e+05 +6.720000000000000000e+02,5.161929312640241696e+05 +6.730000000000000000e+02,5.166071950465069385e+05 +6.740000000000000000e+02,5.171277762750969268e+05 +6.750000000000000000e+02,5.177543526132937404e+05 +6.760000000000000000e+02,5.184865380034865811e+05 +6.770000000000000000e+02,5.193238838522433070e+05 +6.780000000000000000e+02,5.202658803550123703e+05 +6.790000000000000000e+02,5.213119580411798088e+05 +6.800000000000000000e+02,5.224614894320953754e+05 +6.810000000000000000e+02,5.237137908694697544e+05 +6.820000000000000000e+02,5.250681244639659999e+05 +6.830000000000000000e+02,5.265237001876097638e+05 +6.840000000000000000e+02,5.280796780570159899e+05 +6.850000000000000000e+02,5.297351704119811766e+05 +6.860000000000000000e+02,5.314892442933147540e+05 +6.870000000000000000e+02,5.333409238600791432e+05 +6.880000000000000000e+02,5.352891929142564768e+05 +6.890000000000000000e+02,5.373329973810272058e+05 +6.900000000000000000e+02,5.394712479358944111e+05 +6.910000000000000000e+02,5.417028225115195382e+05 +6.920000000000000000e+02,5.440265689100034069e+05 +6.930000000000000000e+02,5.464413073988951510e+05 +6.940000000000000000e+02,5.489458331905972445e+05 +6.950000000000000000e+02,5.515389190491492627e+05 +6.960000000000000000e+02,5.542193177111363038e+05 +6.970000000000000000e+02,5.569857643501341809e+05 +6.980000000000000000e+02,5.598369789323913865e+05 +6.990000000000000000e+02,5.627716685607518302e+05 +7.000000000000000000e+02,5.657885297128498787e+05 +7.010000000000000000e+02,5.688862503772648051e+05 +7.020000000000000000e+02,5.720635122168924427e+05 +7.030000000000000000e+02,5.753189924956965260e+05 +7.040000000000000000e+02,5.786513660745486850e+05 +7.050000000000000000e+02,5.820593072031916818e+05 +7.060000000000000000e+02,5.855414912852435373e+05 +7.070000000000000000e+02,5.890965964890189935e+05 +7.080000000000000000e+02,5.927233053641872248e+05 +7.090000000000000000e+02,5.964203062495000195e+05 +7.100000000000000000e+02,6.001862947138043819e+05 +7.110000000000000000e+02,6.040199747794728028e+05 +7.120000000000000000e+02,6.079200601468242239e+05 +7.130000000000000000e+02,6.118852753015485359e+05 +7.140000000000000000e+02,6.159143564956912305e+05 +7.150000000000000000e+02,6.200060527915809071e+05 +7.160000000000000000e+02,6.241591267580017447e+05 +7.170000000000000000e+02,6.283723554033545079e+05 +7.180000000000000000e+02,6.326445307558686472e+05 +7.190000000000000000e+02,6.369744605841778684e+05 +7.200000000000000000e+02,6.413609689395782771e+05 +7.210000000000000000e+02,6.458028965936966706e+05 +7.220000000000000000e+02,6.502991015658256365e+05 +7.230000000000000000e+02,6.548484593711772468e+05 +7.240000000000000000e+02,6.594498634785637259e+05 +7.250000000000000000e+02,6.641022254933740478e+05 +7.260000000000000000e+02,6.688044753706709016e+05 +7.270000000000000000e+02,6.735555616048452212e+05 +7.280000000000000000e+02,6.783544513451713137e+05 +7.290000000000000000e+02,6.832001304777323967e+05 +7.300000000000000000e+02,6.880916036774315871e+05 +7.310000000000000000e+02,6.930278943840565626e+05 +7.320000000000000000e+02,6.980080448262736900e+05 +7.330000000000000000e+02,7.030311159431753913e+05 +7.340000000000000000e+02,7.080961872601616196e+05 +7.350000000000000000e+02,7.132023568972214125e+05 +7.360000000000000000e+02,7.183487413136177929e+05 +7.370000000000000000e+02,7.235344752048401861e+05 +7.380000000000000000e+02,7.287587113484358415e+05 +7.390000000000000000e+02,7.340206203552571824e+05 +7.400000000000000000e+02,7.393193905858354410e+05 +7.410000000000000000e+02,7.446542277857518056e+05 +7.420000000000000000e+02,7.500243549678473501e+05 +7.430000000000000000e+02,7.554290120925614610e+05 +7.440000000000000000e+02,7.608674558878039243e+05 +7.450000000000000000e+02,7.663389595375753706e+05 +7.460000000000000000e+02,7.718428124157357961e+05 +7.470000000000000000e+02,7.773783198506624904e+05 +7.480000000000000000e+02,7.829448028403964126e+05 +7.490000000000000000e+02,7.885415977638015756e+05 +7.500000000000000000e+02,7.941680560791841708e+05 +7.510000000000000000e+02,7.998235440852417378e+05 +7.520000000000000000e+02,8.055074425606890582e+05 +7.530000000000000000e+02,8.112191465511332499e+05 +7.540000000000000000e+02,8.169580650637161452e+05 +7.550000000000000000e+02,8.227236207523366902e+05 +7.560000000000000000e+02,8.285152496886388399e+05 +7.570000000000000000e+02,8.343324009833420860e+05 +7.580000000000000000e+02,8.401745365986183751e+05 +7.590000000000000000e+02,8.460411310306047089e+05 +7.600000000000000000e+02,8.519316710031816037e+05 +7.610000000000000000e+02,8.578456552707263036e+05 +7.620000000000000000e+02,8.637825942312873667e+05 +7.630000000000000000e+02,8.697420097944659647e+05 +7.640000000000000000e+02,8.757234350012356881e+05 +7.650000000000000000e+02,8.817264138515954837e+05 +7.660000000000000000e+02,8.877505009802255081e+05 +7.670000000000000000e+02,8.937952614636213984e+05 +7.680000000000000000e+02,8.998602704637802672e+05 +7.690000000000000000e+02,9.059451131930527044e+05 +7.700000000000000000e+02,9.120493844276507152e+05 +7.710000000000000000e+02,9.181726884820710402e+05 +7.720000000000000000e+02,9.243146388300717808e+05 +7.730000000000000000e+02,9.304748579291296192e+05 +7.740000000000000000e+02,9.366529771008791868e+05 +7.750000000000000000e+02,9.428486361341482261e+05 +7.760000000000000000e+02,9.490614831943546887e+05 +7.770000000000000000e+02,9.552911745866694255e+05 +7.780000000000000000e+02,9.615373745334849227e+05 +7.790000000000000000e+02,9.677997550585045246e+05 +7.800000000000000000e+02,9.740779956609277287e+05 +7.810000000000000000e+02,9.803717832494142931e+05 +7.820000000000000000e+02,9.866808118759811623e+05 +7.830000000000000000e+02,9.930047826073596952e+05 +7.840000000000000000e+02,9.993434032771843486e+05 +7.850000000000000000e+02,1.005696388448922080e+06 +7.860000000000000000e+02,1.012063459145601839e+06 +7.870000000000000000e+02,1.018444342623880482e+06 +7.880000000000000000e+02,1.024838772402100032e+06 +7.890000000000000000e+02,1.031246487938812119e+06 +7.900000000000000000e+02,1.037667234606708749e+06 +7.910000000000000000e+02,1.044100763388197985e+06 +7.920000000000000000e+02,1.050546830899242545e+06 +7.930000000000000000e+02,1.057005199144530809e+06 +7.940000000000000000e+02,1.063475635444146115e+06 +7.950000000000000000e+02,1.069957912258531200e+06 +7.960000000000000000e+02,1.076451807005929062e+06 +7.970000000000000000e+02,1.082957102116140770e+06 +7.980000000000000000e+02,1.089473584664037917e+06 +7.990000000000000000e+02,1.096001046504494501e+06 +8.000000000000000000e+02,1.102539283922152361e+06 +8.010000000000000000e+02,1.109088097666645190e+06 +8.020000000000000000e+02,1.115647292810396058e+06 +8.030000000000000000e+02,1.122216678619606886e+06 +8.040000000000000000e+02,1.128796068481635302e+06 +8.050000000000000000e+02,1.135385279738649726e+06 +8.060000000000000000e+02,1.141984133631174918e+06 +8.070000000000000000e+02,1.148592455265972298e+06 +8.080000000000000000e+02,1.155210073360580718e+06 +8.090000000000000000e+02,1.161836820356411627e+06 +8.100000000000000000e+02,1.168472532157074660e+06 \ No newline at end of file diff --git a/quisp/satellite_csvs/Micius-Paris_tatm_1550.csv b/quisp/satellite_csvs/Micius-Paris_tatm_1550.csv new file mode 100644 index 000000000..81ac87dd7 --- /dev/null +++ b/quisp/satellite_csvs/Micius-Paris_tatm_1550.csv @@ -0,0 +1,282 @@ +5.290000000000000000e+02,7.737288475036621094e-01 +5.300000000000000000e+02,7.753916382789611816e-01 +5.310000000000000000e+02,7.770436406135559082e-01 +5.320000000000000000e+02,7.786877751350402832e-01 +5.330000000000000000e+02,7.803069949150085449e-01 +5.340000000000000000e+02,7.819221615791320801e-01 +5.350000000000000000e+02,7.835343480110168457e-01 +5.360000000000000000e+02,7.851040363311767578e-01 +5.370000000000000000e+02,7.867333292961120605e-01 +5.380000000000000000e+02,7.882864475250244141e-01 +5.390000000000000000e+02,7.898454070091247559e-01 +5.400000000000000000e+02,7.914017438888549805e-01 +5.410000000000000000e+02,7.929522991180419922e-01 +5.420000000000000000e+02,7.944928407669067383e-01 +5.430000000000000000e+02,7.959880232810974121e-01 +5.440000000000000000e+02,7.974945306777954102e-01 +5.450000000000000000e+02,7.990087270736694336e-01 +5.460000000000000000e+02,8.004992604255676270e-01 +5.470000000000000000e+02,8.019766211509704590e-01 +5.480000000000000000e+02,8.034687042236328125e-01 +5.490000000000000000e+02,8.049167990684509277e-01 +5.500000000000000000e+02,8.063447475433349609e-01 +5.510000000000000000e+02,8.077835440635681152e-01 +5.520000000000000000e+02,8.092282414436340332e-01 +5.530000000000000000e+02,8.106489181518554688e-01 +5.540000000000000000e+02,8.120685815811157227e-01 +5.550000000000000000e+02,8.134837150573730469e-01 +5.560000000000000000e+02,8.148708939552307129e-01 +5.570000000000000000e+02,8.162288069725036621e-01 +5.580000000000000000e+02,8.176081180572509766e-01 +5.590000000000000000e+02,8.189921975135803223e-01 +5.600000000000000000e+02,8.203468322753906250e-01 +5.610000000000000000e+02,8.216728568077087402e-01 +5.620000000000000000e+02,8.230355978012084961e-01 +5.630000000000000000e+02,8.243687748908996582e-01 +5.640000000000000000e+02,8.256631493568420410e-01 +5.650000000000000000e+02,8.269805312156677246e-01 +5.660000000000000000e+02,8.282649517059326172e-01 +5.670000000000000000e+02,8.295902013778686523e-01 +5.680000000000000000e+02,8.308560252189636230e-01 +5.690000000000000000e+02,8.321276307106018066e-01 +5.700000000000000000e+02,8.334075212478637695e-01 +5.710000000000000000e+02,8.346342444419860840e-01 +5.720000000000000000e+02,8.359043598175048828e-01 +5.730000000000000000e+02,8.371721506118774414e-01 +5.740000000000000000e+02,8.383802771568298340e-01 +5.750000000000000000e+02,8.396208286285400391e-01 +5.760000000000000000e+02,8.408214449882507324e-01 +5.770000000000000000e+02,8.419973254203796387e-01 +5.780000000000000000e+02,8.432316780090332031e-01 +5.790000000000000000e+02,8.444043397903442383e-01 +5.800000000000000000e+02,8.456019163131713867e-01 +5.810000000000000000e+02,8.467546105384826660e-01 +5.820000000000000000e+02,8.479079008102416992e-01 +5.830000000000000000e+02,8.490621447563171387e-01 +5.840000000000000000e+02,8.502182960510253906e-01 +5.850000000000000000e+02,8.513636589050292969e-01 +5.860000000000000000e+02,8.524618148803710938e-01 +5.870000000000000000e+02,8.535841703414916992e-01 +5.880000000000000000e+02,8.546879291534423828e-01 +5.890000000000000000e+02,8.558101058006286621e-01 +5.900000000000000000e+02,8.568903803825378418e-01 +5.910000000000000000e+02,8.579646944999694824e-01 +5.920000000000000000e+02,8.590344786643981934e-01 +5.930000000000000000e+02,8.601088523864746094e-01 +5.940000000000000000e+02,8.611651659011840820e-01 +5.950000000000000000e+02,8.622283339500427246e-01 +5.960000000000000000e+02,8.632412552833557129e-01 +5.970000000000000000e+02,8.642895221710205078e-01 +5.980000000000000000e+02,8.653014898300170898e-01 +5.990000000000000000e+02,8.663269281387329102e-01 +6.000000000000000000e+02,8.672977089881896973e-01 +6.010000000000000000e+02,8.682920336723327637e-01 +6.020000000000000000e+02,8.692555427551269531e-01 +6.030000000000000000e+02,8.702540397644042969e-01 +6.040000000000000000e+02,8.711845874786376953e-01 +6.050000000000000000e+02,8.721516728401184082e-01 +6.060000000000000000e+02,8.730998039245605469e-01 +6.070000000000000000e+02,8.740207552909851074e-01 +6.080000000000000000e+02,8.749434351921081543e-01 +6.090000000000000000e+02,8.758690357208251953e-01 +6.100000000000000000e+02,8.767594099044799805e-01 +6.110000000000000000e+02,8.776246905326843262e-01 +6.120000000000000000e+02,8.785122036933898926e-01 +6.130000000000000000e+02,8.794060349464416504e-01 +6.140000000000000000e+02,8.802552819252014160e-01 +6.150000000000000000e+02,8.810929059982299805e-01 +6.160000000000000000e+02,8.819206953048706055e-01 +6.170000000000000000e+02,8.827444911003112793e-01 +6.180000000000000000e+02,8.835671544075012207e-01 +6.190000000000000000e+02,8.843661546707153320e-01 +6.200000000000000000e+02,8.851550817489624023e-01 +6.210000000000000000e+02,8.859354853630065918e-01 +6.220000000000000000e+02,8.866915702819824219e-01 +6.230000000000000000e+02,8.874598741531372070e-01 +6.240000000000000000e+02,8.881928324699401855e-01 +6.250000000000000000e+02,8.889233469963073730e-01 +6.260000000000000000e+02,8.896157145500183105e-01 +6.270000000000000000e+02,8.903344273567199707e-01 +6.280000000000000000e+02,8.910045623779296875e-01 +6.290000000000000000e+02,8.916937112808227539e-01 +6.300000000000000000e+02,8.923428654670715332e-01 +6.310000000000000000e+02,8.930043578147888184e-01 +6.320000000000000000e+02,8.936334252357482910e-01 +6.330000000000000000e+02,8.942545056343078613e-01 +6.340000000000000000e+02,8.948647975921630859e-01 +6.350000000000000000e+02,8.954659104347229004e-01 +6.360000000000000000e+02,8.960443735122680664e-01 +6.370000000000000000e+02,8.966047167778015137e-01 +6.380000000000000000e+02,8.971461653709411621e-01 +6.390000000000000000e+02,8.976804018020629883e-01 +6.400000000000000000e+02,8.981953263282775879e-01 +6.410000000000000000e+02,8.986920714378356934e-01 +6.420000000000000000e+02,8.991832733154296875e-01 +6.430000000000000000e+02,8.996692299842834473e-01 +6.440000000000000000e+02,9.001185297966003418e-01 +6.450000000000000000e+02,9.005481004714965820e-01 +6.460000000000000000e+02,9.009795188903808594e-01 +6.470000000000000000e+02,9.013738632202148438e-01 +6.480000000000000000e+02,9.017724990844726562e-01 +6.490000000000000000e+02,9.021480679512023926e-01 +6.500000000000000000e+02,9.024992585182189941e-01 +6.510000000000000000e+02,9.028257727622985840e-01 +6.520000000000000000e+02,9.031405448913574219e-01 +6.530000000000000000e+02,9.034513831138610840e-01 +6.540000000000000000e+02,9.037305116653442383e-01 +6.550000000000000000e+02,9.040145277976989746e-01 +6.560000000000000000e+02,9.042389988899230957e-01 +6.570000000000000000e+02,9.044892191886901855e-01 +6.580000000000000000e+02,9.046957492828369141e-01 +6.590000000000000000e+02,9.048922061920166016e-01 +6.600000000000000000e+02,9.050607681274414062e-01 +6.610000000000000000e+02,9.052241444587707520e-01 +6.620000000000000000e+02,9.053621292114257812e-01 +6.630000000000000000e+02,9.054774045944213867e-01 +6.640000000000000000e+02,9.055722355842590332e-01 +6.650000000000000000e+02,9.056680202484130859e-01 +6.660000000000000000e+02,9.057287573814392090e-01 +6.670000000000000000e+02,9.057597517967224121e-01 +6.680000000000000000e+02,9.057891368865966797e-01 +6.690000000000000000e+02,9.058014750480651855e-01 +6.700000000000000000e+02,9.057953357696533203e-01 +6.710000000000000000e+02,9.057718515396118164e-01 +6.720000000000000000e+02,9.057098031044006348e-01 +6.730000000000000000e+02,9.056400060653686523e-01 +6.740000000000000000e+02,9.055569171905517578e-01 +6.750000000000000000e+02,9.054487347602844238e-01 +6.760000000000000000e+02,9.053239822387695312e-01 +6.770000000000000000e+02,9.051800966262817383e-01 +6.780000000000000000e+02,9.050007462501525879e-01 +6.790000000000000000e+02,9.048393368721008301e-01 +6.800000000000000000e+02,9.046242237091064453e-01 +6.810000000000000000e+02,9.044163227081298828e-01 +6.820000000000000000e+02,9.041885733604431152e-01 +6.830000000000000000e+02,9.039441347122192383e-01 +6.840000000000000000e+02,9.036642909049987793e-01 +6.850000000000000000e+02,9.033657908439636230e-01 +6.860000000000000000e+02,9.030601382255554199e-01 +6.870000000000000000e+02,9.027354121208190918e-01 +6.880000000000000000e+02,9.024074673652648926e-01 +6.890000000000000000e+02,9.020586013793945312e-01 +6.900000000000000000e+02,9.016705155372619629e-01 +6.910000000000000000e+02,9.012703299522399902e-01 +6.920000000000000000e+02,9.008626937866210938e-01 +6.930000000000000000e+02,9.004557132720947266e-01 +6.940000000000000000e+02,9.000114798545837402e-01 +6.950000000000000000e+02,8.995425105094909668e-01 +6.960000000000000000e+02,8.990748524665832520e-01 +6.970000000000000000e+02,8.985947966575622559e-01 +6.980000000000000000e+02,8.980853557586669922e-01 +6.990000000000000000e+02,8.975805044174194336e-01 +7.000000000000000000e+02,8.970430493354797363e-01 +7.010000000000000000e+02,8.964776992797851562e-01 +7.020000000000000000e+02,8.959413170814514160e-01 +7.030000000000000000e+02,8.953473567962646484e-01 +7.040000000000000000e+02,8.947738409042358398e-01 +7.050000000000000000e+02,8.941725492477416992e-01 +7.060000000000000000e+02,8.935362100601196289e-01 +7.070000000000000000e+02,8.929132819175720215e-01 +7.080000000000000000e+02,8.922625184059143066e-01 +7.090000000000000000e+02,8.915848135948181152e-01 +7.100000000000000000e+02,8.909222483634948730e-01 +7.110000000000000000e+02,8.902550935745239258e-01 +7.120000000000000000e+02,8.895469903945922852e-01 +7.130000000000000000e+02,8.888446688652038574e-01 +7.140000000000000000e+02,8.881244063377380371e-01 +7.150000000000000000e+02,8.874003887176513672e-01 +7.160000000000000000e+02,8.866419196128845215e-01 +7.170000000000000000e+02,8.858745098114013672e-01 +7.180000000000000000e+02,8.850880265235900879e-01 +7.190000000000000000e+02,8.843167424201965332e-01 +7.200000000000000000e+02,8.835462927818298340e-01 +7.210000000000000000e+02,8.827239871025085449e-01 +7.220000000000000000e+02,8.819093704223632812e-01 +7.230000000000000000e+02,8.811043500900268555e-01 +7.240000000000000000e+02,8.802407979965209961e-01 +7.250000000000000000e+02,8.793891668319702148e-01 +7.260000000000000000e+02,8.785467147827148438e-01 +7.270000000000000000e+02,8.776779770851135254e-01 +7.280000000000000000e+02,8.767887949943542480e-01 +7.290000000000000000e+02,8.758959770202636719e-01 +7.300000000000000000e+02,8.750073909759521484e-01 +7.310000000000000000e+02,8.741014599800109863e-01 +7.320000000000000000e+02,8.731665611267089844e-01 +7.330000000000000000e+02,8.722448945045471191e-01 +7.340000000000000000e+02,8.712961673736572266e-01 +7.350000000000000000e+02,8.703664541244506836e-01 +7.360000000000000000e+02,8.694075345993041992e-01 +7.370000000000000000e+02,8.684375286102294922e-01 +7.380000000000000000e+02,8.674572706222534180e-01 +7.390000000000000000e+02,8.664696216583251953e-01 +7.400000000000000000e+02,8.654769659042358398e-01 +7.410000000000000000e+02,8.644796013832092285e-01 +7.420000000000000000e+02,8.634505271911621094e-01 +7.430000000000000000e+02,8.624376654624938965e-01 +7.440000000000000000e+02,8.614263534545898438e-01 +7.450000000000000000e+02,8.603827953338623047e-01 +7.460000000000000000e+02,8.593357205390930176e-01 +7.470000000000000000e+02,8.582807183265686035e-01 +7.480000000000000000e+02,8.572272062301635742e-01 +7.490000000000000000e+02,8.561233878135681152e-01 +7.500000000000000000e+02,8.550319075584411621e-01 +7.510000000000000000e+02,8.539589047431945801e-01 +7.520000000000000000e+02,8.528488874435424805e-01 +7.530000000000000000e+02,8.517766594886779785e-01 +7.540000000000000000e+02,8.506539463996887207e-01 +7.550000000000000000e+02,8.495298027992248535e-01 +7.560000000000000000e+02,8.483756780624389648e-01 +7.570000000000000000e+02,8.472431302070617676e-01 +7.580000000000000000e+02,8.461022973060607910e-01 +7.590000000000000000e+02,8.449327945709228516e-01 +7.600000000000000000e+02,8.437620401382446289e-01 +7.610000000000000000e+02,8.425888419151306152e-01 +7.620000000000000000e+02,8.414080739021301270e-01 +7.630000000000000000e+02,8.402248620986938477e-01 +7.640000000000000000e+02,8.390185236930847168e-01 +7.650000000000000000e+02,8.378350138664245605e-01 +7.660000000000000000e+02,8.366045355796813965e-01 +7.670000000000000000e+02,8.353699445724487305e-01 +7.680000000000000000e+02,8.341742753982543945e-01 +7.690000000000000000e+02,8.328907489776611328e-01 +7.700000000000000000e+02,8.316501975059509277e-01 +7.710000000000000000e+02,8.303874731063842773e-01 +7.720000000000000000e+02,8.291361331939697266e-01 +7.730000000000000000e+02,8.278658390045166016e-01 +7.740000000000000000e+02,8.265716433525085449e-01 +7.750000000000000000e+02,8.252869844436645508e-01 +7.760000000000000000e+02,8.239687681198120117e-01 +7.770000000000000000e+02,8.226776123046875000e-01 +7.780000000000000000e+02,8.213485479354858398e-01 +7.790000000000000000e+02,8.200209140777587891e-01 +7.800000000000000000e+02,8.186816573143005371e-01 +7.810000000000000000e+02,8.173642754554748535e-01 +7.820000000000000000e+02,8.160234093666076660e-01 +7.830000000000000000e+02,8.146570920944213867e-01 +7.840000000000000000e+02,8.132738471031188965e-01 +7.850000000000000000e+02,8.119001984596252441e-01 +7.860000000000000000e+02,8.104771971702575684e-01 +7.870000000000000000e+02,8.091123104095458984e-01 +7.880000000000000000e+02,8.077155947685241699e-01 +7.890000000000000000e+02,8.063070178031921387e-01 +7.900000000000000000e+02,8.048660755157470703e-01 +7.910000000000000000e+02,8.034394979476928711e-01 +7.920000000000000000e+02,8.019839525222778320e-01 +7.930000000000000000e+02,8.005610108375549316e-01 +7.940000000000000000e+02,7.990961670875549316e-01 +7.950000000000000000e+02,7.975837588310241699e-01 +7.960000000000000000e+02,7.961077094078063965e-01 +7.970000000000000000e+02,7.946535944938659668e-01 +7.980000000000000000e+02,7.931638956069946289e-01 +7.990000000000000000e+02,7.916468977928161621e-01 +8.000000000000000000e+02,7.900792956352233887e-01 +8.010000000000000000e+02,7.885960936546325684e-01 +8.020000000000000000e+02,7.870218753814697266e-01 +8.030000000000000000e+02,7.855291366577148438e-01 +8.040000000000000000e+02,7.839227318763732910e-01 +8.050000000000000000e+02,7.823507189750671387e-01 +8.060000000000000000e+02,7.807815670967102051e-01 +8.070000000000000000e+02,7.791888713836669922e-01 +8.080000000000000000e+02,7.775611877441406250e-01 +8.090000000000000000e+02,7.759709358215332031e-01 +8.100000000000000000e+02,7.743681073188781738e-01 \ No newline at end of file diff --git a/quisp/satellite_csvs/S-C1_distance.csv b/quisp/satellite_csvs/S-C1_distance.csv new file mode 100644 index 000000000..858edf193 --- /dev/null +++ b/quisp/satellite_csvs/S-C1_distance.csv @@ -0,0 +1,533 @@ +1.134000000000000000e+03,1.751346910237946082e+06 +1.135000000000000000e+03,1.745880866496909643e+06 +1.136000000000000000e+03,1.740418340514716692e+06 +1.137000000000000000e+03,1.734959365518397419e+06 +1.138000000000000000e+03,1.729503975132754538e+06 +1.139000000000000000e+03,1.724052203385964734e+06 +1.140000000000000000e+03,1.718604084715266712e+06 +1.141000000000000000e+03,1.713159653972740518e+06 +1.142000000000000000e+03,1.707718946431174409e+06 +1.143000000000000000e+03,1.702281997790025314e+06 +1.144000000000000000e+03,1.696848844181472668e+06 +1.145000000000000000e+03,1.691419522176565137e+06 +1.146000000000000000e+03,1.685994068791465135e+06 +1.147000000000000000e+03,1.680572521493791370e+06 +1.148000000000000000e+03,1.675154918209059164e+06 +1.149000000000000000e+03,1.669741297327223700e+06 +1.150000000000000000e+03,1.664331697709323838e+06 +1.151000000000000000e+03,1.658926158694231883e+06 +1.152000000000000000e+03,1.653524720105508342e+06 +1.153000000000000000e+03,1.648127422258364037e+06 +1.154000000000000000e+03,1.642734305966731859e+06 +1.155000000000000000e+03,1.637345412550448906e+06 +1.156000000000000000e+03,1.631960783842552919e+06 +1.157000000000000000e+03,1.626580462196690729e+06 +1.158000000000000000e+03,1.621204490494644502e+06 +1.159000000000000000e+03,1.615832912153976504e+06 +1.160000000000000000e+03,1.610465771135791671e+06 +1.161000000000000000e+03,1.605103111952624749e+06 +1.162000000000000000e+03,1.599744979676448274e+06 +1.163000000000000000e+03,1.594391419946808368e+06 +1.164000000000000000e+03,1.589042478979086271e+06 +1.165000000000000000e+03,1.583698203572890256e+06 +1.166000000000000000e+03,1.578358641120578861e+06 +1.167000000000000000e+03,1.573023839615916368e+06 +1.168000000000000000e+03,1.567693847662865650e+06 +1.169000000000000000e+03,1.562368714484516298e+06 +1.170000000000000000e+03,1.557048489932153607e+06 +1.171000000000000000e+03,1.551733224494468421e+06 +1.172000000000000000e+03,1.546422969306909945e+06 +1.173000000000000000e+03,1.541117776161186164e+06 +1.174000000000000000e+03,1.535817697514910018e+06 +1.175000000000000000e+03,1.530522786501396680e+06 +1.176000000000000000e+03,1.525233096939611947e+06 +1.177000000000000000e+03,1.519948683344276622e+06 +1.178000000000000000e+03,1.514669600936125033e+06 +1.179000000000000000e+03,1.509395905652324203e+06 +1.180000000000000000e+03,1.504127654157053214e+06 +1.181000000000000000e+03,1.498864903852245072e+06 +1.182000000000000000e+03,1.493607712888494600e+06 +1.183000000000000000e+03,1.488356140176133951e+06 +1.184000000000000000e+03,1.483110245396477636e+06 +1.185000000000000000e+03,1.477870089013239369e+06 +1.186000000000000000e+03,1.472635732284124708e+06 +1.187000000000000000e+03,1.467407237272598548e+06 +1.188000000000000000e+03,1.462184666859832825e+06 +1.189000000000000000e+03,1.456968084756835131e+06 +1.190000000000000000e+03,1.451757555516760563e+06 +1.191000000000000000e+03,1.446553144547410076e+06 +1.192000000000000000e+03,1.441354918123915792e+06 +1.193000000000000000e+03,1.436162943401618395e+06 +1.194000000000000000e+03,1.430977288429134991e+06 +1.195000000000000000e+03,1.425798022161624394e+06 +1.196000000000000000e+03,1.420625214474246837e+06 +1.197000000000000000e+03,1.415458936175825540e+06 +1.198000000000000000e+03,1.410299259022708284e+06 +1.199000000000000000e+03,1.405146255732832942e+06 +1.200000000000000000e+03,1.400000000000000000e+06 +1.201000000000000000e+03,1.394860566508351825e+06 +1.202000000000000000e+03,1.389728030947062653e+06 +1.203000000000000000e+03,1.384602470025241608e+06 +1.204000000000000000e+03,1.379483961487048306e+06 +1.205000000000000000e+03,1.374372584127026377e+06 +1.206000000000000000e+03,1.369268417805654462e+06 +1.207000000000000000e+03,1.364171543465117225e+06 +1.208000000000000000e+03,1.359082043145298958e+06 +1.209000000000000000e+03,1.354000000000000000e+06 +1.210000000000000000e+03,1.348925498313379707e+06 +1.211000000000000000e+03,1.343858623516625725e+06 +1.212000000000000000e+03,1.338799462204851676e+06 +1.213000000000000000e+03,1.333748102154226042e+06 +1.214000000000000000e+03,1.328704632339332253e+06 +1.215000000000000000e+03,1.323669142950760201e+06 +1.216000000000000000e+03,1.318641725412934087e+06 +1.217000000000000000e+03,1.313622472402173793e+06 +1.218000000000000000e+03,1.308611477864992572e+06 +1.219000000000000000e+03,1.303608837036632001e+06 +1.220000000000000000e+03,1.298614646459834184e+06 +1.221000000000000000e+03,1.293629004003852606e+06 +1.222000000000000000e+03,1.288652008883701637e+06 +1.223000000000000000e+03,1.283683761679643532e+06 +1.224000000000000000e+03,1.278724364356916398e+06 +1.225000000000000000e+03,1.273773920285699656e+06 +1.226000000000000000e+03,1.268832534261318622e+06 +1.227000000000000000e+03,1.263900312524686335e+06 +1.228000000000000000e+03,1.258977362782984972e+06 +1.229000000000000000e+03,1.254063794230580563e+06 +1.230000000000000000e+03,1.249159717570175184e+06 +1.231000000000000000e+03,1.244265245034192922e+06 +1.232000000000000000e+03,1.239380490406396566e+06 +1.233000000000000000e+03,1.234505569043736672e+06 +1.234000000000000000e+03,1.229640597898426466e+06 +1.235000000000000000e+03,1.224785695540244225e+06 +1.236000000000000000e+03,1.219940982179056155e+06 +1.237000000000000000e+03,1.215106579687559744e+06 +1.238000000000000000e+03,1.210282611624243669e+06 +1.239000000000000000e+03,1.205469203256557696e+06 +1.240000000000000000e+03,1.200666481584290741e+06 +1.241000000000000000e+03,1.195874575363152428e+06 +1.242000000000000000e+03,1.191093615128550678e+06 +1.243000000000000000e+03,1.186323733219562564e+06 +1.244000000000000000e+03,1.181565063803090015e+06 +1.245000000000000000e+03,1.176817742898194119e+06 +1.246000000000000000e+03,1.172081908400603104e+06 +1.247000000000000000e+03,1.167357700107383542e+06 +1.248000000000000000e+03,1.162645259741766611e+06 +1.249000000000000000e+03,1.157944730978124077e+06 +1.250000000000000000e+03,1.153256259467079537e+06 +1.251000000000000000e+03,1.148579992860749830e+06 +1.252000000000000000e+03,1.143916080838100752e+06 +1.253000000000000000e+03,1.139264675130410586e+06 +1.254000000000000000e+03,1.134625929546826519e+06 +1.255000000000000000e+03,1.130000000000000000e+06 +1.256000000000000000e+03,1.125387044531791238e+06 +1.257000000000000000e+03,1.120787223339024233e+06 +1.258000000000000000e+03,1.116200698799279518e+06 +1.259000000000000000e+03,1.111627635496707167e+06 +1.260000000000000000e+03,1.107068200247843750e+06 +1.261000000000000000e+03,1.102522562127415091e+06 +1.262000000000000000e+03,1.097990892494104337e+06 +1.263000000000000000e+03,1.093473365016267868e+06 +1.264000000000000000e+03,1.088970155697574606e+06 +1.265000000000000000e+03,1.084481442902551498e+06 +1.266000000000000000e+03,1.080007407382004894e+06 +1.267000000000000000e+03,1.075548232298301067e+06 +1.268000000000000000e+03,1.071104103250473039e+06 +1.269000000000000000e+03,1.066675208299133461e+06 +1.270000000000000000e+03,1.062261737991160015e+06 +1.271000000000000000e+03,1.057863885384126334e+06 +1.272000000000000000e+03,1.053481846070448402e+06 +1.273000000000000000e+03,1.049115818201212678e+06 +1.274000000000000000e+03,1.044766002509652870e+06 +1.275000000000000000e+03,1.040432602334240568e+06 +1.276000000000000000e+03,1.036115823641353287e+06 +1.277000000000000000e+03,1.031815875047481502e+06 +1.278000000000000000e+03,1.027532967840934987e+06 +1.279000000000000000e+03,1.023267316003008047e+06 +1.280000000000000000e+03,1.019019136228559772e+06 +1.281000000000000000e+03,1.014788647945965175e+06 +1.282000000000000000e+03,1.010576073336391593e+06 +1.283000000000000000e+03,1.006381637352351565e+06 +1.284000000000000000e+03,1.002205567735482124e+06 +1.285000000000000000e+03,9.980480950335009256e+05 +1.286000000000000000e+03,9.939094526162833208e+05 +1.287000000000000000e+03,9.897898766910076374e+05 +1.288000000000000000e+03,9.856896063163088402e+05 +1.289000000000000000e+03,9.816088834153856151e+05 +1.290000000000000000e+03,9.775479527879949892e+05 +1.291000000000000000e+03,9.735070621212770930e+05 +1.292000000000000000e+03,9.694864619993411470e+05 +1.293000000000000000e+03,9.654864059115487617e+05 +1.294000000000000000e+03,9.615071502594246995e+05 +1.295000000000000000e+03,9.575489543621256016e+05 +1.296000000000000000e+03,9.536120804603934521e+05 +1.297000000000000000e+03,9.496967937189216027e+05 +1.298000000000000000e+03,9.458033622270540800e+05 +1.299000000000000000e+03,9.419320569977433188e+05 +1.300000000000000000e+03,9.380831519646858796e+05 +1.301000000000000000e+03,9.342569239775533788e+05 +1.302000000000000000e+03,9.304536527952372562e+05 +1.303000000000000000e+03,9.266736210770219332e+05 +1.304000000000000000e+03,9.229171143715995131e+05 +1.305000000000000000e+03,9.191844211038391804e+05 +1.306000000000000000e+03,9.154758325592216570e+05 +1.307000000000000000e+03,9.117916428658468649e+05 +1.308000000000000000e+03,9.081321489739255048e+05 +1.309000000000000000e+03,9.044976506326592062e+05 +1.310000000000000000e+03,9.008884503644166980e+05 +1.311000000000000000e+03,8.973048534361106576e+05 +1.312000000000000000e+03,8.937471678276804741e+05 +1.313000000000000000e+03,8.902157041975838365e+05 +1.314000000000000000e+03,8.867107758452019189e+05 +1.315000000000000000e+03,8.832326986700616544e+05 +1.316000000000000000e+03,8.797817911277773092e+05 +1.317000000000000000e+03,8.763583741826171754e+05 +1.318000000000000000e+03,8.729627712565982947e+05 +1.319000000000000000e+03,8.695953081750153797e+05 +1.320000000000000000e+03,8.662563131083085900e+05 +1.321000000000000000e+03,8.629461165101793595e+05 +1.322000000000000000e+03,8.596650510518617230e+05 +1.323000000000000000e+03,8.564134515524613671e+05 +1.324000000000000000e+03,8.531916549052739283e+05 +1.325000000000000000e+03,8.500000000000000000e+05 +1.326000000000000000e+03,8.468388276407737285e+05 +1.327000000000000000e+03,8.437084804599275813e+05 +1.328000000000000000e+03,8.406093028274193639e+05 +1.329000000000000000e+03,8.375416407558491919e+05 +1.330000000000000000e+03,8.345058418010026217e+05 +1.331000000000000000e+03,8.315022549578563776e+05 +1.332000000000000000e+03,8.285312305519931251e+05 +1.333000000000000000e+03,8.255931201263731346e+05 +1.334000000000000000e+03,8.226882763234201120e+05 +1.335000000000000000e+03,8.198170527623831294e+05 +1.336000000000000000e+03,8.169798039119449677e+05 +1.337000000000000000e+03,8.141768849580538226e+05 +1.338000000000000000e+03,8.114086516669637058e+05 +1.339000000000000000e+03,8.086754602434773697e+05 +1.340000000000000000e+03,8.059776671843953663e+05 +1.341000000000000000e+03,8.033156291271818336e+05 +1.342000000000000000e+03,8.006897026938713389e+05 +1.343000000000000000e+03,7.981002443302470492e+05 +1.344000000000000000e+03,7.955476101403359789e+05 +1.345000000000000000e+03,7.930321557162735844e+05 +1.346000000000000000e+03,7.905542359636054607e+05 +1.347000000000000000e+03,7.881142049221039051e+05 +1.348000000000000000e+03,7.857124155821899185e+05 +1.349000000000000000e+03,7.833492196970646037e+05 +1.350000000000000000e+03,7.810249675906654447e+05 +1.351000000000000000e+03,7.787400079615789000e+05 +1.352000000000000000e+03,7.764946876830516849e+05 +1.353000000000000000e+03,7.742893515992583707e+05 +1.354000000000000000e+03,7.721243423179973615e+05 +1.355000000000000000e+03,7.700000000000000000e+05 +1.356000000000000000e+03,7.679166621450533858e+05 +1.357000000000000000e+03,7.658746633751504123e+05 +1.358000000000000000e+03,7.638743352148964768e+05 +1.359000000000000000e+03,7.619160058694133768e+05 +1.360000000000000000e+03,7.600000000000000000e+05 +1.361000000000000000e+03,7.581266384978172136e+05 +1.362000000000000000e+03,7.562962382558834506e+05 +1.363000000000000000e+03,7.545091119396769209e+05 +1.364000000000000000e+03,7.527655677566555096e+05 +1.365000000000000000e+03,7.510659092250160174e+05 +1.366000000000000000e+03,7.494104349420282524e+05 +1.367000000000000000e+03,7.477994383522897260e+05 +1.368000000000000000e+03,7.462332075162562542e+05 +1.369000000000000000e+03,7.447120248794161016e+05 +1.370000000000000000e+03,7.432361670424818294e+05 +1.371000000000000000e+03,7.418059045329849469e+05 +1.372000000000000000e+03,7.404215015786616132e+05 +1.373000000000000000e+03,7.390832158830289263e+05 +1.374000000000000000e+03,7.377912984035526169e+05 +1.375000000000000000e+03,7.365459931328117382e+05 +1.376000000000000000e+03,7.353475368830714142e+05 +1.377000000000000000e+03,7.341961590746712172e+05 +1.378000000000000000e+03,7.330920815286439611e+05 +1.379000000000000000e+03,7.320355182639706181e+05 +1.380000000000000000e+03,7.310266752998826560e+05 +1.381000000000000000e+03,7.300657504636140075e+05 +1.382000000000000000e+03,7.291529332040020963e+05 +1.383000000000000000e+03,7.282884044113293057e+05 +1.384000000000000000e+03,7.274723362437915057e+05 +1.385000000000000000e+03,7.267048919609665172e+05 +1.386000000000000000e+03,7.259862257646491053e+05 +1.387000000000000000e+03,7.253164826474026777e+05 +1.388000000000000000e+03,7.246957982491687872e+05 +1.389000000000000000e+03,7.241242987222566735e+05 +1.390000000000000000e+03,7.236021006050216965e+05 +1.391000000000000000e+03,7.231293107045240467e+05 +1.392000000000000000e+03,7.227060259884374682e+05 +1.393000000000000000e+03,7.223323334864638746e+05 +1.394000000000000000e+03,7.220083102014823817e+05 +1.395000000000000000e+03,7.217340230306452140e+05 +1.396000000000000000e+03,7.215095286966069834e+05 +1.397000000000000000e+03,7.213348736890516011e+05 +1.398000000000000000e+03,7.212100942166574532e+05 +1.399000000000000000e+03,7.211352161696167896e+05 +1.400000000000000000e+03,7.211102550927978009e+05 +1.401000000000000000e+03,7.211352161696167896e+05 +1.402000000000000000e+03,7.212100942166574532e+05 +1.403000000000000000e+03,7.213348736890516011e+05 +1.404000000000000000e+03,7.215095286966069834e+05 +1.405000000000000000e+03,7.217340230306452140e+05 +1.406000000000000000e+03,7.220083102014823817e+05 +1.407000000000000000e+03,7.223323334864638746e+05 +1.408000000000000000e+03,7.227060259884374682e+05 +1.409000000000000000e+03,7.231293107045240467e+05 +1.410000000000000000e+03,7.236021006050216965e+05 +1.411000000000000000e+03,7.241242987222566735e+05 +1.412000000000000000e+03,7.246957982491687872e+05 +1.413000000000000000e+03,7.253164826474026777e+05 +1.414000000000000000e+03,7.259862257646491053e+05 +1.415000000000000000e+03,7.267048919609665172e+05 +1.416000000000000000e+03,7.274723362437915057e+05 +1.417000000000000000e+03,7.282884044113293057e+05 +1.418000000000000000e+03,7.291529332040020963e+05 +1.419000000000000000e+03,7.300657504636140075e+05 +1.420000000000000000e+03,7.310266752998826560e+05 +1.421000000000000000e+03,7.320355182639706181e+05 +1.422000000000000000e+03,7.330920815286439611e+05 +1.423000000000000000e+03,7.341961590746712172e+05 +1.424000000000000000e+03,7.353475368830714142e+05 +1.425000000000000000e+03,7.365459931328117382e+05 +1.426000000000000000e+03,7.377912984035526169e+05 +1.427000000000000000e+03,7.390832158830289263e+05 +1.428000000000000000e+03,7.404215015786616132e+05 +1.429000000000000000e+03,7.418059045329849469e+05 +1.430000000000000000e+03,7.432361670424818294e+05 +1.431000000000000000e+03,7.447120248794161016e+05 +1.432000000000000000e+03,7.462332075162562542e+05 +1.433000000000000000e+03,7.477994383522897260e+05 +1.434000000000000000e+03,7.494104349420282524e+05 +1.435000000000000000e+03,7.510659092250160174e+05 +1.436000000000000000e+03,7.527655677566555096e+05 +1.437000000000000000e+03,7.545091119396769209e+05 +1.438000000000000000e+03,7.562962382558834506e+05 +1.439000000000000000e+03,7.581266384978172136e+05 +1.440000000000000000e+03,7.600000000000000000e+05 +1.441000000000000000e+03,7.619160058694133768e+05 +1.442000000000000000e+03,7.638743352148964768e+05 +1.443000000000000000e+03,7.658746633751504123e+05 +1.444000000000000000e+03,7.679166621450533858e+05 +1.445000000000000000e+03,7.700000000000000000e+05 +1.446000000000000000e+03,7.721243423179973615e+05 +1.447000000000000000e+03,7.742893515992583707e+05 +1.448000000000000000e+03,7.764946876830516849e+05 +1.449000000000000000e+03,7.787400079615789000e+05 +1.450000000000000000e+03,7.810249675906654447e+05 +1.451000000000000000e+03,7.833492196970646037e+05 +1.452000000000000000e+03,7.857124155821899185e+05 +1.453000000000000000e+03,7.881142049221039051e+05 +1.454000000000000000e+03,7.905542359636054607e+05 +1.455000000000000000e+03,7.930321557162735844e+05 +1.456000000000000000e+03,7.955476101403359789e+05 +1.457000000000000000e+03,7.981002443302470492e+05 +1.458000000000000000e+03,8.006897026938713389e+05 +1.459000000000000000e+03,8.033156291271818336e+05 +1.460000000000000000e+03,8.059776671843953663e+05 +1.461000000000000000e+03,8.086754602434773697e+05 +1.462000000000000000e+03,8.114086516669637058e+05 +1.463000000000000000e+03,8.141768849580538226e+05 +1.464000000000000000e+03,8.169798039119449677e+05 +1.465000000000000000e+03,8.198170527623831294e+05 +1.466000000000000000e+03,8.226882763234201120e+05 +1.467000000000000000e+03,8.255931201263731346e+05 +1.468000000000000000e+03,8.285312305519931251e+05 +1.469000000000000000e+03,8.315022549578563776e+05 +1.470000000000000000e+03,8.345058418010026217e+05 +1.471000000000000000e+03,8.375416407558491919e+05 +1.472000000000000000e+03,8.406093028274193639e+05 +1.473000000000000000e+03,8.437084804599275813e+05 +1.474000000000000000e+03,8.468388276407737285e+05 +1.475000000000000000e+03,8.500000000000000000e+05 +1.476000000000000000e+03,8.531916549052739283e+05 +1.477000000000000000e+03,8.564134515524613671e+05 +1.478000000000000000e+03,8.596650510518617230e+05 +1.479000000000000000e+03,8.629461165101793595e+05 +1.480000000000000000e+03,8.662563131083085900e+05 +1.481000000000000000e+03,8.695953081750153797e+05 +1.482000000000000000e+03,8.729627712565982947e+05 +1.483000000000000000e+03,8.763583741826171754e+05 +1.484000000000000000e+03,8.797817911277773092e+05 +1.485000000000000000e+03,8.832326986700616544e+05 +1.486000000000000000e+03,8.867107758452019189e+05 +1.487000000000000000e+03,8.902157041975838365e+05 +1.488000000000000000e+03,8.937471678276804741e+05 +1.489000000000000000e+03,8.973048534361106576e+05 +1.490000000000000000e+03,9.008884503644166980e+05 +1.491000000000000000e+03,9.044976506326592062e+05 +1.492000000000000000e+03,9.081321489739255048e+05 +1.493000000000000000e+03,9.117916428658468649e+05 +1.494000000000000000e+03,9.154758325592216570e+05 +1.495000000000000000e+03,9.191844211038391804e+05 +1.496000000000000000e+03,9.229171143715995131e+05 +1.497000000000000000e+03,9.266736210770219332e+05 +1.498000000000000000e+03,9.304536527952372562e+05 +1.499000000000000000e+03,9.342569239775533788e+05 +1.500000000000000000e+03,9.380831519646858796e+05 +1.501000000000000000e+03,9.419320569977433188e+05 +1.502000000000000000e+03,9.458033622270540800e+05 +1.503000000000000000e+03,9.496967937189216027e+05 +1.504000000000000000e+03,9.536120804603934521e+05 +1.505000000000000000e+03,9.575489543621256016e+05 +1.506000000000000000e+03,9.615071502594246995e+05 +1.507000000000000000e+03,9.654864059115487617e+05 +1.508000000000000000e+03,9.694864619993411470e+05 +1.509000000000000000e+03,9.735070621212770930e+05 +1.510000000000000000e+03,9.775479527879949892e+05 +1.511000000000000000e+03,9.816088834153856151e+05 +1.512000000000000000e+03,9.856896063163088402e+05 +1.513000000000000000e+03,9.897898766910076374e+05 +1.514000000000000000e+03,9.939094526162833208e+05 +1.515000000000000000e+03,9.980480950335009256e+05 +1.516000000000000000e+03,1.002205567735482124e+06 +1.517000000000000000e+03,1.006381637352351565e+06 +1.518000000000000000e+03,1.010576073336391593e+06 +1.519000000000000000e+03,1.014788647945965175e+06 +1.520000000000000000e+03,1.019019136228559772e+06 +1.521000000000000000e+03,1.023267316003008047e+06 +1.522000000000000000e+03,1.027532967840934987e+06 +1.523000000000000000e+03,1.031815875047481502e+06 +1.524000000000000000e+03,1.036115823641353287e+06 +1.525000000000000000e+03,1.040432602334240568e+06 +1.526000000000000000e+03,1.044766002509652870e+06 +1.527000000000000000e+03,1.049115818201212678e+06 +1.528000000000000000e+03,1.053481846070448402e+06 +1.529000000000000000e+03,1.057863885384126334e+06 +1.530000000000000000e+03,1.062261737991160015e+06 +1.531000000000000000e+03,1.066675208299133461e+06 +1.532000000000000000e+03,1.071104103250473039e+06 +1.533000000000000000e+03,1.075548232298301067e+06 +1.534000000000000000e+03,1.080007407382004894e+06 +1.535000000000000000e+03,1.084481442902551498e+06 +1.536000000000000000e+03,1.088970155697574606e+06 +1.537000000000000000e+03,1.093473365016267868e+06 +1.538000000000000000e+03,1.097990892494104337e+06 +1.539000000000000000e+03,1.102522562127415091e+06 +1.540000000000000000e+03,1.107068200247843750e+06 +1.541000000000000000e+03,1.111627635496707167e+06 +1.542000000000000000e+03,1.116200698799279518e+06 +1.543000000000000000e+03,1.120787223339024233e+06 +1.544000000000000000e+03,1.125387044531791238e+06 +1.545000000000000000e+03,1.130000000000000000e+06 +1.546000000000000000e+03,1.134625929546826519e+06 +1.547000000000000000e+03,1.139264675130410586e+06 +1.548000000000000000e+03,1.143916080838100752e+06 +1.549000000000000000e+03,1.148579992860749830e+06 +1.550000000000000000e+03,1.153256259467079537e+06 +1.551000000000000000e+03,1.157944730978124077e+06 +1.552000000000000000e+03,1.162645259741766611e+06 +1.553000000000000000e+03,1.167357700107383542e+06 +1.554000000000000000e+03,1.172081908400603104e+06 +1.555000000000000000e+03,1.176817742898194119e+06 +1.556000000000000000e+03,1.181565063803090015e+06 +1.557000000000000000e+03,1.186323733219562564e+06 +1.558000000000000000e+03,1.191093615128550678e+06 +1.559000000000000000e+03,1.195874575363152428e+06 +1.560000000000000000e+03,1.200666481584290741e+06 +1.561000000000000000e+03,1.205469203256557696e+06 +1.562000000000000000e+03,1.210282611624243669e+06 +1.563000000000000000e+03,1.215106579687559744e+06 +1.564000000000000000e+03,1.219940982179056155e+06 +1.565000000000000000e+03,1.224785695540244225e+06 +1.566000000000000000e+03,1.229640597898426466e+06 +1.567000000000000000e+03,1.234505569043736672e+06 +1.568000000000000000e+03,1.239380490406396566e+06 +1.569000000000000000e+03,1.244265245034192922e+06 +1.570000000000000000e+03,1.249159717570175184e+06 +1.571000000000000000e+03,1.254063794230580563e+06 +1.572000000000000000e+03,1.258977362782984972e+06 +1.573000000000000000e+03,1.263900312524686335e+06 +1.574000000000000000e+03,1.268832534261318622e+06 +1.575000000000000000e+03,1.273773920285699656e+06 +1.576000000000000000e+03,1.278724364356916398e+06 +1.577000000000000000e+03,1.283683761679643532e+06 +1.578000000000000000e+03,1.288652008883701637e+06 +1.579000000000000000e+03,1.293629004003852606e+06 +1.580000000000000000e+03,1.298614646459834184e+06 +1.581000000000000000e+03,1.303608837036632001e+06 +1.582000000000000000e+03,1.308611477864992572e+06 +1.583000000000000000e+03,1.313622472402173793e+06 +1.584000000000000000e+03,1.318641725412934087e+06 +1.585000000000000000e+03,1.323669142950760201e+06 +1.586000000000000000e+03,1.328704632339332253e+06 +1.587000000000000000e+03,1.333748102154226042e+06 +1.588000000000000000e+03,1.338799462204851676e+06 +1.589000000000000000e+03,1.343858623516625725e+06 +1.590000000000000000e+03,1.348925498313379707e+06 +1.591000000000000000e+03,1.354000000000000000e+06 +1.592000000000000000e+03,1.359082043145298958e+06 +1.593000000000000000e+03,1.364171543465117225e+06 +1.594000000000000000e+03,1.369268417805654462e+06 +1.595000000000000000e+03,1.374372584127026377e+06 +1.596000000000000000e+03,1.379483961487048306e+06 +1.597000000000000000e+03,1.384602470025241608e+06 +1.598000000000000000e+03,1.389728030947062653e+06 +1.599000000000000000e+03,1.394860566508351825e+06 +1.600000000000000000e+03,1.400000000000000000e+06 +1.601000000000000000e+03,1.405146255732832942e+06 +1.602000000000000000e+03,1.410299259022708284e+06 +1.603000000000000000e+03,1.415458936175825540e+06 +1.604000000000000000e+03,1.420625214474246837e+06 +1.605000000000000000e+03,1.425798022161624394e+06 +1.606000000000000000e+03,1.430977288429134991e+06 +1.607000000000000000e+03,1.436162943401618395e+06 +1.608000000000000000e+03,1.441354918123915792e+06 +1.609000000000000000e+03,1.446553144547410076e+06 +1.610000000000000000e+03,1.451757555516760563e+06 +1.611000000000000000e+03,1.456968084756835131e+06 +1.612000000000000000e+03,1.462184666859832825e+06 +1.613000000000000000e+03,1.467407237272598548e+06 +1.614000000000000000e+03,1.472635732284124708e+06 +1.615000000000000000e+03,1.477870089013239369e+06 +1.616000000000000000e+03,1.483110245396477636e+06 +1.617000000000000000e+03,1.488356140176133951e+06 +1.618000000000000000e+03,1.493607712888494600e+06 +1.619000000000000000e+03,1.498864903852245072e+06 +1.620000000000000000e+03,1.504127654157053214e+06 +1.621000000000000000e+03,1.509395905652324203e+06 +1.622000000000000000e+03,1.514669600936125033e+06 +1.623000000000000000e+03,1.519948683344276622e+06 +1.624000000000000000e+03,1.525233096939611947e+06 +1.625000000000000000e+03,1.530522786501396680e+06 +1.626000000000000000e+03,1.535817697514910018e+06 +1.627000000000000000e+03,1.541117776161186164e+06 +1.628000000000000000e+03,1.546422969306909945e+06 +1.629000000000000000e+03,1.551733224494468421e+06 +1.630000000000000000e+03,1.557048489932153607e+06 +1.631000000000000000e+03,1.562368714484516298e+06 +1.632000000000000000e+03,1.567693847662865650e+06 +1.633000000000000000e+03,1.573023839615916368e+06 +1.634000000000000000e+03,1.578358641120578861e+06 +1.635000000000000000e+03,1.583698203572890256e+06 +1.636000000000000000e+03,1.589042478979086271e+06 +1.637000000000000000e+03,1.594391419946808368e+06 +1.638000000000000000e+03,1.599744979676448274e+06 +1.639000000000000000e+03,1.605103111952624749e+06 +1.640000000000000000e+03,1.610465771135791671e+06 +1.641000000000000000e+03,1.615832912153976504e+06 +1.642000000000000000e+03,1.621204490494644502e+06 +1.643000000000000000e+03,1.626580462196690729e+06 +1.644000000000000000e+03,1.631960783842552919e+06 +1.645000000000000000e+03,1.637345412550448906e+06 +1.646000000000000000e+03,1.642734305966731859e+06 +1.647000000000000000e+03,1.648127422258364037e+06 +1.648000000000000000e+03,1.653524720105508342e+06 +1.649000000000000000e+03,1.658926158694231883e+06 +1.650000000000000000e+03,1.664331697709323838e+06 +1.651000000000000000e+03,1.669741297327223700e+06 +1.652000000000000000e+03,1.675154918209059164e+06 +1.653000000000000000e+03,1.680572521493791370e+06 +1.654000000000000000e+03,1.685994068791465135e+06 +1.655000000000000000e+03,1.691419522176565137e+06 +1.656000000000000000e+03,1.696848844181472668e+06 +1.657000000000000000e+03,1.702281997790025314e+06 +1.658000000000000000e+03,1.707718946431174409e+06 +1.659000000000000000e+03,1.713159653972740518e+06 +1.660000000000000000e+03,1.718604084715266712e+06 +1.661000000000000000e+03,1.724052203385964734e+06 +1.662000000000000000e+03,1.729503975132754538e+06 +1.663000000000000000e+03,1.734959365518397419e+06 +1.664000000000000000e+03,1.740418340514716692e+06 +1.665000000000000000e+03,1.745880866496909643e+06 +1.666000000000000000e+03,1.751346910237946082e+06 diff --git a/quisp/satellite_csvs/S-C1_tatm_1550.csv b/quisp/satellite_csvs/S-C1_tatm_1550.csv new file mode 100644 index 000000000..a79c93fa9 --- /dev/null +++ b/quisp/satellite_csvs/S-C1_tatm_1550.csv @@ -0,0 +1,533 @@ +1.134000000000000000e+03,7.642642398930450387e-01 +1.135000000000000000e+03,7.649057792225300023e-01 +1.136000000000000000e+03,7.655474436808753502e-01 +1.137000000000000000e+03,7.661892287717894101e-01 +1.138000000000000000e+03,7.668311299383661073e-01 +1.139000000000000000e+03,7.674731425622234315e-01 +1.140000000000000000e+03,7.681152619626292477e-01 +1.141000000000000000e+03,7.687574833956126730e-01 +1.142000000000000000e+03,7.693998020530617987e-01 +1.143000000000000000e+03,7.700422130618074235e-01 +1.144000000000000000e+03,7.706847114826919087e-01 +1.145000000000000000e+03,7.713272923096247125e-01 +1.146000000000000000e+03,7.719699504686212688e-01 +1.147000000000000000e+03,7.726126808168284343e-01 +1.148000000000000000e+03,7.732554781415339473e-01 +1.149000000000000000e+03,7.738983371591601212e-01 +1.150000000000000000e+03,7.745412525142423288e-01 +1.151000000000000000e+03,7.751842187783910543e-01 +1.152000000000000000e+03,7.758272304492378479e-01 +1.153000000000000000e+03,7.764702819493642938e-01 +1.154000000000000000e+03,7.771133676252149902e-01 +1.155000000000000000e+03,7.777564817459929891e-01 +1.156000000000000000e+03,7.783996185025371384e-01 +1.157000000000000000e+03,7.790427720061835482e-01 +1.158000000000000000e+03,7.796859362876075172e-01 +1.159000000000000000e+03,7.803291052956479179e-01 +1.160000000000000000e+03,7.809722728961135951e-01 +1.161000000000000000e+03,7.816154328705701149e-01 +1.162000000000000000e+03,7.822585789151080826e-01 +1.163000000000000000e+03,7.829017046390921442e-01 +1.164000000000000000e+03,7.835448035638897801e-01 +1.165000000000000000e+03,7.841878691215812269e-01 +1.166000000000000000e+03,7.848308946536477482e-01 +1.167000000000000000e+03,7.854738734096413655e-01 +1.168000000000000000e+03,7.861167985458309415e-01 +1.169000000000000000e+03,7.867596631238304994e-01 +1.170000000000000000e+03,7.874024601092027842e-01 +1.171000000000000000e+03,7.880451823700437286e-01 +1.172000000000000000e+03,7.886878226755429377e-01 +1.173000000000000000e+03,7.893303736945227467e-01 +1.174000000000000000e+03,7.899728279939541853e-01 +1.175000000000000000e+03,7.906151780374499616e-01 +1.176000000000000000e+03,7.912574161837339082e-01 +1.177000000000000000e+03,7.918995346850866701e-01 +1.178000000000000000e+03,7.925415256857674118e-01 +1.179000000000000000e+03,7.931833812204113210e-01 +1.180000000000000000e+03,7.938250932124013559e-01 +1.181000000000000000e+03,7.944666534722163442e-01 +1.182000000000000000e+03,7.951080536957523259e-01 +1.183000000000000000e+03,7.957492854626189160e-01 +1.184000000000000000e+03,7.963903402344089111e-01 +1.185000000000000000e+03,7.970312093529419162e-01 +1.186000000000000000e+03,7.976718840384807718e-01 +1.187000000000000000e+03,7.983123553879208911e-01 +1.188000000000000000e+03,7.989526143729517305e-01 +1.189000000000000000e+03,7.995926518381910597e-01 +1.190000000000000000e+03,8.002324584992900336e-01 +1.191000000000000000e+03,8.008720249410105074e-01 +1.192000000000000000e+03,8.015113416152725989e-01 +1.193000000000000000e+03,8.021503988391737172e-01 +1.194000000000000000e+03,8.027891867929769498e-01 +1.195000000000000000e+03,8.034276955180704727e-01 +1.196000000000000000e+03,8.040659149148956519e-01 +1.197000000000000000e+03,8.047038347408451697e-01 +1.198000000000000000e+03,8.053414446081292866e-01 +1.199000000000000000e+03,8.059787339816119056e-01 +1.200000000000000000e+03,8.066156921766133303e-01 +1.201000000000000000e+03,8.072523083566824909e-01 +1.202000000000000000e+03,8.078885715313351978e-01 +1.203000000000000000e+03,8.085244705537616428e-01 +1.204000000000000000e+03,8.091599941184988154e-01 +1.205000000000000000e+03,8.097951307590710579e-01 +1.206000000000000000e+03,8.104298688455962019e-01 +1.207000000000000000e+03,8.110641965823583988e-01 +1.208000000000000000e+03,8.116981020053455342e-01 +1.209000000000000000e+03,8.123315729797537799e-01 +1.210000000000000000e+03,8.129645971974562846e-01 +1.211000000000000000e+03,8.135971621744367832e-01 +1.212000000000000000e+03,8.142292552481888990e-01 +1.213000000000000000e+03,8.148608635750784757e-01 +1.214000000000000000e+03,8.154919741276720480e-01 +1.215000000000000000e+03,8.161225736920273421e-01 +1.216000000000000000e+03,8.167526488649496930e-01 +1.217000000000000000e+03,8.173821860512104909e-01 +1.218000000000000000e+03,8.180111714607299911e-01 +1.219000000000000000e+03,8.186395911057241515e-01 +1.220000000000000000e+03,8.192674307978131676e-01 +1.221000000000000000e+03,8.198946761450951470e-01 +1.222000000000000000e+03,8.205213125491811477e-01 +1.223000000000000000e+03,8.211473252021950220e-01 +1.224000000000000000e+03,8.217726990837348477e-01 +1.225000000000000000e+03,8.223974189577986094e-01 +1.226000000000000000e+03,8.230214693696726869e-01 +1.227000000000000000e+03,8.236448346427829303e-01 +1.228000000000000000e+03,8.242674988755103183e-01 +1.229000000000000000e+03,8.248894459379686461e-01 +1.230000000000000000e+03,8.255106594687471322e-01 +1.231000000000000000e+03,8.261311228716161636e-01 +1.232000000000000000e+03,8.267508193121970717e-01 +1.233000000000000000e+03,8.273697317145969343e-01 +1.234000000000000000e+03,8.279878427580072975e-01 +1.235000000000000000e+03,8.286051348732683675e-01 +1.236000000000000000e+03,8.292215902393993421e-01 +1.237000000000000000e+03,8.298371907800936587e-01 +1.238000000000000000e+03,8.304519181601818234e-01 +1.239000000000000000e+03,8.310657537820606011e-01 +1.240000000000000000e+03,8.316786787820908966e-01 +1.241000000000000000e+03,8.322906740269635506e-01 +1.242000000000000000e+03,8.329017201100348267e-01 +1.243000000000000000e+03,8.335117973476319220e-01 +1.244000000000000000e+03,8.341208857753298345e-01 +1.245000000000000000e+03,8.347289651442001412e-01 +1.246000000000000000e+03,8.353360149170333537e-01 +1.247000000000000000e+03,8.359420142645354046e-01 +1.248000000000000000e+03,8.365469420615000429e-01 +1.249000000000000000e+03,8.371507768829576923e-01 +1.250000000000000000e+03,8.377534970003038817e-01 +1.251000000000000000e+03,8.383550803774063587e-01 +1.252000000000000000e+03,8.389555046666948845e-01 +1.253000000000000000e+03,8.395547472052338200e-01 +1.254000000000000000e+03,8.401527850107800566e-01 +1.255000000000000000e+03,8.407495947778284018e-01 +1.256000000000000000e+03,8.413451528736459739e-01 +1.257000000000000000e+03,8.419394353342986026e-01 +1.258000000000000000e+03,8.425324178606702352e-01 +1.259000000000000000e+03,8.431240758144795677e-01 +1.260000000000000000e+03,8.437143842142952321e-01 +1.261000000000000000e+03,8.443033177315530935e-01 +1.262000000000000000e+03,8.448908506865769885e-01 +1.263000000000000000e+03,8.454769570446092342e-01 +1.264000000000000000e+03,8.460616104118503511e-01 +1.265000000000000000e+03,8.466447840315135531e-01 +1.266000000000000000e+03,8.472264507798976663e-01 +1.267000000000000000e+03,8.478065831624812532e-01 +1.268000000000000000e+03,8.483851533100424946e-01 +1.269000000000000000e+03,8.489621329748083811e-01 +1.270000000000000000e+03,8.495374935266384320e-01 +1.271000000000000000e+03,8.501112059492466067e-01 +1.272000000000000000e+03,8.506832408364665143e-01 +1.273000000000000000e+03,8.512535683885648075e-01 +1.274000000000000000e+03,8.518221584086075326e-01 +1.275000000000000000e+03,8.523889802988858788e-01 +1.276000000000000000e+03,8.529540030574053189e-01 +1.277000000000000000e+03,8.535171952744450286e-01 +1.278000000000000000e+03,8.540785251291941327e-01 +1.279000000000000000e+03,8.546379603864694419e-01 +1.280000000000000000e+03,8.551954683935228951e-01 +1.281000000000000000e+03,8.557510160769444818e-01 +1.282000000000000000e+03,8.563045699396679700e-01 +1.283000000000000000e+03,8.568560960580875463e-01 +1.284000000000000000e+03,8.574055600792918064e-01 +1.285000000000000000e+03,8.579529272184232003e-01 +1.286000000000000000e+03,8.584981622561727033e-01 +1.287000000000000000e+03,8.590412295364153739e-01 +1.288000000000000000e+03,8.595820929639981234e-01 +1.289000000000000000e+03,8.601207160026872467e-01 +1.290000000000000000e+03,8.606570616732854839e-01 +1.291000000000000000e+03,8.611910925519283833e-01 +1.292000000000000000e+03,8.617227707685696236e-01 +1.293000000000000000e+03,8.622520580056649564e-01 +1.294000000000000000e+03,8.627789154970673113e-01 +1.295000000000000000e+03,8.633033040271407277e-01 +1.296000000000000000e+03,8.638251839301072099e-01 +1.297000000000000000e+03,8.643445150896355011e-01 +1.298000000000000000e+03,8.648612569386855409e-01 +1.299000000000000000e+03,8.653753684596185991e-01 +1.300000000000000000e+03,8.658868081845862985e-01 +1.301000000000000000e+03,8.663955341962117362e-01 +1.302000000000000000e+03,8.669015041285733636e-01 +1.303000000000000000e+03,8.674046751685068335e-01 +1.304000000000000000e+03,8.679050040572364733e-01 +1.305000000000000000e+03,8.684024470923512595e-01 +1.306000000000000000e+03,8.688969601301371748e-01 +1.307000000000000000e+03,8.693884985882815997e-01 +1.308000000000000000e+03,8.698770174489631746e-01 +1.309000000000000000e+03,8.703624712623408977e-01 +1.310000000000000000e+03,8.708448141504573359e-01 +1.311000000000000000e+03,8.713239998115710483e-01 +1.312000000000000000e+03,8.717999815249313222e-01 +1.313000000000000000e+03,8.722727121560116537e-01 +1.314000000000000000e+03,8.727421441622160714e-01 +1.315000000000000000e+03,8.732082295990716281e-01 +1.316000000000000000e+03,8.736709201269257097e-01 +1.317000000000000000e+03,8.741301670181578221e-01 +1.318000000000000000e+03,8.745859211649252840e-01 +1.319000000000000000e+03,8.750381330874535957e-01 +1.320000000000000000e+03,8.754867529428894679e-01 +1.321000000000000000e+03,8.759317305347266158e-01 +1.322000000000000000e+03,8.763730153228226349e-01 +1.323000000000000000e+03,8.768105564340170632e-01 +1.324000000000000000e+03,8.772443026733661720e-01 +1.325000000000000000e+03,8.776742025360062538e-01 +1.326000000000000000e+03,8.781002042196592861e-01 +1.327000000000000000e+03,8.785222556377906278e-01 +1.328000000000000000e+03,8.789403044334330728e-01 +1.329000000000000000e+03,8.793542979936858073e-01 +1.330000000000000000e+03,8.797641834648999293e-01 +1.331000000000000000e+03,8.801699077685585237e-01 +1.332000000000000000e+03,8.805714176178613961e-01 +1.333000000000000000e+03,8.809686595350213478e-01 +1.334000000000000000e+03,8.813615798692785441e-01 +1.335000000000000000e+03,8.817501248156397464e-01 +1.336000000000000000e+03,8.821342404343454069e-01 +1.337000000000000000e+03,8.825138726710702874e-01 +1.338000000000000000e+03,8.828889673778578251e-01 +1.339000000000000000e+03,8.832594703347910192e-01 +1.340000000000000000e+03,8.836253272723977314e-01 +1.341000000000000000e+03,8.839864838947896208e-01 +1.342000000000000000e+03,8.843428859035317169e-01 +1.343000000000000000e+03,8.846944790222361910e-01 +1.344000000000000000e+03,8.850412090218752192e-01 +1.345000000000000000e+03,8.853830217468035002e-01 +1.346000000000000000e+03,8.857198631414814338e-01 +1.347000000000000000e+03,8.860516792778860840e-01 +1.348000000000000000e+03,8.863784163835956020e-01 +1.349000000000000000e+03,8.867000208705334563e-01 +1.350000000000000000e+03,8.870164393643518164e-01 +1.351000000000000000e+03,8.873276187344366628e-01 +1.352000000000000000e+03,8.876335061245107516e-01 +1.353000000000000000e+03,8.879340489838118966e-01 +1.354000000000000000e+03,8.882291950988187024e-01 +1.355000000000000000e+03,8.885188926254973252e-01 +1.356000000000000000e+03,8.888030901220362878e-01 +1.357000000000000000e+03,8.890817365820390394e-01 +1.358000000000000000e+03,8.893547814681370678e-01 +1.359000000000000000e+03,8.896221747459877038e-01 +1.360000000000000000e+03,8.898838669186172057e-01 +1.361000000000000000e+03,8.901398090610669334e-01 +1.362000000000000000e+03,8.903899528553006482e-01 +1.363000000000000000e+03,8.906342506253245306e-01 +1.364000000000000000e+03,8.908726553724760633e-01 +1.365000000000000000e+03,8.911051208108292654e-01 +1.366000000000000000e+03,8.913316014026668732e-01 +1.367000000000000000e+03,8.915520523939651776e-01 +1.368000000000000000e+03,8.917664298498382269e-01 +1.369000000000000000e+03,8.919746906898841088e-01 +1.370000000000000000e+03,8.921767927233761331e-01 +1.371000000000000000e+03,8.923726946842409635e-01 +1.372000000000000000e+03,8.925623562657620802e-01 +1.373000000000000000e+03,8.927457381549499527e-01 +1.374000000000000000e+03,8.929228020665145316e-01 +1.375000000000000000e+03,8.930935107763814385e-01 +1.376000000000000000e+03,8.932578281546845744e-01 +1.377000000000000000e+03,8.934157191981770829e-01 +1.378000000000000000e+03,8.935671500619937202e-01 +1.379000000000000000e+03,8.937120880907041265e-01 +1.380000000000000000e+03,8.938505018485933817e-01 +1.381000000000000000e+03,8.939823611491082289e-01 +1.382000000000000000e+03,8.941076370834083464e-01 +1.383000000000000000e+03,8.942263020479618296e-01 +1.384000000000000000e+03,8.943383297711253732e-01 +1.385000000000000000e+03,8.944436953386535327e-01 +1.386000000000000000e+03,8.945423752180795551e-01 +1.387000000000000000e+03,8.946343472819139331e-01 +1.388000000000000000e+03,8.947195908296097233e-01 +1.389000000000000000e+03,8.947980866082435591e-01 +1.390000000000000000e+03,8.948698168318662827e-01 +1.391000000000000000e+03,8.949347651994784547e-01 +1.392000000000000000e+03,8.949929169115879990e-01 +1.393000000000000000e+03,8.950442586853125659e-01 +1.394000000000000000e+03,8.950887787679906449e-01 +1.395000000000000000e+03,8.951264669492690063e-01 +1.396000000000000000e+03,8.951573145716373858e-01 +1.397000000000000000e+03,8.951813145393862081e-01 +1.398000000000000000e+03,8.951984613259653667e-01 +1.399000000000000000e+03,8.952087509797256315e-01 +1.400000000000000000e+03,8.952121811280302488e-01 +1.401000000000000000e+03,8.952087509797256315e-01 +1.402000000000000000e+03,8.951984613259653667e-01 +1.403000000000000000e+03,8.951813145393862081e-01 +1.404000000000000000e+03,8.951573145716373858e-01 +1.405000000000000000e+03,8.951264669492690063e-01 +1.406000000000000000e+03,8.950887787679906449e-01 +1.407000000000000000e+03,8.950442586853125659e-01 +1.408000000000000000e+03,8.949929169115879990e-01 +1.409000000000000000e+03,8.949347651994784547e-01 +1.410000000000000000e+03,8.948698168318662827e-01 +1.411000000000000000e+03,8.947980866082435591e-01 +1.412000000000000000e+03,8.947195908296097233e-01 +1.413000000000000000e+03,8.946343472819139331e-01 +1.414000000000000000e+03,8.945423752180795551e-01 +1.415000000000000000e+03,8.944436953386535327e-01 +1.416000000000000000e+03,8.943383297711253732e-01 +1.417000000000000000e+03,8.942263020479618296e-01 +1.418000000000000000e+03,8.941076370834083464e-01 +1.419000000000000000e+03,8.939823611491082289e-01 +1.420000000000000000e+03,8.938505018485933817e-01 +1.421000000000000000e+03,8.937120880907041265e-01 +1.422000000000000000e+03,8.935671500619937202e-01 +1.423000000000000000e+03,8.934157191981770829e-01 +1.424000000000000000e+03,8.932578281546845744e-01 +1.425000000000000000e+03,8.930935107763814385e-01 +1.426000000000000000e+03,8.929228020665145316e-01 +1.427000000000000000e+03,8.927457381549499527e-01 +1.428000000000000000e+03,8.925623562657620802e-01 +1.429000000000000000e+03,8.923726946842409635e-01 +1.430000000000000000e+03,8.921767927233761331e-01 +1.431000000000000000e+03,8.919746906898841088e-01 +1.432000000000000000e+03,8.917664298498382269e-01 +1.433000000000000000e+03,8.915520523939651776e-01 +1.434000000000000000e+03,8.913316014026668732e-01 +1.435000000000000000e+03,8.911051208108292654e-01 +1.436000000000000000e+03,8.908726553724760633e-01 +1.437000000000000000e+03,8.906342506253245306e-01 +1.438000000000000000e+03,8.903899528553006482e-01 +1.439000000000000000e+03,8.901398090610669334e-01 +1.440000000000000000e+03,8.898838669186172057e-01 +1.441000000000000000e+03,8.896221747459877038e-01 +1.442000000000000000e+03,8.893547814681370678e-01 +1.443000000000000000e+03,8.890817365820390394e-01 +1.444000000000000000e+03,8.888030901220362878e-01 +1.445000000000000000e+03,8.885188926254973252e-01 +1.446000000000000000e+03,8.882291950988187024e-01 +1.447000000000000000e+03,8.879340489838118966e-01 +1.448000000000000000e+03,8.876335061245107516e-01 +1.449000000000000000e+03,8.873276187344366628e-01 +1.450000000000000000e+03,8.870164393643518164e-01 +1.451000000000000000e+03,8.867000208705334563e-01 +1.452000000000000000e+03,8.863784163835956020e-01 +1.453000000000000000e+03,8.860516792778860840e-01 +1.454000000000000000e+03,8.857198631414814338e-01 +1.455000000000000000e+03,8.853830217468035002e-01 +1.456000000000000000e+03,8.850412090218752192e-01 +1.457000000000000000e+03,8.846944790222361910e-01 +1.458000000000000000e+03,8.843428859035317169e-01 +1.459000000000000000e+03,8.839864838947896208e-01 +1.460000000000000000e+03,8.836253272723977314e-01 +1.461000000000000000e+03,8.832594703347910192e-01 +1.462000000000000000e+03,8.828889673778578251e-01 +1.463000000000000000e+03,8.825138726710702874e-01 +1.464000000000000000e+03,8.821342404343454069e-01 +1.465000000000000000e+03,8.817501248156397464e-01 +1.466000000000000000e+03,8.813615798692785441e-01 +1.467000000000000000e+03,8.809686595350213478e-01 +1.468000000000000000e+03,8.805714176178613961e-01 +1.469000000000000000e+03,8.801699077685585237e-01 +1.470000000000000000e+03,8.797641834648999293e-01 +1.471000000000000000e+03,8.793542979936858073e-01 +1.472000000000000000e+03,8.789403044334330728e-01 +1.473000000000000000e+03,8.785222556377906278e-01 +1.474000000000000000e+03,8.781002042196592861e-01 +1.475000000000000000e+03,8.776742025360062538e-01 +1.476000000000000000e+03,8.772443026733661720e-01 +1.477000000000000000e+03,8.768105564340170632e-01 +1.478000000000000000e+03,8.763730153228226349e-01 +1.479000000000000000e+03,8.759317305347266158e-01 +1.480000000000000000e+03,8.754867529428894679e-01 +1.481000000000000000e+03,8.750381330874535957e-01 +1.482000000000000000e+03,8.745859211649252840e-01 +1.483000000000000000e+03,8.741301670181578221e-01 +1.484000000000000000e+03,8.736709201269257097e-01 +1.485000000000000000e+03,8.732082295990716281e-01 +1.486000000000000000e+03,8.727421441622160714e-01 +1.487000000000000000e+03,8.722727121560116537e-01 +1.488000000000000000e+03,8.717999815249313222e-01 +1.489000000000000000e+03,8.713239998115710483e-01 +1.490000000000000000e+03,8.708448141504573359e-01 +1.491000000000000000e+03,8.703624712623408977e-01 +1.492000000000000000e+03,8.698770174489631746e-01 +1.493000000000000000e+03,8.693884985882815997e-01 +1.494000000000000000e+03,8.688969601301371748e-01 +1.495000000000000000e+03,8.684024470923512595e-01 +1.496000000000000000e+03,8.679050040572364733e-01 +1.497000000000000000e+03,8.674046751685068335e-01 +1.498000000000000000e+03,8.669015041285733636e-01 +1.499000000000000000e+03,8.663955341962117362e-01 +1.500000000000000000e+03,8.658868081845862985e-01 +1.501000000000000000e+03,8.653753684596185991e-01 +1.502000000000000000e+03,8.648612569386855409e-01 +1.503000000000000000e+03,8.643445150896355011e-01 +1.504000000000000000e+03,8.638251839301072099e-01 +1.505000000000000000e+03,8.633033040271407277e-01 +1.506000000000000000e+03,8.627789154970673113e-01 +1.507000000000000000e+03,8.622520580056649564e-01 +1.508000000000000000e+03,8.617227707685696236e-01 +1.509000000000000000e+03,8.611910925519283833e-01 +1.510000000000000000e+03,8.606570616732854839e-01 +1.511000000000000000e+03,8.601207160026872467e-01 +1.512000000000000000e+03,8.595820929639981234e-01 +1.513000000000000000e+03,8.590412295364153739e-01 +1.514000000000000000e+03,8.584981622561727033e-01 +1.515000000000000000e+03,8.579529272184232003e-01 +1.516000000000000000e+03,8.574055600792918064e-01 +1.517000000000000000e+03,8.568560960580875463e-01 +1.518000000000000000e+03,8.563045699396679700e-01 +1.519000000000000000e+03,8.557510160769444818e-01 +1.520000000000000000e+03,8.551954683935228951e-01 +1.521000000000000000e+03,8.546379603864694419e-01 +1.522000000000000000e+03,8.540785251291941327e-01 +1.523000000000000000e+03,8.535171952744450286e-01 +1.524000000000000000e+03,8.529540030574053189e-01 +1.525000000000000000e+03,8.523889802988858788e-01 +1.526000000000000000e+03,8.518221584086075326e-01 +1.527000000000000000e+03,8.512535683885648075e-01 +1.528000000000000000e+03,8.506832408364665143e-01 +1.529000000000000000e+03,8.501112059492466067e-01 +1.530000000000000000e+03,8.495374935266384320e-01 +1.531000000000000000e+03,8.489621329748083811e-01 +1.532000000000000000e+03,8.483851533100424946e-01 +1.533000000000000000e+03,8.478065831624812532e-01 +1.534000000000000000e+03,8.472264507798976663e-01 +1.535000000000000000e+03,8.466447840315135531e-01 +1.536000000000000000e+03,8.460616104118503511e-01 +1.537000000000000000e+03,8.454769570446092342e-01 +1.538000000000000000e+03,8.448908506865769885e-01 +1.539000000000000000e+03,8.443033177315530935e-01 +1.540000000000000000e+03,8.437143842142952321e-01 +1.541000000000000000e+03,8.431240758144795677e-01 +1.542000000000000000e+03,8.425324178606702352e-01 +1.543000000000000000e+03,8.419394353342986026e-01 +1.544000000000000000e+03,8.413451528736459739e-01 +1.545000000000000000e+03,8.407495947778284018e-01 +1.546000000000000000e+03,8.401527850107800566e-01 +1.547000000000000000e+03,8.395547472052338200e-01 +1.548000000000000000e+03,8.389555046666948845e-01 +1.549000000000000000e+03,8.383550803774063587e-01 +1.550000000000000000e+03,8.377534970003038817e-01 +1.551000000000000000e+03,8.371507768829576923e-01 +1.552000000000000000e+03,8.365469420615000429e-01 +1.553000000000000000e+03,8.359420142645354046e-01 +1.554000000000000000e+03,8.353360149170333537e-01 +1.555000000000000000e+03,8.347289651442001412e-01 +1.556000000000000000e+03,8.341208857753298345e-01 +1.557000000000000000e+03,8.335117973476319220e-01 +1.558000000000000000e+03,8.329017201100348267e-01 +1.559000000000000000e+03,8.322906740269635506e-01 +1.560000000000000000e+03,8.316786787820908966e-01 +1.561000000000000000e+03,8.310657537820606011e-01 +1.562000000000000000e+03,8.304519181601818234e-01 +1.563000000000000000e+03,8.298371907800936587e-01 +1.564000000000000000e+03,8.292215902393993421e-01 +1.565000000000000000e+03,8.286051348732683675e-01 +1.566000000000000000e+03,8.279878427580072975e-01 +1.567000000000000000e+03,8.273697317145969343e-01 +1.568000000000000000e+03,8.267508193121970717e-01 +1.569000000000000000e+03,8.261311228716161636e-01 +1.570000000000000000e+03,8.255106594687471322e-01 +1.571000000000000000e+03,8.248894459379686461e-01 +1.572000000000000000e+03,8.242674988755103183e-01 +1.573000000000000000e+03,8.236448346427829303e-01 +1.574000000000000000e+03,8.230214693696726869e-01 +1.575000000000000000e+03,8.223974189577986094e-01 +1.576000000000000000e+03,8.217726990837348477e-01 +1.577000000000000000e+03,8.211473252021950220e-01 +1.578000000000000000e+03,8.205213125491811477e-01 +1.579000000000000000e+03,8.198946761450951470e-01 +1.580000000000000000e+03,8.192674307978131676e-01 +1.581000000000000000e+03,8.186395911057241515e-01 +1.582000000000000000e+03,8.180111714607299911e-01 +1.583000000000000000e+03,8.173821860512104909e-01 +1.584000000000000000e+03,8.167526488649496930e-01 +1.585000000000000000e+03,8.161225736920273421e-01 +1.586000000000000000e+03,8.154919741276720480e-01 +1.587000000000000000e+03,8.148608635750784757e-01 +1.588000000000000000e+03,8.142292552481888990e-01 +1.589000000000000000e+03,8.135971621744367832e-01 +1.590000000000000000e+03,8.129645971974562846e-01 +1.591000000000000000e+03,8.123315729797537799e-01 +1.592000000000000000e+03,8.116981020053455342e-01 +1.593000000000000000e+03,8.110641965823583988e-01 +1.594000000000000000e+03,8.104298688455962019e-01 +1.595000000000000000e+03,8.097951307590710579e-01 +1.596000000000000000e+03,8.091599941184988154e-01 +1.597000000000000000e+03,8.085244705537616428e-01 +1.598000000000000000e+03,8.078885715313351978e-01 +1.599000000000000000e+03,8.072523083566824909e-01 +1.600000000000000000e+03,8.066156921766133303e-01 +1.601000000000000000e+03,8.059787339816119056e-01 +1.602000000000000000e+03,8.053414446081292866e-01 +1.603000000000000000e+03,8.047038347408451697e-01 +1.604000000000000000e+03,8.040659149148956519e-01 +1.605000000000000000e+03,8.034276955180704727e-01 +1.606000000000000000e+03,8.027891867929769498e-01 +1.607000000000000000e+03,8.021503988391737172e-01 +1.608000000000000000e+03,8.015113416152725989e-01 +1.609000000000000000e+03,8.008720249410105074e-01 +1.610000000000000000e+03,8.002324584992900336e-01 +1.611000000000000000e+03,7.995926518381910597e-01 +1.612000000000000000e+03,7.989526143729517305e-01 +1.613000000000000000e+03,7.983123553879208911e-01 +1.614000000000000000e+03,7.976718840384807718e-01 +1.615000000000000000e+03,7.970312093529419162e-01 +1.616000000000000000e+03,7.963903402344089111e-01 +1.617000000000000000e+03,7.957492854626189160e-01 +1.618000000000000000e+03,7.951080536957523259e-01 +1.619000000000000000e+03,7.944666534722163442e-01 +1.620000000000000000e+03,7.938250932124013559e-01 +1.621000000000000000e+03,7.931833812204113210e-01 +1.622000000000000000e+03,7.925415256857674118e-01 +1.623000000000000000e+03,7.918995346850866701e-01 +1.624000000000000000e+03,7.912574161837339082e-01 +1.625000000000000000e+03,7.906151780374499616e-01 +1.626000000000000000e+03,7.899728279939541853e-01 +1.627000000000000000e+03,7.893303736945227467e-01 +1.628000000000000000e+03,7.886878226755429377e-01 +1.629000000000000000e+03,7.880451823700437286e-01 +1.630000000000000000e+03,7.874024601092027842e-01 +1.631000000000000000e+03,7.867596631238304994e-01 +1.632000000000000000e+03,7.861167985458309415e-01 +1.633000000000000000e+03,7.854738734096413655e-01 +1.634000000000000000e+03,7.848308946536477482e-01 +1.635000000000000000e+03,7.841878691215812269e-01 +1.636000000000000000e+03,7.835448035638897801e-01 +1.637000000000000000e+03,7.829017046390921442e-01 +1.638000000000000000e+03,7.822585789151080826e-01 +1.639000000000000000e+03,7.816154328705701149e-01 +1.640000000000000000e+03,7.809722728961135951e-01 +1.641000000000000000e+03,7.803291052956479179e-01 +1.642000000000000000e+03,7.796859362876075172e-01 +1.643000000000000000e+03,7.790427720061835482e-01 +1.644000000000000000e+03,7.783996185025371384e-01 +1.645000000000000000e+03,7.777564817459929891e-01 +1.646000000000000000e+03,7.771133676252149902e-01 +1.647000000000000000e+03,7.764702819493642938e-01 +1.648000000000000000e+03,7.758272304492378479e-01 +1.649000000000000000e+03,7.751842187783910543e-01 +1.650000000000000000e+03,7.745412525142423288e-01 +1.651000000000000000e+03,7.738983371591601212e-01 +1.652000000000000000e+03,7.732554781415339473e-01 +1.653000000000000000e+03,7.726126808168284343e-01 +1.654000000000000000e+03,7.719699504686212688e-01 +1.655000000000000000e+03,7.713272923096247125e-01 +1.656000000000000000e+03,7.706847114826919087e-01 +1.657000000000000000e+03,7.700422130618074235e-01 +1.658000000000000000e+03,7.693998020530617987e-01 +1.659000000000000000e+03,7.687574833956126730e-01 +1.660000000000000000e+03,7.681152619626292477e-01 +1.661000000000000000e+03,7.674731425622234315e-01 +1.662000000000000000e+03,7.668311299383661073e-01 +1.663000000000000000e+03,7.661892287717894101e-01 +1.664000000000000000e+03,7.655474436808753502e-01 +1.665000000000000000e+03,7.649057792225300023e-01 +1.666000000000000000e+03,7.642642398930450387e-01 diff --git a/quisp/satellite_csvs/S-C2_distance.csv b/quisp/satellite_csvs/S-C2_distance.csv new file mode 100644 index 000000000..fdde1957d --- /dev/null +++ b/quisp/satellite_csvs/S-C2_distance.csv @@ -0,0 +1,547 @@ +1.202000000000000000e+03,1.750869498277927050e+06 +1.203000000000000000e+03,1.745257574113345705e+06 +1.204000000000000000e+03,1.739648240306068212e+06 +1.205000000000000000e+03,1.734041521994211012e+06 +1.206000000000000000e+03,1.728437444630265003e+06 +1.207000000000000000e+03,1.722836033985822927e+06 +1.208000000000000000e+03,1.717237316156389657e+06 +1.209000000000000000e+03,1.711641317566270940e+06 +1.210000000000000000e+03,1.706048064973551780e+06 +1.211000000000000000e+03,1.700457585475156782e+06 +1.212000000000000000e+03,1.694869906512001297e+06 +1.213000000000000000e+03,1.689285055874229874e+06 +1.214000000000000000e+03,1.683703061706546927e+06 +1.215000000000000000e+03,1.678123952513639582e+06 +1.216000000000000000e+03,1.672547757165696006e+06 +1.217000000000000000e+03,1.666974504904019181e+06 +1.218000000000000000e+03,1.661404225346739637e+06 +1.219000000000000000e+03,1.655836948494627606e+06 +1.220000000000000000e+03,1.650272704737008084e+06 +1.221000000000000000e+03,1.644711524857778801e+06 +1.222000000000000000e+03,1.639153440041535534e+06 +1.223000000000000000e+03,1.633598481879803818e+06 +1.224000000000000000e+03,1.628046682377381949e+06 +1.225000000000000000e+03,1.622498073958795285e+06 +1.226000000000000000e+03,1.616952689474865329e+06 +1.227000000000000000e+03,1.611410562209395459e+06 +1.228000000000000000e+03,1.605871725885974942e+06 +1.229000000000000000e+03,1.600336214674903778e+06 +1.230000000000000000e+03,1.594804063200241420e+06 +1.231000000000000000e+03,1.589275306546980981e+06 +1.232000000000000000e+03,1.583749980268350337e+06 +1.233000000000000000e+03,1.578228120393246645e+06 +1.234000000000000000e+03,1.572709763433800312e+06 +1.235000000000000000e+03,1.567194946393077262e+06 +1.236000000000000000e+03,1.561683706772917649e+06 +1.237000000000000000e+03,1.556176082581916591e+06 +1.238000000000000000e+03,1.550672112343547633e+06 +1.239000000000000000e+03,1.545171835104432655e+06 +1.240000000000000000e+03,1.539675290442760801e+06 +1.241000000000000000e+03,1.534182518476859666e+06 +1.242000000000000000e+03,1.528693559873920633e+06 +1.243000000000000000e+03,1.523208455858882051e+06 +1.244000000000000000e+03,1.517727248223474482e+06 +1.245000000000000000e+03,1.512249979335427284e+06 +1.246000000000000000e+03,1.506776692147844471e+06 +1.247000000000000000e+03,1.501307430208749836e+06 +1.248000000000000000e+03,1.495842237670804607e+06 +1.249000000000000000e+03,1.490381159301203676e+06 +1.250000000000000000e+03,1.484924240491749719e+06 +1.251000000000000000e+03,1.479471527269112412e+06 +1.252000000000000000e+03,1.474023066305273212e+06 +1.253000000000000000e+03,1.468578904928162228e+06 +1.254000000000000000e+03,1.463139091132486938e+06 +1.255000000000000000e+03,1.457703673590761144e+06 +1.256000000000000000e+03,1.452272701664532535e+06 +1.257000000000000000e+03,1.446846225415817928e+06 +1.258000000000000000e+03,1.441424295618746663e+06 +1.259000000000000000e+03,1.436006963771415642e+06 +1.260000000000000000e+03,1.430594282107963692e+06 +1.261000000000000000e+03,1.425186303610864794e+06 +1.262000000000000000e+03,1.419783082023447612e+06 +1.263000000000000000e+03,1.414384671862644376e+06 +1.264000000000000000e+03,1.408991128431971418e+06 +1.265000000000000000e+03,1.403602507834750228e+06 +1.266000000000000000e+03,1.398218866987568559e+06 +1.267000000000000000e+03,1.392840263633989030e+06 +1.268000000000000000e+03,1.387466756358508253e+06 +1.269000000000000000e+03,1.382098404600772308e+06 +1.270000000000000000e+03,1.376735268670051824e+06 +1.271000000000000000e+03,1.371377409759982955e+06 +1.272000000000000000e+03,1.366024889963576104e+06 +1.273000000000000000e+03,1.360677772288501728e+06 +1.274000000000000000e+03,1.355336120672654361e+06 +1.275000000000000000e+03,1.350000000000000000e+06 +1.276000000000000000e+03,1.344669476116714766e+06 +1.277000000000000000e+03,1.339344615847616689e+06 +1.278000000000000000e+03,1.334025487012898084e+06 +1.279000000000000000e+03,1.328712158445161534e+06 +1.280000000000000000e+03,1.323404700006766710e+06 +1.281000000000000000e+03,1.318103182607492199e+06 +1.282000000000000000e+03,1.312807678222518647e+06 +1.283000000000000000e+03,1.307518259910736466e+06 +1.284000000000000000e+03,1.302235001833386486e+06 +1.285000000000000000e+03,1.296957979273037286e+06 +1.286000000000000000e+03,1.291687268652904313e+06 +1.287000000000000000e+03,1.286422947556518018e+06 +1.288000000000000000e+03,1.281165094747745665e+06 +1.289000000000000000e+03,1.275913790191171225e+06 +1.290000000000000000e+03,1.270669115072842222e+06 +1.291000000000000000e+03,1.265431151821386069e+06 +1.292000000000000000e+03,1.260199984129503137e+06 +1.293000000000000000e+03,1.254975696975841885e+06 +1.294000000000000000e+03,1.249758376647262136e+06 +1.295000000000000000e+03,1.244548110761492513e+06 +1.296000000000000000e+03,1.239344988290185574e+06 +1.297000000000000000e+03,1.234149099582380382e+06 +1.298000000000000000e+03,1.228960536388373934e+06 +1.299000000000000000e+03,1.223779391884010984e+06 +1.300000000000000000e+03,1.218605760695394129e+06 +1.301000000000000000e+03,1.213439738924022531e+06 +1.302000000000000000e+03,1.208281424172365572e+06 +1.303000000000000000e+03,1.203130915569872595e+06 +1.304000000000000000e+03,1.197988313799429452e+06 +1.305000000000000000e+03,1.192853721124262549e+06 +1.306000000000000000e+03,1.187727241415300639e+06 +1.307000000000000000e+03,1.182608980178993894e+06 +1.308000000000000000e+03,1.177499044585599564e+06 +1.309000000000000000e+03,1.172397543497938197e+06 +1.310000000000000000e+03,1.167304587500623195e+06 +1.311000000000000000e+03,1.162220288929770933e+06 +1.312000000000000000e+03,1.157144761903194245e+06 +1.313000000000000000e+03,1.152078122351084370e+06 +1.314000000000000000e+03,1.147020488047183957e+06 +1.315000000000000000e+03,1.141971978640456917e+06 +1.316000000000000000e+03,1.136932715687256539e+06 +1.317000000000000000e+03,1.131902822683996987e+06 +1.318000000000000000e+03,1.126882425100329565e+06 +1.319000000000000000e+03,1.121871650412826799e+06 +1.320000000000000000e+03,1.116870628139177104e+06 +1.321000000000000000e+03,1.111879489872890757e+06 +1.322000000000000000e+03,1.106898369318520650e+06 +1.323000000000000000e+03,1.101927402327394811e+06 +1.324000000000000000e+03,1.096966726933866506e+06 +1.325000000000000000e+03,1.092016483392077731e+06 +1.326000000000000000e+03,1.087076814213236794e+06 +1.327000000000000000e+03,1.082147864203409059e+06 +1.328000000000000000e+03,1.077229780501820380e+06 +1.329000000000000000e+03,1.072322712619666476e+06 +1.330000000000000000e+03,1.067426812479431741e+06 +1.331000000000000000e+03,1.062542234454706311e+06 +1.332000000000000000e+03,1.057669135410502553e+06 +1.333000000000000000e+03,1.052807674744062591e+06 +1.334000000000000000e+03,1.047958014426150592e+06 +1.335000000000000000e+03,1.043120319042822579e+06 +1.336000000000000000e+03,1.038294755837666802e+06 +1.337000000000000000e+03,1.033481494754502084e+06 +1.338000000000000000e+03,1.028680708480527508e+06 +1.339000000000000000e+03,1.023892572489907267e+06 +1.340000000000000000e+03,1.019117265087781707e+06 +1.341000000000000000e+03,1.014354967454687459e+06 +1.342000000000000000e+03,1.009605863691371400e+06 +1.343000000000000000e+03,1.004870140863982495e+06 +1.344000000000000000e+03,1.000147989049620577e+06 +1.345000000000000000e+03,9.954396013822235400e+05 +1.346000000000000000e+03,9.907451740987689700e+05 +1.347000000000000000e+03,9.860649065857683308e+05 +1.348000000000000000e+03,9.813990014260255266e+05 +1.349000000000000000e+03,9.767476644456335343e+05 +1.350000000000000000e+03,9.721111047611790709e+05 +1.351000000000000000e+03,9.674895348271215335e+05 +1.352000000000000000e+03,9.628831704833146650e+05 +1.353000000000000000e+03,9.582922310026310151e+05 +1.354000000000000000e+03,9.537169391386524076e+05 +1.355000000000000000e+03,9.491575211733825272e+05 +1.356000000000000000e+03,9.446142069649386685e+05 +1.357000000000000000e+03,9.400872299951744499e+05 +1.358000000000000000e+03,9.355768274171822704e+05 +1.359000000000000000e+03,9.310832401026237058e+05 +1.360000000000000000e+03,9.266067126888299827e+05 +1.361000000000000000e+03,9.221474936256130459e+05 +1.362000000000000000e+03,9.177058352217228385e+05 +1.363000000000000000e+03,9.132819936908863019e+05 +1.364000000000000000e+03,9.088762291973533574e+05 +1.365000000000000000e+03,9.044888059008801356e+05 +1.366000000000000000e+03,9.001199920010664500e+05 +1.367000000000000000e+03,8.957700597809685860e+05 +1.368000000000000000e+03,8.914392856498977635e+05 +1.369000000000000000e+03,8.871279501853156835e+05 +1.370000000000000000e+03,8.828363381737297168e+05 +1.371000000000000000e+03,8.785647386504878523e+05 +1.372000000000000000e+03,8.743134449383699102e+05 +1.373000000000000000e+03,8.700827546848632628e+05 +1.374000000000000000e+03,8.658729698980099056e+05 +1.375000000000000000e+03,8.616843969807042740e+05 +1.376000000000000000e+03,8.575173467633177061e+05 +1.377000000000000000e+03,8.533721345345183508e+05 +1.378000000000000000e+03,8.492490800701522967e+05 +1.379000000000000000e+03,8.451485076600443572e+05 +1.380000000000000000e+03,8.410707461325711338e+05 +1.381000000000000000e+03,8.370161288768574595e+05 +1.382000000000000000e+03,8.329849938624345232e+05 +1.383000000000000000e+03,8.289776836562007666e+05 +1.384000000000000000e+03,8.249945454365137266e+05 +1.385000000000000000e+03,8.210359310042405268e+05 +1.386000000000000000e+03,8.171021967905850615e+05 +1.387000000000000000e+03,8.131937038615092169e+05 +1.388000000000000000e+03,8.093108179185546469e+05 +1.389000000000000000e+03,8.054539092958702240e+05 +1.390000000000000000e+03,8.016233529532433022e+05 +1.391000000000000000e+03,7.978195284649279201e+05 +1.392000000000000000e+03,7.940428200040599331e+05 +1.393000000000000000e+03,7.902936163224399788e+05 +1.394000000000000000e+03,7.865723107254665811e+05 +1.395000000000000000e+03,7.828793010419933125e+05 +1.396000000000000000e+03,7.792149895888810279e+05 +1.397000000000000000e+03,7.755797831300143152e+05 +1.398000000000000000e+03,7.719740928295457270e+05 +1.399000000000000000e+03,7.683983341991313500e+05 +1.400000000000000000e+03,7.648529270389176672e+05 +1.401000000000000000e+03,7.613382953720375663e+05 +1.402000000000000000e+03,7.578548673723749816e+05 +1.403000000000000000e+03,7.544030752853542799e+05 +1.404000000000000000e+03,7.509833553415149217e+05 +1.405000000000000000e+03,7.475961476626266958e+05 +1.406000000000000000e+03,7.442418961601126939e+05 +1.407000000000000000e+03,7.409210484255390475e+05 +1.408000000000000000e+03,7.376340556129441829e+05 +1.409000000000000000e+03,7.343813723127786070e+05 +1.410000000000000000e+03,7.311634564172364771e+05 +1.411000000000000000e+03,7.279807689767635893e+05 +1.412000000000000000e+03,7.248337740475398023e+05 +1.413000000000000000e+03,7.217229385297379922e+05 +1.414000000000000000e+03,7.186487319963766495e+05 +1.415000000000000000e+03,7.156116265125938226e+05 +1.416000000000000000e+03,7.126120964451838518e+05 +1.417000000000000000e+03,7.096506182622544002e+05 +1.418000000000000000e+03,7.067276703228761908e+05 +1.419000000000000000e+03,7.038437326566174161e+05 +1.420000000000000000e+03,7.009992867328753928e+05 +1.421000000000000000e+03,6.981948152199356118e+05 +1.422000000000000000e+03,6.954308017337167403e+05 +1.423000000000000000e+03,6.927077305761788739e+05 +1.424000000000000000e+03,6.900260864634031896e+05 +1.425000000000000000e+03,6.873863542433759430e+05 +1.426000000000000000e+03,6.847890186035403749e+05 +1.427000000000000000e+03,6.822345637682101224e+05 +1.428000000000000000e+03,6.797234731859713793e+05 +1.429000000000000000e+03,6.772562292072329437e+05 +1.430000000000000000e+03,6.748333127521194983e+05 +1.431000000000000000e+03,6.724552029689413030e+05 +1.432000000000000000e+03,6.701223768835063092e+05 +1.433000000000000000e+03,6.678353090395864565e+05 +1.434000000000000000e+03,6.655944711308830883e+05 +1.435000000000000000e+03,6.634003316248793853e+05 +1.436000000000000000e+03,6.612533553790105507e+05 +1.437000000000000000e+03,6.591540032496199710e+05 +1.438000000000000000e+03,6.571027316942153266e+05 +1.439000000000000000e+03,6.550999923675773898e+05 +1.440000000000000000e+03,6.531462317123172106e+05 +1.441000000000000000e+03,6.512418905445195269e+05 +1.442000000000000000e+03,6.493874036351490067e+05 +1.443000000000000000e+03,6.475831992879370227e+05 +1.444000000000000000e+03,6.458296989145048428e+05 +1.445000000000000000e+03,6.441273166075166082e+05 +1.446000000000000000e+03,6.424764587126908591e+05 +1.447000000000000000e+03,6.408775234005324310e+05 +1.448000000000000000e+03,6.393309002386792563e+05 +1.449000000000000000e+03,6.378369697657858487e+05 +1.450000000000000000e+03,6.363961030678927200e+05 +1.451000000000000000e+03,6.350086613582526334e+05 +1.452000000000000000e+03,6.336749955616048537e+05 +1.453000000000000000e+03,6.323954459039059002e+05 +1.454000000000000000e+03,6.311703415085343877e+05 +1.455000000000000000e+03,6.300000000000000000e+05 +1.456000000000000000e+03,6.288847271161861718e+05 +1.457000000000000000e+03,6.278248163301607128e+05 +1.458000000000000000e+03,6.268205484825780150e+05 +1.459000000000000000e+03,6.258721914256935706e+05 +1.460000000000000000e+03,6.249799996799897635e+05 +1.461000000000000000e+03,6.241442141044007149e+05 +1.462000000000000000e+03,6.233650615810931195e+05 +1.463000000000000000e+03,6.226427547157359077e+05 +1.464000000000000000e+03,6.219774915541558294e+05 +1.465000000000000000e+03,6.213694553162393859e+05 +1.466000000000000000e+03,6.208188141478961334e+05 +1.467000000000000000e+03,6.203257208918553079e+05 +1.468000000000000000e+03,6.198903128780123079e+05 +1.469000000000000000e+03,6.195127117339886026e+05 +1.470000000000000000e+03,6.191930232165087946e+05 +1.471000000000000000e+03,6.189313370641367510e+05 +1.472000000000000000e+03,6.187277268718446139e+05 +1.473000000000000000e+03,6.185822499878249364e+05 +1.474000000000000000e+03,6.184949474328792421e+05 +1.475000000000000000e+03,6.184658438426491339e+05 +1.476000000000000000e+03,6.184949474328792421e+05 +1.477000000000000000e+03,6.185822499878249364e+05 +1.478000000000000000e+03,6.187277268718446139e+05 +1.479000000000000000e+03,6.189313370641367510e+05 +1.480000000000000000e+03,6.191930232165087946e+05 +1.481000000000000000e+03,6.195127117339886026e+05 +1.482000000000000000e+03,6.198903128780123079e+05 +1.483000000000000000e+03,6.203257208918553079e+05 +1.484000000000000000e+03,6.208188141478961334e+05 +1.485000000000000000e+03,6.213694553162393859e+05 +1.486000000000000000e+03,6.219774915541558294e+05 +1.487000000000000000e+03,6.226427547157359077e+05 +1.488000000000000000e+03,6.233650615810931195e+05 +1.489000000000000000e+03,6.241442141044007149e+05 +1.490000000000000000e+03,6.249799996799897635e+05 +1.491000000000000000e+03,6.258721914256935706e+05 +1.492000000000000000e+03,6.268205484825780150e+05 +1.493000000000000000e+03,6.278248163301607128e+05 +1.494000000000000000e+03,6.288847271161861718e+05 +1.495000000000000000e+03,6.300000000000000000e+05 +1.496000000000000000e+03,6.311703415085343877e+05 +1.497000000000000000e+03,6.323954459039059002e+05 +1.498000000000000000e+03,6.336749955616048537e+05 +1.499000000000000000e+03,6.350086613582526334e+05 +1.500000000000000000e+03,6.363961030678927200e+05 +1.501000000000000000e+03,6.378369697657858487e+05 +1.502000000000000000e+03,6.393309002386792563e+05 +1.503000000000000000e+03,6.408775234005324310e+05 +1.504000000000000000e+03,6.424764587126908591e+05 +1.505000000000000000e+03,6.441273166075166082e+05 +1.506000000000000000e+03,6.458296989145048428e+05 +1.507000000000000000e+03,6.475831992879370227e+05 +1.508000000000000000e+03,6.493874036351490067e+05 +1.509000000000000000e+03,6.512418905445195269e+05 +1.510000000000000000e+03,6.531462317123172106e+05 +1.511000000000000000e+03,6.550999923675773898e+05 +1.512000000000000000e+03,6.571027316942153266e+05 +1.513000000000000000e+03,6.591540032496199710e+05 +1.514000000000000000e+03,6.612533553790105507e+05 +1.515000000000000000e+03,6.634003316248793853e+05 +1.516000000000000000e+03,6.655944711308830883e+05 +1.517000000000000000e+03,6.678353090395864565e+05 +1.518000000000000000e+03,6.701223768835063092e+05 +1.519000000000000000e+03,6.724552029689413030e+05 +1.520000000000000000e+03,6.748333127521194983e+05 +1.521000000000000000e+03,6.772562292072329437e+05 +1.522000000000000000e+03,6.797234731859713793e+05 +1.523000000000000000e+03,6.822345637682101224e+05 +1.524000000000000000e+03,6.847890186035403749e+05 +1.525000000000000000e+03,6.873863542433759430e+05 +1.526000000000000000e+03,6.900260864634031896e+05 +1.527000000000000000e+03,6.927077305761788739e+05 +1.528000000000000000e+03,6.954308017337167403e+05 +1.529000000000000000e+03,6.981948152199356118e+05 +1.530000000000000000e+03,7.009992867328753928e+05 +1.531000000000000000e+03,7.038437326566174161e+05 +1.532000000000000000e+03,7.067276703228761908e+05 +1.533000000000000000e+03,7.096506182622544002e+05 +1.534000000000000000e+03,7.126120964451838518e+05 +1.535000000000000000e+03,7.156116265125938226e+05 +1.536000000000000000e+03,7.186487319963766495e+05 +1.537000000000000000e+03,7.217229385297379922e+05 +1.538000000000000000e+03,7.248337740475398023e+05 +1.539000000000000000e+03,7.279807689767635893e+05 +1.540000000000000000e+03,7.311634564172364771e+05 +1.541000000000000000e+03,7.343813723127786070e+05 +1.542000000000000000e+03,7.376340556129441829e+05 +1.543000000000000000e+03,7.409210484255390475e+05 +1.544000000000000000e+03,7.442418961601126939e+05 +1.545000000000000000e+03,7.475961476626266958e+05 +1.546000000000000000e+03,7.509833553415149217e+05 +1.547000000000000000e+03,7.544030752853542799e+05 +1.548000000000000000e+03,7.578548673723749816e+05 +1.549000000000000000e+03,7.613382953720375663e+05 +1.550000000000000000e+03,7.648529270389176672e+05 +1.551000000000000000e+03,7.683983341991313500e+05 +1.552000000000000000e+03,7.719740928295457270e+05 +1.553000000000000000e+03,7.755797831300143152e+05 +1.554000000000000000e+03,7.792149895888810279e+05 +1.555000000000000000e+03,7.828793010419933125e+05 +1.556000000000000000e+03,7.865723107254665811e+05 +1.557000000000000000e+03,7.902936163224399788e+05 +1.558000000000000000e+03,7.940428200040599331e+05 +1.559000000000000000e+03,7.978195284649279201e+05 +1.560000000000000000e+03,8.016233529532433022e+05 +1.561000000000000000e+03,8.054539092958702240e+05 +1.562000000000000000e+03,8.093108179185546469e+05 +1.563000000000000000e+03,8.131937038615092169e+05 +1.564000000000000000e+03,8.171021967905850615e+05 +1.565000000000000000e+03,8.210359310042405268e+05 +1.566000000000000000e+03,8.249945454365137266e+05 +1.567000000000000000e+03,8.289776836562007666e+05 +1.568000000000000000e+03,8.329849938624345232e+05 +1.569000000000000000e+03,8.370161288768574595e+05 +1.570000000000000000e+03,8.410707461325711338e+05 +1.571000000000000000e+03,8.451485076600443572e+05 +1.572000000000000000e+03,8.492490800701522967e+05 +1.573000000000000000e+03,8.533721345345183508e+05 +1.574000000000000000e+03,8.575173467633177061e+05 +1.575000000000000000e+03,8.616843969807042740e+05 +1.576000000000000000e+03,8.658729698980099056e+05 +1.577000000000000000e+03,8.700827546848632628e+05 +1.578000000000000000e+03,8.743134449383699102e+05 +1.579000000000000000e+03,8.785647386504878523e+05 +1.580000000000000000e+03,8.828363381737297168e+05 +1.581000000000000000e+03,8.871279501853156835e+05 +1.582000000000000000e+03,8.914392856498977635e+05 +1.583000000000000000e+03,8.957700597809685860e+05 +1.584000000000000000e+03,9.001199920010664500e+05 +1.585000000000000000e+03,9.044888059008801356e+05 +1.586000000000000000e+03,9.088762291973533574e+05 +1.587000000000000000e+03,9.132819936908863019e+05 +1.588000000000000000e+03,9.177058352217228385e+05 +1.589000000000000000e+03,9.221474936256130459e+05 +1.590000000000000000e+03,9.266067126888299827e+05 +1.591000000000000000e+03,9.310832401026237058e+05 +1.592000000000000000e+03,9.355768274171822704e+05 +1.593000000000000000e+03,9.400872299951744499e+05 +1.594000000000000000e+03,9.446142069649386685e+05 +1.595000000000000000e+03,9.491575211733825272e+05 +1.596000000000000000e+03,9.537169391386524076e+05 +1.597000000000000000e+03,9.582922310026310151e+05 +1.598000000000000000e+03,9.628831704833146650e+05 +1.599000000000000000e+03,9.674895348271215335e+05 +1.600000000000000000e+03,9.721111047611790709e+05 +1.601000000000000000e+03,9.767476644456335343e+05 +1.602000000000000000e+03,9.813990014260255266e+05 +1.603000000000000000e+03,9.860649065857683308e+05 +1.604000000000000000e+03,9.907451740987689700e+05 +1.605000000000000000e+03,9.954396013822235400e+05 +1.606000000000000000e+03,1.000147989049620577e+06 +1.607000000000000000e+03,1.004870140863982495e+06 +1.608000000000000000e+03,1.009605863691371400e+06 +1.609000000000000000e+03,1.014354967454687459e+06 +1.610000000000000000e+03,1.019117265087781707e+06 +1.611000000000000000e+03,1.023892572489907267e+06 +1.612000000000000000e+03,1.028680708480527508e+06 +1.613000000000000000e+03,1.033481494754502084e+06 +1.614000000000000000e+03,1.038294755837666802e+06 +1.615000000000000000e+03,1.043120319042822579e+06 +1.616000000000000000e+03,1.047958014426150592e+06 +1.617000000000000000e+03,1.052807674744062591e+06 +1.618000000000000000e+03,1.057669135410502553e+06 +1.619000000000000000e+03,1.062542234454706311e+06 +1.620000000000000000e+03,1.067426812479431741e+06 +1.621000000000000000e+03,1.072322712619666476e+06 +1.622000000000000000e+03,1.077229780501820380e+06 +1.623000000000000000e+03,1.082147864203409059e+06 +1.624000000000000000e+03,1.087076814213236794e+06 +1.625000000000000000e+03,1.092016483392077731e+06 +1.626000000000000000e+03,1.096966726933866506e+06 +1.627000000000000000e+03,1.101927402327394811e+06 +1.628000000000000000e+03,1.106898369318520650e+06 +1.629000000000000000e+03,1.111879489872890757e+06 +1.630000000000000000e+03,1.116870628139177104e+06 +1.631000000000000000e+03,1.121871650412826799e+06 +1.632000000000000000e+03,1.126882425100329565e+06 +1.633000000000000000e+03,1.131902822683996987e+06 +1.634000000000000000e+03,1.136932715687256539e+06 +1.635000000000000000e+03,1.141971978640456917e+06 +1.636000000000000000e+03,1.147020488047183957e+06 +1.637000000000000000e+03,1.152078122351084370e+06 +1.638000000000000000e+03,1.157144761903194245e+06 +1.639000000000000000e+03,1.162220288929770933e+06 +1.640000000000000000e+03,1.167304587500623195e+06 +1.641000000000000000e+03,1.172397543497938197e+06 +1.642000000000000000e+03,1.177499044585599564e+06 +1.643000000000000000e+03,1.182608980178993894e+06 +1.644000000000000000e+03,1.187727241415300639e+06 +1.645000000000000000e+03,1.192853721124262549e+06 +1.646000000000000000e+03,1.197988313799429452e+06 +1.647000000000000000e+03,1.203130915569872595e+06 +1.648000000000000000e+03,1.208281424172365572e+06 +1.649000000000000000e+03,1.213439738924022531e+06 +1.650000000000000000e+03,1.218605760695394129e+06 +1.651000000000000000e+03,1.223779391884010984e+06 +1.652000000000000000e+03,1.228960536388373934e+06 +1.653000000000000000e+03,1.234149099582380382e+06 +1.654000000000000000e+03,1.239344988290185574e+06 +1.655000000000000000e+03,1.244548110761492513e+06 +1.656000000000000000e+03,1.249758376647262136e+06 +1.657000000000000000e+03,1.254975696975841885e+06 +1.658000000000000000e+03,1.260199984129503137e+06 +1.659000000000000000e+03,1.265431151821386069e+06 +1.660000000000000000e+03,1.270669115072842222e+06 +1.661000000000000000e+03,1.275913790191171225e+06 +1.662000000000000000e+03,1.281165094747745665e+06 +1.663000000000000000e+03,1.286422947556518018e+06 +1.664000000000000000e+03,1.291687268652904313e+06 +1.665000000000000000e+03,1.296957979273037286e+06 +1.666000000000000000e+03,1.302235001833386486e+06 +1.667000000000000000e+03,1.307518259910736466e+06 +1.668000000000000000e+03,1.312807678222518647e+06 +1.669000000000000000e+03,1.318103182607492199e+06 +1.670000000000000000e+03,1.323404700006766710e+06 +1.671000000000000000e+03,1.328712158445161534e+06 +1.672000000000000000e+03,1.334025487012898084e+06 +1.673000000000000000e+03,1.339344615847616689e+06 +1.674000000000000000e+03,1.344669476116714766e+06 +1.675000000000000000e+03,1.350000000000000000e+06 +1.676000000000000000e+03,1.355336120672654361e+06 +1.677000000000000000e+03,1.360677772288501728e+06 +1.678000000000000000e+03,1.366024889963576104e+06 +1.679000000000000000e+03,1.371377409759982955e+06 +1.680000000000000000e+03,1.376735268670051824e+06 +1.681000000000000000e+03,1.382098404600772308e+06 +1.682000000000000000e+03,1.387466756358508253e+06 +1.683000000000000000e+03,1.392840263633989030e+06 +1.684000000000000000e+03,1.398218866987568559e+06 +1.685000000000000000e+03,1.403602507834750228e+06 +1.686000000000000000e+03,1.408991128431971418e+06 +1.687000000000000000e+03,1.414384671862644376e+06 +1.688000000000000000e+03,1.419783082023447612e+06 +1.689000000000000000e+03,1.425186303610864794e+06 +1.690000000000000000e+03,1.430594282107963692e+06 +1.691000000000000000e+03,1.436006963771415642e+06 +1.692000000000000000e+03,1.441424295618746663e+06 +1.693000000000000000e+03,1.446846225415817928e+06 +1.694000000000000000e+03,1.452272701664532535e+06 +1.695000000000000000e+03,1.457703673590761144e+06 +1.696000000000000000e+03,1.463139091132486938e+06 +1.697000000000000000e+03,1.468578904928162228e+06 +1.698000000000000000e+03,1.474023066305273212e+06 +1.699000000000000000e+03,1.479471527269112412e+06 +1.700000000000000000e+03,1.484924240491749719e+06 +1.701000000000000000e+03,1.490381159301203676e+06 +1.702000000000000000e+03,1.495842237670804607e+06 +1.703000000000000000e+03,1.501307430208749836e+06 +1.704000000000000000e+03,1.506776692147844471e+06 +1.705000000000000000e+03,1.512249979335427284e+06 +1.706000000000000000e+03,1.517727248223474482e+06 +1.707000000000000000e+03,1.523208455858882051e+06 +1.708000000000000000e+03,1.528693559873920633e+06 +1.709000000000000000e+03,1.534182518476859666e+06 +1.710000000000000000e+03,1.539675290442760801e+06 +1.711000000000000000e+03,1.545171835104432655e+06 +1.712000000000000000e+03,1.550672112343547633e+06 +1.713000000000000000e+03,1.556176082581916591e+06 +1.714000000000000000e+03,1.561683706772917649e+06 +1.715000000000000000e+03,1.567194946393077262e+06 +1.716000000000000000e+03,1.572709763433800312e+06 +1.717000000000000000e+03,1.578228120393246645e+06 +1.718000000000000000e+03,1.583749980268350337e+06 +1.719000000000000000e+03,1.589275306546980981e+06 +1.720000000000000000e+03,1.594804063200241420e+06 +1.721000000000000000e+03,1.600336214674903778e+06 +1.722000000000000000e+03,1.605871725885974942e+06 +1.723000000000000000e+03,1.611410562209395459e+06 +1.724000000000000000e+03,1.616952689474865329e+06 +1.725000000000000000e+03,1.622498073958795285e+06 +1.726000000000000000e+03,1.628046682377381949e+06 +1.727000000000000000e+03,1.633598481879803818e+06 +1.728000000000000000e+03,1.639153440041535534e+06 +1.729000000000000000e+03,1.644711524857778801e+06 +1.730000000000000000e+03,1.650272704737008084e+06 +1.731000000000000000e+03,1.655836948494627606e+06 +1.732000000000000000e+03,1.661404225346739637e+06 +1.733000000000000000e+03,1.666974504904019181e+06 +1.734000000000000000e+03,1.672547757165696006e+06 +1.735000000000000000e+03,1.678123952513639582e+06 +1.736000000000000000e+03,1.683703061706546927e+06 +1.737000000000000000e+03,1.689285055874229874e+06 +1.738000000000000000e+03,1.694869906512001297e+06 +1.739000000000000000e+03,1.700457585475156782e+06 +1.740000000000000000e+03,1.706048064973551780e+06 +1.741000000000000000e+03,1.711641317566270940e+06 +1.742000000000000000e+03,1.717237316156389657e+06 +1.743000000000000000e+03,1.722836033985822927e+06 +1.744000000000000000e+03,1.728437444630265003e+06 +1.745000000000000000e+03,1.734041521994211012e+06 +1.746000000000000000e+03,1.739648240306068212e+06 +1.747000000000000000e+03,1.745257574113345705e+06 +1.748000000000000000e+03,1.750869498277927050e+06 diff --git a/quisp/satellite_csvs/S-C2_tatm_1550.csv b/quisp/satellite_csvs/S-C2_tatm_1550.csv new file mode 100644 index 000000000..047b0bcb5 --- /dev/null +++ b/quisp/satellite_csvs/S-C2_tatm_1550.csv @@ -0,0 +1,547 @@ +1.202000000000000000e+03,7.643202513897077166e-01 +1.203000000000000000e+03,7.649789680801469816e-01 +1.204000000000000000e+03,7.656379480304505991e-01 +1.205000000000000000e+03,7.662971879860867030e-01 +1.206000000000000000e+03,7.669566846447622988e-01 +1.207000000000000000e+03,7.676164346556961782e-01 +1.208000000000000000e+03,7.682764346188802884e-01 +1.209000000000000000e+03,7.689366810843287769e-01 +1.210000000000000000e+03,7.695971705513132699e-01 +1.211000000000000000e+03,7.702578994675851609e-01 +1.212000000000000000e+03,7.709188642285842441e-01 +1.213000000000000000e+03,7.715800611766344685e-01 +1.214000000000000000e+03,7.722414866001242606e-01 +1.215000000000000000e+03,7.729031367326737456e-01 +1.216000000000000000e+03,7.735650077522868706e-01 +1.217000000000000000e+03,7.742270957804892051e-01 +1.218000000000000000e+03,7.748893968814494215e-01 +1.219000000000000000e+03,7.755519070610873422e-01 +1.220000000000000000e+03,7.762146222661643336e-01 +1.221000000000000000e+03,7.768775383833588233e-01 +1.222000000000000000e+03,7.775406512383252755e-01 +1.223000000000000000e+03,7.782039565947369564e-01 +1.224000000000000000e+03,7.788674501533107142e-01 +1.225000000000000000e+03,7.795311275508155502e-01 +1.226000000000000000e+03,7.801949843590632039e-01 +1.227000000000000000e+03,7.808590160838810856e-01 +1.228000000000000000e+03,7.815232181640661135e-01 +1.229000000000000000e+03,7.821875859703216749e-01 +1.230000000000000000e+03,7.828521148041731603e-01 +1.231000000000000000e+03,7.835167998968666225e-01 +1.232000000000000000e+03,7.841816364082464519e-01 +1.233000000000000000e+03,7.848466194256128459e-01 +1.234000000000000000e+03,7.855117439625592946e-01 +1.235000000000000000e+03,7.861770049577896380e-01 +1.236000000000000000e+03,7.868423972739124750e-01 +1.237000000000000000e+03,7.875079156962154769e-01 +1.238000000000000000e+03,7.881735549314166089e-01 +1.239000000000000000e+03,7.888393096063935905e-01 +1.240000000000000000e+03,7.895051742668893757e-01 +1.241000000000000000e+03,7.901711433761956505e-01 +1.242000000000000000e+03,7.908372113138113502e-01 +1.243000000000000000e+03,7.915033723740777516e-01 +1.244000000000000000e+03,7.921696207647881405e-01 +1.245000000000000000e+03,7.928359506057728323e-01 +1.246000000000000000e+03,7.935023559274584359e-01 +1.247000000000000000e+03,7.941688306694004718e-01 +1.248000000000000000e+03,7.948353686787900108e-01 +1.249000000000000000e+03,7.955019637089327800e-01 +1.250000000000000000e+03,7.961686094177002904e-01 +1.251000000000000000e+03,7.968352993659536532e-01 +1.252000000000000000e+03,7.975020270159376423e-01 +1.253000000000000000e+03,7.981687857296462241e-01 +1.254000000000000000e+03,7.988355687671577776e-01 +1.255000000000000000e+03,7.995023692849397845e-01 +1.256000000000000000e+03,8.001691803341235421e-01 +1.257000000000000000e+03,8.008359948587460142e-01 +1.258000000000000000e+03,8.015028056939602630e-01 +1.259000000000000000e+03,8.021696055642131284e-01 +1.260000000000000000e+03,8.028363870813892689e-01 +1.261000000000000000e+03,8.035031427429213391e-01 +1.262000000000000000e+03,8.041698649298657520e-01 +1.263000000000000000e+03,8.048365459049424686e-01 +1.264000000000000000e+03,8.055031778105402607e-01 +1.265000000000000000e+03,8.061697526666837810e-01 +1.266000000000000000e+03,8.068362623689643298e-01 +1.267000000000000000e+03,8.075026986864326517e-01 +1.268000000000000000e+03,8.081690532594528742e-01 +1.269000000000000000e+03,8.088353175975172560e-01 +1.270000000000000000e+03,8.095014830770206338e-01 +1.271000000000000000e+03,8.101675409389946791e-01 +1.272000000000000000e+03,8.108334822867999669e-01 +1.273000000000000000e+03,8.114992980837767433e-01 +1.274000000000000000e+03,8.121649791508510630e-01 +1.275000000000000000e+03,8.128305161640991816e-01 +1.276000000000000000e+03,8.134958996522664298e-01 +1.277000000000000000e+03,8.141611199942402344e-01 +1.278000000000000000e+03,8.148261674164779533e-01 +1.279000000000000000e+03,8.154910319903879712e-01 +1.280000000000000000e+03,8.161557036296617218e-01 +1.281000000000000000e+03,8.168201720875591931e-01 +1.282000000000000000e+03,8.174844269541430286e-01 +1.283000000000000000e+03,8.181484576534642228e-01 +1.284000000000000000e+03,8.188122534406956365e-01 +1.285000000000000000e+03,8.194758033992142199e-01 +1.286000000000000000e+03,8.201390964376302772e-01 +1.287000000000000000e+03,8.208021212867635530e-01 +1.288000000000000000e+03,8.214648664965640279e-01 +1.289000000000000000e+03,8.221273204329788697e-01 +1.290000000000000000e+03,8.227894712747612083e-01 +1.291000000000000000e+03,8.234513070102242871e-01 +1.292000000000000000e+03,8.241128154339349976e-01 +1.293000000000000000e+03,8.247739841433510133e-01 +1.294000000000000000e+03,8.254348005353969731e-01 +1.295000000000000000e+03,8.260952518029797131e-01 +1.296000000000000000e+03,8.267553249314435471e-01 +1.297000000000000000e+03,8.274150066949612636e-01 +1.298000000000000000e+03,8.280742836528635076e-01 +1.299000000000000000e+03,8.287331421459032121e-01 +1.300000000000000000e+03,8.293915682924550836e-01 +1.301000000000000000e+03,8.300495479846498048e-01 +1.302000000000000000e+03,8.307070668844402928e-01 +1.303000000000000000e+03,8.313641104196021203e-01 +1.304000000000000000e+03,8.320206637796637716e-01 +1.305000000000000000e+03,8.326767119117689520e-01 +1.306000000000000000e+03,8.333322395164682872e-01 +1.307000000000000000e+03,8.339872310434400804e-01 +1.308000000000000000e+03,8.346416706871399027e-01 +1.309000000000000000e+03,8.352955423823770209e-01 +1.310000000000000000e+03,8.359488297998189932e-01 +1.311000000000000000e+03,8.366015163414208811e-01 +1.312000000000000000e+03,8.372535851357810754e-01 +1.313000000000000000e+03,8.379050190334215165e-01 +1.314000000000000000e+03,8.385558006019921962e-01 +1.315000000000000000e+03,8.392059121213991668e-01 +1.316000000000000000e+03,8.398553355788563879e-01 +1.317000000000000000e+03,8.405040526638585252e-01 +1.318000000000000000e+03,8.411520447630775887e-01 +1.319000000000000000e+03,8.417992929551807446e-01 +1.320000000000000000e+03,8.424457780055687461e-01 +1.321000000000000000e+03,8.430914803610368713e-01 +1.322000000000000000e+03,8.437363801443552580e-01 +1.323000000000000000e+03,8.443804571487715238e-01 +1.324000000000000000e+03,8.450236908324322282e-01 +1.325000000000000000e+03,8.456660603127266196e-01 +1.326000000000000000e+03,8.463075443605501125e-01 +1.327000000000000000e+03,8.469481213944889397e-01 +1.328000000000000000e+03,8.475877694749259783e-01 +1.329000000000000000e+03,8.482264662980678604e-01 +1.330000000000000000e+03,8.488641891898944802e-01 +1.331000000000000000e+03,8.495009151000304515e-01 +1.332000000000000000e+03,8.501366205955405153e-01 +1.333000000000000000e+03,8.507712818546482314e-01 +1.334000000000000000e+03,8.514048746603810613e-01 +1.335000000000000000e+03,8.520373743941399569e-01 +1.336000000000000000e+03,8.526687560291981161e-01 +1.337000000000000000e+03,8.532989941241273524e-01 +1.338000000000000000e+03,8.539280628161559639e-01 +1.339000000000000000e+03,8.545559358144583229e-01 +1.340000000000000000e+03,8.551825863933790739e-01 +1.341000000000000000e+03,8.558079873855939379e-01 +1.342000000000000000e+03,8.564321111752096760e-01 +1.343000000000000000e+03,8.570549296908046566e-01 +1.344000000000000000e+03,8.576764143984155764e-01 +1.345000000000000000e+03,8.582965362944696697e-01 +1.346000000000000000e+03,8.589152658986702882e-01 +1.347000000000000000e+03,8.595325732468348523e-01 +1.348000000000000000e+03,8.601484278836932784e-01 +1.349000000000000000e+03,8.607627988556477705e-01 +1.350000000000000000e+03,8.613756547035014144e-01 +1.351000000000000000e+03,8.619869634551580173e-01 +1.352000000000000000e+03,8.625966926183006311e-01 +1.353000000000000000e+03,8.632048091730524231e-01 +1.354000000000000000e+03,8.638112795646271103e-01 +1.355000000000000000e+03,8.644160696959759527e-01 +1.356000000000000000e+03,8.650191449204357452e-01 +1.357000000000000000e+03,8.656204700343881342e-01 +1.358000000000000000e+03,8.662200092699351428e-01 +1.359000000000000000e+03,8.668177262876017863e-01 +1.360000000000000000e+03,8.674135841690716608e-01 +1.361000000000000000e+03,8.680075454099671628e-01 +1.362000000000000000e+03,8.685995719126826664e-01 +1.363000000000000000e+03,8.691896249792810947e-01 +1.364000000000000000e+03,8.697776653044650974e-01 +1.365000000000000000e+03,8.703636529686340495e-01 +1.366000000000000000e+03,8.709475474310384158e-01 +1.367000000000000000e+03,8.715293075230455822e-01 +1.368000000000000000e+03,8.721088914415284776e-01 +1.369000000000000000e+03,8.726862567423925299e-01 +1.370000000000000000e+03,8.732613603342544994e-01 +1.371000000000000000e+03,8.738341584722898459e-01 +1.372000000000000000e+03,8.744046067522629473e-01 +1.373000000000000000e+03,8.749726601047590480e-01 +1.374000000000000000e+03,8.755382727896335870e-01 +1.375000000000000000e+03,8.761013983906980052e-01 +1.376000000000000000e+03,8.766619898106625675e-01 +1.377000000000000000e+03,8.772199992663530788e-01 +1.378000000000000000e+03,8.777753782842254715e-01 +1.379000000000000000e+03,8.783280776961978065e-01 +1.380000000000000000e+03,8.788780476358225568e-01 +1.381000000000000000e+03,8.794252375348236006e-01 +1.382000000000000000e+03,8.799695961200202365e-01 +1.383000000000000000e+03,8.805110714106642034e-01 +1.384000000000000000e+03,8.810496107162166801e-01 +1.385000000000000000e+03,8.815851606345886937e-01 +1.386000000000000000e+03,8.821176670508774631e-01 +1.387000000000000000e+03,8.826470751366218837e-01 +1.388000000000000000e+03,8.831733293496097925e-01 +1.389000000000000000e+03,8.836963734342671017e-01 +1.390000000000000000e+03,8.842161504226573321e-01 +1.391000000000000000e+03,8.847326026361255202e-01 +1.392000000000000000e+03,8.852456716876183629e-01 +1.393000000000000000e+03,8.857552984847131272e-01 +1.394000000000000000e+03,8.862614232333893005e-01 +1.395000000000000000e+03,8.867639854425791723e-01 +1.396000000000000000e+03,8.872629239295289905e-01 +1.397000000000000000e+03,8.877581768260102146e-01 +1.398000000000000000e+03,8.882496815854137306e-01 +1.399000000000000000e+03,8.887373749907659937e-01 +1.400000000000000000e+03,8.892211931637009625e-01 +1.401000000000000000e+03,8.897010715744289033e-01 +1.402000000000000000e+03,8.901769450527347027e-01 +1.403000000000000000e+03,8.906487478000466584e-01 +1.404000000000000000e+03,8.911164134026102746e-01 +1.405000000000000000e+03,8.915798748458055867e-01 +1.406000000000000000e+03,8.920390645296437659e-01 +1.407000000000000000e+03,8.924939142854797502e-01 +1.408000000000000000e+03,8.929443553939749867e-01 +1.409000000000000000e+03,8.933903186043481437e-01 +1.410000000000000000e+03,8.938317341549435469e-01 +1.411000000000000000e+03,8.942685317951535318e-01 +1.412000000000000000e+03,8.947006408087244678e-01 +1.413000000000000000e+03,8.951279900384768728e-01 +1.414000000000000000e+03,8.955505079124675971e-01 +1.415000000000000000e+03,8.959681224716211645e-01 +1.416000000000000000e+03,8.963807613988542533e-01 +1.417000000000000000e+03,8.967883520497149652e-01 +1.418000000000000000e+03,8.971908214845568663e-01 +1.419000000000000000e+03,8.975880965022645652e-01 +1.420000000000000000e+03,8.979801036755439281e-01 +1.421000000000000000e+03,8.983667693877875893e-01 +1.422000000000000000e+03,8.987480198715230850e-01 +1.423000000000000000e+03,8.991237812484456082e-01 +1.424000000000000000e+03,8.994939795710360508e-01 +1.425000000000000000e+03,8.998585408657575613e-01 +1.426000000000000000e+03,9.002173911778224014e-01 +1.427000000000000000e+03,9.005704566175138925e-01 +1.428000000000000000e+03,9.009176634080441337e-01 +1.429000000000000000e+03,9.012589379349236207e-01 +1.430000000000000000e+03,9.015942067968123474e-01 +1.431000000000000000e+03,9.019233968578173055e-01 +1.432000000000000000e+03,9.022464353011943050e-01 +1.433000000000000000e+03,9.025632496844088193e-01 +1.434000000000000000e+03,9.028737679954997875e-01 +1.435000000000000000e+03,9.031779187106903084e-01 +1.436000000000000000e+03,9.034756308531763924e-01 +1.437000000000000000e+03,9.037668340530239375e-01 +1.438000000000000000e+03,9.040514586080942161e-01 +1.439000000000000000e+03,9.043294355459133849e-01 +1.440000000000000000e+03,9.046006966863949783e-01 +1.441000000000000000e+03,9.048651747053171324e-01 +1.442000000000000000e+03,9.051228031984510647e-01 +1.443000000000000000e+03,9.053735167462308997e-01 +1.444000000000000000e+03,9.056172509788494862e-01 +1.445000000000000000e+03,9.058539426416565288e-01 +1.446000000000000000e+03,9.060835296607351319e-01 +1.447000000000000000e+03,9.063059512085213099e-01 +1.448000000000000000e+03,9.065211477693323472e-01 +1.449000000000000000e+03,9.067290612046603471e-01 +1.450000000000000000e+03,9.069296348180864165e-01 +1.451000000000000000e+03,9.071228134196669401e-01 +1.452000000000000000e+03,9.073085433896391772e-01 +1.453000000000000000e+03,9.074867727412921914e-01 +1.454000000000000000e+03,9.076574511828466862e-01 +1.455000000000000000e+03,9.078205301781857584e-01 +1.456000000000000000e+03,9.079759630062790299e-01 +1.457000000000000000e+03,9.081237048191417305e-01 +1.458000000000000000e+03,9.082637126981704112e-01 +1.459000000000000000e+03,9.083959457087008582e-01 +1.460000000000000000e+03,9.085203649526332192e-01 +1.461000000000000000e+03,9.086369336189741297e-01 +1.462000000000000000e+03,9.087456170321474014e-01 +1.463000000000000000e+03,9.088463826979328308e-01 +1.464000000000000000e+03,9.089392003468931280e-01 +1.465000000000000000e+03,9.090240419751576262e-01 +1.466000000000000000e+03,9.091008818824393156e-01 +1.467000000000000000e+03,9.091696967071639657e-01 +1.468000000000000000e+03,9.092304654586046420e-01 +1.469000000000000000e+03,9.092831695459172581e-01 +1.470000000000000000e+03,9.093277928039856794e-01 +1.471000000000000000e+03,9.093643215159935567e-01 +1.472000000000000000e+03,9.093927444326496135e-01 +1.473000000000000000e+03,9.094130527880038839e-01 +1.474000000000000000e+03,9.094252403118027184e-01 +1.475000000000000000e+03,9.094293032383444775e-01 +1.476000000000000000e+03,9.094252403118027184e-01 +1.477000000000000000e+03,9.094130527880038839e-01 +1.478000000000000000e+03,9.093927444326496135e-01 +1.479000000000000000e+03,9.093643215159935567e-01 +1.480000000000000000e+03,9.093277928039856794e-01 +1.481000000000000000e+03,9.092831695459172581e-01 +1.482000000000000000e+03,9.092304654586046420e-01 +1.483000000000000000e+03,9.091696967071639657e-01 +1.484000000000000000e+03,9.091008818824393156e-01 +1.485000000000000000e+03,9.090240419751576262e-01 +1.486000000000000000e+03,9.089392003468931280e-01 +1.487000000000000000e+03,9.088463826979328308e-01 +1.488000000000000000e+03,9.087456170321474014e-01 +1.489000000000000000e+03,9.086369336189741297e-01 +1.490000000000000000e+03,9.085203649526332192e-01 +1.491000000000000000e+03,9.083959457087008582e-01 +1.492000000000000000e+03,9.082637126981704112e-01 +1.493000000000000000e+03,9.081237048191417305e-01 +1.494000000000000000e+03,9.079759630062790299e-01 +1.495000000000000000e+03,9.078205301781857584e-01 +1.496000000000000000e+03,9.076574511828466862e-01 +1.497000000000000000e+03,9.074867727412921914e-01 +1.498000000000000000e+03,9.073085433896391772e-01 +1.499000000000000000e+03,9.071228134196669401e-01 +1.500000000000000000e+03,9.069296348180864165e-01 +1.501000000000000000e+03,9.067290612046603471e-01 +1.502000000000000000e+03,9.065211477693323472e-01 +1.503000000000000000e+03,9.063059512085213099e-01 +1.504000000000000000e+03,9.060835296607351319e-01 +1.505000000000000000e+03,9.058539426416565288e-01 +1.506000000000000000e+03,9.056172509788494862e-01 +1.507000000000000000e+03,9.053735167462308997e-01 +1.508000000000000000e+03,9.051228031984510647e-01 +1.509000000000000000e+03,9.048651747053171324e-01 +1.510000000000000000e+03,9.046006966863949783e-01 +1.511000000000000000e+03,9.043294355459133849e-01 +1.512000000000000000e+03,9.040514586080942161e-01 +1.513000000000000000e+03,9.037668340530239375e-01 +1.514000000000000000e+03,9.034756308531763924e-01 +1.515000000000000000e+03,9.031779187106903084e-01 +1.516000000000000000e+03,9.028737679954997875e-01 +1.517000000000000000e+03,9.025632496844088193e-01 +1.518000000000000000e+03,9.022464353011943050e-01 +1.519000000000000000e+03,9.019233968578173055e-01 +1.520000000000000000e+03,9.015942067968123474e-01 +1.521000000000000000e+03,9.012589379349236207e-01 +1.522000000000000000e+03,9.009176634080441337e-01 +1.523000000000000000e+03,9.005704566175138925e-01 +1.524000000000000000e+03,9.002173911778224014e-01 +1.525000000000000000e+03,8.998585408657575613e-01 +1.526000000000000000e+03,8.994939795710360508e-01 +1.527000000000000000e+03,8.991237812484456082e-01 +1.528000000000000000e+03,8.987480198715230850e-01 +1.529000000000000000e+03,8.983667693877875893e-01 +1.530000000000000000e+03,8.979801036755439281e-01 +1.531000000000000000e+03,8.975880965022645652e-01 +1.532000000000000000e+03,8.971908214845568663e-01 +1.533000000000000000e+03,8.967883520497149652e-01 +1.534000000000000000e+03,8.963807613988542533e-01 +1.535000000000000000e+03,8.959681224716211645e-01 +1.536000000000000000e+03,8.955505079124675971e-01 +1.537000000000000000e+03,8.951279900384768728e-01 +1.538000000000000000e+03,8.947006408087244678e-01 +1.539000000000000000e+03,8.942685317951535318e-01 +1.540000000000000000e+03,8.938317341549435469e-01 +1.541000000000000000e+03,8.933903186043481437e-01 +1.542000000000000000e+03,8.929443553939749867e-01 +1.543000000000000000e+03,8.924939142854797502e-01 +1.544000000000000000e+03,8.920390645296437659e-01 +1.545000000000000000e+03,8.915798748458055867e-01 +1.546000000000000000e+03,8.911164134026102746e-01 +1.547000000000000000e+03,8.906487478000466584e-01 +1.548000000000000000e+03,8.901769450527347027e-01 +1.549000000000000000e+03,8.897010715744289033e-01 +1.550000000000000000e+03,8.892211931637009625e-01 +1.551000000000000000e+03,8.887373749907659937e-01 +1.552000000000000000e+03,8.882496815854137306e-01 +1.553000000000000000e+03,8.877581768260102146e-01 +1.554000000000000000e+03,8.872629239295289905e-01 +1.555000000000000000e+03,8.867639854425791723e-01 +1.556000000000000000e+03,8.862614232333893005e-01 +1.557000000000000000e+03,8.857552984847131272e-01 +1.558000000000000000e+03,8.852456716876183629e-01 +1.559000000000000000e+03,8.847326026361255202e-01 +1.560000000000000000e+03,8.842161504226573321e-01 +1.561000000000000000e+03,8.836963734342671017e-01 +1.562000000000000000e+03,8.831733293496097925e-01 +1.563000000000000000e+03,8.826470751366218837e-01 +1.564000000000000000e+03,8.821176670508774631e-01 +1.565000000000000000e+03,8.815851606345886937e-01 +1.566000000000000000e+03,8.810496107162166801e-01 +1.567000000000000000e+03,8.805110714106642034e-01 +1.568000000000000000e+03,8.799695961200202365e-01 +1.569000000000000000e+03,8.794252375348236006e-01 +1.570000000000000000e+03,8.788780476358225568e-01 +1.571000000000000000e+03,8.783280776961978065e-01 +1.572000000000000000e+03,8.777753782842254715e-01 +1.573000000000000000e+03,8.772199992663530788e-01 +1.574000000000000000e+03,8.766619898106625675e-01 +1.575000000000000000e+03,8.761013983906980052e-01 +1.576000000000000000e+03,8.755382727896335870e-01 +1.577000000000000000e+03,8.749726601047590480e-01 +1.578000000000000000e+03,8.744046067522629473e-01 +1.579000000000000000e+03,8.738341584722898459e-01 +1.580000000000000000e+03,8.732613603342544994e-01 +1.581000000000000000e+03,8.726862567423925299e-01 +1.582000000000000000e+03,8.721088914415284776e-01 +1.583000000000000000e+03,8.715293075230455822e-01 +1.584000000000000000e+03,8.709475474310384158e-01 +1.585000000000000000e+03,8.703636529686340495e-01 +1.586000000000000000e+03,8.697776653044650974e-01 +1.587000000000000000e+03,8.691896249792810947e-01 +1.588000000000000000e+03,8.685995719126826664e-01 +1.589000000000000000e+03,8.680075454099671628e-01 +1.590000000000000000e+03,8.674135841690716608e-01 +1.591000000000000000e+03,8.668177262876017863e-01 +1.592000000000000000e+03,8.662200092699351428e-01 +1.593000000000000000e+03,8.656204700343881342e-01 +1.594000000000000000e+03,8.650191449204357452e-01 +1.595000000000000000e+03,8.644160696959759527e-01 +1.596000000000000000e+03,8.638112795646271103e-01 +1.597000000000000000e+03,8.632048091730524231e-01 +1.598000000000000000e+03,8.625966926183006311e-01 +1.599000000000000000e+03,8.619869634551580173e-01 +1.600000000000000000e+03,8.613756547035014144e-01 +1.601000000000000000e+03,8.607627988556477705e-01 +1.602000000000000000e+03,8.601484278836932784e-01 +1.603000000000000000e+03,8.595325732468348523e-01 +1.604000000000000000e+03,8.589152658986702882e-01 +1.605000000000000000e+03,8.582965362944696697e-01 +1.606000000000000000e+03,8.576764143984155764e-01 +1.607000000000000000e+03,8.570549296908046566e-01 +1.608000000000000000e+03,8.564321111752096760e-01 +1.609000000000000000e+03,8.558079873855939379e-01 +1.610000000000000000e+03,8.551825863933790739e-01 +1.611000000000000000e+03,8.545559358144583229e-01 +1.612000000000000000e+03,8.539280628161559639e-01 +1.613000000000000000e+03,8.532989941241273524e-01 +1.614000000000000000e+03,8.526687560291981161e-01 +1.615000000000000000e+03,8.520373743941399569e-01 +1.616000000000000000e+03,8.514048746603810613e-01 +1.617000000000000000e+03,8.507712818546482314e-01 +1.618000000000000000e+03,8.501366205955405153e-01 +1.619000000000000000e+03,8.495009151000304515e-01 +1.620000000000000000e+03,8.488641891898944802e-01 +1.621000000000000000e+03,8.482264662980678604e-01 +1.622000000000000000e+03,8.475877694749259783e-01 +1.623000000000000000e+03,8.469481213944889397e-01 +1.624000000000000000e+03,8.463075443605501125e-01 +1.625000000000000000e+03,8.456660603127266196e-01 +1.626000000000000000e+03,8.450236908324322282e-01 +1.627000000000000000e+03,8.443804571487715238e-01 +1.628000000000000000e+03,8.437363801443552580e-01 +1.629000000000000000e+03,8.430914803610368713e-01 +1.630000000000000000e+03,8.424457780055687461e-01 +1.631000000000000000e+03,8.417992929551807446e-01 +1.632000000000000000e+03,8.411520447630775887e-01 +1.633000000000000000e+03,8.405040526638585252e-01 +1.634000000000000000e+03,8.398553355788563879e-01 +1.635000000000000000e+03,8.392059121213991668e-01 +1.636000000000000000e+03,8.385558006019921962e-01 +1.637000000000000000e+03,8.379050190334215165e-01 +1.638000000000000000e+03,8.372535851357810754e-01 +1.639000000000000000e+03,8.366015163414208811e-01 +1.640000000000000000e+03,8.359488297998189932e-01 +1.641000000000000000e+03,8.352955423823770209e-01 +1.642000000000000000e+03,8.346416706871399027e-01 +1.643000000000000000e+03,8.339872310434400804e-01 +1.644000000000000000e+03,8.333322395164682872e-01 +1.645000000000000000e+03,8.326767119117689520e-01 +1.646000000000000000e+03,8.320206637796637716e-01 +1.647000000000000000e+03,8.313641104196021203e-01 +1.648000000000000000e+03,8.307070668844402928e-01 +1.649000000000000000e+03,8.300495479846498048e-01 +1.650000000000000000e+03,8.293915682924550836e-01 +1.651000000000000000e+03,8.287331421459032121e-01 +1.652000000000000000e+03,8.280742836528635076e-01 +1.653000000000000000e+03,8.274150066949612636e-01 +1.654000000000000000e+03,8.267553249314435471e-01 +1.655000000000000000e+03,8.260952518029797131e-01 +1.656000000000000000e+03,8.254348005353969731e-01 +1.657000000000000000e+03,8.247739841433510133e-01 +1.658000000000000000e+03,8.241128154339349976e-01 +1.659000000000000000e+03,8.234513070102242871e-01 +1.660000000000000000e+03,8.227894712747612083e-01 +1.661000000000000000e+03,8.221273204329788697e-01 +1.662000000000000000e+03,8.214648664965640279e-01 +1.663000000000000000e+03,8.208021212867635530e-01 +1.664000000000000000e+03,8.201390964376302772e-01 +1.665000000000000000e+03,8.194758033992142199e-01 +1.666000000000000000e+03,8.188122534406956365e-01 +1.667000000000000000e+03,8.181484576534642228e-01 +1.668000000000000000e+03,8.174844269541430286e-01 +1.669000000000000000e+03,8.168201720875591931e-01 +1.670000000000000000e+03,8.161557036296617218e-01 +1.671000000000000000e+03,8.154910319903879712e-01 +1.672000000000000000e+03,8.148261674164779533e-01 +1.673000000000000000e+03,8.141611199942402344e-01 +1.674000000000000000e+03,8.134958996522664298e-01 +1.675000000000000000e+03,8.128305161640991816e-01 +1.676000000000000000e+03,8.121649791508510630e-01 +1.677000000000000000e+03,8.114992980837767433e-01 +1.678000000000000000e+03,8.108334822867999669e-01 +1.679000000000000000e+03,8.101675409389946791e-01 +1.680000000000000000e+03,8.095014830770206338e-01 +1.681000000000000000e+03,8.088353175975172560e-01 +1.682000000000000000e+03,8.081690532594528742e-01 +1.683000000000000000e+03,8.075026986864326517e-01 +1.684000000000000000e+03,8.068362623689643298e-01 +1.685000000000000000e+03,8.061697526666837810e-01 +1.686000000000000000e+03,8.055031778105402607e-01 +1.687000000000000000e+03,8.048365459049424686e-01 +1.688000000000000000e+03,8.041698649298657520e-01 +1.689000000000000000e+03,8.035031427429213391e-01 +1.690000000000000000e+03,8.028363870813892689e-01 +1.691000000000000000e+03,8.021696055642131284e-01 +1.692000000000000000e+03,8.015028056939602630e-01 +1.693000000000000000e+03,8.008359948587460142e-01 +1.694000000000000000e+03,8.001691803341235421e-01 +1.695000000000000000e+03,7.995023692849397845e-01 +1.696000000000000000e+03,7.988355687671577776e-01 +1.697000000000000000e+03,7.981687857296462241e-01 +1.698000000000000000e+03,7.975020270159376423e-01 +1.699000000000000000e+03,7.968352993659536532e-01 +1.700000000000000000e+03,7.961686094177002904e-01 +1.701000000000000000e+03,7.955019637089327800e-01 +1.702000000000000000e+03,7.948353686787900108e-01 +1.703000000000000000e+03,7.941688306694004718e-01 +1.704000000000000000e+03,7.935023559274584359e-01 +1.705000000000000000e+03,7.928359506057728323e-01 +1.706000000000000000e+03,7.921696207647881405e-01 +1.707000000000000000e+03,7.915033723740777516e-01 +1.708000000000000000e+03,7.908372113138113502e-01 +1.709000000000000000e+03,7.901711433761956505e-01 +1.710000000000000000e+03,7.895051742668893757e-01 +1.711000000000000000e+03,7.888393096063935905e-01 +1.712000000000000000e+03,7.881735549314166089e-01 +1.713000000000000000e+03,7.875079156962154769e-01 +1.714000000000000000e+03,7.868423972739124750e-01 +1.715000000000000000e+03,7.861770049577896380e-01 +1.716000000000000000e+03,7.855117439625592946e-01 +1.717000000000000000e+03,7.848466194256128459e-01 +1.718000000000000000e+03,7.841816364082464519e-01 +1.719000000000000000e+03,7.835167998968666225e-01 +1.720000000000000000e+03,7.828521148041731603e-01 +1.721000000000000000e+03,7.821875859703216749e-01 +1.722000000000000000e+03,7.815232181640661135e-01 +1.723000000000000000e+03,7.808590160838810856e-01 +1.724000000000000000e+03,7.801949843590632039e-01 +1.725000000000000000e+03,7.795311275508155502e-01 +1.726000000000000000e+03,7.788674501533107142e-01 +1.727000000000000000e+03,7.782039565947369564e-01 +1.728000000000000000e+03,7.775406512383252755e-01 +1.729000000000000000e+03,7.768775383833588233e-01 +1.730000000000000000e+03,7.762146222661643336e-01 +1.731000000000000000e+03,7.755519070610873422e-01 +1.732000000000000000e+03,7.748893968814494215e-01 +1.733000000000000000e+03,7.742270957804892051e-01 +1.734000000000000000e+03,7.735650077522868706e-01 +1.735000000000000000e+03,7.729031367326737456e-01 +1.736000000000000000e+03,7.722414866001242606e-01 +1.737000000000000000e+03,7.715800611766344685e-01 +1.738000000000000000e+03,7.709188642285842441e-01 +1.739000000000000000e+03,7.702578994675851609e-01 +1.740000000000000000e+03,7.695971705513132699e-01 +1.741000000000000000e+03,7.689366810843287769e-01 +1.742000000000000000e+03,7.682764346188802884e-01 +1.743000000000000000e+03,7.676164346556961782e-01 +1.744000000000000000e+03,7.669566846447622988e-01 +1.745000000000000000e+03,7.662971879860867030e-01 +1.746000000000000000e+03,7.656379480304505991e-01 +1.747000000000000000e+03,7.649789680801469816e-01 +1.748000000000000000e+03,7.643202513897077166e-01 diff --git a/quisp/simulations/.gitignore b/quisp/simulations/.gitignore new file mode 100644 index 000000000..afed0735d --- /dev/null +++ b/quisp/simulations/.gitignore @@ -0,0 +1 @@ +*.csv diff --git a/quisp/simulations/simulation_test.ini b/quisp/simulations/simulation_test.ini index 76375ff3e..ea21819bb 100644 --- a/quisp/simulations/simulation_test.ini +++ b/quisp/simulations/simulation_test.ini @@ -1,5 +1,6 @@ [General] seed-set = 1 + sim-time-limit = 20s **.initial_notification_timing_buffer = 10s # when to start the BSA timing notification. **.app.request_generation_interval = 2s @@ -10,6 +11,7 @@ sim-time-limit = 20s **.scalar-recording = false **.vector-recording = false **.speed_of_light_in_fiber = 208189.206944km +**.speed_of_light_in_FS = 299792.458km **.channel_loss_rate = 0 **.channel_x_error_rate = 0 @@ -75,7 +77,32 @@ network = networks.Simple_MM [Config NoErrorMSM] network = networks.Simple_MSM +**.EndNode1.is_initiator = true +**.qrsa.hm.link_tomography = true +**.qrsa.hm.initial_purification = 0 +**.qrsa.hm.purification_type = 0 + + +[Config NoErrorMM_SAT] +network = networks.Simple_MM_SAT **.qrsa.hm.link_tomography = true +**.Aatm_CSV = "../satellite_csvs/Micius-Nice_tatm_1550.csv" +**.distance_CSV = "../satellite_csvs/Micius-Nice_distance.csv" +**.buffers = 100 +**.wavelength = 1550nm +**.CSV_varies_delay = true +**.qrsa.hm.initial_purification = 0 +**.qrsa.hm.purification_type = 0 + +[Config NoErrorMSM_SAT] +network = networks.Simple_MSM_SAT +**.qrsa.hm.link_tomography = false +**.Aatm_CSV = "../satellite_csvs/Micius-Nice_tatm_1550.csv" +**.distance_CSV = "../satellite_csvs/Micius-Nice_distance.csv" +**.SAT_resync_delay = 10ms +**.buffers = 100 +**.wavelength = 1550nm +**.CSV_varies_delay = true **.qrsa.hm.initial_purification = 0 **.qrsa.hm.purification_type = 0 diff --git a/quisp/test_utils/ChannelType.h b/quisp/test_utils/ChannelType.h new file mode 100644 index 000000000..395a37ca1 --- /dev/null +++ b/quisp/test_utils/ChannelType.h @@ -0,0 +1,51 @@ +#pragma once + +#include +#include +#include "Configuration.h" + +namespace quisp_test { +namespace channel_type { + +using namespace omnetpp; + +class TestChannelType : public cChannelType { + private: + cProperties *props; + cConfiguration *cfg; + + public: + TestChannelType(const char *name) : cChannelType(name) { + using quisp_test::configuration::Configuration; + cfg = new Configuration; + props = new cProperties; + } + + cChannel *createChannelObject() override { return nullptr; }; + void addParametersTo(cChannel *channel) override{}; + void applyPatternAssignments(cComponent *component) override{}; + // void setupGateVectors(cModule *module) override{}; + // void buildInside(cModule *module) override{}; + + // methods redefined from cComponentType + cProperties *getProperties() const override { return props; }; + cProperties *getParamProperties(const char *paramName) const override { return nullptr; }; + cProperties *getGateProperties(const char *gateName) const override { return nullptr; }; + cProperties *getSubmoduleProperties(const char *submoduleName, const char *submoduleType) const override { return nullptr; }; + cProperties *getConnectionProperties(int connectionId, const char *channelType) const override { return nullptr; }; + std::string getPackageProperty(const char *name) const override { return std::string("mock package property"); }; + const char *getImplementationClassName() const override { return "TestModuleType"; }; + std::string getCxxNamespace() const override { return std::string("mock namespace"); }; +#if OMNETPP_VERSION >= 0x600 && OMNETPP_BUILDNUM > 1531 + std::string getCxxNamespaceForType(const char *type) const override { return "mock cxx namespace"; }; +#endif + + const char *getSourceFileName() const override { return "no source"; }; + bool isInnerType() const override { return false; }; + + std::string str() const override { return "test module type"; }; + std::string getNedSource() const override { return ""; }; +}; + +} // namespace channel_type +} // namespace quisp_test diff --git a/quisp/test_utils/Gate.cc b/quisp/test_utils/Gate.cc index 39e77f412..34b6f3997 100644 --- a/quisp/test_utils/Gate.cc +++ b/quisp/test_utils/Gate.cc @@ -8,6 +8,7 @@ namespace gate { using omnetpp::cSimulation; TempGate::TempGate() {} + bool TempGate::deliver(cMessage *msg, const omnetpp::SendOptions &options, simtime_t at) { return true; } TestGate::TestGate(cModule *mod, const char *name) { @@ -16,7 +17,8 @@ TestGate::TestGate(cModule *mod, const char *name) { desc->name = new omnetpp::cGate::Name{name, omnetpp::cGate::Type::OUTPUT}; desc->owner = mod; // output gate needs nextGate to be filled. actually temp_gate do nothing. - nextGate = &temp_gate; + temp_gate = new TempGate(); + nextGate = temp_gate; desc->setOutputGate(this); } @@ -29,5 +31,10 @@ bool TestGate::deliver(cMessage *msg, const omnetpp::SendOptions &options, simti return true; } +void TestGate::quiet_connectTo(cGate *target) { + nextGate = target; + // target->prevGate = this; +} + } // namespace gate } // namespace quisp_test diff --git a/quisp/test_utils/Gate.h b/quisp/test_utils/Gate.h index a45b45eda..9b8af7477 100644 --- a/quisp/test_utils/Gate.h +++ b/quisp/test_utils/Gate.h @@ -31,9 +31,10 @@ class TestGate : public omnetpp::cGate { public: explicit TestGate(cModule *mod, const char *name); std::vector messages; + void quiet_connectTo(cGate *target); // To connect to a gate skipping all the listeners checks, which create problems if a full-fledged sim environment is not up. protected: - TempGate temp_gate; + TempGate *temp_gate; bool deliver(cMessage *msg, const omnetpp::SendOptions &options, simtime_t at) override; }; diff --git a/quisp/test_utils/MockFreeSpaceChannel.cc b/quisp/test_utils/MockFreeSpaceChannel.cc new file mode 100644 index 000000000..3a06a2723 --- /dev/null +++ b/quisp/test_utils/MockFreeSpaceChannel.cc @@ -0,0 +1,29 @@ +#include "MockFreeSpaceChannel.h" +#include "ChannelType.h" +#include "Configuration.h" +#include "TestUtilFunctions.h" +#include "omnetpp/cchannel.h" +#include "omnetpp/ccomponent.h" + +namespace quisp_test::FSChannel { + +using quisp_test::channel_type::TestChannelType; +using namespace quisp_test::utils; + +MockFreeSpaceChannel::MockFreeSpaceChannel(const char* channel_name) : quisp::channels::FSChannel() { + setComponentType(new TestChannelType("test channel")); + setName(channel_name); + + cfg = new quisp_test::configuration::Configuration; + props = new cProperties; + + auto* sim = getTestSimulation(); + sim->registerComponent(this); +}; + +MockFreeSpaceChannel::~MockFreeSpaceChannel() { this->getSourceGate()->disconnect(); }; + +void MockFreeSpaceChannel::setNext_check_time(SimTime next_check) { next_check_time = next_check; } + +SimTime MockFreeSpaceChannel::getNext_check_time() { return next_check_time; } +} // namespace quisp_test::FSChannel diff --git a/quisp/test_utils/MockFreeSpaceChannel.h b/quisp/test_utils/MockFreeSpaceChannel.h new file mode 100644 index 000000000..8ecef5678 --- /dev/null +++ b/quisp/test_utils/MockFreeSpaceChannel.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include "channels/FSChannel.h" + +namespace quisp_test::FSChannel { + +class MockFreeSpaceChannel : public quisp::channels::FSChannel { + public: + explicit MockFreeSpaceChannel(const char* channel_name); + ~MockFreeSpaceChannel(); + void initialize() override{}; + void setNext_check_time(SimTime next_check); + virtual cProperties* getProperties() const override { return props; }; + SimTime getNext_check_time() override; + void addResultRecorders() override{}; + virtual simtime_t getTransmissionFinishTime() const override { return simTime(); }; + + private: + SimTime next_check_time; + cProperties* props; + cConfiguration* cfg; +}; +} // namespace quisp_test::FSChannel diff --git a/quisp/test_utils/Stub.cc b/quisp/test_utils/Stub.cc new file mode 100644 index 000000000..3c53ade41 --- /dev/null +++ b/quisp/test_utils/Stub.cc @@ -0,0 +1,7 @@ +#include "Stub.h" + +Stub::Stub() { + setComponentType(new TestModuleType("stub")); + auto *sim = quisp_test::utils::getTestSimulation(); + sim->registerComponent(this); +} diff --git a/quisp/test_utils/Stub.h b/quisp/test_utils/Stub.h new file mode 100644 index 000000000..4f41eb8ed --- /dev/null +++ b/quisp/test_utils/Stub.h @@ -0,0 +1,22 @@ +/* + * Stub.h + * + * Created on: Jan 18, 2024 + * Author: paolo + * I use this class in tests: whenever a Channel needs to be included in a Module's test, I + * plug one end to the module under test and the other to this stub. + */ + +#pragma once + +#include +#include "ModuleType.h" +#include "TestUtilFunctions.h" + +using quisp_test::module_type::TestModuleType; + +class Stub : public omnetpp::cModule { + public: + explicit Stub(); + void addResultRecorders() override{}; +}; diff --git a/quisp/test_utils/TestUtilFunctions.cc b/quisp/test_utils/TestUtilFunctions.cc index f0c13a707..2c632062e 100644 --- a/quisp/test_utils/TestUtilFunctions.cc +++ b/quisp/test_utils/TestUtilFunctions.cc @@ -70,6 +70,66 @@ void setParObject(cModule *module, const char *name, cObject *val) { module->addPar(p); } +void setParInt(cChannel *channel, const char *name, const int val) { + if (channel->findPar(name) != -1) { + channel->par(name) = val; + return; + } + cParImpl *p = new cIntParImpl(); + p->setName(name); + p->setIntValue(val); + p->setIsMutable(true); + channel->addPar(p); +} + +void setParDouble(cChannel *channel, const char *name, const double val) { + if (channel->findPar(name) != -1) { + channel->par(name) = val; + return; + } + cParImpl *p = new cDoubleParImpl(); + p->setName(name); + p->setDoubleValue(val); + p->setIsMutable(true); + channel->addPar(p); +} + +void setParStr(cChannel *channel, const char *name, const char *val) { + if (channel->findPar(name) != -1) { + channel->par(name) = val; + return; + } + cParImpl *p = new cStringParImpl(); + p->setName(name); + p->setStringValue(val); + p->setIsMutable(true); + channel->addPar(p); +} + +void setParBool(cChannel *channel, const char *name, const bool val) { + if (channel->findPar(name) != -1) { + channel->par(name) = val; + return; + } + cParImpl *p = new cBoolParImpl(); + p->setName(name); + p->setBoolValue(val); + p->setIsMutable(true); + channel->addPar(p); +} + +void setParObject(cChannel *channel, const char *name, cObject *val) { + if (channel->findPar(name) != -1) { + channel->par(name) = val; + return; + } + cParImpl *p = new cObjectParImpl(); + p->setName(name); + p->setObjectValue(val); + p->setIsMutable(true); + channel->addPar(p); +} + TestSimulation *prepareSimulation() { using quisp_test::env::StaticEnv; auto *env = dynamic_cast(cSimulation::getStaticEnvir()); diff --git a/quisp/test_utils/TestUtilFunctions.h b/quisp/test_utils/TestUtilFunctions.h index 2589d8f1c..ff7ba92b2 100644 --- a/quisp/test_utils/TestUtilFunctions.h +++ b/quisp/test_utils/TestUtilFunctions.h @@ -7,6 +7,7 @@ namespace quisp_test { namespace utils { +using omnetpp::cChannel; using omnetpp::cModule; using quisp_test::simulation::TestSimulation; @@ -15,6 +16,11 @@ void setParDouble(cModule *module, const char *name, const double val); void setParBool(cModule *module, const char *name, const bool val); void setParStr(cModule *module, const char *name, const char *val); void setParObject(cModule *module, const char *name, omnetpp::cObject *val); +void setParInt(cChannel *channel, const char *name, const int val); +void setParDouble(cChannel *channel, const char *name, const double val); +void setParBool(cChannel *channel, const char *name, const bool val); +void setParStr(cChannel *channel, const char *name, const char *val); +void setParObject(cChannel *channel, const char *name, omnetpp::cObject *val); TestSimulation *prepareSimulation(); TestSimulation *getTestSimulation(); omnetpp::cEnvir *createStaticEnv(); diff --git a/quisp/test_utils/TestUtils.h b/quisp/test_utils/TestUtils.h index 4de7ea648..6c2a04f69 100644 --- a/quisp/test_utils/TestUtils.h +++ b/quisp/test_utils/TestUtils.h @@ -1,11 +1,14 @@ #pragma once #include "AccessPrivate.h" +#include "ChannelType.h" #include "Gate.h" +#include "MockFreeSpaceChannel.h" #include "ModuleType.h" #include "QNode.h" #include "Simulation.h" #include "StaticEnv.h" +#include "Stub.h" #include "TestComponentProviderStrategy.h" #include "TestUtilFunctions.h" #include "mock_backends/MockBackendQubit.h" @@ -15,7 +18,6 @@ #include "mock_modules/MockQubit.h" #include "mock_modules/MockRealTimeController.h" #include "mock_modules/MockRoutingDaemon.h" - namespace quisp_test { // use these functions and classes in your unit test. diff --git a/quisp/test_utils/mock_modules/AccessPrivate.h b/quisp/test_utils/mock_modules/AccessPrivate.h new file mode 100644 index 000000000..ee926e377 --- /dev/null +++ b/quisp/test_utils/mock_modules/AccessPrivate.h @@ -0,0 +1,181 @@ +/** + +MIT License + +Copyright (c) 2016 Gabor Marton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +// copy of https://github.com/martong/access_private/tree/c65d54b17bf7b212cb4df867edf143f2ebb0186a +// clang-format off + +#include +#include + +#if __cplusplus == 201103L +namespace std { + template + using enable_if_t = typename enable_if::type; + template + using remove_reference_t = typename remove_reference::type; +} // std +#endif + +// Unnamed namespace is used to avoid duplicate symbols if the macros are used +// in several translation units. See test1. +namespace { + namespace private_access_detail { + + // @tparam TagType, used to declare different "get" funciton overloads for + // different members/statics + template + struct private_access { + // Normal lookup cannot find in-class defined (inline) friend functions. + friend PtrType get(TagType) { return PtrValue; } + }; + + } // namespace private_access_detail +} // namespace + +// Used macro naming conventions: +// The "namespace" of this macro library is PRIVATE_ACCESS, i.e. all +// macro here has this prefix. +// All implementation macro, which are not meant to be used directly have the +// PRIVATE_ACCESS_DETAIL prefix. +// Some macros have the ABCD_IMPL form, which means they contain the +// implementation details for the specific ABCD macro. + +#define PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) x##y +#define PRIVATE_ACCESS_DETAIL_CONCATENATE(x, y) \ + PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) + +// @param PtrTypeKind E.g if we have "class A", then it can be "A::*" in case of +// members, or it can be "*" in case of statics. +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, \ + PtrTypeKind) \ + namespace { \ + namespace private_access_detail { \ + /* Tag type, used to declare different get funcitons for different \ + * members \ + */ \ + struct Tag {}; \ + /* Explicit instantiation */ \ + template struct private_access; \ + /* We can build the PtrType only with two aliases */ \ + /* E.g. using PtrType = int(int) *; would be illformed */ \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) = Type; \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) = \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) PtrTypeKind; \ + /* Declare the friend function, now it is visible in namespace scope. \ + * Note, \ + * we could declare it inside the Tag type too, in that case ADL would \ + * find \ + * the declaration. By choosing to declare it here, the Tag type remains \ + * a \ + * simple tag type, it has no other responsibilities. */ \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) get(Tag); \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(Tag, Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ + namespace { \ + namespace access_private { \ + Type &Name(Class &&t) { return t.*get(private_access_detail::Tag{}); } \ + Type &Name(Class &t) { return t.*get(private_access_detail::Tag{}); } \ + /* The following usings are here to avoid duplicate const qualifier \ + * warnings \ + */ \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag) = Type; \ + using PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) = \ + const PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag); \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) & Name(const Class &t) { \ + return t.*get(private_access_detail::Tag{}); \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(Tag, Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ + namespace { \ + namespace call_private { \ + /* We do perfect forwarding, but we want to restrict the overload set \ + * only for objects which have the type Class. */ \ + template , \ + Class>::value> * = nullptr, \ + typename... Args> \ + auto Name(Obj &&o, Args &&... args) -> decltype( \ + (std::forward(o).* \ + get(private_access_detail::Tag{}))(std::forward(args)...)) { \ + return (std::forward(o).*get(private_access_detail::Tag{}))( \ + std::forward(args)...); \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD(Tag, Class, Type, \ + Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ + namespace { \ + namespace access_private_static { \ + namespace Class { \ + Type &Name() { return *get(private_access_detail::Tag{}); } \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN(Tag, Class, Type, \ + Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ + namespace { \ + namespace call_private_static { \ + namespace Class { \ + template \ + auto Name(Args &&... args) -> decltype( \ + get(private_access_detail::Tag{})(std::forward(args)...)) { \ + return get(private_access_detail::Tag{})( \ + std::forward(args)...); \ + } \ + } \ + } \ + } + +#define PRIVATE_ACCESS_DETAIL_UNIQUE_TAG \ + PRIVATE_ACCESS_DETAIL_CONCATENATE(PrivateAccessTag, __COUNTER__) + +#define ACCESS_PRIVATE_FIELD(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ + Class, Type, Name) + +#define ACCESS_PRIVATE_FUN(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ + Class, Type, Name) + +#define ACCESS_PRIVATE_STATIC_FIELD(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD( \ + PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) + +#define ACCESS_PRIVATE_STATIC_FUN(Class, Type, Name) \ + PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN( \ + PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) + diff --git a/quisp/utils/DefaultComponentProviderStrategy.cc b/quisp/utils/DefaultComponentProviderStrategy.cc index c39844010..dc775ff04 100644 --- a/quisp/utils/DefaultComponentProviderStrategy.cc +++ b/quisp/utils/DefaultComponentProviderStrategy.cc @@ -8,7 +8,7 @@ DefaultComponentProviderStrategy::DefaultComponentProviderStrategy(cModule *_sel cModule *DefaultComponentProviderStrategy::getQNode() { cModule *currentModule = self->getParentModule(); - while (currentModule->getModuleType() != QNodeType) { + while (currentModule->getModuleType() != QNodeType && currentModule->getModuleType() != QNodeSatType) { currentModule = currentModule->getParentModule(); if (currentModule == nullptr) { throw cRuntimeError("QNode module not found. Have you changed the type name in ned file?"); @@ -20,7 +20,7 @@ cModule *DefaultComponentProviderStrategy::getQNode() { cModule *DefaultComponentProviderStrategy::getNode() { cModule *currentModule = self->getParentModule(); auto *mod_type = currentModule->getModuleType(); - while (mod_type != QNodeType && mod_type != BSAType && mod_type != EPPSType) { + while (mod_type != QNodeType && mod_type != QNodeSatType && mod_type != BSAType && mod_type != EPPSType && mod_type != EPPSSatType) { currentModule = currentModule->getParentModule(); mod_type = currentModule->getModuleType(); if (currentModule == nullptr) { @@ -118,6 +118,6 @@ cModule *DefaultComponentProviderStrategy::getQRSA() { } bool DefaultComponentProviderStrategy::isBSANodeType(const cModuleType *const type) { return type == BSAType; } -bool DefaultComponentProviderStrategy::isQNodeType(const cModuleType *const type) { return type == QNodeType; } -bool DefaultComponentProviderStrategy::isEPPSNodeType(const cModuleType *const type) { return type == EPPSType; } +bool DefaultComponentProviderStrategy::isQNodeType(const cModuleType *const type) { return (type == QNodeType or type == QNodeSatType); } +bool DefaultComponentProviderStrategy::isEPPSNodeType(const cModuleType *const type) { return type == EPPSType or type == EPPSSatType; } } // namespace quisp::utils diff --git a/quisp/utils/DefaultComponentProviderStrategy.h b/quisp/utils/DefaultComponentProviderStrategy.h index c6be34ed3..07e3d124f 100644 --- a/quisp/utils/DefaultComponentProviderStrategy.h +++ b/quisp/utils/DefaultComponentProviderStrategy.h @@ -27,6 +27,8 @@ class DefaultComponentProviderStrategy : public IComponentProviderStrategy { private: const cModuleType *const QNodeType = cModuleType::get("modules.QNode"); const cModuleType *const EPPSType = cModuleType::get("modules.EPPSNode"); + const cModuleType *const EPPSSatType = cModuleType::get("modules.EPPSNode_Sat"); + const cModuleType *const QNodeSatType = cModuleType::get("modules.QNode_Sat"); const cModuleType *const BSAType = cModuleType::get("modules.BSANode"); cModule *self; cModule *getQRSA(); diff --git a/spdlog b/spdlog index d7690d8e7..ac55e6048 160000 --- a/spdlog +++ b/spdlog @@ -1 +1 @@ -Subproject commit d7690d8e7eed721d78b52e032e996a5d1ef47d6f +Subproject commit ac55e60488032b9acde8940a5de099541c4515da