PLaSK library
Loading...
Searching...
No Matches
bisection.hpp
Go to the documentation of this file.
1
/*
2
* This file is part of PLaSK (https://plask.app) by Photonics Group at TUL
3
* Copyright (c) 2022 Lodz University of Technology
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, version 3.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*/
14
#ifndef PLASK__OPTICAL_EFFECTIVE_BISECTION_H
15
#define PLASK__OPTICAL_EFFECTIVE_BISECTION_H
16
17
#include <
plask/plask.hpp
>
18
19
namespace
plask
{
namespace
optical {
namespace
effective {
20
21
struct
Contour
{
22
23
const
Solver
*
solver
;
24
25
const
std::function<dcomplex(dcomplex)>&
fun
;
26
27
double
re0
,
28
im0
,
29
re1
,
30
im1
;
31
32
DataVector<dcomplex>
bottom
,
33
right
,
34
top
,
35
left
;
36
37
Contour
(
const
Solver
*
solver
,
const
std::function<dcomplex(dcomplex)>&
fun
):
solver
(
solver
),
fun
(
fun
) {};
38
39
Contour
(
const
Contour
& src):
solver
(src.
solver
),
fun
(src.
fun
),
re0
(src.
re0
),
im0
(src.
im0
),
re1
(src.
re1
),
im1
(src.
im1
),
40
bottom
(src.
bottom
),
right
(src.
right
),
top
(src.
top
),
left
(src.
left
) {}
41
42
Contour
(
Contour
&& src):
solver
(src.
solver
),
fun
(src.
fun
),
re0
(src.
re0
),
im0
(src.
im0
),
re1
(src.
re1
),
im1
(src.
im1
),
43
bottom
(
std
::move(src.
bottom
)),
right
(
std
::move(src.
right
)),
top
(
std
::move(src.
top
)),
left
(
std
::move(src.
left
)) {}
44
52
Contour
(
const
Solver
*
solver
,
const
std::function<dcomplex(dcomplex)>&
fun
, dcomplex
corner0
, dcomplex
corner1
,
size_t
ren
,
size_t
imn
);
53
58
int
winding
()
const
{
59
return
crossings(
bottom
,
re0
,
im0
,
re1
,
im0
)
60
+ crossings(
right
,
re1
,
im0
,
re1
,
im1
)
61
- crossings(
top
,
re1
,
im1
,
re0
,
im1
)
62
- crossings(
left
,
re0
,
im1
,
re0
,
im0
);
63
}
64
72
std::pair<Contour,Contour>
divide
(
double
reps,
double
ieps)
const
;
73
74
private
:
75
77
int
crossings(
const
DataVector<dcomplex>
& line,
double
r0
,
double
i0
,
double
r1
,
double
i1
)
const
;
78
79
};
80
90
std::vector<std::pair<dcomplex,dcomplex>>
findZeros
(
const
Solver
* solver,
const
std::function<dcomplex(dcomplex)>&
fun
,
91
dcomplex
corner0
, dcomplex
corner1
,
size_t
resteps
,
size_t
imsteps
, dcomplex eps);
92
93
}}}
// namespace plask::optical::effective
94
95
#endif
// PLASK__OPTICAL_EFFECTIVE_BISECTION_H
solvers
optical
effective
bisection.hpp
Generated by
1.9.8