最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Fluent中創(chuàng)建自定義用戶界面|01Fluent用戶界面概念介紹

2021-09-12 19:42 作者:b占余文樂  | 我要投稿


譯自:Ansys_Fluent_UDF_Manual_2021R2 ?Part2

第1章:Fluent用戶界面概念介紹

本章概述了在ANSYS Fluent中創(chuàng)建與用戶定義函數(shù)相對應的用戶界面的過程。

1.1.介紹

面向接口的用戶定義函數(shù)是指對應于自定義圖形用戶界面的用戶定義函數(shù)。它們提供了一個優(yōu)勢,即可以隨時更改數(shù)據(jù)值,而無需重新編譯。此外,構建一個與UDF相對應的拋光用戶界面將在ANSYS Fluent和您的UDF之間創(chuàng)建一致的外觀和感覺。本手冊的這一部分將指導您使用Fluent創(chuàng)建自定義界面的過程,該界面允許您編輯和存儲數(shù)據(jù)以供您的UDF日后使用。在您的界面上可用的可能數(shù)據(jù)類型包括整數(shù)、實數(shù)、布爾值(切換按鈕)、字符串和列表。在本指南的這一部分中,將指導您創(chuàng)建具有這些功能的界面,并學習如何以您的UDF可以訪問的方式保存它們的值。

創(chuàng)建自定義界面的基本方法是使用Fluent宏。宏是由ANSYS創(chuàng)建的方案構造,用于開發(fā)Fluent界面。宏在Fluent中有多種用途,包括使用PR變量(第691頁)、創(chuàng)建接口元素(第699頁)和從網(wǎng)格中收集信息。當您通讀本指南的這一部分時,您將學習如何使用各種Fluent宏來構建定制的圖形用戶界面。

1.2.限制

這一部分是關于在Fluent中創(chuàng)建自己的界面所涉及的限制。

1.2.1.不能刪除或覆蓋讀入Fluent的菜單項

需要注意的是,在Fluent功能區(qū)選項卡右側添加了新菜單或菜單項的任何Scheme文件,一旦讀入Fluent,就無法將其刪除。此問題會導致對于不包含打開GUI的菜單項的方案文件不存在Scheme文件。如果您的Scheme文件沒有將菜單項添加到您已經(jīng)創(chuàng)建的菜單中,則您始終可以對Scheme文件進行更改并在再次讀取之前將其保存。在這種情況下,您可以使用cx-show-panel(p.696)打開您在Fluent中讀取的最新版本的GUI。如果您的Scheme文件確實包含一個菜單項來隨意打開您的界面,則該菜單項一旦讀入,就不能從Fluent中刪除。

此外,不能通過兩次讀入同一文件來覆蓋菜單項。如果您嘗試對Scheme文件進行更改,然后再次讀取它,您只會看到兩個同名的菜單項,這兩個菜單項引用了您已加載到Fluent中的兩個版本的界面。由于具有相同名稱的不同界面可能會很快造成混淆,因此建議您在嘗試更改包括菜單項的Scheme文件以打開您的界面時,只需關閉并重新啟動Fluent,即可從程序中刪除您的界面的所有早期版本。有關將菜單或菜單項添加到Fluent功能區(qū)選項卡右側的詳細信息,請參見將菜單添加到功能區(qū)右側(第717頁)。

1.2.2.幫助按鈕不可用

對話框中有一個內置的ANSYS幫助按鈕,該按鈕顯示在界面底部。由于您正在創(chuàng)建的界面不是由Fluent注冊的,因此幫助按鈕將不起作用。如果單擊“幫助”(Help),則會打開ANSYS幫助,并生成錯誤消息“找不到請求的頁面”。

1.3.Scheme基礎

Fluent中的GUI元素是在Scheme編程語言的實現(xiàn)中編寫的。要將Scheme文件加載到FLUENT中,單擊“File”,選擇“Read子菜單”,然后選擇Scheme.... Scheme語句在括號中編寫,并且常見陳述在其他陳述中。Scheme中的注釋行以半冒號開頭,變量名稱和Scheme命令不區(qū)分大小寫。在本節(jié)中,您將了解一些基本方案陳述以及如何使用它們,因為您為您的UDF創(chuàng)建GUI。有關方案語言的更完整指南,請訪問http:// www.scheme.com/tspl4/。

1.3.1.數(shù)據(jù)類型

Scheme允許使用許多重要的數(shù)據(jù)類型。本節(jié)提供的是Fluent允許您傳遞給您定義的函數(shù)的類型。

1.3.1.1. Boolean

(define isBool #t)

(set! isBool #f)

(display isBool)

(boolean? isBool)

  • 在Scheme中,使用符號#t為true和#f為false來初始化booleans。

  • 在上面的示例中,將初始化新的變量isBool,然后將其設置為false。

  • display命令是控制臺打印方法,允許您檢查變量的值。(display isBool)將輸出#f。

  • boolean?命令用于檢查以下參數(shù)是否是布爾值。(boolean?isBool)將輸出#t。

1.3.1.2.整數(shù)

(define isInt 1)

(set! isInt (+ isInt 1))

(display isInt)

(integer? isInt)

(number? isInt)

  • Scheme中的整數(shù)與大多數(shù)其他語言中的整數(shù)類似。

  • 在上面的示例中,新的變量isInt初始化為1.

  • 在下一行中,它遞增到2。記住,在Scheme中,操作始終在運行數(shù)據(jù)元素之前始終出現(xiàn)。

  • 使用display命令,我們可以檢查isInt的值確實是2.

  • integer?命令將檢查isInt是一個整數(shù)和number嗎?命令將檢查它是否是Scheme中的任何數(shù)字數(shù)據(jù)類型之一。這些命令的輸出將是#t。

1.3.1.3.實數(shù)

(define isReal 1.2)

(set! isReal (- isReal .5))

(display isReal)

(real? isReal)

(number? isReal)

  • Scheme中的實數(shù)以與整數(shù)類似的方式工作。

  • 在上面的示例中,新變量isReal初始化為1.2。

  • 在下一行中,它設置為其自身值減去0.5。請記住,在方案中,操作始終在運行數(shù)據(jù)元素之前出現(xiàn)。

  • Display命令允許我們驗證isReal的值為0.7。

  • 命令real?和number?既返回#t。

1.3.1.4.字符

(define isChar #\a)

(set! isChar #\b)

(display isChar)

(char? isChar)

  • Scheme中的字符始終以符號#\開頭。

  • 在上面的示例中,變量isChar被初始化為a值。在下一行中,變量被設置為b的值。

  • 使用display命令,我們可以檢查isChar的值是否確實是b。

  • char的結果是什么?命令將為#t。

注意:盡管上面的例子證明了變量可以設置為字符值,但您通常只會處理字符本身,因為為只有1個字符的數(shù)據(jù)類型分配變量沒有什么意義。

1.3.1.5.字符串

(define isString "This is a string")

(set! isString "This is a different string")

(display isString)

(string? isString)

(string-length isString)

(string-ref isString 0)

(set! isString (string-append isString " plus more"))

  • Scheme中的字符串與大多數(shù)其他語言中的字符串非常相似。

  • 在上例中,變量isString被初始化為\“This is a String\”。在下一行中,它被設置為值\“This is a Different String\”。

  • 使用display命令,我們可以確認isString的值為\“This is a Different String\”。

  • string?命令將通過輸出#t確認isString是字符串。

  • string-length命令將返回字符串中的字符數(shù),在本例中為26,string-ref命令將返回字符串中傳遞給它的整數(shù)位置的字符。在本例中,它將返回位置0或#\T.的字符。

  • string-append命令將兩個字符串相加,并將結果作為第三個字符串返回。上面的示例使用string-append命令將isString與“plus more”組合在一起。它還用了一set!命令將結果保存回變量isString。

  • IsString的新值現(xiàn)在應該是“This is a different string plus more”。

注意:雖然string-ref命令斷言字符串從位置0開始,但string-length命令始終將字符串視為從位置1開始。這是有意義的,因為string-length為1的字符串在位置0有一個字符。

1.3.1.6.符號

(define isSymbol 'abc)

(symbol? isSymbol)

(define isString "abc")

(eq? (string->symbol isString) isSymbol)

  • 符號有點類似于字符串的原子值。符號和字符串可以用于許多相同的目的,但有一些重要的區(qū)別,使符號在Scheme中有自己的位置。

  • 引用同一符號的多個變量名將被認為是同一個對象,這意味著當使用eq?函數(shù)在兩個引用相同符號內容的不同變量上調用,你會得到#t而不是像字符串那樣的#f。

  • 這可以從上面的例子中看到。一個符號,isSymbol,被初始化為abc。symbol?命令確認變量是符號。然后,字符串,isString被初始化為相同的值abc。下面的行說明了兩個要點。首先,可以使用string->symbol命令將任何字符串轉換為符號。第二,任何兩個具有相同內容的符號都被認為是相同的對象,并且是相等的。在這種情況下eq?語句將返回#t。

  • 此外,符號是不可變的,這意味著它們一旦被創(chuàng)建就不能被更改。另一方面,字符串是可變的,這意味著它們可以被修改,例如,使用string-append(參見字符串(p. 720))。

  • 這表明,雖然字符串作為一種數(shù)據(jù)類型有更多的通用性,符號是一種輕量級的、容易比較的數(shù)據(jù)類型,當你知道你不需要做任何修改,一旦你創(chuàng)建了它。因此,符號經(jīng)常出現(xiàn)在Scheme代碼中不需要字符串的地方。

1.3.1.7.配對和列表

(a . b)

(define aPair (cons 1 2))

(a . (b . (c . ())))

(define aList (list 1 2 3 4 5))

(car aList)

(cdr aList)

(list-ref aList 2)

(list-tail aList 1)

  • 對和列表是兩個相關的方案數(shù)據(jù)構造,通常在需要將多個數(shù)據(jù)項存儲在一起時使用。

  • 對是可以從同一變量名訪問的兩個數(shù)據(jù)項。配對通常表示為兩個數(shù)據(jù)項,其間有句點,如上例中的第一行。使用cons語句創(chuàng)建對,如上面示例的第二行所示。

  • 配對可用于創(chuàng)建列表。列表是第二個元素是另一個對的對。這使得您的列表只要您需要,就可以擁有正確數(shù)量的附加對。

  • 上例的第三行顯示了由單個對組成的列表在概念上的外觀。上例中的第四行顯示了如何使用list語句創(chuàng)建列表。

  • 上面示例的其余部分顯示了如何訪問列表中的某些數(shù)據(jù)。car語句用于訪問列表中的第一項。在上面的示例中,它將返回1。cdr語句用于訪問列表中除第一項以外的所有內容。在上面的示例中,它將返回(2 3 4 5)。

  • list-ref語句用于根據(jù)項目在列表中的位置訪問列表中的項目。上例中的list-ref語句將返回3。list-ail語句用于從您指定的位置開始返回列表中的其余項。在上面的示例中,由于它被作為起點傳遞到位置1,所以list-ail語句將返回(2 3 4 5)。

1.3.2.重要的概念

在創(chuàng)建您自己的Fluent界面時,有許多Scheme概念是非常重要的。本節(jié)討論您最有可能在本指南中的示例中看到并在構建您自己的界面時使用的那些概念。

1.3.2.1. Define

(define isInt 1)

(define whoKnows)

define語句用于在Scheme中創(chuàng)建新變量。

Scheme中的變量沒有類型,而是返回值。返回值本身也有類型,但是使用變量名本身就像調用一個可以返回任何類型的值的函數(shù)。例如,上例中的變量isInt返回整數(shù)1。

Scheme變量在創(chuàng)建時不必使用值進行初始化。在上面的示例中,變量whoKnows為空,可以賦給任何類型的值。

1.3.2.2. Set!

(define someVariable)

(set! someVariable 1)

(set! someVariable 2.5)

  • set!語句用于為已創(chuàng)建的變量賦值。如果變量尚未通過define語句創(chuàng)建,您將收到未綁定變量錯誤(unbound variable error)。

  • 由于Scheme中沒有變量類型,因此可以用多種類型的數(shù)據(jù)覆蓋一個變量。在上面的示例中,變量some Variable最初為空。

  • 在第一個set!之后語句中,some Variable將返回整數(shù)值1。在第二個set!之后,然而,someVariable語句將返回實際值2.5。

  • 變量使用的這種靈活性有其優(yōu)勢,因為創(chuàng)建變量并立即開始使用它很容易。如果您不努力跟蹤每個變量的返回類型,這也可能是一個問題。

1.3.2.3. Let

(let ((x 5))

?(let ((x 2)

? ? ? ?(y x))

? ?(+ y x)))

  • let語句定義它們內部發(fā)生的變量綁定的范圍,它們類似于C和C++中的{}。

  • let語句分為兩個部分。第一部分以緊跟在單詞let后面的圓括號開始。在這組圓括號內是要為let語句的其余部分定義的變量綁定。

  • 對于上例中的外部let,第一部分由變量綁定(x 5)組成。對于上面示例的內部let,第一部分由變量綁定(x 2)和(y x)組成。

  • let語句的第二部分稱為正文。一旦變量綁定完成,這里就是使用這些變量的操作發(fā)生的地方。

  • 對于上例中的外部let,正文由第一部分之后的所有內容組成,包括內部let,直到最后一個括號。對于上面示例中的內部let,主體包括語句(y x)。

  • 當let嵌套時(如上例所示),外部let和內部let都將一個值綁定到同一個變量,則外部let綁定的值將一直使用,直到內部let的第一部分關閉。

  • 因此,上例中的(y x)語句將為x使用值2,而不是5。但是,此語句中y的值仍為5,因為當y被賦予x的值時,它沒有看到x已更改為2,因為內部字母的第一部分尚未閉合。這就是加法的結果為7。

1.3.2.4. Lambda

(define doubleProcedure (lambda (x) (+ x x)))

(doubleProcedure 1)

  • lambda 關鍵字用于創(chuàng)建新的 Scheme 過程。

  • 使用 lambda 關鍵字創(chuàng)建新過程時,必須首先提供將在過程中使用的變量列表。一旦聲明了變量,您就可以指定過程的功能。

  • 在上面的例子中可以看到這個過程。一旦使用關鍵字 lambda 使 doubleProcedure 成為過程,就聲明了變量 x。由于 x 是此過程中使用的唯一變量,我們現(xiàn)在可以繼續(xù)進行功能,它由該行的 (+x x) 部分組成。

  • 現(xiàn)在已經(jīng)創(chuàng)建了過程,我們可以使用任意數(shù)字作為 x 調用它,如上面示例的第二行所示,它將返回 2。

1.3.2.5. If

(define ifExample (lambda (x) (if (>= x 0) (+ x 1) (- x 1))))

(ifExample 1)

(ifExample -1)

  • Scheme IF語句與大多數(shù)其他編程語言中的IF語句具有相同的基本邏輯,盡管語法略有不同。

  • 在Scheme中,if語句由三部分組成。第一部分是測試,它決定如何繼續(xù)執(zhí)行其余的if代碼。

  • 第二部分是結果(consequent),即測試為真時執(zhí)行的代碼塊。

  • 第三部分是替代(alternative),它對應于其他流行語言中的else語句。如果測試為假,則執(zhí)行此代碼塊。

  • 在上面的示例中,創(chuàng)建了一個名為ifExample的過程來顯示if語句是工作原理。有關在Scheme中創(chuàng)建過程的信息,請參見Lambda(第724頁)。

  • 過程主體中有一個簡單的if語句,本例中的測試為(>= x 0),結果為(+ x 1),替代為(- x 1)。

  • 傳遞數(shù)字時,ifExample過程將在數(shù)字大于或等于0時遞增數(shù)字,如果數(shù)字為負數(shù)則遞減。因此,函數(shù)調用(IfExample 1)將返回2,函數(shù)調用(ifExample-1)將返回-2

1.3.2.6. Map

(define halve (lambda (x) (/ x 2)))

(map halve (list 2 4 6 8 10))

  • Scheme map語句將所需的函數(shù)應用于列表的每個元素。有關列表的更多信息,請參 Pairs and Lists (p. 721)。

  • 上面的例子使用了一個叫做halve 的函數(shù)。有關使用 lambda 語句創(chuàng)建函數(shù)的更多信息,請參閱 Lambda (p. 724)。

  • 在上面的例子中,函數(shù)halve被創(chuàng)建以將傳遞給它的任何數(shù)字除以2。

  • 在第二行,一個map語句用于將halve函數(shù)應用于列表的每個數(shù)字(list 2 4 6 8 10 ).這個map語句返回(1 2 3 4 5)。

  • map 語句基本上可以與任何函數(shù)一起使用,只要該函數(shù)與其操作的列表項兼容

1.4. RP 變量

RP 變量是為在 Fluent 中使用而創(chuàng)建的變量,它提供了一種將數(shù)據(jù)從 GUI(在 Scheme 中)傳遞到已編譯或解釋的 UDF(在 C 中)的方法。 RP 變量可以從 GUI 和 UDF 訪問。因此,要將數(shù)據(jù)從 GUI 傳遞到 UDF,您只需在 GUI 代碼中為 RP 變量創(chuàng)建和賦值,然后在 UDF 代碼中訪問這些相同的變量。

1.4.1.創(chuàng)建 RP 變量

要在 Scheme 中創(chuàng)建新的 RP 變量,您必須使用宏 (rp-var-define)。例如,以下命令創(chuàng)建一個名為 myInt 的整數(shù) RP 變量,默認值為 1。

(rp-var-define 'myInt 1 'integer #f)

注意:符號通常用作 Scheme 函數(shù)中的參數(shù)而不是字符串

在創(chuàng)建 RP 變量之前,最好先檢查該名稱的 RP 變量是否尚未定義。一種簡單的方法是創(chuàng)建一個名為 make-new-rpvar 的函數(shù),它會在創(chuàng)建之前通過該名稱檢查 RP 變量是否存在。下面的 make-new-rpvar 函數(shù)可以復制到您的 Scheme 文件中并用于確保您選擇的名稱的 RP 變量在創(chuàng)建之前不存在。

(define (make-new-rpvar name default type)

?(if (not (rp-var-object name))

? ?(rp-var-define name default type #f)))

(make-new-rpvar 'myInt 1 'integer)

1.4.2.更改 RP 變量

為了從您的 Scheme GUI 更改 RP 變量,您必須使用 (rpsetvar) 宏。例如,如果要將在創(chuàng)建 RP 變量 (p. 725) 中創(chuàng)建的 myInt 變量更改為 3 而不是 1,則可以使用以下語句:

(rpsetvar 'myInt 3)

注意:您分配給現(xiàn)有 RP 變量的新值必須是最初聲明的類型,否則您將收到錯誤消息。

(rpsetvar) 語句常用于 apply-cb 函數(shù)中,單擊 OK 按鈕時會調用該函數(shù)。這樣,當您單擊“OK”時,就會為 RP 變量設置新值,然后 UDF 可以在需要運行時訪問新值.

1.4.3.在 GUI 中訪問 RP 變量的值

通常需要訪問GUI和UDF中的RP變量值。這對于在每次打開 GUI 時顯示每個變量的現(xiàn)有值非常有用。通過這樣做,您就可以在每次更改RP變量時知道它的現(xiàn)有值。要訪問Scheme中的RP變量,必須使用(%rpgetvar)宏。此宏通常用于將局部變量的值設置為RP變量的當前值。例如,如果您有一個名為localInt的整數(shù)輸入框和一個名為rpInt的整數(shù)RP變量,則可以使用以下語句將localInt的值設置為rpInt的值。

(cx-set-integer-entry localInt (%rpgetvar 'rpInt))

由于此語句旨在在您打開 GUI 時更新每個字段中的值,因此此類語句通常出現(xiàn)在 update-cb 函數(shù)中,每次打開 GUI 對話框或任務頁面時都會調用該函數(shù)。

1.4.4.在 UDF 中訪問 RP 變量的值

要訪問要在 UDF 中使用的 RP 變量的值,請參閱Accessing a Scheme Variable in a UDF ?(p. 384)。

1.4.5.保存和加載 RP 變量

一旦創(chuàng)建了新的 RP 變量,它們的當前值將在每次保存案例文件時存儲在案例文件中。在嘗試從案例文件中加載 RP 變量值時,加載案例文件和Scheme文件的順序無關緊要.如果在讀取案例文件之前讀取Scheme文件,將使用Scheme文件中指定的默認值創(chuàng)建 RP 變量。然后當讀取案例文件時,這些值將被案例文件中的值覆蓋。如果在 Scheme 文件之前讀入案例文件,則會創(chuàng)建 RP 變量并將其設置為案例文件中指定的值。

當Scheme文件被讀入時,當它識別到案例文件已經(jīng)創(chuàng)建了這些RP變量時,它將忽略RP變量創(chuàng)建語句。

注意:為了確保您的 Scheme 文件能夠識別案例文件何時創(chuàng)建了 RP 變量,請確保在創(chuàng)建 RP 變量時使用創(chuàng)建 RP 變量 (p. 725) 中定義的 Scheme 函數(shù)。

1.5. .fluent 文件

當 Fluent 首次啟動時,它會在您的主文件夾(home folder)中查找名為 .fluent 的文件。如果它在您的主文件夾中找到 .fluent 文件,它會將其作為 Scheme 文件加載。就像在讀取包含 UDF 的 case 文件時 UDF 會自動加載到 Fluent 中一樣,Scheme 文件可以在每次程序啟動時使用 .fluent 文件自動加載到 Fluent 中。 以下步驟將引導您完成創(chuàng)建和使用.fluent 文件。本示例中創(chuàng)建的特定 .fluent 文件加載到三個單獨的示例 Scheme 文件中:Schemefile1.scm、Schemefile2.scm 和 Schemefile3.scm。

(ti-menu-load-string "file read-journal Schemefile1.scm")

(ti-menu-load-string "file read-journal Schemefile2.scm")

(ti-menu-load-string "file read-journal Schemefile3.scm")

  • 第一步是將每次 Fluent 啟動時要加載的每個 Scheme 文件復制到您的主文件夾中。

  • 接下來,您必須在基本文本編輯器(例如記事本)中打開一個新的空白文檔。在此空白文檔中,您將為 Fluent 啟動時要加載的每個 Scheme 文件添加一行。這些行是 Scheme 命令,它們使用 Fluent 文本用戶界面 (TUI) 相應地加載每個 Scheme 文件。上面的示例 Scheme 行將允許 .fluent 文件加載 Scheme 文件 Schemefile1.scm、Schemefile2.scm 和 Schemefile3.scm。命令 ti-menu-loadstring 部分是調用將后面的字符串加載到 Fluent TUI 中。字符串開始文件 read-journal 告訴 Fluent 讀入后面的 Scheme 文件。有關 Fluent TUI 的更多信息,請參閱 Ansys Fluent 用戶指南。

  • 最后,您必須將文檔以名稱 .fluent 保存在您的主文件夾中。請注意,在允許您定義自己的文檔類型之前,某些文本編輯器會強制您將文檔類型從默認類型更改為所有文件 (*.*)。Windows 機器通常不允許文檔名稱以句點開頭。為了解決這個問題,您必須在名稱末尾添加第二個句點。例如,.fluent. 將是您在創(chuàng)建 .fluent 文件時要輸入的名稱。單擊“save”時,您可能會收到有關所選文件名的警告,具體取決于您使用的文本編輯器。您應該忽略此警告。保存文檔時,它應該刪除第二個句點并將文件命名為 .fluent

  • 現(xiàn)在應該在您的主文件夾中擁有所有所需的 Scheme 文件和一個完整的 .fluent 文件。從現(xiàn)在開始,每次啟動 Fluent 時都會自動讀取每個 Scheme 文件

注意:Scheme 文件是按照它們在 .fluent 文件中請求的順序讀入 Fluent 的。因此,如果一個 Scheme 文件為在不同 Scheme 文檔中定義的對話框創(chuàng)建了一個菜單項,您應該在讀入為其創(chuàng)建菜單項的 Scheme 文件之前,請務必先讀入定義對話框的 Scheme 文件。


Fluent中創(chuàng)建自定義用戶界面|01Fluent用戶界面概念介紹的評論 (共 條)

分享到微博請遵守國家法律
洪泽县| 汾西县| 稷山县| 安多县| 兴业县| 临清市| 清河县| 宜川县| 阳朔县| 江华| 渭源县| 木里| 合山市| 蒙城县| 泾川县| 沂源县| 湾仔区| 寿宁县| 错那县| 奎屯市| 南丹县| 临夏市| 楚雄市| 灵寿县| 祁连县| 雅安市| 札达县| 钦州市| 澄城县| 安新县| 长宁区| 威海市| 桃江县| 年辖:市辖区| 玉龙| 囊谦县| 怀宁县| 拉萨市| 田东县| 图们市| 吴桥县|