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/)
-   -   volum integral of mag(U)...? (https://www.cfd-online.com/Forums/openfoam-solving/97841-volum-integral-mag-u.html)

sawyer86 February 27, 2012 05:31

volum integral of mag(U)...?
 
Hi there,

my question is how is possible to get the scalar value of the volume integral of the mag(U) in OpenFoam?

To me it will be ok at least to know what is the function/command/whatever that allow to compute the scalar value of the volume integral of mag(U) for a given mesh...

thank you very much in advance!

alberto February 28, 2012 04:06

The fast way (but not necessarily the easy one :D), if you use OpenFOAM 2.1.x, is to add this piece of code to the controlDict of your case:

Code:

functions
(
  magUIntegral
  {
    functionObjectLibs ("libutilityFunctionObjects.so");
    type coded;
    redirectType integral;
    outputControl timeStep;
    code
    #{
      const volVectorField& U = mesh().lookupObject<volVectorField>("U");
      volScalarField magU(mag(U));

      scalar volIntegral = 0;

      forAll (magU, cellI)
      {
    volIntegral += magU[cellI]*mesh().V()[cellI];
      }

      Info<<"Volume integral: " << volIntegral << endl;

    #};
  }
);

To be able to run the case, you must allow system operations in the system controlDict. You have to locate it with

foamEtcFile controlDict

and change

allowSystemOperations 1;

When you run the code the first time, OpenFOAM will compile the additional code, and print the volume integral at each time step.

sawyer86 February 28, 2012 04:08

Quote:

Originally Posted by alberto (Post 346594)
The fast way (but not necessarily the easy one :D), if you use OpenFOAM 2.1.x, is to add this piece of code to the controlDict of your case:

Code:

functions
(
  magUIntegral
  {
    functionObjectLibs ("libutilityFunctionObjects.so");
    type coded;
    redirectType integral;
    outputControl timeStep;
    code
    #{
      const volVectorField& U = mesh().lookupObject<volVectorField>("U");
      volScalarField magU(mag(U));

      scalar volIntegral = 0;

      forAll (magU, cellI)
      {
    volIntegral += magU[cellI]*mesh().V()[cellI];
      }

      Info<<"Volume integral: " << volIntegral << endl;

    #};
  }
);

To be able to run the case, you must allow system operations in the system controlDict. You have to locate it with

foamEtcFile controlDict

and change

allowSystemOperations 1;

When you run the code the first time, OpenFOAM will compile the additional code, and print the volume integral at each time step.

Thank you very much Alberto! I will test it but it seems to be very useful and smart!

Regards

sawyer86 February 28, 2012 04:48

Quote:

Originally Posted by alberto (Post 346594)
The fast way (but not necessarily the easy one :D), if you use OpenFOAM 2.1.x, is to add this piece of code to the controlDict of your case:

Code:

functions
(
  magUIntegral
  {
    functionObjectLibs ("libutilityFunctionObjects.so");
    type coded;
    redirectType integral;
    outputControl timeStep;
    code
    #{
      const volVectorField& U = mesh().lookupObject<volVectorField>("U");
      volScalarField magU(mag(U));

      scalar volIntegral = 0;

      forAll (magU, cellI)
      {
    volIntegral += magU[cellI]*mesh().V()[cellI];
      }

      Info<<"Volume integral: " << volIntegral << endl;

    #};
  }
);

To be able to run the case, you must allow system operations in the system controlDict. You have to locate it with

foamEtcFile controlDict

and change

allowSystemOperations 1;

When you run the code the first time, OpenFOAM will compile the additional code, and print the volume integral at each time step.

Hi Alberto,

i did what you suggest me, and it works good! :)

But how can I do to print the value of run.Time and the mag(U) in a file instead than to screen...without modify the code, that means always in the controlDict...?

Thank you in advance...

alberto February 28, 2012 13:02

You can store the execution log, and process it to extract the values you need (and the corresponding times) with the standard Linux utilities.

As an alternative, you could try to open a text file in the code snippet, but I am not sure it's going to work.

akidess February 29, 2012 03:17

If I may shamelessly promote my own utility here:

http://code.google.com/p/foamcalcex/

I extended the standard foamCalc tool to support min, max and volumeIntegrate calculations.

Code:

foamCalcEx mag U
foamCalcEx volIntegrate magU > data.txt

The above lines will write the volume integral into a text file data.txt.

eelcovv February 29, 2012 09:31

Hi Anton,

Seems to be an interesting utility. I would like to check it out, but the hg clone command as described on your page does not work for me. Could you upload a tar-ball to the forum with source ?
Thanks!
Eelco

akidess February 29, 2012 10:14

1 Attachment(s)
Eelco, did you use this link: https://code.google.com/p/foamcalcex/ ?

I'm attaching a tarball with the code to this post. Let me know if you have any troubles with it.

eelcovv February 29, 2012 11:07

Hi Anton,

Yes, and then I tried

hg clone https://code.google.com/p/foamcalcex/

but this hg think does not work properly on our system Anyway, I will try you ultility.
Thanks!
Eelco

Andrea_85 March 7, 2012 10:52

Hi Anton,
I downloaded and compiled your utility (i put it under OpenFoam/application/utility/postprocessing/miscellaneous/ but now how can i use it?
neither ./foamCalcEx nor foamCalcEx works.

best

andrea

akidess March 7, 2012 11:49

Andrea, are you sure it compiled correctly, and that you started your foam environment? At the end of the compilation, you will see the location of the executable (highlighted in red here):

Code:

g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter \
-Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 \
-I/home/user/OpenFOAM/OpenFOAM-2.0.x/src/finiteVolume/lnInclude \
-I../postProcessing/foamCalcFunctionsEx/lnInclude/ -IlnInclude -I. \
-I/home/user/OpenFOAM/OpenFOAM-2.0.x/src/OpenFOAM/lnInclude \
-I/home/user/OpenFOAM/OpenFOAM-2.0.x/src/OSspecific/POSIX/lnInclude  \
 -fPIC -Xlinker --add-needed Make/linux64GccDPOpt/foamCalc.o -L/home/user/OpenFOAM/OpenFOAM-2.0.x/platforms/linux64GccDPOpt/lib \
            -lfiniteVolume    -lgenericPatchFields -L/home/user/OpenFOAM/akidess-2.0.x/platforms/linux64GccDPOpt/lib \
-lfoamCalcFunctionsEx -lOpenFOAM -ldl  -lm -o /home/user/OpenFOAM/OpenFOAM-2.0.x/platforms/linux64GccDPOpt/bin/foamCalcEx

This corresponds to ${FOAM_APPBIN}/foamCalcEx. You should be able to call the tool using "foamCalcEx". "./foamCalcEx" will generally NOT work.

- Anton

Andrea_85 March 7, 2012 11:56

Hi Anton,
i used ./Allwmake and this is what i got

Code:

+ wmake libo postCalc
wmakeLnInclude: linking include files to ./lnInclude
Making dependency list for source file postCalc.C
SOURCE=postCalc.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/postCalc.o
ld -r -o /home/aferrari/OpenFOAM/OpenFOAM-2.1.0/platforms/linux64GccDPOpt/lib/postCalc.o Make/linux64GccDPOpt/postCalc.o
'/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/platforms/linux64GccDPOpt/lib/postCalc.o' is up to date.
+ wmake libso foamCalcFunctionsEx
wmakeLnInclude: linking include files to ./lnInclude
Making dependency list for source file calcType/calcType.C
Making dependency list for source file calcType/calcTypeNew.C
Making dependency list for source file field/components/components.C
Making dependency list for source file field/mag/mag.C
Making dependency list for source file field/magSqr/magSqr.C
Making dependency list for source file field/magGrad/magGrad.C
Making dependency list for source file field/div/div.C
Making dependency list for source file field/randomise/randomise.C
Making dependency list for source file field/interpolate/interpolate.C
Making dependency list for source file field/min/min.C
Making dependency list for source file field/max/max.C
Making dependency list for source file field/maxAbs/maxAbs.C
Making dependency list for source file field/volIntegrate/volIntegrate.C
Making dependency list for source file basic/addSubtract/addSubtract.C
SOURCE=calcType/calcType.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/calcType.o
SOURCE=calcType/calcTypeNew.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/calcTypeNew.o
SOURCE=field/components/components.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/components.o
SOURCE=field/mag/mag.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/mag.o
SOURCE=field/magSqr/magSqr.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/magSqr.o
SOURCE=field/magGrad/magGrad.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/magGrad.o
SOURCE=field/div/div.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/div.o
SOURCE=field/randomise/randomise.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/randomise.o
SOURCE=field/interpolate/interpolate.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/interpolate.o
SOURCE=field/min/min.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/min.o
SOURCE=field/max/max.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/max.o
SOURCE=field/maxAbs/maxAbs.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/maxAbs.o
SOURCE=field/volIntegrate/volIntegrate.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/volIntegrate.o
SOURCE=basic/addSubtract/addSubtract.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/home/aferrari/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64GccDPOpt/addSubtract.o
'/home/aferrari/OpenFOAM/aferrari-2.1.0/platforms/linux64GccDPOpt/lib/libfoamCalcFunctionsEx.so' is up to date.

actually i cannot see the executable.:confused:
i'm using OF 2.1.0 as you can see.


best

andrea

akidess March 7, 2012 12:27

You just compiled the post-processing libraries postCalc and foamCalcFunctionsEx, but not the application. I think you are in the wrong directory.

The directory tree should look like this:

Code:

foamcalcex
---- Allwmake
---- foamCalcExApp
-------- foamCalc.C
-------- Make
---- postProcessing
-------- Allwmake
-------- foamCalcFunctionsEx
-------- postCalc

Are you using the Allwmake script in the top level directory?

eelcovv March 7, 2012 15:17

Hi Alberto,

I tried you piece of code to do the volume averaging. It works, so this is very useful. Thanks for that! Only one thing: it seems that it does not work if I run the code in parallel. Any quick example how to deal with that ?

Thanks!

Regards
Eelco

Andrea_85 March 8, 2012 04:07

Hi,
you area right Anton, i was copiling from second level.:D
Thanks

andrea

laurensvd March 26, 2012 04:23

Quote:

Originally Posted by eelcovv (Post 348219)
Hi Alberto,

I tried you piece of code to do the volume averaging. It works, so this is very useful. Thanks for that! Only one thing: it seems that it does not work if I run the code in parallel. Any quick example how to deal with that ?

Thanks!

Regards
Eelco

I have the same problem with a code which I wrote myself. I use the same code in a boundary condition code and it works but when I try it with the coded functions it crashes when using parallel. Any idea on how we can fix this (Alberto)?

Ok after searching for a day I find the solution right after posting this :) Very typical

Quote:

in OpenFoam-2.x.x/etc/controlDict, you need to change this line to

fileModificationChecking timeStamp;
Also, is there a reason (performance/accuracy) that you calculate the volume integral by looping over the cells instead of using the standard fvc::domainIntegrate(field).value() function?

eelcovv March 26, 2012 04:46

I reported it as a bug at Mantis. The error can be avoided by the following suggestion

'As a workaround switch off the 'masterOnly' file reading (set fileModificationChecking to timeStamp instead of timeStampMaster) in the etc/controlDict (or your personal one). '

So copy the $FOAM_INST_DIR/etc/bashrc

to the directory (create is if you dont have it yet, with the appropriate OF version of course)

$HOME/.OpenFOAM/2.1.0/

and change line with timeStampMaster

Eelco

laurensvd March 26, 2012 05:05

I found it minutes earlier in another posts of yours.

Bedankt :)

eelcovv March 26, 2012 07:30

I just saw your remark on the fvc::domainIntegrate. Thanks for that hint! I did not know this function. I just worked out the parallelisation of the routine for manually integrating over the cell. In case of a parallel run, this requires that information from the slave is explicitely communicated to the master. The makes the scripting error prone and more complex. I just tried you domainIntegrate function, and now live gets much more easy. I reprogrammed the script and checked it: the results are identical.

In case anybody is interested for an example of code funtions of both example: I try to obain the average position of a single gas bubble in a grid by calculating int_(gasfraction*position)/int_(gasfraction). My first version uses the explicite integration

Code:

bubblePosition
{
    functionObjectLibs ("libutilityFunctionObjects.so");
    type coded;
    redirectType average;
    outputControl timeStep;
    code
    #{
      const volScalarField& alpha1=mesh().lookupObject<volScalarField>("alpha1");

      scalar sumGasFraction = 0;
      vector sumGasPosition  = vector(0,0,0);

      // store number of processors np and current processor id
      label np=Pstream::nProcs();
      label id=Pstream::myProcNo();

      // loop over the cells and caclutate integral of gasfraction*position
      forAll (alpha1, cellI)
      {
        scalar gf=(1-alpha1[cellI])*mesh().V()[cellI];
        vector pos=mesh().C()[cellI];
        sumGasFraction += gf;
        sumGasPosition += gf*pos;
      }

      if(id==0)
      {
        // on the master: receive values from other nodes
        scalar getSumGasFraction=0;
        vector getSumGasPosition=vector(0,0,0);

        for(label i=1; i<np; i++)
        {
            // receive a stream with heat flux and area from the others
            IPstream vStream(Pstream::blocking, i);
            vStream >> getSumGasFraction >> getSumGasPosition;
            sumGasFraction += getSumGasFraction;
            sumGasPosition += getSumGasPosition;
        }
 
        // report mean bubble position
        vector meanBubblePosition=vector(0,0,0);
        if(sumGasFraction>0)
        {
            meanBubblePosition=sumGasPosition/sumGasFraction;
            Info<<"Mean bubble position : " << meanBubblePosition << endl;
        }
        else
        {
            Info<<"No gas present." << endl;
        }
      }
      else
      {
        // on the slaves: send info to the master node
        OPstream infoStream (Pstream::blocking, 0);
        infoStream << sumGasFraction << sumGasPosition;
      }
    #};
}

It works, however, is quite a long script for something simple. Now the domainIntegrate version of the same routine

Code:

bubblePosition
{
    functionObjectLibs ("libutilityFunctionObjects.so");
    type coded;
    redirectType average;
    outputControl timeStep;
    code
    #{
      const volScalarField& alpha1=mesh().lookupObject<volScalarField>("alpha1");
      const volVectorField& positions=mesh().C();

      scalar sumGasFrc=fvc::domainIntegrate((1-alpha1)).value();
      vector sumGasPos=fvc::domainIntegrate((1-alpha1)*positions).value();

      vector meanBubblePosition=vector(0,0,0);
      if(sumGasFrc>0)
      {
        meanBubblePosition=sumGasPos/sumGasFrc;
        Info<<"Mean bubble position : " << meanBubblePosition << endl;
      }
      else
      {
        Info<<"No gas present." << endl;
      }

    #};
}

Much shorter, and it yields exactly the same result (in both serial and parallel mode) as the first example. In order words, I would recommend the domainIntegrate version.

Regards
Eelco

alberto March 26, 2012 10:07

Quote:

Originally Posted by laurensvd (Post 351442)
I have the same problem with a code which I wrote myself. I use the same code in a boundary condition code and it works but when I try it with the coded functions it crashes when using parallel. Any idea on how we can fix this (Alberto)?

Ok after searching for a day I find the solution right after posting this :) Very typical

It was cited already, but for reference: http://www.openfoam.org/mantisbt/view.php?id=480

Quote:

Also, is there a reason (performance/accuracy) that you calculate the volume integral by looping over the cells instead of using the standard fvc::domainIntegrate(field).value() function?
No preference, they are equivalent in terms of accuracy and performance. The only difference is that fvc::domainIntegrate uses gsum to perform the summation, and, as such, takes advantage of parallelization.

Best,

eelcovv March 27, 2012 06:39

Bug in coded function in parallel mode resolved
 
I just got a message that the bug has been resolved in OF 2.1.x.

http://www.openfoam.org/mantisbt/view.php?id=480

Regards
Eelco

lithos September 12, 2012 09:44

Quote:

Originally Posted by akidess (Post 346920)
Eelco, did you use this link: https://code.google.com/p/foamcalcex/ ?

I'm attaching a tarball with the code to this post. Let me know if you have any troubles with it.

You're my hero of the day. Thanks a lot for this wonderful piece of code. It is working fine on Mac OS X 10.6.8 with OpenFOAM 2.0.x build 931a91d59a3a.

neetu kumari September 27, 2012 00:56

Quote:

Originally Posted by akidess (Post 348196)
You just compiled the post-processing libraries postCalc and foamCalcFunctionsEx, but not the application. I think you are in the wrong directory.

The directory tree should look like this:

Code:

foamcalcex
---- Allwmake
---- foamCalcExApp
-------- foamCalc.C
-------- Make
---- postProcessing
-------- Allwmake
-------- foamCalcFunctionsEx
-------- postCalc

Are you using the Allwmake script in the top level directory?


Hi!

I am Neetu. I have also downloaded the tar file foamCalcEx. I have compiled it correctly according to your instruction, but still it is not working. When I am running this function from my case directory then it showing that "foamClacEx command is not found". What should I do now? Give me the solution for this problem.

Thanks

akidess October 1, 2012 07:41

Quote:

Originally Posted by neetu kumari (Post 383831)
Hi!

I am Neetu. I have also downloaded the tar file foamCalcEx. I have compiled it correctly according to your instruction, but still it is not working. When I am running this function from my case directory then it showing that "foamClacEx command is not found". What should I do now? Give me the solution for this problem.

Thanks

Did you have any compilation errors?

lithos October 2, 2012 10:06

Quote:

Originally Posted by neetu kumari (Post 383831)
Hi!

I am Neetu. I have also downloaded the tar file foamCalcEx. I have compiled it correctly according to your instruction, but still it is not working. When I am running this function from my case directory then it showing that "foamClacEx command is not found". What should I do now? Give me the solution for this problem.

Thanks

Dear Neetu,

please make sure that you correct each 'files' file in each of the three 'Make' directories. If you use a local user environment for compiling additional stuff for OpenFOAM they should be

Code:

foamCalc.C

EXE = $(FOAM_USER_APPBIN)/foamCalcEx

Code:

calcType/calcType.C
...
LIB = $(FOAM_USER_LIBBIN)/libfoamCalcFunctionsEx

Code:

postCalc.C

LIB = $(FOAM_USER_LIBBIN)/postCalc

That means you would have to set
FOAM_USER_APPBIN
FOAM_USER_LIBBIN.
Usually the structure in WM_PROJECT_USER_DIR should be like
WM_PROJECT_USER_DIR/run
WM_PROJECT_USER_DIR/lib
WM_PROJECT_USER_DIR/platforms/...your_system.../bin. You can find out the assigned directory by typing
Code:

echo $FOAM_USER_APPBIN
Have a nice day.

Cheers,

Michael

akidess October 2, 2012 10:13

The changes that Michael mentioned are already incorporated in the code repository (the tarball is not up to date). You can follow Michael's instructions, or get a copy using 'hg clone' (see previous posts or https://code.google.com/p/foamcalcex/source/checkout). Also do the same if you want to use foamCalcEx with OF-1.6-ext.

- Anton

neetu kumari October 2, 2012 23:45

Thank you for the reply. Now I am able to compile the file correctly.
Thanks

vahid.najafi October 17, 2012 02:44

please help me?
 
1 Attachment(s)
Hi dear Foamers.
I want to calculate one equation(pics of it attachmented), im my case.
please help me ,and tell me how to do it???
thanks for your attention.

tfuwa November 19, 2014 23:11

Quote:

Originally Posted by akidess (Post 346920)
Eelco, did you use this link: https://code.google.com/p/foamcalcex/ ?

I'm attaching a tarball with the code to this post. Let me know if you have any troubles with it.

Dear Anton,

Thanks for the great tool.

Is it possible to average/integrate a certain parameter over a specific area, say num1<x<num2 & num3<y<num4?

akidess November 20, 2014 03:50

Quote:

Originally Posted by tfuwa (Post 520082)
Is it possible to average/integrate a certain parameter over a specific area, say num1<x<num2 & num3<y<num4?

The way I would do that is to create a volScalarField (e.g. using funkySetFields) that is 1 in your area of interest and 0 elsewhere, multiply it with your field of interest using foamCalcEx, and then doing the integration or averaging. Alternatively, you can also have a look at funkyDoCalc which might be able to do what you want using a dictionary.

Tellur October 4, 2015 23:02

Hi Anton, I am trying to compile your utility under OpefFoam 2.4. I'm following the details on the wiki installation but I am getting the following error:

~/OpenFOAM/theodore-2.4.0/foamcalcex/postProcessing ~/OpenFOAM/theodore-2.4.0/foamcalcex
+ wmake libo postCalc
'/home/theodore/OpenFOAM/root-2.4.0/platforms/linux64GccDPOpt/lib/postCalc.o' is up to date.
+ wmake libso foamCalcFunctionsEx
make: *** No rule to make target `/opt/openfoam240/src/finiteVolume/lnInclude/cyclicAMILduInterface.H', needed by `calcType/calcType.dep'. Stop.
root@node3:~/OpenFOAM/theodore-2.4.0/foamcalcex# ./Allwmake
~/OpenFOAM/theodore-2.4.0/foamcalcex/postProcessing ~/OpenFOAM/theodore-2.4.0/foamcalcex
+ wmake libo postCalc
'/home/theodore/OpenFOAM/root-2.4.0/platforms/linux64GccDPOpt/lib/postCalc.o' is up to date.
+ wmake libso foamCalcFunctionsEx
SOURCE=calcType/calcType.C ; g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3 -DNoRepository -ftemplate-depth-100 -I/opt/openfoam240/src/finiteVolume/lnInclude -IlnInclude -I. -I/opt/openfoam240/src/OpenFOAM/lnInclude -I/opt/openfoam240/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linux64GccDPOpt/calcType.o
In file included from /opt/openfoam240/src/finiteVolume/lnInclude/ddtScheme.C:30:0,
from /opt/openfoam240/src/finiteVolume/lnInclude/ddtScheme.H:325,
from /opt/openfoam240/src/finiteVolume/lnInclude/fvcDdt.C:28,
from /opt/openfoam240/src/finiteVolume/lnInclude/fvcDdt.H:199,
from /opt/openfoam240/src/finiteVolume/lnInclude/fvc.H:44,
from /opt/openfoam240/src/finiteVolume/lnInclude/fvCFD.H:8,
from calcType/calcType.H:48,
from calcType/calcType.C:26:
/opt/openfoam240/src/finiteVolume/lnInclude/cyclicAMIFvPatch.H:39:35: fatal error: cyclicAMILduInterface.H: No such file or directory
#include "cyclicAMILduInterface.H"

I tried looking around in the site for changes in the Make files but nothing worked so far. Any idea what it could be?

Thanks in advance!

Theodore.

akidess October 12, 2015 05:26

Sorry, I just noticed your post now. If you haven't solved it already, the solution is to modify Make/options for foamCalcFunctionsEx as follows (adding include and library references to meshTools):
Code:

ifdef FOAM_DEV
  FOAM_DEV_OPTION = -DFOAM_DEV
endif
EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude \
  $(FOAM_DEV_OPTION)
EXE_LIBS = \
    -lfiniteVolume \
    -lmeshTools


sahm August 1, 2016 06:06

Hi Anton

I am trying to compile the FoamCalcEx library on OpenFOAM v1606+ and I have added the meshtools in the options files, but I'm getting this error message:

Quote:

Make/linux64GccDPInt32Opt/field/components/components.o
field/components/components.C: In member function ‘virtual void Foam::calcTypes::components::calc(const Foam::argList&, const Foam::Time&, const Foam::fvMesh&)’:
field/components/components.C:95:21: error: ‘class Foam::IOobject’ has no member named ‘headerOk’
if (fieldHeader.headerOk())
^
/home/sahm/OpenFOAM/OpenFOAM-v1606+/wmake/rules/General/transform:8: recipe for target 'Make/linux64GccDPInt32Opt/field/components/components.o' failed
make: *** [Make/linux64GccDPInt32Opt/field/components/components.o] Error 1

I'm trying to understand where this problem is rooting from. Apparently some other applications of openfoam have this headerOk function and they compiled fine. But this one is giving me error. Could you please help me with this? I need foamCalcEx to calculate average of a field in my project. In the meantime I will try working on it.

sahm January 24, 2019 16:00

For my future reference: Change headerOk to typeHeaderOK

mcfdma January 6, 2020 10:39

Hello Anton, firstly, thank you for sharing your utility.

I would like to know if it's possible to use volIntegrate field across a line (one point to another) instead of the entire domain?

Kbshariff April 23, 2020 07:32

Quote:

Originally Posted by akidess (Post 346830)
If I may shamelessly promote my own utility here:

http://code.google.com/p/foamcalcex/

I extended the standard foamCalc tool to support min, max and volumeIntegrate calculations.

Code:

foamCalcEx mag U
foamCalcEx volIntegrate magU > data.txt

The above lines will write the volume integral into a text file data.txt.




I tried to use your uility on OF 7, but unfortunately i have this error.


Kindly assist please
Code:

~/foamcalcex/postProcessing ~/foamcalcex
+ wmake libo postCalc
wmake libo postCalc
+ wmake libso foamCalcFunctionsEx
wmake libso foamCalcFunctionsEx
g++ -std=c++11 -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -Wno-attributes -O3  -DNoRepository -ftemplate-depth-100 -I/opt/openfoam7/src/finiteVolume/lnInclude  -IlnInclude -I. -I/opt/openfoam7/src/OpenFOAM/lnInclude -I/opt/openfoam7/src/OSspecific/POSIX/lnInclude  -fPIC -c calcType/calcType.C -o Make/linux64GccDPInt32Opt/calcType/calcType.o
In file included from /opt/openfoam7/src/finiteVolume/lnInclude/ddtScheme.C:30:0,
                from /opt/openfoam7/src/finiteVolume/lnInclude/ddtScheme.H:357,
                from /opt/openfoam7/src/finiteVolume/lnInclude/fvcDdt.C:28,
                from /opt/openfoam7/src/finiteVolume/lnInclude/fvcDdt.H:250,
                from /opt/openfoam7/src/finiteVolume/lnInclude/fvc.H:44,
                from /opt/openfoam7/src/finiteVolume/lnInclude/fvCFD.H:8,
                from calcType/calcType.H:48,
                from calcType/calcType.C:26:
/opt/openfoam7/src/finiteVolume/lnInclude/cyclicAMIFvPatch.H:39:10: fatal error: cyclicAMILduInterface.H: No such file or directory
 #include "cyclicAMILduInterface.H"
          ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
/opt/openfoam7/wmake/rules/General/transform:25: recipe for target 'Make/linux64GccDPInt32Opt/calcType/calcType.o' failed
make: *** [Make/linux64GccDPInt32Opt/calcType/calcType.o] Error 1




regards,


Kabir


All times are GMT -4. The time now is 03:13.