Para poder medir la distancia entre valle y valle (o cresta y cresta), hacemos
f = open("python.dat","w")
for i in range(ez_data.shape[0]):
print(i,ez_data[i,40])
f.write(str(i/10.0)+" "+str(ez_data[i,40])+"\n")
f.close()
El siguiente codigo se llama lee.py y se corre en el sistema operativo para que se genere una grafica en donde con el mouse, se pueda medir las distancias
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('python.dat')
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y,'r--')
plt.show()
Cuando , tenemos , nos sale la longitud de onda, que e slo que vemos
# From the Meep tutorial: plotting permittivity and fields of a straight waveguide
import meep as mp
cell = mp.Vector3(10, 10, 0)
geometry = [mp.Block(mp.Vector3(0.1, 0.1, mp.inf),center=mp.Vector3(4,4),material=mp.Medium(epsilon=1.1),)]
sources = [mp.Source(mp.ContinuousSource(frequency=0.8), component=mp.Ez, center=mp.Vector3(0, 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(mp.at_beginning(mp.output_epsilon),mp.to_appended("ez", mp.at_every(0.05, mp.output_efield_z)),until=20)
Initializing structure...
time for choose_chunkdivision = 8.29697e-05 s
Working in 2D dimensions.
Computational cell is 10 x 10 x 0 with resolution 10
block, center = (4,4,0)
size (0.1,0.1,1e+20)
axes (1,0,0), (0,1,0), (0,0,1)
dielectric constant epsilon diagonal = (1.1,1.1,1.1)
time for set_epsilon = 0.019645 s
-----------
creating output file "./eps-000000.00.h5"...
creating output file "./ez.h5"...
run 0 finished at t = 20.0 (400 timesteps)
import h5py
import numpy as np
# Abre el archivo HDF5 en modo lectura
with h5py.File('eps-000000.00.h5', 'r') as f:
# Muestra las claves principales del archivo
print(f"Claves principales del archivo: {list(f.keys())}")
with h5py.File('eps-000000.00.h5', 'r') as f:
dataset = f['eps']
data_array = np.array(dataset)
import matplotlib.pyplot as plt
plt.imshow(data_array)
import h5py
import numpy as np
# Abre el archivo HDF5 en modo lectura
with h5py.File('ez.h5', 'r') as f:
# Muestra las claves principales del archivo
print(f"Claves principales del archivo: {list(f.keys())}")
with h5py.File('ez.h5', 'r') as f:
dataset2 = f['ez']
data_array2 = np.array(dataset2)
Esta es una leccion que aprendimos gracias a chatgpt. Dice que primero ha que instalar “pip install h5py numpy”
import h5py
import numpy as np
# Abre el archivo HDF5 en modo lectura
with h5py.File('eps-000000.00.h5', 'r') as f:
# Muestra las claves principales del archivo
print(f"Claves principales del archivo: {list(f.keys())}")
Claves principales del archivo: ['eps']
with h5py.File('eps-000000.00.h5', 'r') as f:
dataset = f['eps']
data_array = np.array(dataset)
con eso ya se leen los archgivos, por ejemplo, podemos graficar
import matplotlib.pyplot as plt
plt.imshow(data_array)
El campo electromagetico tambien lo podemos visualizar si hacemos
# Abre el archivo HDF5 en modo lectura
with h5py.File('ez.h5', 'r') as f:
# Muestra las claves principales del archivo
print(f"Claves principales del archivo: {list(f.keys())}")
plt.imshow(data3[:,:,332])
# Abre el archivo HDF5 en modo lectura
with h5py.File('ez.h5', 'r') as f:
aux1 = f['ez']
# Convierte el dataset a un arreglo de numpy
aux2 = np.array(aux1)
plt.imshow(data3[:,:,332])
plt.plot(data3[40,40,:])
plt.imshow(data3[40,:,:].transpose())
plt.imshow(data3[:,40,:].transpose())
h5topng -t 0:332 -R -Zc dkbluered -a yarg -A eps-000000.00.h5 ez.h5
convert ez.t*.png ez.gif
# From the Meep tutorial: plotting permittivity and fields of a bent waveguide
import meep as mp
cell = mp.Vector3(16, 16, 0)
geometry = [
mp.Block(
mp.Vector3(12, 1, mp.inf),
center=mp.Vector3(-2.5, -3.5),
material=mp.Medium(epsilon=12),
),
mp.Block(
mp.Vector3(1, 12, mp.inf),
center=mp.Vector3(3.5, 2),
material=mp.Medium(epsilon=12),
),
]
pml_layers = [mp.PML(1.0)]
resolution = 10
fcen = 0.15 # pulse center frequency
df = 0.1 # pulse width (in frequency)
sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
component=mp.Ez,
center=mp.Vector3(-7, -3.5),
size=mp.Vector3(0, 1),
)
]
sim = mp.Simulation(
cell_size=cell,
boundary_layers=pml_layers,
geometry=geometry,
sources=sources,
resolution=resolution,
)
sim.run(
mp.at_beginning(mp.output_epsilon),
mp.to_appended("ez", mp.at_every(0.6, mp.output_efield_z)),
until=200,
)
se crearon archivos h5, esa fue el output, podemos checar cuales son los archivos con la instrcccion
ls *h5
la cual es valida para cuando esta en el notebook jupyter o cuando estas en el promt en linux, los archivos son dos h5, en el proximo post vamos a ver como se pueden leer en python