Example 6 : Tubed Heat Exchanger

Define Parameters
​
In[]:=
ClearAll[r1,Ro,Ri,Βouter,Ω,u,t,x,y];​​​​Ro=1;(*outerdiameterofsystem*)​​Ri=0.5;(*innerdiameterofsystem*)​​tC=(Ro+Ri)/2;(*centerofinnertubes*)​​r1=(Ro-Ri)/6;(*sizeofinnertubes*)​​tubes=8;(*numberofinnertubes4or8*)​​α=0.5;(*parameterinheatequation*)​​

Define Region

(*DefineRegionandBoundaries*)​​(*BoundariesFirst*)​​Βouter=Circle[{0,0},Ro];(*outerboundary*)​​Βinner=Circle[{0,0},Ri];(*innerboundary*)​​Βtubes=If[tubes==4,RegionUnion[Circle[{0,-tC},r1],Circle[{0,tC},r1],Circle[{tC,0},r1],Circle[{-tC,0},r1]],RegionUnion[Circle[{0,-tC},r1],Circle[{0,tC},r1],Circle[{tC,0},r1],Circle[{-tC,0},r1],Circle[{Cos[45*Pi/180]*tC,Sin[45*Pi/180]*tC},r1],Circle[{-Cos[45*Pi/180]*tC,Sin[45*Pi/180]*tC},r1],Circle[{Cos[45*Pi/180]*tC,-Sin[45*Pi/180]*tC},r1],Circle[{-Cos[45*Pi/180]*tC,-Sin[45*Pi/180]*tC},r1]]];​​(*Βtubes=TransformedRegion[Βtubes,RotationTransform[2π/16]];*)​​​​(*Region*)​​(*PrimaryDisk*)​​ΩprimaryAnnulus=RegionDifference[Disk[{0,0},Ro],Disk[{0,0},Ri]];​​(*InnerTubes*)​​Ωtubes=If[tubes==4,RegionUnion[Disk[{0,-tC},r1],Disk[{0,tC},r1],Disk[{tC,0},r1],Disk[{-tC,0},r1]],RegionUnion[Disk[{0,-tC},r1],Disk[{0,tC},r1],Disk[{tC,0},r1],Disk[{-tC,0},r1],Disk[{Cos[45*Pi/180]*tC,Sin[45*Pi/180]*tC},r1],Disk[{-Cos[45*Pi/180]*tC,Sin[45*Pi/180]*tC},r1],Disk[{Cos[45*Pi/180]*tC,-Sin[45*Pi/180]*tC},r1],Disk[{-Cos[45*Pi/180]*tC,-Sin[45*Pi/180]*tC},r1]]];​​​​(*OveralRegion*)​​(*Takeoutthetubes*)​​ΩT1=RegionDifference[ΩprimaryAnnulus,Ωtubes];​​(*addbacktheinnerboundariesandthetubeboundaries*)​​ΩTotal=RegionUnion[ΩT1,Βinner,Βtubes];​​(*ΩTotal=TransformedRegion[ΩTotal,RotationTransform[2π/16]];*)​​​​(*PlotRegion*)​​RegionPlot[DiscretizeRegion[ΩTotal,PrecisionGoal5],AspectRatioAutomatic];​​​​(*takeasectionoftheRegionNOTUSEDjustexploringtechinque*)​​(*Ωsection=Disk[{0,0},1,{0,Pi/8}];(*definesasectiontoremovenotusedinpdesolvingbelow*)​​Region[Ωsection]​​New=RegionIntersection[Ωsection,ΩTotal];​​RegionPlot[DiscretizeRegion[New,PrecisionGoal10],AspectRatioAutomatic]*)​​​​(*Discretizetheregionforlateruse*)​​ΩTotalMesh=DiscretizeRegion[ΩTotal,MaxCellMeasure->0.0002]​​(*ΩTotalMesh2=DiscretizeRegion[ΩprimaryAnnulus,MaxCellMeasure->0.002];*)​​(*ΩtubesMesh=DiscretizeRegion[Ωtubes,MaxCellMeasure->0.002];*)​​​​​​
Out[]=

Define Boundary Conditions at outer and inner boundaries and at the inner tubes

In[]:=
ClearAll[Γ,Γ2]​​Γ[t_]:={DirichletCondition[u[t,x,y]300,{x,y}∈Βouter],DirichletCondition[u[t,x,y]300,{x,y}∈Βinner],DirichletCondition[u[t,x,y]==0+0.5t,{x,y}∈Βtubes]};​​​​(*WhatIwantultimatlyistouseaboundaryconditionsuchasthefollowing.Butitseemstocauseproblems*)​​Γ2[t_]:=DirichletCondition[u[t,x,y]50,{x,y}∈Βouter],DirichletCondition[u[t,x,y]50,{x,y}∈Βinner],DirichletConditionu[t,x,y]==
25
t<=0
25+5t​​300
0<t<50​​50<=t
,{x,y}∈Βtubes;​​​​​​

Define Initial Conditions: Solve pde without the time derivative

In[]:=
ClearAll[u]​​uinit=NDSolveValue-α
2
∇
{x,y}
u[t,x,y]0/.{t0},Γ[0],u[0,x,y],{x,y}∈ΩTotalMesh,PrecisionGoal∞;

Solve the Problem

In[]:=
uif=NDSolveValueD[u[t,x,y],t]-α
2
∇
{x,y}
u[t,x,y]0,Γ[t],u[0,x,y]==uinit,u,{t,0,100},{x,y}∈ΩTotalMesh,PrecisionGoal∞;

Visualize the Results

In[]:=
ContourPlot[uinit,{x,y}∈ΩTotalMesh,ContoursTable[n,{n,0,300,10}],PlotLegends->BarLegend[{"Rainbow",{0,300}}],ColorFunction->"Rainbow"]​​​​Manipulate[ContourPlot[uif[t,x,y],{x,y}∈ΩTotalMesh,ContoursTable[n,{n,0,300,10}],PlotLegends->BarLegend[{"Rainbow",{0,300}}],ColorFunction->"Rainbow"],{t,0,100,0.01}]
Out[]=
Out[]=
​
t
ContourPlotuif[FE`t$$6668169939648005473609382058754643759621,x,y],{x,y}∈ΩTotalMesh,Contours
Table[n,{n,0,300,10}],PlotLegends
,ColorFunctionRainbow