Редактор кроків: періодичне розміщення об’єктів у OghmaNano.
1. Вступ
Багато фотонних і електронних пристроїв за своєю суттю мають періодичну структуру. Для створення дифракційної решітки з розподіленим зворотним зв’язком (DFB) потрібна точно розташована серія гребенів або прорізів. Фото́нний кристал створюється з регулярної решітки діелектричних об’єктів. Плазмонна метаповерхня складається з повторюваних резонуючих елементів, розташованих на відстані, меншій за довжину хвилі. Створення цих структур шляхом додавання об’єктів один за одним було б непрактичним, тому OghmaNano пропонує редактор, який дозволяє створити один об’єкт і автоматично генерувати його копії у вказаних позиціях у тривимірному просторі.
Важливою властивістю цієї системи є те, що кожна копія має ті самі оптичні та електричні параметри, що й оригінал. Копії не є незалежними об’єктами — це група точних копій, усі вони успадковують матеріальні характеристики, властивості шарів і оптичні константи вихідного об’єкта. Це дозволяє легко змінювати всю періодичну структуру, редагуючи лише оригінал.
Редактор кроків пропонує три режими, що відрізняються рівнем складності: базовий режим для простих однорідних масивів, кристалічний режим для структур, визначених за допомогою примітивних векторів ґратки, і режим Lua-скриптів для абсолютно довільних розподілів точок.
2. Відкриття редактора кроків
Щоб відкрити редактор кроків, почніть із головного вікна симуляції OghmaNano (??). Клацніть правою кнопкою миші на об’єкті, який потрібно скопіювати, і виберіть «Редагувати об’єкт» у контекстному меню. Відкриється редактор об’єктів, який показано на ??.
В редакторі об’єктів знайдіть рядок «Кроки». У цьому рядку відображаються поточні параметри кроку: зміщення (dx, dy, dz) між копіями та кількість копій (nx, ny, nz) у кожному напрямку. Натисніть кнопку «… Редагувати» в правій частині рядка «Кроки», щоб відкрити вікно редактора кроків.
3. Основний режим покрокового виконання.
За замовчуванням редактор кроків відкривається в базовому режимі, як показано на ??. Цей режим є найпростішим способом створення одномірного, двомірного або тримірного масиву об’єктів. Він використовує один вектор кроку (dx, dy, dz) і повторює об’єкт відповідну кількість разів уздовж кожної осі. Поля:
- step dx, dy, dz — крок зміщення між послідовними копіями в кожному напрямку.
- Кількість об’єктів x, y, z — кількість копій, які потрібно розмістити вздовж кожної осі.
Наприклад, щоб створити одномірну дифракційну структуру з 10 елементів, розташованих на відстані 209 нм один від одного вздовж осі z, встановіть dz = 209 нм, nz = 10, а значення dx і dy залиште рівними нулю. Це конфігурація, зображена на ??, яка відповідає простій періодичній структурі DFB.
add_point(). Натисніть кнопку «Оновити», щоб оновити тривимірне зображення.4. Мода кристалічної ґратки
Для структур із неортогональною або нерівномірною періодичністю натисніть кнопку «Кристал» на панелі інструментів редактора етапів, щоб перейти в режим кристалічної структури (??). У цьому режимі періодична структура визначається за допомогою трьох примітивних векторів ґратки: a1, a2 і a3. Це та сама формальна система, яка використовується в кристалографії для опису ґратки Браве.
Положення кожного об’єкта обчислюється за такою формулою:
\[ \mathbf{r}_{ijk} = \mathbf{r}_0 + i\,\mathbf{a}_1 + j\,\mathbf{a}_2 + k\,\mathbf{a}_3 \]
де i, j, k — цілочисельні індекси, що змінюються від 0 до nx−1, ny−1, nz−1 відповідно, а r₀ — початок координат. Правильно підбираючи значення a1, a2, a3, можна створити будь-яку кристалічну ґратку Браве — просту кубічну, гранецентровану кубічну, об’ємноцентровану кубічну, гексагональну або будь-яку іншу довільну неортогональну структуру.
5. Режим програмування на Lua.
Для абсолютно довільних розподілів точок — спіралей, гвинтових ліній, квазікристалів або будь-якої геометрії, яку неможливо представити у вигляді простої кристалічної гратки, редактор кроків надає інтерфейс для написання сценаріїв на мові Lua, до якого можна отримати доступ, натиснувши кнопку «Сценарій Lua» (??).
У цьому контексті доступні дві вбудовані функції:
clear_points()— видаляє всі попередньо визначені точки.add_point(x, y, z)— розміщує копію об’єкта в точці з координатами (x, y, z) у метрах.
Між цими викликами можна використовувати будь-який дійсний код Lua, зокрема цикли, умовні оператори, тригонометричні функції та генерацію випадкових чисел за допомогою math.random(). Після редагування сценарію натисніть кнопку «Оновити», щоб відновити розподіл точок і оновити тривимірне зображення.
Простий приклад – розміщення об’єктів на рівновіддалених позиціях вздовж осі z із застосуванням невеликої випадкової нерівності до кожної позиції – показано нижче. Це корисно для моделювання дефектів, що виникають під час виготовлення дифракційних структур:
clear_points()
N = 14
lambda = 240e-9
roughness = 4e-9 -- set to 0, 1e-9, 2e-9, 5e-9, etc.
z = 0.0
for n = 1, N do
for i = 1, 10 do
add_point(0.0, 0.0, z + (math.random() * 2.0 - 1.0) * roughness)
z = z + lambda
end
end
6. Приклад: гексагональна решітка.
Практичним прикладом кристалічної моделі є створення гексагональної решітки, яку можна використовувати для фотонного кристала або гексагонально впорядкованого масиву наностовпчиків. Конфігурація редактора решітки показана на ??, а отриману тривимірну структуру – на ??.
Основні значення такі: a2_x = a/2 = 1,5 мкм і a2_y = a√3/2 = 2,598 мкм, які разом визначають кут 60° між векторами a1 і a2, що характеризує гексагональну симетрію. Вектор a3, який лежить поза площиною, просто визначає відстань між шарами вздовж осі z.
7. Приклад: створення моделі подвійної спіралі за допомогою скриптів Lua.
Більш складним візуальним прикладом того, що може створити режим скриптів Lua, є подвійна спіраль — дві переплетені спіральні нитки, що обертаються навколо спільної осі. Цю геометричну форму неможливо представити у вигляді решітки Браве, тому потрібен інтерфейс для написання скриптів. Код Lua наведено в ??, а отриману структуру — в ??.
Повний код Lua для цієї структури:
clear_points()
N = 200
radius = 1.5e-6
pitch = 3e-6
turns = 6
for i = 1, N do
t = (i / N) * turns * 2 * math.pi
-- first helix strand
x1 = radius * math.cos(t)
y1 = radius * math.sin(t)
z1 = (i / N) * turns * pitch
add_point(x1, y1, z1)
-- second helix strand offset by pi (opposite side)
x2 = radius * math.cos(t + math.pi)
y2 = radius * math.sin(t + math.pi)
add_point(x2, y2, z1)
end
Кожна спіраль відстежується шляхом поступової зміни параметра t від 0 до 2π × кількість витків. Координати x і y слідують колу заданого радіуса, тоді як z лінійно збільшується зі збільшенням t при заданому кроці. Друга спіраль зміщена на π радіан — її розміщують на протилежній стороні осі спіралі в кожній точці, що створює характерну переплетену структуру подвійної спіралі.
8. Підсумок.
Редактор послідовних дій в OghmaNano пропонує три взаємодоповнюючі методи для періодичного розміщення об’єктів у тривимірному просторі. Базовий режим дозволяє створювати прості рівномірні масиви з використанням єдиного вектора зміщення. Режим «Кристал» підтримує будь-яку кристалічну ґратку Бравé за допомогою трьох первинних векторів a1, a2, a3, що дає змогу створювати гексагональні, кубічні або довільні неортогональні структури. Режим Lua-скриптів усуває всі геометричні обмеження, дозволяючи розміщувати точки в довільних координатах, обчислених на основі будь-якого математичного виразу, як показано на прикладі подвійної спіралі вище. В усіх трьох режимах кожна копія об’єкта успадковує ті самі оптичні та електричні властивості, що й оригінал, тому всю періодичну структуру можна змінити, редагуючи лише один об’єкт.