程序中所采用的是归一化的相对单位,即:
- 电荷单位:
e
- 速度单位:
c
- 质量单位:
m_e
根据上面的归一化可以导出:
- 能量单位:
{m_e}c^2
- 动量单位:
{m_e}c
上面所做的归一化等价于令所有公式中的e = c = m_e = 1
.
如果选取一个参考频率ω
,还可以做如下的归一化:
- 时间单位:
1/ω
- 长度单位:
c/ω
- 电场强度单位:
{m_e}cω/e
- 磁感应强度单位:
{m_e}ω/e
- 电流密度单位:
{m_e}ω^2/{μ_0}ce
- 电流强度单位:
{m_e}c/{μ_0}e
注意这个ω
是可以自由选取的,你可以将模拟结果解释到任意尺度。对于激光这个参考频率可以选择为激光的ω
,这样就相当于令ω = k = 1
,不过要注意这种解释下波长为2π
,激光周期也为2π
.
这种归一化好处是可以减少公式的计算量,并且不用考虑SI单位制与高斯单位制的区别。
- 安装autotools工具(autoconf、automake、autoconf-archive等)
- 编译并安装HDF5
- 将本仓库下载或克隆到本地
git clone https://github.com/touuki/sovol
- 进入项目文件夹中运行下列命令生成Makefile
aclocal
autoconf
automake --add-missing
./configure
- 运行
make
命令进行编译 - 使用编译生成的可执行文件进行模拟
./sovol-cli <your-input.lua> <parameters-to-lua>...
TODO
当使用到辐射相关Algorithm时需要。
total_particle_number
(Integer; >0; default: 1)
模拟粒子总数time_step
(Float; >0)
时间步长data_start_time
(Float; >=0; default: 0)
开始输出数据时刻data_end_time
(Float; >0)
结束时刻data_interval
(Integer)
每隔多少个时间步长输出一次数据。如果值小于等于0,则只输出data_start_time
及data_end_time
两个时刻的数据parallel_workers
(Integer; >0; default: 1; only for CLI)
并行模拟线程数table_dirname
(String; only for CLI)
数值表所在目录output_filename
(String; default result-p${pid}.h5; only for CLI)
数据储存H5文件名output_items
(String Array; default: all available items; only for CLI)
需要储存的数据项,可用项有:x, y, z, px, py, pz, sx, sy, sz, Ex, Ey, Ez, Bx, By, Bz, optical_depthdata_per_frame
(Integer; >0; only for WASM)
多少个数据刷新一帧frames_per_second
(Integer; >0; only for WASM)
每秒多少帧
name
(String)
Field类名,见可用类-Field- 其他类属性
particle
(Particle)
基础粒子type
(Integer; 0 or 1; default: 0)
0为普通粒子;1为电子,可处理辐射、自旋等mass
(Float; >0; only fortype==0
)
粒子质量charge
(Float; only fortype==0
)
粒子电量position
(Float Array[3]; default: [0,0,0])
粒子位置momentum
(Float Array[3]; default: [0,0,0])
粒子动量polarization
(Float Array[3]; length<=1; default: [0,0,0])
粒子极化度
shifters
(ParticleShifter Array)
粒子变换器,按顺序依次作用在基础粒子上name
(String)
ParticleShifter类名,见可用类-ParticleShifter- 其他类属性
name
(String)
Algorithm类名,见可用类-Algorithm- 其他类属性
自定义函数的电磁场
CLI版本:
global_function_name
(String)
自定义电磁场的Lua全局函数名。其接收参数为x, y, z, t,返回值结构为{E={Ex,Ey,Ez},B={Bx,By,Bz}}
WASM版本:
func
(Function)
自定义电磁场函数。其接收参数为x, y, z, t,返回值结构为{E:[Ex,Ey,Ez],B:[Bx,By,Bz]}
拉盖尔高斯型激光脉冲的电磁场,激光轴线为z轴,沿z轴正向传播,腰为z=0
平面
a0
(Float; >0)
激光强度归一化参数。对于具有相同a0、w0和tau的不同模式及偏振的激光,它们具有相同的能量,对于基态(l=0
,p=0
)线偏振(polar=0 or ±1
)模式这代表着腰处的矢势强度tau
(Float; >0)
激光脉冲长度。激光能量的时域半高全宽,时域为sech型包络w0
(Float; >0)
激光腰半径。对于基态模式(l=0
,p=0
)激光在腰半径处的场强降为中心处的1/epolar
(Float; abs<=1; default: 0)
激光偏振模式。0为电场沿x轴方向的线偏振,±1为电场沿y轴方向的线偏振,√2/2为右旋圆偏振(面向激光观察),-√2/2为左旋圆偏振delay
(Float; default: 0)
激光脉冲延迟。为0则当模拟开始时(t=0
)激光脉冲的时域中心(峰值)位于激光的腰上(z=0
),<0则在模拟开始时处于发散状态(z>0
),>0在模拟开始时处于汇聚状态(z<0
)p
(Integer; >=0; default: 0)
拉盖尔高斯模式径向系数。具体参见维基词条Gaussian beaml
(Integer; default: 0)
拉盖尔高斯模式周向系数。具体参见维基词条Gaussian beamiphase
(Float; default: 0)
模拟开始时刻(t=0
)的激光相位,主要用以调解少周期激光的载波包络相位。为0时对应模拟开始时刻腰处(z=0
)的相位为Eyk
(Float; >0; default: 1)
激光波数。为1时对应激光波长及周期为2πh
(Float; >0; default: 0.1)
高阶模式(p>0
)用以计算纵向电磁场的差分步长,以激光波长为单位
在某一Field类上施加变换从而获得新的电磁场
field
(Field)
基础电磁场name
(String)
Field类名,见可用类-Field- 其他类属性
shifters
(FieldShifter Array)
电磁场变换器,按顺序依次作用在基础电磁场上name
(String)
FieldShifter类名,见可用类-FieldShifter- 其他类属性
将多个Field类结合
fields
(Field Array)
基础电磁场name
(String)
Field类名,见可用类-Field- 其他类属性
将电磁场进行平移操作
displacement
(Float Array[3])
位移量
将电磁场绕某一点旋转
center
(Float Array[3]; default: [0,0,0])
旋转中心rotator
(Rotator)
旋转器name
(String)
Rotator类名,见可用类-Rotator- 其他类属性
自定义粒子变换器
CLI版本:
global_function_name
(String)
自定义粒子变换器的Lua全局函数名。其接收参数为一个包含属性type
,mass
,charge
,position
,momentum
及polarization
的粒子结构,返回值结构需包含变换后的position
,momentum
及polarization
属性
WASM版本:
func
(Function)
自定义粒子变换器函数。其接收参数为一个包含属性type
,mass
,charge
,position
,momentum
,polarization
的粒子结构,返回值结构需包含变换后的position
,momentum
及polarization
属性
将粒子进行平移
displacement
(Float Array[3])
位移量
将粒子绕某一点旋转
center
(Float Array[3]; default: [0,0,0])
旋转中心rotator
(Rotator)
旋转器name
(String)
Rotator类名,见可用类-Rotator- 其他类属性
affect_position
(Boolean; default: true)
是否应用于粒子位置affect_momentum
(Boolean; default: true)
是否应用于粒子动量affect_polarization
(Boolean; default: true)
是否应用于粒子极化
内在旋转旋转器。依次进行yaw、pitch及roll旋转操作
alpha
(Float; default: 0)
yaw旋转角度beta
(Float; default: 0)
pitch旋转角度gamma
(Float; default: 0)
roll旋转角度
外在旋转旋转器。依次绕x轴、y轴和z轴进行旋转
alpha
(Float; default: 0)
绕x轴旋转角度beta
(Float; default: 0)
绕y轴旋转角度gamma
(Float; default: 0)
绕z轴旋转角度
对粒子无效果,可用于诊断电磁场等
RK4算法,只适用于普通带电粒子在电磁场中的运动过程,无法处理电子自旋进动等
蛙跳算法,可处理电子经典自旋演化效应
修正了反常磁矩的蛙跳算法,通过数值表对不同电子参量下的反常磁矩进行了修正,需要设置全局reference_frequency
蒙特卡罗辐射极化算法,通过蒙特卡罗方法辐射光子,并且计算辐射对电子的反作用以及极化度影响,需要设置全局reference_frequency
base_algorithm
(Algorithm)
基础算法,用以处理粒子基础运动过程name
(String)
Algorithm类名,见可用类-Algorithm- 其他类属性
min_chi_e
(Float; >=0; default: 0)
产生效应的最低电子参量,若低于此值则直接跳过算法disable_reaction
(Boolean; default: false)
是否禁用辐射对电子动量反作用disable_spin_effect
(Boolean; default: false)
是否禁止辐射对电子自旋极化产生影响
连续辐射极化算法,通过半经典的考虑辐射对电子的累积效应,计算辐射对电子的反作用以及极化度影响,需要设置全局reference_frequency
base_algorithm
(Algorithm)
基础算法,用以处理粒子基础运动过程name
(String)
Algorithm类名,见可用类-Algorithm- 其他类属性
min_chi_e
(Float; >=0; default: 0)
产生效应的最低电子参量,若低于此值则直接跳过算法disable_reaction
(Boolean; default: false)
是否禁用辐射对电子动量反作用disable_spin_effect
(Boolean; default: false)
是否禁止辐射对电子自旋极化产生影响