项目4.4 Reflection calculation using a dipole source

在此页面中,我们采用了一种不同于标准平面波源方法的替代模拟设置,使用偶极子源来计算多层堆叠结构的反射。在此情况下,我们使用空气 - 玻璃界面。这种技术很有吸引力,因为它能够在单次模拟中计算出所有角度的反射。另一个优点是,所有模拟边界都设置为 PML,这可以提高临界角或接近临界角时的角度性能。

仿真设置

上图展示了 dipole_2layer.fsp 的仿真设置。空气 - 玻璃界面清晰可见,还有偶极子源(蓝色圆圈)和剖面监视器(黄色线)。在堆叠结构的正下方放置了一个剖面监视器。前向和后向远场投影均从该监视器计算得出。反射率可通过后向投影除以前向投影得出。每种偏振态都需要进行一次仿真。

优点:

一次模拟即可得到所有角度下的反射率(R)和透射率(T)。

缺点:

此技术仅适用于无图案的平板,不适用于光栅。随着堆叠层数的增加,可能需要非常宽的模拟范围。

结果:

脚本 dipole_2layer.lsf 将运行两次模拟,然后计算解析解。对于两种偏振,模拟得到的反射率和透射率与入射角的关系以及解析解均被绘制出来。

代码分析

这段代码是 Lumerical 软件的脚本文件(.lsf),用于计算双层介质结构的反射和透射光谱,并将 FDTD 仿真结果与理论结果进行对比

# scriptfile: dipole_2layer.lsf

注释:标识脚本文件名,说明当前文件为dipole_2layer.lsf。

# This file calculates the reflection spectrum for a single dielectric interface. It does both polarizations (TE and TM) and compares to the analytic result.

注释:说明脚本功能:计算单层介质界面的反射光谱,处理 TE(S 偏振)和 TM(P 偏振)两种偏振态,并与解析理论结果进行对比。

# Copyright 2012, Lumerical Solutions, Inc.

注释:版权声明,属于 2012 年 Lumerical Solutions 公司(Lumerical 是光子仿真软件开发商)。

sweepname="2layer";

定义变量sweepname并赋值为字符串"2layer",用于指定后续要读取的 “扫描仿真”(sweep simulation)的名称(这里指 “双层结构” 的扫描仿真)。

# choose to rerun or load simulations previously run

注释:说明后续代码的作用:选择重新运行仿真或加载之前已运行的仿真结果。

#runsweep;

被注释的命令:runsweep是 Lumerical 中执行扫描仿真的命令。这里被注释,说明脚本会直接加载已完成的仿真结果,而不重新运行仿真。

f = getsweepdata(sweepname,"f");

调用getsweepdata函数从名称为sweepname(即 "2layer")的扫描仿真中,提取参数"f"(频率)的数据,并赋值给变量f。

theta = getsweepdata(sweepname,"theta");

从扫描仿真中提取参数"theta"(入射角,单位通常为度)的数据,赋值给变量theta。

n = getsweepdata(sweepname,"n");

从扫描仿真中提取参数"n"(介质折射率)的数据,赋值给变量n(可能包含多层介质的折射率)。

d = getsweepdata(sweepname,"d");

从扫描仿真中提取参数"d"(介质厚度)的数据,赋值给变量d(可能包含多层介质的厚度)。

Rs_fdtd = pinch(getsweepdata(sweepname,"r"),2,1);

getsweepdata(sweepname,"r"):提取扫描仿真中反射率("r")的原始数据(通常是一个多维数组,包含不同偏振态的结果)。

pinch(...,2,1):pinch函数用于提取多维数组中特定维度的数据,这里表示 “在第 2 个维度取第 1 个元素”,对应 TE 偏振(S 偏振)的反射率。

最终将 FDTD 仿真得到的 S 偏振反射率赋值给Rs_fdtd。

Ts_fdtd = pinch(getsweepdata(sweepname,"t"),2,1);

类似上一句,提取透射率("t")数据中第 2 维度的第 1 个元素,对应 FDTD 仿真得到的 S 偏振透射率,赋值给Ts_fdtd。

Rp_fdtd = pinch(getsweepdata(sweepname,"r"),2,2);

提取反射率("r")数据中第 2 维度的第 2 个元素,对应 TM 偏振(P 偏振)的反射率(FDTD 仿真结果),赋值给Rp_fdtd。

Tp_fdtd = pinch(getsweepdata(sweepname,"t"),2,2);

提取透射率("t")数据中第 2 维度的第 2 个元素,对应 FDTD 仿真得到的 P 偏振透射率,赋值给Tp_fdtd。

RT_Theory = stackrt(n,d,f,theta);

调用 Lumerical 内置函数stackrt计算多层膜结构的理论反射 / 透射率。

参数:n(折射率)、d(厚度)、f(频率)、theta(入射角)。

返回值RT_Theory是一个结构体,包含理论计算的反射率(Rs、Rp)和透射率(Ts、Tp)。

plot(theta,Rs_fdtd,RT_Theory.Rs,Rp_fdtd,RT_Theory.Rp,"angle (degrees)","Reflection","Reflection vs angle");

绘制反射率随入射角变化的曲线:

横轴:theta(入射角,单位 “度”)。

纵轴:反射率。

曲线包括:FDTD 的 S 偏振反射率(Rs_fdtd)、理论的 S 偏振反射率(RT_Theory.Rs)、FDTD 的 P 偏振反射率(Rp_fdtd)、理论的 P 偏振反射率(RT_Theory.Rp)。

图表标题为 “Reflection vs angle”(反射率与角度的关系)。

legend("S FDTD","S Theory","P FDTD","P Theory");

为上一个反射率图添加图例,依次对应曲线的含义:S 偏振 FDTD 结果、S 偏振理论结果、P 偏振 FDTD 结果、P 偏振理论结果。

plot(theta,Ts_fdtd,RT_Theory.Ts,Tp_fdtd,RT_Theory.Tp,"angle (degrees)","Transmission","Transmission vs incident angle");

绘制透射率随入射角变化的曲线:

横轴:theta(入射角,单位 “度”)。

纵轴:透射率。

曲线包括:FDTD 的 S 偏振透射率(Ts_fdtd)、理论的 S 偏振透射率(RT_Theory.Ts)、FDTD 的 P 偏振透射率(Tp_fdtd)、理论的 P 偏振透射率(RT_Theory.Tp)。

图表标题为 “Transmission vs incident angle”(透射率与入射角的关系)。

legend("S FDTD","S Theory","P FDTD","P Theory");

为透射率图添加图例,含义同反射率图的图例。

总结:整个脚本的核心逻辑是 “加载 FDTD 仿真数据→提取关键参数(反射 / 透射率)→计算理论结果→绘图对比仿真与理论”,用于验证双层介质结构的光学特性仿真结果的准确性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96238.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96238.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96238.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习入门,用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!

国内用户必看】用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题! 为了在不同操作系统有一致操作体验,我选择使用docker技术安装ollama,这样子还有一个好处,即使玩坏了,删除重建即可,所…

Java 生成签名证书

在Java中生成签名证书通常涉及到使用Java密钥和证书管理工具(Java Key and Certificate Management API,即Java Keytool)。这个过程通常包括创建密钥库(KeyStore),生成密钥对(Key Pair&#xff…

语法分析:编译器中的“语法警察”

在编程的世界里,每一种编程语言都有自己的语法规则。就像中文有标点符号和语序规则一样,编程语言也有自己严格的语法规则。语法分析器就像一个严格的"语法警察",它的职责是检查源代码是否符合语言规范,同时为后续的处理…

容器的定义及工作原理

定义 你可以把 容器 想象成一个 “打包好的软件快递箱”。 里面有什么? 这个箱子里不仅装着你的软件(比如一个网站程序),还把软件运行所需要的所有东西都打包进去了,比如它需要哪个版本的Python、需要哪些系统文件、配…

云服务扫盲笔记(2) —— SLS 接入与设置自动化

前篇我们学习了SLS的核心用途及概念,本篇以将一个linux服务器的json格式日志接入阿里云SLS为例,继续学习SLS接入中的关键设置及注意事项,以及如何将其实现简单自动化快速操作。 一、 SLS 日志接入流程 [1] 准备工作(确定日志路径…

LwIP入门实战 — 6 LwIP 网络数据包

目录 6.1 pbuf结构体 6.2 pbuf 的类型 6.2.1 PBUF_RAM 类型的pbuf 6.2.2 PBUF_POOL 类型的pbuf 6.2.3 PBUF_ROM 和 PBUF_REF 类型pbuf 6.3 pbuf 6.3.1 pbuf_alloc() 6.3.2 pbuf_free() 6.4 其它pbuf 操作函数 6.5 网卡中使用的 pbuf 6.5.1 low_level_output() 6.5.…

【已解决】Linux中程序脚本可以手动执行成功,但加在rc.local中不能开机自启

之前开发遇到的一个问题:在Linux中,明明程序脚本可以手动执行成功,但加到开机自启动里,却会失败,属实让人摸不着头脑。 问题排查: 有以下几种可能: 自启动脚本,执行权限不足或者脚本…

切块、清洗、烹饪:RAG知识库构建的三步曲

嘿,各位AI技术爱好者们,你是不是经常遇到这样的情况:辛辛苦苦训练的AI助手,面对专业问题时却"一问三不知"或者"胡言乱语"?明明你已经喂了它一堆PDF和Word文档,为啥它就是不会用&#x…

ubuntu 安装 docker 详细步骤

登录,ubuntu版本 22.04 wqbboy192.168.1.2s password: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/…

AndroidWorld+mobileRL

1、Android地址 https://github.com/google-research/android_world/tree/main?tabreadme-ov-file#installation 这里有排行榜,提交方式为手工提交到共享表格 https://docs.google.com/spreadsheets/d/1cchzP9dlTZ3WXQTfYNhh3avxoLipqHN75v1Tb86uhHo/edit?gid0#g…

《练手:ipv4地址计算和Telnet 远程设备管理配置实验文档》

实验一:IPv4 地址网段判断原理及实例 判断两个 IPv4 地址是否处于同一网段,核心依据是:将两个 IP 地址分别与子网掩码进行AND 运算后,得到的网络地址是否相同。若相同,则属于同一网段;反之则不属于。 实验拓…

小程序获取手机号完整流程 弹出框获取电话号码

小程序获取手机号完整流程 弹出框获取电话号码 1️⃣ 前提条件 - 使用微信小程序 - 小程序已注册并通过审核 - 后端可存储 session_key2️⃣ 小程序端按钮 <button type"default" open-type"getPhoneNumber" getphonenumber"decryptPhoneNumber&qu…

Nginx 实战系列(四)—— Nginx反向代理与负载均衡实战指南

文章目录前言一、反向代理1.1 反向代理原理1.2 实验配置示例二、负载均衡2.1 负载均衡基本原理2.2 常见负载均衡策略2.2.1 轮询&#xff08;Round Robin&#xff09;&#xff08;最常用&#xff09;2.2.2 最少连接数&#xff08;Least Connections&#xff09;2.2.3 IP 哈希&am…

深度学习(一):人工智能、机器学习与深度学习

人工智能 (AI)&#xff1a;宏大的目标 人工智能是最广泛、最宏大的概念&#xff0c;它的目标是让机器能够模仿人类的智能行为&#xff0c;例如&#xff1a; 推理&#xff1a;像下棋程序一样&#xff0c;通过逻辑来做决策。规划&#xff1a;为实现一个目标而制定步骤&#xff0c…

[网络入侵AI检测] 纯卷积神经网络(CNN)模型 | CNN处理数据

第5章&#xff1a;纯卷积神经网络&#xff08;CNN&#xff09;模型 欢迎回来 在第1章&#xff1a;分类任务配置&#xff08;二分类 vs. 多分类&#xff09;中&#xff0c;我们学习了如何提出正确的问题&#xff1b; 在第2章&#xff1a;数据加载与预处理中&#xff0c;我们准…

Unity AssetBundle详解

简介 AssetBundle&#xff08;简称&#xff1a;AB包&#xff09; 是 Unity 提供的一种资源压缩包&#xff0c;用于在应用运行时动态地加载和卸载资源。它可以将非代码资源&#xff08;如模型、纹理、预制体、音频、甚至整个场景&#xff09;打包成一个或多个文件&#xff0c;这…

golang-gin包

文章目录一、了解gin二、html渲染三、gin中get/post获取值四、路由分组五、中间件六、文件上传七、gin中的cookie一、了解gin Gin 是一个用 Golang编写的 高性能的web 框架, 由于http路由的优化&#xff0c;速度提高了近 40 倍。 Gin的特 点就是封装优雅、API友好。 特性类别…

基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局

基于脚手架微服务的视频点播系统-界面布局部分:二.首页及播放界面布局一.用户界面布局1.1用户界面布局分析与实现1.2更新用户图像按钮及逻辑1.3修改按钮及逻辑1.4上传视频对话框实现逻辑1.4.1页面跳转逻辑处理1.4.2页面控件响应处理二.系统界面布局2.1系统管理页框架2.2审核管理…

STL库——二叉搜索树

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言&#xff1b; 文章目录 前言 一、二叉搜索树的概念 二、二叉搜索树的性能分析 三、二叉搜索树的插入 四、二叉搜索树的查…

【Linux】线程概念与控制

一. 线程的概念1.什么是线程线程是进程内部的一个执行流&#xff0c;是进程调度的基本单位。它具有轻量的特点&#xff0c;它的创建和销毁所消耗的资源更少&#xff0c;线程间切换比进程间切换消耗的资源更少&#xff1b;它与进程共享一张虚拟地址空间表&#xff0c;通过进程来…