forked from Jomiri/pyfiberamp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.html
496 lines (407 loc) · 15.4 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
<title>Introduction to PyFiberAmp</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="introduction-to-pyfiberamp">
<h1 class="title">Introduction to PyFiberAmp</h1>
<p>PyFiberAmp is a rate equation simulation library for rare-earth-doped fiber amplifiers and fiber lasers partly based on
the Giles model <a class="footnote-reference" href="#id3" id="id1">[1]</a>.</p>
<p>With PyFiberAmp you can simulate:</p>
<ul class="simple">
<li>Both core-pumped and double-clad fiber amplifiers</li>
<li>Simple continuous-wave, gain-switched and Q-switched fiber lasers</li>
<li>Unlimited number of pump, signal and ASE channels</li>
<li>Limited number of Raman channels</li>
<li>Arbitrarily time-dependent beams from continuous-wave to nanosecond pulses</li>
<li>Radially varying dopant concentration and excitation</li>
<li>Automatically calculated Bessel, Gaussian and top-hat mode shapes</li>
</ul>
<p>Additional benefits include:</p>
<ul class="simple">
<li>Built-in plotting commands: easy visualization of results</li>
<li>Python interface: convenient for post-processing the data</li>
<li>C++, Numba and Pythran backends: fast time-dynamic simulations</li>
<li>Open source: see what's happening under the hood</li>
<li>Free of charge: install on as many computers as you like</li>
</ul>
<p>Documentation is still in progress and available on <a class="reference external" href="https://pyfiberamp.readthedocs.io/en/latest/index.html">Read the Docs</a>.
For practical examples, see the examples folder above. If you have a question, comment or feature request, please open a new issue on
GitHub or contact me at <a class="reference external" href="mailto:pyfiberamp@gmail.com">pyfiberamp@gmail.com</a>. If you find PyFiberAmp useful in your own project, I would also very much
like to hear about it.</p>
<div class="section" id="a-visual-example">
<h1>A visual example</h1>
<p>Few-nanosecond pulses propagating in an Yb-doped fiber amplifier are distorted because of gain saturation.
The Gaussian pulse with its exponential leading edge retains its shape better than the square or saw-tooth
pulses.</p>
<img alt="docs/images/pulses.gif" class="align-center" src="docs/images/pulses.gif" />
</div>
<div class="section" id="download">
<h1>Download</h1>
<p>PyFiberAmp is not yet on PyPI. You can either download the code as a zip-file or clone the repository with</p>
<pre class="literal-block">
git clone git://github.com/Jomiri/pyfiberamp.git
</pre>
<p>and then install the library by executing</p>
<pre class="literal-block">
python setup.py install
</pre>
<p>in the (unzipped) download directory.</p>
</div>
<div class="section" id="system-requirements">
<h1>System requirements</h1>
<p>PyFiberAmp depends on the standard scientific Python packages: Numpy, SciPy and Matplotlib and has been
tested on Windows 7 and Windows 10. It should work on other operating systems as well
provided that Python and the required packages are installed. The <a class="reference external" href="https://www.anaconda.com/download/">Anaconda distribution</a> contains everything you'll need out of the box.</p>
<p>Even though all of PyFiberAmp's functionality is available in interpreted Python code, the use of one of the compiled
backends (C++, Numba or Pythran) is recommended for computationally intensive time-dynamic simulations.
The hand-written C++ extension is fastest but has also the strictest system requirements: Windows 7 or 10, Python 3.6 and a fairly modern
CPU with AVX2 instruction support. The Pythran backend probably only works on Linux and requires that <a class="reference external" href="https://pythran.readthedocs.io/en/latest/">pythran</a>
is installed before installing PyFiberAmp. The Numba backend should work on all operating systems provided that <a class="reference external" href="https://numba.pydata.org/">Numba</a>
is available. Please open a new issue if you encounter problems with a backend that should work but does not.</p>
</div>
<div class="section" id="example">
<h1>Example</h1>
<p>The simple example below demonstrates a core-pumped Yb-doped fiber amplifier. All units are in SI.</p>
<pre class="literal-block">
from pyfiberamp.steady_state import SteadyStateSimulation
from pyfiberamp.fibers import YbDopedFiber
yb_number_density = 2e25 # m^-3
core_radius = 3e-6 # m
length = 2.5 # m
core_na = 0.12
fiber = YbDopedFiber(length=length,
core_radius=core_radius,
ion_number_density=yb_number_density,
background_loss=0,
core_na=core_na)
simulation = SteadyStateSimulation()
simulation.fiber = fiber
simulation.add_cw_signal(wl=1035e-9, power=2e-3)
simulation.add_forward_pump(wl=976e-9, power=300e-3)
simulation.add_ase(wl_start=1000e-9, wl_end=1080e-9, n_bins=80)
result = simulation.run(tol=1e-5)
result.plot_amplifier_result()
</pre>
<p>The script calculates and plots the power evolution in the amplifier and the amplified spontaneous emission (ASE)
spectra. The co-propagating pump is absorbed in the first ~1.2 m of the fiber while the signal experiences gain.
When the pump has been depleted, the signal starts to be reabsorbed. ASE is stronger against the pumping direction.</p>
<img alt="docs/images/readme_power_evolution.png" class="align-center" src="docs/images/readme_power_evolution.png" style="width: 769px; height: 543px;" />
<img alt="docs/images/readme_ase_spectra.png" class="align-center" src="docs/images/readme_ase_spectra.png" style="width: 769px; height: 543px;" />
<p>For more usage examples, please see the Jupyter notebooks in the examples folder. More examples will be added in the
future.</p>
</div>
<div class="section" id="fiber-data">
<h1>Fiber data</h1>
<p>PyFiberAmp comes with spectroscopic data (effective absorption and emission cross sections) for Yb-doped germanosilicate
fibers <a class="footnote-reference" href="#id5" id="id2">[3]</a> and supports importing spectra for other dopants and glass compositions.</p>
</div>
<div class="section" id="theory-basics">
<h1>Theory basics</h1>
<p>For a quick review on the theory, see the <a class="reference external" href="https://github.com/Jomiri/pyfiberamp/blob/master/pyfiberamp%20theory.pdf">pyfiberamp theory.pdf</a> file. Theory on the time-dynamic
simulations is not yet included. A more complete description can be found in the references.</p>
</div>
<div class="section" id="license">
<h1>License</h1>
<p>PyFiberAmp is licensed under the MIT license. The C++ extension depends on the <a class="reference external" href="https://github.com/pybind/pybind11">pybind11</a> and <a class="reference external" href="http://arma.sourceforge.net/">Armadillo</a> projects. See the license file
for their respective licenses.</p>
</div>
<div class="section" id="references">
<h1>References</h1>
<table class="docutils footnote" frame="void" id="id3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>C.R. Giles and E. Desurvire, "Modeling erbium-doped fiber amplifiers," in Journal of Lightwave Technology, vol. 9, no. 2, pp. 271-283, Feb 1991. doi: 10.1109/50.65886</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[2]</td><td>R.G. Smith, "Optical Power Handling Capacity of Low Loss Optical Fibers as Determined by Stimulated Raman and Brillouin Scattering," Appl. Opt. 11, 2489-2494 (1972)</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[3]</a></td><td><ol class="first last upperalpha simple" start="18">
<li>Paschotta, J. Nilsson, A. C. Tropper and D. C. Hanna, "Ytterbium-doped fiber amplifiers," in IEEE Journal of Quantum Electronics, vol. 33, no. 7, pp. 1049-1056, Jul 1997. doi: 10.1109/3.594865</li>
</ol>
</td></tr>
</tbody>
</table>
</div>
</div>
</body>
</html>