Power setting refactor

separate in the code:
	* add egress amplifier
	* vs setting the amplifier parameters
=> prepare improvments in select_edfa and target_power code
regroup all network optimization operations in network.py (remove from
transmission_main)

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
This commit is contained in:
Jean-Luc Auge
2018-08-02 15:43:54 +02:00
parent 167e644bd0
commit ff6d81b749
5 changed files with 163 additions and 110 deletions

View File

@@ -17,7 +17,7 @@ from numpy import arange
from matplotlib.pyplot import show, axis, figure, title
from networkx import (draw_networkx_nodes, draw_networkx_edges,
draw_networkx_labels, dijkstra_path)
from gnpy.core.network import load_network, build_network, set_roadm_loss, set_edfa_dp
from gnpy.core.network import load_network, build_network
from gnpy.core.elements import Transceiver, Fiber, Edfa, Roadm
from gnpy.core.info import create_input_spectral_information, SpectralInformation, Channel, Power, Pref
from gnpy.core.request import Path_request, RequestParams, compute_constrained_path, propagate
@@ -53,18 +53,16 @@ def main(network, equipment, source, destination, req = None):
print('\n'.join([f'Power mode is set to {power_mode}',
f'=> it can be modified in eqpt_config.json - Spans']))
#set raodm loss for gain_mode before to build network
set_roadm_loss(network, equipment, False, 0)
build_network(network, equipment=equipment)
pref_ch_db = lin2db(req.power*1e3) #reference channel power / span (SL=20dB)
pref_total_db = pref_ch_db + lin2db(req.nb_channel) #reference total power / span (SL=20dB)
build_network(network, equipment, pref_total_db)
path = compute_constrained_path(network, req)
if power_mode:
set_edfa_dp(network, path, equipment)
spans = [s.length for s in path if isinstance(s, Fiber)]
print(f'\nThere are {len(spans)} fiber spans over {sum(spans):.0f}m between {source.uid} and {destination.uid}')
print(f'\nNow propagating between {source.uid} and {destination.uid}:')
pref_span_db = lin2db(req.power*1e3)
try:
power_range = arange(*equipment['SI']['default'].power_range_db)
if len(power_range) == 0 : #bad input that will lead to no simulation (don't enter the power loop)
@@ -74,11 +72,7 @@ def main(network, equipment, source, destination, req = None):
power_range = [0]
for dp_db in power_range:
p_db = pref_span_db + dp_db
pref_roadm_db = equipment['Roadms']['default'].power_mode_pref
roadm_loss = p_db - pref_roadm_db #dynamic update the ROADM loss wrto power sweep to keep the same pref_roadm
set_roadm_loss(network, equipment, power_mode, roadm_loss)
p = db2lin(p_db)*1e-3
p = db2lin(pref_ch_db + dp_db)*1e-3
req.power = p
print(f'\nPropagating with input power = {lin2db(req.power*1e3):.2f}dBm :')
propagate(path, req, equipment, show=len(power_range)==1)
@@ -108,7 +102,7 @@ if __name__ == '__main__':
equipment = load_equipment(args.equipment)
# logger.info(equipment)
print(args.filename)
# print(args.filename)
network = load_network(args.filename, equipment)
# print(network)