Моделирование фотонных кристаллов в программной среде MEEP. Знакомство со средой программирования
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
p>3)Теперь опишем параметры источника:
(set! sources (list (make source (src (make continuous-src (wavelength 1.5) (width 20))) (component Ez) (center -4 0)(size 0 2.5))))
(set! sources … )- команда задающая вид излучения, размеры и его частоту, а также положение в пространстве.
(make source (src … ) - создать отдельный источник. Meep поддерживает 3 вида источников:
continuous-src - синусоида
gaussian-src - гаусиановый импульсный источник пропорциональный ехр (- i?t - (Т - Т0) 2 / 2W2).
custom-src - заданная пользователем функция
В нашем случае, задается синусоидальная функция с длинной волны ?=1.5. Поле может быть описано также с помощью частоты (frequency х) и периода (period x)Параметр (width 20) указывает на то, что функция будет введена в моделируемую область не сразу, а постепенно в течении 20-ти временных интервалов.
(component Ez) - источник поля является компонентой Jz.
(center -4 0)(size 0 2.5) - задает координаты центра и размер источника излучения. В нашем случае, источник вытянут вдоль оси Y на 2.5 и не имеет размера в X и Z направлениях
)Опишем толщину PML слоя. Известно, что при расчетах волна может пройти сквозь слой PML отразиться от границы расчетов и вернуться обратно в расчетную область. Чтобы этого избежать рекомендуется задавать толщину слой PML порядка 10% от размера расчетной области. Также следует помнить, что PML находится внутри расчетной области.
(set! pml-layers (list (make pml (thickness 1.0)))) - толщина PML=1.
5)(set! resolution 20) - Следующая команда задает количество пикселей на единицу длинны. Получаем, что размер расчетной области равен 200х160 pixels.
)Программа готова, теперь ее нужно запустить:
(run-until 200 (at-beginning output-epsilon) (to-appended "ez" (at-every 0.6 output-efield-z)))
(run-until 200 - запуск расчетов(на 200 временных интервалов).
(at-beginning output-epsilon)(to-appended "ez" (at-every 0.6 output-efield-z))) - С помощью этих команд указывается какие компоненты поля нам нужно вывести. В теле программы можно проводить любые вычисления, а результат выводить с помощью этих команд. В нашем случае выводится две компоненты поле - это ? и Ez.
(at-every 0.6 - значение компоненты Ez выводится каждые 0.6 временных интервала. Это впоследствии пригодится для создания GIF анимации.
(to-appended "ez" - причем выходной файл будет иметь приставку ez в названии.
.2 Запуск программы на выполнение и представление данных
1)meep first2 - запуск программы
После запуска программы будут созданы два файла: first2-eps-000000.00.h5 и first2-ez.h5. Имя файла формируется из имени исходного ctl файла и величины, которую необходимо вывести.
Просмотреть, полученный результат можно с помощью любой программы, поддерживающей формат HDF5. Для этих целей воспользуемся командами для работы с пакетом h5utils.
2)Существует несколько способов представления данных. Один из них:
h5topng -S3 first2-eps-000000.00.h5 - из имеющегося *.h5 файла создается черно белый PNG с изображением расчетной области
Рис 4.2.1. Расчетная область first2.ctl
3)Это изображение не показательно и не дает представления о каких-либо качественных характеристиках фотонных кристаллов. Более интересен результат в виде анимированного изображения.
а) Прежде чем создавать анимацию необходимо узнать сколько изображений мы можем построить:
$ h5ls first2-ez.h5
ez Dataset {200, 160, 333/Inf} - 333 изображения можно построить.
б) Пользуясь средствами h5utils, создадим изображения для создания GIF анимации.
$ h5topng -t 0:332 -R -Zc dkbluered -a yarg -A first2-eps-000000.00.h5 first2-ez.h5
-t 0:332 Создает 333 PNG файла, изображающих состояние поля каждые 0,6 единиц времени
Zc dkbluered - переводит стандартную черно-белую схему в сине(отриц.)-бело(ноль)-красную(полож.)
a yarg -A - обводит диэлектрик сероватым контуром
в) Для создания GIF анимации можно воспользоваться любым доступным конвертором например:
convert first2-ez.t*.png first2-ez.gif
4.3 Программа, описывающая циклы и условные операторы
Следующая программа более функциональна и использует больше возможностей языка Scheme. Эта программа создает кристалл mat c диэлектрическою проницаемостью ?=12. Затем создает в нем массив дырок с радиусом r=0.25, заполненных воздухом. В кристалл также внесен дефект в виде креста.
Рис 4.3.1 Расчетная область test4_42.ctl
;Листинг test4_42
;1
(define lx 20) ;Задаем размер расчетной области по оси X и Y
(define ly 20)
(define r 0.25) ;радиус отверстий
(define eps 12) ;материал
(define-param dmin -5) ;Задаем параметры цикла
(define-param dmax 5)
(define-param ds 1) ; величина шага
(define-param dpml 1) ;величина области PML;
(define-param l_place (+ (/ (+ dmin dmax) 2) 1)) ;задаем координаты линий
;--------------------------------------------
;2
(define mat (make dielectric (epsilon eps))) ;создаем диэлектрик mat с e=12
(set! geometry-lattice (make lattice (size lx ly no-size))) ;Задаем размеры расчетной области
;3
(set! geometry (list(make block (center 0 0) (size infinity infinity infinity) (material mat))))
; Заполняем расчетную область диэлектриком mat
;4
;Цикл по созданию отверстий в диэлектрике(материал - воздух)
(do ((x dmin (+ x ds))) ((> x dmax))
(do ((y dmin (+ y ds))) ((> y dmax))
;5
(if (and (not (eqv? x l_place)) (not (eqv? y l_place)))
(set! geometry (append geometry(list
(make cylinder (center x y) (material air) (radius r) (height infinity))
)))
)
)
)
(set! pml-layers (list (make pml (thickness dpml))))
(set! resolution 10)
;6
(set! sources (list(make source(src (make continuous-src(wavelength 2.5)(width 20)))
(component Ez)(center -9 0)(size 0 3))))
(run-until 200(at-beginning output-epsilon)(to-appended "ez" (at-every 0.6 output-efield-z)))
1)Комментарии отмечаются знаком ;. Все что стоит за ним до конца строки компилятором не воспринимается.
2)define-param - используется если нам нужно изменить, в случае необходимости, значение параметра не открывая файл ctl. Прежде чем запустить компиляцию программы можно изменить один из параметров:
meep dmax=8 test4_42.ctl.
3)Вместо