
發布
注冊
/
登錄自定義求解的案例
Ansys Zemax | 如何使用 ZPL 創建用戶自定義求解
附件下載
聯系工作人員獲取附件
概述
本文使用兩個示例演示了如何使用 ZPL 創建用戶自定義解。第一個示例介紹了如何創建 ZPL 解以確保序列文件中像面的曲率半徑等于系統的 Petzval 曲率。第二個示例介紹了如何在非序列元件編輯器(Non-Sequential Component Editor)中基于其他物體的參數來約束的物體位置。
簡介
求解 ( Solve ) 是可以在諸如鏡頭數據編輯器或非序列元件編輯器之類的編輯器中主動調整特定值的功能。例如,可以在曲率半徑,圓錐系數或 TCE 上指定求解類型,并通過單擊要放置的求解單元的求解框進行設置。盡管 OpticStudio 提供了許多默認的求解類型,但用戶有可能希望自定義求解類型,這可以通過使用Zemax 編程語言( Zemax Programming Language ,ZPL)來實現。
ZPL 宏求解可用于任何編輯器中的幾乎所有單元(曲率半徑,厚度,參數,多重結構等)。可以像任何其他求解類型一樣,通過在編輯器中單擊參數單元格右側的小框來設置 ZPL 宏求解。
ZPL 宏求解通過執行 ZPL 宏來確定解的值,并使用 SOLVERETURN 關鍵字將其返回給編輯器。一旦創建了用于求解的宏,并將其放置在 <Documents>\Zemax\Macros 目錄中,即可在求解窗口的“宏:( Macro: )”中輸入該宏的名稱:
請注意,在求解框中輸入的宏名稱不區分大小寫,并且不需要其擴展名(.ZPL)。為確保宏求解按照預期的方式工作,需要遵循一些規則,請參閱“技巧和陷阱”部分以獲取更多信息。
Petzval 曲率求解示例
假設我們想要能夠自動將像面的曲率半徑設置為等于 Petzval 曲率的解。
展開 Ansys Zemax光學設計軟件技術教程:如何使用ZPL創建用戶自定義求解
本文使用兩個示例演示了如何使用ZPL創建用戶自定義解。 第一個示例介紹了如何創建ZPL解以確保序列文件中像面的曲率半徑等于系統的Petzval曲率。第二個示例介紹了如何在非序列元件編輯器 ( Non-Sequential Component Editor ) 中基于其他物體的參數來約束的物體位置。作者 Nam-Hyong Kim, updated by Alessandra Croce下載文章附件簡介求解 ( Solve ) 是可以在諸如鏡頭數據編輯器或非序列元件編輯器之類的編輯器中主動調整特定值的功能。例如,可以在曲率半徑,圓錐系數或TCE上指定求解類型,并通過單擊要放置的求解單元的求解框進行設置。盡管OpticStudio提供了許多默認的求解類型,但用戶有可能希望自定義求解類型,這可以通過使用Zemax編程語言( Zemax Programming Language ,ZPL)來實現。ZPL宏求解可用于任何編輯器中的幾乎所有單元(曲率半徑,厚度,參數,多重結構等)。可以像任何其他求解類型一樣,通過在編輯器中單擊參數單元格右側的小框來設置ZPL宏求解。ZPL宏求解通過執行ZPL宏來確定解的值,并使用 SOLVERETURN 關鍵字將其返回給編輯器。一旦創建了用于求解的宏,并將其放置在 <Documents>\Zemax\Macros 目錄中,即可在求解窗口的“宏:( Macro: )”中輸入該宏的名稱:請注意,在求解框中輸入的宏名稱不區分大小寫,并且不需要其擴展名(.ZPL)。
為確保宏求解按照預期的方式工作,需要遵循一些規則,請參閱“技巧和陷阱”部分以獲取更多信息。Petzval 曲率求解示例假設我們想要能夠自動將像面的曲率半徑設置為等于Petzval曲率的解。當然,在編寫宏之前,請始終先檢查一下仍不支持的解!
展開 ZEMAX | 如何使用 ZPL 創建用戶自定義求解
本文使用兩個示例演示了如何使用 ZPL 創建用戶自定義解。第一個示例介紹了如何創建 ZPL 解以確保序列文件中像面的曲率半徑等于系統的 Petzval 曲率。第二個示例介紹了如何在非序列元件編輯器 ( Non-Sequential Component Editor ) 中基于其他物體的參數來約束的物體位置。【請聯系我們領取文章的附件】
簡介
求解 ( Solve )
是可以在諸如鏡頭數據編輯器或非序列元件編輯器之類的編輯器中主動調整特定值的功能。例如,可以在曲率半徑,圓錐系數或 TCE 上指定求解類型,并通過單擊要放置的求解單元的求解框進行設置。盡管 OpticStudio 提供了許多默認的求解類型,但用戶有可能希望自定義求解類型,這可以通過使用Zemax 編程語言( Zemax Programming Language ,ZPL)來實現。
ZPL 宏求解可用于任何編輯器中的幾乎所有單元(曲率半徑,厚度,參數,多重結構等)。可以像任何其他求解類型一樣,通過在編輯器中單擊參數單元格右側的小框來設置 ZPL 宏求解。
ZPL 宏求解通過執行 ZPL 宏來確定解的值,并使用
SOLVERETURN
關鍵字將其返回給編輯器。一旦創建了用于求解的宏,并將其放置在 <Documents>\Zemax\Macros 目錄中,即可在求解窗口的“宏:( Macro: )”中輸入該宏的名稱:
請注意,在求解框中輸入的宏名稱不區分大小寫,并且不需要其擴展名(.ZPL)。
為確保宏求解按照預期的方式工作,需要遵循一些規則,請參閱“技巧和陷阱”部分以獲取更多信息。
Petzval 曲率求解示例
假設我們想要能夠自動將像面的曲率半徑設置為等于 Petzval 曲率的解。
展開 自定義求解器之Cholesky分解法
[L]{y} = {b}
for k in range(n):
self.b[k] = (self.b[k] - np.dot(self.A[k,0:k], self.b[0:k])) / self.A[k,k]
# 求解 [L^T]{x} = {y}
for k in range(n-1,-1,-1):
self.b[k] = (self.b[k] - np.dot(self.A[k+1:n,k], self.b[k+1:n])) / self.A[k,k]
return self.b
A = np.array([ [ 4, -1, 1],
[-1, 4.25, 2.75],
[1, 2.75, 3.5] ])
b = np.array([4, 6, 7.25])
cls = LinerSolver(A, b) #創建一個求解器的實例cls
x = cls.CholeskiSolver() #調用Choleski法求解
print(x)
與高斯消去法相比,LL分解的優點在于,一旦A被分解,我們就可以對任意多個常量向量b求解Ax=b。
展開 
自定義求解器之LDLT分解法
import numpy as np
def LDLTSolver(A, b):
n = len(A)
D = np.zeros((n))
for k in range(n):
D[k] = A[k, k] - np.dot(A[k, 0:k], A[0:k, k])
for i in range(k+1, n):
A[i, k] = ( A[i, k] - np.dot(A[i, 0:k], A[0:k, k]) ) / D[k]
A[0:i, i] = D[0:i] * A[i, 0:i]
for k in range(1,n):
A[0:k,k] = 0.0
for k in range(n):
A[k,k] = 1
# 求解 [L]{y} = {b}
y = np.zeros((n))
for k in range(n):
h = b[k] - np.dot(A[k,0:k], y[0:k])
y[k] = h
# 求解 [D]{z} = {y}
b = y/D
# 求解 [L^T]{x} = {z}
for k in range(n-1,-1,-1):
h = b[k] - np.dot(A[k+1:n,k], b[k+1:n])
b[k] = h
return b
A = np.array([ [1, 0.5, 0.5],
[0.5, 1, 0.5],
展開 面向對象有限元編程|自定義求解器之共軛梯度法
共軛梯度法是方程組求解的一種迭代方法。這種方法特別適合有限元求解,因為該方法要求系數矩陣為對稱正定矩陣,而有限元平衡方程的系數矩陣正好是對稱正定矩陣(考慮邊界條件)。同時,共軛梯度法也適合并行計算。
ZEMAX | 如何使用ZOS-API創建自定義操作數
本文將使用ZOS-API創建自定義操作數 (User Operand) 來計算各表面之間距離的絕對值之和,該操作數與TTHI操作數的功能相同。可以使用UDOC操作數將該自定義操作數添加到評價函數 (Merit Function) 中,以控制參數并執行優化。(聯系我們獲取文章附件)
引言
OpticStudio開發了一個應用程序接口(ZOS-API),可以使用最新的軟件技術連接和定制應用程序。雖然ZOS-API依賴于COM接口,但是它來源于.NET 庫,并且通過使用C++或C# (.NET) 來實現API的編程,具體使用取決于用戶對兩種語言的熟練程度。
應用程序與OpticStudio之間的連接有四種程序模式。這些模式通常可以分為兩個類別:
1) 完全控制(獨立模式和自定義擴展模式),這種情況下,用戶通常完全控制鏡頭設計和用戶界面;
2) 有限訪問(自定義操作數模式和自定義分析模式),這種情況下,用戶使用現有鏡頭文件的副本進行處理和分析。
本文的主要目標是討論自定義操作數模式。此模式幾乎與自定義分析 (User Analysis) 模式相同,只是它常創建用戶自定義操作數來進行自定義數據計算。通過在評價函數編輯器 (Merit Function Editor) 中使用UDOC操作數添加自定義操作數。與自定義分析模式一樣,該模式不允許對當前鏡頭系統或用戶界面進行更改(即:在這種模式下只允許對系統的副本進行更改)。自定義操作數可以使用C++(COM)或C# (.NET)編寫——具體使用取決于用戶對這兩種語言的熟悉程度。
打開新的編程模板
單擊C# >自定義操作數 (User Operand),使用C#創建自定義操作數。
展開 ZEMAX | 如何用 ZOS-API 創建用戶自定義分析
運行自定義分析
為了檢查我們的新自定義分析,我們現在可以啟動OpticStudio并打開透鏡文件 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx。
在編程 (Programming) 標簽下,我們找到自定義分析 (User Analyses),這里應該是我們剛剛做的分析。
當我們點擊它時,就會得到自定義分析的結果!
其他可能性
在本例中,表面變化、變化范圍和步長以及報告MTF的空間頻率都是編死的,但是可以簡單地添加對話框允許用戶輸入數值來改變硬編程。這樣們可以創建一個可以更通用的自定義分析。設置存儲在由鍵-值對組成的簡單字典中。當您的第一次啟動分析時,字典是空的,但是添加到設置字典中的任何條目都將在更新時保存。
展開 ZEMAX | 如何使用 ZOS-API 創建飛行時間自定義分析
在這篇文章中,我們將展示如何使用 ZOS-API 創建自定義分析 (User Analysis),以測量激光雷達系統的飛行時間 (TOF)。此分析將讀取 ZRD 文件,提取其數據并繪制到達探測器的光線的飛行時間。
什么是自定義分析?
ZOS-API (應用程序接口 (Application Programming Interface) ) 可以使用最新的軟件技術連接和定制應用程序。應用程序與 OpticStudio 之間的連接有四種程序模式,但可以分為兩大類:
1) 完全控制(獨立 (Standalone) 模式和自定義擴展 (User Extensions) 模式),這種情況下,用戶通常完全控制鏡頭設計和用戶界面;
2) 有限訪問(自定義操作數 (User Operands) 模式和自定義分析模式),這種情況下,用戶使用現有鏡頭文件的副本進行處理和分析。
自定義分析模式用于填充自定義分析的數據。這些數據是用 OpticStudio 提供的現有圖形來顯示,用于大多數分析。此模式不允許對當前鏡頭系統或用戶界面進行更改(即:在這種模式下只允許對系統的副本進行更改)。自定義分析可以用 C++ (COM) 或 C# (.NET) 編寫。本文的自定義分析是用 C#編寫的。
有關自定義分析的更多信息,請點擊編程 (Programming) 選項卡>關于ZOS-API (About the ZOS-API) >自定義分析 (User Analysis),查看內置幫助文件。
展開 CAD怎么自定義線型?CAD線型要怎么修改自定義的文字?1個簡單的自定義技巧!看即會!
02
CAD怎么自定義線型
以上其實就是一個極為簡單的自定義線型過程。
所以,如果你不需要定義過于復雜的線型,以上使用足夠了。
之后,會單獨開一篇推文,詳細介紹一下,自定義線型語句的代表含義。但是,這部分理論的東西,對于繪圖人員而言,其實有些冗雜。
因為工作以繪圖為主的小伙伴,其實更傾向于怎么解決問題,只想知其然的較多。知其所以然的需求,并不那么多。
所以,本文就不贅述了。下次,單開一篇推文。感興趣的小伙伴,可以著重看。
END
文章來源:建筑電氣與CAD
七、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.
展開 
ZEMAX | 如何創建ZOS-API自定義擴展將切比雪夫多項式轉換為擴展多項式
因此,用戶自定義擴展模式使用戶完全控制鏡頭設計和用戶界面。自定義擴展可以使用 C++ (COM) 或 C# (.NET)來編寫。本文的自定義擴展是用C#編寫的。
打開新的編程模板
點擊:編程 ( Programming ) > C# >自定義擴展 ( User Extension ),用C#創建自定義擴展:
使用Windows資源管理器打開解決方案文件夾:{Zemax}\ZOS-APIProject\CSharpUserExtensionApplication1。Visual Studio 也打開了新的解決方案。該解決方案包含模板代碼——可用作任何自定義擴展基礎的模板。在Visual Studio中,將自定義擴展編譯為可執行文件。然后將可執行文件復制到 {Zemax)\ZOS-API\Extensions 文件夾,以便OpticStudio可以使用。
打開切比雪夫自由曲面反射鏡示例
本文附件中的 “ChebyshevMirror_optimized.zar” 文件,該文件中包含切比雪夫多項式自由曲面反射鏡,光線聚焦在X和Y方向的+/- 10o視場內。
有關切比雪夫多項式的更多信息,請參閱: 基于切比雪夫多項式的新型自由曲面的設計與實現。
對該系統進行優化和公差分析之后,在將自由曲面反射鏡的圖紙發送給制造商之前,將切比雪夫多項式轉換為擴展多項式,這樣設計的系統就可以通過計算機輔助制造方程、模具校正和注塑過程中的模具收縮補償等工具實現。
OpticStudio有內置的非球面轉換工具,但是沒有將自由曲面轉換為其他面型的工具。幸運的是,可以使用ZOS-API構建工具。
展開 ANSYS里的自定義失效準則怎么定義的?
想請教各位:
ANSYS里的自定義失效準則怎么定義的呢?一定要用UPFs編用戶子程序才行嗎?UPFs看起來非常復雜啊,怎么辦?
又沒有人做過這個阿?
謝謝了!!!!
編程自定義函數
在以下教程和示例的幫助下,學習如何在VirtualLab Fusion中編寫自己的自定義函數!
傳輸函數
按照本教程的說明學習如何在VirtualLab Fusion中編寫自定義傳輸函數,并以一個理想的柱面透鏡為例。
編寫一個錐透鏡的傳輸函數
通過這個錐透鏡傳輸函數的附加示例,進一步加強您的VirtualLab編程知識。
可編程元件的自定義幫助
摘要
VirtualLab為您提供多種工具來實現自定義光源、組件、探測器等,這些自定義是由模塊和代碼段完成的。通過在VirtulLab中使用代碼段,可以調整光學設置的特定部分,例如可編程的高度輪廓。
對于此類自定義對象,可以使用代碼段幫助文檔。幫助文檔可以保存關于這些用戶定義元件的附加信息,并使其易于跟蹤、共享和分配。
可編程元件
? 在這個示例中,我們使用可編程光源進行演示,而且它的工作方式與VirtualLab中所有其他可編程元件相似。
? 雙擊光源,彈出編輯窗口。
可編程光源
? 我們使用可編程光源進行演示,而且它的工作方式與VirtualLab中所有其他可編程元件相似。
? 雙擊光源進入編輯窗口,點擊空間參數選項卡。
算法代碼段
? 然后,單擊代碼段部分的Edit按鈕,將彈出一個源代碼編輯器
代碼段幫助
? 在源代碼編輯器的幫助下,您可以添加諸如標題、作者、版本號、最后修改日期和代碼段的大概描述之類的信息。
代碼段幫助
? 接下來,轉到選項卡的全局參數,在這里,您可以通過點擊圖標來描述每個參數。
代碼段幫助
? 在保存更改后,通過單擊help按鈕,可以在概覽中顯示關于參數的幫助信息和注釋。
文件信息
展開