Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. OpenFOAM非定常三维计算如何实时输出一个面上的速度场?

OpenFOAM非定常三维计算如何实时输出一个面上的速度场?

已定时 已固定 已锁定 已移动 OpenFOAM
7 帖子 3 发布者 1.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 流 离线
    流 离线
    流星飞宏
    写于2024年10月19日 06:18 最后由 编辑
    #1

    4e81ac2c-f5b1-43a4-976a-69d451ae499c-图片.png
    能否在OpenFOAM中定义一个计算域的横截面,在计算过程中实时输出这个截面上的速度?

    1 条回复 最后回复
  • 学 离线
    学 离线
    学流体的小明 神
    写于2024年10月20日 02:32 最后由 编辑
    #2

    function object surfaces
    实时输出就用

    writeControl timeStep;
    writeInterval 1;
    
    流 1 条回复 最后回复 2024年10月21日 04:09
  • 流 离线
    流 离线
    流星飞宏
    在 2024年10月21日 04:09 中回复了 学流体的小明 最后由 编辑
    #3

    @学流体的小明 在 OpenFOAM非定常三维计算如何实时输出一个面上的速度场? 中说:

    function object surfaces
    实时输出就用

    writeControl timeStep;
    writeInterval 1;
    

    谢谢,探索明白了一个方法!

    1 条回复 最后回复
  • 流 离线
    流 离线
    流星飞宏
    写于2024年10月21日 04:17 最后由 李东岳 编辑 2024年10月23日 02:47
    #4

    用OpenFOAM输出一个面上点的物理量

    使用OpenFOAM中functionObject的功能,输出采样坐标点上的物理量值,只不过这里的采样点是大量的,是一个面的点集合(点云),骨把点云构造出来,使用采样功能即可输出面上点云的每个点的物理量值。

    步骤一:构造面上的点云坐标集

    方法一:

    先使用blockMesh生成网格然后用Paraview或Tecplot打开,在计算域内建立一个平面或计算域的截面,输出平面上的坐标值。

    首先导出计算域平面的坐标点数据,保证前三列是x,y,z坐标值,运行下面python程序组成坐标点,

    import pandas as pd
    
    def read_xlsx_and_format(file_path):
        # 读取 Excel 文件
        df = pd.read_excel(file_path, usecols=[0, 1, 2],header=None)
        
        # 提取前三列数据
        x = df.iloc[:, 0].values
        y = df.iloc[:, 1].values
        z = df.iloc[:, 2].values
        
        # 将数据转换为所需格式
        formatted_data = [f"({x[i]} {y[i]} {z[i]})" for i in range(len(x))]
        
        return formatted_data
    
    def save_to_csv(formatted_data, output_file_path):
        # 创建一个 DataFrame 来保存格式化后的数据
        df = pd.DataFrame({'Formatted Data': formatted_data})
        #df = pd.DataFrame(formatted_data)
        
        # 保存为 CSV 文件
        df.to_csv(output_file_path, index=False, header=False)
    
    # 示例文件路径
    input_file_path = 'test_data_pred_velocityU_Point_output-U000000.xlsx'
    output_file_path = 'xoy_plane_points.csv'
    
    # 调用函数并保存结果
    formatted_data = read_xlsx_and_format(input_file_path)
    save_to_csv(formatted_data, output_file_path)
    
    print(f"Data has been saved to {output_file_path}")
    

    假设你的 Excel 文件内容如下:

    X轴 Y轴 Z轴
    1 2 3
    4 5 6
    7 8 9

    调用上述Python程序的输出将会是一个名为 xoy_plane_points.csv 的文件,内容如下:

    (1 2 3)
    (4 5 6)
    (7 8 9)
    

    方法二

    使用Python或MtaLab等软件构建点云集,这样可以自己定义采样点的多少,不必与网格点的数量保持一致。

    如果想自定义平面点云的分布,不按照划分的网格坐标点来输出,可以使用如下python程序生成坐标点:

    示例:以下程序生成XOY平面点云,X轴范围(0,0.1)均布10个点,Y轴范围(0,0.1)均布20个点。

    import numpy as np
    
    # 定义 x 和 y 的范围和点数
    x_min, x_max = 0, 0.1
    y_min, y_max = 0, 0.1
    num_x_points = 10
    num_y_points = 20
    
    # 生成 x 和 y 的坐标
    x = np.linspace(x_min, x_max, num_x_points)
    y = np.linspace(y_min, y_max, num_y_points)
    
    # 生成点云
    points = []
    for xi in x:
        for yi in y:
            points.append((xi, yi, 0.0))  # z 坐标为 0
    
    # 将点云保存到 CSV 文件
    with open('xoy_plane_points.csv', 'w') as f:
        #f.write("Points:0,Points:1,Points:2\n")  # 写入表头
        for point in points:
            f.write(f"({point[0]} {point[1]} {point[2]})\n")
    
    print("点云文件已生成:xoy_plane_points.csv")
    

    步骤二:在OpenFOAM中定义functions内容

    以2.4.x版本的OpenFOAM为例,在controlDict字典文件中加入如下内容:

    functions
    {
    internalVelocity
    {
    type sets; // 必须指定类型
    functionObjectLibs ("libutilityFunctionObjects.so");
    enabled true;
    outputControl timeStep;
    outputInterval 1;
    // 指定要输出的字段
    fields
    (
    U
    );
    setFormat csv; // 输出格式,可以选择 raw, vtk, etc.
    // 指定要使用的点集
    sets
    (
    interpolatedData
    {
    type cloud; // 必须指定类型
    points (
    #include "xoy_plane_points.csv"// 加载点集文件,若不在constant文件夹内需指定点(集)云文件路径
    );
    axis xyz; // 指定点集的轴
    }
    );
    // 插值方案
    interpolationScheme cellPoint;
    }
    }

    注意:点云文件应该放system文件夹下,保证和controlDict在同一个文件夹内(2.4.x版本的OpenFOAM默认和controlDict在同一个文件夹内,即system文件夹内),不然要在#include "xoy_plane_points.csv"语句中加入文件的绝对路径,如果xoy_plane_points.csv放在constant文件夹内,则:#include "../constant/xoy_plane_points.csv"。

    步骤三:调用求解器运行程序

    程序运行结束后会生成一个postProcessing文件夹,包含internalVelocity文件夹,internalVelocity文件夹内是各个时刻的文件夹。
    9c980ed0-0d9e-4358-b1b2-59e8b8d21658-image-20241021113407476.png

    每个时刻的文件夹内有interpolatedData_U.csv文件,里面存储了每个点的物理量值(比如:速度)。

    02d8c58c-e4c4-45bd-ad05-0d8c0f0164c4-image-20241021113950856-17294819924402.png

    打开interpolatedData_U.csv文件,前三列是坐标点数据,其余列是对应坐标点的物理量值数据。

    李 1 条回复 最后回复 2024年10月22日 18:47
  • 李 在线
    李 在线
    李东岳 管理员
    在 2024年10月22日 18:47 中回复了 流星飞宏 最后由 编辑
    #5

    @流星飞宏 感谢分享,给你重新排了一下

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    流 1 条回复 最后回复 2024年10月23日 10:59
  • 流 离线
    流 离线
    流星飞宏
    在 2024年10月23日 10:59 中回复了 李东岳 最后由 编辑
    #6

    @李东岳 谢谢东岳老师。

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2024年10月23日 14:02 最后由 编辑
    #7

    太酷炫了老铁,各种软件熟记于心

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
2024年10月19日 06:18

7/7

2024年10月23日 14:02

2024年10月23日 14:02
  • 登录

  • 登录或注册以进行搜索。
7 / 7
  • 第一个帖子
    7/7
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]