CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM (
-   -   Calculating the cosine of a Foam::scalar field (

RoE January 20, 2011 08:58

Calculating the cosine of a Foam::scalar field

I'm trying to calculate a smoothed Dirac delta function (volScalarField deltaSmooth) from a volScalarField phiLS with the following code:

forAll(deltaSmooth, i)
if (mag(phiLS[i])<epsLS.value())
deltaSmooth[i] = (1 + cos(pi*phiLS[i]/epsLS.value()))/(2*epsLS.value());
deltaSmooth[i] = 0.0;

However, I get the following compilation error:

levelSet.C:88: error: call of overloaded ‘cos(Foam::scalar)’ is ambiguous
/usr/include/bits/mathcalls.h:64: note: candidates are: double cos(double)
/opt/openfoam171/src/OpenFOAM/lnInclude/dimensionedScalar.H:76: note: Foam::dimensionedScalar Foam::cos(const Foam::dimensionedScalar&)
/opt/openfoam171/src/OpenFOAM/lnInclude/Scalar.H:238: note: Foam::doubleScalar Foam::cos(Foam::doubleScalar)
/opt/openfoam171/src/OpenFOAM/lnInclude/Scalar.H:238: note: Foam::floatScalar Foam::cos(Foam::floatScalar)

I also tried phiLS[i].value but without success...

Thanks for any advice!

MartinB January 20, 2011 09:13

Hi Roland,

try Foam::cos(...) instead of cos(...)


RoE January 20, 2011 09:15

Hi Martin,

it works!

Thanks a bunch!!

sleepdeprivation January 20, 2011 09:49

OpenFOAM overloads the cos function. Check namespace issues.
Try Foam::cos(), and then test it to make sure its doing what you want.

I'm not sure why it can't decide if its a doubleScalar or floatScalar, that's usually picked at compile time.

All times are GMT -4. The time now is 19:24.