mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 01:32:21 +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
|
||||
|
||||
|
||||
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']
|
||||
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)
|
||||
@@ -524,17 +524,20 @@ def build_network(network, equipment, pref_ch_db, pref_total_db):
|
||||
add_fiber_padding(network, fibers, default_span_data.padding)
|
||||
# don't group split fiber and add amp in the same loop
|
||||
# =>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)]
|
||||
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)
|
||||
if not no_insert_edfas:
|
||||
for fiber in fibers:
|
||||
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:
|
||||
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')
|
||||
parser.add_argument('--save-network-before-autodesign', type=Path, metavar=_help_fname_json,
|
||||
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):
|
||||
@@ -201,7 +204,7 @@ def transmission_main_example(args=None):
|
||||
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)
|
||||
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:
|
||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||
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,
|
||||
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
|
||||
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:
|
||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||
sys.exit(1)
|
||||
|
||||
Reference in New Issue
Block a user