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/)
-   -   How to output other properties? (https://www.cfd-online.com/Forums/openfoam-post-processing/100307-how-output-other-properties.html)

wagnergaluppo April 23, 2012 18:13

How to output other properties?
 
Hi,
I am using the OpenFOAM-210 and I Know that with foamCalc utility I can get the components of velocity and I also know how to get mach number and vorticity, but does anybody know how to output other variables such as viscosity, Reynolds number and etc?
thanks,
Wagner

akidess April 24, 2012 02:42

Viscosity will be written to the time directories if it's not constant, and you can plot it with paraview. You can also use paraview to calculate the Reynolds number. If you want a command line utility, you'll have to get your hands dirty.

wagnergaluppo April 26, 2012 23:51

Thank you for your reply. I'm ready to get my hands dirty. Even though my viscosity is constant, I would still like to know how to output it at each time-step. I would like to verify that I am getting the correct value for my viscosity. I'm using the rhoCentralFoam solver. This is the output of the "createFields.H" file:

13--> const volScalarField& mu = thermo.mu();

So what I did was change this file to something like this:

13--> volScalarField mu
14--> (
15--> IOobject
16--> (
17--> "mu",
18--> runTime.timeName(),
19--> mesh,
20--> IOobject::MUST_READ,
21--> IOobject::AUTO_WRITE
22--> ),
23--> mesh
24--> );

Then I recompiled and created a "mu" file at my "/0/" directory. But after I running, the other time directories do not have the mu property. It's not autowriting as ordered. For the Reynolds number I'm still having problems. Do you know of any documentation about the command line utility for this?
thanks,
Wagner

wagnergaluppo May 1, 2012 14:42

sutherland viscosity
 
Hi Akidess,

I followed your suggestion and set the viscosity to sutherland. Now that the viscosity is not constant, I would have expected it to write to the time directories like you suggested. Unfortunately, viscosity does not appear in any of the time directories.

Have I missed something?

Here is the output of my thermophysical properties

Code:

FoamFile
{
    version    2.0;
    format      ascii;
    class      dictionary;
    location    "constant";
    object      thermophysicalProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

thermoType      ePsiThermo<pureMixture<sutherlandTransport<specieThermo<eConstThermo<perfectGas>>>>>;

mixture
{
    // normalised gas
    specie
    {
        nMoles          1;
        molWeight      50;
    }
    thermodynamics
    {
        Cv              1007.8039105;
        Hf              2.544e+06;
    }
    transport
    {
        As              1.67212e-06;
        Ts              170.672;
    }
}


wagnergaluppo May 1, 2012 14:48

createfields.H
 
This is what I've specified in the createfields.H file

Code:

const volScalarField& psi = thermo.psi();
volScalarField mu
(
IOobject
(
"mu",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);


akidess May 2, 2012 03:39

Which solver are you using? I'll try it out and see if I can get it to work.

wagnergaluppo May 2, 2012 12:36

I'm using the rhoCentralFoam.
Thanks,
Wagner

wagnergaluppo May 16, 2012 15:28

I figure it out.
Thank you,
Wagner Galuppo

akidess May 19, 2012 05:09

Sorry I couldn't help much, I got busy with other things. Can you add a post on how you solved the problem? It might help others in the future.

wagnergaluppo May 24, 2012 12:29

Actually I partly figured it out. I found the file "basicThermo.C" in (/opt/openfoam210/src/thermophysicalModels/basic/basicThermo/)
If you have look from the 201st until 213th line you will find this:
Code:

mu_
    (
        IOobject
        (
            "mu",
            mesh.time().timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        mesh,
        dimensionSet(1, -1, -1, 0, 0)
    ),

I copied the directory (/opt/openfoam210/src/thermophysicalModels/basic/) to my workplace and I changed the name from /basic/ to /myBasic/.
in terminal:
Code:

$ cd /opt/openfoam210
$ cp -r --parents src/thermophysicalModels/basic/ /home/cfd02/OpenFOAM/USER-2.1.0/
$ cd ~/OpenFOAM/USER-2.1.0/src/thermophysicalModels/
$ mv basic myBasic

Next I edited line 209 in the file myBasic/basicThermo/basicThermo.C from:
Code:

IOobject::NO_WRITE
to
Code:

IOobject::AUTO_WRITE
and saved and closed it.

Then I changed the 27th line in the file myBasic/Make/files from:
Code:

LIB = $(FOAM_LIBBIN)/libbasicThermophysicalModels
to
Code:

LIB = $(FOAM_USER_LIBBIN)/libbasicThermophysicalModels
and saved and closed it.

Next I compiled the code:
Code:

$ cd ~/OpenFOAM/USER-2.1.0/src/thermophysicalModels/myBasic/
$ wmake libso

It works, if you run rhoCentralFoam will output mu and doesn't matter if it is constant.
The Problem is that I'm overwriting the main library basicThermophysicalModels instead of creating a new one.

wagnergaluppo May 24, 2012 19:20

I changed the last modifications for mu on line 209 (in myBasic/basicThermo/basicThermo.C) back to

Code:

IOobject::NO_WRITE
and doing so reverted to the original configuration of OpenFoam for basic thermophysical property. I recompiled it overwriting my last changes.

Now OpenFoam is using the original configuration, and so I try to make a new basic thermoPhysical model.

First, I reset mu to AUTO_WRITE (since I want to output mu).

Next, I changed line 27 in the file myBasic/Make/files from
Code:

LIB = $(FOAM_USER_LIBBIN)/libbasicThermophysicalModels
to:
Code:

LIB = $(FOAM_USER_LIBBIN)/libmubasicThermophysicalModels
and compiled it with the wmake libso command.

Then I copied rhoCentralFoam solver to my workplace and renamed the directory from /rhoCentralFoam/ to /muRhoCentralFoam/, and after that in the new /muRhoCentralFoam/ directory I changed the file from rhoCentralFoam.C to muRhoCentralFoam.C.
Code:

$ cd /opt/opefoam210/
$ cp -r --parents applications/solvers/compressible/rhoCentralFoam/ $WM_PROJECT_USER_DIR
$ cd $WM_PROJECT_USER_DIR/applications/solvers/compressible/
$ mv rhoCentralFoam muRhoCentralFoam
$ cd muRhoCentralFoam
$ mv rhoCentralFoam.C muRhoCentralFoam.C

Next, in the /muRhoCentralFoam/Make/ directory I changed the file files from
Code:

rhoCentralFoam.C

EXE = $(FOAM_APPBIN)/rhoCentralFoam

to
Code:

muRhoCentralFoam.C

EXE = $(FOAM_USER_APPBIN)/muRhoCentralFoam

And the file options from
Code:

EXE_INC = \
    -IBCs/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
    -I$(LIB_SRC)/dynamicMesh/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude

EXE_LIBS = \
    -lfiniteVolume \
    -lbasicThermophysicalModels \
    -lspecie \
    -lrhoCentralFoam \
    -lcompressibleTurbulenceModel \
    -lcompressibleRASModels \
    -lcompressibleLESModels \
    -lmeshTools

to
Code:

EXE_INC = \
    -IBCs/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(WM_PROJECT_USER_DIR)/src/thermophysicalModels/myBasic/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
    -I$(LIB_SRC)/dynamicMesh/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude

EXE_LIBS = \
    -lfiniteVolume \
    -lmubasicThermophysicalModels \
    -lspecie \
    -lrhoCentralFoam \
    -lcompressibleTurbulenceModel \
    -lcompressibleRASModels \
    -lcompressibleLESModels \
    -lmeshTools

Then I tried to compile it, but it cannot find -lmubasicThermophysicalModels, the solver compilation is not reading my new basic thermophysicalModel.

Copilation error message:
Code:

Making dependency list for source file muRhoCentralFoam.C
SOURCE=muRhoCentralFoam.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -IBCs/lnInclude -I/opt/openfoam210/src/finiteVolume/lnInclude -I/home/USER/OpenFOAM/USER-2.1.0/src/thermophysicalModels/myBasic/lnInclude -I/opt/openfoam210/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam210/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam210/src/dynamicMesh/lnInclude -I/opt/openfoam210/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam210/src/OpenFOAM/lnInclude -I/opt/openfoam210/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/muRhoCentralFoam.o
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H: In function ‘int main(int, char**)’:
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:32: warning: unused variable ‘adjustTimeStep’
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:35: warning: unused variable ‘maxCo’
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:38: warning: unused variable ‘maxDeltaT’
g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -IBCs/lnInclude -I/opt/openfoam210/src/finiteVolume/lnInclude -I/home/USER/OpenFOAM/USER-2.1.0/src/thermophysicalModels/myBasic/lnInclude -I/opt/openfoam210/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam210/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam210/src/dynamicMesh/lnInclude -I/opt/openfoam210/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam210/src/OpenFOAM/lnInclude -I/opt/openfoam210/src/OSspecific/POSIX/lnInclude  -fPIC -Xlinker --add-needed -Xlinker --no-as-needed Make/linux64GccDPOpt/muRhoCentralFoam.o -L/opt/openfoam210/platforms/linux64GccDPOpt/lib \
            -lfiniteVolume -lmubasicThermophysicalModels -lspecie -lrhoCentralFoam -lcompressibleTurbulenceModel -lcompressibleRASModels -lcompressibleLESModels -lmeshTools -lOpenFOAM -ldl  -lm -o /home/USER/OpenFOAM/USER-2.1.0/platforms/linux64GccDPOpt/bin/muRhoCentralFoam
/usr/bin/ld: cannot find -lmubasicThermophysicalModels
collect2: ld returned 1 exit status
make: *** [/home/USER/OpenFOAM/USER-2.1.0/platforms/linux64GccDPOpt/bin/muRhoCentralFoam] Error 1

I also tried replacing in the file /Make/options
Code:

-lmubasicThermophysicalModels \
for the original one
Code:

-lbasicThermophysicalModels \
but it loads the main basic thermophysicalModel from OpenFoam.
Do you have any suggestions or ideas about how can I create this new basic thermophysicalModel and load it in my new solver, or what I am doing wrong?

Thanks,
Wagner Galuppo

Lisandro Maders September 1, 2015 08:49

Figured out?
 
Quote:

Originally Posted by wagnergaluppo (Post 363004)
I changed the last modifications for mu on line 209 (in myBasic/basicThermo/basicThermo.C) back to

Code:

IOobject::NO_WRITE
and doing so reverted to the original configuration of OpenFoam for basic thermophysical property. I recompiled it overwriting my last changes.

Now OpenFoam is using the original configuration, and so I try to make a new basic thermoPhysical model.

First, I reset mu to AUTO_WRITE (since I want to output mu).

Next, I changed line 27 in the file myBasic/Make/files from
Code:

LIB = $(FOAM_USER_LIBBIN)/libbasicThermophysicalModels
to:
Code:

LIB = $(FOAM_USER_LIBBIN)/libmubasicThermophysicalModels
and compiled it with the wmake libso command.

Then I copied rhoCentralFoam solver to my workplace and renamed the directory from /rhoCentralFoam/ to /muRhoCentralFoam/, and after that in the new /muRhoCentralFoam/ directory I changed the file from rhoCentralFoam.C to muRhoCentralFoam.C.
Code:

$ cd /opt/opefoam210/
$ cp -r --parents applications/solvers/compressible/rhoCentralFoam/ $WM_PROJECT_USER_DIR
$ cd $WM_PROJECT_USER_DIR/applications/solvers/compressible/
$ mv rhoCentralFoam muRhoCentralFoam
$ cd muRhoCentralFoam
$ mv rhoCentralFoam.C muRhoCentralFoam.C

Next, in the /muRhoCentralFoam/Make/ directory I changed the file files from
Code:

rhoCentralFoam.C

EXE = $(FOAM_APPBIN)/rhoCentralFoam

to
Code:

muRhoCentralFoam.C

EXE = $(FOAM_USER_APPBIN)/muRhoCentralFoam

And the file options from
Code:

EXE_INC = \
    -IBCs/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
    -I$(LIB_SRC)/dynamicMesh/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude

EXE_LIBS = \
    -lfiniteVolume \
    -lbasicThermophysicalModels \
    -lspecie \
    -lrhoCentralFoam \
    -lcompressibleTurbulenceModel \
    -lcompressibleRASModels \
    -lcompressibleLESModels \
    -lmeshTools

to
Code:

EXE_INC = \
    -IBCs/lnInclude \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(WM_PROJECT_USER_DIR)/src/thermophysicalModels/myBasic/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
    -I$(LIB_SRC)/dynamicMesh/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude

EXE_LIBS = \
    -lfiniteVolume \
    -lmubasicThermophysicalModels \
    -lspecie \
    -lrhoCentralFoam \
    -lcompressibleTurbulenceModel \
    -lcompressibleRASModels \
    -lcompressibleLESModels \
    -lmeshTools

Then I tried to compile it, but it cannot find -lmubasicThermophysicalModels, the solver compilation is not reading my new basic thermophysicalModel.

Copilation error message:
Code:

Making dependency list for source file muRhoCentralFoam.C
SOURCE=muRhoCentralFoam.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -IBCs/lnInclude -I/opt/openfoam210/src/finiteVolume/lnInclude -I/home/USER/OpenFOAM/USER-2.1.0/src/thermophysicalModels/myBasic/lnInclude -I/opt/openfoam210/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam210/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam210/src/dynamicMesh/lnInclude -I/opt/openfoam210/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam210/src/OpenFOAM/lnInclude -I/opt/openfoam210/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/muRhoCentralFoam.o
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H: In function ‘int main(int, char**)’:
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:32: warning: unused variable ‘adjustTimeStep’
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:35: warning: unused variable ‘maxCo’
/opt/openfoam210/src/finiteVolume/lnInclude/readTimeControls.H:38: warning: unused variable ‘maxDeltaT’
g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -IBCs/lnInclude -I/opt/openfoam210/src/finiteVolume/lnInclude -I/home/USER/OpenFOAM/USER-2.1.0/src/thermophysicalModels/myBasic/lnInclude -I/opt/openfoam210/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam210/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam210/src/dynamicMesh/lnInclude -I/opt/openfoam210/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam210/src/OpenFOAM/lnInclude -I/opt/openfoam210/src/OSspecific/POSIX/lnInclude  -fPIC -Xlinker --add-needed -Xlinker --no-as-needed Make/linux64GccDPOpt/muRhoCentralFoam.o -L/opt/openfoam210/platforms/linux64GccDPOpt/lib \
        -lfiniteVolume -lmubasicThermophysicalModels -lspecie -lrhoCentralFoam -lcompressibleTurbulenceModel -lcompressibleRASModels -lcompressibleLESModels -lmeshTools -lOpenFOAM -ldl  -lm -o /home/USER/OpenFOAM/USER-2.1.0/platforms/linux64GccDPOpt/bin/muRhoCentralFoam
/usr/bin/ld: cannot find -lmubasicThermophysicalModels
collect2: ld returned 1 exit status
make: *** [/home/USER/OpenFOAM/USER-2.1.0/platforms/linux64GccDPOpt/bin/muRhoCentralFoam] Error 1

I also tried replacing in the file /Make/options
Code:

-lmubasicThermophysicalModels \
for the original one
Code:

-lbasicThermophysicalModels \
but it loads the main basic thermophysicalModel from OpenFoam.
Do you have any suggestions or ideas about how can I create this new basic thermophysicalModel and load it in my new solver, or what I am doing wrong?

Thanks,
Wagner Galuppo

Hello Wagner,

did you figure out your issue? It would be good if you write what you have done then other people could make use of this knowledge as well. I am trying to make a very similar implementation and I am getting similar errors..

Regards,

Lisandro

olivierG September 1, 2015 10:04

Hello,

You don't need to do this to output viscosity, just use the functions objects "writeRegisteredObject".
ex:
Code:

{
type writeRegisteredObject;
functionObjectLibs ("libIOFunctionObjects.so");
objectNames ("bananas");
outputControl outputTime;
outputInterval 1;
}

Here, "bananas" will give you the list of all registered object, replace by the one you want.

regards,
olivier

Lisandro Maders September 1, 2015 10:42

Thanks for your tip Olivier, it seems much more straightforward and ease to get this value.

However, I am not able to find it working.

I put transportProperties instead of bananas but it does not write the nu field in any step.. (by the way,I think I am doing the basic things right. I put the "functions" subdict in the controlDict file, etc..)

Lisandro

olivierG September 1, 2015 10:49

hello,

Yes, function object should be in controlDict.
First, run your solver with bananas => you will get an error message with the full list of possible object, and there is no bananas.
Then, pick up the good one (name here can be something::nu instead of nu)

regards,
olivier

Lisandro Maders September 3, 2015 09:10

Hi Olivier,

Does it work even if my viscosity has a constant value in all points? Because it seems not to be working.. The maximum I got was having a nu file in the time directories when I created it as a volScalarField in the createFields.H file in the solver directory..

Regards,
Lisandro

Lisandro Maders September 11, 2015 09:24

I solved it a couple of days ago, here is what I have done in order to make it:

I wanted to write the viscosity and Cp values any written time in the case folder.

1. In the createFields.H file:

Code:


volScalarField mu_output
(
    IOobject
    (
        "mu_output",
        runTime.timeName(),
        mesh,
        IOobject::NO_READ,
        IOobject::AUTO_WRITE
    ),
    turbulence->mu()
);

and

Code:

volScalarField cp_output
(
    IOobject
    (
        "cp_output",
        runTime.timeName(),
        mesh,
        IOobject::NO_READ,
        IOobject::AUTO_WRITE
    ),
    thermo.Cp()
);

2. In the solver.C file:

Code:

    while (runTime.run())
    {
        ....
        ....

        runTime.write();

        mu_output = turbulence->mu();
        cp_output = thermo.Cp();

   
    }

That worked for me! Later when I finish my project I will try to use the functionObject tool as recommended by Olivier. It seems much easier but I was not able to make it work! Thanks anyway!


Regards,

Lisandro

thunde47 December 14, 2015 17:24

and Reynold's number
 
I want to plot Reynold's number. Not, Reynold's number is dependent on velocity. So, all I should do is provide a formula to calculate Re in the code. Also, I am going to calculate Re with mag(U). Please suggest how to incorporate these features in the code. I will appreciate if replies are relevant to icoFoam solver.

hcl734 January 5, 2016 03:12

Hi olivier,

your approach using function objects seems quite comfortable and I can reproduce some results for the thermo:... properties.
But when I put thermophysicalProperties for function object names, there is no result at all.
It says writing thermophysicalProperties object in the log-file but there is no output.
Ok there seems to be a bug in this function since it manipulates the header of the thermophysicalProperties-Dict adding the thermoType{...} entries into the FoamFile-header.
Could you help me to figure this one out?

olivierG January 5, 2016 03:40

hello,

function object work only with registered object. So there is 2 solution:
1) the properties you want is an object => just use the fuctionObject
2) you need some coding, and create a custom solver

the part 2) is easy, so don"t be scare.

regards,
olivier

hcl734 January 6, 2016 08:39

Ok it works for mu, rho, alpha and psi using function objects and chtMRSF.

I am trying to implement the output of Cp for chtMultiRegionSimpleFoam.
I tried to do it in analogy to rho adding the following to createFluidFields.H

Code:

    PtrList<volScalarField> CpFluid(fluidRegions.size());


        Info<< "    Adding to thermoFluid\n" << endl;

        thermoFluid.set
        (
            i,
            CpThermo::New(fluidRegions[i]).ptr()
        );

    Info<< "    Adding to CpFluid\n" << endl;
    CpFluid.set
    (
        i,
            new volScalarField cp_output
        (
            IOobject
            (
            "Cp",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
            ),
            thermoFluid[i].Cp()
        )
    );

and to setRegionFluidFields

Code:

    volScalarField& Cp = CpFluid[i];

When compiling I get the error message

Code:

In file included from chtMultiRegionSimpleFoamMuCp.C:71:0:
fluid/setRegionFluidFields.H:7:21: warning: unused variable ‘Cp’ [-Wunused-variable]
    volScalarField& Cp = CpFluid[i];


Could you help me with that one?

calf.Z January 2, 2019 22:32

If I want to use writeObjects functions , but some properties are not available, such as kappa Cp. Should I build volScalarField kappa/Cp in creatFields.H then use writeObjects?

Or are there other methods to present kappa Cp in post-processing? I want to see the relationship between T and Cp/kappa. Thank you.


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