py读取dat/plt

cpp 复制代码
import numpy as np
import matplotlib.pyplot as plt
import re

# ============================================================
# 1. 解析函数
# ============================================================

def parse_tecplot_file(filepath):
    """
    解析TECPLOT BLOCK格式数据文件
    
    参数:
        filepath: 文件路径
        
    返回:
        data_dict: 数据字典
        header_info: 头部信息
    """
    with open(filepath, 'r') as f:
        full_text = f.read()
    
    # 解析头部
    header_info = {}
    
    # 提取变量名
    vars_start = full_text.find('VARIABLES = ')
    vars_end = full_text.find('ZONE')
    if vars_start != -1 and vars_end != -1:
        vars_str = full_text[vars_start + 12:vars_end]
        header_info['variables'] = vars_str.split()
    
    # 提取网格尺寸
    i_match = re.search(r'I\s*=\s*(\d+)', full_text)
    j_match = re.search(r'J\s*=\s*(\d+)', full_text)
    
    if i_match:
        header_info['I'] = int(i_match.group(1))
    if j_match:
        header_info['J'] = int(j_match.group(1))
    
    # 提取数值数据
    block_pos = full_text.find('DATAPACKING = BLOCK')
    if block_pos != -1:
        data_str = full_text[block_pos + 20:]
        values = []
        for token in data_str.split():
            try:
                values.append(float(token))
            except ValueError:
                continue
        
        values = np.array(values)
        
        # 按变量分割数据
        n_vars = len(header_info['variables'])
        n_points = header_info['I'] * header_info['J']
        
        data_dict = {}
        for i, var_name in enumerate(header_info['variables']):
            start_idx = i * n_points
            end_idx = start_idx + n_points
            data_dict[var_name] = values[start_idx:end_idx]
    
    return data_dict, header_info

# ============================================================
# 2. 使用示例
# ============================================================

# 读取数据
data_dict, header_info = parse_tecplot_file('result_0040.dat')

# 访问数据
print(X.shape,Y.shape,P.shape)
X = data_dict['X'].reshape(header_info['J'], header_info['I'])
Y = data_dict['Y'].reshape(header_info['J'], header_info['I'])
P = data_dict['P'].reshape(header_info['J'], header_info['I'])
# 可视化
plt.figure(figsize=(10, 8))
plt.contourf(X, Y, P, levels=200, cmap='RdYlBu_r')#,antialiased=True)
plt.colorbar(label='Pressure')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Pressure Distribution')
plt.axis('equal')
plt.show()

# ============================================================
# 3. 导出为其他格式
# ============================================================

# 导出为VTK格式
def export_to_vtk(data_dict, header_info, filename):
    """
    导出为VTK格式(可用ParaView打开)
    """
    I = header_info['I']
    J = header_info['J']
    
    with open(filename, 'w') as f:
        f.write("# vtk DataFile Version 3.0\n")
        f.write("CFD Data\n")
        f.write("ASCII\n")
        f.write("DATASET STRUCTURED_GRID\n")
        f.write(f"DIMENSIONS {I} {J} 1\n")
        f.write(f"POINTS {I*J} float\n")
        
        # 写入坐标
        for i in range(I*J):
            f.write(f"{data_dict['X'][i]} {data_dict['Y'][i]} 0.0\n")
        
        # 写入数据
        f.write(f"POINT_DATA {I*J}\n")
        for var in header_info['variables']:
            if var not in ['X', 'Y']:
                f.write(f"SCALARS {var} float 1\n")
                f.write("LOOKUP_TABLE default\n")
                for val in data_dict[var]:
                    f.write(f"{val}\n")

# 导出为CSV格式
def export_to_csv(data_dict, header_info, filename):
    """
    导出为CSV格式
    """
    I = header_info['I']
    J = header_info['J']
    n_points = I * J
    
    with open(filename, 'w') as f:
        # 写入表头
        f.write(','.join(header_info['variables']) + '\n')
        
        # 写入数据
        for i in range(n_points):
            row = [str(data_dict[var][i]) for var in header_info['variables']]
            f.write(','.join(row) + '\n')

re提取变量值

可以通过增大"level"提高分辨率

相关推荐
AI科技星1 天前
哥德巴赫猜想1+1基于平行素数对等腰梯形网格拓扑与素数渐近密度的大偶数满填充完备性证明
人工智能·线性代数·架构·概率论·学习方法
AI科技星2 天前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
AI科技星2 天前
第二章 平行素数对网格:矩形→等腰梯形拓扑变换(完整公理终稿)
c语言·开发语言·线性代数·算法·量子计算·agi
dog2502 天前
解析几何的现代范式-算力,拟合与对偶
服务器·开发语言·网络·线性代数·php
晚霞的不甘2 天前
CANN Catlass 矩阵乘模板库深度解析:高性能矩阵运算的进阶之路
人工智能·python·线性代数·矩阵
AI_yangxi2 天前
短视频矩阵系统技术强的公司
线性代数·矩阵
ccice012 天前
硬核技术解析:运用Gemini多步推理链,攻克办公场景中的复杂决策与风险矩阵构建(国内免费镜像实操)
人工智能·线性代数·矩阵
AI算法沐枫2 天前
大一学生如何入门机器学习,深度学习,学习顺序如何?
人工智能·python·深度学习·学习·线性代数·算法·机器学习
木斯佳2 天前
HarmonyOS 6 ArkGraphics 3D精讲:坐标、向量与矩阵——初识3D数学的“空间建模”
线性代数·3d·矩阵
05候补工程师3 天前
【408狂飙·数据结构】核心考点深度复盘:数组地址计算、特殊矩阵压缩存储与树的五大性质解题直觉
数据结构·笔记·线性代数·考研·算法·矩阵