calc_unsteady_cavity 函数说明文档

功能描述

该函数用于计算非定常轴对称空腔的形状和空腔轴线的弯曲。通过考虑模型运动、空化数变化以及水压力扰动等因素,更新空腔半径和轴线位置。

参数说明

参数名 类型 描述
PI float 圆周率
Rn float 空化器无量纲半径
HX float 计算步长
Jend int 当前计算步
V0 float 模型速度
FlagPath bool 是否为路径计算标志
T ndarray 时间数组
XcBeg ndarray 起始空腔边界数组
V ndarray 速度数组
AK1 float 经验常数
w2 float 相关参数
SG ndarray 空化数数组
P1w ndarray 水压力扰动数组
Rcav ndarray 空腔半径数组
DS ndarray 空腔截面膨胀速度数组
Ypr1 ndarray 下空腔轮廓Y坐标数组
Ypr2 ndarray 上空腔轮廓Y坐标数组
Yax0 ndarray 空腔轴线Y坐标数组
Cx0 float 阻力系数
DeltaRad float 空化器角度的弧度值
Lc0 float 空腔长度相关参数

返回值

返回值名 类型 描述
Rcav ndarray 更新后的空腔半径数组
Ypr1 ndarray 更新后的下空腔轮廓Y坐标数组
Ypr2 ndarray 更新后的上空腔轮廓Y坐标数组

数学公式

空腔半径更新

对于每个计算步 i,计算空腔截面积 Si

Si=Sagr+AK1work1(w2VJend+1iSGJend+1iwork1)S_i = S_{agr} + A K_1 \cdot work1 \cdot (w_2 \cdot V_{Jend+1-i} - SG_{Jend+1-i} \cdot work1)

其中,work1 是时间相关的修正项:

work1=0.5(TJendXcBeg4VJendTJend+1i)work1 = 0.5 \cdot (T_{Jend} - \frac{XcBeg_4}{V_{Jend}} - T_{Jend+1-i})

水压力扰动修正

空腔截面积 Si 由于水压力扰动进行修正:

Si=SiAK1HXDSP1/4Si = Si - A K_1 \cdot HX \cdot DSP1 / 4

其中,DSP1 是水压力扰动的累积项:

DSP1=DSP1+(TJendTJend+1i)P1wJend+1i+(TJendTJend+2i)P1wJend+2iDSP1 = DSP1 + (T_{Jend} - T_{Jend+1-i}) \cdot P1w_{Jend+1-i} + (T_{Jend} - T_{Jend+2-i}) \cdot P1w_{Jend+2-i}

空腔截面膨胀速度

空腔截面膨胀速度 DS 计算如下:

DSi=AK1(0.5w2VJend+1iwork1SGJend+1i)DS_i = A K_1 \cdot (0.5 \cdot w_2 \cdot V_{Jend+1-i} - work1 \cdot SG_{Jend+1-i})

水压力扰动引起的变形项

空腔截面膨胀速度 DS 由于水压力扰动进行修正:

DSi=DSiAK1HXDDSP1/4DS_i = DS_i - A K_1 \cdot HX \cdot DDSP1 / 4

其中,DDSP1 是水压力扰动的累积项:

DDSP1=DDSP1+P1wJend+1i+P1wJend+2iDDSP1 = DDSP1 + P1w_{Jend+1-i} + P1w_{Jend+2-i}

空腔轴线弯曲

空腔轴线弯曲由空化器侧向力和位移引起,计算如下:

xi=(i1)HXxi = (i - 1) \cdot HX
Cy=0.5Cx0sin(2(AlphaJendi+1+DeltaRad))Cy = -0.5 \cdot Cx0 \cdot \sin(2 \cdot (Alpha_{Jend-i+1} + DeltaRad))
hfi=CyRn(0.46SGJendi+1VJendi+12+2xiLc0Rn)hfi = -Cy \cdot Rn \cdot \left(0.46 - \frac{SG_{Jend-i+1}}{V_{Jend-i+1}^2} + \frac{2 \cdot xi}{Lc0 \cdot Rn}\right)
Ypr2i=Yax0Jendi+1+hfi+RcavJend,iYpr2_i = Yax0_{Jend-i+1} + hfi + Rcav_{Jend,i}
Ypr1i=Yax0Jendi+1+hfiRcavJend,iYpr1_i = Yax0_{Jend-i+1} + hfi - Rcav_{Jend,i}

示例调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 示例数据
PI = np.pi
Rn = 0.1
HX = 0.1
Jend = 10
V0 = 10.0
FlagPath = False
T = np.linspace(0, 1, Jend)
XcBeg = np.array([0.0, 0.1, 0.2, 0.3])
V = np.full(Jend, V0)
AK1 = 0.1
w2 = 0.2
SG = np.full(Jend, 0.5)
P1w = np.zeros(Jend)
Rcav = np.zeros((Jend, Jend))
DS = np.zeros(Jend)
Ypr1 = np.zeros(Jend)
Ypr2 = np.zeros(Jend)
Yax0 = np.zeros(Jend)
Cx0 = 0.8275
DeltaRad = np.deg2rad(10)
Lc0 = 1.0

# 创建类实例
calculator = UnsteadyCavityCalculator(PI, Rn, HX, Jend, V0, FlagPath, T, XcBeg, V, AK1, w2, SG, P1w, Rcav, DS, Ypr1, Ypr2, Yax0, Cx0, DeltaRad, Lc0)

# 调用计算方法
calculator.calc_unsteady_cavity()

# 输出结果
print("更新后的空腔半径数组:")
print(calculator.Rcav)
print("更新后的下空腔轮廓Y坐标数组:")
print(calculator.Ypr1)
print("更新后的上空腔轮廓Y坐标数组:")
print(calculator.Ypr2)

备注

该类实现了Fortran子程序CalcUnsteadyCavity的核心功能,包括计算非定常轴对称空腔的形状和空腔轴线的弯曲。通过详细的注释和参数说明,使其更易于理解和使用。变量名称沿用了原程序的命名,以便于对照和理解。在子函数内部,先从self中取出变量到最前,在计算完成后将需要更改的变量重新赋值回self,并加上了变量标注,以提升可读性。

1