forked from demisjohn/CAMFR
-
Notifications
You must be signed in to change notification settings - Fork 1
/
TODO
222 lines (159 loc) · 6.86 KB
/
TODO
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
-don't polute global namespace with scipy
-document photonic wire, plot example of BlochStack, Cavity
-document BlochSection
-document band diagrams
-document Blochstack
-document ASR solver
-document keep_all_estimates?
-example with scipy.io.write_array(outfile, P_TM)
-GARCLED: tip to choose ref index non integer
-testsuite for oleds
-PhC splitter in testsuite
-what to do with code for grating at the substrate side?
-T scheme when S scheme fails due to resonance?
-change blochmode.get_kx() to blochmode.kx()
-add doc to make sure the cladding is large enough
-add doc to do all the dimensions in micron
-loss is negative index
-add doc to use geometry only fo a single period
-BlochStack(0) + .. + BlochStack(0) doesn't cache calculations.
-switch to SVN on sourceforge?
-cmake?
-investigate setuptools
-investigate pyste?
-check if numpy wrappers can get rid of copying
-check ref_counting in these wrappers
-compare with numpy boost python code
-pass C++ exception to Python
-see if camfr_wrap can be updated further (default arguments, python function)
-fPIC, optimise options for fortran, scons bug?
-testsuite windows
-overlap_slice under windows.
-write Error: didn't find enough modes, and Warning: singular system to stdout?
-check -funroll_loops
-test with -Wall
-remove explicit dependency on python version from machine_cfp.py.
-get rid of backward modes detection and use always lossy branchcut?
-speed up slabs with small delta n
-experiment with precompiled headers
-BlochSection with single non-uniform slab
-fix pw_vcsel.py
-phasar2.py
-plot doesn't work for Circ waveguide
-free_temps: slab_cache = []
-document flux failure for PML?
-circ: tracking solver in eps rather than in n
-plot n section doesn't work
-take kx0, .. into account for recalc_needed() for BlochSection
-stabilise PML in series solver
-series solver for degenerate waveguides: double_prism, zipper (relax mueller),
dircoup (PML)
-S_flux at arbitrary position
-circ S flux does not respect begin and end point
-infstack: fix ext_field_expansion, calc_interface_field, fw_bw(s.length())
-reformulate TE as fourier series
-Trent's algorithm to invert Toeplitz
-always take minimum number of modes in series solver
-stability tips for infstacks
-planar set_kt
-time 'a = b + multiply()' vs 'c.reference(multiply()); a = b+c'
-band calculation with fixed k_t
-averaging of eps
-remove f,zabs debug code from slabmode.cpp
-document field_calc_heuristic
-mode_calc from core only for guided modes
-try RCWA like overlap scheme. Could be more stable.
-definition of cladding index in 3D doesn't work well for graded index
structures.
CAMFR 3D:
-implement Ez, Hz in plane wave modes
-use blas for overlap calculations
-revisit calc_global in combination with arnoldi eigensolver.
-calc_band --> calc_overlap: need normalisation for calc_global?
-check if creation of extra interface in middle of core is needed
-clean up RefSectionMode::field (not used, but still)
-re-enable symmetry?
-improve interface of SectionDisp, remove f member of Section
-rework place where stack gets split up in left and right part (3D_core.py)
-optimise ref section overlap
-Section1D: both TE and TM modes, normalise, fw_bw_at, compare to 2D, kz=0
-free slabmatrixcache?
-generalise cache to work with different M in each section.
-implement SectionFlux
-pml=0 in simple_stack.py worng sign of kz
-dispersion relation of 2D slabs: try to eliminate need for O_II_I in
interface.cpp
-Remove kludge for normalising coodinates in field profiles
-PML in z direction (check field profiles, numeric overlap integral)
-speed up nomalisation through cache?
-slaboverlap TE_TM: introduce 'same' function
MEDIUM TERM:
-enum.export_values()
-speed up M - U1, where U1 is unit matrix
-speed up S_scheme_fields by avoiding explicit matrix multiplication.
-short cut check_error in Bessel functions
-try to prevent user from plotting in an infstack.
-inc/ext_S_flux: split over materials
-possibility to set PML layer by layer
-more general handling of decoupled waveguides
-eliminate warning for zero transmission through wall when calculating
fields in stack
-group identical sections in Geometry
-blochmode fw,bw at
-easier notation for InfStack: inf*(expression)?
-prevent GC of temporary objects in expressions (walls, flipped, infstack)
-new function: stack::field(r0, r1, delta_r) to calc field on a grid,
ability to cache field profiles and speed up
-stack field on layer discontinuity: speed up by not propagating
-cleverer inc/ext_field_expansion that does not calculate internal fields
when not needed
-implement Bloch modes for MonoScatterers, InfStack for DiagScatters
-speed up Bloch for symmetric structures?
-investigate throwing exceptions to Python
-tune new complex zero finder
-related: make definition of C_upperright uniform
-related: test it for leaky modes
-related: reenable complex modes in circ
-related: test sign of beta in backward modes in circ (using power flux)
-investigate mode problems for CircM with large claddings
-use asymptotic expansions to find high order modes for circular
structures
-write a GUI for defining complicated structures
-add Python docbook comments
-making stripping of executable dependent on debug switches
-automatic setting of global.orthogonal
-explicitly return *all* modes found in Cavity::find_all_modes
-make 'precision' dynamic
-global numeric status register?
-cavity::calc_sigma: instead of using only the fw field, is it more robust
to use fw_backward field to determine dominant mode?
-cavity: instead of using SVD, use eigenvalue decomposition or Arnoldi
-try out LAPACK 3.0 special svd routine (zgesdd)
-PC_wall: add waveguide interface if needed
-faster location of PC_wall eigenmodes
-convert slabwall PC to Material Stacks
-slabwall: cache get_R12 for startfield, get_error
-kill virtual functions in SlabWall (perhaps elsewhere too, get_kz()?)
-PC and TBC walls for Sections
SOURCE MAINTENANCE
-dynamic name of camfr library (i.e. camfr vs camfr_work defined in only
one place) http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/223972
-Use scons Clean function
-remove old mode profile calculator
-Section sorter to mode.h
-build: eliminate as many makefiles as possible
-remove set_precision_enhancement and friends
-make the C++ naming convention more uniform and in sync with Python names
(e.g. circ_disp -> CircDisp, Material_length -> MaterialLength, ...)
-use BaseMaterial where appropriate
-completely redesign / rework Expression and its link to Stack
-make state of inc_field_bw consistent when calling set_interface_field
LOW PRIORITY
-is reciprocity exploitable?
-auto-partitioning of stacks in optimal diagonal substacks
-narrower minima in cavity::find_all_modes? (Peter)
-tilde in S_scheme: return more refs? (Peter)
-split scaling (Peter)
-scaling for complex modes, scaling when tracing (Peter)
-check sqrt(power) -> -1 norm (Peter)
-related: consolidate signedsqrt in material.h and circ.cpp (Peter)