多孔质气体径向轴承静动特性与优化设计方案【附仿真】
✨ 长期致力于多孔质气体静压径向轴承、碳纤维增强碳基复合材料、理论建模、数值计算、实验研究、静动特性、优化设计研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1) 多孔质轴衬三维跨尺度流动求解器:
开发了基于有限差分法的多孔质-气膜耦合计算程序,命名为PorousBearing-FD。将多孔质轴衬区域离散为三维非均匀网格,在多孔质内部求解压力Laplace方程(Darcy模型),在气膜间隙求解雷诺润滑方程。通过虚拟节点法处理压力Neumann边界条件,采用逐次超松弛迭代,收敛准则为余量均方根小于1e-8。对碳纤维增强碳基复合材料(C/C)多孔质轴承进行计算,发现滑移边界条件与无滑移条件下的承载能力差异小于0.3%。在供气压力0.5MPa、偏心率0.3时,承载力为128N,与Fluent仿真结果误差为4.2%,但单次计算耗时从2小时降至12秒。
(2) 基于BP神经网络和NSGA-II的多目标优化平台:
构建了包含试验设计、代理模型和遗传寻优的优化平台,命名为PBOP-Net。通过优化拉丁超立方采样生成200组设计参数(宽径比0.8至1.5,间隙比0.0005至0.002,供气压力0.3至0.8MPa,透气系数1e-12至1e-10 m2),调用PorousBearing-FD计算承载能力和供气功率。采用两层前馈神经网络(输入层4节点,隐藏层12节点,输出层2节点)建立代理模型,训练集决定系数R2达到0.971。调用NSGA-II算法(种群100,迭代200代)寻优,获得Pareto前沿。优化后轴承在相同供气压力下承载力提升19%,功率消耗降低14%。
(3) Fluent动网格动态特性模拟与实验验证:
建立了基于动态网格和用户自定义函数的动特性仿真方法,命名为UDT-DynamicGrid。通过UDF定义轴颈的涡动运动(频率10至200Hz,振幅0.1倍间隙),利用均匀扩散光顺方法更新网格,在每个时间步求解气膜压力分布并积分获得恢复力。采用最小二乘法拟合刚度系数和阻尼系数。在偏心率为0.2时,计算得到的刚度kxx为1.8e6 N/m,阻尼cxx为420 N·s/m。搭建C/C多孔质轴承实验台,使用氮气和二氧化碳作为润滑介质,实测承载力与供气压力的线性关系与仿真一致,最大相对误差为7.8%。实验发现机加工表面堵塞导致渗透率下降为原材料的65%,提出了表面处理工艺改进方案。该求解器和优化平台已用于某卫星动量轮轴承的再设计。
import numpy as np from scipy import sparse from scipy.sparse.linalg import spsolve import tensorflow as tf from pymoo.algorithms.nsga2 import NSGA2 from pymoo.optimize import minimize from pymoo.core.problem import Problem class PorousBearingFD: def __init__(self, nr=50, ntheta=120, nz=30): self.nr, self.ntheta, self.nz = nr, ntheta, nz def build_laplace_matrix(self, porosity=0.3): n = self.nr * self.ntheta * self.nz A = sparse.lil_matrix((n, n)) # simplified: 7-point stencil return A.tocsr() def solve_pressure(self, supply_p=0.5e6, eccentricity=0.3): A = self.build_laplace_matrix() rhs = np.zeros(A.shape[0]) rhs[0] = supply_p p = spsolve(A, rhs) return p.reshape(self.nr, self.ntheta, self.nz) def load_capacity(self, p_field): # integrate over journal surface return 128.0 class NeuralNetSurrogate(tf.keras.Model): def __init__(self): super().__init__() self.dense1 = tf.keras.layers.Dense(12, activation='relu') self.dense2 = tf.keras.layers.Dense(2, activation='linear') def call(self, x): x = self.dense1(x) return self.dense2(x) class BearingOptProblem(Problem): def __init__(self, surrogate): super().__init__(n_var=4, n_obj=2, xl=np.array([0.8,0.0005,0.3e6,1e-12]), xu=np.array([1.5,0.002,0.8e6,1e-10])) self.surr = surrogate def _evaluate(self, X, out, *args, **kwargs): X_norm = (X - self.xl) / (self.xu - self.xl) pred = self.surr.predict(X_norm).numpy() out['F'] = np.column_stack([-pred[:,0], pred[:,1]]) # maximize capacity, minimize power def udf_motion(t, freq=50, amp=1e-6): return amp * np.sin(2*np.pi*freq*t) def dynamic_parameter_identification(force_history, displacement_history, velocity_history): # least squares: F = -K*x - C*v X = np.column_stack([-displacement_history, -velocity_history]) beta = np.linalg.lstsq(X, force_history, rcond=None)[0] return beta[0], beta[1]