~ 目次 ~
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画像だとわからないですが、下の動画を高画質で見るとわかります)。
意外と単純そうなシミュレーションだったんですけど、ここまでやるのに結構苦労したので出来て嬉しいです!

参考:シミュレーション実行時間(5時間12分)
-
使用したPCのスペック(ASUS ROG FLOW Z13, GZ301VF.316)
CPU:13th Gen Intel(R) Core(TM) i9-13900H基本速度: 2.60 GHz
ソケット: 1
コア: 14
論理プロセッサ数: 20
仮想化: 有効
L1 キャッシュ: 1.2 MB
L2 キャッシュ: 11.5 MB
L3 キャッシュ: 24.0 MB
※ 14コア並列計算をしました
5. 参考文献
- オープンCAE学会編. 『OpenFOAMによる熱移動と流れの数値解析(第2版)』. 森北出版, 2021年.
- 株式会社テラバイト. 「chtMultiRegionFoamソルバーによる筐体の熱流体解析」. https://www.terrabyte.co.jp/OpenFOAM/exe-OF/of-sample41.htm
- 宇宙に入ったカマキリ. 「OpenFOAMの熱流体固体連成のチュートリアル(multiRegionHeater)」. https://takun-physics.net/16538/
- PENGUINITIS. 「流体・固体熱連成解析」. https://ss1.xrea.com/penguinitis.g1.xrea.com/study/OpenFOAM/CHT/CHT.html
- KOA. 「失敗しない基板熱設計のノウハウ」. https://www.koaglobal.com/-/media/Files/KOA_Global/technology/seminar_doc/CEATEC2019session1forWEB.pdf