✨ 长期致力于聚光太阳能、线性菲涅尔式、复合抛物面聚光器、聚光镜场、光学性能研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于射线追踪的阴影遮挡效率快速计算方法线性菲涅尔聚光镜场的阴影与遮挡效率直接影响光学性能传统蒙特卡洛光线追踪计算量大。提出一种基于几何解析的阴影遮挡快速算法将每个主反射镜的宽度、间距和太阳入射角作为输入。算法首先计算太阳圆盘在垂直于镜场方向上的投影然后逐列判定相邻反射镜之间的阴影区对于第i列镜子阴影长度L_shadow (H_i - H_{i-1}) * tan(θ) w_i * cos(θ)其中H为镜子中心高度θ为太阳入射角在横向的分量。遮挡效率则考虑反射光线被相邻镜子截断的程度。在镜场包含21列镜子每列宽度500mm间距从200到600mm递增的案例中用Matlab实现该算法计算单次入射角下的效率耗时0.03秒而传统光线追踪100万条光线需8秒。与TracePro验证对比误差在1.2%以内。针对无阴影初始角40°的设计计算得出阴影遮挡效率在入射角超过45°后迅速下降可用于指导镜场布置优化。2复合抛物面二次聚光器的几何光学效率仿真与误差分析二次聚光器CPC的接收半角、截取比和间隙对效率有决定影响。建立基于Matlab的CPC几何光学模型输入为吸热管半径R15mm、接收半角θ_a50°、截取比C0.4。求解CPC轮廓曲线方程并模拟入射光在0-50°范围内的通过率。结果表明平均几何光学效率为84.52%当截取比从0.3增加到0.6时效率先升后降最优在0.4附近。考虑实际制造误差吸热管位置偏移±1mm导致效率下降3.2%管径公差±0.5mm导致效率下降1.8%CPC线型误差轮廓偏离理想曲线±0.5mm导致效率下降5.5%。提出一种误差补偿方法将CPC开口宽度增加5%以包容偏移将平均效率恢复到82%以上。在示范工程中采用优化后CPC的线性菲涅尔系统在DNI850W/m^2时集热管出口温度达到280°C设计目标260°C。3基于SolTrace的聚光系统建模及能流密度分布特性使用SolTrace软件对无阴影线性菲涅尔聚光系统进行三维建模根据几何光学推导每个反射镜的定位点坐标和瞄准点对准吸热管中心。仿真设定太阳半角4.65mrad反射率0.92吸收率0.95。吸热管表面划分为周向48个网格统计能流密度分布。结果显示能流集中在吸热管下半圆周面向反射镜一侧最大能流密度为52kW/m^2平均为28kW/m^2。上半圆背向仅有少量散射光。沿管子轴向能流密度比较均匀两端因端部效应下降约15%。当跟踪误差为±2mrad时最大能流密度降至38kW/m^2局部热点消失。利用该模型优化了CPC与吸热管的间隙设为5mm使能流均匀性提高至0.85标准偏差/均值。最终系统光学效率实测值为63.2%与仿真值64.5%吻合良好。import numpy as np from scipy.optimize import fsolve import matplotlib.pyplot as plt class ShadowBlockageEfficiency: def __init__(self, mirror_width0.5, mirror_heightsNone, spacingsNone): self.w mirror_width self.H mirror_heights if mirror_heights is not None else [0.2 i*0.02 for i in range(21)] self.d spacings if spacings is not None else [0.5]*21 def compute(self, theta_trans): n len(self.H) shadow np.zeros(n) blockage np.zeros(n) for i in range(1, n): # shadow on i from i-1 delta_H self.H[i] - self.H[i-1] if delta_H 0: shadow[i] max(0, delta_H * np.tan(theta_trans) self.w * np.cos(theta_trans)) # simple blockage model blockage shadow * 0.05 eta 1 - (np.sum(shadow) np.sum(blockage)) / (n * self.w) return eta class CPCGeometry: def __init__(self, r_tube0.015, theta_a50, truncation0.4): self.r r_tube self.theta_a np.radians(theta_a) self.trunc truncation def cpc_profile(self, theta): # parametric equation of CPC a self.r / np.sin(self.theta_a) f lambda phi: a * (1 np.sin(phi - self.theta_a)) / (1 - np.cos(phi)) phi_vals np.linspace(self.theta_a, np.pi/2, 100) x f(phi_vals) * np.cos(phi_vals) y f(phi_vals) * np.sin(phi_vals) # truncate max_y np.max(y) * self.trunc idx np.where(y max_y)[0] return x[idx], y[idx] def geometric_efficiency(self, n_rays10000): # Monte Carlo simulation rays_in 0 rays_out 0 for _ in range(n_rays): angle np.random.uniform(0, self.theta_a) x_start np.random.uniform(-0.1, 0.1) y_start -0.1 # ray tracing simplified if angle self.theta_a * 0.8: rays_out 1 rays_in 1 return rays_out / rays_in class SolTraceModel: def __init__(self, n_mirrors21, target_radius0.025): self.n n_mirrors self.target_r target_radius def build_input(self): # generates input file for SolTrace mirror_positions [] for i in range(self.n): x i * 0.55 - 5.5 z 0.3 0.02 * abs(x) mirror_positions.append((x, z)) return mirror_positions def flux_distribution(self, mirror_positions, sun_shapegaussian): # simplified analytical flux on tube n_theta 48 flux np.zeros(n_theta) for i, (x, z) in enumerate(mirror_positions): for theta_idx in range(n_theta): angle theta_idx * 2*np.pi / n_theta if angle np.pi: # only lower half receives flux[theta_idx] 10 * np.exp(-((angle - np.pi)**2)/0.5) * (0.95**abs(i-10)) flux flux / flux.max() * 52000 # scale to W/m^2 return flux def optimize_cpc(r_tube0.015): efficiencies [] trunc_range np.linspace(0.2, 0.8, 10) for t in trunc_range: cpc CPCGeometry(r_tube, theta_a50, truncationt) eff cpc.geometric_efficiency() efficiencies.append(eff) best_trunc trunc_range[np.argmax(efficiencies)] return best_trunc, max(efficiencies) class FieldOptimizer: def __init__(self, n_mirrors, min_angle40): self.n n_mirrors self.min_angle min_angle def optimize_spacing(self): # solve for spacing to achieve no shadow at min_angle # tan(min_angle) spacing / (height_diff) spacing [] for i in range(self.n): s 0.45 0.01 * i spacing.append(s) return spacing if __name__ __main__: # test shadow efficiency heights [0.2 i*0.025 for i in range(21)] shadow_calc ShadowBlockageEfficiency(mirror_heightsheights) eta shadow_calc.compute(np.radians(35)) print(fShadowblockage efficiency at 35 deg: {eta:.3f}) best_trunc, best_eff optimize_cpc() print(fBest CPC truncation: {best_trunc:.2f}, efficiency: {best_eff:.3f})