Example : Electronic component cooling

This test case has been proposed by Annabelle Le-Hyaric and Michel Fouquembergh formerly at AIRBUS.

We consider a 2D model representative of the neighboring of an electronic component submitted to a cooling air flow. It is described by four geometrical domains in R2R2 named Ωi,i=1,2,3,4Ωi,i=1,2,3,4, see figure. We suppose the velocity vv is known in each domain --- for instance in Ω4Ω4 it is the solution of previous Navier-Stokes computations. --- The temperature TT of the domain Ω=4i=1ΩiΩ=4i=1Ωi is then solution of heat transfer equation :

ρCi(Tt+vT)(kiT)=Qi,i=1,2,3,4ρCi(Tt+vT)(kiT)=Qi,i=1,2,3,4

where tt is the time and in each sub-domain ΩiΩi, ρCiρCi is the volumic thermal capacity, kiki is thermal conductivity and QiQi is a volumic heat dissipated.

eads geometry

One should notice that the convection term in heat transfer equation may lead to spatial oscillations which can be overcome by Petrov-Galerkin type or continuous interior penalty stabilization techniques.

Integrated circuits (ICs) (domains Ω1Ω1 and Ω2Ω2 ) are respectively soldered on PCB at x1=(ePcb,h1)x1=(ePcb,h1) and x2=(ePcb,h2)x2=(ePcb,h2). They are considered as rectangles with width eICeIC and height hIChIC. The printed circuit board (PCB) is a rectangle Ω3Ω3 of width ePCBePCB and height hPCBhPCB. The air(Air) is flowing along the PCB in domain Ω4Ω4. Speed in the air channel Ω4Ω4 is supposed to have a parabolic profile function of xx coordinate. Its expression is simplified as follows (notice that vv is normally solution of Navier-Stokes equations; the resulting temperature and velocity fields should be quite different from that simplified model), we have for all 0yhPCB0yhPCB

ePcb+eIcxePcb+ea,v=32(eaeIc) D (1(x(ea+eIc2+ePcb)(eaeIc)2)2) f(t) yePcbxePcb+eIc,v=0

where f is a function of time modelling the starting of the PCB ventilation, i. e.

f(t)=1exp(t3),

D is the air flow rate, see table~\vref{tab:1} and y=(0,1)T is the unit vector along the y axis. A quick verification shows that

Γ4Ω4vn=Γ4Ω4vy=D

The medium velocity vi=0,i=1,2,3 in the solid domains Ωi,i=1,2,3.

ICs dissipate heat, we have respectively

Q1=Q(1exp(t)) in Ω1Q2=Q(1exp(t)) in Ω2

where Q is defined in table~\vref{tab:1}.

We shall denote n|Ωi=ni denotes the unit outward normal to Ωi and n|Ωj=nj denotes the unit outward normal to Ωj.

1. Boundary conditions

We set

  • on Γ3Ω3, a zero flux (Neumann-like) condition

k3 Tn3 = 0;
  • on Γ3Ω4, a zero flux (Robin-like) condition

(k4 T+ρC4Tv)n4 = 0;
  • on Γ4,(0xePcb+ea,y=0) the temperature is set (Dirichlet condition)

T =T0;
  • between Γ1 and Γ2, periodic conditions

T|x=0=T|x=ePcb+eak3 Tn3|x=0=k4 Tn4|x=ePcb+ea;
  • at interfaces between the ICs and PCB, there is a thermal contact conductance:

k1 Tn1k3 Tn3=r13(TΩ1TΩ3)k2 Tn2k3 Tn3=r23(TΩ2TΩ3);
  • on other internal boundaries, the coontinuity of the heat flux and temperature, on Γij=ΩiΩj

Ti=Tjki Tni=kj Tnj.

2. Initial condition

At t=0s, we set T=T0.

2.1. Inputs

The table displays the various fixed and variables parameters of this test-case.

Table 1. Table of fixed and variable parameters

Name

Description

Nominal Value

Range

Units

Parameters

t

time

[0,1500]

s

Q

heat source

106

[0,106]

Wm3

IC Parameters

k1=k2=kIC

thermal conductivity

2

[0.2,150]

Wm1K1

r13=r23=r

thermal conductance

100

[101,102]

Wm2K1

ρCIC

heat capacity

1.4106

Jm3K1

eIC

thickness

2103

m

hIC=LIC

height

2102

m

h1

height

2102

m

h2

height

7102

m

PCB Parameters

k3=kPcb

thermal conductivity

0.2

Wm1K1

ρC3

heat capacity

2106

Jm3K1

ePcb

thickness

2103

m

hPcb

height

13102

m

Air Parameters

T0

Inflow temperature

300

K

D

Inflow rate

7103

[5104,102]

m2s1

k4

thermal conductivity

3102

Wm1K1

ρC4

heat capacity

1100

Jm3K1

ea

thickness

4103

[2.5103,5102]

m

2.2. Outputs

The outputs are (i) the mean temperature s1(μ) of the hottest IC

s1(μ)=1eIChICΩ2T

and (ii) mean temperature s2(μ) of the air at the outlet

s2(μ)=1eaΩ4Γ3T

both depends on the solution of (???) and are dependent on the parameter set μ.

We need to monitor s1(μ) and s2(μ) because s1(μ) is the hottest part of the model and the IC can’t have a temperature above 340K. s2(μ) is the outlet of the air and in an industrial system we can have others components behind this outlet. So the temperature of the air doesn’t have to be high to not interfere the proper functioning of these.

2.3. Testcases

We have some results from another simulation software for this problem with methods, but we use them for an exemple purpose because Feel++ toolboxes do not handle yet the periodic conditions and the discontinuities in the toolboxes.

2.3.1. Test 1-a

This test is the base of all the other tests, we bold the changes in the next tests. Only these parameters varies in these tests :

  • The flow rate of the system.

  • The characteristic length of the mesh.

  • The triangle family used.

  • The temporal scheme (Backward Differentiation Formula or none).

  • The stabilisation method (Galerkine Least Square or none).

The test 2 is not implemented because it is the only one that require the discontinuities on the ICs.

Flow rate

7103

Characteristic length

5104

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

As the periodicity helps to dissipate the heat in both directions of the PCB, the reference results are attended to be lower than the results obtained with Feel++ on these testcases.

The Feel++ toolboxes are configured with two complementary files, the .json file configure the specific materials related to the toolbox for the geometry. The .cfg file configure the generic options, for instance the mesh file, the output directory or the solver. The .json file is common to all examples, except the stationary problem.

eads_normal.json
// -*- mode: javascript -*-
{
    "Name"      : "Eads",
    "ShortName" : "Eads",

    "Materials" : {
        "Pcb" : {
            "markers" : "Pcb",
            "name"    : "Pcb",
            "rho"     : "1.",
            "k"       : "0.2",
            "Cp"      : "2e6"
        },
        "IC1" : {
            "markers" : "IC1",
            "name"    : "IC1",
            "rho"     : "1.",
            "k"       : "2",
            "Cp"      : "1.4e6"
        },
        "IC2" : {
            "markers" : "IC2",
            "name"    : "IC2",
            "rho"     : "1.",
            "k"       : "2",
            "Cp"      : "1.4e6"
        },
        "Air" : {
            "markers" : "Air",
            "name"    : "Air",
            "rho"     : "1.",
            "k"       : "3e-2",
            "Cp"      : "1100"
        }
    },

    "BoundaryConditions" : {
        "temperature" : {
            "Dirichlet" : {
                "Air/Input"           : { "expr" : "300" },
                "Pcb/Input"           : { "expr" : "300" }
            },
            "Neumann" : {
                "Air/Output"          : { "expr" : "0" },
                "Pcb/Output"          : { "expr" : "0" },
                "Air/Right"           : { "expr" : "0" },
                "Pcb/Left"            : { "expr" : "0" }
            },
            "VolumicForces" : {
                "IC1"                 : { "expr" : "1e6*(1-exp(-t)):t" },
                "IC2"                 : { "expr" : "1e6*(1-exp(-t)):t" }
            }
        }
    },

    "InitialConditions" : {
        "temperature" : {
            "" : {
                "" : { "expr" : "300" }
            }
        }
    },

    "PostProcess" : {
        "Exports" : {
            "fields" : [
                "temperature",
                "pid"
            ]
        }
    }
}
json
test1a.cfg
directory=toolboxes/heat/opus/test1a

case.dimension=2

[heat]
filename=$cfgdir/eads_normal.json
mesh.filename=$cfgdir/eads.geo
gmsh.hsize=5e-4

# /!\ Geometric dependant
# velocity-convection={0,(2e-3+2e-3<x)*(x<2e-3+4e-3)*7e-3*(3/2/(4e-3-2e-3))*(1-((x-(4e-3+2e-3)/2-2e-3)/((4e-3-2e-3)/2))^2)}:x
velocity-convection={0,(2e-3+2e-3<x)*(x<2e-3+4e-3)*7e-3*(3/2/(4e-3-2e-3))*(1-((x-(4e-3+2e-3)/2-2e-3)/((4e-3-2e-3)/2))^2)*(1-exp(-t/3))}:x:t

# verbose=1
# verbose_solvertimer=1
# reuse-prec=1
pc-type=lu

do_export_all=1
stabilization-gls=1

[heat.bdf]
order=1

[ts]
time-step=1
time-final=1500
# restart.at-last-save=true
cfg

This is the basis of the other configurations files. You can download files from Github here : test1a.cfg and eads_normal.cfg, from Github . Moreover, as the toolboxes can use testcases directly from Github, you can execute this test by typing the following command :

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1a.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1a.cfg

All the tests follow the same command, and don’t forget to define the FEELPP_GITHUB_TOKEN, else GitHub can refuse the access.

2.3.2. Test 1-b

Flow rate

7103

Characteristic length

1103

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

Changes :

test1b.cfg
[heat]
gmsh.hsize=1e-3
cfg

You can download files from here : test1b.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1b.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1b.cfg

2.3.3. Test 1-c

Flow rate

7103

Characteristic length

2104

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

Changes :

test1c.cfg
[heat]
gmsh.hsize=2e-4
cfg

You can download files from here : test1c.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1c.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1c.cfg

2.3.4. Test 1-d

Flow rate

7103

Characteristic length

1104

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

Changes :

test1d.cfg
[heat]
gmsh.hsize=1e-4
cfg

You can download files from here : test1d.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1d.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1d.cfg

2.3.5. Test 1-e

Flow rate

7103

Characteristic length

5104

Triangle family

P2

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

Changes :

test1e.cfg
case.discretization=P2
cfg

You can download files from here : test1e.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1e.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1e.cfg

2.3.6. Test 1-f

Flow rate

7103

Characteristic length

5104

Triangle family

P1

Temporal scheme

BDF 2, Δt=1s

Stabilisation

GLS

Changes :

test1f.cfg
[heat.bdf]
order=2
cfg
feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1f.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1f.cfg

You can download files from here : test1f.cfg and eads_normal.cfg.

2.3.7. Test 1-g

Flow rate

7103

Characteristic length

5104

Triangle family

P1

Temporal scheme

Stationary problem

Stabilisation

GLS

IC2 reference results of test 1g

322.483 °K

Output reference results of test 1g

310.436 °K

IC2 example results of test 1g

338.382 °K

Output example results of test 1g

312.522 °K

The .json file also differs in this case :

eads_stationary.json
{
    "BoundaryConditions" : {
        "temperature" : {
            "VolumicForces" : {
                "IC1"                 : { "expr" : "1e6" },
                "IC2"                 : { "expr" : "1e6" } // "1e6*(1-exp(-t)):t"
            }
        }
    }
}
json5
test1g.cfg
# [ts]
# time-step=1
# time-final=1500
cfg

You can download files from here : test1g.cfg and eads_stationary.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test1g.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test1g.cfg

2.3.8. Test 3

Flow rate

1103

Characteristic length

5104

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

GLS

Changes :

test3.cfg
[heat]
velocity-convection={0,(2e-3+2e-3<x)*(x<2e-3+4e-3)*1e-3*(3/2/(4e-3-2e-3))*(1-((x-(4e-3+2e-3)/2-2e-3)/((4e-3-2e-3)/2))^2)*(1-exp(-t/3))}:x:t
cfg

You can download files from here : test3.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test3.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test3.cfg

2.3.9. Test 4

Flow rate

1103

Characteristic length

5104

Triangle family

P1

Temporal scheme

BDF 1, Δt=1s

Stabilisation

None

Changes :

test4.cfg
[heat]
velocity-convection={0,(2e-3+2e-3<x)*(x<2e-3+4e-3)*1e-3*(3/2/(4e-3-2e-3))*(1-((x-(4e-3+2e-3)/2-2e-3)/((4e-3-2e-3)/2))^2)*(1-exp(-t/3))}:x:t
stabilization-gls=0
cfg

You can download files from here : test4.cfg and eads_normal.cfg.

feelpp_toolbox_heat --case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}" --case.config-file test4.cfg
mpirun
Case option
--case "github:{repo:toolbox,path:examples/modules/heat/examples/opus}"
Case config file option
--case.config-file test4.cfg