1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zemaxの「熱解析の設定」、APIからは直接呼べなかった

1
Last updated at Posted at 2026-01-20

はじめに

Ansys Zemax OpticStudio(以下、Zemax) には、GUI上で

設定タブ → コンフィグレーション → 熱解析の設定

という、とても便利な機能があります。
スクリーンショット 2026-01-20 154735.png

温度を指定し実行すると、

スクリーンショット 2026-01-20 154821.png

  • 曲率
  • 厚み
  • 非球面係数
  • 有効径
  • 材料(屈折率)

といったパラメータを指定した温度に合わせ 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で熱解析を自動化したい人は、ぜひ参考にしてください。


※本記事は筆者個人の見解であり、所属組織の公式見解を示すものではありません。

問い合わせ

光学シミュレーションソフトの導入や技術相談、
設計解析委託をお考えの方はサイバネットにお問合せください。

気軽にこちらの問い合わせフォームからご連絡ください👇
お問い合わせフォームはこちら

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?