CAMFR icon indicating copy to clipboard operation
CAMFR copied to clipboard

TO DO file text

Open demisjohn opened this issue 6 years ago • 0 comments

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

demisjohn avatar Apr 11 '18 04:04 demisjohn