はじめに
Ansys Zemax OpticStudio(以下、Zemax) には、GUI上で
設定タブ → コンフィグレーション → 熱解析の設定
温度を指定し実行すると、
- 曲率
- 厚み
- 非球面係数
- 有効径
- 材料(屈折率)
といったパラメータを指定した温度に合わせ Multi-Configuration化してくれるので、
温度特性評価ではほぼ必須の機能です。
Multi-Configuration化とは、1つの光学系に対して、
温度や寸法などの条件だけを切り替えながら、
複数の状態を同時に管理・評価できるようにする仕組みです。
APIからも同じことをやりたい、と思った
ZOS-API(Zemax OpticStudio API)を使って
自動レポート作成のようなプログラムを作っていたのですが、
- 熱環境中での光学性能についてもまとめたい
- そのためにAPIで温度特性用のコンフィグレーション作成をやりたい
と思ったのです。
ところが……
「熱解析の設定」を直接呼ぶAPIは無さそう
少なくとも現時点の ZOS-API には、
GUIの「熱解析の設定」を そのまま実行するAPIは見当たりません。
じゃあAPIではどうするのか?
結論から言うと、
Multi-Configuration Editor(MCE)を1行ずつ自分で組み立てる
ことになります。
その具体例が、
Zemax公式が提供するAPIのサンプルコード18番 「18_SetMultiConfiguration」 です。
以下、この Sample18 のコードを抜粋しながら
「何をしているのか」を見ていきます。
Sample18 前半:Multi-Configuration Editor(MCE)の基本操作
レンズを読み込んで、MCEを取得
TheSystem.LoadFile(
TheApplication.SamplesDir +
"\\Sequential\\Objectives\\Double Gauss 28 degree field.zos",
False
)
TheMCE = TheSystem.MCE
ここでは単にサンプルレンズデータ「Double Gauss」を開き、
Multi-Configuration Editor(MCE)への参照を取得しています。
コンフィグを2つ追加(合計3コンフィグ)
TheMCE.AddConfiguration(False)
TheMCE.AddConfiguration(False)
- OpticStudioには最初から Config 1 が存在
- そこに2つ追加して Config 1 / 2 / 3 の構成になります
GUIで言うと
「Multi-Configuration Editorで“コンフィグレーションを挿入”を2回押した」
のと同じです。
オペランドを追加して THIC に変更
TheMCE.AddOperand()
MCOperand1 = TheMCE.GetOperandAt(1)
MCOperand2 = TheMCE.GetOperandAt(2)
MCOperand1.ChangeType(ZOSAPI.Editors.MCE.MultiConfigOperandType.THIC)
MCOperand2.ChangeType(ZOSAPI.Editors.MCE.MultiConfigOperandType.THIC)
MCEに THIC(厚み)行を2行 追加しています。
GUIなら
「Operand Type を THIC に変更」
という操作に相当します。
THICの対象面を指定
MCOperand1.Param1 = 0
MCOperand2.Param1 = 11
- THICオペランドの Param1 = 面番号
-
0は慣習的に「物体距離」の指定 -
11は面11の厚みで、今回のデータでは像面の1つ手前の距離(バックフォーカス長)でした。
コンフィグごとに値を設定
MCOperand1.GetOperandCell(1).DoubleValue = 10000.0
MCOperand1.GetOperandCell(2).DoubleValue = 5000.0
MCOperand1.GetOperandCell(3).DoubleValue = 1000.0
MCE表にすると、こんな状態です。
| Operand | Config1 | Config2 | Config3 |
|---|---|---|---|
| THIC (surf=0) | 10000 | 5000 | 1000 |
つまり、
物体距離だけを変えた3つのコンフィグ
を作っています。
コンフィグごとに Quick Focus を実行
quickfocus = TheSystem.Tools.OpenQuickFocus()
TheMCE.SetCurrentConfiguration(1)
quickfocus.RunAndWaitForCompletion()
TheMCE.SetCurrentConfiguration(2)
quickfocus.RunAndWaitForCompletion()
TheMCE.SetCurrentConfiguration(3)
quickfocus.RunAndWaitForCompletion()
重要なのはここです。
- Quick Focus は 「現在のコンフィグ」に対して実行される
- なので、
Config切り替え → 実行
を3回繰り返しています
結果として、
3つのコンフィグレーションそれぞれで、ちゃんとピント調整をした
Double Gauss レンズデータが出来上がる
というわけです。
Sample18 後半:「熱解析の設定」相当の処理をAPIで再現する
ここからが本題です。
Doublet を読み込み、コンフィグ2を追加
TheSystem.LoadFile(
TheApplication.SamplesDir +
"\\Sequential\\Objectives\\Doublet.zos",
False
)
TheMCE.AddConfiguration(False)
- Config 1:基準環境
- Config 2:高温環境
という想定になります。
オペランドを13行追加
for i in range(0, 12):
TheMCE.AddOperand()
最初の1行+12行で、
合計13オペランドを作成しています。
オペランドの種類を一気に定義
operandType = [
TEMP, PRES,
CRVT, THIC, GLSS, SDIA,
CRVT, THIC, GLSS, SDIA,
CRVT, THIC, SDIA
]
これは、GUIの「熱解析の設定」が内部で作る
MCE構造とほぼ同じです。
ポイントは、
- TEMP(温度) / PRES(圧力) は、それ以降のオペランドに影響する
- 並び順が非常に重要
という点です。
面番号(Param1)を設定
param1value = [1,1,1,1,2,2,2,2,3,3,3]
for i in range(0, 11):
TheMCE.GetOperandAt(i+3).Param1 = param1value[i]
- 面1、面2、面3 に対して
- CRVT / THIC / GLSS / SDIA をひとまとめで管理
という構造になります。
Thermal Pickup Solve を設定
ThermalPickupSolve =
TheMCE.GetOperandAt(1)
.GetOperandCell(1)
.CreateSolveType(ZOSAPI.Editors.SolveType.ThermalPickup)
ThermalPickupSolve._S_ThermalPickup.Configuration = 1
これは、
「Config1を基準にして、
温度差・圧力差からパラメータを計算する」
という設定です。
GLSSは Config Pickup を使う
ConfigPickupSolve =
TheMCE.GetOperandAt(1)
.GetOperandCell(1)
.CreateSolveType(ZOSAPI.Editors.SolveType.ConfigPickup)
- ガラス名は「熱変形する量」ではないため同じ文字列を使用。
-
Config1と同じ材質を指定した上で、TEMPの設定が効いているので
屈折率が温度に合わせ変化する。
なので、GLSSには Thermal Pickup ではなく
Config Pickup を使っています。
温度を設定して屈折率補正を有効化
TheMCE.GetOperandAt(1).GetOperandCell(2).DoubleValue = 100
TheSystemData.Environment.AdjustIndexToEnvironment = True
- Config2 の温度 = 100°C
- 温度・圧力による屈折率補正を有効化
ここまでやって、
ようやく GUI の「熱解析の設定」と同等の状態になります。
結局、このサンプルが言いたいこと
Sample18を通して分かるのは、
- Zemaxの熱解析は MCEベースの仕組み
- GUIで実行できる「熱解析の設定」機能はMCEを自動生成してくれているだけ
- APIでは、その自動生成処理を自分で書く必要がある
ということです。
おわりに
ZOS-APIを触っていると、
「GUIだと簡単なのに、APIだと回りくどい」
という場面にちょくちょく出会います。
Zemaxの熱解析設定も、その典型例かなと思います。
ただ一度、
- MCEの構造を理解して
- Thermal Pickup / Config Pickup を使い分けられるようになる
と、かなり自由度の高い温度評価ができるようになります。
ZOS-APIで熱解析を自動化したい人は、ぜひ参考にしてください。
※本記事は筆者個人の見解であり、所属組織の公式見解を示すものではありません。
問い合わせ
光学シミュレーションソフトの導入や技術相談、
設計解析委託をお考えの方はサイバネットにお問合せください。
気軽にこちらの問い合わせフォームからご連絡ください👇
お問い合わせフォームはこちら

