Моделирование фотонных кристаллов в программной среде 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)Вместо