基板上の発熱体

Femtet の熱伝導解析ソルバーを用い 基板上の IC チップの最高温度を最小にしつつ 基板のサイズを最小にする 基板寸法を探索する例題を解説します。

サンプルファイル

注釈

サンプルプロジェクト を Femtet で開いたまま、 サンプルコード をダブルクリックして実行してください。

注釈

FEM 問題としての詳細については、FemtetHelp / 例題集 / 熱伝導解析 / 例題14 を参照してください。

設計変数

../../_images/wat_ex14_model.png

モデルの外観

変数名

説明

substrate_w

基板の幅

substrate_d

基板の奥行き

目的関数

  • メインチップの最高温度(最小にする)

  • サブチップの最高温度(最小にする)

  • 基板の平面上の専有面積(最小にする)

サンプルコード

wat_ex14_parametric.py
 1"""多目的最適化: プリント基板上ICの発熱
 2
 3Femtetの熱伝導解析ソルバを使用して、ICチップの発熱を抑えつつ
 4基板サイズを小さくする設計を行います。
 5
 6対応プロジェクト: wat_ex14_parametric_jp.femprj
 7"""
 8from pyfemtet.opt import FEMOpt
 9
10
11def chip_temp(Femtet, chip_name):
12    """チップの最高温度を取得します。
13
14    Note:
15        目的関数または制約関数は、
16        第一引数としてFemtetを受け取り、
17        戻り値としてfloat型を返す必要があります。
18
19    Params:
20        Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
21        chip_name (str): femprj 内で定義されているボディ属性名です。有効な値は 'MAINCHIP' 又は 'SUBCHIP' です。
22
23    Returns:
24        float: 指定されたボディ属性名のボディの最高温度です。
25    """
26    Gogh = Femtet.Gogh
27
28    max_temperature, min_temperature, mean_temperature = Gogh.Watt.GetTemp(chip_name)
29
30    return max_temperature  # 単位: 度
31
32
33def substrate_size(Femtet):
34    """基板のXY平面上での専有面積を計算します。"""
35    substrate_w = Femtet.GetVariableValue('substrate_w')
36    substrate_d = Femtet.GetVariableValue('substrate_d')
37    return substrate_w * substrate_d  # 単位: mm2
38
39
40if __name__ == '__main__':
41
42    # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
43    femopt = FEMOpt()
44
45    # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
46    femopt.add_parameter("substrate_w", 40, lower_bound=22, upper_bound=60)
47    femopt.add_parameter("substrate_d", 60, lower_bound=33, upper_bound=60)
48
49    # 目的関数を最適化問題に追加
50    femopt.add_objective(fun=chip_temp, name='MAINCHIP<br>最高温度(度)', direction='minimize', args=('MAINCHIP',))
51    femopt.add_objective(fun=chip_temp, name='SUBCHIP<br>最高温度(度)', direction='minimize', args=('SUBCHIP',))
52    femopt.add_objective(fun=substrate_size, name='基板サイズ(mm2)')
53
54    # 最適化を実行
55    femopt.set_random_seed(42)
56    femopt.optimize(n_trials=15)

サンプルコードの実行結果

../../_images/wat_ex14_result.png

wat_ex14_parametric.py の実行結果。 各目的関数の組み合わせが縦軸、横軸となる ペアプロットです。

20 回の反復計算の結果、以下のことがわかります。

  • メインチップ温度とサブチップ温度は片方を小さくしてももう片方も小さくできる

  • 基板サイズを小さくすると、メインチップ温度は大きくなってしまう

  • 基板サイズを小さくすると、サブチップ温度は大きくなってしまう

このことから、メインチップとサブチップはともに温度を最小化する設計が可能であるのに対し それぞれのチップ温度と基板サイズはトレードオフの関係にあり、これらの最小化は両立しないことがわかります。

Tip

多目的最適化では、目的関数同士の最適化が両立しないことがあります。 こうした場合、設計者が各トレードオフ解の中から 適した設計を選択する必要があります。

注釈

こうしたトレードオフが生じる物理的理由は最適化アルゴリズムからは導けないため、 設計者が Femtet の解析結果を分析するなどして解釈する必要があります。

今回の問題では、基板サイズが小さくなったことで環境への放熱能力が小さくなり、 熱が基板から逃げないためにチップ温度が上昇しているものと考察できます。

注釈

Femtet, PyFemtet および依存する最適化エンジンのバージョンにより、結果は多少異なる場合があります。