Esempio n. 1
0
freq   = 5*10**14

plane = DispersivePlane(YTFSFPlane(UPMLPlane(PBCPlane(Plane((length,length))))))

plane.pbcx = False
plane.pbcy = False
# plane.pmly = False
plane.pml_thick = 10
plane.set_pml()
plane.tminc.enter = 2
plane.xtfsf = [50,251]
plane.ytfsf = [50,251]

metal = PolarDPlane(plane.shape, a=(9.39*10**15)**2, b=0, c=3.14*10**13, d=1, dt=deltat)
metal.set_factor()
circle(metal.mask, [121,151], 25, 1)
circle(metal.mask, [181,151], 25, 1)

for t in range(0,2000):
    plane.tminc.update(sin(2*pi*freq*t*deltat))

    plane.update_hpbc()
    plane.update_dfield().update_dtfsf()
    metal.update(plane)
    plane.update_efield(metal)

    plane.update_epbc()
    plane.update_bfield().update_btfsf()
    plane.update_hfield()
    
    hdf5.require_group("timeline/"+str(t))
freq   = 8.63*10**14

hdf5.attrs["freq"] = freq
hdf5.attrs["deltat"] = deltat

plane = DispersivePlane(YTFSFPlane(UPMLPlane(PBCPlane(Plane((length,length))))))
plane.pbcx = False
plane.pbcy = False
# plane.pmly = False
plane.pml_thick = 13
plane.set_pml()
plane.teinc.enter = 2
plane.ytfsf = [25,length-25]
plane.xtfsf = [25,length-25]

circle(plane.epsilon_r, [151,151], 25, 12)
import pylab
pylab.imshow(plane.epsilon_r[100:201,100:201])
pylab.savefig("/tmp/epsilon_r.png")
pylab.clf()

for t in range(0,2000):
    plane.teinc.update(sin(2*pi*freq*t*deltat))

    plane.update_hpbc()
    plane.update_dfield().update_dtfsf()
    plane.update_efield()

    plane.update_epbc()
    plane.update_bfield().update_btfsf()
    plane.update_hfield()
Esempio n. 3
0
 def circle(self, center, r, value):
     circle(self.maskx, twodim.center_ex(center), r, value)
     circle(self.masky, twodim.center_ey(center), r, value)
     circle(self.maskz, twodim.center_ez(center), r, value)
     return self
Esempio n. 4
0
 def circle_e(self, center, r, value):
     circle(self.epsilon_rx, twodim.center_ex(center), r, value)
     circle(self.epsilon_ry, twodim.center_ey(center), r, value)
     circle(self.epsilon_rz, twodim.center_ez(center), r, value)
     return self
Esempio n. 5
0
freq   = 5*10**14

plane = DispersivePlane(YTFSFPlane(UPMLPlane(PBCPlane(Plane((length,length))))))

plane.pbcx = False
plane.pbcy = False
# plane.pmly = False
plane.pml_thick = 15
plane.set_pml()
plane.tminc.enter = 2
plane.xtfsf = [50,251]
plane.ytfsf = [50,251]

metal = PolarDPlane(plane.shape, a=(9.39*10**15)**2, b=0, c=3.14*10**13, d=1, dt=deltat)
metal.set_factor()
circle(metal.mask, [151,151], 25, 1)

for t in range(0,2000):
    plane.tminc.update(sin(2*pi*freq*t*deltat))

    plane.update_hpbc()
    plane.update_dfield().update_dtfsf()
    metal.update(plane)
    plane.update_efield(metal)

    plane.update_epbc()
    plane.update_bfield().update_btfsf()
    plane.update_hfield()
    
    hdf5.require_group("timeline/"+str(t))
    hdf5["timeline"][str(t)]["ez"] = plane.ezfield
from yafdtd.grid import Plane, PBCPlane, UPMLPlane, XTFSFPlane, DispersivePlane, PolarDPlane
from yafdtd.utils import *
from scipy.constants import c
from math import sin, pi
from yafdtd.geometry import circle

length = 301

plane = DispersivePlane(XTFSFPlane(UPMLPlane(PBCPlane(Plane("silicon-rod-25nm-xtfsf-te-dx1nm", (length,length))))))
plane.open("result/%s/%s.hdf5" % (plane.name, plane.name))
plane.wavelength(347.5*10**-9).dx(10**-9).save_attrs()
plane.pbc(x = False, y = False).pml(thick = 13).set_pml()
plane.teinc.enter = 2
plane.ytfsf = [50,length-50]
plane.xtfsf = [50,length-50]
circle(plane.epsilon_rx, [151,151.5], 25, 12)
circle(plane.epsilon_ry, [151.5,151], 25, 12)
circle(plane.epsilon_rz, [151,151],   25, 12)

prepare("result/%s/ex" % plane.name)
prepare("result/%s/ey" % plane.name)
prepare("result/%s/hz" % plane.name)

for t in range(0,2000):
    plane.t = t
    plane.teinc.update(sin(2*pi*plane.attrs["frequency"]*t*plane.attrs["dt"]))

    plane.update_hpbc()
    plane.update_dfield().update_dtfsf()
    plane.update_efield()