CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   chtMultiRegionFoam laminar heat exchanger non converging (http://www.cfd-online.com/Forums/openfoam/69031-chtmultiregionfoam-laminar-heat-exchanger-non-converging.html)

Pierpaolo October 9, 2009 12:56

chtMultiRegionFoam laminar heat exchanger non converging
 
Hi all,
I have a problem with a plane heat exchanger (HE) whose performances I would like to evaluate.
The convergence is never reached and I get the error reported at the end of this post.
I see that the Courant number kind of explodes but I own up to it that despite the efforts in rummaging through the configurations files and changing several different values of the timestep, grid coarsenes and BC, I am not able to find a way out without the help of someone more experienced.
Attached is the case dir and all needed is to type in:
Allrun 0.0001

Thanks for any help and suggestion.

The HE is composed of 4 layers (dx=1mm;dy=180mm;dz=10.2mm):
1 topFluid (hot air incoming at 340K)
1 topSolid
1 bottomFluid (cold air incoming at 300K)
1 bottomSolid
Bottom face of the bottom solid has cyclic bc with top face of the top fluid.

Error:
---- snip ----
Solving for fluid region bottomFluid
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.03538927, Final residual = 1.971183e-11, No Iterations 3
DILUPBiCG: Solving for Uz, Initial residual = 0.00460497, Final residual = 9.836213e-09, No Iterations 2
DILUPBiCG: Solving for h, Initial residual = 0.004765986, Final residual = 9.041913e-12, No Iterations 3
Min/max T:299.7815 340.039
GAMG: Solving for p, Initial residual = 0.05313307, Final residual = 0.0004813086, No Iterations 27
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (bottomFluid): sum local = 2.280073e-06, global = 1.180403e-07, cumulative = -4.329433e-06
GAMG: Solving for p, Initial residual = 0.000516105, Final residual = 9.573149e-09, No Iterations 129
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (bottomFluid): sum local = 4.981507e-11, global = -3.992155e-12, cumulative = -4.329437e-06

Solving for fluid region topFluid
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.02129376, Final residual = 5.564677e+08, No Iterations 1001
DILUPBiCG: Solving for Uz, Initial residual = 0.02065763, Final residual = 5.061882e-09, No Iterations 5
DILUPBiCG: Solving for h, Initial residual = 0.004138133, Final residual = 7.869983e-09, No Iterations 3
Min/max T:299.9864 380
GAMG: Solving for p, Initial residual = 1, Final residual = 0.009861178, No Iterations 55
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (topFluid): sum local = -0.1170467, global = -0.007092308, cumulative = -0.00708989
GAMG: Solving for p, Initial residual = 0.8161496, Final residual = 0.263601, No Iterations 1000
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (topFluid): sum local = -43.27072, global = 0.9988777, cumulative = 0.9917878

Solving for solid region bottomSolid
DICPCG: Solving for T, Initial residual = 0.002423304, Final residual = 7.526829e-09, No Iterations 1
DICPCG: Solving for T, Initial residual = 7.488132e-09, Final residual = 7.488132e-09, No Iterations 0
Min/max T:min(T) [0 0 0 1 0 0 0] 339.9409 max(T) [0 0 0 1 0 0 0] 340

Solving for solid region topSolid
DICPCG: Solving for T, Initial residual = 0.005851229, Final residual = 4.241606e-07, No Iterations 1
DICPCG: Solving for T, Initial residual = 4.215058e-07, Final residual = 4.215058e-07, No Iterations 0
Min/max T:min(T) [0 0 0 1 0 0 0] 339.9823 max(T) [0 0 0 1 0 0 0] 340
ExecutionTime = 56.08 s ClockTime = 56 s

Region: bottomFluid Courant Number mean: 0.004116788 max: 0.1663119
Region: topFluid Courant Number mean: -318763 max: 7.685058e+08
#0 Foam::error::printStack(Foam::Ostream&) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#1 Foam::sigFpe::sigFpeHandler(int) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#2 Uninterpreted:
#3 Foam::Time::adjustDeltaT() in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#4 Foam::Time::setDeltaT(double) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#5 main in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/applications/bin/linuxGccDPOpt/chtMultiRegionFoam"
#6 __libc_start_main in "/lib/libc.so.6"
#7 Foam::regIOobject::writeObject(Foam::IOstream::str eamFormat, Foam::IOstream::versionNumber, Foam::IOstream::compressionType) const in "/home/pier/Op
M/OpenFOAM-1.6.x/applications/bin/linuxGccDPOpt/chtMultiRegionFoam"
------------------------------------------------------

ronaldo October 16, 2009 17:27

Quote:

Originally Posted by Pierpaolo (Post 232051)
Hi all,
I have a problem with a plane heat exchanger (HE) whose performances I would like to evaluate.
The convergence is never reached and I get the error reported at the end of this post.
I see that the Courant number kind of explodes but I own up to it that despite the efforts in rummaging through the configurations files and changing several different values of the timestep, grid coarsenes and BC, I am not able to find a way out without the help of someone more experienced.
Attached is the case dir and all needed is to type in:
Allrun 0.0001

Thanks for any help and suggestion.

The HE is composed of 4 layers (dx=1mm;dy=180mm;dz=10.2mm):
1 topFluid (hot air incoming at 340K)
1 topSolid
1 bottomFluid (cold air incoming at 300K)
1 bottomSolid
Bottom face of the bottom solid has cyclic bc with top face of the top fluid.

Error:
---- snip ----
Solving for fluid region bottomFluid
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.03538927, Final residual = 1.971183e-11, No Iterations 3
DILUPBiCG: Solving for Uz, Initial residual = 0.00460497, Final residual = 9.836213e-09, No Iterations 2
DILUPBiCG: Solving for h, Initial residual = 0.004765986, Final residual = 9.041913e-12, No Iterations 3
Min/max T:299.7815 340.039
GAMG: Solving for p, Initial residual = 0.05313307, Final residual = 0.0004813086, No Iterations 27
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (bottomFluid): sum local = 2.280073e-06, global = 1.180403e-07, cumulative = -4.329433e-06
GAMG: Solving for p, Initial residual = 0.000516105, Final residual = 9.573149e-09, No Iterations 129
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (bottomFluid): sum local = 4.981507e-11, global = -3.992155e-12, cumulative = -4.329437e-06

Solving for fluid region topFluid
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.02129376, Final residual = 5.564677e+08, No Iterations 1001
DILUPBiCG: Solving for Uz, Initial residual = 0.02065763, Final residual = 5.061882e-09, No Iterations 5
DILUPBiCG: Solving for h, Initial residual = 0.004138133, Final residual = 7.869983e-09, No Iterations 3
Min/max T:299.9864 380
GAMG: Solving for p, Initial residual = 1, Final residual = 0.009861178, No Iterations 55
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (topFluid): sum local = -0.1170467, global = -0.007092308, cumulative = -0.00708989
GAMG: Solving for p, Initial residual = 0.8161496, Final residual = 0.263601, No Iterations 1000
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
time step continuity errors (topFluid): sum local = -43.27072, global = 0.9988777, cumulative = 0.9917878

Solving for solid region bottomSolid
DICPCG: Solving for T, Initial residual = 0.002423304, Final residual = 7.526829e-09, No Iterations 1
DICPCG: Solving for T, Initial residual = 7.488132e-09, Final residual = 7.488132e-09, No Iterations 0
Min/max T:min(T) [0 0 0 1 0 0 0] 339.9409 max(T) [0 0 0 1 0 0 0] 340

Solving for solid region topSolid
DICPCG: Solving for T, Initial residual = 0.005851229, Final residual = 4.241606e-07, No Iterations 1
DICPCG: Solving for T, Initial residual = 4.215058e-07, Final residual = 4.215058e-07, No Iterations 0
Min/max T:min(T) [0 0 0 1 0 0 0] 339.9823 max(T) [0 0 0 1 0 0 0] 340
ExecutionTime = 56.08 s ClockTime = 56 s

Region: bottomFluid Courant Number mean: 0.004116788 max: 0.1663119
Region: topFluid Courant Number mean: -318763 max: 7.685058e+08
#0 Foam::error::printStack(Foam::Ostream&) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#1 Foam::sigFpe::sigFpeHandler(int) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#2 Uninterpreted:
#3 Foam::Time::adjustDeltaT() in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#4 Foam::Time::setDeltaT(double) in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#5 main in "/home/pier/OpenFOAM/OpenFOAM-1.6.x/applications/bin/linuxGccDPOpt/chtMultiRegionFoam"
#6 __libc_start_main in "/lib/libc.so.6"
#7 Foam::regIOobject::writeObject(Foam::IOstream::str eamFormat, Foam::IOstream::versionNumber, Foam::IOstream::compressionType) const in "/home/pier/Op
M/OpenFOAM-1.6.x/applications/bin/linuxGccDPOpt/chtMultiRegionFoam"
------------------------------------------------------

could you send please your case "heat exchanger"
I would try to silmulate an Heat exchanger!

Thank you in advance

Pierpaolo October 17, 2009 12:50

Quote:

Originally Posted by ronaldo (Post 232983)
could you send please your case "heat exchanger"
I would try to silmulate an Heat exchanger!

Thank you in advance

Refer to:

http://pier.unirc.eu/cestino/scambia...ano_cyclic.tgz

to download the 4 layers not converging one with cyclic bc, and
http://pier.unirc.eu/cestino/scambia..._1sol_prof.tgz

to a 3 layers seemingly converging one. The latter being a solid layer and two halves fluid layers with symmetry bc.

I have not been able to run parallel both of them.

ronaldo October 21, 2009 03:12

Hi Pierpaolo,

could you please explain me how to configure the makeCellSets file and tell me what i would like to do step by step (not all ...)?

What about the changeDictionaryDict?

Thanks in advance!

Pierpaolo October 21, 2009 05:07

Quote:

Originally Posted by ronaldo (Post 233482)
Hi Pierpaolo,

could you please explain me how to configure the makeCellSets file and tell me what i would like to do step by step (not all ...)?

What about the changeDictionaryDict?

Thanks in advance!

I think $casedir/makeCellSets is the file needed by setSet command in order to define the zones (solid and fluid) inside the domain you prepared in $casedir/constant/polyMesh/blockMeshDict.

If you have a look, for example at the makeCellSets in the tutorial case chtMultiRegionHeater, you will see that the syntax is quite self explanatory:
-----------------------------------------------------------------------
cellSet heater new boxToCell (-0.01 0 -100 )(0.01 0.01 100)
cellSet heater add boxToCell (-0.01 -100 -0.01)(0.01 0.01 0.01)
cellSet leftSolid new boxToCell (-100 0 -100 )(-0.01 0.01 100)
cellSet rightSolid new boxToCell (0.01 0 -100 )(100 0.01 100)
cellSet topAir new boxToCell (-100 0.01 -100 )(100 100 100)
cellSet bottomAir clear
cellSet bottomAir add cellToCell heater
cellSet bottomAir add cellToCell leftSolid
cellSet bottomAir add cellToCell rightSolid
cellSet bottomAir add cellToCell topAir
cellSet bottomAir invert
-----------------------------------------------------------------------
In the first three lines you define three new solids (you can tell it by their names which reasonably contain the word "solid") by giving the coordinates of two opposite corners. In the fourth line you do the same but with a fluid region (you name it in a convenient way by including the word "air", in this case). In the sixth line you make sure the zone you are about to build is cleared an then you proceed in a reverse way first building the bottomAir zone (or region ... the difference is not clear to me) as thought it were a solid region, adding all the solid pieces you have just declared. Finally in the last line you invert the selection taking the complement of the zone you have just set from the domain you have in blockMeshDict.
The command setToZones and splitMeshRegions do the rest.

About changeDictionaryDict: they are files of boundary conditions in which you have to set the proper bcs for each zone (region).
Once the regions have been prepared (giving in order the above
mentioned commands (being blockMesh the first not being cited)) you have a $dircase/firstTimeStep dir in which you will find the dirs with the names of the zones you have just defined. In these dirs you find the polyMesh dirs in which the boundary files report the new created patches (e.g. bottomAir_to_heater in $casedir/firststepdir/bottomAir/polyMesh/boundary and heater_to_bottomAir in $casedir/firststepdir/heater/polyMesh/boundary) of separation between the regions. In changeDictionary you have to set the boundary conditions for each patch of each zone.

Hope this helps

ronaldo October 21, 2009 05:40

Thank you so much Pierpaolo
 
1 Attachment(s)
Quote:

Originally Posted by Pierpaolo (Post 233501)
I think $casedir/makeCellSets is the file needed by setSet command in order to define the zones (solid and fluid) inside the domain you prepared in $casedir/constant/polyMesh/blockMeshDict.

If you have a look, for example at the makeCellSets in the tutorial case chtMultiRegionHeater, you will see that the syntax is quite self explanatory:
-----------------------------------------------------------------------
cellSet heater new boxToCell (-0.01 0 -100 )(0.01 0.01 100)
cellSet heater add boxToCell (-0.01 -100 -0.01)(0.01 0.01 0.01)
cellSet leftSolid new boxToCell (-100 0 -100 )(-0.01 0.01 100)
cellSet rightSolid new boxToCell (0.01 0 -100 )(100 0.01 100)
cellSet topAir new boxToCell (-100 0.01 -100 )(100 100 100)
cellSet bottomAir clear
cellSet bottomAir add cellToCell heater
cellSet bottomAir add cellToCell leftSolid
cellSet bottomAir add cellToCell rightSolid
cellSet bottomAir add cellToCell topAir
cellSet bottomAir invert
-----------------------------------------------------------------------
In the first three lines you define three new solids (you can tell it by their names which reasonably contain the word "solid") by giving the coordinates of two opposite corners. In the fourth line you do the same but with a fluid region (you name it in a convenient way by including the word "air", in this case). In the sixth line you make sure the zone you are about to build is cleared an then you proceed in a reverse way first building the bottomAir zone (or region ... the difference is not clear to me) as thought it were a solid region, adding all the solid pieces you have just declared. Finally in the last line you invert the selection taking the complement of the zone you have just set from the domain you have in blockMeshDict.
The command setToZones and splitMeshRegions do the rest.

About changeDictionaryDict: they are files of boundary conditions in which you have to set the proper bcs for each zone (region).
Once the regions have been prepared (giving in order the above
mentioned commands (being blockMesh the first not being cited)) you have a $dircase/firstTimeStep dir in which you will find the dirs with the names of the zones you have just defined. In these dirs you find the polyMesh dirs in which the boundary files report the new created patches (e.g. bottomAir_to_heater in $casedir/firststepdir/bottomAir/polyMesh/boundary and heater_to_bottomAir in $casedir/firststepdir/heater/polyMesh/boundary) of separation between the regions. In changeDictionary you have to set the boundary conditions for each patch of each zone.

Hope this helps


Please Pierpaolo make an example relevant for this case thereby i understand it perfect! I would like to simulate an Heat exchanger and it is very very important for fin, air and so on..

Thank you in advance!

ronaldo October 26, 2009 04:26

1 Attachment(s)
Quote:

Originally Posted by Pierpaolo (Post 233501)
I think $casedir/makeCellSets is the file needed by setSet command in order to define the zones (solid and fluid) inside the domain you prepared in $casedir/constant/polyMesh/blockMeshDict.

If you have a look, for example at the makeCellSets in the tutorial case chtMultiRegionHeater, you will see that the syntax is quite self explanatory:
-----------------------------------------------------------------------
cellSet heater new boxToCell (-0.01 0 -100 )(0.01 0.01 100)
cellSet heater add boxToCell (-0.01 -100 -0.01)(0.01 0.01 0.01)
cellSet leftSolid new boxToCell (-100 0 -100 )(-0.01 0.01 100)
cellSet rightSolid new boxToCell (0.01 0 -100 )(100 0.01 100)
cellSet topAir new boxToCell (-100 0.01 -100 )(100 100 100)
cellSet bottomAir clear
cellSet bottomAir add cellToCell heater
cellSet bottomAir add cellToCell leftSolid
cellSet bottomAir add cellToCell rightSolid
cellSet bottomAir add cellToCell topAir
cellSet bottomAir invert
-----------------------------------------------------------------------
In the first three lines you define three new solids (you can tell it by their names which reasonably contain the word "solid") by giving the coordinates of two opposite corners. In the fourth line you do the same but with a fluid region (you name it in a convenient way by including the word "air", in this case). In the sixth line you make sure the zone you are about to build is cleared an then you proceed in a reverse way first building the bottomAir zone (or region ... the difference is not clear to me) as thought it were a solid region, adding all the solid pieces you have just declared. Finally in the last line you invert the selection taking the complement of the zone you have just set from the domain you have in blockMeshDict.
The command setToZones and splitMeshRegions do the rest.

About changeDictionaryDict: they are files of boundary conditions in which you have to set the proper bcs for each zone (region).
Once the regions have been prepared (giving in order the above
mentioned commands (being blockMesh the first not being cited)) you have a $dircase/firstTimeStep dir in which you will find the dirs with the names of the zones you have just defined. In these dirs you find the polyMesh dirs in which the boundary files report the new created patches (e.g. bottomAir_to_heater in $casedir/firststepdir/bottomAir/polyMesh/boundary and heater_to_bottomAir in $casedir/firststepdir/heater/polyMesh/boundary) of separation between the regions. In changeDictionary you have to set the boundary conditions for each patch of each zone.

Hope this helps


Hi Pierpaolo,

could you tell me please what this error message means?
(I have tried to run chtMultiRegionFoam)
Could i send you my case to Mail? just to check out why it doesnīt work. I made all steps!
Itīs very important.

Thank you in advance!

Thank you in advance

Pierpaolo October 26, 2009 10:06

Send your case to:

pier@unirc.eu

I am just at the beginning with OF and I doubt I will be of any help with the error you reported in the attached pdf file.


All times are GMT -4. The time now is 09:55.