OpticalTestModel.cc revision 10447:a465576671d4
1#include "model/optical/OpticalTestModel.h" 2#include "model/optical_graph/OpticalGraph.h" 3#include "model/optical_graph/OpticalWaveguide.h" 4#include "model/optical/RingModulator.h" 5#include "model/optical/RingFilter.h" 6#include "model/optical/RingDetector.h" 7#include "model/optical/LaserSource.h" 8 9namespace DSENT 10{ 11 OpticalTestModel::OpticalTestModel(const String& instance_name_, const TechModel* tech_model_) 12 : OpticalModel(instance_name_, tech_model_) 13 { 14 initParameters(); 15 initProperties(); 16 } 17 18 OpticalTestModel::~OpticalTestModel() 19 {} 20 21 void OpticalTestModel::initParameters() 22 { 23 return; 24 } 25 26 void OpticalTestModel::initProperties() 27 { 28 return; 29 } 30 31 void OpticalTestModel::constructModel() 32 { 33 unsigned int wavelengths = 64; 34 unsigned int number_readers = 1; 35 36 createWaveguide("LaserToMod", makeWavelengthGroup(0, wavelengths-1)); 37 38 // Create laser 39 LaserSource* laser = new LaserSource("Laser", getTechModel()); 40 laser->setParameter("OutStart", 0); 41 laser->setParameter("OutEnd", wavelengths-1); 42 laser->construct(); 43 44 // Create modulator 45 RingModulator* modulator = new RingModulator("Modulator", getTechModel()); 46 modulator->setParameter("InStart", 0); 47 modulator->setParameter("InEnd", wavelengths-1); 48 modulator->setParameter("ModStart", 0); 49 modulator->setParameter("ModEnd", wavelengths-1); 50 modulator->construct(); 51 52 for (unsigned int i = 0; i <= number_readers; ++i) 53 { 54 String n = (String) i; 55 createWaveguide("WaveguideDet-" + n, makeWavelengthGroup(0, wavelengths-1)); 56 } 57 58 // Create a SWMR Configuration 59 for (unsigned int i = 0; i < number_readers; ++i) 60 { 61 String n = (String) i; 62 63 // Create resonant ring detector 64 RingDetector* detector = new RingDetector("Detector-" + n, getTechModel()); 65 detector->setParameter("InStart", 0); 66 detector->setParameter("InEnd", wavelengths-1); 67 detector->setParameter("DetStart", 0); 68 detector->setParameter("DetEnd", wavelengths-1); 69 detector->setParameter("DropAll", "FALSE"); 70 detector->setParameter("SenseAmp", "TRUE"); 71 detector->construct(); 72 73 opticalPortConnect(detector, "In", "WaveguideDet-" + n); 74 opticalPortConnect(detector, "Out", "WaveguideDet-" + (String) (i + 1)); 75 76 addSubInstances(detector, 1.0); 77 } 78 79 opticalPortConnect(laser, "Out", "LaserToMod"); 80 opticalPortConnect(modulator, "In", "LaserToMod"); 81 opticalPortConnect(modulator, "Out", "WaveguideDet-0"); 82 83 addSubInstances(laser, 1.0); 84 addSubInstances(modulator, 1.0); 85 } 86 87 void OpticalTestModel::updateModel() 88 { 89 double data_rate = 8e9; 90 double extinction_ratio = 5; 91 double insertion_loss = 3; 92 93 Model* laser = getSubInstance("Laser"); 94 laser->update(); 95 96 getWaveguide("LaserToMod")->setLoss(10); 97 98 Model* modulator = getSubInstance("Modulator"); 99 modulator->setProperty("ExtinctionRatio", extinction_ratio); 100 modulator->setProperty("InsertionLoss", insertion_loss); 101 modulator->setProperty("DataRate", data_rate); 102 modulator->setProperty("P(In)", 0.5); 103 modulator->setProperty("Act(In)", 1.0); 104 modulator->update(); 105 106 unsigned int number_readers = 1; 107 for (unsigned int i = 0; i < number_readers; ++i) 108 { 109 Model* detector = getSubInstance("Detector-" + (String) i); 110 detector->setProperty("ExtinctionRatio", extinction_ratio); 111 detector->setProperty("DataRate", data_rate); 112 detector->setProperty("P(In)", 0.5); 113 detector->setProperty("Act(In)", 1.0); 114 detector->update(); 115 } 116 117 118 } 119 120} // namespace DSENT 121 122