mirror of
				https://github.com/Telecominfraproject/oopt-gnpy.git
				synced 2025-10-29 17:22:42 +00:00 
			
		
		
		
	 0f73a8f810
			
		
	
	0f73a8f810
	
	
	
		
			
			This could be (potentially) annoying to those users who rely on the default equipment library. However, it brings at least some order into the current state -- which was rather disorganized. Suggested-by: Jonas Mårtensson <jonas.martensson@ri.se> Change-Id: Ifc3ec5f9e0e2526b8621d905160fc82af6a469f2
		
			
				
	
	
		
			560 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			560 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| *********************************************
 | ||
| Equipment and Network description definitions
 | ||
| *********************************************
 | ||
| 
 | ||
| 1. Equipment description
 | ||
| ########################
 | ||
| 
 | ||
| Equipment description defines equipment types and those parameters.
 | ||
| Description is made in JSON file with predefined structure. By default
 | ||
| **gnpy-transmission-example** uses **eqpt_config.json** file and that
 | ||
| can be changed with **-e** or **--equipment** command line parameter.
 | ||
| Parsing of JSON file is made with
 | ||
| **gnpy.core.equipment.load_equipment(equipment_description)** and return
 | ||
| value is a dictionary of format **dict[‘equipment
 | ||
| type’][‘subtype’]=object**
 | ||
| 
 | ||
| 1.1. Structure definition
 | ||
| *************************
 | ||
| 
 | ||
| 1.1.1. Equipment types
 | ||
| *************************
 | ||
| 
 | ||
| Every equipment type is defined in JSON root with according name and
 | ||
| array of parameters as value.
 | ||
| 
 | ||
| .. code-block:: none
 | ||
| 
 | ||
|     {"Edfa": [...],
 | ||
|     "Fiber": [...]
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 1.1.2. Equipment parameters and subtypes
 | ||
| *****************************************
 | ||
| 
 | ||
| 
 | ||
| Array of parameters is a list of objects with unordered parameter name
 | ||
| and its value definition. In case of multiple equipment subtypes each
 | ||
| object contains **"type_variety":”type name”** name:value combination,
 | ||
| if only one subtype exists **"type_variety"** name is not mandatory and
 | ||
| it will be marked with **”default”** value.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"Edfa": [{
 | ||
|                 "type_variety": "std_medium_gain",
 | ||
|                 "type_def": "variable_gain",
 | ||
|                 "gain_flatmax": 26,
 | ||
|                 "gain_min": 15,
 | ||
|                 "p_max": 23,
 | ||
|                 "nf_min": 6,
 | ||
|                 "nf_max": 10,
 | ||
|                 "out_voa_auto": false,
 | ||
|                 "allowed_for_design": true
 | ||
|                 },
 | ||
|                 {
 | ||
|                 "type_variety": "std_low_gain",
 | ||
|                 "type_def": "variable_gain",
 | ||
|                 "gain_flatmax": 16,
 | ||
|                 "gain_min": 8,
 | ||
|                 "p_max": 23,
 | ||
|                 "nf_min": 6.5,
 | ||
|                 "nf_max": 11,
 | ||
|                 "out_voa_auto": false,
 | ||
|                 "allowed_for_design": true
 | ||
|                 }
 | ||
|         ],
 | ||
|     "Fiber": [{
 | ||
|                 "type_variety": "SSMF",
 | ||
|                 "dispersion": 1.67e-05,
 | ||
|                 "gamma": 0.00127
 | ||
|                 }
 | ||
|         ]
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 1.2. Equipment parameters by type
 | ||
| *********************************
 | ||
| 
 | ||
| 1.2.1. EDFA element
 | ||
| *******************
 | ||
| 
 | ||
| Four types of EDFA definition are possible. Description JSON file
 | ||
| location is in **gnpy-transmission-example** folder:
 | ||
| 
 | ||
| -  Advanced – with JSON file describing gain/noise figure tilt and
 | ||
|    gain/noise figure ripple. **"advanced_config_from_json"** value
 | ||
|    contains filename.
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Edfa":[{
 | ||
|             "type_variety": "high_detail_model_example",
 | ||
|             "gain_flatmax": 25,
 | ||
|             "gain_min": 15,
 | ||
|             "p_max": 21,
 | ||
|             "advanced_config_from_json": "std_medium_gain_advanced_config.json",
 | ||
|             "out_voa_auto": false,
 | ||
|             "allowed_for_design": false
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| -  Variable gain – with JSON file describing gain figure tilt and gain/noise
 | ||
|    figure ripple. **”default_edfa_config.json”** as source file.
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Edfa":[{
 | ||
|             "type_variety": "std_medium_gain",
 | ||
|             "type_def": "variable_gain",
 | ||
|             "gain_flatmax": 26,
 | ||
|             "gain_min": 15,
 | ||
|             "p_max": 23,
 | ||
|             "nf_min": 6,
 | ||
|             "nf_max": 10,
 | ||
|             "out_voa_auto": false,
 | ||
|             "allowed_for_design": true
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| -  Fixed gain – with JSON file describing gain figure tilt and gain/noise
 | ||
|    figure ripple. **”default_edfa_config.json”** as source file.
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Edfa":[{
 | ||
|             "type_variety": "std_fixed_gain",
 | ||
|             "type_def": "fixed_gain",
 | ||
|             "gain_flatmax": 21,
 | ||
|             "gain_min": 20,
 | ||
|             "p_max": 21,
 | ||
|             "nf0": 5.5,
 | ||
|             "allowed_for_design": false
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| - openroadm – with JSON file describing gain figure tilt and gain/noise
 | ||
|    figure ripple. **”default_edfa_config.json”** as source file. 
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Edfa":[{
 | ||
|             "type_variety": "openroadm_ila_low_noise",
 | ||
|             "type_def": "openroadm",
 | ||
|             "gain_flatmax": 27,
 | ||
|             "gain_min": 12,
 | ||
|             "p_max": 22,
 | ||
|             "nf_coef": [-8.104e-4,-6.221e-2,-5.889e-1,37.62],
 | ||
|             "allowed_for_design": false
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| 1.2.2. Fiber element
 | ||
| ********************
 | ||
| 
 | ||
| Fiber element with its parameters:
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Fiber":[{
 | ||
|             "type_variety": "SSMF",
 | ||
|             "dispersion": 1.67e-05,
 | ||
|             "gamma": 0.00127
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| RamanFiber element
 | ||
| ******************
 | ||
| 
 | ||
| A special variant of the regular ``Fiber`` where the simulation engine accounts for the Raman effect.
 | ||
| The newly added parameters are nested in the ``raman_efficiency`` dictionary.
 | ||
| Its shape corresponds to typical properties of silica.
 | ||
| More details are available from :cite:`curri_merit_2016`.
 | ||
| 
 | ||
| The ``cr`` property is the normailzed Raman efficiency, so it is is (almost) independent of the fiber type, while the coefficient actually giving Raman gain is g_R=C_R/Aeff.
 | ||
| 
 | ||
| The ``frequency_offset`` represents the spectral difference between the pumping photon and the one receiving energy.
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "RamanFiber":[{
 | ||
|       "type_variety": "SSMF",
 | ||
|       "dispersion": 1.67e-05,
 | ||
|       "gamma": 0.00127,
 | ||
|       "raman_efficiency": {
 | ||
|         "cr":[
 | ||
|             0, 9.4E-06, 2.92E-05, 4.88E-05, 6.82E-05, 8.31E-05, 9.4E-05, 0.0001014, 0.0001069, 0.0001119,
 | ||
|             0.0001217, 0.0001268, 0.0001365, 0.000149, 0.000165, 0.000181, 0.0001977, 0.0002192, 0.0002469,
 | ||
|             0.0002749, 0.0002999, 0.0003206, 0.0003405, 0.0003592, 0.000374, 0.0003826, 0.0003841, 0.0003826,
 | ||
|             0.0003802, 0.0003756, 0.0003549, 0.0003795, 0.000344, 0.0002933, 0.0002024, 0.0001158, 8.46E-05,
 | ||
|             7.14E-05, 6.86E-05, 8.5E-05, 8.93E-05, 9.01E-05, 8.15E-05, 6.67E-05, 4.37E-05, 3.28E-05, 2.96E-05,
 | ||
|             2.65E-05, 2.57E-05, 2.81E-05, 3.08E-05, 3.67E-05, 5.85E-05, 6.63E-05, 6.36E-05, 5.5E-05, 4.06E-05,
 | ||
|             2.77E-05, 2.42E-05, 1.87E-05, 1.6E-05, 1.4E-05, 1.13E-05, 1.05E-05, 9.8E-06, 9.8E-06, 1.13E-05,
 | ||
|             1.64E-05, 1.95E-05, 2.38E-05, 2.26E-05, 2.03E-05, 1.48E-05, 1.09E-05, 9.8E-06, 1.05E-05, 1.17E-05,
 | ||
|             1.25E-05, 1.21E-05, 1.09E-05, 9.8E-06, 8.2E-06, 6.6E-06, 4.7E-06, 2.7E-06, 1.9E-06, 1.2E-06, 4E-07,
 | ||
|             2E-07, 1E-07
 | ||
|         ],
 | ||
|         "frequency_offset":[
 | ||
|           0, 0.5e12, 1e12, 1.5e12, 2e12, 2.5e12, 3e12, 3.5e12, 4e12, 4.5e12, 5e12, 5.5e12, 6e12, 6.5e12, 7e12,
 | ||
|           7.5e12, 8e12, 8.5e12, 9e12, 9.5e12, 10e12, 10.5e12, 11e12, 11.5e12, 12e12, 12.5e12, 12.75e12,
 | ||
|           13e12, 13.25e12, 13.5e12, 14e12, 14.5e12, 14.75e12, 15e12, 15.5e12, 16e12, 16.5e12, 17e12,
 | ||
|           17.5e12, 18e12, 18.25e12, 18.5e12, 18.75e12, 19e12, 19.5e12, 20e12, 20.5e12, 21e12, 21.5e12,
 | ||
|           22e12, 22.5e12, 23e12, 23.5e12, 24e12, 24.5e12, 25e12, 25.5e12, 26e12, 26.5e12, 27e12, 27.5e12, 28e12,
 | ||
|           28.5e12, 29e12, 29.5e12, 30e12, 30.5e12, 31e12, 31.5e12, 32e12, 32.5e12, 33e12, 33.5e12, 34e12, 34.5e12,
 | ||
|           35e12, 35.5e12, 36e12, 36.5e12, 37e12, 37.5e12, 38e12, 38.5e12, 39e12, 39.5e12, 40e12, 40.5e12, 41e12,
 | ||
|           41.5e12, 42e12
 | ||
|         ]
 | ||
|         }
 | ||
|       }
 | ||
|     ]
 | ||
| 
 | ||
| 
 | ||
| 1.2.3 Roadm element
 | ||
| *******************
 | ||
| 
 | ||
| Roadm element with its parameters:
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|       "Roadms":[{
 | ||
|             "gain_mode_default_loss": 20,
 | ||
|             "power_mode_pout_target": -20,
 | ||
|             "add_drop_osnr": 38
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| 1.2.3. Spans element
 | ||
| ********************
 | ||
| 
 | ||
| Spans element with its parameters:
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Spans":[{
 | ||
|             "power_mode":true,
 | ||
|             "delta_power_range_db": [0,0,0.5],
 | ||
|             "max_length": 150,
 | ||
|             "length_units": "km",
 | ||
|             "max_loss": 28,
 | ||
|             "padding": 10,
 | ||
|             "EOL": 0,
 | ||
|             "con_in": 0,
 | ||
|             "con_out": 0
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| 
 | ||
| 1.2.4. Spectral Information
 | ||
| ***************************
 | ||
| 
 | ||
| Spectral information with its parameters:
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "SI":[{
 | ||
|             "f_min": 191.3e12,
 | ||
|             "baud_rate": 32e9,
 | ||
|             "f_max":195.1e12,
 | ||
|             "spacing": 50e9,
 | ||
|             "power_dbm": 0,
 | ||
|             "power_range_db": [0,0,0.5],
 | ||
|             "roll_off": 0.15,
 | ||
|             "tx_osnr": 40,
 | ||
|             "sys_margins": 0
 | ||
|             }
 | ||
|         ]
 | ||
| 
 | ||
| 
 | ||
| 1.2.5. Transceiver element
 | ||
| **************************
 | ||
| 
 | ||
| Transceiver element with its parameters. **”mode”** can contain multiple
 | ||
| Transceiver operation formats.
 | ||
| 
 | ||
| Note that ``OSNR`` parameter refers to the receiver's minimal OSNR threshold for a given mode.
 | ||
| 
 | ||
| .. code-block:: json-object
 | ||
| 
 | ||
|     "Transceiver":[{
 | ||
|                     "frequency":{
 | ||
|                                 "min": 191.35e12,
 | ||
|                                 "max": 196.1e12
 | ||
|                                 },
 | ||
|                     "mode":[
 | ||
|                             {
 | ||
|                                "format": "mode 1",
 | ||
|                                "baud_rate": 32e9,
 | ||
|                                "OSNR": 11,
 | ||
|                                "bit_rate": 100e9,
 | ||
|                                "roll_off": 0.15,
 | ||
|                                "tx_osnr": 40,
 | ||
|                                "min_spacing": 37.5e9,
 | ||
|                                "cost":1
 | ||
|                             },
 | ||
|                             {
 | ||
|                               "format": "mode 2",
 | ||
|                                "baud_rate": 66e9,
 | ||
|                                "OSNR": 15,
 | ||
|                                "bit_rate": 200e9,
 | ||
|                                "roll_off": 0.15,
 | ||
|                                "tx_osnr": 40,
 | ||
|                                "min_spacing": 75e9,
 | ||
|                                "cost":1
 | ||
|                             }
 | ||
|                     ]
 | ||
|                 }
 | ||
|         ]
 | ||
| 
 | ||
| ***********************
 | ||
| 2. Network description
 | ||
| ***********************
 | ||
| 
 | ||
| Network description defines network elements with additional to
 | ||
| equipment description parameters, metadata and elements interconnection.
 | ||
| Description is made in JSON file with predefined structure. By default
 | ||
| **gnpy-transmission-example** uses **edfa_example_network.json** file
 | ||
| and can be changed from command line. Parsing of JSON file is made with
 | ||
| **gnpy.core.network.load_network(network_description,
 | ||
| equipment_description)** and return value is **DiGraph** object which
 | ||
| mimics network description.
 | ||
| 
 | ||
| 2.1. Structure definition
 | ||
| ##########################
 | ||
| 
 | ||
| 2.1.1. File root structure
 | ||
| ***************************
 | ||
| 
 | ||
| Network description JSON file root consist of three unordered parts:
 | ||
| 
 | ||
| -  network_name – name of described network or service, is not used as
 | ||
|    of now
 | ||
| 
 | ||
| -  elements - contains array of network element objects with their
 | ||
|    respective parameters
 | ||
| 
 | ||
| -  connections – contains array of unidirectional connection objects
 | ||
| 
 | ||
| .. code-block:: none
 | ||
| 
 | ||
|     {"network_name": "Example Network",
 | ||
|     "elements": [{...},
 | ||
|                 {...}
 | ||
|                 ],
 | ||
|     "connections": [{...},
 | ||
|                     {...}
 | ||
|                     ]
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 2.1.2. Elements parameters and subtypes
 | ||
| ****************************************
 | ||
| 
 | ||
| Array of network element objects consist of unordered parameter names
 | ||
| and those values. In case of **"type_variety"** absence
 | ||
| **"type_variety":”default”** name:value combination is used. As of the
 | ||
| moment, existence of used **"type_variety"** in equipment description is
 | ||
| obligatory.
 | ||
| 
 | ||
| 2.2. Element parameters by type
 | ||
| *********************************
 | ||
| 
 | ||
| 2.2.1. Transceiver element
 | ||
| ***************************
 | ||
| 
 | ||
| Transceiver element with its parameters.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"uid": "trx Site_A",
 | ||
|     "metadata": {
 | ||
|                 "location": {
 | ||
|                             "city": "Site_A",
 | ||
|                             "region": "",
 | ||
|                             "latitude": 0,
 | ||
|                             "longitude": 0
 | ||
|                             }
 | ||
|                 },
 | ||
|     "type": "Transceiver"
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 2.2.2. ROADM element
 | ||
| *********************
 | ||
| 
 | ||
| ROADM element with its parameters. **“params”** is optional, if not used
 | ||
| default loss value of 20dB is used.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"uid": "roadm Site_A",
 | ||
|     "metadata": {
 | ||
|                 "location": {
 | ||
|                             "city": "Site_A",
 | ||
|                             "region": "",
 | ||
|                             "latitude": 0,
 | ||
|                             "longitude": 0
 | ||
|                             }
 | ||
|                 },
 | ||
|     "type": "Roadm",
 | ||
|     "params": {
 | ||
|                 "loss": 17
 | ||
|             }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 2.2.3. Fused element
 | ||
| *********************
 | ||
| 
 | ||
| Fused element with its parameters. **“params”** is optional, if not used
 | ||
| default loss value of 1dB is used.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"uid": "ingress fused spans in Site_B",
 | ||
|     "metadata": {
 | ||
|                 "location": {
 | ||
|                             "city": "Site_B",
 | ||
|                             "region": "",
 | ||
|                             "latitude": 0,
 | ||
|                             "longitude": 0
 | ||
|                             }
 | ||
|                 },
 | ||
|     "type": "Fused",
 | ||
|     "params": {
 | ||
|                 "loss": 0.5
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 2.2.4. Fiber element
 | ||
| *********************
 | ||
| 
 | ||
| Fiber element with its parameters.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"uid": "fiber (Site_A \\u2192 Site_B)",
 | ||
|     "metadata": {
 | ||
|                 "location": {
 | ||
|                             "city": "",
 | ||
|                             "region": "",
 | ||
|                             "latitude": 0.0,
 | ||
|                             "longitude": 0.0
 | ||
|                             }
 | ||
|                 },
 | ||
|     "type": "Fiber",
 | ||
|     "type_variety": "SSMF",
 | ||
|     "params": {
 | ||
|                 "length": 40.0,
 | ||
|                 "length_units": "km",
 | ||
|                 "loss_coef": 0.2
 | ||
|                 }
 | ||
|     }
 | ||
| 
 | ||
| 2.2.5. RamanFiber element
 | ||
| *************************
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {
 | ||
|       "uid": "Span1",
 | ||
|       "type": "RamanFiber",
 | ||
|       "type_variety": "SSMF",
 | ||
|       "operational": {
 | ||
|         "temperature": 283,
 | ||
|         "raman_pumps": [
 | ||
|           {
 | ||
|             "power": 200e-3,
 | ||
|             "frequency": 205e12,
 | ||
|             "propagation_direction": "counterprop"
 | ||
|           },
 | ||
|           {
 | ||
|             "power": 206e-3,
 | ||
|             "frequency": 201e12,
 | ||
|             "propagation_direction": "counterprop"
 | ||
|           }
 | ||
|         ]
 | ||
|       },
 | ||
|       "params": {
 | ||
|         "type_variety": "SSMF",
 | ||
|         "length": 80.0,
 | ||
|         "loss_coef": 0.2,
 | ||
|         "length_units": "km",
 | ||
|         "att_in": 0,
 | ||
|         "con_in": 0.5,
 | ||
|         "con_out": 0.5
 | ||
|       },
 | ||
|       "metadata": {
 | ||
|         "location": {
 | ||
|           "latitude": 1,
 | ||
|           "longitude": 0,
 | ||
|           "city": null,
 | ||
|           "region": ""
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 2.2.6. EDFA element
 | ||
| ********************
 | ||
| 
 | ||
| EDFA element with its parameters.
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"uid": "Edfa1",
 | ||
|     "type": "Edfa",
 | ||
|     "type_variety": "std_low_gain",
 | ||
|     "operational": {
 | ||
|                     "gain_target": 16,
 | ||
|                     "tilt_target": 0
 | ||
|                     },
 | ||
|     "metadata": {
 | ||
|                 "location": {
 | ||
|                             "city": "Site_A",
 | ||
|                             "region": "",
 | ||
|                             "latitude": 2,
 | ||
|                             "longitude": 0
 | ||
|                             }
 | ||
|                 }
 | ||
|     }
 | ||
| 
 | ||
| 2.3. Connections objects
 | ||
| *************************
 | ||
| 
 | ||
| Each unidirectional connection object in connections array consist of
 | ||
| two unordered **”from_node”** and **”to_node”** name pair with values
 | ||
| corresponding to element **”uid”**
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|     {"from_node": "roadm Site_C",
 | ||
|     "to_node": "trx Site_C"
 | ||
|     }
 | ||
| 
 | ||
| ************************
 | ||
| 3. Simulation Parameters
 | ||
| ************************
 | ||
| 
 | ||
| Additional details of the simulation are controlled via ``sim_params.json``:
 | ||
| 
 | ||
| .. code-block:: json
 | ||
| 
 | ||
|   {
 | ||
|     "raman_parameters": {
 | ||
|       "flag_raman": true,
 | ||
|       "space_resolution": 10e3,
 | ||
|       "tolerance": 1e-8
 | ||
|     },
 | ||
|     "nli_parameters": {
 | ||
|       "nli_method_name": "ggn_spectrally_separated",
 | ||
|       "wdm_grid_size": 50e9,
 | ||
|       "dispersion_tolerance": 1,
 | ||
|       "phase_shift_tolerance": 0.1,
 | ||
|       "computed_channels": [1, 18, 37, 56, 75]
 | ||
|     }
 | ||
|   }
 |