4.1 Первая программа
фотонный кристалл операционный программа
Начнем описание языка программирования с разбора самых простых примеров. Приведем в качестве примера полный листинг программы, а затем строчка за строчкой начнем полное подробное описание всех входящих команд.
Пример 1(Листинг программы test2.ctl):
;1)
(set! geometry-lattice (make lattice (size 10 8 no-size)))
;2)
(set! geometry (list
(make block (center 0 0) (size 1.5 1.5 infinity) (material (make dielectric (epsilon 12))) )
(make block (center -1.5 0) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center 1.5 0) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center 0 -1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12)) )
(make block (center -1.5 -1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center 1.5 -1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center 0 1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center -1.5 1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
(make block (center 1.5 1.5) (size 1 1 infinity) (material (make dielectric (epsilon 12)))) )
)
;3)
(set! sources (list (make source (src (make continuous-src (wavelength 1.5) (width 20))) (component Ez) (center -4 0)(size 0 2.5))))
;4)
(set! pml-layers (list (make pml (thickness 1.0))));5)
(set! resolution 20)
;6)
(run-until 200 (at-beginning output-epsilon) (to-appended "ez" (at-every 0.6 output-efield-z)))
Начнем описание программы команда за командой
1) Прежде чем объявить структуру кристалла, расположение и частоту источника и др. параметры, необходимо задать размеры расчетной области:
(set! geometry-lattice (make lattice (size 10 8 no-size)))
· geometry-lattice - задает область в которой будут проводиться расчеты
· size 10 8 no-size - задаем размеры расчетной области. Общий формат команды size x y z, где x y z - размер в каждой из 3-х координат соответственно. С помощью этой команды мы задали двухмерную область размером 10х8. Эта команда позволяет задавать трехмерные области, но в нашем случае размер вдоль оси Z не указан. Т.к мы не задали свойства расчетной области, то по умолчанию,е=1.
2) Теперь можно разместить внутри какие-нибудь объекты. Следующая структура:
(set! geometry (list
(make block (center 0 0) (size 1.5 1.5 infinity) (material (make dielectric (epsilon 12))) )
(make block (center -1.5 0) (size 1 1 infinity) (material (make dielectric (epsilon 12))) )
---------------
)
описывает массив элементов. Распишем ее более подробно:
· (set! geometry … )- задает объекты, которые будут участвовать в симуляции.
· (list … ) - создает список элементов, которые будут участвовать в симуляции. Используется с целью создания массивов и других форм объединения структур между собой. Например в If для разделения результатов true и else. Используется практически во всех командах. В нашем случае list объединяет несколько блоков в единый массив блоков.
· make block - задает блок(квадрат, прямоугольник - 2-у мерный случай; прямоугольный параллелепипед - 3-х мерный). Кроме этого поддерживаются следующие геометрические фигуры:
· sphere radius [number] - сфера;
· cylinder radius [number] height [number] axis [vector3] - цилиндр
· cone radius2 [number] - конус
· ellipsoid - элипс
· Рассмотрим параметры make block более подробно:
· (center 0 0) - указываем где будет располагаться центр блока(в нашем случае в начале координат). По умолчанию координате Z присваивается значение 0.
· (size 1.5 1.5 infinity) - задает размеры блока. В нашем случае описывается стержень с основанием 1.5*1.5 и бесконечной длинной.
· (material (make dielectric (epsilon 12))) - задает свойства материала. В нашем случае: Задаем диэлектрик с е=12.
· C помощью описанной выше команды, создается структура из 9 стержней, отстоящих друг от друга на расстоянии а=1.5. Все стержни, кроме центрального, имеют основание размером 1*1. Центральный имеет размер 1.5*1.5. Каждый из стержней имеет диэлектрическую проницаемость е1=12. Диэлектрическая проницаемость окружающей среды е2=1.
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 направлениях
4) Опишем толщину PML слоя. Известно, что при расчетах волна может пройти сквозь слой PML отразиться от границы расчетов и вернуться обратно в расчетную область. Чтобы этого избежать рекомендуется задавать толщину слой PML порядка 10% от размера расчетной области. Также следует помнить, что PML находится внутри расчетной области.
(set! pml-layers (list (make pml (thickness 1.0)))) - толщина PML=1.
5) (set! resolution 20) - Следующая команда задает количество пикселей на единицу длинны. Получаем, что размер расчетной области равен 200х160 pixels.
6) Программа готова, теперь ее нужно запустить:
(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 в названии.
- 1. Вступление
- 2.Теоретическая часть
- 2.1 Теория фотонных кристаллов
- 2.2 Уравнения Максвелла
- 2.3 Finite Difference Time Domain(FTDT)
- 2.4 PML-слой
- 3. Описание программных продуктов
- 3.1 Установка дополнений для гостевой операционной системы
- 3.2 Папки с общим доступом на локальном компьютере
- 3.4 Описание программных продуктов
- 3.5 Описание библиотек и утилит, используемых MEEP и MPB
- 4. Описание языка программирование и разработанных программ
- 4.1 Первая программа
- 4.2 Запуск программы на выполнение и представление данных
- 4.3 Программа, описывающая циклы и условные операторы
- 4.4 Пример программы , анализирующей структуру кристалла
- 4.5 Рассчет двумерных структур размером 3х3
- 5. Перспективы и применение фотонных кристаллов
- Выводы