-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathTODO
More file actions
executable file
·331 lines (205 loc) · 25.1 KB
/
TODO
File metadata and controls
executable file
·331 lines (205 loc) · 25.1 KB
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
HIGH PRIORITY:
12/15/2013: Absorb 1/2 factor into Lorentz polarization currents for efficiency.
06/30/2013 : Implement arbitrary number of Lorentz pole pairs.
1) Come up with a common formulation between Drude and Lorentz. Reuse Drude arrays for Lorentz.
1a) The arrays used for Drude can translate to Lorentz as follows:
In Drude In Lorentz
--------- ---------------------------
eps_r (eps_r_inf) -> eps_r (eps_r_inf)
omega_p -> omega_p
tau_r (rename to tau_p?) -> 1/(delta_p)
We will need a new array for sqrt(delta_eps_p)*omega_p in Lorentz dispersion. We can call this Omega_p (capitalized). A mixture of delta_eps_p and omega_p is used instead of delta_eps_p alone to make the common formulation between Drude and Lorentz more transparent. If omega_p of Lorentz is made zero and Omega_p of Lorentz set to omega_p of Drude, the Lorentz formulation will reduce to the Drude formulation.
2) Do the resizing of Lorentzian parameters AFTER read_geom.cpp. Maintain boolean array inside read_geom.cpp (by resizing every time), use this boolean array later for resizing the arrays.
3) In update.cpp, design efficient ways to check for the presence of:
3a) Permeability
3b) Electric, magnetic conductivity
3c) Drude, Lorentz dispersion
If possible, enlist the compiler for writing routines for the combinations of these. Doing this manually is not a viable option.
4) Update init.cpp, initgeom.cpp, read_mat.cpp, update_full.cpp (or other new ones -- see (3) above), place_obj.cpp.
5) Implementation plan:
5a) Design cfg user interface. Change names of Drude parameters, choose more general names, deprecate Drude names. Change cff_utils.cpp::CheckAngoraGroupSetting to check for these deprecated options. Update Angora documentation.
5b) Update read_mat.cpp. Read the new Lorentz config options. Add new class members to Cmat for Lorentz dispersion.
5c) Update place_obj.cpp. Decide which new update arrays to add.
5d) Update update_full.cpp, implement Lorentz dispersion updates.
6) (sort of) independent of the above: Allocate the Lorentz constitutitive parameter and update arrays dynamically after read_geom.cpp. (CONFLICT: These need to be updated in place_obj.cpp, which is called from read_geom.cpp. POSSIBLE SOLUTION: Allocate arrays with correct # of poles after read_mat.cpp, where this number is determined.).
7) Make the pole index the LAST index in the update arrays. Then use pointer incrementing to update each pole.
8) Don't forget to zero out the remaining poles, if the material written to the grid has less than maximum # of poles.
12/12/2012 : Implement Drude dispersion with multiple poles.
12/12/2012 : Implement plane wave incidence for layers with Drude dispersion.
12/12/2012 : Implement PML for layers with Drude dispersion.
12/10/2012 : Find a better alternative to Array<bool,3> for the dispersion flag arrays.
08/06/2012 : Write an "analytic" waveform class that takes a real Cwf object as an argument. Also, fix the "empty Hilbert transform" problem with Cpw_ml+Cwf_gaussian. (After creating the analytic Cwf class, create such an analytic object if there are evanescent layers. Throw exception if the waveform does not have well-defined Hilb. tr.)
07/25/2012 : Remove PlaceGround(**), since it is not recognized by the Ctr_pd_ml. Let the PlaceSlab,PlacePECSlab,PlaceGround functions analyze and modify the layers. Also, the layer boundaries must be continuous, and not limited by cell boundaries. (In its current form, a layer placed 1 cell below the grid boundary will take the PEC permittivity for averaging)
03/17/2012 : In Cflb, Chgb and Cfb, lump the plane waves that are so close to each other that the phase difference across the grid is negligible into one plane wave. This helps reduce the number of pw.s when the grid size stays the same but the beam halfwidth goes up. It should reduce to a single plane wave asymptotically.
11/07/2011 : Implement phasor recording for lines and 2d cross sections.
04/24/2012 : Convert all "cout"s to exceptions.
04/09/2012 : Implement the boundary interpolations within place_obj only for the PlanarLayer shapes.
04/07/2012 : Place exceptions inside Cpw_** to signal the presence of loss in the incidence half space.
04/07/2012 : Evanescent waves are less accurate for lossy layers (put warning in documentation?)
04/01/2012 : Solve the node-limit assignment optimization problem. Currently, the PML algorithm *does* support nodes cutting through the PML, but the "one node per PML" policy is still in effect. (NOTE: PML cells take 3 times to update -- since there are 2 extra operations on top of the regular update)
04/02/2012 : Somehow figure out how to limit the kappa_*** divisions in the main updates to the PML region.
02/28/2012 : Implement and use the "PlanarLayer" object for layer placement. Maybe before that, implement the mid-cell layer boundaries.
02/28/2012 : Implement the shape transformations, unions, subtractions, and intersections.
06/03/2011 : Every ***DataType class should be called using a constructor with ALL the options initialized AT ONCE. For this, every such class (or struct) should have the minimal number of options. (For the users of the library version, write interface classes [such as the "Directions" class] to communicate complicated option objects such as blitz++ arrays to the ***DataType objects)
11/07/2011 : Solve the exception problem when only one node throws an exception.
11/16/2011 : Make sure the invalid config options are checked regardless of whether the option is enabled for the current run. (This can be done by enclosing only the Add*** or Create*** part in the "SettingEnabledForGrid()")
03/13/2012 : Make the number of modes in the GSMB automatic.
06/17/2011 : A "PlanarZLayer" object could be a derived class from the shape object, with center and orientation input. The layering should only be changed when a homogeneous object with this shape is placed into the grid.
03/13/2012 : Simplify the recorder class (use templates? function handles for field operations? (abs etc.))
07/11/2011 : Implement the capability to create "shape" objects with random surfaces.
11/08/2011 : "RandomMaterials" should only specify the material properties, not the shape info. An object with random material should be placed with a combination of a shape object and a random material object.
05/17/2011 : Add permeability support to classes Ctr_td_* and Cpw_*.
04/21/2011 : Automatically determine the duration of simulation by keeping track of the energy in the grid.
03/19/2012 : Make the IncidenEx, etc. in Cpw_ml_inc.cpp much more efficient.
03/20/2012 : Combine WriteScatteredPWDirection and WriteScatteredPWDelayFromOrigin in Cpw.
06/10/2011 : Implement the capability to output selected material properties in 3D (including refractive index) to a (HDF5) file.
06/10/2011 : Generalize PML to anisotropic layers. (original formulation is still valid: should not take much implementation, just some tinkering)
06/08/2011 : Quantify how much the discretization of material properties affects scattering by a simple comparison.
06/03/2011 : Write a little test suite (cfg+matlab?) using a GMM code.
MEDIUM PRIORITY:
07/25/2011 : For Ctr_pd_**: Downsample the FDTD output as much as possible to obtain the desired frequencies without aliasing.
04/19/2012 : Find a faster alternative to KissFFT for 3-D Fourier transforms.
06/17/2011 : "Reading geometry from file" should be only done with a file that was automatically generated by a future generation/conversion/importing program (e.g. Todd's method). Everything else should be created by internal methods (shapes, materials, etc.)
02/24/2012 : Maintain a global "max_field_value" but don't let it be modified in the config file. Initialize it to 0, and add to it the PW amplitudes in Cpw_**. Move "max_field_value" into Crecorder_movie, change its name into something like "discretization_max_value". If it is not specified, look at the global "max_field_value". If that is still 0, then choose "discretization_max_value=1.0".
01/13/2012 : Fix the issue of random-media placement when the /tmp directory is not common to all the nodes on a cluster. (FIX: Use $TMPDIR environment variable set by PBS!!!!!)
11/07/2011 : Either use some AVI creation library such as libavcodec or write extra binary for converting custom Crecorder_movie and Crecorder_line output to AVI and/or MPEG, include in distribution.
02/23/2012 : Convert the "Transformer" pointer to a smart pointer in Cimg.
03/01/2012 : Convert the "Cpointsources" pointer in Ctr_td to a smart pointer.
03/02/2012 : Add a "delete" line for all the "char* .. = new ..."
07/29/2011 : Improve the accuracy of Ctr_pd_** with lossy layers (better grid-velocity correction? better interface averaging?)
07/27/2011 : Disable forced static linking with the HDF5 libraries.
07/26/2011 : Make the error message the last line in the standard output.
07/22/2011 : Remove MPI_exit().
07/22/2011 : Remove #include <blitz/array.h> from places where it is unnecessary.
07/21/2011 : Make the recorded_position variable into double, and do averaging to get the frame.
07/20/2011 : Write in-class exceptions that handle the name and index of every object that throws them.
07/18/2011 : Check for the blitz and libconfig libraries in configure. (Use pkg-config?)
07/14/2011 : Remove hidden dependencies by making sure every .h is #include'd first in *some* cpp file.
07/14/2011 : (for the library version) Write copy constructors for objects that have pointers with heap-allocated data. (Ctfsf, Cwfs, etc)
06/24/2011 : Make PlaceMaterialRegionFromFile an internal function. In the future, it can be generalized sufficiently to include in the config file and the library interface.
06/21/2011 : Have the ***DataType structs check the validity of the options entered (both in the config file and the library version). This way, "fdtd -c" will catch invalid options. The classes that take the ***DataType objects as arguments do not need to recheck the validity of the options.
06/20/2011 : Create a TFSFBox class (maybe a derived class of a "TFSFSurface" class) for the use of all the TF/SF classes. It could handle its own margins (and even the parallel portioning of the surface.)
06/22/2011 : Remove all "cout"s from the internal functions (those that will be in the library version), and implement exceptions instead. The fdtd.cpp or any read_***.cpp can output to the screen, as they are part of the stand-alone executable.
06/16/2011 : There is not much problem in material-boundary interpolations in terms of material indices. ~10 different material types for each boundary should be enough. The real problem is with highly-inhomogeneous (random?) materials. One idea: Make the (max # of materials)/(inhomogeneous region) customizable, and tell the user to reduce it when necessary.
06/21/2011 : For Cpw_ml: Add support for PWs coming from the lower half space.
06/21/2011 : Generalize Cfp, Chgp etc. to an arbitrary direction of propagation.
06/16/2011 : Add exceptions for signaling that the material index ranges have been exceeded.
06/16/2011 : Solve the RecordedMaterialIndex problem in Crecorder_movie (different field components may have different types)
06/15/2011 : Remove analyze_layering() and find_extremal_constitutive_params(); have PlaceSlab, PlacePECSlab, PlaceGround, AddMaterial etc. do their jobs. Make sure the variables epsilon_r_upper, mu_r_upper, c_upper, epsilon_r_lower, mu_r_lower, c_lower, epsilon_r_max, epsilon_r_min, mu_r_max, mu_r_min are only updated inside the material-geometry handling functions.
06/16/2011 : Define a macro for a "transparent" material index (maybe max. for that type).
06/15/2011 : Remove GridIndex from anything but fdtd.cpp and read_****.* (it is usually in error reports, except a weird case in Cgsmp)
06/10/2011 : Read all the positions in continuous type, do interpolation, etc. internally.
06/10/2011 : Write PlaceMaterialSheet(MaterialId&) instead of PlaceGround, etc.
06/10/2011 : Improve the config option NewMaterials to enable diagonally anisotropic materials.
06/07/2011 : Separate fdtd.cpp from the rest by clear boundaries, as the rest should be made into a library later on.
05/02/2011 : Implement phasor-domain recording classes for field components, electric/magnetic energy, Poynting vector. (all in HDF5)
04/29/2011 : Implement Debye, Lorentz dispersive materials.
04/22/2011 : Find a compact way to control writing/not writing to stdout depending on the MPI rank. (define custom ostream that writes to cout or does nothing depending on the rank)
04/28/2011 : Put everything in some namespace, create a library and enable linking to that library. (requires "Developer's Guide")
06/03/2011 : Implement "-q" quiet mode and integrate with the global MPI-overridden stdout. Also implement "--no-warnings" or something to turn off warnings.
05/02/2011 : Automate the TF/SF and NFFFT boundary margins by analyzing the FDTD grid at the end of the geometry placement.
06/03/2011 : Remove the ugly -1 initialization for # of pws in Cfp (and other applicable classes)
05/02/2011 : (Intermediate term) Write a comprehensive (cfg+matlab?) test suite.
06/03/2011 : (Crecorder_movie, with HDF5 recording) Create options to output material-property profiles in separate datasets.
05/12/2011 : Allow the disabling of geometry overlay in Crecorder_movie.
05/20/2011 : Collect the exponents in one paranthesis in the post-processing steps of Ctr_pd_*.
05/10/2011 : Implement subpixel smoothing: (This requires the implementation of anisotropy with *arbitrary* principal axes)
(http://www-math.mit.edu/~stevenj/papers/papers_abstracts.html#FarjadpourRo06)
(http://www-math.mit.edu/~stevenj/papers/OskooiKo09.pdf)
04/28/2011 : Implement periodic boundary conditions (at least for the normal-incidence case) -- Also needs Fourier NFFFT
06/03/2011 : Implement xy, xz, yz mirror symmetries (even-odd), 90deg and 180deg rotation symmetries around x,y,z axes
05/17/2011 : Create a "Directions" config option for specifying a collection of directions in various ways (list, range, from file, etc.) These directions can then be used by the phasor-domain NFFFT.
04/29/2011 : Implement different dx,dy,dz.
04/12/2011 : Implement FFT-based frequency-domain NFFFT for multilayered media.
04/11/2011 : Add functionality of signal handling, and continuing a previously interrupted simulation.
07/09/2011 : Figure out the correct averaging of the electric and magnetic conductivities at material interfaces.
06/03/2011 : Implement 2D and 1D simulation option.
LOW PRIORITY:
08/11/2011 : Use the "grounded" array in Ctr_pd_ml to handle the grounded layer interfaces. (better yet: keep track of layers in a continuous fashion)
11/14/2011 : (Ctr_td_3l) Solve the extreme delay problem for a PEC half space.
11/14/2011 : (Ctr_td_3l) Correct the output when the point source has fractional position or is outside the grid.
08/11/2011 : Generalize Ctr_pd_2l to a grounded half space.
08/03/2011 : (Ctr_pd_**) Correct the k_o normalization when the observation half space is lossy. [seems to work as is, but I don't know why!]
08/03/2011 : (Ctr_pd_**) Implement a cache for (l,theta) pairs to speed up the TL function calculations.
07/29/2011 : Turn all references to global iteration indices i,j,k (extern int i,j,k) into unnamed-namespace variables.
07/28/2011 : Turn the 3D arrays in Ctr_pd_** into functions, if the value for a given (l,d1,d2) is not needed multiple times (at most twice?).
07/28/2011 : Find a more efficient way than to MPI_Barrier() all nodes in Ctr_pd_ml for the post-processing progress counter.
07/26/2011 : Remove the Boost dependence when "shared_ptr" is part of the C++ standard library.
06/15/2011 : Fix the weird GridIndex usage in Cgsmp
06/10/2011 : Issue warning when the positions for the recorders fall outside the grid range.
06/30/2011 : Remove KissFFT preprocessor macro, use template classes.
06/22/2011 : Add "jwt" or "-iwt" harmonic time convention option into Ctr_pd and derived classes (also, future phasor field recorder classes).
04/27/2011 : Make the placement of the CPML more configurable.
04/24/2011 : Find formulas in the literature for 2nd order accurate conductivities at planar interfaces.
05/03/2011 : After implementing the imaging algorithm in the C++ code, write separate binary for creating images from far-field data.
05/17/2011 : Make the collector objects (Cnffft_pd,Ctfsf,etc.) static objects in the classes. (?)
05/23/2011 : Generalize the direction definitions in Ctr_* to other orientations of the xyz coordinate system.
05/20/2011 : Remove the non-array initialization list members from the constructor of TrDataType_pd.
05/19/2011 : Add a command-line option to the executable that gives the best # of processors to allocate for parallel execution.
05/17/2011 : Solve the 90-degree NaN problem in Ctr_pd_2l.
05/16/2011 : Solve the 1-frequency "squeeze" problem in the matlab script.
05/03/2011 : Check if having indices for every object is a good idea after all.
05/02/2011 : Find a way for Cimg (and maybe Cnffft_pd,td) to get the PW excitation data automatically.
04/29/2011 : Implement arithmetic operators between Cwf objects.
05/06/2010 : Keep a centralized log file (?)
05/05/2010 : Straighten out the estimation microsec/nanosec business.
02/12/2010 : epsilon_r_upper,epsilon_r_lower,c_upper,c_lower should also be removed from the global scope.
02/12/2010 : File paths should be fed into the class constructors so the classes can themselves create the paths.
09/01/2009 : Convert the section info in the movie file name to uppercase.
06/25/2009 : (To reduce Cpw_ml memory usage) Use the same auxiliary grids TimeHistory_Ee, TimeHistory_Eh, TimeHistory_Ez, TimeHistory_He, TimeHistory_Hh, TimeHistory_Hz for the same THETA, different PHI's. For this, a different type of Cpw_ml can be implemented that updates more than one PHI at a time (at the same THETA), and shares the same auxiliary grids.
06/25/2009 : (To reduce Cpw_ml memory usage) Revert back to a two-dimensional auxiliary grid, in order to avoid saving the time history. Instead, each node can maintain the portion of the principal plane that covers its own TF/SF surface. The entire z-dimension still has to be stored by all nodes.
06/23/2011 : When the C99 gamma function is standard, remove the cephes library from the code.
COMPLETED TASKS:
--- 04/24/2011 : c_upper, c_lower etc are updated both in PlaceSlab and at the end of load_geometry(). Fix this.
--- 04/21/2011 : Implement a --check command line option for error and warning checks without running the main simulation.
--- 04/24/2011 : Add the materials for planar interfaces using AddMaterial (maybe full anisotropic overload) in PlaceSlab.
--- 04/24/2011 : In Cpw and Cpointsources, minimum wavelength is w.r.t. epsilon_r_upper. Fix this.
--- 04/22/2011 : Use Cpw_ml for 2-layered media if there are evanescent waves present. (Use exception in Cpw_2l??)
--- 05/12/2011 : Add polarization of incident PW to the focused-pulse classes.
--- 04/28/2011 : Implement the imaging algorithm in the C++ code.
--- 06/06/2011 : Download the HDF5 library on the cluster.
--- 06/08/2011 : Make the definition of the PEC material more well defined (magnetic properties?)
--- 06/13/2011 : There is a problem with the 2-layer PW injector: When the tf/sf box is entirely in one half space, it doesn't work. (The tf/sf margins for the 3 plane waves are kept the same, instead of breaking the tf/sf box up into 2 patches at the interface.)
--- 06/10/2011 : There is a problem with the -50db accuracy of the free-space PW injector. (The problem was that the x bounds of the TF/SF surface were invalid. Regardless, the grid correction is incorporated into Cpw_fs 1D auxiliary updates to improve accuracy.)
--- 06/10/2011 : Separate the typedefs for material types into another header.
--- 06/10/2011 : Decide what to do with the check mode in the library configuration.
--- 06/07/2011 : Handle the compile warnings on Quest.
--- 06/08/2011 : Add the material tag lookup into the MaterialSpecifier struct.
--- 06/10/2011 : Bring PlaceMaterialRegionFromFile back online.
--- 06/03/2011 : Implement the capability to place a random medium with a specified correlation function into the grid. (can be rudimentary!!)
--- 06/15/2011 : Remove all "check_mode"s from everything other than fdtd.cpp and read_***.
--- 06/24/2011 : Add "relative_permeability" and "conductivity" (Siemens/m) support to the random-medium generation feature.
--- 06/10/2011 : Look into making the variables in global.h "extern" and #include'ing it everywhere. "extern const"s should be initialized in some other translation unit.
--- 07/19/2011 : Write exceptions for the errors inside SettingEnabledForGrid().
--- 07/20/2011 : Find a safe way to enclose the entire fdtd.cpp code in a try block and handle all exceptions. (right now that gives a segmentation fault. MPI to blame? Maybe debug using gdb or codeblocks?)
--- 07/22/2011 : Replace all pointer containers with shared_ptr STL containers (otherwise internal constructor exceptions will give segmentation faults)
--- 07/25/2011 : Make the post-processing steps of Ctr_pd_2l,Ctr_pd_3l and (future) Ctr_pd_ml virtual and shared.
--- 08/03/2011 : Prevent overflow with large conductivity in Ctr_pd_** post-processing by making sure every exp(.) has negative argument. [More important for multilayers, where h_n might be large]
--- 06/17/2011 : Define a "shape" class and derived classes for determining the shapes of objects. A function that places a material into the grid could take a "shape" object and a "material" object as inputs.
--- 05/02/2011 : Put every "read_**" implementation block in a "try{}" block and throw exceptions inside for invalid options.
--- 07/27/2011 : Remove the GeneratedWaveforms container in Cwf, return smart pointers to dynamically-allocated Cwf objects instead.
--- 04/29/2011 : Let every waveform know their time extents, and the inform the excitation classes. Then, push the time axis back accordingly for each excitation. "fdtd -c" can give the initial time instant, and the time steps until t=0.
--- 07/27/2011 : Add a copyright notice to every source file.
--- 07/26/2011 : Change all the Array<> containers for named (tagged) objects to STL map classes.
--- 07/19/2011 : Let "fdtd -c" (check mode) only check the syntactic and type errors in the config file. The semantic errors should be checked by the classes. However, the "read_***" functions should catch the exceptions raised by the classes.
--- 09/01/2009 : Use the parallel version of "exit(-1)" that calls MPI_Finalize everywhere. Also standardize what gets written to the output (object index, grid index, etc.) Write exceptions for configuration options (limits, possible values, etc.).
--- 06/01/2011 : Bury the auxiliary grid recording business deeper into the Cpw** classes and (maybe) remove altogether from collector classes (Cfp, Chgp etc)
--- 11/16/2011 : Remove the unnecessary filename crud from Crecorder_**.
--- 05/02/2011 : Create option lists for every configuration item so that invalid options are caught at runtime. Read the reference config file (config_all.cfg) and hard code the options into a built source (.cc) file. The reference config file (config_all.cfg) will not be needed by the final executable, but will be distributed with the code and included in the svn repository.
--- 12/05/2011 : Remove the PW indices from the constructors.
--- 12/27/2011 : Change all "**Pulses" and "Illuminations" to "Beams".
--- 04/27/2011 : Improve the Kohler-illumination scheme.
--- 07/14/2011 : Make the Cwf* array in Cwfs into a std::vector object.
--- 11/07/2011 : Implement the HDF5 format for recording field values at a point. (Crecorder_movie and Crecorder_line can be kept in custom binary format for better speed)
--- 11/10/2011 : Add an extra current-moment amplitude (j0) to the config option for point sources. (read_pointsources.cpp)
--- 02/24/2012 : Remove FieldMin,FieldMax from Crecorder_fieldvalue/Crecorder_line.
--- 11/11/2011 : Add the time origin to the output of Crecorder_*.
--- 08/10/2011 : Change the x,y,z positions of the dipole in Celectricdipole to constant, or a member function.
--- 03/13/2012 : Include H-field recording in MovieRecorders etc. Also, simplify the recorder class (use templates? function handles for field operations? (abs etc.))
--- 03/09/2012 : Implement the option of entering every coordinate with a "***_in_cells" alternative. (Maybe after converting everything to meters? This is useful for my old cfg's to still be useful)
--- 04/13/2011 : Figure out all-static linking of blitz++ and libconfig++ libraries for standalone binary execution (maybe not that crucial).
--- 11/09/2011 : Convert the output of Ctr_td_* to HDF5.
--- 07/12/2012 : Instead of the empty "catch" blocks, write reading functions that don't throw exceptions. In the current form, if one variable is not found, the rest won't be read because of the exception.
--- 07/15/2012 : Generalize the "append_group_index_to_file_name" to all other relevant groups.
--- 12/12/2012 : Absorb the dx/2(1+kp) term in the Drude updates into Jp, reducing the number of operations.
--- 04/29/2011 : Implement Drude dispersive materials.