
發布
注冊
/
登錄自定義函數的案例
七、Fluent用戶自定義函數(UDF)基礎(1)
圖1.UDF用戶手冊
UDF介紹: 所謂UDF-用戶自定義函數(User-defined functions),學習過編程語言的同學對此應該并不陌生,無論是C語言、JAVA還是Python,自定義函數被廣泛的應用著,它能夠使語言邏輯和代碼的簡潔性大幅度提高。Fluent的UDF有著同樣的功能,但是又不完全相同。
在Fluent中,UDF使用C語言來編寫,因此需要大家有一定的C語言基礎,但是不必過于深入,大家只需要了解基本的格式和語法結構即可,同時需要對指針有一點了解。建議有其他語言基礎的同學花一周的時間學習一下C語言---一周的時間已經足夠了。
UDF特殊性: 接下來我們說一下Fluent UDF的特殊性,實際上即便C語言功底很厲害的高手并不一定能夠寫好UDF,為什么呢?因為Fluent UDF和C語言的自定義函數完全就是兩碼事。它是Fluent封裝好的可以傳遞給求解器的函數,主要由各種宏組成,每個宏有各自的作用。說的通俗易懂一點,其實UDF就是Fluent已經給用戶起好了自定義函數的名字了,用戶達到什么樣的目的,使用相對應的宏就行。類似于我乘坐地鐵去電影院,為了達到去電影院的目的,我使用了名叫地鐵的工具,這里的名字“地鐵”就相當于Fluent中的宏;如果放到C語言中,你可以給“地鐵”起任意名字如“自行車”,這樣會帶來混亂,導致Fluent求解器識別不了你的目的。比如用戶想讓進口流體的速度正弦變化,那么就需要找到能夠修改邊界條件的宏-DEFINE_PROFILE(name, t, i),然后在里面指定速度函數即可。
圖2.C語言自定義函數
圖3.Fluent UDF
UDF功能: 對于Fluent而言,UDF可以顯著增強其功能,使用UDF你可以做如下的事情:
1.
展開 編程自定義函數
我們在這里繼續同樣有關可編程的內容,只是這次將討論傳輸函數:傅里葉光學中一個著名的概念。傳輸函數是對于包含理想組件的光學系統是一種極好的實現方法。在VirtualLab的全矢量電磁方法中也更好地體現出來。在以下教程和示例的幫助下,學習如何在VirtualLab Fusion中編寫自己的自定義函數!
傳輸函數
按照本教程的說明學習如何在VirtualLab Fusion中編寫自定義傳輸函數,并以一個理想的柱面透鏡為例。
編寫一個錐透鏡的傳輸函數
通過這個錐透鏡傳輸函數的附加示例,進一步加強您的VirtualLab編程知識。
展開 詳述python中def語句(自定義函數)
00 def語句的作用
def語句的作用是自定義函數,其實質就是將代碼塊打包并命名,并且可以提供參數(可以不止一個)。
Abaqus如何施加自定義函數的位移約束
Abaqus如何施加自定義函數的位移約束
對于有一些模型需要加載隨時間變化的載荷和約束,Abaqus提供各種定義方式,通過Amplitude來完成,本次想闡述的時加載不隨時間變化而是隨坐標變化的約束。
建立如圖所示的模型,想對這個模型的整體在x方向施加一個隨著Y軸坐標線性變化的位移約束,即u1=kY形式的約束。
圖1
直接施加肯定不可能,與ANSYS一樣,需要先建立函數,建立函數菜單的位置如圖2所示,在Load模塊下的Tool菜單下。
圖2
點開之后如圖3所示,點擊Creat彈出對話框,采用Expression field的方式建立函數,并可以修改名稱。
圖3
之后即可通過如圖4所示的界面來創建函數,能夠用的變量是坐標XYZ,運算符在右邊,坐標采用的坐標系可以自由選擇,默認采用笛卡爾總體坐標系。選擇坐標的時候可以直接點選Abaqus/CAE窗口的已有坐標系直接選擇。
圖4
創建完保存。
之后即可創建位移約束,如圖5所示,需要注意兩個東西,一個是通過Distrubition選擇剛才創建的函數AnalyticalField-1,另外施加u1時填入數字1的含義表示施加1倍的函數。
圖5
創建完之后,可以通過主菜單的View-Assembly Display Option-Attribute來設置顯示,如圖6所示。
圖6
最終加載完成如圖7所示。
圖7
很明顯隨著Y坐標的不同而不同。
展開 
FLUENT動網格案例之十二:基于自定義函數的薄膜振動動網格實現方法 ¥299
基于自定義函數的薄膜振動動網格實現方法
動網格實現效果
動網格區域設置
UDF截圖
這個UDF函數稍微改改,還能實現血管脈動模擬
文件列表
COMSOL 軟件內置函數和用戶定義函數說明
為了方便用戶的建模操作,COMSOL 軟件中預置了很多常用的變量、物理常數,以及函數,并提供很多自定義函數。“使用技巧”系列將介紹這些預置功能,希望能夠提高大家的建模使用經驗。
訪問 COMSOL 官網“產品文檔”頁面(comsol.com/documentation)或點擊文末“閱讀原文”,可查看本系列全部內容。
今天將介紹本系列的第三部分:函數。
函數
在“模型開發器”中,有兩種類型的函數:內置函數和用戶定義的函數。函數可以是標量值或與輸入變元相關的場值。某些函數的輸入和輸出變元都可以有單位。
內置數學函數
可以直接使用的數學函數,不需要再根據定義來編寫復雜的表達式。
這些函數的輸入或輸出變元沒有單位。
內置運算符函數
這些內置函數的行為與內置數學函數不同。它們可能不屬于介紹性文本范疇,但在此列出以保證保留名稱列表的完整性。有關更多信息,請參閱 Reference Manual。
用戶定義的函數
用戶定義的函數可以在模型樹的全局定義節點下(對于每個組件,則在定義節點下)定義。從函數菜單中選擇一個模板并輸入設置,定義函數的名稱和詳細形狀。
展開 VirtualLab:使用自定義的評價函數優化高NA分束器
為此,對初始系統的結構進行了參數化,并通過可編程光柵分析器定義了一組自定義的評價函數。對于參數優化和后續的公差分析,使用嚴格的傅里葉模態法 (FMM)。
建模任務
衍射分束面初始設計(*)
1.采用VirtualLab Fusion的迭代傅里葉變換算法(IFTA)設計工具計算了分束器的初始相位函數。
2.對于高度輪廓的轉換,采用了基于薄元件近似(TEA)的結構設計。
(*)不是這個用例的一部分(**)這些會話編輯器在衍射光學工具箱銀版中可用。
TEA和等距抽樣結構的局限性
□ TEA非常適合于最小特征尺寸不小于約5倍波長的情況。如果不是這樣,振幅/相位分布與設計高度輪廓相互作用后可能會顯示出與期望值的相關偏差。
□ 因此,需要進行嚴格的評估。
□ 對于參數優化,需要對結構數據進行不同的定義。
后優化的數據準備(參數化)
衍射分束器表面進一步優化
哪個衍射級次有哪些評價函數?
利用可編程光柵分析器
分束器初始設計的嚴格分析
設置優化參數
兩個優化過程對比
在這個用例中,我們演示了兩種具有不同配置目標和約束的優化:
□ 在優化#1中,優先考慮均勻性誤差。
□ 在優化#2中,0級也要最小化。
關于評價函數約束,用戶可以指定
□ 單獨的目標值、范圍、下限或上限是什么
□ 以及通過權重,它們的貢獻應該是什么。
展開 VirtualLab:使用自定義的評價函數優化高NA分束器
為此,對初始系統的結構進行了參數化,并通過可編程光柵分析器定義了一組自定義的評價函數。對于參數優化和后續的公差分析,使用嚴格的傅里葉模態法 (FMM)。
建模任務
衍射分束面初始設計(*)
1.采用VirtualLab Fusion的迭代傅里葉變換算法(IFTA)設計工具計算了分束器的初始相位函數。
2.對于高度輪廓的轉換,采用了基于薄元件近似(TEA)的結構設計。
(*)不是這個用例的一部分(**)這些會話編輯器在衍射光學工具箱銀版中可用。
TEA和等距抽樣結構的局限性
□ TEA非常適合于最小特征尺寸不小于約5倍波長的情況。如果不是這樣,振幅/相位分布與設計高度輪廓相互作用后可能會顯示出與期望值的相關偏差。
□ 因此,需要進行嚴格的評估。
□ 對于參數優化,需要對結構數據進行不同的定義。
后優化的數據準備(參數化)
衍射分束器表面進一步優化
哪個衍射級次有哪些評價函數?
利用可編程光柵分析器
分束器初始設計的嚴格分析
設置優化參數
兩個優化過程對比
在這個用例中,我們演示了兩種具有不同配置目標和約束的優化:
□ 在優化#1中,優先考慮均勻性誤差。
□ 在優化#2中,0級也要最小化。
關于評價函數約束,用戶可以指定
□ 單獨的目標值、范圍、下限或上限是什么
□ 以及通過權重,它們的貢獻應該是什么。
展開 通過自定義實現ls-dyna靜水壓力的實現 ¥200
通過自定義函數實現ls-dyna的靜水壓力梯度,自認為是所有方法里面,靈活度最高,相對邊界的選擇更靈活的方法,計算過程效率相對較高,不會影響其余部分的計算,總之就是最優解
k文件見附件
九、Fluent用戶自定義函數(UDF)基礎(2)-DEFINE_PROFILE
簡介</strong></p><p class="ql-align-center"><br></p><p> 今天我們接著說Fluent UDF功能,我們經常使用的UDF宏主要有以下幾種:</p><p>DEFINE_PROFILE: 定義模型邊界</p><p>DEFINE_ADJUST: 用于協調計算過程中物理量</p><p>DEFINE_INIT: 初始化宏,用于自定義初始化</p><p>DEFINE_PROPERTY: 定義材料物性</p><p> 上述的幾種宏基本上無論使用什么物理模型都會用到,還有部分宏是在特定的模型下才會使用,如使用DPM模型時用DEFINE_DPM_SOURCE宏來定義DPM源項,而普通的物理模型下源項通過DEFINE_SOURCE宏定義即可。</p><p> </p><p> 今天我們主要了解DEFINE_PROFILE宏的使用,DEFINE_PROFILE宏可以用來定義邊界條件,當邊界條件比較復雜時,如定義壁面溫度<em>T</em><sub>w</sub>=f(y),即壁面溫度是y的函數可以使用DEFINE_PROFILE宏進行定義。
展開 SCOUT 薄膜分析軟件
可以計算以下類型的光譜:
? 反射率(或它的任何用戶自定義函數)
? 透光率(或它的任何用戶自定義函數)
? 吸光度(或它的任何用戶自定義函數)
? ATR(或它的任何用戶定義的函數)
? 橢圓光度法
? 光致發光
? 電致發光
SCOUT — 光學模型
光學常數模型
? 自由載流子的經典Drude模型
? 自由載流子的擴展Drude模型
? 諧振子模型
? brendel擴展振子模型
? Kim擴展振蕩器模型
? Leng振子模型
? 非晶態材料的OJL帶間躍遷模型
? 晶態材料的Tauc-Lorentz帶間躍遷模型
? 光學常數(包括選擇定義柯西模型)的用戶定義表達式
? 輸入光學常數
非均勻材料的各種有效介質理論
? Maxwell Garnett (M G) 理論
? Bruggeman理論
? Looyenga 理論
? Bergman 表征
波在層疊中的傳播
? 分波的相干或非相干疊加
? 超晶格的簡單定義
? 修正粗糙表面的散射損耗
? 非均勻厚度層的有效平均算法—理想狀態下的相干和非相干疊加
? 逐漸變化光學屬性的簡單定義
? 任意數量的層
? 任意數量的層堆疊
可計算
? 反射(或它的任何用戶自定義函數)
? 透光率(或它的任何用戶自定義函數)
? 吸光度(或它的任何用戶自定義函數)
? ATR(或它的任何用戶自定義函數)
? 橢圓光度法
? 對圖案樣品進行光譜平均
? 光致發光
? 致發光
? 任意數量的光譜
? 在某一層的吸收
? 層組的片電阻
? 吸收的深度依賴性
? 電場深度依賴性
SCOUT — 參數擬合
? 鼠標驅動滑塊運動直觀展示“visual”參數變化
? 多維參數預掃描(“網格擬合”)
? 自動參數擬合,以調整模擬測量光譜
? 全局主參數控制任意數量的模型參數
展開 
Mixture 和用戶自定義函數UDF 計算液體蒸發換熱 ¥20
混合模型典型應用場景為沉降、旋風分離、泡狀流等
必須使用分離式求解器
不能用在沿流動方向的周期性流動
不能用大渦模擬
不能用無粘流動
不能用二階隱式時間格式
光滑直管內液體蒸發換熱模型
二維光滑圓管,飽和壓力0.57MPa
管壁熱流密度10kw/m2
進口質量流量288kg/m2s
使用UDF定義
蒸發飽和溫度;汽化潛熱;管壁熱流密度;管徑;飽和蒸汽焓
干度沿管程變化規律
向氣相轉移的質量
耦合UDF
定義多相流模型為mixture
設置質量和能量源項的UDF
展開 五十七、Fluent UDF自定義材料物性參數
材料屬性的設置
有兩種方式可以自定義材料的屬性參數,第一種材料下拉框選擇,第二種UDF自定義函數。
我們這次主要介紹第二種方式,通過UDF的方式自定義材料屬性。之前有兩篇文章介紹過UDF的基礎和UDF DEFINE _PROFILE宏
自定義材料屬性的define宏主要是DEFINE_PROPERTY,除此之外如果需要定義擴散系數,還需要使用DEFINE_DIFFUSIVITY宏。
擴散系數一般是打開組分輸運方程,或者使用UDS才需要定義。
2. DEFINE_PROPERTY宏的用法
我們詳細說說DEFINE_PROPERTY宏的使用,同時給出幾個例子
2.1 物性參數
DEFINE_PROPERTY宏可以定義的物性參數如下:
? density (as a function of temperature):密度
? viscosity:粘度
? thermal conductivity:導熱系數
? absorption and scattering coefficients:吸收系數和散射系數
? laminar flame speed:層流火焰速度
? rate of strain:應變率
? frictional modulus (Eulerian model):摩擦模量
? elasticity modulus (Eulerian model):彈性模量
? heat transfer coefficient (Mixture model):傳熱系數
? particle or droplet diameter (Mixture model):液滴直徑
······················
注:
a.
展開 『下載』中科大的Fluent講稿(CHM電子書版本)
用戶自定義函數也為改進和完善模型,處理個性化問題和給出更合理的邊界條件提供了可能。
本講義以FLUENT5說明書為主要參考資料,介紹了該軟件的基本功能、基本物理模型、湍流模型、湍流模擬的近壁處理及邊界條件,并且對燃燒過程的模擬和用戶自定義函數做了描述。通過本課程學習,可以掌握和利用FLUENT程序在流體及傳熱傳質等領域進行數值研究。
燃燒模型部分由董剛副教授編譯,方海生同學編譯了用戶自定義函數。基本物理模型,湍流模型及湍流模擬近壁處理及邊界條件由劉明侯副教授編譯。由于時間非常倉促(一個暑假時間),只能用不完全的內容作為計算流體和傳熱傳質課程的內容。還有些內容來不及加入講義內,希望以后逐步完善。文字沒有很好地校對,一定會由錯誤、疏漏或不妥的地方,請同學們校正。
中科大Fluent講稿.rar
展開 Matlab交互編程——疫情數據的可視化 ¥8.88
將元胞數組轉化為普通數組
table
系統函數
創建表數組
getStandardTime
自定義函數
轉換 Unix 時間為中國標準時間
fix
系統函數
朝零四舍五入
datestr
系統函數
將日期和時間轉化成字符串格式
datenum
系統函數
將日期和時間轉化為日期序列值
plotCoronavirusData
自定義函數
繪制新冠疫情分布數據
geobubble
系統函數
★★★★★
以可視化方式呈現地理數據
uiprogressdlg
系統函數
★★★
創建進度對話框
figure
系統函數
★★★
創建圖窗窗口
setAppDesignerIcon
自定義函數
設置App Designer 窗口圖標
setFigureIcon
自定義函數
設置 Figure 窗口圖標
核心代碼:
data = webread(url, webread_option); % 調用 webread 下載并解析疫情數據
map = geobubble(canvas, data, 'latitude', 'longitude'); % 繪制疫情地圖
實現過程:
1.
展開