mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 01:32:21 +00:00
Merge pull request #83 from berahtlv/losses
parameterized ROADM and FUSED losses
This commit is contained in:
@@ -45,9 +45,6 @@
|
|||||||
"con_loss": 0.5
|
"con_loss": 0.5
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Roadms":[{
|
|
||||||
"loss": 20
|
|
||||||
}],
|
|
||||||
"SI":[{
|
"SI":[{
|
||||||
"f_min": 191.3e12,
|
"f_min": 191.3e12,
|
||||||
"Nch": 80,
|
"Nch": 80,
|
||||||
|
|||||||
196
examples/fused_roadm_example_network.json
Normal file
196
examples/fused_roadm_example_network.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -79,11 +79,15 @@ class Transceiver(Node):
|
|||||||
self._calc_snr(spectral_info)
|
self._calc_snr(spectral_info)
|
||||||
return spectral_info
|
return spectral_info
|
||||||
|
|
||||||
|
RoadmParams = namedtuple('RoadmParams', 'loss')
|
||||||
|
|
||||||
class Roadm(Node):
|
class Roadm(Node):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, params=None, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
if params is None:
|
||||||
#TODO read loss from json
|
# default loss value if not mentioned in loaded network json
|
||||||
self.loss = 20 #dB
|
params = {'loss':20}
|
||||||
|
super().__init__(*args, params=RoadmParams(**params), **kwargs)
|
||||||
|
self.loss = self.params.loss
|
||||||
self.passive = True
|
self.passive = True
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
@@ -107,10 +111,15 @@ class Roadm(Node):
|
|||||||
carriers = tuple(self.propagate(*spectral_info.carriers))
|
carriers = tuple(self.propagate(*spectral_info.carriers))
|
||||||
return spectral_info.update(carriers=carriers)
|
return spectral_info.update(carriers=carriers)
|
||||||
|
|
||||||
|
FusedParams = namedtuple('FusedParams', 'loss')
|
||||||
|
|
||||||
class Fused(Node):
|
class Fused(Node):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, params=None, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
if params is None:
|
||||||
self.loss = 1 # dB
|
# 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
|
self.passive = True
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user