x ds) - з кроком ds (ds = 1)
В· (> x dmax) - поки x чи не стане більше dmax (dmax = 5).
Аналогічно і для координати y. У результаті ми описали структуру з дірок розміром 11 * 11, з кроком ds = 1. p align="justify"> 6) Наступний оператор описує розташування дефекту в кристалі
(if (and (not (eqv? x l_place)) (not (eqv? y l_place)))
(set! geometry (append geometry (list
(make cylinder (center xy) (material air) (radius r) (height infinity))
)))
)
В· Математичні операції в Scheme описуються трохи незвичним способом: спочатку йде знак операції, а потім тільки числа.
Наприклад, (2 +3-1) можна представити як (+ 2 3 -1). - тут використовується не як математична операція, а як знак числа. Аналогічним чином формуються і більше складніше вираження.
В· (not (eqv? x l_place)) - eqv? Одна з кількох операцій порівняння. Eqv? Порівнює два числа між собою і повертає true якщо вони рівні один одному. Not - змінює результат логічної операції на протилежний.
Завдяки структурам (5) і (6) відбувається побудова дірок всередині кристалу. При обчисленні нових значень X і Y, відбувається їх порівняння з l_place (у нашому випадку l_place = 1). Дірка в кристалі робиться тільки тоді, коли X або Y не рівні l_place. Тим самим формується дефект у вигляді хреста. p align="justify"> Процес компіляції і представлення результату, аналогічний попередній програмі.
4.4 Приклад програми, що аналізує структуру кристала
В основу наступної програми покладено програму, розглянута в попередньому прикладі. У ній також формується кристал з е = 12 і дефект у вигляді хреста. Мета програми: розрахувати кількість минулої крізь дефект енергії в порівнянні з що увійшла в нього. p align="justify">; flux1
; 1
(define fcen 0.4); цент частот в пакеті хвиль
(define df 0.1); ширина частот
; якщо no-bend = true, то чи не малюємо кристалічну структуру
(define-param no-bend? false)
(define lx 20); Задаємо розмір Р області
(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;