mirror of
				https://github.com/Telecominfraproject/oopt-gnpy.git
				synced 2025-10-30 17:47:50 +00:00 
			
		
		
		
	Propagate power per band during autodesign
Target setting computation is done going through each element of the OMS
and computing resulting delta power after each amplifier element. In order
to account for different delta power per band (multi band autodesign), the
computation must be made per band. The previous introduction of a standard
name for bands ("CBAND", "LBAND") ensures a stable key to index these
delta power computation.
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ida4b2486ebde4f2a1fb21a44458d1fe34a788d1f
			
			
This commit is contained in:
		 EstherLerouzic
					EstherLerouzic
				
			
				
					committed by
					
						 Esther Le Rouzic
						Esther Le Rouzic
					
				
			
			
				
	
			
			
			 Esther Le Rouzic
						Esther Le Rouzic
					
				
			
						parent
						
							bdcffc2a5e
						
					
				
				
					commit
					64a91256fc
				
			| @@ -19,7 +19,7 @@ from gnpy.core.exceptions import ConfigurationError, NetworkTopologyError | ||||
| from gnpy.core.utils import round2float, convert_length, psd2powerdbm, lin2db, watt2dbm, dbm2watt, automatic_nch, \ | ||||
|     find_common_range | ||||
| from gnpy.core.info import ReferenceCarrier, create_input_spectral_information | ||||
| from gnpy.core.parameters import SimParams, EdfaParams | ||||
| from gnpy.core.parameters import SimParams, EdfaParams, find_band_name, FrequencyBand | ||||
| from gnpy.core.science_utils import RamanSolver | ||||
|  | ||||
|  | ||||
| @@ -569,9 +569,18 @@ def set_egress_amplifier(network: DiGraph, this_node: Union[elements.Roadm, elem | ||||
|     power_mode = equipment['Span']['default'].power_mode | ||||
|     next_oms = (n for n in network.successors(this_node) if not isinstance(n, elements.Transceiver)) | ||||
|     for oms in next_oms: | ||||
|         _design_bands = {find_band_name(FrequencyBand(f_min=e["f_min"], f_max=e["f_max"])): e | ||||
|                          for e in this_node.per_degree_design_bands[oms.uid]} | ||||
|         oms_nodes = get_oms_edge_list(oms, network) | ||||
|         # go through all the OMS departing from the ROADM | ||||
|         prev_node = this_node | ||||
|         node = oms | ||||
|         # initialize dp and prev_dp with roadm out target or transceiver power. Use design bands. | ||||
|         dp = {} | ||||
|         prev_dp = {} | ||||
|         voa = {} | ||||
|         prev_voa = {} | ||||
|         for band_name, band in _design_bands.items(): | ||||
|             if isinstance(this_node, elements.Transceiver): | ||||
|                 # todo change pref to a ref channel | ||||
|                 if equipment['SI']['default'].tx_power_dbm is not None: | ||||
| @@ -582,30 +591,31 @@ def set_egress_amplifier(network: DiGraph, this_node: Union[elements.Roadm, elem | ||||
|                 # get target power out from ROADM for the reference carrier based on equalization settings | ||||
|                 this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid) | ||||
|             # use the target power on this degree | ||||
|         prev_dp = this_node_out_power - pref_ch_db | ||||
|         dp = prev_dp | ||||
|         prev_voa = 0 | ||||
|         voa = 0 | ||||
|         visited_nodes = [] | ||||
|         while not (isinstance(node, elements.Roadm) or isinstance(node, elements.Transceiver)): | ||||
|             prev_dp[band_name] = this_node_out_power - pref_ch_db | ||||
|             dp[band_name] = prev_dp[band_name] | ||||
|             prev_voa[band_name] = 0 | ||||
|             voa[band_name] = 0 | ||||
|  | ||||
|         for node, next_node in oms_nodes: | ||||
|             # go through all nodes in the OMS (loop until next Roadm instance) | ||||
|             next_node = get_next_node(node, network) | ||||
|             visited_nodes.append(node) | ||||
|             if next_node in visited_nodes: | ||||
|                 raise NetworkTopologyError(f'Loop detected for {type(node).__name__} {node.uid}, ' | ||||
|                                            + 'please check network topology') | ||||
|             if isinstance(node, elements.Edfa): | ||||
|                 dp, voa = set_one_amplifier(node, prev_node, next_node, power_mode, prev_voa, prev_dp, | ||||
|                                             pref_ch_db, pref_total_db, network, equipment, verbose) | ||||
|                 band_name, _ = next((n, b) for n, b in _design_bands.items()) | ||||
|                 dp[band_name], voa[band_name] = set_one_amplifier(node, prev_node, next_node, power_mode, | ||||
|                                                                   prev_voa[band_name], prev_dp[band_name], | ||||
|                                                                   pref_ch_db, pref_total_db, | ||||
|                                                                   network, equipment, verbose) | ||||
|             elif isinstance(node, elements.RamanFiber): | ||||
|                 # this is to record the expected gain in Raman fiber in its .estimated_gain attribute. | ||||
|                 _ = span_loss(network, node, equipment, input_power=pref_ch_db + dp) | ||||
|             if isinstance(node, elements.Multiband_amplifier): | ||||
|                 for amp in node.amplifiers.values(): | ||||
|                     dp, voa = set_one_amplifier(amp, prev_node, next_node, power_mode, prev_voa, prev_dp, | ||||
|                 band_name, _ = next((n, b) for n, b in _design_bands.items()) | ||||
|                 _ = span_loss(network, node, equipment, input_power=pref_ch_db + dp[band_name]) | ||||
|             elif isinstance(node, elements.Multiband_amplifier): | ||||
|                 for band_name, amp in node.amplifiers.items(): | ||||
|                     dp[band_name], voa[band_name] = \ | ||||
|                         set_one_amplifier(amp, prev_node, next_node, power_mode, | ||||
|                                           prev_voa[band_name], prev_dp[band_name], | ||||
|                                           pref_ch_db, pref_total_db, network, equipment, verbose) | ||||
|             prev_dp = dp | ||||
|             prev_voa = voa | ||||
|             prev_dp.update(**dp) | ||||
|             prev_voa.update(**voa) | ||||
|             prev_node = node | ||||
|             node = next_node | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user