vMJC 为您的
光学仿真提供最大的多功能性是我们的宗旨之一。 在本
教程中,我们将介绍可编程探测器:可以最大限度地灵活地访问矢量场中包含的任何物理信息或到达探测器的
光线(取决于
模拟引擎)。 我们在这里使用一个简单的编程示例来说明其操作流程。
,M\/[_:
!_&;#j](
UyMlk K$$%j "s 可编程探测器所在位置:目录 Xs2B:`,hh K=P LOC5
C+C1(b;1 b#S-u }1PE 可编程探测器所在位置:光学系统 `K2vG`c a
uve&y"R
%VrMlG4hx 关于光表征的注释 z-nV!# Y~OyoNu2 sJ_3tjs) 在物理光学中表示光的矢量电磁场在VirtualLab Fusion中始终可以通过系统进行追迹。
D6P/39}W •从计算效率的角度来看,为了使这种方法更实用,最重要的是拥有一套多样化的数学技术(高效傅里叶变换算法,插值和拟合方法,异构采样机制等)。
`_{,4oi •在当前版本的VirtualLab Fusion中,该技术由多个模拟引擎的共同呈现:
c[?&;# feV - 光线追迹:纯光线追迹,产生2D和3D结果
H_%ae'W - 经典场追迹:可处理等距采样的EM场数据
^$8WV&5q> - 第二代场追迹:还能够处理非等距的EM场数据
1n $ •这与可编程探测器相关:探测器的良好实施需要考虑不同引擎中的光线表现方式!
.n}k,da@( 0B5d $0
}sfvzw_ OJLyqncw 关于光表征的注释 ksqb& ux6 3cFvS[JG y$?O0S%F •此外,为了表达光的一系列重要物理属性(部分相干,例如,无论是时间还是空间),VirtualLab使用模态分解。
fydQaxCND * \tR •可通过一系列索引在可编程探测器中访问不同的模态。
1[".
z{V3* uq]E^#^ •如果要可编程探测器呈现要求的正确物理特性,则考虑不同的模态也是至关重要的!
7"{CBbT wV{VV?h}
0MOn>76$N p"NuR4 编写代码:等距场数据 uU8L 93 u$1^= ${7s"IX •可编程探测器提供两种不同的编程控制设置。 这些与模拟引擎有关。 第一个标题为等距场数据的代码段,处理在等距矩形x,y网格上采样的电磁场对象。
M3q7{w*bM •这是麦克斯韦方程的直接结果,在均匀介质中,六个电磁分量中只有两个是独立的; 因此,到达探测器的仅由Ex和Ey分量组成,所有其他分量因此可以明确地按需计算。
oeG?2!Zh •根据输入场的偏振特性,Ex和Ey可以是两个独立的函数(局部偏振),也可以通过常数Jones'向量(在x和y是常数)从单个场函数U获得,因此Ex = Jx * U和Ey = Jy * U。
jx];=IC3tt Ozc9y y!%
TfA;4^ fH_Xm :% 提示:全局
参数(Global Parameters),代码段帮助(Snippet Help),高级设置选项卡(Advanced Settings tabs)和界面的其他方面与VirtualLab中的其他可编程元件一致。
`?vI_>md'! .@f)#2 编写代码:等距场数据 J2$=H1- bzX/Zts rK
cr1VFy •右侧面板显示可用的独立参数列表。
O}[){*GG= •IndexOfDetector和IndexOfLinkage指的是包含相关探测器的光学系统配置中的相应元件。
bg,VK1 •SystemTemperature和SystemPressure是整个系统的参数,其值可以在代码中用于实现与温度和压力相关的响应。
yc@:*Z •AutomaticFieldSize,...,ManualNumberSamplingPoints是影响最终等距采样场结果的参数,其值可在探测器配置对话框的“探测器窗口”和“分辨率”选项卡中进行修改。
KRj3??b P6 mDwR
boIFN;Aq" 8X=2# &) 提示:全局参数(Global Parameters),代码段帮助(Snippet Help),高级设置选项卡(Advanced Settings tabs)和界面的其他方面与VirtualLab中的其他可编程元件一致。
-"n8Wv T;B/Wm!x 编写代码:等距场数据 d/Fy0=0 %A;s3]V `qr.@0whP •ResolveLinearPhase和ResolveRelativePosition是标志,其值可在探测器配置对话框的“探测器函数”选项卡中进行修改。 它们表明用户希望保持存储在光场内部坐标系中的线性相位和位置移位,或相反地,精确地分辨(这导致更高的采样要求,如Shannon-Nyquist所示)。 程序员有责任实现能够以某种方式正确反映这些愿景的代码。
Th 5}?j7 •InputField表示到达探测器的光场(等距采样)。 遵循VirtualLab的模式概念,它由一组完全自相关的电磁模式组成,它们之间可以表现出不同的相干特性,如实地模拟物理场的相干特性。
d>1#| •ParentLightPath是指包含相关探测器的光学系统。 使用Snippet Body将支持函数中的部分代码分组。
yI$MqR 8BM[c;-{g`
<h1J+ 提示:全局参数(Global Parameters),代码段帮助(Snippet Help),高级设置选项卡(Advanced Settings tabs)和界面的其他方面与VirtualLab中的其他可编程元件一致。
c}#(,<8X =D?{d{JT 编写代码:非等距场和光线数据 is=|rY9$ _1HEGX\ PAy7b7m~B •可编程探测器中的另一个编程对话框处理非等距采样的场数据和光线。
^p #bxN") •右侧的面板再次显示可用的独立参数列表。
vjXCArS •与等距采样场的代码段的唯一区别在于InputField被RayTracingResult替换。
F#\+.inO •不要让RayTracingResult这个名字欺骗你! 这种术语已经过时,将在未来的版本中逐步淘汰。
${, !L l7) •对于非等距场,矢量场样本可能与光线样本重合。 因此,当所选引擎是第二代场追迹时,此代码段可以返回光线信息(如果使用光线追迹引擎运行模拟)和物理光学结果。 程序员有责任考虑这两种情况。
6T A2 b]5S9^=LI
R2nDK7j 输出 )N]%cO(^ Z`bo1,6>
~1.~4~um lyrwm{& / ,
.rUn1 •对于两种代码段,可编程探测器必须返回DetectorResultObject []数组。
gd\b]L?>O •此类对象可以包含
*Ja,3Qq - 物理量值:例如,计算功率的探测器
O6r.q&U - 2D图形表示:想象一个探测器,显示探测器平面中的所有六个电磁分量。
8]0?mV8iOE •每一个DetectorResultObject
对应于一个物理量大小或一个2D图形。 fm^)u"
•可编程探测器的结果可用于参数扫描或参数优化! JWs?az
•自定义探测器可以保存在目录中供以后使用。 sh8(+hg
Zl`sY5{1
编程探测器探测入射光谱中的最小和最大波长 t M{U6k
STQ~mFs"
要求的自定义探测器的规格 {Ng HH]]O
9mH+Ol#(
vD4<G{
•本例程产生的自定义探测器必须适用光线和场追迹两个引擎。 v_ W03\
} =^Al;W
•可编程探测器将产生至少三个结果: $^"_Fox]A\
- 光谱中的样本总数 cK+y3`.0
- 光谱中存在的最小波长的值 O\qY?)
- 光谱中存在的最大波长的值 KdTna6nY
834dsl+U
•此外,还将包含用户控制的布尔参数。 wKs-<b%;
(L6*#!Dt
•此布尔参数将允许用户选择是否要返回其他结果:此附加结果对应于到达探测器的光(光线或场)。 5mYI5~
p
) "Toh=x]
可编程探测器所在位置:目录 H>2f M^
VNLggeX'U
db.E-@W.OI
vxC,8Z
可编程探测器所在位置:光学系统 #2*2xt
Ayi
Uz
j{a3AEmps
可编程探测器:全局参数 *]_GFixi
)|zna{g\
#T8$NZA
•点击打开“编辑”对话框后,转到“全局参数”选项卡。 7Y(ySW
•在那里,添加和编辑一个全局参数: (KxL*gB
- Boolean ShowLight = false(false,true):用户定义的参数,用于表示确定到达探测器的光(矢量场或光线)是否将作为探测器结果与光谱中波长最小值和最大值一起返回。。 zE NlL
•请注意,“全局参数”,“代码段帮助”和“高级设置”选项卡以及“代码段分段(Snippet Body)”在两种控制模式(等距采样场,光线和非等距采样场)共享和共用。 x2gP, p-
13T0"}
提示:此处可以添加一些陈述文本以便其他使用者理解和使用该代码段。 ~h*p A8^L
]w=6.LzO*
&$</|F)y
Li;(~_62a]
可编程探测器:代码段帮助(Snippet Help) r'ydjy
\LS+.bp%
[#R<Z+c
•可选功能“Optional”:您可以使用“代码段帮助”选项卡编写指令,说明以及与代码段相关的一些元数据。 'qg q8
%Sdzr!I7*
•此选项对于使用可编程元件跟踪进度非常有用。 ;hLne0|)}
<KDl2>O
•当可编程元件被发送给其他用户处理时,它的作用发挥得尤为明显! *AU"FI>V
e
r;3TG~
vYNh0)$%F
mJ|7Jc
5Y&s+|
5Y8/ZW~D0
可编程探测器:编写代码(1) 6A& f
d>Z{TFY
1=t\|Th-
g{cHh(S
可编程探测器:编写代码(2) 1!E+(Iq
?DC3BA\)
F W # S.<
h?:lO3)TL=
可编程探测器:比较代码段 7^~pOFdH
O$%C(n(
Cu\A[6g,
f9FsZD
fxQN
•变量需要在两个代码段中分别独立声明。 $[Fh|%\
•甚至可以使用不同的命名法! kE".v|@
•程序员有责任确保代码在两个代码段中以相同的方式运行。 nD+vMG1~w
•在所有全局参数(包括用户定义的参数)中,只有一个与代码段相关:与光表示相对应的参数(InputField RayTracingResult) o"x&F
F%6`D
可编程探测器:使用您的代码段(Snippet) 7 '@l?u/6
%Iv0<oU
m GWT</=[$
tp.qh]2c
将自定义探测器保存到目录 S`"M;%T
<&o
`T4
q*ZjOqj
>Tld:
可编程探测器的输出 3
SQ_9{
`oh'rm3'8
v5t`?+e
测试代码! qx"?')+
NDRk%_Eu(
ujcNSX*
~} mX#,
测试代码! c(bh i
nYuZg6K