CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Configuration of boundary conditions and fvOptions file (https://www.cfd-online.com/Forums/openfoam-solving/216982-configuration-boundary-conditions-fvoptions-file.html)

Raza Javed April 26, 2019 05:13

Configuration of boundary conditions and fvOptions file
 
Hello everyone,


I am implementing the chtMultiRegionSimpleFoam. My geometry consists of three solid regions (Hot, Cold and Pipe). Hot box and Cold box are connected using pipe between them.


I am making one box hot by generating the heat source using fvOptions file. My fvOptions file is given below:


Code:

heatSource
{
    type            scalarSemiImplicitSource;
    active          true;
 
    scalarSemiImplicitSourceCoeffs
    {
        selectionMode  all; // all, cellSet, cellZone, points
      // cellZone        heatSrc;
        //cellSet        hotFace;
        volumeMode      absolute; // specific;
        injectionRateSuSp
        {
            h    (1000 0);
        }
    }
}

When I run the simulation, I can see the temperature change from hot box to cold box through the pipe between them.


According to my understanding the power that I am putting in the fvOptions file (h (1000 0)) is related to the temperature change by the formula below:


Q = k*A*(delta T)/L


where A is the area of the pipe, k is thermal conductivity and L is the length of the pipe, and delta-T is the temperature gradient.


when I put the power as Q in the above relation, it doesn't give me the same temperature gradient as I got in simulation.


I don't know where is the mistake OR what I am doing wrong?


I have checked various threads on this forum about using fvOptions, and most of them are saying that you can put directly your power in fvOptions like I did above.


After checking all the possibilities I deduced that there might be a problem with my boundary conditions.



I am giving my changeDictionaryDict file of all the three regions below:


Cold box



Code:

T
{
    internalField  uniform 300;
    defaultFaces
    {
        type            patch;

    }
    boundaryField
    {
        "defaultFaces"
        {
            type            zeroGradient;

        }
        "Cold_to_.*"
        {
            type            compressible::turbulentTemperatureCoupledBaffleMixed;
            Tnbr            T;
            kappaMethod    solidThermo;
            kappaName      none;
            value          uniform 300;
        }
    }
}


Pipe


Code:

T
{
    internalField  uniform 300;
    defaultFaces
    {
        type            patch;

    }
    boundaryField
    {
        "defaultFaces"
        {
            type            zeroGradient;

        }
        "pipe_to_.*"
        {
            type            compressible::turbulentTemperatureCoupledBaffleMixed;
            Tnbr            T;
            kappaMethod    solidThermo;
            kappaName      none;
            value          uniform 300;
        }
    }
}

Hot Box
Code:

T
{
    internalField  uniform 300;
    defaultFaces
    {
        type            patch;

    }
    boundaryField
    {
        "defaultFaces"
        {
            type            zeroGradient;

        }
        "Hot_to_.*"
        {
            type            compressible::turbulentTemperatureCoupledBaffleMixed;
            Tnbr            T;
            kappaMethod    solidThermo;
            kappaName      none;
            value          uniform 300;
        }
    }
 }


Do I have any problem with the boundary conditions? OR fvOptions file? I would be really thankful if someone can figure out where is the mistake. I would be glad to give any further information if required.


Thank you

LuckyTran April 26, 2019 09:45

h(1000 0) with volumeMode absolute means there is a h (energy) source of 1000 W in every cell. That means you have to add up 1000 W times the number of cells affected. You also used selectionMode all which means every single cell in your domain has this heat source (including the cold box).

How do you calculate Q from h (1000 0)? You are specifying Power per cell, not total power. And are you sure you want to apply the source to all cells?

Raza Javed April 26, 2019 10:05

Thank you so much for your reply.


I am sorry I am new to openfoam... I want to make only my hot box a heat source (Does it mean that all the cells of hot box will have a separate heat source?). and I have a power of 1000W but I exactly don't know that how to introduce that power into fvOptions file (or how to configure fvOption) file for it, so that I can be sure that my temperature gradient in the pipe is relating to the power I have given...


I didn't calculate the power from Q, I just want to create a heat source that takes this power (1000W) as input and gives temperature as output, and that temperature will be transferred to cold box through pipe.


But exactly don't know how to achieve it.

Raza Javed April 26, 2019 10:12

1 Attachment(s)
Here is the result of the simulation, when I run my case.

LuckyTran April 26, 2019 10:29

You want a total power of 1000 W, but right now you are specifying 1000 W per cell.


You are using selectionMode all; Use selectionMode cellSet; or selectionMode cellZone; and then specify the proper cellSet or cellZone representing the hot region.


volumeMode absolute; specifies the raw heat source in W.
volumeMode specific; specifies the volumetric source in W/m^3. Probably volumeMode specific is closer to what you want. You need to know the total volume of the hot region to figure out what number to specify.

Raza Javed April 26, 2019 10:40

I have edited my fvoptions file like this:


Code:

heatSource
{
    type            scalarSemiImplicitSource;
    active          true;
 
    scalarSemiImplicitSourceCoeffs
    {
        selectionMode  cellZone; // all, cellSet, cellZone, points
        cellZone        Hot;
        //cellSet        c1;
        volumeMode      specific; // specific;
        injectionRateSuSp
        {
            h    (1000 0);
        }
    }
}

And my log file looks like this;


Code:

    Adding fvOptions

Creating finite volume options from "constant/fvOptions"

Selecting finite volume options model type scalarSemiImplicitSource
    Source: heatSource
    - selecting cells using cellZone Hot
    - selected 4478 cell(s) with volume 900000

And my definitions of the cell zones are as follows:
Code:


0: Hot is cellZone
1: Cold is cellZone
2: pipe is cellZone

Constructing mesh with non-default patches of size:

--> FOAM Warning :
    From function Foam::polyMesh::polyMesh(const Foam::IOobject&, const Foam::Xfer<Foam::Field<Foam::Vector<double> > >&, const cellShapeList&, const faceListList&, const wordList&, const wordList&, const Foam::word&, const Foam::word&, const wordList&, bool)
    in file meshes/polyMesh/polyMeshFromShapeMesh.C at line 595
    Found 7280 undefined faces in mesh; adding to default patch.
Adding cell and face zones
 Cell Zone Hot    4478
 Cell Zone Cold    4287
 Cell Zone pipe    5524

End

Now based on this configuration, Can I use this 1000W of power as total power (Q in the formula of first post) to find out the temperature change?



Quote:

Q = k*A*(delta T)/L
Also to add to your notice, my temperature has shifted to 303.1053K which was 300.2 before the changes you mentioned.

Code:

Solving for solid region Cold
DICPCG:  Solving for h, Initial residual = 0.002070642, Final residual = 2.278098e-05, No Iterations 2
Min/max T:300.008 303.1053
ExecutionTime = 13.88 s  ClockTime = 14 s

End


Now I just want to verify this temperature change by hand calculation.

LuckyTran April 26, 2019 10:54

You've specified 1000 W/m^3 over a volume of 900 000 m^3. That's not a Q of 1000W but 900 MW!


Also, does 900000 m^3 sound like the right volume for your hot box? Maybe you forgot to scale the mesh at some point?

Raza Javed April 26, 2019 11:16

1 Attachment(s)
Thank you so much.


Quote:

You've specified 1000 W/m^3 over a volume of 900 000 m^3. That's not a Q of 1000W but 900 MW!
So, it means that to get the power of 1000W I need to put value (h (0.001 0)) in fvOption file?


And if I put the value of "h" as (0.001 0) then the simulation looks like in the attached image.


Quote:

Also, does 900000 m^3 sound like the right volume for your hot box? Maybe you forgot to scale the mesh at some point?

My volume is so high because my hot box dimensions are 300m*300m*10m.

Raza Javed May 2, 2019 11:32

Hello LuckyTran,


My version of OpenFoam is 4.1.


I have one question.


I have searched alot on this forum and almost everywhere else. No one even encountered this error. Probably, I am doing a very stupid mistake.



I am using topoSetDict to make a faceSet from a patch, and then I want to make cellSet using that faceSet.


My topoSetDict file is given below:


Code:

actions
(
    {
        name    hot1;
        type    faceSet;
        action  new;
        source  patchToFace;
        sourceInfo
        {
            name "hotFace";
        }
    }
   
// Select based on faceSet
    {
        name    hotcell;
        type    cellSet;
        action  new;
        source  faceToCell;
        sourceInfo
        {
            set hot1;            // Name of faceSet

            //option neighbour; // cell with neighbour in faceSet
            //option owner;    //  ,,      owner
            option any;        // cell with any face in faceSet
            //option all;      // cell with all faces in faceSet
        }
    }

the log file shows that it has created faceSet and cellSet,


Code:

Create time

Create polyMesh for time = 0

Reading topoSetDict

Time = 0
    mesh not changed.
Created faceSet hot1
    Applying source patchToFace
    Adding all faces of patch hotFace ...
    Found matching patch hotFace with 253 faces.
    faceSet hot1 now size 253
Created cellSet hotcell
    Applying source faceToCell
    Adding cells according to faceSet hot1 ...
    cellSet hotcell now size 253
End

but I am getting the following error:


Code:

--> FOAM FATAL ERROR:
Illegal content 8200 of set:hotcell of type cellSet
Value should be between 0 and 6396

    From function void Foam::topoSet::check(Foam::label)
    in file sets/topoSets/topoSet.C at line 189.

FOAM aborting

#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::error::abort() at ??:?
#2  Foam::topoSet::check(int) at ??:?
#3  Foam::cellSet::cellSet(Foam::polyMesh const&, Foam::word  const&, Foam::IOobject::readOption, Foam::IOobject::writeOption) at  ??:?
#4  Foam::fv::cellSetOption::setCellSet() at ??:?
#5  Foam::fv::cellSetOption::cellSetOption(Foam::word const&,  Foam::word const&, Foam::dictionary const&, Foam::fvMesh  const&) at ??:?
#6  Foam::fv::option::adddictionaryConstructorToTable<Foam::fv::SemiImplicitSource<double>  >::New(Foam::word const&, Foam::word const&,  Foam::dictionary const&, Foam::fvMesh const&) at ??:?
#7  Foam::fv::option::New(Foam::word const&, Foam::dictionary const&, Foam::fvMesh const&) at ??:?
#8  Foam::fv::optionList::reset(Foam::dictionary const&) at ??:?
#9  Foam::fv::optionList::optionList(Foam::fvMesh const&, Foam::dictionary const&) at ??:?
#10  Foam::fv::options::options(Foam::fvMesh const&) at ??:?
#11  ? at ??:?
#12  __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
#13  ? at ??:?
Aborted (core dumped)

I don't know where I did mistake. I would be highly thankful if you can help me out in this.


Thank you

LuckyTran May 3, 2019 10:47

If you're only applying the heat source to the cells that are adjacent to a patch anyway... why not just use a heat flux boundary condition instead of trying to jack the volumetric heat source?


Maybe post what you did to get to the error. Some context would help.... I see that the error is complaining you're trying to assign cell number 8200 to the set hotcell and it can't because there are only 6396 cells and cell 8200 doesn't exist. I have no idea under what circumstances this can happen without some clues.

priyankap May 3, 2019 10:57

2 Attachment(s)
Hi..


Thank you so much for your reply.


Actually I am making heat source using fvOptions, and I am putting power in fvOptions to generate heat source.



Now I want to have a heat source on one face. For that I created a faceSet. as you can see below in the figure (red face)


Then I made cellSet from that faceSet. But that is something different. it is the red face with some triangular cells with it. you can see in the figure also.


My problem is that I just want one face of a solid to be a heat source using fvOptions, and fvOptions should take power as a parameter.

priyankap May 3, 2019 11:10

Hi,


I am attaching dropbox link to my case also, If you can find time to have a look, I would be highly thankful.


Thank you so much.




https://www.dropbox.com/sh/3fy3k575f...MLiNQ-WOa?dl=0

LuckyTran May 3, 2019 11:24

Quote:

Originally Posted by priyankap (Post 732657)
Hi..


Thank you so much for your reply.

Actually I am making heat source using fvOptions, and I am putting power in fvOptions to generate heat source.

Now I want to have a heat source on one face. For that I created a faceSet. as you can see below in the figure (red face)

My problem is that I just want one face of a solid to be a heat source using fvOptions, and fvOptions should take power as a parameter.


Yes I understand that, hence my complaint. A heat source on a face is just a heat flux. The heat flux BC is wayyy easier to do. Why not just do that?


You need to stop trying to make up your own language because that makes it really hard for anyone trying to help you because they don't know your language. Cells are not faces and faces are not cells! Let me tell you what you are doing...


You marked the faces on your patch.
You then marked the cells that are adjacent to this patch.
You created a cellSet of the cells adjacent to the patch. These are cells, with volumes, not faces.


You are now generating a heat source in this cellSet... which is not the same adding heat through faces. You can never apply a volumetric heat flux through a face.


I'm not going to open your files. If you can't find the time to explain what you did, I am unwilling to spend the time to look at them. More importantly, I have no freakin clue what commands you type into the terminal to encounter the errors.

priyankap May 3, 2019 11:29

Thank you for your reply.


I am sorry I am asking you this. but I don't have so much experience in Openfoam.


Can you please guide me a little about how can I use heatflux BC on one face? Can I use the power of 65 W to give heat flux boundary condition on one face?




Thank you

priyankap May 3, 2019 12:16

I am sorry to annoy you with wrong language here. I am new to OpenFoam and hence not very familiar with the names.



Also, I realized that it was a wrong way to make a cellSet from the faceSet.


I sent you my files because I felt I was unable to explain my problem correctly.


I will try to explain you as good as I can.


1. I created a geomerty with 3 regions: i) hot , ii) cold and iii) pipe in salome.

2. In region "hot" , I defined a face called hotFace.
3. Now I import this geometry as unv file in openfoam. and ran
Code:

ideasUnvToFoam heatTransfer_new.unv
4. Then I used

Code:

topoSet
5. my topoSetDict file is:
Code:

actions
(
    {
        name    hot1;
        type    faceSet;
        action  new;
        source  patchToFace;
        sourceInfo
        {
            name "hotFace";
        }
    }



//cellSet

    {

        name    hotcell;
        type    cellSet;
        action  new;
        source  faceToCell;
        sourceInfo
        {
            set hot1;   
            option  any;   
        }
    }

6. Then, I used

Code:

splitMeshRegions -cellZones -overwrite | tee log.splitMeshRegions
7. This command created the three regions which I mentioned above (hot, cold, pipe).

8. Based on the boundary file inside constant/region_name/polyMesh folder, I changed the changeDictionaryDict file.
9. I added fvOptions file in region "hot" which is given below:
Code:

heatSource
{
    type            scalarSemiImplicitSource;
    active          true;
 
    scalarSemiImplicitSourceCoeffs
    {
        selectionMode  cellSet; // all, cellSet, cellZone, points
        //cellZone        hot;       
        cellSet        hotcell;
        volumeMode      specific; // absolute;
        injectionRateSuSp
        {
            h    (2600 0);
        }
    }
}

10. After doing all these 9 steps I run my case from the begining using ./Allrun command in terminal. My Allrun file is given below:
Code:

#!/bin/sh
cd ${0%/*} || exit 1    # run from this directory


# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions


#runApplication blockMesh

ideasUnvToFoam heatTransfer_new.unv | tee log.ideasUnvToFoam
runApplication topoSet | tee log.topoSet
splitMeshRegions -cellZones -overwrite | tee log.splitMeshRegions
mv /home/openfoam/run/heatTransfer_new/constant/polyMesh/sets /home/openfoam/run/heatTransfer_new/constant/hot/polyMesh



# remove fluid fields from solid regions (important for post-processing)
for i in cold hot pipe
do
  rm -f 0*/$i/{mut,alphat,epsilon,k,U,p_rgh}
done

for i in cold hot pipe
do
  changeDictionary -region $i > log.changeDictionary.$i 2>&1
done


#-- Run on single processor
#runApplication `getApplication`
chtMultiRegionSimpleFoam | tee log.chtMultiRegionSimpleFoam
## Decompose
#runApplication decomposePar -allRegions
#
## Run
#runParallel `getApplication` 4
#
## Reconstruct
#runApplication reconstructPar -allRegions


echo
echo "creating files for paraview post-processing"
echo
paraFoam -touchAll

# ----------------------------------------------------------------- end-of-file

11. Now, I get the error that I have posted before in my earlier post.


I tried my best to explain my problem here. Please let me know if you can't understand something.


Thanks a lot for taking out time for this.

LuckyTran May 3, 2019 15:37

Ok but at which point do you get the error.... You actually gave me an all run script and are asking me to find it?

priyankap May 3, 2019 16:35

Thank you for your reply.


I am getting this error when fvOption tries to select finite volume options. But if I am unable to explain it, I am attaching the error log below:




Code:

Adding fvOptions

Creating finite volume options from "system/fvOptions"

Selecting finite volume options model type scalarSemiImplicitSource
    Source: heatSource
    - selecting cells using cellSet hotcell


--> FOAM FATAL ERROR:
Illegal content 8200 of set:hotcell of type cellSet
Value should be between 0 and 6396

    From function void Foam::topoSet::check(Foam::label)
    in file sets/topoSets/topoSet.C at line 189.

FOAM aborting


Thank you


All times are GMT -4. The time now is 16:36.