Merge pull request #83 from berahtlv/losses

parameterized ROADM and FUSED losses
This commit is contained in:
James
2018-06-27 17:19:00 -04:00
committed by GitHub
3 changed files with 212 additions and 10 deletions

View File

@@ -45,9 +45,6 @@
"con_loss": 0.5
}
],
"Roadms":[{
"loss": 20
}],
"SI":[{
"f_min": 191.3e12,
"Nch": 80,

View 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"
}
]
}

View File

@@ -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):