Commit Graph

92 Commits

Author SHA1 Message Date
Jan Kundrát
8ab54e76df Merge branch 'develop' into experimental/2020-ofc
Change-Id: I4f7d3cc91734a03251b4ad4d82b05aad68d0ef5f
2020-02-12 17:18:50 +01:00
EstherLerouzic
fa826391f6 Add some tests to support partial per degree target power definition
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
2019-11-05 13:18:37 +01:00
EstherLerouzic
0370b45d8a Add per degree power information in ROADM
- add the per degree info using the EXACT next node uid as identifier
  of the degree
- add the degree identifier on the propagate and call functions

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
2019-11-05 13:16:54 +01:00
Jan Kundrát
029bac4b03 utils: more descriptive name for itufl
This might have nothing to do with the ITU frequency grid (it's really
just about a uniform distribution), so let's give it a more readable
name and more readable parameters.
2019-10-06 20:43:50 +02:00
Jan Kundrát
8d31d924f2 Remove unused function 2019-10-06 20:37:24 +02:00
Jan Kundrát
9af1c90664 Merge pull request #249 from jktjkt/bug-243
Do not mix THz and Hz
2019-09-04 08:18:49 +00:00
Jan Kundrát
81585c5a86 Unify implementations of psi computation
Both of these places referred to "eq. 123 from arXiv:1209.0394", the
only difference (apart from the source of the input parameters, beta2
and asymptotic_length) was calling the two branches "SCI" and "XCI" vs.
"SPM" and "XPM".

In this commit I've only moved the code to a single implementation. The
input data are still being read from the same parameters, of course.
2019-08-08 13:38:23 +02:00
Jan Kundrát
660b8b3c6e Use lin2db() when we have it 2019-08-08 11:16:26 +02:00
Jan Kundrát
a6e741d8fe Do not copy the whole Fiber class 2019-08-08 09:55:23 +02:00
Jan Kundrát
4e786a32b5 Merge branch 'no-convenience-access' into raman
This required some adaptations in the new Raman code now that the
property aliases are gone.
2019-08-06 11:43:16 +02:00
Jan Kundrát
6ecb2c85e2 Merge remote-tracking branch 'origin/develop' into raman
Required fix-ups:
- ROADM restrictions
2019-08-06 11:34:39 +02:00
Jan Kundrát
c249f44ea1 Remove property aliases
For some reason, the code allowed using "convenience names" for
accessing properties since commit 58ac717f. To me, this looks like an
obvious anti-pattern because accessing a single property via three
different names only makes the code less readable. Let's kill this
"feature".

In case of the `Power` class, the code used "ase" and "nli" on the
majority of places, so let's use these abbreviations instead of their
spelt-out variants.

SpectralInformation was "clean" already, but there were calls to the
`update()` wrapper around the `namedtuple._replace`.  Given that there
were no property aliases, it's safe to just call `_replace()` directly.

In case of the `Pref` class, once again always use `p_span0`, `p_spani`
instead of `p0` and `pi` -- it's a trivial change.
2019-08-06 11:14:28 +02:00
Alessio Ferrari
1a1346461b self.pch_out_db in RamanFiber now takes into account Raman gain 2019-07-29 12:33:05 +02:00
Alessio Ferrari
0422956ac6 RamanFiber propagate method now call the propagate_raman_fiber in the science_utils module 2019-06-11 13:40:42 +02:00
Jan Kundrát
603ac9d8c5 Merge pull request #257 from jktjkt/fixes
Python: do not use a mutable default value
2019-06-11 10:46:25 +02:00
Jan Kundrát
89d666948e Fiber: beta2: use a default value directly
Rather than do the None-dance and document the default value within a
docstring, let's use the default value directly. This is safe because
numbers are immutable.
2019-06-06 23:55:16 +02:00
Jan Kundrát
c3499142b0 doc: hyperlinks++ 2019-06-06 23:47:52 +02:00
Jan Kundrát
d8feccc715 Python: do not use a mutable default value
Because default arguments are evaluated *once*, not every time they are
called, a mutable default value is not "reset", and this happens:

>>> from gnpy.core.node import Node
>>> x=Node('123')
>>> y=Node('456')
>>> print(x.metadata)
{'location': Location(latitude=0, longitude=0, city=None, region=None)}
>>> print(y.metadata)
{'location': Location(latitude=0, longitude=0, city=None, region=None)}
>>> y.metadata['foo']=123
>>> print(x.metadata)
{'location': Location(latitude=0, longitude=0, city=None, region=None), 'foo': 123}

This is easily fixable by using an immutable value as a placeholder
here.
2019-06-06 23:29:07 +02:00
Jan Kundrát
16173355f3 docs: random improvements and Sphinxiation 2019-06-06 23:26:12 +02:00
Esther Le Rouzic
d94dc51d88 Restrictions on auto-adding amplifiers into ROADMs
This feature is intended to support designs such as OpenROADM where the
line degree integrates a specific preamp/booster pair. In that case, it
does not make sense for our autodesign to "pick an amplifier". The
restrictions can be activated by:

- Listing them in `eqpt_config.json`, so that they are effective for all
ROADM instances.
- On a per-ROADM basis within the Excel sheet or the JSON definitions.

Restrictions apply to an entire ROADM as a whole, not to the individual
degrees.

If a per-degree exception is needed, the amplifier of this degree can be
defined in the equipment sheet or in the network definition.

If no booster amplifier should be placed on a degree, use the `Fused`
node in place of an amplifier.

Signed-off-by: Esther Le Rouzic <esther.lerouzic@orange.com>
Co-authored-by: Jan Kundrát <jan.kundrat@telecominfraproject.com>
2019-06-06 11:58:45 +02:00
Jan Kundrát
ecfc4a8cb2 One fewer exit() in a library scope 2019-05-30 13:58:33 +02:00
Alessio Ferrari
f0bc2dc62f attribute sim_params added to RamanFiber 2019-05-28 11:11:40 +02:00
Jan Kundrát
9c95fd6b69 Do not mix THz and Hz
While the `itufl()` function uses THz by default, its values depend on
the frequency range that is passed via arguments. In this context, the
f_min and f_max come from the default SpectralInformation which is in
Hz.

Thanks to @ojnas for reporting this.

fixes #243
2019-05-27 18:35:14 +02:00
Alessio Ferrari
e519a3bc39 add class RamanFiber 2019-05-24 10:36:29 +02:00
EstherLerouzic
cdd4c571b0 correction of bugs
exception KeyError type in service sheet not correctly catched
print Request.mode instead of Requestmode (not defined at this point)

selection of modes did not respect min spacing criterium:
constraint added

transmission_main did not give SNR in 0.1 nm: added in std out

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
2019-05-07 12:28:28 +01:00
EstherLerouzic
d7c009167f add units on the stdout answer given by transmission_main_example.py (issue 201)
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
2019-04-09 17:13:40 +01:00
Jean-Luc Auge
94ff8e6beb Advanced amplifier model improvement
-add f_min & f_max frequency definition in amplifier json
-improve interpolation algorithm to support length differences between the spectrum information and the amplifier ripple and dgt frequency definition

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-04 17:14:25 +02:00
Jean-Luc Auge
92239d66fc pass tests
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:09:45 +02:00
Jean-Luc Auge
265dbffc53 Roadm channels power equalization
set individual channel powers wrto the target reference power
tilt and ripple is eliminated after the Roadm

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
0dbcd1f265 manage operational vs calculated values
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
a0f6380f90 improve power mode and gain mode
power mode no longer reads operational_gain:
	now reads operational.dp_db
	or calculate optimum dp_db from next span loss
gain_mode:
	reads operational.gain_target
	or use gain_from_dp

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>

squash to dp

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
ab69cf5bf4 improve Edfa class element
manage default values

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>

squash to improve edfa element

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
3e55a5526a improve power saturation handling
fix issue with low power level (after very long spans) where signal gian
was depleted

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
b6216bb701 operational amplifier delta P target power support
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
7b56e3a6c3 bug fix in dual stage NF calculation
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
c3e00eea2c manage inter-stage padding for dual stage typedef
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
7b9647a063 dual stage
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:08:34 +02:00
Jean-Luc Auge
dbff610d77 Improve auto-design amplifier selection algorithm
support min gain for raman auto-design:
raman amplification is only considered for a span if its gain > specified
min gain of the raman hybrid in eqpt_config

auto-design was checked succesfully when enabling a mix of 6 possible different
amplifiers: low gain, medium gain, hybrid ramans, high power and high
gain amplifiers. They were picked as expected.

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:05:45 +02:00
Jean-Luc Auge
46aae9486e update raman model to work in auto-design
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:05:45 +02:00
Jean-Luc Auge
106af9d444 hybrid raman/edfa model
quick & dirty 1st implementation:
-fixed raman nf and gain,
-no tilt, no ripple,
-no nonlinear contribution,
-no pump power reduction from egress con loss

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-04-03 14:05:45 +02:00
James Powell
2e7aa213ed add units to OSNR 2019-03-04 17:00:41 -05:00
James Powell
5f8621c224 changes for OFC demo 2019-03-04 12:32:26 -05:00
Jean-Luc Auge
76c8296a5d remove osnr_nli update when adding add_drop_osnr or tx_osnr
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-23 14:52:02 +01:00
Jean-Luc Auge
8635a7c182 Code fix: non cumulative osnr penalties
add Tx_osnr or add_drop_osnr on raw snr values to avoid cumulated adding

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>

bug fix: forgot to add add_drop_osnr with tx_osnr

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-23 10:29:30 +01:00
Jean-Luc Auge
46d25df241 add Tx_osnr at the end of the transmission
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-22 18:05:19 +01:00
Jean-Luc Auge
771af4991c carrier probe point for Edfa and Fiber elements
save and be able to retrieve the carrier information processed by Edfa
and Fiber elements:
@ input & output of the element
- channel power: ase, nli, signal and total

Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-14 12:20:45 +01:00
Jean-Luc Auge
a08ce9ecb7 gain mode fix
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-14 12:16:16 +01:00
Jean-Luc Auge
c0cc5fa9fd Improve ROADM loss calculation in power mode
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-11 12:28:39 +01:00
Jean-Luc Auge
4bd9a9cdda final openroadm models implementation
Signed-off-by: Jean-Luc Auge <jeanluc.auge@orange.com>
2019-01-11 12:26:48 +01:00
Jonas Mårtensson
61289119cb fix OSNR calculation when ASE or NLI is zero 2018-12-13 11:07:16 +01:00