# Создание экземпляров классов граничных условий boundary_left = boundary.ABCSecondLeft(eps[0], mu[0], Sc) boundary_right = boundary.ABCSecondRight(eps[-1], mu[-1], Sc) # Параметры отображения поля E display_field = Ez display_ylabel = 'Ez, В/м' display_ymin = -2.1 display_ymax = 2.1 # Создание экземпляра класса для отображения # распределения поля в пространстве display = tools.AnimateFieldDisplay(dx, dt, maxSize, display_ymin, display_ymax, display_ylabel, title='fdtd_dielectric') display.activate() display.drawSources([sourcePos]) display.drawProbes(probesPos) for layer in layers: display.drawBoundary(layer.xmin) if layer.xmax is not None: display.drawBoundary(layer.xmax) for t in range(1, maxTime): # Расчет компоненты поля H Hy = Hy + (Ez[1:] - Ez[:-1]) * Sc / (W0 * mu)
# Ez[-3: -1] в предыдущий момент времени (q) oldEzRight1 = numpy.zeros(3) # Ez[-3: -1] в пред-предыдущий момент времени (q - 1) oldEzRight2 = numpy.zeros(3) # Параметры отображения поля E display_field = Ez display_ylabel = 'Ez, В/м' display_ymin = -2.1 display_ymax = 2.1 # Создание экземпляра класса для отображения # распределения поля в пространстве display = tools.AnimateFieldDisplay(maxSize, display_ymin, display_ymax, display_ylabel) display.activate() display.drawProbes(probesPos) display.drawSources([sourcePos]) display.drawBoundary(layer_x) for q in range(1, maxTime): # Расчет компоненты поля H Hy = Hy + (Ez[1:] - Ez[:-1]) * Sc / (W0 * mu) # Источник возбуждения с использованием метода # Total Field / Scattered Field Hy[sourcePos - 1] -= (Sc / W0) * source.getE(0, q)
# Датчики для регистрации поля probePos = [50, 150] probes = [tools.Probe(pos, maxTime) for pos in probePos] # Положение источника sourcePos = 25 Ez = numpy.zeros(maxSize) Hy = numpy.zeros(maxSize) for probe in probes: probe.addData(Ez, Hy) # Создание экземпляра класса для отображения # распределения поля в пространстве display = tools.AnimateFieldDisplay(maxSize, -1.1, 1.1, 'Ez, В/м') display.activate() display.drawSources([sourcePos]) display.drawProbes(probePos) for q in range(1, maxTime): # Расчет компоненты поля H Ez_shift = Ez[1:] Hy[:-1] = Hy[:-1] + (Ez_shift - Ez[:-1]) * Sc / W0 # Расчет компоненты поля E Hy_shift = Hy[:-1] Ez[1:] = Ez[1:] + (Hy[1:] - Hy_shift) * Sc * W0 # Источник возбуждения Ez[sourcePos] += numpy.exp(-(q - 0.5 - 30.0) ** 2 / 100.0)