OpenFOAMで基板の放熱シミュレーションみたいなのをやってみた [chtMultiRegionFoam]

2025-06-22 · Tomoki Ikegami

"基板上のチップの放熱を想定した熱流体固体連成解析をやってみる"

~ 目次 ~

1. やってみたこと

 基板上の発熱しているチップが冷却される感じのシミュレーションをOpenFOAMを使ってやってみました。アルバイトの装置開発とか趣味のラジコンレシーバ開発に応用したくてトライしました!

 熱流体シミュレーションもOpenFOAMも初心者なので、足らないところも多いと思いますのでアドバイスいただけると嬉しいです( ;∀;)

2. シミュレーションの概要

 基板を想定した四角形の薄板の上に、チップを想定した四角形の小さい薄板をのせました。基板の初期温度は 300 K で、チップの初期温度は 400 Kに設定して解析を行います。基板のX軸方向に流速を与えて強制冷却します。

 chtMultiRegionFoam の公式チュートリアル (chtMultiRegionHeater) をベースにして、改造して作りました。

 なので、基板の上は空気で基板の下が水という状態になっています。(どうゆう状態だよw)

シミュレーションの概要
☝ シミュレーションの概要

3. シミュレーション条件

 シミュレーション条件を解析に使用したファイルを出しながら説明します。

 解析に使用した全ファイルはGitHubに載せたので、完全版を見たい方はそちらをご覧いただければと思います。

3.1. メッシュ

3.1.1. 計算領域全体

 0.2 × 0.08 × 0.01 m (X, Y, Z の順番)の計算領域のメッシュを初めに生成しています。このあとに topoSetDict で区切っていくことで、基板チップ部分、基板部分、空気部分、水部分を作っていきます。

 分割数は、X方向に30分割、Y方向に100分割、Z方向に10分割しています。基板上のチップが薄いので、Y方向の分割数を多くしないとうまくメッシングできませんでした(+o+)

 system/blockMeshDict の中身

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

scale   1;

vertices
(
    (-0.1 -0.04  -0.05)
    ( 0.1 -0.04  -0.05)
    ( 0.1  0.04  -0.05)
    (-0.1  0.04  -0.05)
    (-0.1 -0.04   0.05)
    ( 0.1 -0.04   0.05)
    ( 0.1  0.04   0.05)
    (-0.1  0.04   0.05)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (30 100 10) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    maxY
    {
        type wall;
        faces
        (
            (3 7 6 2)
        );
    }
    minX
    {
        type patch;
        faces
        (
            (0 4 7 3)
        );
    }
    maxX
    {
        type patch;
        faces
        (
            (2 6 5 1)
        );
    }
    minY
    {
        type wall;
        faces
        (
            (1 5 4 0)
        );
    }
    minZ
    {
        type wall;
        faces
        (
            (0 3 2 1)
        );
    }
    maxZ
    {
        type wall;
        faces
        (
            (4 5 6 7)
        );
    }
);

mergePatchPairs
(
);


// ************************************************************************* //

3.1.2. cellZone(計算領域から区切っていく)

 計算領域を区切って、基板部分(ここではsubstrate)、チップ部分(ここではheater)、空気部分(ここではtopAir)、水部分(ここではbottomWater)を作成します。

system/topoSetDict の中身

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

actions
(
    // Substrate(基板全体): 左右両方をカバー
    {
        name    substrateCellSet;
        type    cellSet;
        action  new;
        source  boxToCell;
        box     (-0.06 0 -0.02) (0.06 0.00999 0.02); // x方向に広く
    }
    {
        name    substrate;
        type    cellZoneSet;
        action  new;
        source  setToCellZone;
        set     substrateCellSet;
    }

    // Heater: Substrate の上に乗る薄い層
    {
        name    heaterCellSet;
        type    cellSet;
        action  new;
        source  boxToCell;
        box     (-0.01 0.00999 -0.01) (0.01 0.011 0.01); // yをsubstrateの上に
    }
    {
        name    heater;
        type    cellZoneSet;
        action  new;
        source  setToCellZone;
        set     heaterCellSet;
    }

    // bottomWater
    {
        name    bottomWaterCellSet;
        type    cellSet;
        action  new;
        source  boxToCell;
        box     (-100 -100 -100) (100 0 100); // 基板の下に水
    }
    {
        name    bottomWater;
        type    cellZoneSet;
        action  new;
        source  setToCellZone;
        set     bottomWaterCellSet;
    }

    // topAir: 他の全領域以外
    {
        name    topAirCellSet;
        type    cellSet;
        action  new;
        source  cellToCell;
        set     substrateCellSet;
    }
    {
        name    topAirCellSet;
        type    cellSet;
        action  add;
        source  cellToCell;
        set     heaterCellSet;
    }
    {
        name    topAirCellSet;
        type    cellSet;
        action  add;
        source  cellToCell;
        set     bottomWaterCellSet;
    }
    {
        name    topAirCellSet;
        type    cellSet;
        action  invert;
    }
    {
        name    topAir;
        type    cellZoneSet;
        action  new;
        source  setToCellZone;
        set     topAirCellSet;
    }
);


// ************************************************************************* //

3.2. 材料物性

 FR-4製の基板に、シリコン製のチップが載っているという想定で次の材料物性を次のように設定しました(水と空気の物性は省略)。

 constant/substrate/thermophysicalProperties (基板側)

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      thermophysicalProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

thermoType
{
    type            heSolidThermo;
    mixture         pureMixture;
    transport       constIso;
    thermo          hConst;
    equationOfState rhoConst;
    specie          specie;
    energy          sensibleEnthalpy;
}

mixture
{
    specie
    {
        molWeight   50;
    }
    transport
    {
        kappa   0.35;
    }
    thermodynamics
    {
        Hf      0;
        Cp      450;
    }
    equationOfState
    {
        rho     1900;
    }
}


// ************************************************************************* //

 constant/heater/thermophysicalProperties (チップ側)

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      thermophysicalProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

thermoType
{
    type            heSolidThermo;
    mixture         pureMixture;
    transport       constIso;
    thermo          hConst;
    equationOfState rhoConst;
    specie          specie;
    energy          sensibleEnthalpy;
}

mixture
{
    specie
    {
        molWeight   50;
    }
    transport
    {
        kappa   1.0;
    }
    thermodynamics
    {
        Hf      0;
        Cp      1000;
    }
    equationOfState
    {
        rho     1800;
    }
}


// ************************************************************************* //

3.3. 境界条件

 ヒーターのすべての面に 400 Kの初期温度を設定しています。それ以外の部分(基板部分、空気、水)には 300 K の温度を設定しています。

 system/substrate/changeDictinaryDict(基板側)

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      changeDictionaryDict;
}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

boundary
{
    minY
    {
        type            patch;
        inGroups        (coupleGroup);
    }
    minZ
    {
        type            patch;
    }
    maxZ
    {
        type            patch;
    }
}

T
{
    internalField   uniform 300;

    boundaryField
    {
        ".*"
        {
            type            zeroGradient;
            value           uniform 300;
        }

        "substrate_to_.*"
        {
            type            compressible::turbulentTemperatureRadCoupledMixed;
            Tnbr            T;
            kappaMethod     solidThermo;
            value           uniform 300;
        }
    }
}

// ************************************************************************* //

 system/substrate/changeDictinaryDict(チップ側)

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      changeDictionaryDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

boundary
{
    minY
    {
        type            patch;
        inGroups        (coupleGroup);
    }
    minZ
    {
        type            patch;
    }
    maxZ
    {
        type            patch;
    }
}

T
{
    internalField   uniform 400;

    boundaryField
    {
        ".*"
        {
            type            zeroGradient;
            value           uniform 400;
        }
        "heater_to_.*"
        {
            type            compressible::turbulentTemperatureRadCoupledMixed;
            Tnbr            T;
            kappaMethod     solidThermo;
            value           uniform 400;
        }
   }
}


// ************************************************************************* //

3.4. 計算の設定

 ほとんどデフォルトのままです。熱の伝わるスピードが意外と速かったので、計算結果の書き出し間隔(writeInterval)を短くして 0.5 [s]にしました。

system/controlDict

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application     chtMultiRegionFoam;

startFrom       latestTime;

startTime       0.001;

stopAt          endTime;

endTime         100;

deltaT          0.001;

writeControl    adjustable;

writeInterval   0.5;

purgeWrite      0;

writeFormat     ascii;

writePrecision  8;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable yes;

maxCo           0.6;

// Maximum diffusion number
maxDi           10.0;

adjustTimeStep  yes;

functions
{
    #include "vtkWrite"
}


// ************************************************************************* //

4. シミュレーション結果

 シミュレーション実行できました!(パソコンがかなりうなってました)

 チップの熱が基板を介して放熱されています。さらに、空気に熱が運ばれて放熱されること様子も確認することができました(+X軸側の空気壁の色がわずかに変化します。GIF画像だとわからないですが、下の動画を高画質で見るとわかります)。

 意外と単純そうなシミュレーションだったんですけど、ここまでやるのに結構苦労したので出来て嬉しいです!

放熱シミュレーション結果
☝ 放熱シミュレーション結果

 

☝ GIF画像だと空気の壁部分とかチップ周辺の色の細かい濃淡変化が見えないので動画も載せておきます



 参考:シミュレーション実行時間(5時間12分)

 ※ 14コア並列計算をしました

5. 参考文献

  1. オープンCAE学会編. 『OpenFOAMによる熱移動と流れの数値解析(第2版)』. 森北出版, 2021年.
  2. 株式会社テラバイト. 「chtMultiRegionFoamソルバーによる筐体の熱流体解析」. https://www.terrabyte.co.jp/OpenFOAM/exe-OF/of-sample41.htm
  3. 宇宙に入ったカマキリ. 「OpenFOAMの熱流体固体連成のチュートリアル(multiRegionHeater)」. https://takun-physics.net/16538/
  4. PENGUINITIS. 「流体・固体熱連成解析」. https://ss1.xrea.com/penguinitis.g1.xrea.com/study/OpenFOAM/CHT/CHT.html
  5. KOA. 「失敗しない基板熱設計のノウハウ」. https://www.koaglobal.com/-/media/Files/KOA_Global/technology/seminar_doc/CEATEC2019session1forWEB.pdf