mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-01 18:47:48 +00:00
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:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user