FLASH个人总结(2)——激光参数的解释与调整
1.前言
上次说到如何调节与靶有关的参数,在体系内添加了一个新的靶。这次接着修改LaserSlab这个算例,主要是解释一下激光方面的几个参数的含义以及如何达到我们想要的效果。
2.正文
这一次不用修改很多文件,只需要关注par文件即可,我们主要讲一下与激光有关的参数。进入一个par文件中,可以找到LASER PARAMETERS,所有参数基本都在这里了。
从上往下依次是:能量沉积选项、最大光束数量、梯度等级。往后的参数可以分类为:光线追踪、激光输出(指输出在文件中)、激光脉冲设置、光束设置。我们一个个来说。
2.1 首先是未分类的三个参数
2.1.1 useEnergyDeposition
顾名思义,这个选项是决定是否开启激光能量沉积的,开启之后,激光与物体作用时就会把能量传递给物体。这个一般应该都会打开吧,不然为什么要在体系里添加激光进来…
关于能量沉积的具体实现方法与算法,可以去阅读FLASH用户手册,这里不谈具体实现(因为太长太多了),只讲操作。
2.1.2 ed_maxRayCount
一个处理器中最多可以创建的光线数量,默认是10000,挺多的了
2.1.3 ed_gradOrder
(仅限AVG算法)用于计算一个单元格中电子数密度ne和电子温度Te的近似阶数(如下式)。值设置为1表示单元内的线性射线轨迹,设置为2时表示抛物线(二次)射线轨迹。前者不会计算梯度,只取单元格之间的平均值。
PS:这是翻译的手册里的原话
2.2 光线追踪算法
非常厉害的光线追踪,手册里用了大篇幅介绍这个功能,感兴趣的可以去看一看,简单来说就是会让光线路径的计算更加准确,可以得到帅气的光线反射(他们的封面图就有展示)。但是这个功能实在有点消耗性能,会增加计算时间。如果不在乎那么精确的反射光的话,可以试着关掉 (还能让计算速度大幅提高)。
需要注意的是,打开光线追踪选项后,计算过程就变成了三维的(尽管我们的模拟是二维的,光线追踪仍然会先在三维中计算,再投影到二维中去),这一点会影响到后面的坐标设置,我们后面会提到。
默认有两个参数
ed_laser3Din2D:没什么说的,就是开关,默认为true
ed_laser3Din2DwedgeAngle:楔形开口角 $\Omega$ 的大小,与上面提到的三维中的计算有关,不细说,挂一张手册里的图。
输出选项
指的是将激光写入到文件时会用到的几个参数,主要用于可视化。开启与关闭的参数就不说了。
ed_laserIOMaxNumberOfPositions:设置LaserIO缓冲区的大小,不是很了解干什么的,手册里提供了一个估算公式:5×NXB×NYB×NZB×ed_laserIOMaxNumberOfRays
ed_laserIOMaxNumberOfRays:写入到文件里的最大光线数量,没必要太多,否则可视化的时候巨卡。
激光脉冲设置
这一部分涉及激光的能量参数。
ed_numberOfPulses:激光的脉冲数
ed_time_A_B:脉冲的持续时间(单位为s)
ed_power_A_B:脉冲的功率(单位为W)
这个也好理解,其中A指第A个脉冲,与上面设置的脉冲数有关,B指不同的阶段。以默认值为例,给了一个脉冲和四个过程,很容易看出是一个方波,有上升沿和下降沿。
每个脉冲应该是不局限于4个时间段的,可以按需求任意划分。
激光光束设置
接下来是与光束有关的参数
ed_numberOfBeams:光束的数量
高斯光束的设置
前八个参数与高斯光束的方向和大小有关,这里有两个概念:透镜位置和靶位置。激光模块通过这样的方式确定光束的位置与方向:激光将以透镜处为起点,指向靶的位置。但透镜和靶的位置都通过向量来定义,因此,光束(Beam)的方向是:透镜向量(lens)的头部指向靶向量(target)的头部(即向量相减运算)
但是需要注意,前面提到过,当我们启用光线追踪时,计算过程变成了三维的,所以此时设置坐标时,用到的是X与Z坐标,又因为我们采用的是柱坐标系,所以这里的x方向是柱坐标的r方向,这里的z方向是柱坐标里的z方向。在与光线追踪有关的参数里,z方向指的是垂直于电脑屏幕的方向。
让我们看一看默认参数,发现这里的光束方向是斜向上45度的,在纸上画一下,就不难理解了。
/coordinates.png)
ed_lensSemiAxisMajor_1:透镜处的光斑大小(焦斑半径)
ed_targetSemiAxisMajor_1和ed_targetSemiAxisMinor_1:目标处的光斑大小,两个值相等时是圆形斑,否则是椭圆斑。它们都不能大于透镜处光斑大小(会报错)
ed_pulseNumber_1:将光束与1号脉冲相关联(我们这里就一个脉冲)
ed_wavelenth_1:1号脉冲的波长
ed_crossSectionFunctionType_1
ed_gaussianExponent_1
ed_gaussianRadiusMajor_1和ed_gaussianRadiusMinor_1:这四个参数定义高斯光束强度的空间变化,其中ed_crossSectionFunctionType_1默认为”gaussian2D”,此时是一个超高斯分布。
ed_numberOfRays_1:一根光束中的光线数量,应该不难理解,通过用很多根光线组成大光束,从而模拟高斯光束。默认为4096,其实是个很大的数,会很消耗性能。
ed_gridType_1和ed_gridnRadialTics_1:这两个参数用来决定光线如何在光束的横截面上分布,默认值为”radial2D”和”64”,意思是光线以一定的距离间隔和角度间隔分布在圆形截面上,有64个径向切片,4096/64=64个角度切片。
ed_semiAxisMajorTorsionAngle_1和ed_semiAxisMajorTorsionAxis_1:只有光束不是圆形的时候才需要修改,我也不是很了解是干嘛的,暂时不管。
3.注意事项
刚才提到,可以尝试关掉光线追踪,只需要把ed_laser3Din2D设置为false,但关闭后,计算过程将不再是三维的,而是回到了二维,此时有几个需要注意的地方:
- 定义透镜和靶位置时,Z方向不再起作用,此时把Z方向换为Y方向即可,即y方向对应于柱坐标中的z方向。
- ed_crossSectionFunctionType_1如果还保持”gaussian2D”将会报错,根据报错提示,可以修改为”gaussian1D”。
- ed_gridType_1也会有同样的问题,根据报错提示,可以修改为”regular1D”。
4.激光可视化
在运行得到的文件中,我们并找不到有关可以显示激光的选项,因为激光的可视化需要VTK文件,如果得到VTK文件,手册里也有提到。
回到FLASH的根目录下,进入tools/script中,就可以找到extract_rays.py这个python脚本,把它复制到我们跑出来的文件所在的地方,运行1
python extract_rays lasslab_hdf5_plt_*
即可自动识别含有激光的文件并提取出VTK文件,然后就可以拿到VisIt等软件中愉快的进行可视化了(可能缺少对应的库,装上就是了)
5.结语
暂时就想到这么多,先写到这里。我们简单介绍了激光模块的参数,为修改提供了一个简要的参考。