AR SRG 波导讲义复现报告

对照 docs/book 第 1–6 章的闭式验算。参数:λ = 526 nm,n = 1.8,t = 0.4 mm。对照 45/45 项通过。

本报告核对的是讲义里的解析关系:波数、全反射、hop、三根光栅矢量的闭合、视场窗口、常数耦出效率为什么盖不住 Eyebox,以及均匀性和彩虹纹的定义。 第 7–8 节是这次实际跑出来的 meent RCWA 与 CUDA 追迹。设计报告上的 nit/lm 仍只用来核对均匀性定义,不能把相对通量标成这个单位。

结论

与讲义数值的对照

节量本笔记讲义差值结果
1.1k00.01194520.0119452.192e-07通过
1.1n*k00.02150140.0215013.946e-07通过
1.1λ/n292.222292.20.0222222通过
1.2入射极角 θ14.339714.34-2.931e-04通过
1.2方位角 φ102.754102.8-0.0463354通过
1.2sinθ0.247670.248-3.295e-04通过
1.2玻璃折射角7.908697.90.00868689通过
1.3临界角33.74933.749-1.140e-05通过
1.4hop@34°0.5396070.54-3.932e-04通过
1.4hop@42°0.7203230.723.232e-04通过
1.4hop@50°0.9534030.950.00340287通过
1.4hop@50.3°0.9636050.960.00360466通过
1.432mm/hop(42°)44.4245440.424501通过
1练习窗口下沿 λ/n292.222292.20.0222222通过
1练习窗口上沿 λ5265260通过
2.1矩形点阵等效周期320.0013200.00118505通过
2.4|Kin|0.01662220.0166221.834e-07通过
2.4|K1|0.01966570.019666-3.183e-07通过
2.4K1+K2 方位66-4.441e-15通过
2.4|K1+K2|-|Kin|3.091e-083.000e-089.097e-10通过
2.3夹角 K1 相对 Kin65650通过
2.3夹角 Kin 相对 K265650通过
2.4正入射 |Kin|/k01.391531.392-4.656e-04通过
2.4中心视场 +Kin 后 kρ/k01.384431.3844.306e-04通过
2.4−K1 后 kρ/k01.413241.410.00323534通过
2.4−K2 后 kρ/k00.247670.248-3.298e-04通过
2.3闭合残差 / k02.588e-062.600e-06-1.238e-08通过
2.4中心视场耦入后 θ_g50.275750.28-0.00433941通过
2.3错误符号残差2.76492.8-0.035099通过
2.4正入射导波角50.630850.7-0.0692006通过
2练习250 nm 的 kρ/k02.1042.1040通过
2练习500 nm 的 kρ/k01.0521.0520通过
2练习彩虹级次 sinθ1.646321.65-0.00367762通过
2.4TIR 有效比例110通过
3.4FoV_x24.197624.2-0.00241795通过
3.4FoV_y 全幅18.266518.27-0.00347758通过
3.4FoV_y 显示7.664737.660.00472797通过
4练习±15° 窗口下沿345.19345.2-0.0101647通过
4练习±15° 窗口上沿422.618422.60.0183279通过
4.3闪耀水平跨距467.503467.50.00250867通过
5练习半功率衰减次数16.979717-0.020252通过
5练习对应路程11.885812-0.114176通过
6.3U_EB0.7157460.7161-3.538e-04通过
6.3U_EB2580.950220.9503-8.024e-05通过
6.5MTF 频率估计3.306123.30.00611546通过

图

面内波矢分成空气光锥、TIR 环和玻璃截止。工作导波必须落在中间那一环。
面内波矢分成空气光锥、TIR 环和玻璃截止。工作导波必须落在中间那一环。
TIR 不损失能量,但 s/p 相位差随角度变化。多次弹跳会改变偏振椭圆。
TIR 不损失能量,但 s/p 相位差随角度变化。多次弹跳会改变偏振椭圆。
刚过临界角时 hop 约 0.54 mm;50° 时接近 0.95 mm。同一段路程,浅角采样更密。
刚过临界角时 hop 约 0.54 mm;50° 时接近 0.95 mm。同一段路程,浅角采样更密。
内圆是空气光锥,外圆是玻璃光锥。橙点在 TIR 环内,紫点落回空气盘,且与蓝点重合。
内圆是空气光锥,外圆是玻璃光锥。橙点在 TIR 环内,紫点落回空气盘,且与蓝点重合。
左、中两幅的数值都大于 1,右幅小于 1。这只说明 k-layout 对这个视场几何可行。
左、中两幅的数值都大于 1,右幅小于 1。这只说明 k-layout 对这个视场几何可行。
Eyebox 中心在耦入右侧 32.75 mm、下方 3 mm。斜投影说明光栅覆盖要比 Eyebox 本身更大。
Eyebox 中心在耦入右侧 32.75 mm、下方 3 mm。斜投影说明光栅覆盖要比 Eyebox 本身更大。
半视场为 0 时窗口约 296–532 nm;±15° 时收到约 345–423 nm。
半视场为 0 时窗口约 296–532 nm;±15° 时收到约 345–423 nm。
斜面若无限延伸要走约 468 nm 才落地。一个 378 nm 周期结束时齿顶仍高于基板。
斜面若无限延伸要走约 468 nm 才落地。一个 378 nm 周期结束时齿顶仍高于基板。
蓝线在约 12 mm 处已降到起点的一半。橙线靠逐渐加大 η,把抽取摊在 15 mm 上。
蓝线在约 12 mm 处已降到起点的一半。橙线靠逐渐加大 η,把抽取摊在 15 mm 上。
这是几何上的效率日程,不是某个角度的 RCWA。浅齿在近端少漏,深齿在远端把剩余能量取出。
这是几何上的效率日程,不是某个角度的 RCWA。浅齿在近端少漏,深齿在远端把剩余能量取出。
左图是光度学报告值,右图是视场均匀性。红柱低于讲义写的 30% 门槛。这些数字来自原设计报告,不是本笔记的光追。
左图是光度学报告值,右图是视场均匀性。红柱低于讲义写的 30% 门槛。这些数字来自原设计报告,不是本笔记的光追。
319.5 nm 与 353 nm 在小观察角没有实数入射角,曲线空着。758 nm 在 40° 附近就会衍射进眼睛。
319.5 nm 与 353 nm 在小观察角没有实数入射角,曲线空着。758 nm 在 40° 附近就会衍射进眼睛。

第 7–8 节 全流程仿真

第二版全流程(平行四边形 + meent RCWA + hop)

运行日志

optimize OG parallelogram ...
best u=6.00 v=-59.00 area=357.19 ratio=1.093 n=34
meent RCWA LUT (may take 1–3 min) ...
wrote D:\Mac\Simulation\output\W100_v2\lut_meent_w100.npz
saved D:\Mac\Simulation\output\W100_v2\01_product_parallelogram_og.png
saved D:\Mac\Simulation\output\W100_v2\02_nano_ic_oc.png
saved D:\Mac\Simulation\output\W100_v2\03_k_layout.png
saved D:\Mac\Simulation\output\W100_v2\04_rcwa_lut.png
saved D:\Mac\Simulation\output\W100_v2\06_og_area_rank.png
evaluate layout ...
saved D:\Mac\Simulation\output\W100_v2\05_eval_fov_e9.png
wrote D:\Mac\Simulation\output\W100_v2\eval_metrics.txt
wrote D:\Mac\Simulation\docs\v2\W100_v2_design_report.md
done v2

指标文件

W100 v2 evaluation — meent RCWA LUT + parallelogram OG
OG u_deg=6.000 v_deg=-59.000 margin=0.3
OG area_mm2=357.191  v1_area=326.912  ratio=1.0926
candidates=34 cover_pts=1236 valid_fov=60/60
backend=cpu TIR-hop + meent LUT + parallelogram OG
TIR_valid=1.0000 flux_sum=0.11583
U_EB=0.0000 U_EB258=0.0000 U_FOV_mean=0.7794
E9 relative flux = E1:0, E2:0, E3:0, E4:0, E5:0, E6:0, E7:0, E8:0, E9:0
Report eta nit/lm still from design report p.8 = E1:831.1, E2:994.5, E3:833.2, E4:837.1, E5:1046.6, E6:909.7, E7:749.1, E8:998.1, E9:913.4
Report U_EB=0.7161 U_EB258=0.9503
LUT meta: {"solver": "meent 0.13.2 numpy RCWA", "lambda_nm": 526.0, "fto_1d": 10, "fto_2d": [3, 3], "note": "耦入查反射 −1 阶(闪耀能量在 −1);耦出 2D 为单角 42° 抽样,级次映射是工程对应而非完整锥面扫描。", "ic_logs": ["theta=18.0 p1=0.7302 r0=0.6244", "theta=26.0 p1=0.7326 r0=0.5495", "theta=34.0 p1=0.7057 r0=0.5006", "theta=42.0 p1=0.6814 r0=0.5106", "theta=50.0 p1=0.6549 r0=0.5354"]}
Relative flux is NOT nit/lm. RCWA LUT is W100-specific (meent), not the paper RGB Drive tables.
产品平面:耦入圆、v2 平行四边形、v1 矩形虚线、Eyebox 与覆盖点。
产品平面:耦入圆、v2 平行四边形、v1 矩形虚线、Eyebox 与覆盖点。
微纳:左为截断闪耀加银,右为耦出二维柱单胞。
微纳:左为截断闪耀加银,右为耦出二维柱单胞。
k 闭合:空气盘、玻璃盘,以及 K1+K2 与 Kin。
k 闭合:空气盘、玻璃盘,以及 K1+K2 与 Kin。
本次 meent RCWA:耦入效率随角度,耦出效率随齿深。
本次 meent RCWA:耦入效率随角度,耦出效率随齿深。
hop 评估:视场相对通量与 E1–E9。落点为空时均匀性是 0。
hop 评估:视场相对通量与 E1–E9。落点为空时均匀性是 0。
平行四边形候选的面积排序。交付外形不一定是全局最小。
平行四边形候选的面积排序。交付外形不一定是全局最小。

第一版全流程(nvcc sm_120 + CUDA hop)

运行日志

----- build_cuda.bat -----
NVCC="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.1\bin\nvcc.exe"
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Nov__7_19:25:04_Pacific_Standard_Time_2025
Cuda compilation tools, release 13.1, V13.1.80
Build cuda_13.1.r13.1/compiler.36836380_0
Compiling w100_trace.cu -arch=sm_120 ...
w100_trace.cu
w100_trace.cu
OK cubin=cuda\w100_trace.cubin
OK ptx=cuda\w100_trace.ptx

----- w100/run_all.py -----
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=smoke_fill grid=(16,1,1) block=(256,1,1) time_ms=0.301
[cuda] smoke d2h ok  out[0]=1.0 out[-1]=4096.0 sum=8390656
[backend] cuda | backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.301
backend=cuda sm_120
saved D:\Mac\Simulation\output\W100\01_product_layout_top.png
saved D:\Mac\Simulation\output\W100\02_product_side_eyebox.png
saved D:\Mac\Simulation\output\W100\03_product_isometric.png
saved D:\Mac\Simulation\output\W100\04_nano_incoupler_blaze.png
saved D:\Mac\Simulation\output\W100\05_nano_outcoupler_2d.png
saved D:\Mac\Simulation\output\W100\06_nano_depth_gradient.png
saved D:\Mac\Simulation\output\W100\07_k_layout.png
saved D:\Mac\Simulation\output\W100\08_stack_coatings.png
saved D:\Mac\Simulation\output\W100\09_report_sim_vs_spec.png
saved D:\Mac\Simulation\output\W100\10_fov_definition.png
all product/nano figures written to D:\Mac\Simulation\output\W100
saved D:\Mac\Simulation\output\W100\12_k_samples_from_api.png
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=smoke_fill grid=(16,1,1) block=(256,1,1) time_ms=0.004
[cuda] smoke d2h ok  out[0]=1.0 out[-1]=4096.0 sum=8390656
BACKEND cuda backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004
backend=cuda sm_120
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=w100_trace grid=(38,1,1) block=(256,1,1) threads=9600 time_ms=0.065
[cuda] d2h flux_sum=1.38782 eb_sum=1.38782 flux_nz=48 eb_nz=4429
backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 grid=(38, 1, 1) block=(256, 1, 1) kernel_ms=0.065
[nvidia-smi] python on GPU:
58332, C:\Users\18000045\AppData\Roaming\uv\python\cpython-3.11.15-windows-x86_64-none\python.exe, [N/A]
saved D:\Mac\Simulation\output\W100\11_eval_fov_eyebox.png
saved D:\Mac\Simulation\output\W100\13_w100_scalar_lut.png
saved D:\Mac\Simulation\output\W100\16_e9_report_vs_cpu_model.png
{'backend': 'cuda', 'backend_detail': 'backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004', 'gpu_name': 'NVIDIA GeForce RTX 5080', 'compute_capability': '12.0', 'U_EB_geom': 0.05631145492050439, 'U_EB258_geom': 0.7654767421300361, 'U_FOV_geom': 0.002382965511160766, 'frac_TIR_valid_FOV': 1.0, 'note': 'CUDA sm_120 TIR-hop + scalar LUT; NOT RCWA; relative flux only', 'compile_arch': 'sm_120', 'kernel_time_ms': 0.06470400094985962, 'grid': (38, 1, 1), 'block': (256, 1, 1), 'e9_geom': {'E1': 0.0002830603887559846, 'E2': 0.00014292256848420947, 'E3': 2.0981362322345376e-05, 'E4': 0.00037259492499288173, 'E5': 0.00011358834395650774, 'E6': 6.406090513337403e-05, 'E7': 0.00023556047555757685, 'E8': 0.00014838902046903968, 'E9': 3.4796708496287466e-05}}
saved image quality figures
import official couplers_coor OK
n_g 1.9 lmd nm [465 532 630]
Lambda_ic/fc/oc nm 388 315.1082336236523 388
phi_ic/fc/oc deg [ -38.   90. -142.]
saved official demo layout
done. outputs -> D:\Mac\Simulation\output\W100

指标文件

W100 evaluation — CUDA sm_120 TIR hop + W100 scalar LUT (NOT official RCWA)
backend = cuda sm_120
used_device = NVIDIA GeForce RTX 5080  CC=12.0
compile_arch = sm_120
kernel = w100_trace grid=(38, 1, 1) block=(256, 1, 1) time_ms=0.06470400094985962
detail = backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004
U_EB (model relative)    = 5.63%   spec >= 65% ; REPORT 71.61%
U_EB258 (model relative) = 76.55%   spec >= 85% ; REPORT 95.03%
U_FOV (model relative)   = 0.24%  spec >30% / worst>25%
TIR-valid FoV fraction   = 100.0%
--- Design-report ORIGINAL sim (p.8), not this code ---
Report eta nit/lm E1-E9 = E1:831.1, E2:994.5, E3:833.2, E4:837.1, E5:1046.6, E6:909.7, E7:749.1, E8:998.1, E9:913.4
Report U_FOV E1-E9 = E1:0.4584, E2:0.4823, E3:0.2258, E4:0.3436, E5:0.4899, E6:0.2659, E7:0.1757, E8:0.2961, E9:0.2578
Report eta vs spec: min=749.1 (need worst>800); E5=1046.6 (need >900)
This model does NOT output nit/lm.
W100 image-quality GEOMETRY (not imaging, not RCWA, not GPU)
theta_crit vertical=24.09 deg, horizontal=39.09 deg
  Pout_x 758 nm: i_v=16.60290301747601 deg, i_h=3.631475282157651 deg  (spec V>=89.0, H>80.0)
  Pout_y 353 nm: i_v=None deg, i_h=59.259632879393536 deg  (spec V>=89.0, H>80.0)
  Λ_eq 319.5 nm: i_v=None deg, i_h=None deg  (spec V>=89.0, H>80.0)
ghost_k air_FOV_in_air=1.0
ghost_k after_IC_in_TIR=1.0
ghost_k after_-K1_in_TIR=1.0
ghost_k after_out_in_air=1.0
ghost_k after_out_in_TIR=0.0
ghost_k note=正确路径:IC 后应 TIR,耦出后应回到空气锥。若 after_out_in_air 高则级次闭合。非成像鬼影测试。
00_official_demo_layout.png:论文官方示例片的 IC/FC/OC 轮廓,不是 W100。
00_official_demo_layout.png:论文官方示例片的 IC/FC/OC 轮廓,不是 W100。
01_product_layout_top.png:W100 产品平面:耦入、二维耦出、Eyebox。
01_product_layout_top.png:W100 产品平面:耦入、二维耦出、Eyebox。
02_product_side_eyebox.png:侧视叠层与眼球。
02_product_side_eyebox.png:侧视叠层与眼球。
03_product_isometric.png:轴测。
03_product_isometric.png:轴测。
04_nano_incoupler_blaze.png:耦入闪耀截面。
04_nano_incoupler_blaze.png:耦入闪耀截面。
05_nano_outcoupler_2d.png:耦出二维柱。
05_nano_outcoupler_2d.png:耦出二维柱。
06_nano_depth_gradient.png:齿深渐变。
06_nano_depth_gradient.png:齿深渐变。
07_k_layout.png:k 闭合图。
07_k_layout.png:k 闭合图。
08_stack_coatings.png:镀膜叠层。
08_stack_coatings.png:镀膜叠层。
09_report_sim_vs_spec.png:设计报告仿真与规格门槛。
09_report_sim_vs_spec.png:设计报告仿真与规格门槛。
10_fov_definition.png:视场定义。
10_fov_definition.png:视场定义。
11_eval_fov_eyebox.png:CUDA 追迹的视场与 Eyebox 相对通量。
11_eval_fov_eyebox.png:CUDA 追迹的视场与 Eyebox 相对通量。
12_k_samples_from_api.png:场景 API 的 k 采样。
12_k_samples_from_api.png:场景 API 的 k 采样。
13_w100_scalar_lut.png:v1 标量 LUT。这不是 RCWA,不能标成 nit/lm。
13_w100_scalar_lut.png:v1 标量 LUT。这不是 RCWA,不能标成 nit/lm。
14_rainbow_ghost_geometry.png:彩虹纹临界角与级次通道的几何。
14_rainbow_ghost_geometry.png:彩虹纹临界角与级次通道的几何。
15_mtf_spec_only.png:MTF 规格曲线。hop 模型没有相位,这里只画规格。
15_mtf_spec_only.png:MTF 规格曲线。hop 模型没有相位,这里只画规格。
16_e9_report_vs_cpu_model.png:设计报告光效与本模型相对通量。单位不同,只看趋势。
16_e9_report_vs_cpu_model.png:设计报告光效与本模型相对通量。单位不同,只看趋势。