教ChatGPT编写Fluent UDF

昨天有 道 友说可以尝试使用ChatGPT写 Fluent UDF,然后我就试了一下。
为了不为难机器人,这里挑了一个最简单的。比如经常使用UDF定义随空间变化的边界条件,如定义一个入口速度与y坐标成函数关系的边界条件:

先把家伙事儿都准备好(板凳和ChatGPT),然后开干。

首先我提出自己的需求。

Fluent UDF是Fluent中利用C语言自定义其功能的工具。请编写一段Fluent UDF程序代码,定义入口边界速度为$$v = 2*y+3$$

这里担心ChatGPT不知道啥是Fluent UDF,所以事先说明了一下,后面让其编写UDF。公式可以用$$括起来,这样ChatGPT能够将其识别为公式。

ChatGPT输出为:

教ChatGPT编写Fluent UDF的图1

代码中存在很多的问题。不过ChatGPT居然知道先包含头文件udf.h,也知道需要调用UDF宏DEFINE_PROFILE,而且将入口速度还给命名为inlet_velocity,不止如此,DEFINE_PROFILE宏包含有3个参数也都写对了。不过下面的实现代码就惨不忍睹了。

下面人工对其第一次纠错。

上面的程序存在错误。完成此程序代码,需要首先利用F_CENTROID得到 坐标,然后利用F_PROFILE宏得到速度表达式。另外边界赋值需要放在循环中,此时应该使用begin_f_loop进行循环。重新修改上面的程序。

第一次纠错后的输出如下所示。

教ChatGPT编写Fluent UDF的图2

看起来似乎好多了,程序的基本框架没问题了,不过F_CENTROID宏参数写错了,而且获取y坐标的方式也错了。

人工对其第二次纠错。

上面的程序大部分内容是正确的,但是依然存在错误。F_CENTROID宏有三个参数,第一个参数是数组。修改一下上面的程序。

第二次纠错后ChatGPT的输出如下所示。

教ChatGPT编写Fluent UDF的图3

还是有错误,需要进行第三次纠错。

F_CENTROID宏的定义有错误。应该先定义一个数组,然后利用该数组作为F_CENTROID宏的第一个参数。此数组的第2个元素为 坐标。修改上面的程序。

第三次纠错后ChatGPT的输出为:

教ChatGPT编写Fluent UDF的图4

这次ChatGPT自信满满地说自己的输出内容都是正确的。

这段代码的确可以正确地编译并运行。

ChatGPT输出的代码如下:

#include "udf.h"

DEFINE_PROFILE(inlet_velocity,t,i)
{
 real y, v;
 face_t f;
 real x[ND_ND];
 
 begin_f_loop(f,t)
 {
   F_CENTROID(x,f,t);
   y = x[1];
   v = 2*y + 3;
   F_PROFILE(f,t,i) = v;
 }
 end_f_loop(f,t)
}

不过可能是ChatGPT对Fluent UDF缺乏训练,导致所有的代码一行注释都没有。


这里说一说自己的感觉:

  1. ChatGPT的确挺好玩儿的,不过想要真正的用于提高生产力,目前似乎还无法脱离人的参与。
  2. 在专业领域应用ChatGPT其实还是有门槛的,对使用者的专业素养有要求,否则输出的结果好坏无从判断。
  3. 问题输入的形式(输入数据)对输出质量有直接影响。
  4. 目前尚不清楚ChatGPT会不会持续学习(训练的数据不知道是否会被保留),不过在同一个会话中似乎是可以的。就比如上面的训练完成后,再编写类似的UDF,成功率非常高,不过如果退出会话再创建新的会话,则一切还得从头开始。

昨天有人留言说我们使用ChatGPT是帮助米帝训练AI然后被用来打我们自己,但我想不明白的是,如果真是这样的话,这么好的武器米帝为啥不用呢(明显ChatGPT不对咱们提供服务的)。个人观点,只要是能提高生产力的工具且米帝不让咱们使用的,那就一定是好工具,要大用特用。假如以后证实用户使用的确会帮助ChatGPT进行训练,我觉得筒子们不妨尝试着将ChatGPT训练成共产主义接班人。

不过还是期待国内的科技巨头早日能够推出自己的产品。


(完)


文章来源:CDF之道

默认 最新
当前暂无评论,小编等你评论哦!
点赞 1 评论 收藏 3
关注