教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之道

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
5