Fluent UDF【8】:編譯型UDF

UDF除了能夠以解釋的方式外,其還能夠以編譯的方式被Fluent加載。解釋型UDF只能使用部分C語言功能,而編譯型UDF則能夠全面使用C語言的全部功能。node

1 編譯型UDF介紹

編譯型UDF的構建方式與ANSYS Fluent可執行文件自身的構建方式相同。在代碼構建過程當中,其利用一個名爲Makefile的腳本文件來調用C編譯器構建一個目標代碼庫。該對象庫與其編譯過程當中所使用的Fluent版本及計算機體系結構相關。所以,若改變了計算機操做系統或Fluent版本的話,UDF對象庫必須從新構建。UDF的編譯過程一般涉及到源代碼的編譯和加載兩個步驟。linux

編譯/構建過程須要一個或多個UDF的源文件(例如myudf.c),並將它們編譯成對象文件(例如myudf.o或myudf.obj),以後將其構建成一個「共享庫」 (例如,libudf.dll)與目標文件。c++

若是使用GUI方式編譯源文件,則當用戶單擊「Compiled UDF」對話框中的「Build」按鈕時,將執行編譯/構建過程。Fluent軟件將自動爲用戶基於在該會話期間運行的ANSYS Fluent的體系結構和版本(例如,hpux11 / 2d)構建用戶命名的共享庫(例如libudf),並存儲UDF對象文件。windows

若是使用TUI方式編譯源文件,則首先必須設置共享庫的目標文件夾,同時修更名爲Makefile的腳本文件以指定源參數,而後執行Makefile文件實現源代碼的編譯與構建。使用TUI方式編譯UDF具備容許從非ANSYS Fluent源派生的預編譯對象文件連接到ANSYS Fluent(連接非ANSYS Fluent源文件預編譯的對象文件)的諸多優勢,這些功能用GUI編譯沒法實現。
構建共享庫(使用TUI或GUI)後,將UDF庫加載到ANSYS Fluent中,而後再使用它。您可使用「Compiled UDFs」對話框中的「Load」按鈕來執行此操做。加載完成後,共享庫中包含的全部已編譯的UDF將在ANSYS Fluent的圖形對話框中變爲可見和可選。請注意,編譯的UDF顯示在ANSYS Fluent對話框中,相關聯的UDF庫名稱由兩個冒號(::)分隔。例如,與名爲libudf的共享庫相關聯的名爲rrate的編譯UDF將出如今ANSYS Fluent對話框中,如rrate :: libudf。此名稱能夠區分解釋型UDF和編譯型UDF。微信

若是在加載UDF庫時寫入您的Case文件,則庫將與Case文件一塊兒保存,並在以後讀取該Case文件時自動加載。這種「動態加載」過程能夠節省用戶每次運行模擬時從新加載編譯庫的時間。架構

2 C編譯器

不論是使用GUI仍是使用TUI方式編譯UDF,都須要使用本機運行的操做系統以及C編譯器。大多數的Linux操做系統上都已經集成了C編譯器,可是若是是在Microsoft Windows系統上編譯UDF,則在編譯以前必須確保本機山剛已經安裝了MicroSoft Visual Studio。 對於Linux機器,ANSYS Fluent支持任意符合ANSI標準的C編譯器(如GCC)。
在進行UDF編譯以前,須要設置編譯環境,這一般能夠經過修改UDF.bat文件來實現。以下圖所示。
設置編譯環境dom

3 GUI方式編譯UDF

利用GUI方式編譯UDF源文件、構建共享庫以及加載UDF庫到Fluent中,能夠採用如下步驟。
注意:在Windows系統下編譯UDF,必須預先安裝Visual Studio。在安裝Visual Studio時,確保選擇安裝c++語言,這樣纔會安裝C編譯器。ui

  • 確保要編譯的UDF源文件與cas和dat文件在同一工做路徑下。
  • 讀取(或建立)case文件
  • 打開Compiled UDFs對話框。可經過樹形菜單Parameters & Customization → User Defined Functions→Compiled...啓動該對話框。
    文件編譯
  • Compiled UDF對話框中點擊按鈕Add...添加源文件和頭文件
  • Library Name後的文本框中輸入共享庫的名稱,以後點擊Build按鈕構建共享庫。其間會彈出以下圖所示的提示對話框。
    對話框
    能夠選擇無視,點擊OK按鈕繼續。
    編譯完成後會在TUI窗口出現如圖所示的對話框。仔細檢查提示信息,沒有出現error則表示編譯成功。圖中出現有亂碼,不知道是從Fluent哪一個版本開始就出現這種狀況。其實能夠不用管。
    編譯完成
  • 點擊Load按鈕加載UDF
    若是沒有錯誤的話,加載完housing會在TUI窗口中出現以下圖所示的對話框,其中會顯示UDF宏名稱。以下圖中所示的velocity和domainInit。
    加載UDF操作系統

    4 TUI方式編譯UDF

    除了能夠利用圖形界面編譯UDF外,Fluent還提供了利用TUI命令的方式編譯UDF。利用TUI方式進行編譯,可以容許用戶調用一些非Fluent源文件以外的庫文件。
    使用TUI進行編譯,一般首先須要建立好文件目錄結構,以後編輯Makefile文件,利用makefile文件編譯源文件。命令行

windows系統與Linux系統的編譯方式有些不一樣,這裏主要描述Windows下的構建過程,linux系統後面再說。

4.1 建立文件目錄結構

在windows系統中編譯UDF,須要兩個文件makefile_nt.udfuser_nt.udf。特別重要的是在user_nt.udf文件中指定源文件編譯參數。構建文件目錄結構採用如下步驟:

  • 在當前工做目錄下,建立新的文件夾存儲UDF庫。(例如建立文件夾libudf)
  • 在libudf文件夾下建立新的文件夾,命名爲src
  • 將全部UDF源文件放入src文件夾中
  • 在libudf文件夾下建立架構文件夾。如64bit windows操做系統,則建立win64文件夾(路徑libudf\win64)。
  • 在架構文件(libudf\win64)下建立Fluent版本文件夾。如單精度2d版本則建立文件夾2d。一些版本信息以下表所示。
版本信息 文件夾名字
單精度2d 2d
當精度3d 3d
雙精度2d 2ddp
雙精度3d 3ddp
單精度並行2d 2d_node及2d_host
單精度並行3d 3d_node及3d_host
雙精度並行2d 2ddp_node及2ddp_host
雙精度並行3d 3ddp_node及3ddp_host

注意:在編譯並行UDF時,須要建立兩個版本文件夾。

  • 從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src\udf)拷貝文件user_nt.udf到全部的版本子文件夾中(如libudf\win64\3d)
  • 從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src\udf)拷貝文件makefile_nt.udf到全部的版本子文件夾中(如libudf\win64\3d),並更名爲makefile

注意:若在Fluent外部編譯UDF,則須要添加環境變量FLUENT_INC、FLUENT_ARCH到user_nt.udf文件中

Linux環境下的文件目錄設置與此有些許差別。

4.2 編譯文件

當文件目錄設置完畢而且全部文件已經放置到指定位置後,就能夠利用TUI來編譯及構建UDF共享庫了。

在windows系統中,採用如下步驟:

  • 修改user_nt.udf文件。修改文件中的三個參數:CSOURCES、HSOURCES、VERSION以及PARALLEL_NODE

udf_nt.udf文件內容相似下圖所示。

CSOURCES=:指定要編譯的UDF源文件。在全部文件名前面加上前綴$(SRC)。(多個文件能夠連着寫,如`$(SRC)udfexample1.c $(SRC)udfexample2.c

HSOURCES=:指定要編譯的UDF頭文件。一樣在全部文件名前面加上$(SRC)前綴。(多個文件能夠連着寫,如`$(SRC)udfexample1.h $(SRC)udfexample2.h

VERSION=:運行的求解器版本信息,與user_nt.udf文件所在文件夾保持一致。((2d, 3d, 2ddp, 3ddp, 2d_host, 2d_node, 3d_host, 3d_node, 2ddp_host, 2ddp_node, 3ddp_host, or 3ddp_node)。

PARALLEL_NODE=指定並行通信庫。指定爲None表示採用串行,其餘並行包括:ibmmpi(利用IBM MPI並行)、intel(利用intel MPI並行)以及msmpi(利用微軟MPI)。在並行計算中須要同時設置host及node文件夾下的user_nt.udf文件。

  • 利用Visual Studio命令行界面進入每個版本文件夾(如libudf\win64\2d),輸入nmake執行編譯操做。若編譯存在問題,能夠在修改源文件後經過執行nmake cleannmake從新編譯。

更多CFD資料可微信掃描下方二維碼關注微信公衆號。

微信掃碼關注公衆號

相關文章
相關標籤/搜索