# How to calculate Cp (Heat Capacity at Constant Pressure) ?

 Register Blogs Members List Search Today's Posts Mark Forums Read

May 30, 2011, 06:01
How to calculate Cp (Heat Capacity at Constant Pressure) ?
#1
New Member

Gian Maria Di Stefano
Join Date: Jan 2011
Location: University of Applied Science Manno (CH)
Posts: 10
Rep Power: 13
Hi foamers,

I'm trying to improve a new solver in OpenFOAM, but I have some problems.
I need to calculate Cp (Heat Capacity at Constant Pressure), and I must add it in the standard solver "rhoPorousSimpleFoam".

I tried to add a line in "createFields.H", but it doesn't work.

Quote:
 // these lines are already present autoPtr pThermo ( basicPsiThermo::New(mesh) ); basicPsiThermo& thermo = pThermo(); volScalarField& p = thermo.p(); volScalarField& h = thermo.h(); const volScalarField& psi = thermo.psi(); // this is my add volScalarField& Cp = thermo.Cp();
In "basicPsiThermo" Cp is called with "T" and "patchi" as arguments. Must I do the same?

Or can I load properties of air by an external file?

 May 30, 2011, 07:20 #2 Senior Member   Laurence R. McGlashan Join Date: Mar 2009 Posts: 370 Rep Power: 20 What does the error say? Is it a compiler error or a runtime error? You will probably find the mistake is in the type you have given for the variable Cp. Check it against the return type of Cp in basicThermo. __________________ Laurence R. McGlashan :: Website

May 31, 2011, 10:09
#3
New Member

Gian Maria Di Stefano
Join Date: Jan 2011
Location: University of Applied Science Manno (CH)
Posts: 10
Rep Power: 13

So, I will explain you what is my problem.

I want to create a new solutor, and I need for my calculations some variables:
- enthalpy
- pressure
- heat costant Cp
- rho

But whenever h, p and rho are already gived, I must find the way to calculate Cp.

Quote:
 Info<< "Reading thermophysical properties\n" << endl; autoPtr pThermo ( basicPsiThermo::New(mesh) ); basicPsiThermo& thermo = pThermo(); volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), thermo.rho() ); volScalarField& p = thermo.p(); volScalarField& h = thermo.h(); const volScalarField& psi = thermo.psi();
so I tried to load Cp value using the same templates:

Quote:
 volScalarField& Cp = thermo.Cp();
But when I try to compile I have this error:

Quote:
 createFields.H:27: error: invalid initialization of non-const reference of type ‘Foam::volScalarField&’ from a temporary of type ‘Foam::tmp >’
Why compare this error?
How can I move to correct it?

PS: if I check in "basicPsiThermo" file, I find this

Quote:
 // Fields derived from thermodynamic state variables //- Temperature [K] virtual const volScalarField& T() const; //- Heat capacity at constant pressure for patch [J/kg/K] virtual tmp Cp ( const scalarField& T, const label patchi ) const;
Can anyone explain me how to use this information, plese?

 May 31, 2011, 10:45 #4 Senior Member   Laurence R. McGlashan Join Date: Mar 2009 Posts: 370 Rep Power: 20 In short: Change 'volScalarField& Cp = thermo.Cp()' to 'volScalarField Cp = thermo.Cp();' __________________ Laurence R. McGlashan :: Website

 May 13, 2019, 08:15 #5 Senior Member   A. Min Join Date: Mar 2015 Posts: 302 Rep Power: 9 Hi foamers, Why does cp(p,T) function return zero for ideal gas? How can I calculate it for other equation of states? Thanks

November 10, 2021, 12:53
Cp=Cp.Janaf+Cp.EOS
#6
New Member

Join Date: May 2020
Posts: 4
Rep Power: 3
Quote:
 Originally Posted by alimea Hi foamers, Why does cp(p,T) function return zero for ideal gas? How can I calculate it for other equation of states? Thanks
Hey, Cp=Cp.Janaf+Cp.EOS. It includes two parts: one is calculated using the Janaf relationship and the other one is calculated using the EOS. For ideal gas equation, the EOS part is zero. But when you are using the real-gas EOS, it is not zero and there is a departure function from the reference state.