MoM_Kernels.VSC₃ⁿConstant

这一项面、体奇异性都用到了,处理对格林函数梯度求积时的奇异性时用到的。

MoM_Kernels.CubeInfoType
CubeInfo{IT<:Integer, FT<:Real}

盒子信息,包括:

kidsInterval    ::UnitRange{IT}     子层盒子id的区间
bfInterval      ::UnitRange{IT}     包含的基函数区间
kidsIn8         ::Vector{IT}        非空子盒子在8个子盒子中的id
geoIDs          ::Vector{IT}        包含的网格如三角形、四面体的id,以基函数进行分,因此边界上的同一个网格可能被分到不同的盒子内。
neighbors       ::Vector{IT}        邻盒子id
farneighbors    ::Vector{IT}        远亲盒子的id
ID3D            ::MVec3D{IT}        本盒子在本层的三维整数坐标
center          ::MVec3D{FT}        本盒子在本层的三维全局坐标
MoM_Kernels.GLPolesInfoType

多极子的极信息,即角谱空间采样信息 Xθs::Vector{FT},θ方向的采样点坐标(rad单位),高斯-勒让德求积 Xϕs::Vector{FT},ϕ方向的采样点坐标(rad单位),均值求积 Wθϕs::Vector{FT},采样点权重,用于积分时使用,在MLFMA中直接乘在转移项

MoM_Kernels.LagrangeInterp1StepInfoType

保存总的 稀疏插值矩阵,用于单步插值,根据稀疏度决定保存稀疏阵或是稠密阵 θϕCSC ::AbstractMatrix{FT} 稀疏矩阵, θ 方向插值矩阵的转置,用于左乘本层多极子矩阵,在 θ 方向反插值 θϕCSCT ::AbstractMatrix{FT} 稀疏矩阵, ϕ 方向插值矩阵的转置,用于左乘本层多极子矩阵,在 ϕ 方向反插值

MoM_Kernels.LagrangeInterpInfoType

保存 θ, ϕ 两个方向的稀疏插值矩阵, θ方向为 (npXθs, ntXθs) 稀疏矩阵, 用于左乘本层多极子矩阵,在 θ 方向插值 ϕ方向为 (ntXϕs, ntXϕs) 稀疏矩阵, 用于右乘本层多极子矩阵,在 ϕ 方向插值 θCSCT ::SparseMatrixCSC{FT} 稀疏矩阵, θ 方向插值矩阵的转置,用于左乘本层多极子矩阵,在 θ 方向反插值 ϕCSCT ::SparseMatrixCSC{FT} 稀疏矩阵, ϕ 方向插值矩阵的转置,用于左乘本层多极子矩阵,在 ϕ 方向反插值

MoM_Kernels.LevelInfoType
LevelInfo{IT<:Integer, FT<:Real, IPT} <: AbstractLevel

层信息:

ID          ::IT                        层序号
isleaf      ::Bool                      是否为叶层
L           ::IT                        本层截断项数
cubes       ::Vector{CubeInfo{IT, FT}}  包含每一个盒子信息的向量
cubeEdgel   ::FT                        本层盒子的边长
poles       ::PolesInfo{IT, FT}         多极子采样信息
interpWθϕ   ::InterpInfo{IT, FT}        插值信息
aggS        ::Array{Complex{FT}, 3}     聚合项
disaggG     ::Array{Complex{FT}, 3}     解聚项
phaseShift2Kids  ::Array{Complex{FT}, 3}本层盒子到子层盒子的相移因子 
αTrans      ::Array{Complex{FT}, 3}     本层盒子远亲组之间的转移因子,根据相对位置共有 7^3 - 3^3 = 316 个
αTransIndex ::Array{IT, 2}              远亲盒子的相对位置到其转移因子在所有转移因子数组的索引
MoM_Kernels.MatrixChunkType
MatrixChunk{T<:Number} <:AbstractMatrix{T}

创建近场矩阵块结构体,所包含的数据为某一盒子内的近场矩阵元。

m::Int                          行数
n::Int                          列数
mat::Matrix{T}                  矩阵
rowIndices::AbstractVector{Int} 行索引
colIndices::AbstractVector{Int} 列索引
lmul::AbstractVector{T}         用于左乘其它矩阵、向量的临时数组,大小与列数相同
rmul::AbstractVector{T}         用于右乘其它矩阵、向量的临时数组,大小与行数相同
MoM_Kernels.MatrixChunkMethod
MatrixChunk{T}(rowIndices, colIndices) where {T<:Number}

用行、列索引 rowIndices, colIndices 初始化矩阵块。

MoM_Kernels.OctreeInfoType

八叉树类 nLevels ::Integer, 叶层ID(定义大盒子为(“0” 层),叶层为第“n”层,nLevels取“n”的值) leafCubeEdgel::FT,叶层盒子边长 bigCubeLowerCoor::MVec3D{FT},第0层盒子的角坐标 levels ::Dict{Int, LevelInfo},保存各层信息的字典

MoM_Kernels.PartitionedVectorType
PartitionedVector{T} <: AbstractVector{T}

用于保存向量块的类,同时在块内保存一些其他块的数据。

size::Int                           原始 Vector 的大小
data::OffsetVector{T, Vector{T}}    本地保存的数据
indices::UnitRange{Int}             本地保存数据的索引区间
ghostdata::SparseVector{T, Int}     用到的其它数据
ghostindices::Vector{Int}           用到的其它数据的索引区间
MoM_Kernels.SAIPrecType
SAIPrec{T} <: AbstractMatrix{T}

封装系数近似逆矩阵的类型。

MoM_Kernels.ZnearChunksStructType

创建近场矩阵结构体,所包含的数据为所有盒子内的近场矩阵元,多线程版本

m::Int,行数
n::Int,列数
nChunks::Int,矩阵块儿数
chunks::Vector{ZnearChunksStruct{T}},矩阵
lmul::Vector{T},用于左乘其它矩阵、向量的临时数组,大小与列数相同
lmuld::Vector{T},用于左乘其它矩阵、向量的临时分布式数组,大小与列数相同,默认不分配
rmul::Vector{T},用于右乘其它矩阵、向量的临时数组,大小与行数相同
lmuld::Vector{T},用于左乘其它矩阵、向量的临时分布式数组,大小与列数相同,默认不分配
Base.:*Method
*(mat::AbstractMatrix, Z::T) where{T<:MatrixChunk}

实现右乘其它矩阵,默认矩阵块较小,不在本阶段并行。

Base.:*Method
*(x::AbstractVector, Z::T) where{T<:MatrixChunk}

实现矩阵块 Z 右乘其它向量,默认矩阵块较小,不在本阶段并行。

Base.:*Method

实现左乘其它矩阵

Base.:*Method
*(Z::T, mat::AbstractMatrix) where{T<:MatrixChunk}

实现矩阵块 Z 左乘其它矩阵,默认矩阵块较小,不在本阶段并行。

Base.:*Method
Base.:*(Z::T, x::AbstractVector) where{T<:MatrixChunk}

实现左乘其它向量,默认矩阵块较小,因此不在本阶段并行

Base.:*Method

实现左乘其它向量

Base.eltypeMethod
eltype(opt::ILUFactorization)

提供 ilu 的算子 eltype 函数。

Base.getindexMethod
Base.getindex(A::PartitionedVector, i::I) where {I<:Integer}

重载 PartitionedVector 类型的 getindex 函数。

Base.getindexMethod
getindex(Z::T, i1::Int, i2::Int) where{T<:MatrixChunk}

重载 getindex 函数。

Base.setindex!Method
setindex!(Z::T, x, i1::Int, i2::Int) where{T<:MatrixChunk}

重载 setindex! 函数

Base.sizeMethod
size(operator::T) where {T<:ILUFactorization}

提供 ilu 的算子 size 函数。

LinearAlgebra.ldiv!Method
ldiv!(M::SAIChunkPrec{T}, x::AbstractVector) where {T}
ldiv!(y::AbstractVector, M::SAIChunkPrec{T}, x::AbstractVector) where {T}

实现 x .= M * xy .= M * x

LinearAlgebra.ldiv!Method
ldiv!(M::SAIPrec{T}, x::AbstractVector) where {T}
ldiv!(y::AbstractVector, M::SAIPrec{T}, x::AbstractVector) where {T}

实现 x .= M * xy .= M * x

LinearAlgebra.mul!Method
LinearAlgebra.mul!(y, Zopt::MLMFAIterator, x)

重载以实现矩阵向量乘积计算

TBW

LinearAlgebra.mul!Method
LinearAlgebra.mul!(y, Zopt::MLMFAIterator, x)

重载以实现矩阵向量乘积计算

TBW

LinearAlgebra.mul!Method
mul!(y, Z::T, x::AbstractVector) where{T<:MatrixChunk}

实现矩阵块 Z 的矩阵向量乘积计算。

LinearAlgebra.mul!Method
LinearAlgebra.mul!(y, Zopt::MLMFAIterator, x)

重载以实现矩阵向量乘积计算

TBW

LinearAlgebra.mul!Method
LinearAlgebra.mul!(y, Zopt::MLMFAIterator, x)

重载以实现矩阵向量乘积计算

TBW

MoM_Kernels.CFIEOnNearTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合但相隔较近的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.CFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合且相隔较远的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.CFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形重合的情况,因此输入只有一个三角形信息类型实例 输入 tri : TriangleInfo

MoM_Kernels.EFIEOnHexaPWCMethod

采用 PWC 基函数 计算六面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体重合的情况,因此输入有一个六面体信息类型实例 输入: hexat HexahedraInfo, 场六面体和六面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为与两两作用不同,此处加上了 κ 项,因此后续填充时不需加上。

MoM_Kernels.EFIEOnHexaPWCSepPVMethod

采用 PWC 基函数 计算六面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体重合的情况,因此输入有一个六面体信息类型实例 输入: hexat HexahedraInfo, 场六面体和六面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为与两两作用不同,此处加上了 κ 项,因此后续填充时不需加上。

MoM_Kernels.EFIEOnHexaRBFMethod

计算六面体上相关的 36 个阻抗矩阵元, 此函数方法用于计算场源六面体重合的情况,因此输入有一个六面体信息类型实例 输入 hexat : HexahedraInfo, 场六面体和源六面体

MoM_Kernels.EFIEOnHexaTetraPWCMethod

采用 PWC 基函数 计算六面体和四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况,因此输入有两个六面体信息类型实例 输入: hexat::HexahedraInfo, 场六面体 tetras::TetrahedraInfo 源四面体 计算: jk₀η₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnHexaTetraPWCMethod

采用 PWC 基函数 计算六面体和四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况,因此输入有两个六面体信息类型实例 输入: tetrat::TetrahedraInfo 场四面体 hexas::HexahedraInfo, 源六面体 计算: jk₀η₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnHexasPWCMethod

采用 PWC 基函数 计算六面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况,因此输入有两个六面体信息类型实例 输入: hexat hexas : HexahedraInfo, 场六面体和六面体 计算: jk₀η₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnHexasRBFMethod

计算六面体上相关的 36 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况,因此输入有两个六面体信息类型实例 输入 hexat, hexas : HexahedraInfo, 场六面体和源六面体

MoM_Kernels.EFIEOnNearHexaTetraPWCMethod

采用 PWC 基函数 计算六面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较近的情况,因此输入有两个六面体信息类型实例 输入: hexat hexas : HexahedraInfo, 场六面体和六面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnNearHexaTetraPWCMethod

采用 PWC 基函数 计算六面体和四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况,因此输入有两个六面体信息类型实例 输入: tetrat::TetrahedraInfo 场四面体 hexas::HexahedraInfo, 源六面体 计算: jk₀η₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnNearHexasPWCMethod

采用 PWC 基函数 计算六面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较近的情况,因此输入有两个六面体信息类型实例 输入: hexat hexas : HexahedraInfo, 场六面体和六面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnNearHexasRBFMethod

计算六面体上相关的 36 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合但相隔较近的情况,输入有两个六面体信息类型实例 输入 hexat, hexas : HexahedraInfo, 场六面体和源六面体

MoM_Kernels.EFIEOnNearRWGPWCMethod

计算三角形和六面体上相关的 9 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较近的情况 输入 trit :: TriangleInfo, 场三角形面体 geos :: HexahedraInfo, 源六面体

MoM_Kernels.EFIEOnNearRWGPWCMethod

计算三角形和四面体上相关的 9 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较近的情况 输入 trit :: TriangleInfo, 场三角形面体 geos :: TetrahedraInfo, TetrahedraInfo, 源四面体、四面体

MoM_Kernels.EFIEOnNearRWGPWCMethod

计算三角形和六面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 geot :: HexahedraInfo, 场六面体

MoM_Kernels.EFIEOnNearRWGPWCMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 geot :: TetrahedraInfo, TetrahedraInfo, 场四面体、四面体

MoM_Kernels.EFIEOnNearRWGRBFMethod

计算三角形和六面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 hexat :: HexahedraInfo, 场六面体

MoM_Kernels.EFIEOnNearRWGRBFMethod

计算三角形和六面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较近的情况 输入 tris :: TriangleInfo, 源三角形面体 hexat :: HexahedraInfo, 场六面体

MoM_Kernels.EFIEOnNearRWGSWGMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 tetrat :: TetrahedraInfo, 场四面体

MoM_Kernels.EFIEOnNearRWGSWGMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较近的情况 输入 tris :: TriangleInfo, 源三角形面体 tetrat :: TetrahedraInfo, 场四面体

MoM_Kernels.EFIEOnNearTetrasPWCMethod

采用 PWC 基函数 计算四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较近的情况,因此输入有两个四面体信息类型实例 输入: tetrat tetras : TetrahedraInfo, 场四面体和四面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnNearTetrasSWGMethod

计算四面体上相关的 16 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合但相隔较近的情况,输入有两个四面体信息类型实例 输入 tetrat, tetras : TetrahedraInfo, 场四面体和源四面体

MoM_Kernels.EFIEOnNearTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合但相隔较近的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.EFIEOnRWGPWCMethod

计算三角形和六面体上相关的 9 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 trit :: TriangleInfo, 场三角形面体 geos :: HexahedraInfo, 源六面体

MoM_Kernels.EFIEOnRWGPWCMethod

计算三角形和四面体上相关的 9 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 trit :: TriangleInfo, 场三角形面体 geos :: TetrahedraInfo, 源四面体

MoM_Kernels.EFIEOnRWGPWCMethod

计算三角形和六面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 geot :: HexahedraInfo, 场六面体

MoM_Kernels.EFIEOnRWGPWCMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 geot :: TetrahedraInfo, TetrahedraInfo, 场四面体、四面体

MoM_Kernels.EFIEOnRWGRBFMethod

计算三角形和六面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 hexat :: HexahedraInfo, 场六面体

MoM_Kernels.EFIEOnRWGRBFMethod

计算三角形和六面体上相关的 18 个阻抗矩阵元, 此函数方法用于计算场源六面体不重合且相隔较远的情况 输入 trit :: TriangleInfo, 场三角形面体 hexas :: HexahedraInfo, 源六面体

MoM_Kernels.EFIEOnRWGSWGMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 tetrat :: TetrahedraInfo, 场四面体

MoM_Kernels.EFIEOnRWGSWGMethod

计算三角形和四面体上相关的 12 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况 输入 tris :: TriangleInfo, 源三角形面体 tetrat :: TetrahedraInfo, 场四面体

MoM_Kernels.EFIEOnTetraPWCMethod

采用 PWC 基函数 计算四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源四面体重合的情况,因此输入有一个四面体信息类型实例 输入: tetrat TetrahedraInfo, 场四面体和四面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为与两两作用不同,此处加上了 κ 项,因此后续填充时不需加上。

MoM_Kernels.EFIEOnTetraPWCSepPVMethod

采用 PWC 基函数 计算四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源四面体重合的情况,因此输入有一个四面体信息类型实例 输入: tetrat TetrahedraInfo, 场四面体和四面体 计算: jkη₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 其中, ∫ₜ∫ₛ∇∇G(R)dV′dV = ∫ₜ∑ᵢn̂ᵢ(∫ᵢR̂(jk + 1/R)G(R)dS′)dV 计算得到结果为并矢:: jη₀/k ∫∫ (k²I + ∇∇)G(R) dV'dV Kᵣⁿ = ∫ Rⁿ dV' K̂ᵣⁿ = ∫ R̂Rⁿ dV' 注意为与两两作用不同,函数将主值积分分开返回以便它用

MoM_Kernels.EFIEOnTetraSWGMethod

计算四面体上相关的 16 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况,因此输入有两个四面体信息类型实例 输入 tetrat, tetras : TetrahedraInfo, 场四面体和源四面体

MoM_Kernels.EFIEOnTetrasPWCMethod

采用 PWC 基函数 计算四面体上相关的9个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况,因此输入有两个四面体信息类型实例 输入: tetrat tetras : TetrahedraInfo, 场四面体和四面体 计算: jk₀η₀∫ₜ∫ₛ(I + 1/k²∇∇)G(R)dV′dV 注意为方便对称性快速填充矩阵元,没有加入 κ 项,因此后续填充时要注意加上。

MoM_Kernels.EFIEOnTetrasSWGMethod

计算四面体上相关的 16 个阻抗矩阵元, 此函数方法用于计算场源四面体不重合且相隔较远的情况,因此输入有两个四面体信息类型实例 输入 tetrat, tetras : TetrahedraInfo, 场四面体和源四面体

MoM_Kernels.EFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合且相隔较远的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.EFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形重合的情况,因此输入只有一个三角形信息类型实例 输入 tri : TriangleInfo

MoM_Kernels.MFIEOnNearTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合但相隔较近的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.MFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形不重合且相隔较远的情况,因此输入有两个个三角形信息类型实例 输入 trit, tris : TriangleInfo, 场三角形和源三角形

MoM_Kernels.MFIEOnTrisMethod

计算三角形上相关9个阻抗矩阵元, 此函数方法用于计算场源三角形重合的情况,因此输入只有一个三角形信息类型实例 输入 tri : TriangleInfo

MoM_Kernels.aggSBFOnLevel!Method
aggSBFOnLevel!(aggSBF, disaggSBF, level, hexasInfo::AbstractVector{HexahedraInfo{IT, FT, CT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, CT<:Complex{FT}, BFT<:PWC}

计算某层采用 EFIE 时在六面体上的 PWC 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevel!Method
aggSBFOnLevel!(aggSBF, disaggSBF, level, tetrasInfo::AbstractVector{TetrahedraInfo{IT, FT, CT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, CT<:Complex{FT}, BFT<:PWC}

计算某层采用 EFIE 时在四面体上的 PWC 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevel!Method
aggSBFOnLevel!(aggSBF, disaggSBF, level, tetrasInfo::AbstractVector{TetrahedraInfo{IT, FT, CT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, CT<:Complex{FT}, BFT<:SWG}

计算某层采用 EFIE 时 SWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevel!Method
aggSBFOnLevel!(aggSBF, disaggSBF, level, hexasInfo::AbstractVector{VT}, 
::Type{BFT}; setzero = true) where {VT<:HexahedraInfo, BFT<:RBF}

计算某层采用 EFIE 时在六面体上的 RBF 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevelMethod
aggSBFOnLevel(level::LT, geosInfo::AbstractVector{VT}, 
bfsInfo::AbstractVector{BFT}) where {LT<:LevelInfo, VT<:VolumeCellType, BFT<:BasisFunctionType}

计算某层采用 EFIE 时 SWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevelCFIE!Method
aggSBFOnLevelCFIE!(aggSBF, disaggSBF, level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, BFT<:RWG}

计算某层采用 CFIE 时 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevelCFIEMethod
aggSBFOnLevelCFIE(level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
bfsInfo) where {IT<:Integer, FT<:Real}

计算某层采用 CFIE 时 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF , 输入为层信息 level 、三角形信息 trianglesInfo 和基函数信息 bfsInfo

MoM_Kernels.aggSBFOnLevelEFIE!Method
aggSBFOnLevelEFIE!(aggSBF, disaggSBF, level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, BFT<:RWG}

计算某层采用 EFIE 时 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevelEFIEMethod
aggSBFOnLevelEFIE(level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
bfsInfo) where {IT<:Integer, FT<:Real}

计算某层采用 EFIE 时 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF , 输入为层信息 level 、三角形信息 trianglesInfo 和基函数信息 bfsInfo

MoM_Kernels.aggSBFOnLevelMFIE!Method
aggSBFOnLevelMFIE!(aggSBF, disaggSBF, level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
::Type{BFT}; setzero = true) where {IT<:Integer, FT<:Real, BFT<:RWG}

计算某层采用 MFIE 时在三角形上的 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.aggSBFOnLevelMFIEMethod
aggSBFOnLevelMFIE(level, trianglesInfo::Vector{TriangleInfo{IT, FT}}, 
bfsInfo::Vector{RWG{IT, FT}}) where {IT<:Integer, FT<:Real}

计算某层采用 MFIE 时在三角形上的 RWG 基函数的辐射函数 aggSBF 、配置函数 disaggSBF

MoM_Kernels.calZnearCSC!Method
calZnearCSC!(level, geosInfo::AbstractVector{VSCellT}, 
    Znear, bfT::Type{BFT} = VSBFTypes.sbfType) where {BFT<:BasisFunctionType, VSCellT<:SurfaceCellType}
calZnearCSC!(level, geosInfo::AbstractVector{VSCellT}, 
    Znear, bfT::Type{BFT} = VSBFTypes.vbfType) where {BFT<:BasisFunctionType, VSCellT<:VolumeCellType}
calZnearCSC!(level, geosInfo::AbstractVector{VT}, 
    Znear) where {VT<:AbstractVector}

根据八叉树层信息 level 和几何信息 geosInfo 、基函数信息 bfsInfo 计算近场阻抗矩阵。

MoM_Kernels.calZnearCSCMethod
calZnearCSC(level, geosInfo::Vector, bfsInfo::Vector)

根据八叉树层信息 level 和几何信息 geosInfo 、基函数信息 bfsInfo 计算近场阻抗矩阵。

MoM_Kernels.calZnearCSCCFIE!Method
calZnearCSCCFIE!(level, trianglesInfo::Vector{TriangleInfo{IT, FT}},
    Znear::ZnearT{CT}, ::Type{BFT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}, BFT<:RWG}

采用 RWG 基函数计算 CFIE 面积分(SIE)阻抗矩阵近场元并将结果放在 ZnearCSC 稀疏矩阵中。

MoM_Kernels.calZnearCSCEFIE!Method

采用 PWC 基函数计算六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 RBF 基函数计算六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 PWC 基函数计算四面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 SWG 基函数计算网格元 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 RWG + RBF 基函数计算六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 RWG + SWG 基函数计算 三角形 + 四面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 RWG 基函数计算 EFIE 面积分(SIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 PWC + PWC 基函数计算 四面体 + 六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIE!Method

采用 RWG + PWC 基函数计算 三角形 + 四面体/六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCEFIEnew!Method

采用 RBF 基函数计算六面体 EFIE 的体积分(VIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calZnearCSCMFIE!Method

采用 RWG 基函数计算 MFIE 面积分(SIE)阻抗矩阵近场元并将结果放在ZnearCSC稀疏矩阵中

MoM_Kernels.calαTransOnLevel!Method

计算 level 层的转移因子, 转移因子只存在于远亲组,每层远亲组最多有 7^3 - 3^3 = 316种结果

MoM_Kernels.coeffgreenMethod
coeffgreen(n::Integer)

归一化格林函数 (不包括$\frac{1}{4π}$项) 的展开系数函数,从 0 阶 到 n 阶:

\[\begin{aligned} g(R) &= \frac{e^{-jkR}}{R} = \sum_{n=0}^{SglrOrder}coeffgreen(n)R^{n-1}\\ coeffgreen(n) &= \frac{{-jk}^{n}}{n!}\\ \end{aligned}\]

MoM_Kernels.electricJCalMethod

计算给定三角形面片位置 r 处的电流 电流基函数公式为:Jₙ = Iₙfₙ 同一个三角形面片上存在三个基函数,因此 Jₜ = ∑ₜₙ₌₁³ Iₜₙfₜₙ 输入: r ::Vec3D{FT} ICoeff ::Vec3D{CT} 三角形上的三个基函数的计算得到的电流系数 triangleInfo ::TriangleInfo{IT, FT},三角形信息 输出值: Jtrir ::Complex{FT}, 三角形上加权后的电流

MoM_Kernels.electricJCalMethod

计算所有三角形上的高斯求积点电流权重乘积 JₙᵢWᵢ 电流基函数公式为:Jₙ = Iₙfₙ 同一个三角形面片上存在三个基函数,因此 JₙᵢWᵢ = ∑ₜₙ₌₁³ Iₜₙlₜₙ/2Sₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 trianglesInfo ::Vector{TriangleInfo{IT, FT}},三角形信息 输出值: Jtri ::Marrix{Complex{FT}}, 三角形上加权后的电流

MoM_Kernels.excitationVectorCFIE!Method

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.excitationVectorCFIEMethod

计算平面波在给定三角形的三个 半RWG 基函数上的激励向量 输入: source ::ST, 波源 tri ::TriangleInfo{IT, FT},三角形信息

MoM_Kernels.excitationVectorCFIEMethod

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.excitationVectorEFIE!Method

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}},保存四面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorEFIE!Method

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 hexasInfo ::Vector{HexahedraInfo{IT, FT, CT}},保存六面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorEFIE!Method

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.excitationVectorEFIE!Method

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}},保存六面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在给定四面体的三个 PWC 基函数上的激励向量 输入: source ::ST, 波源 hexa ::HexahedraInfo{IT, FT, CT},六面体信息

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在给定六面体的六个 半SWG 基函数上的激励向量 输入: source ::ST, 波源 hexa ::HexahedraInfo{IT, FT, CT},六面体信息

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在给定四面体的三个 PWC 基函数上的激励向量 输入: source ::ST, 波源 tetra ::TetrahedraInfo{IT, FT, CT},四面体信息

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在给定四面体的四个 半SWG 基函数上的激励向量 输入: source ::ST, 波源 tetra ::TetrahedraInfo{IT, FT, CT},四面体信息

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在给定三角形的三个 半RWG 基函数上的激励向量 输入: source ::ST, 波源 tri ::TriangleInfo{IT, FT},三角形信息

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 hexasInfo ::Vector{HexahedraInfo{IT, FT, CT}},保存六面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}},保存四面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.excitationVectorEFIEMethod

计算平面波在 基函数 上的激励向量 输入: source ::ST, 平面波源 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}},保存六面体信息的向量 nbf ::Integer,基函数数量

MoM_Kernels.excitationVectorMFIE!Method

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.excitationVectorMFIEMethod

计算平面波在给定三角形的三个 半RWG 基函数上的激励向量 输入: source ::ST, 波源 tri ::TriangleInfo{IT, FT},三角形信息

MoM_Kernels.excitationVectorMFIEMethod

计算平面波在 RWG 基函数上的激励向量 输入: source ::ST, 波源 trianglesInfo ::Vector{TriangleInfo{IT, FT}},保存三角形信息的向量 nbf ::Integer,基函数数目

MoM_Kernels.faceSingularityIgMethod
faceSingularityIg(rgt::AbstractVector{FT}, tris::TriangleInfo{IT, FT}, area::FT, facen̂::AbstractVector{FT}) where {IT<:Integer, FT<:Real}

计算场点rgt在源三角形tris上的奇异性,tris的面积为area,外法向量为facen̂。 计算结果为:

\[\begin{aligned} I_{gS} &= \int{g(R)dS'}\\ &= \sum_{n=0}^{SglrOrder}{coeffgreen(n)I^{n-1}_{RS}}\\ I^{n}_{RS} &= \int{R^{n}dS'} \end{aligned}\]

MoM_Kernels.faceSingularityIgMethod
faceSingularityIg(rgt::AbstractVector{FT}, tris::Tris4Tetra{IT, FT}, area::FT, facen̂::AbstractVector{FT}) where {IT<:Integer, FT<:Real}

计算场点rgt在源三角形tris(该三角形为组成四面体的某一面)上的奇异性,tris的面积为area,外法向量为facen̂。 计算结果为:

\[\begin{aligned} I_{gS} &= \int{g(R)dS'}\\ &= \sum_{n=0}^{SglrOrder}{coeffgreen(n)I^{n-1}_{RS}}\\ I^{n}_{RS} &= \int{R^{n}dS'} \end{aligned}\]

MoM_Kernels.faceSingularityIgMethod
faceSingularityIg(rgt::AbstractVector{FT}, polys::ST, area::FT, 
facen̂::AbstractVector{FT}) where {IT<:Integer, FT<:Real, ST<:SurfaceCellType{IT, FT}}

计算场点rgt在多边形polys上的奇异性,polys的面积为area,外法向量为facen̂。 计算结果为:

\[\begin{aligned} I_{gS} &= \int{g(R)dS'}\\ &= \sum_{n=0}^{SglrOrder}{coeffgreen(n)I^{n-1}_{RS}}\\ I^{n}_{RS} &= \int{R^{n}dS'} \end{aligned}\]

MoM_Kernels.faceSingularityIgIvecgMethod
faceSingularityIgIvecg(rgt::AbstractVector{FT}, polys::ST, area, 
    facen̂::AbstractVector) where {FT<:Real, ST<:SurfaceCellType{IT, FT}}

计算场点rgt在多边形polys上的奇异性,polys的面积为area,外法向量为facen̂。 计算结果为:

\[\begin{aligned} I_{gS} &= \int{g(R)dS'}\\ &= \sum_{n=0}^{SglrOrder}{coeffgreen(n)I^{n-1}_{RS}}\\ \boldsymbol{I}_{gS} &= \int{\boldsymbol{R}g(R)dS'}\\ &= \sum_{l_j}{\hat{\bm{u}}_j \sum_{n=0}^{SglrOrder}{\frac{coeffgreen(n)}{n+1}I^{n-1}_{lr}}} + d\bm{n}I^{n-1}_{gS}\\ \end{aligned}\]

MoM_Kernels.faceSingularityIgIvecgI∇gSMethod

面上的近奇异性 rgt, 为场三角形的求积点 tris::TriangleInfo{IT, FT}, 源三角形信息 计算得到结果:: IgS = ∫ g(R) dS' = ∑ₙ₌₀(coeffgreen(n)IR[n-1]) IvecgS = ∫ Rvec g(R) dS' = ∑ₗⱼ ûⱼ ∑ₙ₌₀(coeffgreen(n)/(n+1)Ilᵣ[n-1]) + dn̂IgS I∇gS = ∫ ∇g(R) dS' = ∑ₙ₌₀VSC₃ⁿ*(-1/(n+2)∑ₗⱼûⱼIlᵣ[n+2] + dn̂IgS )

MoM_Kernels.faceSingularityIᵣIᵨMethod

面上的近奇异性 rgts::MMatrix{GQPNTriSglr, 3, Complex{FT}}, 为场三角形的所有高斯求积点 tris::TriangleInfo{IT, FT}, 源三角形信息 计算得到结果:: r0tProj2s::MMatrix{3, GQPNTriSglr, Complex{FT}, 3GQPNTriSglr}, 积分点在源三角形上的投影点 Iᵣ = ∫ 1/R dS' = ∑₁³(p02ilfᵢ - dtsAbsβᵢ) Iᵨ = ∫ ρ/R dS' = 0.5∑₁³{ûᵢ[(R0^2fᵢ + li⁺R⁺ - li⁻*R⁻)]}

MoM_Kernels.farFieldMethod

在球坐标为r̂θϕ处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.farFieldMethod

在球坐标为r̂θϕ处计算辐射积分,采用SWG基函数时,四面体上没有统一的电流值,每一点上都是四个SWG基函数电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙsₙρₙ/(3Vₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙsₙρₙ/3)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.farFieldMethod

在球坐标为r̂θϕ处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.farFieldMethod

在球坐标为r̂θϕ处计算辐射积分,采用SWG基函数时,四面体上没有统一的电流值,每一点上都是四个SWG基函数电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙsₙρₙ/(3Vₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙsₙρₙ/3)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.func4Cube1stkIntervalMethod
func4Cube1stkInterval(cube::CubeInfo)
func4Cube1stkInterval(i::T) where T
func4Cube1stkInterval(interval::T) where T <: UnitRange
func4CubelastkInterval(cube::CubeInfo)
func4CubelastkInterval(i::T) where T
func4CubelastkInterval(interval::T) where T

这六个函数用于寻找盒子的子盒子区间内的比较函数,多重分派以实现不同数据类型的比较。

MoM_Kernels.geoElectricJCalMethod

计算六面体上的电流。 分片常数基 PWC 基函数 电流基函数公式为:Jₙ = κₙIₙfₙ 同一个六面体面片上存在 x̂, ŷ, ẑ 方向的三个基函数,因此 Jₜ = κₜ ∑ₜₙ₌₁³Iₜₙfₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 hexasInfo ::Vector{HexahedraInfo{IT, FT, CT}}, 输出值: Jhexa ::Marrix{Complex{FT}}, 六面体上的电流

MoM_Kernels.geoElectricJCalMethod

计算六面体上的电流。 分片常数基 RBF 基函数 电流基函数公式为:Jₙ = κₙIₙfₙ 同一个六面体面片上存在 6 或 3 个基函数,因此 Jₜ = ∑ₜₙ₌₁ Iₜₙfₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 hexasInfo ::Vector{HexahedraInfo{IT, FT, CT}}, 输出值: Jhexa ::Marrix{Complex{FT}}, 六面体上加权后的电流

MoM_Kernels.geoElectricJCalMethod

计算四面体上的电流。 分片常数基 PWC 基函数 电流基函数公式为:Jₙ = κₙIₙfₙ 同一个四面体面片上存在 x̂, ŷ, ẑ 方向的三个基函数,因此 Jₜ = κₜ ∑ₜₙ₌₁³Iₜₙfₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}}, 输出值: Jtetra ::Marrix{Complex{FT}}, 四面体上的电流

MoM_Kernels.geoElectricJCalMethod

计算四面体上的电流。 分片常数基 SWG 基函数 电流基函数公式为:Jₙ = κₙIₙfₙ 同一个四面体面片上存在四个基函数,因此 Jₜ = ∑ₜₙ₌₁⁴ Iₜₙfₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 tetrasInfo ::Vector{TetrahedraInfo{IT, FT, CT}}, 输出值: Jtetra ::Marrix{Complex{FT}}, 四面体上加权后的电流

MoM_Kernels.geoElectricJCalMethod

计算三角形面片上的加权电流。 电流基函数公式为:Jₙ = Iₙfₙ 同一个三角形面片上存在三个基函数,因此 Jₜ = ∑ₜₙ₌₁³ Iₜₙfₜₙ 输入: ICoeff ::Vector{Complex{FT}} 计算得到的电流系数 trianglesInfo ::Vector{TriangleInfo{IT, FT}},三角形信息 输出值: Jtri ::Marrix{Complex{FT}}, 三角形上加权后的电流

MoM_Kernels.getExcitationVectorMethod

根据几何信息与基函数数量,计算激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: V:: 激励向量

MoM_Kernels.getExcitationVectorMethod

根据几何信息与基函数数量,计算激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: V:: 激励向量

MoM_Kernels.getExcitationVectorMethod

根据几何信息与基函数数量,计算激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: V:: 激励向量

MoM_Kernels.getGeoIDsInCubeChunkMethod
getGeoIDsInCubeChunk(cubes, chunkIndice::Tuple)
getGeoIDsInCubeChunk(cubes, ckunkIndice::UnitRange)

获取 ckunkIndice 内的所有 cubes 的编号, 返回为 Tuple 形式以适应数组索引相关API

MoM_Kernels.getGeosIntervalMethod
getGeosInterval(geosInfo::T) where {T<:AbstractVector}
getGeosInterval(geosInfo::T) where {T<:OffsetVector}

获取几何信息数组的区间,针对普通 VectorOffsetVector 分别派发。

MoM_Kernels.getImpedanceMatAndExciteVMethod

根据几何信息与基函数数量,计算阻抗矩阵和激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: Zmat:: 阻抗矩阵 V:: 激励向量

MoM_Kernels.getImpedanceMatAndExciteVMethod

根据几何信息与基函数数量,计算阻抗矩阵和激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 bfsInfo:: 基函数信息 source:: 激励源 返回: Zmat:: 阻抗矩阵 V:: 激励向量

MoM_Kernels.getImpedanceMatrixMethod

根据几何信息与基函数数量,计算阻抗矩阵 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 返回: Zmat

MoM_Kernels.getImpedanceOptMethod

根据几何信息与基函数数量,计算阻抗矩阵算子 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: Zopt:: 阻抗矩阵算子,由近场稀疏矩阵和远场八叉树聚合、转移、解聚组成 V:: 激励向量 Octree:: 八叉树 Znear:: 阻抗矩阵近场元

MoM_Kernels.getImpedanceOptAndExciteVOctreeMethod

根据几何信息与基函数数量,计算阻抗矩阵算子和激励向量 输入: geosInfo:: 几何信息,三角形、四面体、六面体的向量 nbf:: 基函数数量 source:: 激励源 返回: Zopt:: 阻抗矩阵算子,由近场稀疏矩阵和远场八叉树聚合、转移、解聚组成 V:: 激励向量 Octree:: 八叉树 Znear:: 阻抗矩阵近场元

MoM_Kernels.getMeshDataSaveGeosIntervalMethod
getMeshDataSaveGeosInterval(filename[; meshUnit=:mm, dir = "temp/GeosInfo"])

在获取网格数据 meshData 和介电参数 εᵣs 的同时保存网格数据 meshData 中各类型网格的区间。

MoM_Kernels.getNeiFarNeighborCubeIDsMethod
getNeiFarNeighborCubeIDs(cubes, chunkIndice::Tuple)

获取 ckunkIndice 内的所有 cubes 的 远亲盒子 序号, 返回为 Tuple 形式以适应数组索引相关 API。

MoM_Kernels.getNeighborCubeIDsMethod
getNeighborCubeIDs(cubes, chunkIndice::Tuple)
getNeighborCubeIDs(cubes, chunkIndice::AbstractVector)

获取 ckunkIndice 内的所有 cubes邻盒子 编号, 返回为 Tuple 形式以适应数组索引相关API

MoM_Kernels.getOctreeAndReOrderBFs!Method

根据基函数中心位置构建八叉树,并重排基函数信息、将新基函数 ID 赋值给几何元信息数组 返回值: nLevels:: 层数 octree:: 得到的八叉树 leafCubeEdgel:: 控制叶层盒子大小 isDistribute:: 控制是否为分布式计算

MoM_Kernels.get_Interpolation_MethodMethod
get_Interpolation_Method(method::Symbol)
get_Interpolation_Method(method::Union{Val{:Lagrange2Step}, Val{:Lagrange1Step}})

获取插值算法。

MoM_Kernels.get_partitionMethod
get_partition(nCubes, sizePoles, np)

根据给定的盒子数 nCubes 、多极子数 sizePoles、进程数 np 返回该层辐射函数的三个维度的划分数量。

MoM_Kernels.get_partition_mapMethod
get_partition_map(partition, kcubeIndices)

根据 partition 计算在盒子方向本层所有 rank 到子层所有 rank 的 map 。

MoM_Kernels.greenfunc_starMethod
greenfunc_star(pa::Vec3D{T}, pb::Vec3D{T}[; k=Params.K_0, taylorOrder = SglrOrder]) where {T<:AbstractFloat}

归一化格林函数 $4πG(R)$ 泰勒展开后去奇异项:

\[g^{*}(R) = \frac{e^{-jkR}}{R} - \frac{1}{R} = \sum_{n=1}^{SglrOrder}\frac{{-jk}^{n}}{n!}R^{n-1}.\]

MoM_Kernels.iluPreconditionMethod
iluPrecondition(A, level; τ = 1e-3)

从 (IncompleteLU.jl)[https://github.com/haampie/IncompleteLU.jl.git] 包实现ilu, 再次封装是因为要加入一些判断

MoM_Kernels.impedancemat4CFIE4PECMethod

本函数用于计算PEC的CFIE阻抗矩阵。 输入信息: trianglesInfo: 为包含三角形信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对三角形循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4EFIE4PEC!Method

本函数用于在有矩阵的情况下计算PEC的EFIE阻抗矩阵。 输入信息: Zmat trianglesInfo: 为包含三角形信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对三角形循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4EFIE4PECMethod

本函数用于计算PEC的EFIE阻抗矩阵。 输入信息: trianglesInfo: 为包含三角形信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对三角形循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4MFIE4PECMethod

本函数用于计算PEC的MFIE阻抗矩阵。 输入信息: trianglesInfo: 为包含三角形信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对三角形循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: hexasInfo::AbstractVector{HexahedraInfo{IT, FT, CT}}, 为包含六面体信息实例的向量 tetrasInfo::AbstractVector{TetrahedraInfo{IT, FT, CT}}, 为包含四面体信息实例的向量 nPWC : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: hexasInfo : 为包含六面体信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质的EFIE阻抗矩阵。 输入信息: hexasInfo : 为包含六面体信息实例的向量 nrbf : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对六面体循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: hexasInfo::AbstractVector{HexahedraInfo{IT, FT, CT}}, 为包含六面体信息实例的向量 tetrasInfo::AbstractVector{TetrahedraInfo{IT, FT, CT}}, 为包含四面体信息实例的向量 nPWC : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: tetrasInfo : 为包含四面体信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIE!Method

本函数用于计算介质的 EFIE 阻抗矩阵。 输入信息: Zmat : 已初始化的阻抗矩阵 tetrasInfo : 为包含四面体信息实例的向量 nswg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对四面体循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VIEMethod

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: hexasInfo : 为包含六面体信息实例的向量 nPWC : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIEMethod

本函数用于计算介质的EFIE阻抗矩阵。 输入信息: hexasInfo : 为包含六面体信息实例的向量 nrbf : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对六面体循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VIEMethod

本函数用于计算介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: tetrasInfo : 为包含四面体信息实例的向量 nrwg : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VIEMethod

本函数用于计算介质的EFIE阻抗矩阵。 输入信息: tetrasInfo : 为包含四面体信息实例的向量 nswg : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对四面体循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VIEMethod

本函数用于计算混合网格(四面体+六面体)下介质体的 PWC 基函数下的 EFIE 阻抗矩阵。 输入信息: geosInfo : 为包含四面体信息实例的向量 nPWC : 基函数数目 返回值 Zmat : 阻抗矩阵

MoM_Kernels.impedancemat4VSIERWGPWCMethod

本函数用于计算金属介质混合体的EFIE阻抗矩阵。 输入信息: geosInfo : 为包含几何体信息实例的向量 nbf : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对网格元(几何体)循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VSIERWGRBFMethod

本函数用于计算金属介质混合体的EFIE阻抗矩阵。 输入信息: geosInfo : 为包含几何体信息实例的向量 nbf : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对网格元(几何体)循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.impedancemat4VSIERWGSWGMethod

本函数用于计算金属介质混合体的EFIE阻抗矩阵。 输入信息: geosInfo : 为包含几何体信息实例的向量 nbf : 基函数数目 返回值 Zmat : 阻抗矩阵

注意,此程序由于采用的对网格元(几何体)循环计算,因此在并行化时,会出现不同线程计算出同一个矩阵元,导致写入冲突,因此要加线程锁保证结果写入正确

MoM_Kernels.initialZnearCSRMethod
initialZnearCSR(level, nbf::Int)

根据八叉树层信息 level 初始化近场阻抗矩阵,用 transpose 实现 CSR 压缩稀疏行。

MoM_Kernels.initialZnearChunksMethod
initialZnearChunks(cube, cubes::AbstractVector; CT = Complex{Precision.FT})

根据八叉树某个盒子 cube 信息初始化 cube 对应的近场矩阵元块。

MoM_Kernels.integral1DXWMethod

计算分别采用高斯求积、中点求积计算 θ,ϕ 方向的采样点的坐标、权重 lb::FT, 积分区域下界 hb::FT, 积分区域上界 Nsample::IT, 采样点数 mod::Symbol, 模式,接受 :uni, 均值积分 :glq, 高斯-勒让德积分 两种模式

MoM_Kernels.interpolationCSCMatCalMethod

采用局部插值、两步插值法,计算局部坐标到全局坐标的稀疏插值矩阵,Julia数据存储为列主的,因此使用 压缩稀疏列(Compressed Sparse Column, CSC) pLevelPoles::GLPolesInfo{FT}, 父层多极子信息 tLevelPoles::GLPolesInfo{FT}, 本层多极子信息

MoM_Kernels.levelIntegralInfoCalMethod

计算八叉树的积分相关信息,包括截断项、各层积分点和求积权重数据 输入: levelCubeEdgel::FT, 层盒子边长, 一般叶层为0.25λ,其中 λ 为区域局部波长。 返回值 L ::IT, 层 截断项 levelsPoles ::Vector{GLPolesInfo{FT}},从叶层到第 “2” 层的角谱空间采样信息

MoM_Kernels.octreeXWNCalMethod

计算各层八叉树求积坐标、求积权重 lb::FT, 积分区域下界 hb::FT, 积分区域上界 nlevels::IT, 八叉树叶层ID mod::Symbol, 模式,接受 :uni, 均值积分(ϕ方向) :glq, 高斯-勒让德积分(θ方向) 两种模式

MoM_Kernels.pickθMethod

利用 θ 在极点附近的对称性计算索引超出上下界的 θ 值

MoM_Kernels.radarCrossSectionMethod

在球坐标为r̂θϕ处计算辐射积分,采用SWG基函数时,四面体上没有统一的电流值,每一点上都是四个SWG基函数电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙsₙρₙ/(3Vₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙsₙρₙ/3)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.radarCrossSectionMethod

在球坐标为r̂θϕ处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.radarCrossSectionMethod

在球坐标为r̂θϕ处计算辐射积分,采用SWG基函数时,四面体上没有统一的电流值,每一点上都是四个SWG基函数电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙsₙρₙ/(3Vₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙsₙρₙ/3)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.raditionalIntegralNCalMethod

在设定好的观测角度上的球坐标处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.raditionalIntegralNθϕCalMethod

在球坐标为r̂θϕ处计算辐射积分,采用 RBF 基函数时,六面体上没有统一的电流值 N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dV)

MoM_Kernels.raditionalIntegralNθϕCalMethod

在球坐标为r̂θϕ处计算辐射积分,采用 SWG 基函数时,四面体上没有统一的电流值,每一点上都是四面电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dV) = ∑ₙ(∫ₛ (∑ₜₙ₌₁⁴ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dV) = ∑ₙ(Sₜ (∑ₜₙ₌₁⁴ IₙSₙρₙ/(3Vₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁⁴ IₙSₙρₙ/3)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.raditionalIntegralNθϕCalMethod

在球坐标为r̂θϕ处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.raditionalIntegralNθϕCalMethod

在球坐标为r̂θϕ处计算辐射积分,采用RWG基函数时,三角形上没有统一的电流值,每一点上都是三边电流的叠加, 此时: N(θ, ϕ) = ∑ₙ(∫ₛ Jˢ exp( jkr̂(θ, ϕ)⋅rₙ ) dS) = ∑ₙ(∫ₛ (∑ₜₙ₌₁³ Iₙfₙ)exp(jkr̂(θ, ϕ)⋅rₙ) dS) = ∑ₙ(Sₜ (∑ₜₙ₌₁³ Iₙlₙρₙ/(2Sₙ))exp(jkr̂(θ, ϕ)⋅rₙ) ) = ∑ₙ(∑ᵢWᵢ(∑ₜₙ₌₁³ Iₙlₙρₙ/2)exp(jkr̂(θ, ϕ)⋅rₙ) )

MoM_Kernels.reOrderCubeID!Method

根据排序后的新id重新排列子层盒子以及盒子的邻盒子信息,以将同一个父盒子层的盒子相邻排列,这样有利于计算 更新的量:父层盒子的kidsInterval, 本层的盒子顺序,本层盒子的邻盒子id

MoM_Kernels.saveCubesMethod
saveCubes(cubes[, nchunk = ParallelParams.nprocs; name, dir="", kcubeIndices = nothing])

将盒子 cubes 分为 nchunk 块以 name 为名保存在 dir中。kcubeIndices 同于计算不同分区间重复的部分。

MoM_Kernels.saveGeoIntervalMethod
saveGeoInterval(meshData[; dir = "temp/GeosInfo"])

保存网格数据 meshData 中各类型网格的区间。

MoM_Kernels.saveGeosInfoChunksMethod
saveGeosInfoChunks(geos::AbstractVector, cubes, name::AbstractString, nchunk::Int[; dir = "", cubes_ChunksIndices = sizeChunks2idxs(length(cubes), nchunk)])

将几何信息 geos 根据分块数量 nchunk 和在 cubes 中的分布进行分块并保存。

MoM_Kernels.saveLevelFunction
saveLevel(level[, np = ParallelParams.nprocs; dir="", kcubeIndices = nothing])

将层 level 信息保存,其中的盒子信息由 get_partition 计算的分块信息部分保存。

MoM_Kernels.saveVec2ChunksMethod
saveVec2Chunks(y::AbstractVector, name::AbstractString, indices[; dir = "", showpmeter = false, message = ""])

把向量 yname 按索引 indices 块保存在 dir 文件夹中。

MoM_Kernels.saveVec2ChunksMethod
saveVec2Chunks(y::AbstractVector, name::AbstractString, nchunk::Int[; dir = ""])

把向量 yname 分为 nchunk 块保存在 dir 文件夹中。

MoM_Kernels.searchNearCubesMethod

用于寻找邻盒子的函数 输入 cubesID3D::Matrix{Int},(n×3)盒子在本层的三维坐标 levelID::Integer 层编号,(定义大盒子为(“0” 层),叶层为第“n”层

MoM_Kernels.setBFInterval!Method

根据已经排序好的层的盒子信息,从叶层到顶层更新盒子包含的基函数区间

MoM_Kernels.setBigCubeMethod

计算包围目标的大盒子信息 输入: nodes::Matrix{FT},大小为 (3, n) 的用于分割成八叉树的空间点,如基函数的中心坐标,或者为构成网格的所有点 leafCubeEdgel::FT,叶层盒子边长,用于计算总层数和大盒子的坐标信息

MoM_Kernels.setGeoIDsInLeafCubes!Method

用于设置给定层的盒子中包含的几何体,采用 RWG、SWG、RBF 基函数时,八叉树分组依据为基函数, 同一个几何体会被分在不同的基函数上会被分入入不同的盒子,因此邻盒子中的几何体 id 大概率出现重复值。

MoM_Kernels.setGeoIDsInLeafCubes!Method

用于设置给定层的盒子中包含的几何体,采用 RWG、SWG、RBF 基函数时,八叉树分组依据为基函数, 同一个几何体会被分在不同的基函数上会被分入入不同的盒子,因此邻盒子中的几何体 id 大概率出现重复值。

MoM_Kernels.setKidLevelFarNeighbors!Method

寻找子层的远亲盒子 输入:: thisLevel::LevelInfo{IT, FT, IPT}, 本层信息 kidLevel::LevelInfo{IT, FT, IPT}, 子层信息

MoM_Kernels.setLevelInfo!Method

非叶层LevelInfo的构造函数,输入为空间三维坐标数组 levelID::计算层的id leafnodes::Matrix{FT},大小为 (3, n) 的用于分割成八叉树的空间点,如基函数的中心坐标 cubeEdgel::FT,本层盒子边长

MoM_Kernels.setLevelInfo!Method
setLevelInfo!(nLevels::Integer, leafnodes::Matrix{FT},cubeEdgel::FT, bigCubeLowerCoor::Vec3D{FT}[; 
                IPT = get_Interpolation_Method(MLFMAParams.InterpolationMethod), LT = LevelInfo]) where{FT<:Real}

叶层 LevelInfo 的构造函数,输入信息:

nLevels::IT                 层数,亦为叶层层ID
leafnodes::Matrix{FT}       大小为 (3, n) 的用于分割成八叉树的空间点,如基函数的中心坐标
cubeEdgel::FT               叶层盒子边长
bigCubeLowerCoor::Vec3D{FT} 大盒子的角坐标
IPT                         插值算法类型
LT = LevelInfo              层类
MoM_Kernels.setLevelTransFactor!Method

计算 第“2”层 到 叶 层的转移因子, 转移因子只存在于远亲组,每层远亲组最多有 7^3 - 3^3 = 316种结果

MoM_Kernels.setLevelsShiftFactor!Method

本函数用于给输入的本(level)层的盒子与其子盒子之间计算相移因子, 由盒子排列的规律性和相移因子的对称性,可知: 只需要计算8个相移因子,即可用于所有盒子到其子盒子的相移, 且这八个盒子关于原点对称的两两之间的相移因子为共轭关系 计算完成直接保存在 level 不再返回

MoM_Kernels.singularF1Method
singularF1(a::FT, b::FT, c::FT, d::FT) where{FT<:AbstractFloat}

计算边长为a, b, c, d的四边形重合时的奇异性F1项,即 $\int{\int{\frac{1}{R}}dS}$ 的解析值。

MoM_Kernels.singularF1Method
singularF1(a::FT, b::FT, c::FT) where{FT<:AbstractFloat}

计算边长为a, b, c的三角形重合时的奇异性F1项,即 $\int{\int{\frac{1}{R}}dS}$ 的解析值。

MoM_Kernels.singularF21Method
singularF21(a::FT, b::FT, c::FT, area2::FT) where{FT<:AbstractFloat}

计算边长为a, b, c,面积平方为area2的三角形重合时的奇异性F2项,即 $\int{\int{\frac{\boldsymbol{\rho}_{m}\cdot\boldsymbol{\rho}_{n}}{R}}dS}$ 的解析值,该函数处理 m==n 即基函数自作用的情况。

MoM_Kernels.singularF22Method
singularF21(a::FT, b::FT, c::FT, area2::FT) where{FT<:AbstractFloat}

计算边长为a, b, c,面积平方为area2的三角形重合时的奇异性F2项,即 $\int{\int{\frac{\boldsymbol{\rho}_{m}\cdot\boldsymbol{\rho}_{n}}{R}}dS}$ 的解析值,该函数处理 m!=n 即同一三角形的不同基函数作用的情况。

MoM_Kernels.sizeChunks2cutsMethod
sizeChunks2cuts(Asize, chunks)
sizeChunks2cuts(Asize::Int, chunks)
sizeChunks2cuts(Asize, chunks::Int)
sizeChunks2cuts(Asize::Int, chunks::Int)

将数组大小 Asizechunks 进行分块。 MPIArray4MoMs 借的! 为的是避免提前引入 MPI 导致在集群上的 bug。因此该函数的修改必须与 MPIArray4MoMs 同步。

MoM_Kernels.sizeChunks2idxsMethod
sizeChunks2idxs(Asize, nchunk)

Borrowed form DistributedArray.jl, get the slice of matrix size Asize on each dimension with nchunk. MPIArray4MoMs 借的! 为的是避免提前引入 MPI 导致在集群上的 bug。因此该函数的修改必须与 MPIArray4MoMs 同步。

MoM_Kernels.sizeChunksCuts2indicesMethod
sizeChunksCuts2indices(Asize, nchunk, cuts::Tuple)
sizeChunksCuts2indices(Asize, nchunk, cuts::Vector{I}) where{I<:Integer}

根据数组大小 Asize 分块数量 nchunk 以及各块索引区间 cuts 计算各块的索引。 MPIArray4MoMs 借的! 为的是避免提前引入 MPI 导致在集群上的 bug。因此该函数的修改必须与 MPIArray4MoMs 同步。

MoM_Kernels.slicedim2boundsMethod
slicedim2bounds(sz::Int, nc::Int)

将区间 1:sz 划分为 nc 个区间并返回区间上下界。 MPIArray4MoMs 借的! 为的是避免提前引入 MPI 导致在集群上的 bug。因此该函数的修改必须与 MPIArray4MoMs 同步。

MoM_Kernels.slicedim2partitionMethod
slicedim2bounds(dims, nc::Int)

将区间 dims 划分为 nc 个区间并返回区间上下界。 MPIArray4MoMs 借的! 为的是避免提前引入 MPI 导致在集群上的 bug。因此该函数的修改必须与 MPIArray4MoMs 同步。

MoM_Kernels.solve!Method

矩阵方程 Ax=b 复合求解函数 输入值: A::LinearMapType{T}, b::Vector{T} solverT::Symbol 求解器类型

MoM_Kernels.solveMethod

矩阵方程 Ax=b 复合求解函数 输入值: A::LinearMapType{T}, b::Vector{T} solverT::Symbol 求解器类型

MoM_Kernels.sparseApproximateInversePlMethod
sparseApproximateInversePl(ZnearChunks::ZnearChunksStruct{CT}, level; nbf = 0) where {FT<:Real, CT<:Complex{FT}}

根据块状近场阻抗矩阵 ZnearChunks 和计算阻抗矩阵层的盒子信息 cubes 计算左稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePlMethod
sparseApproximateInversePl(Znear::ZnearT{CT}, cubes::AbstractVector) where {FT<:Real, CT<:Complex{FT}}

根据近场阻抗矩阵 Znear 和计算阻抗矩阵层的盒子信息 cubes 计算左稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePlMethod
sparseApproximateInversePl(Znear::ZnearT{CT}, octree::OctreeInfo{FT, LT}) where { FT<:Real, CT<:Complex{FT}, LT}

根据近场阻抗矩阵 Znear 和八叉树 octree 叶层计算左稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePlMethod
sparseApproximateInversePl(Znear::ZnearT{CT}, level::LT) where { CT<:Complex, LT <: AbstractLevel}

根据近场阻抗矩阵 Znear 和计算阻抗矩阵层信息 level 计算左稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePrMethod
sparseApproximateInversePr(Znear::ZnearT{CT}, cubes::AbstractVector) where {FT<:Real, CT<:Complex{FT}}

根据近场阻抗矩阵 Znear 和计算阻抗矩阵层的盒子信息 cubes 计算右稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePrMethod
sparseApproximateInversePr(Znear::ZnearT{CT}, octree::OctreeInfo{FT, LT}) where { FT<:Real, CT<:Complex{FT}, LT}

根据近场阻抗矩阵 Znear 和八叉树 octree 叶层计算右稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.sparseApproximateInversePrMethod
sparseApproximateInversePr(Znear::ZnearT{CT}, level::LT) where { CT<:Complex, LT <: AbstractLevel}

根据近场阻抗矩阵 Znear 和计算阻抗矩阵层信息 level 计算右稀疏近似逆 (Sparse Approximate Inverse (SAI)) 。

MoM_Kernels.spherical_h1lMethod

第一类球汉克尔函数,使用GSL.jl(GNU Scientific Library),适用于 l 为整数,x 为浮点数时算的更快

MoM_Kernels.spherical_h1lMethod

第一类球汉克尔函数,使用 SpecialFunctions.jl, 适用于非整数阶、复数变量,算的较慢,只在计算有耗介质(复数波矢)时调用

MoM_Kernels.spherical_h2lMethod

第二类球汉克尔函数,使用GSL.jl(GNU Scientific Library),,适用于 l 为整数,x 为浮点数时算的更快

MoM_Kernels.spherical_h2lMethod

第二类球汉克尔函数,使用 SpecialFunctions.jl, 适用于非整数阶、复数变量,算的较慢,只在计算有耗介质(复数波矢)时调用

MoM_Kernels.truncationLCalMethod
truncationLCal(;rel_l) where {FT<:Real}

该函数计算八叉树各层截断项数 输入为相对波长

MoM_Kernels.use_CSRMethod
use_CSR()
use_CSC()

设置近场阻抗矩阵是否采用CSR(CSC转置)。

MoM_Kernels.volumeSingularityIgMethod
volumeSingularityIg(rtveclc::AbstractVector{FT}, volumeCell::HexahedraInfo{IT, FT, CT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}

计算场点rgt在体网格volumeCell上的奇异性。 计算结果为:

\[\begin{aligned} I_{gV} &= \int{g(R)dV'}\\ &= -\sum_{S_i}{d_i\sum_{n}^{SglrOrder}{\frac{coeffgreen(n)}{n+2}I_{RS}^{n-1}}}\\ \end{aligned}\]

MoM_Kernels.volumeSingularityIgIvecgMethod
volumeSingularityIgIvecg(rtveclc::AbstractVector{FT}, volumeCell::TetrahedraInfo{IT, FT, CT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}
volumeSingularityIgIvecg(rtveclc::AbstractVector{FT}, volumeCell::HexahedraInfo{IT, FT, CT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}

计算场点rgt在体网格volumeCell上的奇异性。 计算结果为:

\[\begin{aligned} I_{gV} &= \int{g(R)dV'}\\ &= -\sum_{S_i}{d_i\sum_{n}^{SglrOrder}{\frac{coeffgreen(n)}{n+2}I_{RS}^{n-1}}}\\ \boldsymbol{I}_{gV} &= \int{\boldsymbol{R}g(R)dV'}\\ &= -\sum_{S_i}{\hat{\bm{n}}_i \sum_{n=0}^{SglrOrder}{\frac{coeffgreen(n)}{n+1}I^{n+1}_{RS}}}\\ \end{aligned}\]

MoM_Kernels.volumeSingularityLOpDyadMethod
volumeSingularityLOpDyad(rtveclc::AbstractVector{FT}, volumeCell::TetrahedraInfo{IT, FT, CT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}
volumeSingularityLOpDyad(rtveclc::AbstractVector{FT}, volumeCell::HexahedraInfo{IT, FT, CT}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}

计算场点rtveclc在体网格volumeCell上的并矢格林函数奇异性。 计算结果为:

\[\begin{aligned} \overline{I}_{V} &= \int{(k^2 I + ∇∇)G(R) dV'} \end{aligned}\]

MoM_Basics.EDGEVmINTriVsIDConstant

三角形在构建时构成第i个边的两个点为三角形中的除了第i个点的两个点,以下为索引构成第i个边的第一个点(计算边向量被 - 掉)时采用的对应点

MoM_Basics.EDGEVpINTriVsIDConstant

三角形在构建时构成第i个边的两个点为三角形中的除了第i个点的两个点,以下为索引构成第i个边的第二个点(计算边向量时用于减去第二个点 掉)时采用的对应点

MoM_Basics.GQPNQuadConstant

六面体边界四边形正常处理高斯求积时高斯求积点数。

MoM_Basics.AntennaArrayType
AntennaArray{FT<:Real, AT, N} <: AbstractAntennaArray

机扫阵列天线 (mechanically scanned array, MSA)、相控阵 (Phased Array)阵列天线 orient 采用的是欧拉角,参考eulerRotationMat 注意阵列初始指向由提供的天线单元合成,作为阵列只提供指向旋转。

MoM_Basics.AntennaArrayMethod
AntennaArray(antennas::AbstractArray{AT, N}; center = zero(MVec3D{Precison.FT}), orient = (0., 0., 0.)) where {AT, N}

初始化阵列天线,默认为方阵。

MoM_Basics.HexahedraInfoType
HexahedraInfo{IT<: Integer, FT<:AbstractFloat, CT<:Complex} <: VolumeCellType{IT, FT, CT}

六面体信息结构体:

hexaID      ::IT                    编号
volume      ::FT                    体积
ε           ::CT                    相对介电常数
κ           ::CT                    介质对比度
center      ::MVec3D{FT}            中心坐标
verticesID  ::MVector{8, IT}        所在节点id
vertices    ::MMatrix{3, 8, FT,24}  六面体4个角点坐标,每列为一个点
facesn̂      ::MMatrix{3, 8, FT,24}  四个面的外法向量
facesvid    ::MMatrix{3, 8, IT,24}  四个面包含的四个id
facesArea   ::MVector{6, FT}        四个面的面积(根据为unitri正负部分赋予正负号)
faces       ::Vector{Quads4Hexa{IT, FT}}    四个面的具体信息
inBfsID     ::Vector{IT}            六面体所在的基函数的ID
MoM_Basics.HexahedraInfoMethod
HexahedraInfo{IT, FT, CT}(hexaID::IT = zero(IT)) where {IT <: Integer, FT<:AbstractFloat, CT<:Complex}

HexahedraInfo 的默认构造函数,除了输入的编号 hexaID 外所有元素置零。

MoM_Basics.HexahedraMeshType
HexahedraMesh{IT, FT} <: MeshDataType

六面体网格文件,包括六面体数 hexnum、节点 node、构成六面体的节点 id 数组 hexahedras 等信息。

MoM_Basics.MagneticDipoleType
MagneticDipole(id = 0; Iml = 0., phase = 0., orient = zero(MVec3D{Float32}), centerlc = zero(MVec3D{Float32}), centergb = zero(MVec3D{Float32}))

精度可变的 MagneticDipole 构造函数

MoM_Basics.MagneticDipoleType
MagneticDipole{FT<: Real}<:AntennaType

磁偶极子天线类型。

id      ::Integer               编号
Iml     ::Complex{FT}           磁流线值
V       ::FT                    磁流线幅值
phase   ::FT                    相位
orient  ::MVec3D{FT}            指向欧拉角
centerlc::MVec3D{FT}            局部坐标下的中心位置
centergb::MVec3D{FT}            全局坐标下的中心位置
l2gRot  ::MMatrix{3, 3, FT, 9}  局部坐标到全局坐标的旋转变换矩阵
MoM_Basics.MagneticDipoleMethod
    MagneticDipole{FT}(
    id      ::Int32         =   zero(Int32);        # 编号
    Iml     ::CT            =   zero(CT),           # 磁流线值
    phase   ::FT            =   zero(FT),           # 相位(输入弧度(rad)单位)
    orient  ::MVec3D{FT}    =   zero(MVec3D{FT}),   # 指向欧拉角
    centerlc::MVec3D{FT}    =   zero(MVec3D{FT}),   # 局部坐标下的中心位置
    centergb::MVec3D{FT}    =   zero(MVec3D{FT}),   # 全局坐标下的中心位置
    I0S     ::FT            =   zero(FT),           # 电流环幅值
    unit                    =   :rad    ) 
    where{FT <: Real, CT <: Complex{FT}}
MoM_Basics.MeshNodeTriTetraHexaType
MeshNodeTriTetraHexa{IT, FT} <: MeshDataType

三角形、四面体、六面体混合网格数据类型:

geonum      ::Int           包含的所有网格元的数量
meshT       ::DataType      网格类型 单一的以其网格类型表示,混合以 VSCellType 表示
trinum      ::Int           包含的三角形数量
tetranum    ::Int           包含的四面体数量
hexanum     ::Int           包含的六面体数量
node        ::Array{FT, 2}  节点坐标数组(3*nodenum)
triangles   ::Array{IT, 2}  三角形包含的nodeid数组:(3*trinum)
tetrahedras ::Array{IT, 2}  四面体包含的nodeid数组:(4*tetranum)
hexahedras  ::Array{IT, 2}  六面体包含的nodeid数组:(6*hexanum)
MoM_Basics.PWCType
PWC{IT<:Integer , FT<:AbstractFloat} <: ConstBasisFunction

PWC 基函数复合类型:

bfID        ::IT            基函数编号
inGeo       ::IT            基函数所在两个四面体编号
center      ::MVec3D{FT}    基函数中心,用于八叉树分组
MoM_Basics.PWCMethod
PWC{IT, FT}() where {IT <: Integer, FT<:AbstractFloat}

PWC 的默认构造函数,所有元素置零。

MoM_Basics.ParamsTypeType

ParamsType{FT<:AbstractFloat, CT<:Complex{FT}}

创建参数类型以方便保存仿真参数并控制精度:

frequency   ::FT        频率
ω_0         ::FT        角频率
K_0         ::FT        波数
λ_0         ::CT        波长
Jη_0divK    ::CT        常数
JK_0        ::CT        常数
k²          ::FT        常数
divJω       ::CT        常数
mk²div9     ::FT        常数
mJη_0div4πK ::CT        常数
C4divk²     ::FT        常数
JKηdiv16π   ::CT        常数
div9Jω      ::CT        常数
Rsglr       ::FT        处理奇异性的相对距离阈值
resultDir   ::String    存放结果的位置
MoM_Basics.ParamsTypeMethod
ParamsType{FT, CT}(frequency::FT) where{FT<:AbstractFloat, CT<:Complex{FT}}
ParamsType(frequency::FT) where {FT<:AbstractFloat}
ParamsType{FT}(frequency) where {FT<:AbstractFloat}

输入频率创建仿真参数实例。

MoM_Basics.PlaneWaveType
PlaneWave{FT<:Real}<:ExcitingSource

平面波源:

θ   ::FT            球坐标角度θ
ϕ   ::FT            球坐标角度ϕ
α   ::FT            波极化方向相对于 θhat_source 绕K̂_v旋转的角度
f   ::FT            波频率
V   ::FT            波激励幅度
E_v ::SVec3D{FT}    入射波电场极化矢量
k̂   ::SVec3D{FT}    入射波波矢向量

默认构造函数:

PlaneWave{FT}(θ::FT, ϕ::FT, α::FT, V::FT = one(FT))
MoM_Basics.PlaneWaveMethod
PlaneWave{FT}(θ, ϕ, α, V = one(FT)) where {FT}

类型自动转换的 PlaneWave 构造函数。

MoM_Basics.Quads4HexaType
Quads4Hexa{IT<: Integer, FT<:AbstractFloat} <: SurfaceCellType{IT, FT}

单个构成六面体的四边形信息:

isbd        ::Bool                  是否在体区域边界,
δκ          ::Complex{FT}           介质对比度变化量,
vertices    ::MMatrix{3, 4, FT, 12} 四边形 4 个角点坐标,每列为一个点,
edgel       ::MVector{4, FT}        四个边长,
edgev̂       ::MMatrix{3, 4, FT, 12} 四个边的单位指向向量,
edgen̂       ::MMatrix{3, 4, FT, 12} 四个边的单位外法向量。

合理安排位置后,四个基函数的自由端即为四边形四个点的顺序。

MoM_Basics.Quads4HexaMethod
(q::Quads4Hexa)(u::FT, v::FT) where {FT}

计算六面体边界四边形在局部坐标 (u, v) 下的点。

MoM_Basics.Quads4HexaMethod
Quads4Hexa{IT, FT}() where {IT <: Integer, FT<:AbstractFloat}

Quads4Hexa的默认构造函数,默认为边界,其它所有元素置零。

MoM_Basics.RBFType
RBF{IT<:Integer , FT<:AbstractFloat} <: LinearBasisFunction

屋顶基函数 (Rooftop basis function, RBF) 基函数复合类型:

isbd        ::Bool              是否为边界元即半基函数,布尔类型
bfID        ::IT                基函数编号,整形
inGeo       ::MVector{2, IT}    基函数所在两个六面体编号(半基函数为1个,赋值成一样的两个),长度为2的向量数组
inGeoID     ::MVector{2, IT}    基函数在两个六面体中的局部编号(半基函数为1个,赋值成一样的两个),取值1:4,长度为2的向量数组
center      ::MVec3D{FT}        基函数中心,用于八叉树分组
MoM_Basics.RBFMethod
RBF{IT, FT}() where {IT <: Integer, FT<:AbstractFloat}

RBF 的默认构造函数,所有元素置零。

MoM_Basics.RWGType
RWG{IT<:Integer , FT<:AbstractFloat} <: LinearBasisFunction

RWG基函数复合类型:

isbd        ::Bool              是否为边界元即半基函数,布尔类型
bfID        ::IT                基函数编号,整形
edgel       ::FT                基函数边长,浮点型
inGeo       ::MVector{2, IT}    基函数所在两个三角形编号(半基函数为1个,赋值成一样的两个),长度为2的向量数组
inGeoID     ::MVector{2, IT}    基函数在两个上面三角形中的局部编号(半基函数为1个,赋值成一样的两个),取值1:3,长度为2的向量数组
center      ::MVec3D{FT}        基函数中心,用于八叉树分组
MoM_Basics.RWGMethod
RWG{IT, FT}()where {IT <: Integer, FT<:AbstractFloat}

RWG 的默认构造函数,默认非面的边界,所有元素置零。

MoM_Basics.SWGType

SWG 基函数复合类型参数解释:

isbd        ::Bool              是否为边界元即半基函数
bfID        ::IT                基函数编号,整形
inGeo       ::MVector{2, IT}    基函数所在两个四面体编号(半基函数为1个,赋值成一样的两个),长度为2的向量数组
inGeoID     ::MVector{2, IT}    基函数在两个四面体中的局部编号(半基函数为1个,赋值成一样的两个),取值1:4,长度为2的向量数组
center      ::MVec3D{FT}        基函数公共面中心,用于八叉树分组
MoM_Basics.SWGMethod
SWG{IT, FT}() where {IT <: Integer, FT<:AbstractFloat}

SWG 的默认构造函数,所有元素置零。

MoM_Basics.SimulationParamsTypeType
SimulationParamsType

非数值仿真参数信息:

resultDir   ::String        结果文件夹路径
ieT         ::Symbol        积分方程类型,包括 EFIE, MFIE, CFIE等
meshfilename::String        网格文件名称
meshunit    ::Symbol        网格文件单位
SHOWIMAGE   ::Bool          根是否要在前端显示图片
discreteVar ::String        离散的体未知量类型,支持位移电流 `"D"` 或等效电流 `"J"`
sbfT        ::Symbol        面基函数类型,目前仅支持 `:RWG`
vbfT        ::Symbol        体基函数类型,目前支持 `:SWG, :RBF, :PWC`
MoM_Basics.SimulationParamsTypeMethod
SimulationParamsType(;ieT::Symbol=:EFIE, meshfilename::String = "", meshunit::Symbol = :mm, 
SHOWIMAGE = true, discreteVar = "D", sbfT = :RWG, vbfT = :nothing)

SimulationParamsType 的默认构造函数。

MoM_Basics.TetrahedraInfoType
TetrahedraInfo{IT<: Integer, FT<:AbstractFloat, CT<:Complex} <: VolumeCellType{IT, FT, CT}

四面体信息结构体:

tetraID     ::IT                    编号
volume      ::FT                    体积
ε           ::CT                    相对介电常数
κ           ::CT                    介质对比度
center      ::MVec3D{FT}            中心坐标
verticesID  ::MVector{4, IT}        所在节点id
vertices    ::MMatrix{3, 4, FT, 12} 四面体4个角点坐标,每列为一个点
facesn̂      ::MMatrix{3, 4, FT, 12} 四个面的外法向量
facesvid    ::MMatrix{3, 4, IT, 12} 四个面包含的三个id
facesArea   ::MVector{4, FT}        四个面的面积(根据为unitri正负部分赋予正负号)
faces       ::Vector{Tris4Tetra{IT, FT}}    四个面的具体信息
inBfsID     ::Vector{IT}            四面体所在的基函数的ID
MoM_Basics.TetrahedraInfoMethod
TetrahedraInfo{IT, FT, CT}(hexaID::IT = zero(IT)) where {IT <: Integer, FT<:AbstractFloat, CT<:Complex}

TetrahedraInfo 的默认构造函数,除了输入的编号 tetraID 外所有元素置零。

MoM_Basics.TetrahedraMeshType
HexahedraMesh{IT, FT} <: MeshDataType

四面体网格文件,包括四面体数 tetranum、节点 node、构成四面体的节点 id 数组 tetrahedras 等信息。

MoM_Basics.TriangleInfoType
TriangleInfo{IT<: Integer, FT<:AbstractFloat} <: SurfaceCellType{IT, FT}

三角形信息结构体:

triID       ::IT                    编号
area        ::FT                    面积
verticesID  ::MVector{3, IT}        所在节点id
vertices    ::MMatrix{3, 3, FT, 9}  三角形3个角点坐标,每列为一个点
center      ::MVec3D{FT}            中心坐标
facen̂       ::MVec3D{FT}            面的外法向量
edgel       ::MVec3D                三边长
edgev̂       ::MMatrix{3, 3, FT, 9}  三个边的指向向量
edgen̂       ::MMatrix{3, 3, FT, 9}  三个边的外法向量
inBfsID     ::MVector{3, IT}        三角形所在的三个基函数的ID

合理安排位置后,三个基函数的自由端即为三角形三个点的顺序。

MoM_Basics.TriangleInfoMethod
TriangleInfo{IT, FT}(triID::IT = zero(IT)) where {IT <: Integer, FT<:AbstractFloat}

TriangleInfo 的默认构造函数,除了输入的编号 triID 外所有元素置零。

MoM_Basics.TriangleMeshType
TriangleMesh{IT, FT} <: MeshDataType

三角形网格文件,包括三角形数 trinum、节点 node、构成三角形的节点 id 数组 triangles 等信息。

MoM_Basics.Tris4TetraType
TriangleInfo{IT<: Integer, FT<:AbstractFloat} <: SurfaceCellType{IT, FT}

构成四面体的三角形信息结构体:

isbd        ::Bool                  是否在边界上
δκ          ::Complex{FT}           面两侧介质对比度差值
vertices    ::MMatrix{3, 3, FT, 9}  三角形3个角点坐标,每列为一个点
edgel       ::MVec3D{FT}            三边长
edgev̂       ::MMatrix{3, 3, FT, 9}  三个边的指向向量
edgen̂       ::MMatrix{3, 3, FT, 9}  三个边的外法向量

合理安排位置后,三个基函数的自由端即为三角形三个点的顺序。

MoM_Basics.Tris4TetraMethod
Tris4Tetra{IT, FT}() where {IT <: Integer, FT<:AbstractFloat}

Tris4Tetra 的默认构造函数,默认在边界上,其它所有元素置零。

MoM_Basics.VecCart2SphereMatType
VecCart2SphereMat{T} <: FieldVector{3, Vec3D{T}}

矢量坐标系(直角 → 球)转换矩阵

r_hat   ::  Vec3DCart{T}    r 方向的单位向量
θ_hat   ::  Vec3DCart{T}    θ 方向的单位向量
ϕ_hat   ::  Vec3DCart{T}    ϕ 方向的单位向量
MoM_Basics.VecCart2SphereMatMethod
VecCart2SphereMat{FT}(θϕ::θϕInfo{FT}) where{FT<:AbstractFloat}

VecCart2SphereMat在给定方向 θϕ 的构造函数。

MoM_Basics.r̂θϕInfoType
r̂θϕInfo{FT<:Real}

r̂ θ ϕ 空间角度信息类型,保存以避免大量重复计算

MoM_Basics.r̂θϕInfoMethod
r̂θϕInfo{FT}(rvec::AbstractVector{FT}) where {FT<:Real}

输入直角坐标角度 rvec 构造 r̂θϕInfo 实例。

MoM_Basics.r̂θϕInfoMethod
r̂θϕInfo(θ::FT = zero(FT), ϕ::FT = zero(FT)) where {FT<:Real}
r̂θϕInfo(θ::∠Info{FT}, ϕ::∠Info{FT}) where {FT<:Real}
r̂θϕInfo(θ::FT, ϕ::∠Info{FT}) where {FT<:Real}
r̂θϕInfo(θ::∠Info{FT}, ϕ::FT) where {FT<:Real}

r̂θϕInfo 的构造函数 输入角度 θϕ 构造 r̂θϕInfo 实例。

MoM_Basics.θϕInfoType
θϕInfo{FT<:Real}

θ ϕ 空间角度信息类型,保存以避免大量重复计算。

MoM_Basics.θϕInfoMethod
θϕInfo{FT}(rvec::AbstractVector{FT}) where {FT<:Real}

输入直角坐标角度 rvec 构造 θϕInfo 实例。

MoM_Basics.θϕInfoMethod
θϕInfo{FT}(θ::FT = zero(FT), ϕ::FT = zero(FT)) where {FT<:Real}
θϕInfo(θ::FT, ϕ::FT) where {FT<:Real}
θϕInfo{FT}(θ::∠Info{FT}, ϕ::∠Info{FT}) where {FT<:Real}
θϕInfo{FT}(θ::FT, ϕ::∠Info{FT}) where {FT<:Real}
θϕInfo{FT}(θ::∠Info{FT}, ϕ::FT) where {FT<:Real}

输入角度 θϕ 构造 θϕInfo 实例。

MoM_Basics.∠InfoType
∠Info{FT<:Real}

∠ 空间角度信息类型,保存以避免大量重复计算。

Base.:*Method
Base.:*(c2smat::VecCart2SphereMat{FT}, vec3D::Vec3D{T}) where {T<:Number, FT<:AbstractFloat}

重载 * 函数以计算向量在球坐标下的各个分量

MoM_Basics.acrossbcrosscMethod
acrossbcrossc(a, b, c)

更高效地计算矢量连续叉乘:$a × b × c = (c⋅a)b - (c⋅b)a$

MoM_Basics.add_phase!Method
add_phase!(md::MagneticDipole{FT}, phase) where {FT <: Real}

为磁偶极 md 附加相位 phase

MoM_Basics.antennaArrayFunction
antennaArray(arysize, aryorient, dgap = Tuple(fill(Params.λ_0/2, length(arysize)));
sourceConstructer, sourceT, sourceorientlc[, orientunit=:rad, coefftype = :uniform, arycenter = zero(MVec3D{Precision.FT})])

提供快捷的阵列构建函数。注意此处输入的阵列、单元指向必须为指定的欧拉角 (ZXZ) eulerRotationMat

MoM_Basics.boundaryRBFMethod
boundaryRBF(h::Hexahedron)

重载面的提取顺序以匹配屋顶基函数 (RBF) 在六面体中的面按

\[u=1, u=0, v = 1, v = 0, w = 1, w = 0 \]

的顺序排列。

MoM_Basics.byte2otherMethod
byte2other(v, mem_unit)

将以字节为单位的内存数据 v 转换为其它单位 mem_unit

MoM_Basics.cart2sphereMethod
cart2sphere(xyz::Vararg{T, 3}) where {T}

将直角坐标 xyz 转换到球坐标。

MoM_Basics.cart2sphereMatMethod
cart2sphereMat(θϕ::θϕInfo{FT}) where{FT<:Real}
cart2sphereMat(θ::FT, ϕ::FT) where{FT<:Real}

计算矢量坐标系(直角 → 球)转换矩阵。

MoM_Basics.constructFloat2IndexDictMethod
constructFloat2IndexDict(floats::AbstractVector{FT}) where {FT<:AbstractFloat}

构建有序(从小到大)浮点数为键,值为该组数构成的的二重字典,字典值为键的二维数组的线性坐标

MoM_Basics.distMethod
dist(pa::AbstractVector{FT}, pb::AbstractVector{FT})::FT where {FT<:AbstractFloat}
dist(pa::Vec3D{FT}, pb::Vec3D{FT})::FT where {FT<:AbstractFloat}
dist(pa::Vec3D{FT})::FT where {FT<:AbstractFloat}

计算两点之间距离,比使用norm函数更高效。

MoM_Basics.eulerRMat2αβγMethod
eulerRMat2αβγ(l2gMat)

通过局部坐标到全局坐标的旋转矩阵 l2gMat 计算欧拉角。 旋转矩阵按绕 “z轴” → “x轴” → “z轴”的顺序,分别旋转 α, β, γ 度得到,本函数计算对应的三个角度 α, β, γ

MoM_Basics.eulerRotationMatMethod
eulerRotationMat(α::FT, β::FT, γ::FT, unit::Symbol) where{FT<:Real}

根据坐标旋转的欧拉角计算旋转矩阵, 定义旋转顺序为: “滚动” → “俯仰” → “偏航”, 即按绕 “z轴” → “x轴” → “z轴”的顺序,分别旋转 α, β, γ 度 Wikipedia-Euler_angles 输入: α, β, γ, 旋转角度信息 unit: 输入角度值单位,默认为 :rad,可选 :deg 输出: rotMat :: SMatrix{3, 3, FT}, 坐标旋转矩阵 rotMat * vec 将 vec 从局部坐标转换回全局坐标

MoM_Basics.eulerRotationMatMethod
eulerRotationMat(θ::FT, ϕ::FT, unit::Symbol) where{FT<:AbstractFloat}

计算转到给定指向 θ, ϕ 处的旋转矩阵,旋转一步到位,不发生自旋。

MoM_Basics.eulerRotationMatMethod
eulerRotationMat(axis::Vec3D{FT}, θ::FT, unit::Symbol) where{FT<:Real}

计算天线阵按给定任意轴 axis, 旋转 θ` 角度的旋转矩阵。

MoM_Basics.eulerZunitMethod
eulerZunit(α::FT, β::FT, γ::FT, unit::Symbol) where{FT<:Real}

计算给定欧拉角局部坐标 z 轴在全局坐标中的位置单位向量。

MoM_Basics.getBFTfromCellTMethod

根据网格元(如三角形、四边形、四面体、六面体等)获取基函数信息用于快速计算当前单元采用的基函数

MoM_Basics.getBFsFromMeshDataMethod
getBFsFromMeshData(meshData; sbfT = :nothing, vbfT = :nothing)

通过网格信息 meshData 创建基函数信息。

MoM_Basics.getCellsBFsMethod
getCellsBFs(meshData, vbfT)

根据读取的网格数据生成网格元 + 基函数信息。

MoM_Basics.getCellsBFsFromFileNameMethod
getCellsBFsFromFileName(meshFileName; meshUnit = MeshUnit, sbfT = :RWG, vbfT = :nothing)

通过文件名 meshFileName 直接读取网格元、创建基函数信息。

MoM_Basics.getCellsFromFileNameMethod
getCellsFromFileName(meshFileName; meshUnit = MeshUnit, sbfT = :RWG, vbfT = :nothing)

通过文件名 meshFileName 直接读取网格元。

MoM_Basics.getFreeVIDFromGQ3DIDMethod
getFreeVIDFromGQ3DID(GQ3DID::NTuple{3, Int}, i::Integer)

得到第 i 个面所在的基函数的 正常高斯求积 下,三维坐标为 GQ3DID 的高斯求积点的 “自由端$r₀$” 的序号。

MoM_Basics.getFreeVIDFromGQ3DIDSSglrMethod
getFreeVIDFromGQ3DIDSSglr(GQ3DID::NTuple{3, Int}, i::Integer)

得到第 i 个面所在的基函数的 处理超奇异性时,三维坐标为 GQ3DID 的高斯求积点的 “自由端$r₀$” 的序号。

MoM_Basics.getFreeVIDFromGQ3DIDSglrMethod
getFreeVIDFromGQ3DIDSglr(GQ3DID::NTuple{3, Int}, i::Integer)

得到第 i 个面所在的基函数的 处理奇异性时,三维坐标为 GQ3DID 的高斯求积点的 “自由端$r₀$” 的序号。

MoM_Basics.getFreeVnsMethod
getFreeVns(hexa::HexahedraInfo, i::Integer)

得到六面体 hexai 个所在的基函数的 所有自由端( $r₀$ )。 该面定义为 $uvw$ 坐标中某值为 $1(0)$ 的面, 自由端应定义为在该面的 $uvw$ 坐标中,将该值赋值为 $0(1)$ 时计算得到的点 如 $u = 1$ 的面为六面体的第 $(2,6,7,3)$ 个点构成的面,$r₀$$uvw$ 坐标为 $(0, v, w)$ 的点,此点等同于 $u = 0$ 的面的四边形的参数坐标为 (v, w) 的点 在构造 RBF 时面按照 按 $u=1, u=0, v = 1, v = 0, w = 1, w = 0$ 的顺序排列, 因此函数根据输入的面的序号进行计算。

MoM_Basics.getFreeVnsSSglrMethod
getFreeVnsSSglr(hexa::HexahedraInfo, i::Integer)

得到六面体 hexa 处理超奇异性时第 i 个所在的基函数的 所有自由端( $r₀$ )。 定义详见getFreeVns

MoM_Basics.getFreeVnsSglrMethod
getFreeVns(hexa::HexahedraInfo, i::Integer)

得到六面体 hexa 处理奇异性时第 i 个所在的基函数的 所有自由端( $r₀$ )。 定义详见getFreeVns

MoM_Basics.getGQPHexaMethod
getGQPHexa(hexa::HexahedraInfo, ii::IT) where {IT <: Integer}
getGQPHexa(hexa::HexahedraInfo)

计算 hexa 正常求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPHexaSSglrMethod
getGQPHexaSSglr(hexa::HexahedraInfo, ii::IT) where {IT <: Integer}
getGQPHexaSSglr(hexa::HexahedraInfo)

计算 hexa 处理超奇异性求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPHexaSglrMethod
getGQPHexaSglr(hexa::HexahedraInfo, ii::IT) where {IT <: Integer}
getGQPHexaSglr(hexa::HexahedraInfo)

计算 hexa 处理奇异性求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPQuadMethod
getGQPQuad(quad::Quads4Hexa, ii::IT) where {IT <: Integer}
getGQPQuad(quad::Quads4Hexa)

计算 quad 正常求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPQuadSSglrMethod
getGQPQuadSSglr(quad::Quads4Hexa, ii::IT) where {IT <: Integer}
getGQPQuadSSglr(quad::Quads4Hexa)

计算 quad 处理超奇异性的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPQuadSglrMethod
getGQPQuadSglr(quad::Quads4Hexa, ii::IT) where {IT <: Integer}
getGQPQuadSglr(quad::Quads4Hexa)

计算 quad 处理奇异性的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTetraMethod
getGQPTetra(tetra::TetrahedraInfo, i::IT) where {IT <: Integer}
getGQPTetra(tetra::TetrahedraInfo)

计算 tetra 正常求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTetraSglrMethod
getGQPTetraSglr(tetra::TetrahedraInfo, i::IT) where {IT <: Integer}
getGQPTetraSglr(tetra::TetrahedraInfo)

计算 tetra 处理奇异性求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTriMethod
getGQPTri(tri::TriangleInfo, i::IT) where {IT <: Integer}
getGQPTri(tri::TriangleInfo)

计算 tri 正常求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTriMethod
getGQPTri(tri::Tris4Tetra, i::IT) where {IT <: Integer}
getGQPTri(tri::Tris4Tetra)

计算 tri 正常求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTriSglrMethod
getGQPTriSglr(tri::TriangleInfo, i::IT) where {IT <: Integer}
getGQPTriSglr(tri::TriangleInfo)

计算 tri 处理奇异性求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getGQPTriSglrMethod
getGQPTriSglr(tri::Tris4Tetra, i::IT) where {IT <: Integer}
getGQPTriSglr(tri::Tris4Tetra)

计算 tri 处理奇异性求积的第 i 个或所有高斯求积坐标。

MoM_Basics.getHexasInfoMethod
getHexasInfo(hexameshData::HexahedraMesh{IT, FT}, VolumeBFType::Symbol) where{IT, FT}

根据六面体网格信息 hexameshData 和体基函数类型 VolumeBFType 生成网格信息向量 hexasInfo 和基函数信息向量 bfsInfo

MoM_Basics.getMeshDataMethod
getMeshData(meshFileName::String; meshUnit=:mm)

读取文件中的节点坐标、三角形点、四面体点、六面体点

MoM_Basics.getNodeTriTetraFekoNasMethod
getNodeTriTetraFekoNas(pathname::ST, FT::Type{T}=Precision.FT) where {ST <: AbstractString,T<:AbstractFloat}

读取 .nas 文件中的节点坐标、三角形点、四面体点。

MoM_Basics.getNodeTriTetraHexaNasMethod
getNodeTriTetraHexaNas(pathname::ST; FT::Type{T}=Precision.FT, meshUnit = :mm) where {ST <: AbstractString,T<:AbstractFloat}

读取 .nas 文件中的节点坐标、三角形点、四面体点、六面体点。

MoM_Basics.getTetrasInfoMethod
getTetrasInfo(tetrameshData::TetrahedraMesh{IT, FT}, VolumeBFType::Symbol) where{IT, FT}

根据四面体网格信息 tetrameshData 和体基函数类型 VolumeBFType 生成网格信息向量 tetrasInfo 和基函数信息向量 bfsInfo

MoM_Basics.getTriangleInfoMethod
getTriangleInfo(trianglemeshData::TriangleMesh{IT, FT}) where{IT, FT}

根据网格信息 trianglemeshData 生成三角形信息 trianglesInfo 、RWG基函数信息 rwgsInfo

MoM_Basics.getdatNodeElementParamMethod
getdatNodeElementParam(pathname::ST; FT::Type{T}=Precision.FT, meshUnit = :m) where {ST <: AbstractString,T<:AbstractFloat}

读取 .dat 格式的自定义项目文件。

MoM_Basics.globalObs2LocalObsMethod
globalObs2LocalObs(r̂θϕs_obs::Matrix{r̂θϕInfo{FT}}, l2gRot::StaticMatrix{3,3, FT}) where {FT}

根据全局观测空间角度信息 r̂θϕs_obs 计算给定局部至全局坐标旋转矩阵 l2gRot 下局部坐标的观测空间角度信息。

MoM_Basics.globalrvec2LocalMethod
globalrvec2Local(rvecglobal::Vec3D{T}, l2gRot::StaticMatrix{3,3, FT}, r0InGlobal::Vec3D{FT}) where {T<:Number, FT<:Real}

计算全局向量 rvecglobal 在给定局部至全局坐标旋转矩阵 l2gRot 下的局部坐标,局部坐标的原点在全局坐标的 r0InGlobal 处。

MoM_Basics.globalrvec2LocalMethod
globalrvec2Local(rvecglobal::Vec3D{T}, l2gRot::StaticMatrix{3,3, FT}) where {T<:Number, FT<:Real}

计算全局向量 rvecglobal 在给定局部至全局坐标旋转矩阵 l2gRot 下的局部坐标。

MoM_Basics.globalrvec2LocalMethod
globalrvec2Local(rvecsglobal::Matrix{T}, l2gRot::StaticMatrix{3,3, FT}, r0InGlobal::Vec3D{FT}) where {T<:Number, FT<:Real}

计算全局向量组成的矩阵 rvecsglobal 在给定局部至全局坐标旋转矩阵 l2gRot 下的局部坐标,局部坐标的原点在全局坐标的 r0InGlobal 处。

MoM_Basics.globalrvec2LocalMethod
globalrvec2Local(rvecsglobal::Matrix{T}, l2gRot::StaticMatrix{3,3, FT}) where {T<:Number, FT<:Real}

计算全局向量组成的矩阵 rvecsglobal 在给定局部至全局坐标旋转矩阵 l2gRot 下的局部坐标。

MoM_Basics.greenfuncMethod
greenfunc(R::T) where {T<:AbstractFloat}
greenfunc(pa::Vec3D{T}, pb::Vec3D{T}) where {T<:AbstractFloat}
greenfunc(pa::AbstractVector{T}, pb::AbstractVector{T}) where {T<:AbstractFloat}
greenfunc(R::T, k::T) where {T<:AbstractFloat}
greenfunc(pa::Vec3D{T}, pb::Vec3D{T}, k::T) where {T<:AbstractFloat}

计算归一化自由空间格林函数 $g(R) = exp^{-1im*K_0*R}/R$

MoM_Basics.inputBasicParametersMethod
inputBasicParameters(;frequency::FT = 1e8, ieT::Symbol = :EFIE, CFIEα::FT = 0.6,
meshfilename::String = SimulationParams.meshfilename) where {FT<:AbstractFloat}

输入频率参数 frequency,修改其它仿真参数的函数; 积分方程类型参数 ieT,修改计算过程中采用的积分方程; CFIE混合系数 CFIEα、网格文件名 meshfilename

MoM_Basics.localObs2GlobalObsMethod
localObs2GlobalObs(r̂θϕs_obs::Matrix{r̂θϕInfo{FT}}, l2gRot::StaticMatrix{3,3, FT}) where {FT}

根据局部观测空间角度信息 r̂θϕs_obs 计算给定局部至全局坐标旋转矩阵 l2gRot 下全局坐标的观测空间角度信息。

MoM_Basics.localrvec2GlobalMethod
localrvec2Global(rvecslocal::Vec3D{T}, l2gRot::StaticMatrix{3,3, FT}, r0InGlobal::Vec3D{FT}) where {T<:Number, FT<:Real}

计算局部向量 rveclocal 在给定局部至全局坐标旋转矩阵 l2gRot 下的全局坐标,局部坐标的原点在全局坐标的 r0InGlobal 处。

MoM_Basics.localrvec2GlobalMethod
localrvec2Global(rvecslocal::Vec3D{T}, l2gRot::StaticMatrix{3,3, FT}) where {T<:Number, FT<:Real}

计算局部向量 rveclocal 在给定局部至全局坐标旋转矩阵 l2gRot 下的全局坐标。

MoM_Basics.localrvec2GlobalMethod
localrvec2Global(rvecslocal::Matrix{T}, l2gRot::StaticMatrix{3,3, FT}, r0InGlobal::Vec3D{FT}) where {T<:Number, FT<:Real}

计算局部向量组成的矩阵 rvecslocal 在给定局部至全局坐标旋转矩阵 l2gRot 下的全局坐标,局部坐标的原点在全局坐标的 r0InGlobal 处。

MoM_Basics.localrvec2GlobalMethod
localrvec2Global(rvecslocal::Matrix{T}, l2gRot::StaticMatrix{3,3, FT}) where {T<:Number, FT<:Real}

计算局部向量组成的矩阵 rvecslocal 在给定局部至全局坐标旋转矩阵 l2gRot 下的全局坐标。

MoM_Basics.modiParams!Method
modiParams!(   frequency, ω_0, K_0, λ_0, JKη_0, Jη_0divK, JK_0,
                    k², divJω, mk²div9, mJη_0div4πK, 
                    C4divk², JKηdiv16π, div9Jω, Rsglr, CFIEα)

输入所有参数修改仿真参数的实例。

MoM_Basics.modiSimulationParams!Method
modiSimulationParams!(;ieT::Symbol=SimulationParams.ieT, 
meshfilename::String = SimulationParams.meshfilename, 
meshunit = SimulationParams.meshunit,
SHOWIMAGE = SimulationParams.SHOWIMAGE,
discreteVar = SimulationParams.discreteVar
)

ieT ::Symbol, 积分方程类型,包括 EFIE, MFIE, CFIE等

MoM_Basics.nodes2PolesMethod
nodes2Poles(nodes::Matrix{FT}) where {FT}

将球面散点 nodes 转化为角度信息实例 r̂θϕInfo 数组。

MoM_Basics.radiationDirectionCoeffMethod

radiationDirectionCoeff(md::MagneticDipole{FT}, θϕ::θϕInfo{FT}) where {FT<:Real}

计算方向性系数:$D_m(θ, ϕ) = 4π U_m(θ, ϕ)/P_{rad}$

MoM_Basics.radiationIntegralL0Method
radiationIntegralL0(md::MagneticDipole, θϕ::θϕInfo{FT}) where {FT<:Real}

磁偶极子的远场辐射积分计算函数,注意 θϕ 为偶极子的局部坐标。

MoM_Basics.radiationIntensityU_mMethod
radiationIntensityU_m(md::MagneticDipole{FT}, θϕ::θϕInfo{FT}) where {FT<:Real}

计算磁流源的辐射强度函数 $U_m(θ, ϕ) = \frac{Y_0}{8λ_0²}(|L_θ|² + |L_ϕ|²)$

MoM_Basics.radiationPowerMethod
radiationPower(md::MagneticDipole{FT}) where {FT<:Real}

计算辐射功率。 $P_{rad} = ∫∫ U(θ, ϕ)sinθ dθdϕ$ 对磁偶极子可直接在源缝表面积分: $P_{rad} = ∫∫ |E(r)|²/(2η₀) dxdy$

MoM_Basics.record_BFsInfoMethod
record_BFsInfo(bfT::Symbol, nbf::Int; io::IO = Core.stdout)

io 中记录基函数类型 bfT 和数量 nbf

MoM_Basics.record_CellInfoFunction
record_CellInfo(io::IO = Core.stdout; ntri = 0, ntetra = 0, nhexa = 0)
record_CellInfo(meshData; io::IO = Core.stdout)

io 中记录网格单元数量 ntri, ntetra, nhexa

MoM_Basics.rwgbfConstructerTrianglesInfoModifiers!Method
rwgbfConstructerTrianglesInfoModifiers!(trianglemeshData::TriangleMesh, trianglesInfo::Vector{TriangleInfo{IT, FT}}) where {IT<:Integer, FT<:AbstractFloat}

此函数采用排序算法,将每个边的两个点、在三角形中的对点、三角形、基函数等属性信息放在一个大数组中, 通过对不同的属性排序(如按边所在点随数组排序即可将边相同的点放在一起),即可得到基函数分组信息,以此可构造RWG基函数。 函数完成以下功能:

  1. 构造基函数类型实例数组(类似结构化数组)rwgsInfo记录基函数相关信息,并作为返回值;
  2. 写入三角形类型实例数组trianglesInfo中关于基函数的信息。
MoM_Basics.saveSimulationParamsMethod
saveSimulationParams(;meshfilename::String = SimulationParams.meshfilename, 
sbfT::Symbol = SimulationParams.sbfT, vbfT::Symbol = SimulationParams.vbfT)

保存仿真参数到结果文件中。

MoM_Basics.second_to_otherMethod
second_to_other(v, time_unit)

将以秒为单位的时间数据 v 转换为其它单位 time_unit

MoM_Basics.selectFreeVnIDMethod
selectFreeVnID(uvw::AbstractVector{FT}, i::Integer) where {FT}

根据 $uvw$ 计算得到第 i 个面所在的基函数的 正常高斯求积 时 “自由端( $r₀$ )” 的序号。

MoM_Basics.selectFreeVnSSglrIDMethod
selectFreeVnSSglrID(uvw::AbstractVector{FT}, i::Integer) where {FT}

根据 $uvw$ 得到第 i 个面所在的基函数的 处理超奇异性 求积时 “自由端( $r₀$ )” 的序号。

MoM_Basics.selectFreeVnSglrIDMethod
selectFreeVnSglrID(uvw::AbstractVector{FT}, i::Integer) where {FT}

根据 $uvw$ 得到第 i 个面所在的基函数的 处理奇异性 求积时 “自由端( $r₀$ )” 的序号。

MoM_Basics.setGeosPermittivity!Method
setGeosPermittivity!(geosInfo::AbstractVector{VT}, εᵣ::CT = 1.0(1+0im)) where {VT<:TriangleInfo, CT<:Complex}

设置三角形网格介电常数,目前为空派发以方便体面积分方程计算中的多重派发。

MoM_Basics.setGeosPermittivity!Method
setGeosPermittivity!(geosInfo::AbstractVector{VT}, εᵣ::CT = 1.0(1+0im)) where {VT<:VSCellType, CT<:Complex}
setGeosPermittivity!(geosInfo::AbstractVector{VT}, εᵣs::T) where {VT<:VSCellType, T<:AbstractVector}
setGeosPermittivity!(geosInfo::AbstractVector{VT}, εᵣ::CT = 1.0(1+0im)) where {VT<:AbstractVector, CT<:Complex}

设置四面体、六面体的介电常数 εᵣ ,并同时设置介质对比度,修改此函数以得到对应的数据。

MoM_Basics.setHexaCoor!Method
setHexaCoor!( hexasInfo::Vector{HexahedraInfo{IT, FT, CT}}, hexaMeshData::HexahedraMesh{IT, FT}) where {IT<:Integer, FT<:AbstractFloat, CT<:Complex}

在预分配好的六面体数组 hexasInfo 里写入 hexaMeshData 中对应的六面体编号、点坐标、中心位置数据。

MoM_Basics.setHexaParam!Method
setHexaParam!(hexasInfo::Vector{HexahedraInfo{IT, FT, CT}}) where {IT<:Integer, FT<:AbstractFloat, CT<:Complex}

计算六面体体积、面外法向量、面积,并写入 hexasInfo

MoM_Basics.setPrecision!Method
setPrecision!(FT::Type{T}) where {T<:Union{Float32, Float64}}

设置仿真精度为 FT

MoM_Basics.setQuad4Hexas!Method
setQuad4Hexas!(hexameshData::HexahedraMesh{IT, FT}, hexasInfo::Vector{HexahedraInfo{IT, FT, CT}}, ::Val{:PWC}) where {IT, FT, CT}

计算构成六面体的所有四边形,并将这些信息写入六面体 hexasInfo,给分片常数 (PWC) 基函数赋值。

MoM_Basics.setQuad4Hexas!Method
setQuad4Hexas!(hexameshData::HexahedraMesh{IT, FT}, hexasInfo::Vector{HexahedraInfo{IT, FT, CT}}, ::Val{:RBF}) where {IT, FT, CT}

计算构成六面体的所有四边形,并写入六面体 hexasInfo,给屋顶基函数 (RBF) 基函数赋值。

MoM_Basics.setTetraCoor!Method
setHexaCoor!( tetrasInfo::Vector{TetrahedraInfo{IT, FT, CT}}, tetraMeshData::TetrahedraMesh{IT, FT}) where {IT<:Integer, FT<:AbstractFloat, CT<:Complex}

在预分配好的四面体数组 tetrasInfo 里写入 tetraMeshData 中对应的四面体编号、点坐标、中心位置数据。

MoM_Basics.setTetraParam!Method
setTetraParam!(tetrasInfo::Vector{TetrahedraInfo{IT, FT, CT}}) where {IT<:Integer, FT<:AbstractFloat, CT<:Complex}

计算四面体体积、面外法向量、面积,并写入 tetrasInfo

MoM_Basics.setTriParam!Method
setTriParam!(triangleInfo::TriangleInfo)

计算三角形边长、边外法向量、面法向量、面积,直接写入 triangleInfo

MoM_Basics.setTriangles4Tetras!Method
setTriangles4Tetras!(tetrameshData::TetrahedraMesh{IT, FT}, tetrasInfo::Vector{TetrahedraInfo{IT, FT, CT}}, ::Val{:PWC}) where {IT, FT, CT}

计算构成四面体的所有三角形,并将这些信息写入四面体 tetrasInfo,给分片常数 (PWC) 基函数赋值。

MoM_Basics.setTriangles4Tetras!Method
setTriangles4Tetras!(tetrameshData::TetrahedraMesh{IT, FT}, tetrasInfo::Vector{TetrahedraInfo{IT, FT, CT}}, ::Val{:SWG}) where {IT, FT, CT}

计算构成四面体的所有三角形,并将这些信息写入四面体 tetrasInfo,给 SWG 基函数赋值。

MoM_Basics.setTricoor!Method
setTricoor!( trianglesInfo::Vector{TriangleInfo{IT, FT}}, TriangleMeshData::TriangleMesh{IT, FT}) where {IT<:Integer, FT<:AbstractFloat}

在预分配好的三角形数组 trianglesInfo 里写入 TriangleMeshData 中对应的三角形编号、点坐标、中心位置数据。

MoM_Basics.setdiffArray!Function
setdiffArray!(ary[, dim = 1])

将阵列天线 arydim 方向一半单元设置为反相位,从而实现差方向图。

MoM_Basics.setδκ!Method
setδκ!(hexasInfo::AbstractVector{HexahedraInfo{IT, FT, CT}}) where {IT<:Integer, FT<:Real, CT<:Complex{FT}}

设置六面体网格信息 hexasInfo 中每个面上的介质对比度差值。

MoM_Basics.setδκ!Method
setδκ!(geosInfo::AbstractVector{VT}) where {VT<:VolumeCellType}

设置体网格信息 geosInfo 中每个面上的介质对比度差值。

MoM_Basics.show_memory_timeFunction
show_memory_time(io::IO=Core.stdout; mem_unit = :MB, time_unit = :s)

展示时间内存消耗数据记录。

MoM_Basics.sincmathMethod
sincmath(x::T) where{T<:Number}

Julia 自带 Base.sinc 函数计算的是归一化辛格函数:

$sinc(x) = sin(πx)/(πx)$

此处借用 sinc,定义数学领域的非归一化 sinc 函数,即计算:

$sin(x)/x$

MoM_Basics.sourceEfieldMethod
sourceEfield(plw::PlaneWave, r)

计算平面波 plw 在全局坐标下给定位置 r 处的电场。

MoM_Basics.sourceEfieldMethod
sourceEfield(ary::AT, rvec::AbstractVector{FT}) where {FT<:Real,  AT<:AbstractAntennaArray}

计算天线阵列 ary 在全局坐标下给定位置 rvec 处的电场。

MoM_Basics.sourceEfieldMethod
sourceEfield(md::MagneticDipole{FT}, r_observe::Vec3D{FT};  r_coortype::Symbol=:C) where {FT<:Real}

计算磁偶极 md 在全局坐标下给定位置 rvec 处的电场。

MoM_Basics.sourceEfieldMethod
sourceEfield(sources::Vector{ST}, rvec::AbstractVector{FT}) where {FT<:Real, ST<:ExcitingSource}

计算源向量 sources 在全局坐标下给定位置 rvec 处的远场电场。

MoM_Basics.sourceFarEfieldMethod
sourceFarEfield(ary::AT, r̂θϕ::r̂θϕInfo{FT}) where {FT<:Real, AT<:AbstractAntennaArray}

计算天线阵列 ary 在全局坐标下给定方向 r̂θϕ 的远场电场。

MoM_Basics.sourceFarEfieldMethod
sourceFarEfield(md::MagneticDipole{FT}, r̂θϕ::r̂θϕInfo{FT}) where {FT<:Real}

计算磁偶极 md 在全局坐标下给定方向 r̂θϕ 的远场电场。

MoM_Basics.sourceFarEfieldMethod
sourceFarEfield(sources::Vector{ST}, r̂θϕ::r̂θϕInfo{FT}) where {FT<:Real, ST<:ExcitingSource}

计算源向量 sources 在全局坐标下给定方向 r̂θϕ 的远场电场。

MoM_Basics.sourceHfieldMethod
sourceHfield(plw::PlaneWave, r)

计算平面波 plw 在全局坐标下给定位置 r 处的磁场。

MoM_Basics.sourceLocalEfieldMethod
sourceLocalEfield(ary::AT, rvec::AbstractVector{FT}) where {FT<:Real,  AT<:AbstractAntennaArray}

计算天线阵列 ary 在阵列局部坐标下给定位置 rvec 处的电场。

MoM_Basics.sourceLocalEfieldMethod
sourceLocalEfield(md::MagneticDipole{FT}, r_observe::Vec3D{FT};  r_coortype::Symbol=:C) where {FT<:Real}

计算磁偶极 md 在磁偶极局部坐标给定位置 rvec 处的电场。

MoM_Basics.sourceLocalFarEfieldMethod
sourceLocalFarEfield(ary::AT, r̂θϕ::r̂θϕInfo{FT}) where {FT<:Real, AT<:AbstractAntennaArray}

计算天线阵列 ary 在阵列坐标下给定方向 r̂θϕ 的远场电场。

MoM_Basics.sourceLocalFarEfieldMethod
sourceLocalFarEfield(md::MagneticDipole{FT}, r̂θϕ::r̂θϕInfo{FT}) where {FT<:Real}

计算磁偶极 md 在磁偶极局部坐标下给定方向 r̂θϕ 的远场电场。

MoM_Basics.sphere2cartMethod
sphere2cart(coor_sphere::AbstractVector{T}) where T<:Real
sphere2cart(coor_sphere...)
sphere2cart(r::T, θϕ::θϕInfo{T}) where T<:Real

将球坐标 coor_sphere 转换到直角坐标。

MoM_Basics.updateVSBFTParams!Method
updateVSBFTParams!(;sbfT = :nothing, vbfT = :nothing)

通过输入符号更新体、面基函数类型常数实例。

MoM_Basics.updateVSBFTypes!Method
updateVSBFTypes!(;sbfType = BasisFunctionType, vbfType = BasisFunctionType)

更新体、面基函数类型常数实例。

MoM_Basics.update_orient!Method
update_orient!(ary::AT; aryorient, sourceorientlc[, orientunit = :rad]) where {AT<:AbstractAntennaArray}

通过机械旋转更新天线阵列 ary 的阵列指向为 aryorient,天线单元指向为 sourceorientlc,指向角单位为 orientunit

MoM_Basics.update_orient!Method
update_orient!(md::MagneticDipole{FT}, orient, unit = :rad) where {FT <: Real}

更新磁偶极 md 指向为 orient

MoM_Basics.update_phase!Method
update_phase!(md::MagneticDipole{FT}, phase) where {FT <: Real}

设置磁偶极 md 的相位为 phase

MoM_Basics.θϕInfofromCartMethod
θϕInfofromCart(rvec::Vec3D{FT}) where {FT<:Real}

从直角坐标 rvec 计算三角函数:$sinθ, cosθ, sinϕ, cosϕ$

MoM_Basics.@clockMacro
clock(message, ex)

将表达式 ex 的运行时间以 message 为键保存在字典 timer 中。