UDF宏有兩種方式可以被Fluent所接受:編譯和解釋。其中有一些宏既可以被解釋也可以被編譯,而一些宏則只能被解釋。有一些場合只接受編譯后的UDF(如動網格中的一些宏),而有些場合既可以接受編譯的UDF,還能接受解釋后的UDF。那么解釋型的UDF與編譯型的UDF到底存在何種差異?本文主要描述解釋型UDF,而編譯型UDF涉及到的問題更多,我們留到下次再說。
解釋型UDF
解釋型UDF不需要額外的編譯器,利用Fluent軟件自身即可解釋源代碼。在解釋過程中,UDF源代碼被C預處理器解釋成中間的,獨立於計算機體系之外的機器代碼。之后在調用UDF的過程中,這些被解釋器生成的機器代碼將在內部仿真器或解釋器上被執行。當然,這種以解釋的方式運行無可避免的會損失計算性能。但是以解釋方式運行的UDF有個好處:其可以不加修改的在不同體系的計算機上、不同的操作系統以及不同的Fluent版本中運行。
當UDF的計算性能很重要時,建議以編譯的形式運行UDF。所有解釋型UDF都可以以編譯的方式被Fluent加載。
在UDF被解釋后保存cas文件,之后再打開cas文件時,UDF能夠直接被加載,而無需重新解釋。
解釋型UDF的局限性
解釋型的最大優勢是一次解釋,到處可以執行,能夠跨平台、跨架構、跨操作系統、跨版本。但是解釋型UDF也存在其局限性。主要體現在:
- 無法使用
goto
語句 - 只支持ANSI-C語法
- 不支持直接數據結構引用(direct data structure references)
- 不支持局部結構聲明
- 不支持聯合體
- 不支持指向函數的指針
- 不支持函數數組
在訪問FLUENT求解器數據的方式上解釋式UDF也有限制。解釋式UDF不能直接訪問存儲在FLUENT結構中的數據。它們只能通過使用Fluent提供的宏間接地訪問這些數據。另一方面,編譯式UDF沒有任何C編程語言或其它注意的求解器數據結構的限制。
在Fluent中解釋UDF
在Fluent中解釋UDF非常簡單。通常可采用以下步驟:
- 確保UDF源文件與cas文件在同一目錄下。
需要說明的是,在網絡式多機並行Fluent中,用戶必須共享包含udf源文件、cas文件以及data文件的文件夾。具體共享方法為: 鼠標右鍵選擇要共享的工作文件夾,選擇彈出菜單Sharing and Security
,並選擇Share this folder
。 - 右鍵選擇模型樹節點Parameters&Customization→User Defined Functions,選擇子菜單Interpreted..
彈出如下圖所示的對話框。
- 在對話框中選擇按鈕Browse...
在彈出的文件選擇對話框中選擇UDF源文件。對話框中的其他參數一般情況下可保持默認設置。 - 點擊按鈕Interpret解釋源文件
源文件解釋過程中,TUI窗口會有解釋信息。若有錯誤的話,會出現錯誤信息。 - 加載解釋后的UDF
當源代碼被解釋后,在相應的GUI窗口中就可以看到被解釋的UDF了,此時可以選擇使用。
更多CFD資料可微信掃描下方二維碼關注微信公眾號。