> Here in our group there is a need for better harminv support. We now > have some helper functions in the python-meep bindings, but we propose > to make it more user friendly for users and to make a function : > > runWithHarminv(component, harminv_time, probing_point, fcen, df) > > ...that runs the sources until they are finished, and then performs a > harminv analysis during "harminv_time" timesteps at the probing point > around frequency fcen with bandwith df. > > We propose to make a class HarminvResult with 6 members : > frequency, imag. freq., Q, |amp|, amplitude, error > > The result of "runWithHarminv" should be a list of HarminvResult > objects. > > Please send your comments about this proposal.
Well, I never used harminv, just implemented it in tests. From the code I see that current realization is just quick and dirty implementation in c style, using c arrays, pre-allocations of returned arrays, etc - not as clean as pythonic. If you can do it better, so that tests - 2d_convergence and convergence_cyl_waveguide look less cryptic - why not ? But, it should be either a function with argument of fields() class like runWithHarminv(fields, component, harminv_time, probing_point, fcen, df) or a method of fields() class like: fields.runWithHarminv(component, harminv_time, probing_point, fcen, df) and, maybe, both. Here appears the usability problem - Scheme interface supports the 'attaching' of some actions to time-stepping. Like - every 20 steps output the field, or make a harminv call after some condition have been met at some point in the space, etc. If I recoll correctly, it also allows to do it for several fields() instances implicitly. This is a powerful feature of Scheme and we have to think about how to implement it in Python. Smth. like set_simulation(list fields instances) # save to the single global class ? set_every(20, action) # every 20 time steps make some action at_beginning(action) # at beginning of the simulation or at the end make some action set_mon_point(vec) # set monitor points set_mon_point(vec, action) # set monitor points with action - e.g. collect the fields to array at_the_end(action) # for example, run harminv, or output the fields run() This is just a vision of the how such functionality will be implemented in the future, right now it is not clear how to describe actions in python way. We already have runUntilDecayed and you will implement similar in spirit function. But at the end, we have to match Scheme's usability. Probably, Python's anonymous functions (aka lambda) will do the trick, I am not sure. wbr, Shawkat _______________________________________________ Mailing list: https://launchpad.net/~python-meep Post to : [email protected] Unsubscribe : https://launchpad.net/~python-meep More help : https://help.launchpad.net/ListHelp

