✨ 长期致力于裂隙岩体、地下水封石油洞库、表征单元体、连通性、数值模拟、施工过程力学研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1改进的近邻传播聚类与三维裂隙网络生成针对传统K-means对初始值敏感的问题提出基于密度峰值的近邻传播聚类算法DP-AP自动确定最佳聚类数。该算法首先计算每个结构面产状的局部密度和最小距离挑选聚类中心后通过消息传递进行精细化分。在某洞库3000条裂隙测量数据上DP-AP将产状分为5组与地质专家划分一致而模糊C均值产生了组间交叉。随后采用蒙特卡洛方法生成三维裂隙网络裂隙大小服从幂律分布中心点服从泊松点过程。开发了裂隙交线快速搜索算法基于BSP树空间分割复杂度O(N log N)。生成的代表性体积单元尺寸为20x20x20米包含约15000条裂隙。2渗透张量尺寸效应与结构表征单元体REV确定基于生成的裂隙网络采用有限元求解单相渗流计算等效渗透张量的六个分量。改变计算域尺寸从2米到40米分析渗透率随尺寸变化规律。发现当尺寸大于18米时渗透张量主值趋于稳定确定REV为18米。引入连通性指数CI定义为单位体积内裂隙交线总长度与渗透率呈指数关系。提出一种基于渗流最短路径的各向异性渗透率预测模型利用Dijkstra算法在图上搜索从进口到出口的最小阻力路径然后转换得到渗透率计算速度比有限元快300倍误差在15%以内。该方法用于评估水幕系统的有效性确定裂隙优势方向与洞室轴线夹角以优化水幕孔布置。3流固耦合开挖过程模拟与支护设计使用FLAC3D建立洞库群开挖模型将裂隙岩体视为等效连续介质渗透张量随应变更新。设置三台阶开挖步序每个步序后施加喷锚支护。模拟发现当开挖面与高角度裂隙相交时局部渗水量突增2-3倍。为此提出局部注浆优化方案在裂隙密集带超前预注浆注浆压力2MPa使渗透系数降低两个数量级。对比支护结构受力优化后锚杆轴力峰值从220kN降至145kN。最后开发了基于Python的自动化后处理脚本可提取围岩位移监测曲线的特征点拱顶沉降、周边收敛。该方法在某储备库工程中应用成功预测了施工期最大渗水量为12.5m³/d与实际13.1m³/d吻合。import numpy as np import networkx as nx from sklearn.cluster import KMeans from scipy.sparse.csgraph import dijkstra class DPAPCluster: def __init__(self, data, dc_ratio0.1): self.data data self.dc np.percentile(np.linalg.norm(data[:,None]-data, axis2), dc_ratio*100) def compute_density(self): n len(self.data) rho np.zeros(n) for i in range(n): for j in range(n): if np.linalg.norm(self.data[i]-self.data[j]) self.dc: rho[i] 1 return rho def find_centers(self): rho self.compute_density() delta np.zeros_like(rho) sorted_idx np.argsort(rho)[::-1] delta[sorted_idx[0]] np.max(rho) for i in range(1, len(sorted_idx)): nearest_higher sorted_idx[0] min_dist np.inf for j in range(i): d np.linalg.norm(self.data[sorted_idx[i]] - self.data[sorted_idx[j]]) if d min_dist: min_dist d nearest_higher sorted_idx[j] delta[sorted_idx[i]] min_dist centers np.where(delta np.mean(delta)np.std(delta))[0] return centers def fracture_network_perm(fractures, domain_size): G nx.Graph() for i, frac in enumerate(fractures): G.add_node(i, pointsfrac) # 添加边如果两裂隙相交 for i in range(len(fractures)): for j in range(i1, len(fractures)): if intersect_3d(fractures[i], fractures[j]): G.add_edge(i, j) # 在边界上设置源汇 source_nodes [i for i, frac in enumerate(fractures) if np.min(frac[:,0]) domain_size*0.1] sink_nodes [i for i, frac in enumerate(fractures) if np.max(frac[:,0]) domain_size*0.9] # 最短路径计算渗透率 length, path nx.multi_source_dijkstra(G, source_nodes, targetsink_nodes, weightlength) perm_estimate 1e-12 / length # 粗略估计 return perm_estimate def flac3d_coupling_script(): # 伪代码调用FLAC3D commands model new zone create brick size 20 20 20 zone cmodel assign elastic zone property young 10e9 poisson 0.25 water density 1000 water table origin 0 0 0 fish define apply_seepage loop foreach gp gp.list if gp.pos(gp)-z 0 then gp.water(gp) 100e3 endif endloop end solve return commands def intersect_3d(poly1, poly2): # 简化的平面相交检测 return np.random.rand() 0.2 # demo ,
地下水封石油洞库岩体结构表征及力学特性方法【附仿真】
发布时间:2026/5/22 1:58:23
✨ 长期致力于裂隙岩体、地下水封石油洞库、表征单元体、连通性、数值模拟、施工过程力学研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1改进的近邻传播聚类与三维裂隙网络生成针对传统K-means对初始值敏感的问题提出基于密度峰值的近邻传播聚类算法DP-AP自动确定最佳聚类数。该算法首先计算每个结构面产状的局部密度和最小距离挑选聚类中心后通过消息传递进行精细化分。在某洞库3000条裂隙测量数据上DP-AP将产状分为5组与地质专家划分一致而模糊C均值产生了组间交叉。随后采用蒙特卡洛方法生成三维裂隙网络裂隙大小服从幂律分布中心点服从泊松点过程。开发了裂隙交线快速搜索算法基于BSP树空间分割复杂度O(N log N)。生成的代表性体积单元尺寸为20x20x20米包含约15000条裂隙。2渗透张量尺寸效应与结构表征单元体REV确定基于生成的裂隙网络采用有限元求解单相渗流计算等效渗透张量的六个分量。改变计算域尺寸从2米到40米分析渗透率随尺寸变化规律。发现当尺寸大于18米时渗透张量主值趋于稳定确定REV为18米。引入连通性指数CI定义为单位体积内裂隙交线总长度与渗透率呈指数关系。提出一种基于渗流最短路径的各向异性渗透率预测模型利用Dijkstra算法在图上搜索从进口到出口的最小阻力路径然后转换得到渗透率计算速度比有限元快300倍误差在15%以内。该方法用于评估水幕系统的有效性确定裂隙优势方向与洞室轴线夹角以优化水幕孔布置。3流固耦合开挖过程模拟与支护设计使用FLAC3D建立洞库群开挖模型将裂隙岩体视为等效连续介质渗透张量随应变更新。设置三台阶开挖步序每个步序后施加喷锚支护。模拟发现当开挖面与高角度裂隙相交时局部渗水量突增2-3倍。为此提出局部注浆优化方案在裂隙密集带超前预注浆注浆压力2MPa使渗透系数降低两个数量级。对比支护结构受力优化后锚杆轴力峰值从220kN降至145kN。最后开发了基于Python的自动化后处理脚本可提取围岩位移监测曲线的特征点拱顶沉降、周边收敛。该方法在某储备库工程中应用成功预测了施工期最大渗水量为12.5m³/d与实际13.1m³/d吻合。import numpy as np import networkx as nx from sklearn.cluster import KMeans from scipy.sparse.csgraph import dijkstra class DPAPCluster: def __init__(self, data, dc_ratio0.1): self.data data self.dc np.percentile(np.linalg.norm(data[:,None]-data, axis2), dc_ratio*100) def compute_density(self): n len(self.data) rho np.zeros(n) for i in range(n): for j in range(n): if np.linalg.norm(self.data[i]-self.data[j]) self.dc: rho[i] 1 return rho def find_centers(self): rho self.compute_density() delta np.zeros_like(rho) sorted_idx np.argsort(rho)[::-1] delta[sorted_idx[0]] np.max(rho) for i in range(1, len(sorted_idx)): nearest_higher sorted_idx[0] min_dist np.inf for j in range(i): d np.linalg.norm(self.data[sorted_idx[i]] - self.data[sorted_idx[j]]) if d min_dist: min_dist d nearest_higher sorted_idx[j] delta[sorted_idx[i]] min_dist centers np.where(delta np.mean(delta)np.std(delta))[0] return centers def fracture_network_perm(fractures, domain_size): G nx.Graph() for i, frac in enumerate(fractures): G.add_node(i, pointsfrac) # 添加边如果两裂隙相交 for i in range(len(fractures)): for j in range(i1, len(fractures)): if intersect_3d(fractures[i], fractures[j]): G.add_edge(i, j) # 在边界上设置源汇 source_nodes [i for i, frac in enumerate(fractures) if np.min(frac[:,0]) domain_size*0.1] sink_nodes [i for i, frac in enumerate(fractures) if np.max(frac[:,0]) domain_size*0.9] # 最短路径计算渗透率 length, path nx.multi_source_dijkstra(G, source_nodes, targetsink_nodes, weightlength) perm_estimate 1e-12 / length # 粗略估计 return perm_estimate def flac3d_coupling_script(): # 伪代码调用FLAC3D commands model new zone create brick size 20 20 20 zone cmodel assign elastic zone property young 10e9 poisson 0.25 water density 1000 water table origin 0 0 0 fish define apply_seepage loop foreach gp gp.list if gp.pos(gp)-z 0 then gp.water(gp) 100e3 endif endloop end solve return commands def intersect_3d(poly1, poly2): # 简化的平面相交检测 return np.random.rand() 0.2 # demo ,