当前位置: 首页 > ai >正文

梯度波导_FDTD_学习_代码

#这段代码是用于计算渐变折射率光纤(graded index fiber)中不同模式的误差与网格精度的关系,以及色散误差与波长的关系。以下是逐句分析:

use_matlab=0;

##设置是否使用 Matlab 进行计算和绘图,0 表示仅使用 MODE 计算,不调用 Matlab。

conformal_mesh_on=1;

#设置网格类型,1 表示使用 "conformal variant 1"(共形网格,精度更高),0 表示使用 "staircase"(阶梯网格)。

load("graded_index_fiber.lms");

#加载 Lumerical MODE 软件的项目文件(.lms),包含光纤结构定义。

cleardcard;

##清除数据卡片(data card),用于重置之前的计算数据。

loaddata("graded_index_fiber.ldf");

#加载数据文件(.ldf),可能包含预设的材料参数或结构数据。

lam = 1.0e-6;

#设置参考波长为 1 微米(1e-6 米)。

n0 = sqrt(4);

设定基准折射率 n0=2(因为 sqrt (4)=2)。

k0 = 2*pi*n0/lam;

##计算自由空间波数 k0(与波长和折射率相关)。

H = 40e-6;

#设置光纤相关的特征长度 H 为 40 微米。

#以下几行计算不同模式(m,n)的理论有效折射率:

m = 0; n = 0;

alpha = 2+2*(m+n);

beta = k0*sqrt(1-alpha/k0/H);

None = n0*sqrt(1-alpha/k0/H);  #TE00模式的理论值

m = 0; n = 1;

alpha = 2+2*(m+n);

Ntwo = n0*sqrt(1-alpha/k0/H);  #TE01模式的理论值

m = 1; n = 1;

alpha = 2+2*(m+n);

Nthree = n0*sqrt(1-alpha/k0/H);  # TE11模式的理论值

mesh_cell = matrix(1,10);

#创建一个 1×10 的矩阵,用于存储不同的网格精度(每边的网格数)。

#以下循环生成 10 个网格精度值(从 20 开始,每次乘以√2):

mc=20;

for(i=1:length(mesh_cell)){

   mesh_cell(i)=round(mc);

   mc=mc*sqrt(2);

}

N1=matrix(1,length(mesh_cell)); 等三行

#创建存储数值计算得到的有效折射率的矩阵(N1 对应 TE00,N2 对应 TE01,N3 对应 TE11)。

#主循环:遍历不同网格精度,计算各模式的有效折射率:

for(ii = 1:length(mesh_cell)){

    switchtolayout;  % 切换到布局模式

    # 设置网格类型(共形或阶梯)

    if(conformal_mesh_on){

      setnamed("MODE","mesh refinement","conformal variant 1");

    } else {

      setnamed("MODE","mesh refinement","staircase");    

    }

    #设置x和y方向的网格数

    setnamed("MODE","mesh cells x",mesh_cell(ii));

    setnamed("MODE","mesh cells y",mesh_cell(ii));

    findmodes;  % 运行模式求解

   # 获取各模式的有效折射率(与理论模式最佳匹配的结果)

    N1(ii) = getdata(bestoverlap("TE00"),"neff");

    N2(ii) = getdata(bestoverlap("TE01"),"neff");

    N3(ii) = getdata(bestoverlap("TE11"),"neff");

#当网格数为 80 时,额外进行色散计算:

matlab

    if(mesh_cell(ii)==80){

        selectmode(3);  # 选择TE01模式

        setanalysis("detailed dispersion calculation", 0);  #禁用详细色散计算

        frequencysweep;  #运行频率扫描(计算不同波长下的特性)

    # 获取色散计算结果

        neff = getdata("frequencysweep", "neff");

        D2=getdata("frequencysweep","D");  #% 色散值

        f_neff=getdata("frequencysweep", "f");  #% 频率

        f_D=getdata("frequencysweep","f_D");  #% 色散对应的频率

        w_D=2*pi*f_D;  #% 角频率

        ##% 计算TE01模式的理论色散值D2th

        m = 0; n = 1;

        alpha = 2+2*(m+n);

        D2th=alpha^2/(8*pi*H^2*n0)*(w_D^2)*((w_D^2-alpha*c*w_D/H/n0)^(-3/2));        

    }

}

#计算相对误差(百分比):

p1 = 100*abs((N1-None)/None);  #% TE00模式的误差

p2 = 100*abs((N2-Ntwo)/Ntwo);  #% TE01模式的误差

p3 = 100*abs((N3-Nthree)/Nthree);  #% TE11模式的误差

D2err=abs(D2th-D2)*100/D2th; # % 色散误差

lam2=c/f_D*1e6;  #% 将频率转换为波长(微米)

#误差容限检查:

if(p2(7)>2e-4)  #% 检查TE01模式在160×160网格下的误差

   ?"ERROR: TE01 mode exceeded error tolerance...";

if(p3(7)>1e-3)  #检查TE11模式的误差

   ?"ERROR: TE11 mode exceeded error tolerance...";

if(max(D2err)>1)  #检查色散误差

   ?"ERROR: TE01 dispersion exceeded error tolerance...";

#根据 use_matlab 的值选择绘图方式:

#若 use_matlab=1:调用 Matlab 绘制三张图(网格精度与误差、色散随波长变化、色散误差随波长变化)。

#若 use_matlab=0:使用 Lumerical 自带的绘图功能生成相同的图,并导出为文件。

#最后一行:

plot((c/f_neff)/1e-6, real(neff), "wavelength (microns)","effective index","neff for TE01 from numerical calculation");

###绘制 TE01 模式的有效折射率随波长的变化曲线(横轴为波长,纵轴为有效折射率的实部)。

legend("n80 points perside");

#为最后一幅图添加图例,说明该曲线是基于 80 点 / 边的网格计算结果。

#总结:该脚本通过改变网格精度,分析渐变折射率光纤中不同模式的数值计算误差,并研究色散特性随波长的变化,最终通过绘图直观展示结果并验证计算精度是否满足要求。

http://www.xdnf.cn/news/19682.html

相关文章:

  • 嵌入式 - 硬件:51单片机
  • 实训云上搭建分布式Hadoop集群[2025] 实战笔记
  • 【llama.cpp】qwen2_vl_surgery.py详解
  • Web 开发 17
  • C++中的“平凡”之美:std::unique_ptr源码探秘
  • 【SpringBootWeb开发】《一篇带你入门Web后端开发》
  • 【数学建模学习笔记】样本均衡
  • (一)基础复习(委托)
  • Python-Flask企业网页平台深度Q网络DQN强化学习推荐系统设计与实现:结合用户行为动态优化推荐策略
  • 902作业
  • @Value注解底层原理(二)
  • Redis 的整数集合:像分类收纳盒一样的整数专属存储
  • Obsidian本地笔记工具:构建知识网络关联笔记,支持Markdown与插件生态及知识图谱生成
  • LoRA至今历程回顾(74)
  • 《水浒智慧》第二部 “英雄是怎么炼成的” (上篇)读书笔记
  • Linux文本处理工具
  • 机器算法(五)模型选择与调优
  • 基于SpringBoot的广科大在线图书管理系统设计与实现(代码+数据库+LW)
  • 探索JavaScript机器学习:几款流行的库推荐
  • Leetcode 3670. Maximum Product of Two Integers With No Common Bits
  • HTML第四课:个人简介页面开发
  • 下载速度爆表,全平台通用,免费拿走!
  • DaemonSet Job CronJob 概念理解
  • XML在线格式化 - 加菲工具
  • Leetcode二分查找(3)
  • 移动硬盘删除东西后,没有释放空间
  • 【机器学习入门】5.2 回归的起源——从身高遗传到线性模型的百年演变
  • 狄利克雷分布作用
  • CentOS 创建站点
  • 二进制流进行预览pdf、excel、docx