The documentation is not all that clear about the procedure to follow,
when using the Python interface. I'd like to call a function like:

def esq_mag(r, ex, ey, ez):
    return ex*ex.conjugate()+ey*ey.conjugate()+ez*ez.conjugate()

from the at_every construct - I initially used the above function
together with:

sim.run(mp.to_appended(prefix, mp.at_every(0.1,
sim.output_field_function('E_sq', [mp.Ex, mp.Ey, mp.Ez], esq_mag))),
until=t)

but the program runs to the point where output is triggered, then stops
with a lengthy error message, terminating:

      File "/usr/lib/python3.6/site-packages/meep/simulation.py", line
28, in get_num_args
        return func.__code__.co_argcount
    AttributeError: 'NoneType' object has no attribute '__code__'

That does not surprise me as the docs state I have to pass a function to
the sim.run function, not the result of evaluating a function. So I
tried again, supplying in the spirit of the instructions related to
Scheme "a function |my-weird-output| of no arguments that, when called,
outputs our function |f|." So I constructed a function to do that:

def esq_mag():
    def _esq_mag(r, ex, ey, ez):
        return ex*ex.conjugate()+ey*ey.conjugate()+ez*ez.conjugate()
    return _esq_mag

but the result is another error:

    TypeError: esq_mag() takes 0 positional arguments but 4 were given

OK - I need to handle those arguments to esq_mag, so

def esq_mag(r, ex, ey, ez):
    def _esq_mag(r, ex, ey, ez):
        return ex*ex.conjugate()+ey*ey.conjugate()+ez*ez.conjugate()
    return _esq_mag

but now the program fails with:

    TypeError: must be real number, not function

    The above exception was the direct cause of the following exception:

    SystemError: PyEval_EvalFrameEx returned a result with an error set

I have tried several variations without success; please, what construct
should I be using?

Also, if I try to use output_real_field_function as described in the
docs, I get the error:

    AttributeError: 'Simulation' object has no attribute
'output_real_field_function'

I'll be very grateful for any help,

Ian

_______________________________________________
meep-discuss mailing list
meep-discuss@ab-initio.mit.edu
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

Reply via email to