CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   Psat (https://www.cfd-online.com/Forums/openfoam/103274-psat.html)

bluemind June 15, 2012 10:16

Psat
 
Hello,

I'm currently trying to implement the saturation pressure into the solver twoLiquidMixingFoam, so far what I have written is :

{

forAll(psat,celli){
if (ELSATl[celli] > 200.)
{
psat[celli]=cfit*exp(c1 + c2/(Tl[celli] ) +c3*log(Tl[celli]/one ) +c4*pow(Tl[celli],c5));
}
else
{
psat[celli]=0.*pfit;
}


}

}

But when I compile i get the following error message :

error: cannot convert ‘Foam::dimensioned<double>’ to ‘double’ in assignment

I've chosen the unit of the constant c1..c5 and one, such that they give a dimensionless term inside the exponential and the log function. But cfit has a dimension of pressure. Somehow when I withdraw the 'celli' term from psat I don't have any problem, but since I need to apply the temperature condition for all control volume, I feel like I have to keep (celli) this term.

Does anybody know how to solve the problem ?

nimasam June 16, 2012 08:56

1) define Psat as volScalarField
2) if you did! , then pfit is dimensionedScalar but
pSat[celli] is Scalar so! use pfit.value() or same for cfit you can use cfit.value()

P.S:
T has dimension
T[celli] has no dimension
.value() return only value not dimension


now you should handle it ;)

bluemind June 18, 2012 04:53

Thank you nimasam for your answer,

I've tried what you said and the message error message is the same, so I added .value() to the constant c2 and c4 since they are not dimensionless :

{

forAll(psat,celli){
if (ELSATl[celli] > 200.)
{
psat[celli]=cfit.value()*exp(c1 + c2.value()/(Tl[celli] ) +c3*log(Tl[celli] ) +c4.value()*pow(Tl[celli],c5));
}
else
{
psat[celli]=0.*pfit.value();
}


}

}

The error message obtained is error: call of overloaded ‘log(double&)’ is ambiguous.

Do you have an idea of what the problem could be ?

nimasam June 18, 2012 05:26

use
Foam::log instead of log

niklas June 18, 2012 06:23

you need to put .value() on all c's. c1, c3 and c5 as well

bluemind June 18, 2012 07:33

Thanks you nimasan and niklas,

I have taken your advice and it works, this is what I wrote :

{

forAll(psat,celli){
if (ELSATl[celli] > 200.)
{
psat[celli]=cfit.value()*Foam::exp(c1.value() + c2.value()/(Tl[celli] ) +c3.value()*Foam::log(Tl[celli] ) +c4.value()*Foam::pow(Tl[celli],c5.value()));
}
else
{
psat[celli]=0.*pfit.value();
}


}

}


All times are GMT -4. The time now is 23:32.