From 362f45083d27823e7af5e314d03eb566eec58d0c Mon Sep 17 00:00:00 2001 From: Roberts Miculens Date: Wed, 27 Jun 2018 18:16:18 +0300 Subject: [PATCH] parametrized ROADM and FUSED losses --- examples/eqpt_config.json | 3 - examples/fused_roadm_example_network.json | 196 ++++++++++++++++++++++ gnpy/core/elements.py | 23 ++- 3 files changed, 212 insertions(+), 10 deletions(-) create mode 100644 examples/fused_roadm_example_network.json diff --git a/examples/eqpt_config.json b/examples/eqpt_config.json index 8256c4b0..27042105 100644 --- a/examples/eqpt_config.json +++ b/examples/eqpt_config.json @@ -45,9 +45,6 @@ "con_loss": 0.5 } ], - "Roadms":[{ - "loss": 20 - }], "SI":[{ "f_min": 191.3e12, "Nch": 80, diff --git a/examples/fused_roadm_example_network.json b/examples/fused_roadm_example_network.json new file mode 100644 index 00000000..36834904 --- /dev/null +++ b/examples/fused_roadm_example_network.json @@ -0,0 +1,196 @@ +{ + "elements": [ + { + "uid": "trx Site_A", + "metadata": { + "location": { + "city": "Site_A", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Transceiver" + }, + { + "uid": "trx Site_C", + "metadata": { + "location": { + "city": "Site_C", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Transceiver" + }, + { + "uid": "roadm Site_A", + "metadata": { + "location": { + "city": "Site_A", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Roadm", + "params": { + "loss": 17 + } + }, + { + "uid": "roadm Site_C", + "metadata": { + "location": { + "city": "Site_C", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Roadm" + }, + { + "uid": "ingress fused spans in Site_B", + "metadata": { + "location": { + "city": "Site_B", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Fused", + "params": { + "loss": 0.5 + } + }, + { + "uid": "egress fused spans in Site_B", + "metadata": { + "location": { + "city": "Site_B", + "region": "", + "latitude": 0, + "longitude": 0 + } + }, + "type": "Fused" + }, + { + "uid": "fiber (Site_A \u2192 Site_B)-", + "metadata": { + "location": { + "latitude": 0.0, + "longitude": 0.0 + } + }, + "type": "Fiber", + "type_variety": "SSMF", + "params": { + "length": 40.0, + "length_units": "km", + "loss_coef": 0.2 + } + }, + { + "uid": "fiber (Site_B \u2192 Site_C)-", + "metadata": { + "location": { + "latitude": 0.0, + "longitude": 0.0 + } + }, + "type": "Fiber", + "type_variety": "SSMF", + "params": { + "length": 50.0, + "length_units": "km", + "loss_coef": 0.2 + } + }, + { + "uid": "fiber (Site_B \u2192 Site_A)-", + "metadata": { + "location": { + "latitude": 0.0, + "longitude": 0.0 + } + }, + "type": "Fiber", + "type_variety": "SSMF", + "params": { + "length": 40.0, + "length_units": "km", + "loss_coef": 0.2 + } + }, + { + "uid": "fiber (Site_C \u2192 Site_B)-", + "metadata": { + "location": { + "latitude": 0.0, + "longitude": 0.0 + } + }, + "type": "Fiber", + "type_variety": "SSMF", + "params": { + "length": 50.0, + "length_units": "km", + "loss_coef": 0.2 + } + } + ], + "connections": [ + { + "from_node": "roadm Site_A", + "to_node": "fiber (Site_A \u2192 Site_B)-" + }, + { + "from_node": "fiber (Site_B \u2192 Site_A)-", + "to_node": "roadm Site_A" + }, + { + "from_node": "fiber (Site_A \u2192 Site_B)-", + "to_node": "ingress fused spans in Site_B" + }, + { + "from_node": "ingress fused spans in Site_B", + "to_node": "fiber (Site_B \u2192 Site_C)-" + }, + { + "from_node": "fiber (Site_C \u2192 Site_B)-", + "to_node": "egress fused spans in Site_B" + }, + { + "from_node": "egress fused spans in Site_B", + "to_node": "fiber (Site_B \u2192 Site_A)-" + }, + { + "from_node": "roadm Site_C", + "to_node": "fiber (Site_C \u2192 Site_B)-" + }, + { + "from_node": "fiber (Site_B \u2192 Site_C)-", + "to_node": "roadm Site_C" + }, + { + "from_node": "trx Site_A", + "to_node": "roadm Site_A" + }, + { + "from_node": "roadm Site_A", + "to_node": "trx Site_A" + }, + { + "from_node": "trx Site_C", + "to_node": "roadm Site_C" + }, + { + "from_node": "roadm Site_C", + "to_node": "trx Site_C" + } + ] +} \ No newline at end of file diff --git a/gnpy/core/elements.py b/gnpy/core/elements.py index f5eb6736..ae1798ee 100644 --- a/gnpy/core/elements.py +++ b/gnpy/core/elements.py @@ -79,11 +79,15 @@ class Transceiver(Node): self._calc_snr(spectral_info) return spectral_info +RoadmParams = namedtuple('RoadmParams', 'loss') + class Roadm(Node): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - #TODO read loss from json - self.loss = 20 #dB + def __init__(self, *args, params=None, **kwargs): + if params is None: + # default loss value if not mentioned in loaded network json + params = {'loss':20} + super().__init__(*args, params=RoadmParams(**params), **kwargs) + self.loss = self.params.loss self.passive = True def __repr__(self): @@ -107,10 +111,15 @@ class Roadm(Node): carriers = tuple(self.propagate(*spectral_info.carriers)) return spectral_info.update(carriers=carriers) +FusedParams = namedtuple('FusedParams', 'loss') + class Fused(Node): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.loss = 1 # dB + def __init__(self, *args, params=None, **kwargs): + if params is None: + # default loss value if not mentioned in loaded network json + params = {'loss':1} + super().__init__(*args, params=FusedParams(**params), **kwargs) + self.loss = self.params.loss self.passive = True def __repr__(self):