simple waveguide

Antes que nada, debe de poderse realizar las siguientes instrucciones

$conda activate mp
$mkdir expediente
$cd expediente
$jupyter notebook

Asi activamos elambiente para trabajar en jupyter. El Primer codigo viene en el sitio https://meep.readthedocs.io/en/master/Python_Tutorials/Basics/ y se compone de las siguientes instrucciones:

import meep as mp

cell = mp.Vector3(16, 8, 0)

geometry = [
    mp.Block(
        mp.Vector3(mp.inf, 1, mp.inf),
        center=mp.Vector3(),
        material=mp.Medium(epsilon=12),
    )
]

sources = [
    mp.Source(
        mp.ContinuousSource(frequency=0.15), component=mp.Ez, center=mp.Vector3(-7, 0)
    )
]

pml_layers = [mp.PML(1.0)]

resolution = 10

sim = mp.Simulation(
    cell_size=cell,
    boundary_layers=pml_layers,
    geometry=geometry,
    sources=sources,
    resolution=resolution,
)

sim.run(until=200)

para visualizar los datos se hace

import numpy as np
import matplotlib.pyplot as plt

Con eso se crea el ambiente para graficar

eps_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric)
plt.imshow(eps_data)

Con eso se puede graficar la funcion dielectrica y sale

esta grafica se hace mas elaborada con

eps_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric)
plt.figure()
plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
plt.axis('off')
plt.show()








los campos se pueden extraer con

ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)

tambien podemos rotar esta imagen con

plt.imshow(ez_data.transpose())
plt.plot(ez_data[:,40])

Esta grafica se puede hacer mas elaborada de la forma

ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)
plt.figure()
plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
plt.axis('off')
plt.show()

El campo se puede visualizar muy bonito si hacemos

z_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)
plt.figure()
plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
plt.axis('off')
plt.show()

Hay una herramienta que nos permite visualizar la malla de simulacion

plt.figure(dpi=100)
sim.plot2D()
plt.show()

Lo que sigue puede ser que NO sea necesario si vamos a utilizar los archivos h5, pero lo ponemos a ontinuacion


sim.reset_meep()
f = plt.figure(dpi=100)
Animate = mp.Animate2D(fields=mp.Ez, f=f, realtime=False, normalize=True)
plt.close()

sim.run(mp.at_every(1, Animate), until=100)
plt.close()

filename = "straight_waveguide.mp4"
Animate.to_mp4(10, filename)



from IPython.display import Video

Video(filename)