CAMFR
CAMFR copied to clipboard
TO DO file text
From @demisjohn on March 30, 2018 5:48
# Copied from the "TODO" file in the repo. Presumably Peter Beinstman's list of action items.
-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_cfg.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)
Copied from original issue: demisjohn/CAMFR#11