IC 基板の空冷

Femtet の熱伝導ソルバー・簡易流体解析ソルバーの連成解析を用い 基板上の IC チップの最高温度を最小にしつつ 基板のサイズを最小にする 基板寸法と冷却風角度を探索する例題を解説します。

注釈

関係する例題: 基板上の発熱体

サンプルファイル

注釈

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

注釈

FEM 問題としての詳細については、FemtetHelp / 例題集 / 簡易熱流体解析 / 例題1 を参照してください。

解析モデルの概要と設計変数

../../_images/paswat_ex1_model.png

モデルの外観

変数名

説明

substrate_w

基板の幅

substrate_d

基板の奥行き

rot

基板の回転角

目的関数

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

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

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

サンプルコード

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

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

../../_images/paswat_ex1_result.png

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

反復計算の結果、以下のことがわかります。
  • MAINCHIP 温度と SUBCHIP 温度には正の相関があります。

  • 基板サイズと各CHIP温度は負の相関関係があり、同時に小さくすることはできません。

  • 設計変数の組み合わせによっては、同じ基板サイズでも MAINCHIP と SUBCHIP の温度をさらに下げることができる条件があります。

多目的最適化では、すべての目的関数の値が他の解と比較して目標から遠い (つまり、それを選択する理由がない) 解は、「劣解」 と呼ばれます。

一方、「非劣解」 の集合は パレート集合 と呼ばれます。

パレート集合には一般にトレードオフがあります。製品設計のパラメータ最適化では、製品の大まかな設計と変数の設定方法によってパレート集合が決まります。

したがって、設計者はパレート集合全体がすべての目的関数の目標値に近づくように大まかな設計を行うことが重要です。

最後にパレートセットから解を選択し、設計に反映させます。

Tip

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

注釈

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

注釈

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