流体力学ansys Fluent二次开发scheme_eval模块剖析

news2024/12/29 13:04:24

在ANSYS Fluent的二次开发中,scheme_eval 是 Scheme 编程语言中一个非常重要的模块,它允许用户执行动态的 Scheme 表达式和函数,从而扩展 Fluent 的功能。scheme_eval 模块通常与 Fluent 的计算和自定义脚本操作紧密结合。下面我们会对这个模块进行详细的剖析,帮助你理解它的作用和用法。参考:https://fluent.docs.pyansys.com/version/stable/api/services/scheme_eval.html
在这里插入图片描述
官方书籍教程:https://hpc.njit.edu/assets/Ansys_Fluent_Text_Command_List.pdf

  1. scheme_eval 模块简介
    scheme_eval 是 Fluent 提供的一个接口,允许用户通过 Scheme 语言对 Fluent 中的参数、变量和函数进行动态求值。这个功能通常用于:
    • 通过 Scheme 编程进行自定义计算。
    • 在 Fluent 求解过程中动态修改流场和物理属性。
    • 定义和执行复杂的数学计算、数据处理和后处理任务。
  2. 基本语法
    在 Fluent 的二次开发中,scheme_eval 主要通过以下方式使用:
    scheme
(scheme_eval <expression>)

其中, 是需要在 Fluent 环境中执行的 Scheme 表达式。例如:
scheme

(scheme_eval '(+ 2 3))

这将返回结果 5,因为它计算了表达式 (+ 2 3) 的值。
3. 复杂表达式的处理
scheme_eval 不仅支持简单的数学运算,还可以处理更复杂的表达式,如变量和函数的定义与调用。例如,定义一个简单的函数:
scheme

(define (my-function x) (* x x))
(scheme_eval '(my-function 5))

这将返回结果 25,因为 my-function 计算了 5 的平方。
4. 动态求值与 Fluent 对象
scheme_eval 在 Fluent 的二次开发中最强大的地方是能够与 Fluent 中的各种对象进行交互。这包括:
• 流场数据: 可以通过 scheme_eval 动态获取流场数据,如速度、压力、温度等。
• 物理属性: 可以动态改变物理属性,例如湍流模型、边界条件等。
• 求解过程控制: 通过 Scheme 编程,用户可以在求解过程中动态修改求解控制参数,自动执行一些计算步骤,甚至基于实时数据进行自适应计算。
5. scheme_eval 与 Fluent 的交互示例
假设我们希望在求解过程中动态调整某个边界条件,可以通过 scheme_eval 来实现。例如:
scheme

(define (adjust-boundary-condition zone-name value)
  (let ((zone (lookup-zone zone-name)))
    (set! (boundary-condition-property zone 'temperature) value)))
  
(scheme_eval '(adjust-boundary-condition "inlet" 300.0))

这个示例首先定义了一个调整边界条件的函数 adjust-boundary-condition,然后使用 scheme_eval 调用它,将入口边界的温度设置为 300.0 K。
6. 与 Fluent 数据的交互
scheme_eval 还可以用来获取 Fluent 中的计算数据,如场变量、物理量、或计算结果。示例如下:
scheme

(define (get-pressure-at-point x y z)
  (let ((pressure (get-pressure (list x y z))))
    pressure))

(scheme_eval '(get-pressure-at-point 1.0 2.0 3.0))

这个示例通过定义一个函数来获取某一点的压力,并用 scheme_eval 调用它,输入坐标 (1.0, 2.0, 3.0),返回该位置的压力值。
7. 使用 scheme_eval 进行批量计算
在实际工程中,我们常常需要对多个区域或多个时刻的数据进行批量计算。在 Fluent 中,可以通过 scheme_eval 来编写批量计算的脚本。例如,计算多个网格点的速度场数据并求平均:
scheme

(define (average-velocity points)
  (let ((total-velocity 0.0))
    (for-each (lambda (p)
                (set! total-velocity (+ total-velocity (get-velocity p))))
              points)
    (/ total-velocity (length points))))

(scheme_eval '(average-velocity '((1.0 2.0 3.0) (4.0 5.0 6.0) (7.0 8.0 9.0))))

这个脚本通过 average-velocity 函数,计算多个点的速度场平均值。
8. scheme_eval 的性能注意事项
虽然 scheme_eval 非常灵活,但它的执行效率可能不如 C 语言实现的直接调用。因此,尽量避免在求解的核心循环中频繁调用 scheme_eval。而是可以在需要时调用一次,批量处理任务,或者将某些操作转化为 Fluent 内建的 C 函数进行高效计算。

scheme_eval 模块是 ANSYS Fluent 二次开发中非常重要的工具,允许用户通过动态 Scheme 表达式对流体力学问题进行建模、计算和控制。掌握它的使用,能够大大扩展 Fluent 的功能和灵活性,特别是在自定义求解、后处理以及参数优化等方面。
如果有更具体的应用场景或代码实现需求,可以提供更详细的方案和示例。

API接口

https://www.afs.enea.it/project/neptunius/docs/fluent/html/tuilist/node10.htm
https://www.afs.enea.it/project/neptunius/docs/fluent/html/tuilist/
https://fluent.docs.pyansys.com/version/stable/api/services/scheme_eval.html

在 Fluent 的二次开发中,scheme_eval 模块通过 gRPC 服务提供了对 Fluent Scheme 代码的封装和访问能力。这使得用户能够使用 Python 接口来动态执行 Fluent 的 Scheme 代码,而无需直接编写 Scheme 脚本。以下是 scheme_eval 模块的详细解析和实际使用示例。

  1. scheme_eval 模块概述
    scheme_eval 是 Fluent 中一个强大的接口模块,利用 gRPC 服务连接 Python 客户端和 Fluent Server,允许用户通过 Python 程序:
    • 执行 Scheme 表达式
    • 调用 Fluent 的内置命令
    • 查询和设置 Fluent 的内部变量
    该模块主要包含以下核心类和方法:
    • SchemeEval:用于执行 Scheme 表达式的主要类。
    • Symbol:表示 Fluent 中的 Scheme 符号。
    • SchemeEvalService:gRPC 服务类,用于封装底层 RPC 调用。
  2. SchemeEval 类的常用方法
    方法名 功能描述
    eval(val) 执行 Scheme 表达式,返回 Python 数据类型的值。
    exec(commands) 执行 Scheme 命令序列,返回 TUI 输出字符串。
    string_eval(input) 执行字符串格式的 Scheme 表达式,返回字符串结果。
    scheme_eval(input) 执行字符串格式的 Scheme 表达式,返回 Python 值。
    is_defined(symbol) 检查给定的 Scheme 符号是否定义。
  3. 使用示例
    示例 1:简单求值
    首先导入 Symbol 类,并使用 eval 方法计算简单的数学表达式。
    from ansys.fluent.core.services.scheme_eval import Symbol as S

计算 2 + 3

result = session.scheme_eval.eval([S(‘+’), 2, 3])
print(result) # 输出:5
示例 2:获取 Fluent 内部变量
通过 eval 方法调用 Fluent 的 rpgetvar,获取 Fluent 中某个设置参数的值。

获取 ‘mom/relax’ 的值

relaxation_factor = session.scheme_eval.eval([S(‘rpgetvar’), [S(‘string->symbol’), “mom/relax”]])
print(relaxation_factor) # 输出:0.7(假设为默认值)
示例 3:执行 Fluent TUI 命令
通过 exec 方法执行 Fluent 的 TUI 命令,并返回 TUI 的输出结果。

执行 TUI 命令 “/report/system/proc-stats”

tui_output = session.scheme_eval.exec([‘(ti-menu-load-string “/report/system/proc-stats”)’])
print(tui_output)
示例 4:使用 string_eval 执行 Scheme 表达式
string_eval 方法接受字符串格式的 Scheme 表达式,并返回结果为字符串格式。

计算 (+ 2 3) 表达式

result = session.scheme_eval.string_eval(“(+ 2 3)”)
print(result) # 输出:‘5’

获取 ‘mom/relax’ 参数的值

relaxation_factor = session.scheme_eval.string_eval(“(rpgetvar 'mom/relax)”)
print(relaxation_factor) # 输出:‘0.7’
示例 5:检查符号是否定义
is_defined 方法用于检查 Scheme 符号是否已经在 Fluent 环境中定义。

检查 ‘mom/relax’ 是否定义

is_defined = session.scheme_eval.is_defined(‘mom/relax’)
print(is_defined) # 输出:True 或 False
4. Symbol 类解析
Symbol 类用于表示 Fluent 中的 Scheme 符号。它可以将 Python 字符串转换为 Scheme 符号。例如:
from ansys.fluent.core.services.scheme_eval import Symbol as S
symbol = S(‘mom/relax’)
print(symbol) # 输出:‘mom/relax’
在使用 eval 或其他方法时,通常需要将 Python 字符串转换为 Scheme 符号,避免字符串格式错误。
5. SchemeEvalService 类解析
SchemeEvalService 是 scheme_eval 模块中底层的 gRPC 服务类,通常不直接使用,而是通过 SchemeEval 类进行封装调用。它提供以下方法:
• eval(request):执行 Scheme 表达式。
• exec(request):执行 Scheme 命令。
• scheme_eval(request):执行字符串格式的 Scheme 表达式。
• string_eval(request):执行字符串格式的 Scheme 表达式,并返回字符串结果。
这些方法与 SchemeEval 类的方法基本一致,只是在底层与 gRPC 服务进行直接交互。
6. 常见问题与性能优化
问题 1:eval 和 string_eval 的区别?
• eval 方法可以接受 Python 格式的表达式,并将其转换为 Scheme 表达式执行,返回 Python 数据类型的值。
• string_eval 方法则接受字符串格式的 Scheme 表达式,并返回字符串格式的结果。
问题 2:性能优化建议
由于 gRPC 调用具有一定的通信开销,频繁调用 scheme_eval 可能导致性能下降。建议在计算密集型任务中,尽量批量执行 Scheme 命令,或者将关键计算转移到 Fluent 内部完成。
scheme_eval 模块为 Fluent 用户提供了强大的 Python 接口,能够通过 gRPC 服务执行 Scheme 表达式,实现复杂的自动化控制、后处理和定制化计算任务。通过该模块,用户可以轻松利用 Python 编程的优势,同时访问 Fluent 的强大功能。
如果你有更具体的需求或需要进一步的代码示例,可以提供场景描述,我会帮助你详细分析和实现。

教程参考

https://www.fangzhenxiu.com/post/9961972/
https://www.reddit.com/r/CFD/comments/iqxh9m/surface_integrals_in_ansys_fluent/?rdt=64709
https://innovationspace.ansys.com/forum/forums/topic/matlab-fluent-interfacing/
https://fluent.docs.pyansys.com/version/stable/user_guide/legacy/scheme.html
https://discuss.ansys.com/discussion/3243/unable-to-load-user-defined-function-in-fluent-by-using-pyfluent-script
https://stackoverflow.com/questions/1044499/circumvent-eval-in-scheme
https://www.afs.enea.it/project/neptunius/docs/fluent/html/tuilist/node11.htm
https://www.coursehero.com/
https://www.deinprogramm.de/scheme-2005/scheme-2005-proceedings.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2238136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中仕公考:大四在校生考公怎么规划?

还在就读的大学生&#xff0c;大三下学期就可以备考&#xff0c;大四以应届生的身份参加考试&#xff0c;中仕不建议大家把备考战线拉得太长或者太短&#xff0c;时间太长容易疲惫&#xff0c;时间太短容易备考不到位。 考公流程&#xff1a; 查看公告职位表→网上报名一资格…

【363】基于springboot的高校竞赛管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块&#xff0c;适用于执行简单的命令&#xff0c;不支持特殊符号 案列01&#xff0c;批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

计算机网络:网络层 —— 软件定义网络 SDN

文章目录 软件定义网络 SDN远程控制器OpenFlow协议SDN 广义转发流表简单转发负载均衡防火墙 SDN 控制器 软件定义网络 SDN 软件定义网络&#xff08;Software Defined Networking&#xff0c;SDN&#xff09;是一种新兴的网络架构&#xff0c;旨在通过网络控制与数据转发的分离…

使用 .NET Core 7 和 SignalR 构建实时聊天应用程序

动动你可爱的小手&#xff0c;请关注下本人公众号&#xff0c;继续为您提供更多原创技术文章。谢谢给为的支持 SignalR 是一个 ASP.NET 库&#xff0c;它支持实时 Web 功能&#xff0c;允许服务器立即将更新推送到客户端&#xff0c;从而提高应用程序的效率和响应能力。它通过简…

响应式网页设计--html

一&#xff0c;HTML 文档的基本结构 一个典型的 HTML 文档包含了几个主要部分&#xff0c;基本结构如下(本文以下出现的所有代码都可以套入下面示例进行测试)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&q…

欢迎 Stable Diffusion 3.5 Large 加入 Diffusers

作为Stable Diffusion 3的改进版本&#xff0c;Stable Diffusion 3.5 如今已在 Hugging Face Hub 中可用&#xff0c;并可以直接使用 &#x1f9e8; Diffusers 中的代码运行。 https://hf.co/blog/sd3 本次发布包含两套模型参数: https://hf.co/collections/stabilityai/stable…

Ubuntu22.04中使用CMake配置运行boost库示例程序

Ubuntu22.04中使用CMake配置运行boost库示例程序 boost是一个比较强大的C准标准库&#xff0c;里面有很多值得学习的东西&#xff0c;比较asio网络库可以用来编写C TCP客户端或者TCP服务端接收程序。本文主要讲解如何在Ubuntu22.04中使用Cmake配置boost库&#xff0c;以及运行…

高效档案管理案例介绍:文档内容批量结构化解决方案解析

一、项目背景介绍 档案文件中包含的内容丰富且形式多样&#xff0c;通常不仅包括文本&#xff0c;还可能包含表格、图片、标题、段落、注释等多种内容元素。传统的档案管理往往依赖人工对文档内容进行归档、分类和标注&#xff0c;这种方式耗时费力&#xff0c;且在管理庞大数…

如何在vscode中安装git详细新手教程

一、安装git后点击vscode中的设置 今天教大家如何在VScode中编写代码后提交到git仓库&#xff0c;如果我们不想切换到git的命令行窗口&#xff0c;可以在VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交到仓库中。 二、在输入框中输入 git.path &#xff0c;再点…

负梯度方法与Newton型方法-数值最优化方法-课程学习笔记-4

今天我们继续来学习数值最优化方法的第三章内容的后续知识 Newton方法 Newton方法是Newton方法的基础, 本节主要讨论的是基本Newton方法, 阻尼Newton方法以及修正Newton方法的构造和特性, 这类方法适合解决中小型最优化问题 基本Newton方法 对于 f ( x ) f(x) f(x)如果有连续…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

Visual Studio Code从安装到正常使用

Visual Studio Code的汉化 下载的Visual Studio Code的话可以去应用商店也可以去官网下载。 Visual Studio Code只是一个编译器&#xff0c;不具备编译器功能。因此需要下载一个编译器MinGW MinGW的安装 官网链接MinGW官网链接 一步到位的链接 添加环境变量 进入cmd界面…

netty之关闭连接源码分析

写在前面 本文看下netty关闭channel相关源码。 1&#xff1a;前置准备 为了测试&#xff0c;我们需要使用netty源码中examples模块的echoserver和echoclient&#xff0c;但是echoclient因为会不断的发送消息&#xff0c;并不会断开连接&#xff0c;所以&#xff0c;我们需要…

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

Ubuntu 的 ROS 操作系统安装与测试

引言 机器人操作系统&#xff08;ROS, Robot Operating System&#xff09;是一个用于开发机器人应用的开源框架&#xff0c;它提供了一系列功能丰富的库和工具&#xff0c;能够帮助开发者构建和控制机器人。 当前&#xff0c;ROS1的最新版本为Noetic Ninjemys&#xff0c;专为…

学习threejs,将多个网格合并成一个网格

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Geometry 几何体1.2 …

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

7个常用的JavaScript数组操作进阶用法

文章目录 1、查找数组中的最大值方法一&#xff1a;使用 Math.max 和展开运算符方法二:使用 for 循环逐一比较 2、查找数组中的第二大值方法一&#xff1a;排序后取第二大值方法二&#xff1a;遍历找到第二大值 3、去除数组中的重复项4、合并两个有序数组并保持有序5、旋转数组…