CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Post-Processing (https://www.cfd-online.com/Forums/openfoam-post-processing/)
-   -   sampling on cellSet (https://www.cfd-online.com/Forums/openfoam-post-processing/118165-sampling-cellset.html)

Tarak May 22, 2013 02:44

sampling on cellSet
 
Hii,

I need to use the "sample" utility to sample field values in a cellSet. Can someone please tell me the entries needed in sampleDict to do this?

Thanks

Tushar@cfd May 22, 2013 03:47

Quote:

Originally Posted by Tarak (Post 429099)
Hii,

I need to use the "sample" utility to sample field values in a cellSet. Can someone please tell me the entries needed in sampleDict to do this?

Thanks

I think the following link will solve your problem..

http://www.cfd-online.com/Forums/ope...ampledict.html

Tarak May 22, 2013 11:13

Hii Tushar,

Thanks for your reply. If I understand correctly, the link talks about sampling on a patch, which I can do by writing something like
surfaces
(
airfoil
{
type patch;
patches (airfoil);;
// interpolate false;
}
);

inside sampleDict.
But I need to sample data along a cellSet (not patch)

Tushar@cfd May 23, 2013 00:33

Quote:

Originally Posted by Tarak (Post 429273)
Hii Tushar,

Thanks for your reply. If I understand correctly, the link talks about sampling on a patch, which I can do by writing something like
surfaces
(
airfoil
{
type patch;
patches (airfoil);;
// interpolate false;
}
);

inside sampleDict.
But I need to sample data along a cellSet (not patch)

By the cellSet do you mean to say a line/surface inside the fluid domain?

If suppose you want to plot along a line follow the below shown procedure.

Make your sampleDict like the one shown below:

interpolationScheme cellPoint;

setFormat raw;

surfaceFormat raw;

sets
(
name
{
type uniform;
axis y;
start (0 0 0.0005);
end (0 0.425 0.0005);
nPoints 800; }
);
fields (U p);

In a similar fashion you can progress for the surface with some changes like surfaces instead of sets, type patch..etc.

Tarak May 23, 2013 01:09

Hii Tushar,

Thanks for your reply. By cellSet I meant the list of cells which we can create based on multiple criteria (See section 5.1 of http://openfoamwiki.net/index.php/TopoSet).

Tushar@cfd May 23, 2013 01:40

Quote:

Originally Posted by Tarak (Post 429398)
Hii Tushar,

Thanks for your reply. By cellSet I meant the list of cells which we can create based on multiple criteria (See section 5.1 of http://openfoamwiki.net/index.php/TopoSet).


Hi Tarak,

Thanks for explaining..
Try looking at the already available topoSetDict with the OF. $tutorial/incompressible/pimpleFoam/TjunctionFan/system/ .
May be bad co-ordinates could be sometimes a problem with the effecting running of utility.

francois July 9, 2013 16:18

Tarak, Did you find a solution to sample your data on a cellSet/faceSet ? Thanks :) Regards François

ashvinc9 July 9, 2013 17:44

sampling of cellSet
 
Hi,
One can first run the topoSetDict and try to make a cellSet. Below is the code to keep in topoSetDict in order to make box typed cellSet.

Code:


actions
(
    {
        name    c0; // name of the cellSet
        type    cellSet;
        action  new;
        source  boxToCell; //box type of cellSet
        sourceInfo
        {
            box (1 0.5 0) (3 1.5 0.5); //size or dimensions of the Box, you may change this
        }
    }
);

After creating the cellSet, one can run following command to produce a VTK file of that cellSet, e.g.,

Code:

foamToVTK -cellSet c0 -latestTime
Hope this helps !

- Ashvin

francois July 11, 2013 07:34

Thanks Ashvin for your tip. :)

Indeed it's possible to obtain VTK file from cellSet with foamToVTK but i'm looking for something different: I'll like to obtain a raw file of the sampled cellSet which I can load into python.

Is it possible to do it without writing a parser to convert the VTK file to raw data ?

Have a nice day
Regards

Francois

Tarak July 14, 2013 21:34

Hii Francois,

No, I couldn't find a solution. Please let me know if you have one.

roenby August 21, 2013 10:08

Simple sampling using cellSet
 
Dear Tarak

Maybe I misunderstood something, but I think what you are trying to do is straight forward:

The cellSet you create e.g. with topoSet will be in a file, say, <case>/constant/polyMesh/sets/c0. This contains a list of cell indices, e.g. for all cells having centres within a box defined in your topoSetDict.

If the field that you want to sample is a volVectorField (such as the velocity field U) or volScalarField (such as the pressure field p) then the file <case>/<time>/<volFieldName> contains a list with N vectors or scalars, where N is the number of cells in your domain. The n'th value in the list is the field value at the n'th cell.

So if your cellSet contains the values (0 4 10) your sampling is simply a matter of picking out elements 0, 4 and 10 in the files <case>/<time>/<volFieldName>.

Of course for this to be usefull you also need the cell centres for these cells. This can be calculated with the utility writeCellCentres (type writeCellCentres -help in the terminal).

Hope this helped.

Johan

Ps: If the field you want to sample is a surfaceScalarField or a surfaceVectorField the values in the time directories are the field values on the cell faces. Then I suppose you can do exactly the same using a faceSet. The n'th value in your <case>/<time>/<surfaceField> corresponds to the n'th face in your <case>/constant/polyMesh/faces file (the numbers in this faces file refers to the elements in the constant/polyMesh/points file). Unfortunetaly, I don't think there is any writeFaceCentres utility currently so you would have to calculate the face centres yourself. For this you can extract the points for the faces in your faceSet using writeMeshObject -faceSet <faceSetFileName>.

ykanani June 15, 2017 18:04

Solved: sampling on cellSet
 
Quote:

Originally Posted by Tarak (Post 429099)
Hii,

I need to use the "sample" utility to sample field values in a cellSet. Can someone please tell me the entries needed in sampleDict to do this?

Thanks

It is an old thread but I thought the answer may help others who are looking for this feature. OpenFOAM 4.1 has an option called volRegion which can be used as a a functionObject in the controlDict. Please read the description at:

OpenFOAM-4.x/src/functionObjects/field/fieldValues/volRegion/volRegion.H

and find the sample controlDict at:

OpenFOAM-4.x/src/functionObjects/field/fieldValues/controlDict

This is very good feature for those who would like to have a time series of sampled data at a particular volume (defined by a cellZone) of the grid in cases where it is not feasible (e.g. huge grid sizes) to store timeseries of the whole grid. This time series later can be used for DMD analysis for example.


With a small modification, you can change the time interval that you want the data to be sampled (which can be different than the main time interval), For example you can write:

Code:

cellObj1
    {
        type            volRegion;
        libs ("libfieldFunctionObjects.so");
        enabled        true;
        writeControl    adjustableRunTime;
        writeInterval  0.01;
        log            true;
        writeFields    true;
        regionType      cellZone;
        name      d0z;
        operation      none;

        fields
        (
            p
            U
        );
    }

Please note that you need to have cellZone (not the cellSet) to perform this sampling. You need to first define a cellSet and then create a cellZone based the defined cellSet.

As mentioned in the header file, the following operations also can be performed on the volume:

none | no operation
sum | sum
sumMag | sum of component magnitudes
average | ensemble average
weightedAverage | weighted average
volAverage | volume weighted average
weightedVolAverage | weighted volume average
volIntegrate | volume integral
min | minimum
max | maximum
CoV | coefficient of variation: standard deviation/mean


Regards,
Yousef

sebastien_F1 October 24, 2017 07:19

Hi,

Have you tried it?

volRegion is class not a function object. This will not work.

Cheers,
Sebastien

Gearb0x January 12, 2018 03:58

I am trying to perform the same thing i.e. get the scalar field value for all cells belonging to a set.

Until now, what I am trying to do (combination of topoSet + sampleDict) does not work.

If someone has found a solution to this issue, I am interested

ykanani February 27, 2018 11:21

1 Attachment(s)
Quote:

Originally Posted by sebastien_F1 (Post 668983)
Hi,

Have you tried it?

volRegion is class not a function object. This will not work.

Cheers,
Sebastien

Yes I definitely tried it otherwise I would not post it here. I am attaching a test case. You can run this using icoFoam. Then look for sampled data under time folders and not the postProcessing folder.

Sorry for the late reply. I just saw the new posts.

Regards

sjlouie91 January 16, 2019 10:36

Hi Yousef,


I'm now trying to do the similar work because I need to get a sampled specified volume field for my LES simulation.

Although 'volRegion' can be used for the cellZone, I can only get the volume-averaged value for this cellZone rather than the values for each cell in this cellZone. The attached file that you give also shows the same problem.


So do you know any other utilities to get the values for each cell in the specified volume?



Best regards,
Jin

kennymhx February 13, 2020 15:51

Quote:

Originally Posted by sjlouie91 (Post 722118)
Hi Yousef,


I'm now trying to do the similar work because I need to get a sampled specified volume field for my LES simulation.

Although 'volRegion' can be used for the cellZone, I can only get the volume-averaged value for this cellZone rather than the values for each cell in this cellZone. The attached file that you give also shows the same problem.


So do you know any other utilities to get the values for each cell in the specified volume?



Best regards,
Jin

Dear Jin

I am now running across the same problem as you. Have you solved this problem? I know that 'volRegion' can be used for cellZone, but I can only get the volume-averaged value rather than the values for each cell in cellZone.



Kind regards,
Shawn

mzubiald May 27, 2020 16:49

Hello,
I have finally found one solution to the above problem.
I am working on OpenFOAM 5.


1. Create a "topoSetDict" file into /system that contain:
Code:

actions
(
    // cellZone
    {
        name    user_cellZone;
        type      cellSet;
        action    new;
        source  boxToCell;
        sourceInfo
        {
            box (x_min y_min z_min)(x_max y_max z_max);
        }
    }
 );

2. Create the corresponding cellSet with the command line:
Code:

$ toposet
3. Convert cellSet to cellZone:
Code:

$ setsToZones
At this stage, you may have a file "user_cellZone" into "/constant/polyMesh/sets/" defining the cellSet and into the file "/constant/polyMesh/cellZones" the definition of the converted cellZone.

4. Add into "/system/controlDict"
Code:

functions
{   

    volFieldValue1
    {
        type                volFieldValue;
        libs                ("libfieldFunctionObjects.so");
        log                  true;
        writeControl    writeTime;
        writeFields      true;
        regionType      cellZone;
        name              user_cellZone;
        operation        volAverage;
        fields
        (
            U
        );
    }
 }

5. Running the postProcess command you will obtain:
- the file volFieldValue.dat into /postProcessiong/volFieldValue1 containing the result of the cellZone volume average.
- into your latestTime folder, the file "U_cellZone-user_cellZone" containing the values of U for all the cells included into the cellZone.


All times are GMT -4. The time now is 14:07.