Relacion de dispersion TE0

El programa

import meep as mp

############## Omega
NOm = 10
Omi = 0.01
Omf = 0.5
dOm = (Omf-Omi)/(NOm-1)
OmV =  np.zeros(NOm)
QQxV = np.zeros(NOm)
############# Omega


############ FT
i_0=80
i_I=160
I=i_I-i_0

Qx_i=0.0
Qx_f=1.0
NQx=100
dQx=(Qx_f-Qx_i)/NQx
EQx=np.zeros(NQx)
QxV=np.zeros(NQx)
############# FT

ME = np.zeros((NOm,NQx))

for iOm in range(NOm):
 Om = Omi+iOm*dOm
 OmV[iOm] = Om
 print(Om,iOm)
###################################################################### -> meep
 cell = mp.Vector3(16, 8, 0)
 geometry = [mp.Block(mp.Vector3(mp.inf, 1, mp.inf),center=mp.Vector3(),material=mp.Medium(epsilon=4),)]
 sources = [mp.Source(mp.ContinuousSource(frequency=Om), 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)
 ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)

 plt.imshow(ez_data.transpose())
 plt.show()
 plt.plot(ez_data[:,40])   
 plt.show()
######################################################################## <- meep

######################################################################## -> FT

 for ic in range(NQx):
  Qx = Qx_i+ic*dQx
  QxV[ic]=Qx
  Exr=0
  Exi=0
  for i in range(I):
   Exr=Exr+ez_data[i_0+i,40]*math.cos(2.0*math.pi*Qx*((i_0+i)/resolution))
   Exi=Exi+ez_data[i_0+i,40]*math.sin(2.0*math.pi*Qx*((i_0+i)/resolution))
  EQx[ic] = math.sqrt(Exr*Exr+Exi*Exi)  
  ME[iOm,ic] = EQx[ic]
############################################################################ <- FT
 plt.plot(QxV,EQx,'-k')
 plt.grid()
 plt.show()

# el_maximo = np.max(EQx)
 el_indice = np.argmax(EQx)
 QQxV[iOm] = QxV[el_indice]


plt.imshow(ME)
plt.show()

plt.plot(QQxV,OmV,'-o')
plt.show()

genera muchos datos de forma similar al caso anterior, pero arroja una forma de la relacion de dispersion