It is possible to change the material in a step function with something
like this:

```
import meep as mp

def change_mat(sim):
    t = sim.meep_time()
    fn = t * 0.2
    geom = [mp.Sphere(radius=0.025, center=mp.Vector3(fn))]
    mp.set_materials_from_geometry(
        sim.structure,
        geom,
        sim.eps_averaging,
        sim.subpixel_tol,
        sim.subpixel_maxeval,
        sim.ensure_periodicity,
        False,
        sim.default_material,
        None,
        sim.extra_materials
    )

sim = mp.Simulation(
    cell_size=mp.Vector3(10, 10),
    resolution=16
)

sim.run(mp.at_beginning(mp.output_epsilon), mp.at_time(10, change_mat),
             mp.at_end(mp.output_epsilon), until=60)
```

However, it is currently not possible to change the susceptibilities.

The `set_materials_from_geometry` call is a bit ponderous, so I'm planning
to add a public `Simulation.set_materials` method that only requires
geometry and/or default_material.  In the current state, this will be very
slow, but issue #207 (https://github.com/stevengj/meep/issues/207) will
speed it up when it's implemented.

Also note that the current master will segfault after successfully
completing `sim.run` in the above script. This will be fixed once PR#209 (
https://github.com/stevengj/meep/pull/209) is merged.

Chris

On Thu, Feb 15, 2018 at 8:57 AM, EDUARDO CABRERA GRANADO <ecabr...@ucm.es>
wrote:

> Dear meep developers and users,
>
> first, I would like to thank meep developers for their work on this
> wonderful tool and the effort shown to get a Python interface, both in the
> code and in the documentation. I think it is a big push to increase the use
> of meep in electromagnetic simulations.
>
> Second, I would like to ask a question I have not seen answered anywhere
> (sorry in advance if it is somewhere I did not see). In short, I would like
> to know if it is possible to modify a parameter of the material used in a
> simulation continuously during the execution. More especifically, I would
> like to change the gamma and fn parameters of the DrudeSusceptibility with
> a step function, somehow in a similar way as change_sources function for
> the sources.
> I tried with a step function like:
>
> def change_susc(sim):
>     t = meep.Simulation.meep_time(sim)
>     fn = t*0.2
>     susc = [meep.DrudeSusceptibility(frequency=fn,gamma=0.1, sigma=0.1)]
>     mat = meep.Medium(epsilon=1.0, E_susceptibilities=susc)
>     geom = [meep.Sphere(radius=0.025,center=meep.Vector3(0,0,0),
> material=mat)]
>     sim.geometry=geom
>     meep.Simulation._init_structure(sim)
>     return sim
>
> sim.run(meep.at_beginning(meep.output_epsilon),
> meep.at_time(10,change_mat),
>         meep.at_end(meep.output_epsilon),until=60)
>
> The values are just for this example. Anyway, I must be doing something
> wrong so I tried to simplify the problem with a material with no dispersion
> and modifying the value of epsilon but again nothing happens.
>
> At this point, I do not know if I am doing something wrong or it is just
> that is not possible to change the material properties during simulation in
> Meep. If someone could provide some suggestion I would be very grateful.
>
> Thanks in advance.
>
> Eduardo
>
>
> _______________________________________________
> meep-discuss mailing list
> meep-discuss@ab-initio.mit.edu
> http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss
>
_______________________________________________
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