mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 17:47:50 +00:00
Add option to cli examples for disabling auto-insertion of EDFAs
The auto-design feature inserts EDFAs after ROADMs and fibers when they are not already present in the input topology file. This functionality can be locally disabled by manually adding a Fused element in the topology. This patch adds an option to the cli example scripts, "--no-insert-edfas", which globally disables insertion of EDFAs as well as automatic splitting of fibers. Change-Id: If40aa6ac6d8b47d5e7b6f8eabfe389e8258cbce6 Signed-off-by: Jonas Mårtensson <jonas.martensson@ri.se>
This commit is contained in:
@@ -511,7 +511,7 @@ def add_fiber_padding(network, fibers, padding):
|
|||||||
first_fiber.params.att_in = first_fiber.params.att_in + padding - this_span_loss
|
first_fiber.params.att_in = first_fiber.params.att_in + padding - this_span_loss
|
||||||
|
|
||||||
|
|
||||||
def build_network(network, equipment, pref_ch_db, pref_total_db):
|
def build_network(network, equipment, pref_ch_db, pref_total_db, no_insert_edfas=False):
|
||||||
default_span_data = equipment['Span']['default']
|
default_span_data = equipment['Span']['default']
|
||||||
max_length = int(convert_length(default_span_data.max_length, default_span_data.length_units))
|
max_length = int(convert_length(default_span_data.max_length, default_span_data.length_units))
|
||||||
min_length = max(int(default_span_data.padding / 0.2 * 1e3), 50_000)
|
min_length = max(int(default_span_data.padding / 0.2 * 1e3), 50_000)
|
||||||
@@ -524,17 +524,20 @@ def build_network(network, equipment, pref_ch_db, pref_total_db):
|
|||||||
add_fiber_padding(network, fibers, default_span_data.padding)
|
add_fiber_padding(network, fibers, default_span_data.padding)
|
||||||
# don't group split fiber and add amp in the same loop
|
# don't group split fiber and add amp in the same loop
|
||||||
# =>for code clarity (at the expense of speed):
|
# =>for code clarity (at the expense of speed):
|
||||||
for fiber in fibers:
|
|
||||||
split_fiber(network, fiber, bounds, target_length, equipment)
|
|
||||||
|
|
||||||
roadms = [r for r in network.nodes() if isinstance(r, elements.Roadm)]
|
roadms = [r for r in network.nodes() if isinstance(r, elements.Roadm)]
|
||||||
for roadm in roadms:
|
|
||||||
add_roadm_preamp(network, roadm)
|
|
||||||
add_roadm_booster(network, roadm)
|
|
||||||
|
|
||||||
fibers = [f for f in network.nodes() if isinstance(f, elements.Fiber)]
|
if not no_insert_edfas:
|
||||||
for fiber in fibers:
|
for fiber in fibers:
|
||||||
add_inline_amplifier(network, fiber)
|
split_fiber(network, fiber, bounds, target_length, equipment)
|
||||||
|
|
||||||
|
for roadm in roadms:
|
||||||
|
add_roadm_preamp(network, roadm)
|
||||||
|
add_roadm_booster(network, roadm)
|
||||||
|
|
||||||
|
fibers = [f for f in network.nodes() if isinstance(f, elements.Fiber)]
|
||||||
|
for fiber in fibers:
|
||||||
|
add_inline_amplifier(network, fiber)
|
||||||
|
|
||||||
for roadm in roadms:
|
for roadm in roadms:
|
||||||
set_egress_amplifier(network, roadm, equipment, pref_ch_db, pref_total_db)
|
set_egress_amplifier(network, roadm, equipment, pref_ch_db, pref_total_db)
|
||||||
|
|||||||
@@ -104,6 +104,9 @@ def _add_common_options(parser: argparse.ArgumentParser, network_default: Path):
|
|||||||
help='Save the final network as a JSON file')
|
help='Save the final network as a JSON file')
|
||||||
parser.add_argument('--save-network-before-autodesign', type=Path, metavar=_help_fname_json,
|
parser.add_argument('--save-network-before-autodesign', type=Path, metavar=_help_fname_json,
|
||||||
help='Dump the network into a JSON file prior to autodesign')
|
help='Dump the network into a JSON file prior to autodesign')
|
||||||
|
parser.add_argument('--no-insert-edfas', action='store_true',
|
||||||
|
help='Disable insertion of EDFAs after ROADMs and fibers '
|
||||||
|
'as well as splitting of fibers by auto-design.')
|
||||||
|
|
||||||
|
|
||||||
def transmission_main_example(args=None):
|
def transmission_main_example(args=None):
|
||||||
@@ -201,7 +204,7 @@ def transmission_main_example(args=None):
|
|||||||
pref_ch_db = lin2db(req.power * 1e3) # reference channel power / span (SL=20dB)
|
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)
|
pref_total_db = pref_ch_db + lin2db(req.nb_channel) # reference total power / span (SL=20dB)
|
||||||
try:
|
try:
|
||||||
build_network(network, equipment, pref_ch_db, pref_total_db)
|
build_network(network, equipment, pref_ch_db, pref_total_db, args.no_insert_edfas)
|
||||||
except exceptions.NetworkTopologyError as e:
|
except exceptions.NetworkTopologyError as e:
|
||||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@@ -320,7 +323,7 @@ def path_requests_run(args=None):
|
|||||||
p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min,
|
p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min,
|
||||||
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
|
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
|
||||||
try:
|
try:
|
||||||
build_network(network, equipment, p_db, p_total_db)
|
build_network(network, equipment, p_db, p_total_db, args.no_insert_edfas)
|
||||||
except exceptions.NetworkTopologyError as e:
|
except exceptions.NetworkTopologyError as e:
|
||||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user