79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| # From the Meep tutorial: plotting permittivity and fields of a bent waveguide
 | |
| from __future__ import division
 | |
| 
 | |
| import meep as mp
 | |
| #import matplotlib.pyplot as plt
 | |
| import os
 | |
| import sys
 | |
| import numpy as np
 | |
| #from matplotlib import cm
 | |
| import pygame
 | |
| 
 | |
| mp.quiet(True)
 | |
| 
 | |
| Nx = int(sys.argv[1])
 | |
| Ny = int(sys.argv[2])
 | |
| try:
 | |
|     fps = float(sys.argv[3])
 | |
| except (IndexError, ValueError):
 | |
|     fps = 40
 | |
| 
 | |
| 
 | |
| 
 | |
| cell = mp.Vector3(8,4,0)
 | |
| geometry = [mp.Block(mp.Vector3(12,1,mp.inf),
 | |
|                      center=mp.Vector3(0,0),
 | |
|                      material=mp.Medium(epsilon=24))
 | |
|             ]#,
 | |
|             #mp.Block(mp.Vector3(1,5,mp.inf),
 | |
|             #         center=mp.Vector3(1,1),
 | |
|             #         material=mp.Medium(epsilon=12))]
 | |
| #pml_layers = [mp.PML(2.0)]
 | |
| resolution = 10
 | |
| 
 | |
| sources = [mp.Source(mp.ContinuousSource(frequency=0.15, width=20), # wavelength=2*(11**0.5)
 | |
|                      component=mp.Ez,
 | |
|                      center=mp.Vector3(0,0),
 | |
|                      size=mp.Vector3(0,1))
 | |
| ]
 | |
| 
 | |
| sim = mp.Simulation(cell_size=cell,
 | |
|                     geometry=geometry,
 | |
|                     sources=sources,
 | |
|                     resolution=resolution)
 | |
| 
 | |
| 
 | |
| buffer = np.empty([80,40])
 | |
| clock = pygame.time.Clock()
 | |
| 
 | |
| def get_slice(sim):
 | |
|     val = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez, arr=buffer)
 | |
|     #plt.figure()
 | |
|     #plt.imshow(val, interpolation='none', cmap='RdBu')
 | |
|     #plt.axis('off')
 | |
|     #plt.show()
 | |
|     out = (val - np.amin(val)) / (np.amax(val) - np.amin(val))
 | |
|     out = np.transpose(out) # or switch x and y
 | |
|     out = out.ravel()
 | |
|     out = 250*cm.RdBu(out)
 | |
|     out = out[:,0:3]
 | |
|     out = out.ravel()
 | |
|     out = out.astype(np.uint8).tobytes()
 | |
|     os.write(1, out)
 | |
|     clock.tick_busy_loop(fps)
 | |
| 
 | |
| def plot_dielectric(sim):
 | |
|     val = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric, arr=buffer)
 | |
|     #plt.figure()
 | |
|     #plt.imshow(val, interpolation='none', cmap='RdBu')
 | |
|     #plt.axis('off')
 | |
|     #plt.show()
 | |
|     #print()
 | |
| 
 | |
| 
 | |
| #sim.run(mp.at_beginning(plot_dielectric), mp.at_every(0.6, get_slice), until=200)
 | |
| sim.run(mp.at_every(0.00001, get_slice), until=1000)
 | 
