CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Programming & Development

varying cp with temperature .

Register Blogs Community New Posts Updated Threads Search

Like Tree1Likes

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   February 7, 2011, 05:50
Default varying cp with temperature .
  #1
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
In the buoyantBousinessqSimpleFoam solver i want to vary my Cp with temperature . How should i write the program for this ?
balkrishna is offline   Reply With Quote

Old   February 8, 2011, 06:08
Default
  #2
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
As a start , lets say i want to vary Cp in the following manner :
Cp = C*tanh(mT) ;

I write the program in the following manner :
Code:
Info<<" Reading field Cp "<<endl ;
    volScalarField Cp
    (
        IOobject
        (
            "Cp",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );

Info<<" Reading field C "<<endl ;
    volScalarField C
    (
        IOobject
        (
            "C",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );
and in readTransportProperties.H
Code:
dimensionedScalar m (laminarTransport.lookup("m"));
m will have dimensions of [ 0 0 0 -1 0 0 0]
In TEqn.H i have the added a source term . and hence need Cp . I add it in the following manner .
Code:
Cp = C*tanh(mT);
followed by the temperature equation .
This compiles fine but when i run the program i get the following error :
Code:
--> FOAM FATAL ERROR: 
Argument of trancendental function not dimensionless

    From function trans(const dimensionSet& ds)
    in file dimensionSet/dimensionSet.C at line 370.
Does any1 have a clue to solve this ???
balkrishna is offline   Reply With Quote

Old   February 8, 2011, 12:25
Default
  #3
Member
 
MSR CHANDRA MURTHY
Join Date: Mar 2009
Posts: 33
Rep Power: 17
chandramurthy is on a distinguished road
i think, this is something to do with dimensional consistency for LHS and RHS. From the error message it may said that the term "C*tanh(mT)" should have the units of cp.

An alternative way is use JANAF tables.
chandramurthy is offline   Reply With Quote

Old   February 8, 2011, 17:24
Default
  #4
Senior Member
 
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,267
Blog Entries: 1
Rep Power: 25
nimasam is on a distinguished road
1) you can use thermodynamic table which is implemented in open foam
2) but whats the dimension of c and cp, does they have the same dimensions?
if yes,
try it
forAll (C,celli)
{cp[celli]=c[celli]*tanh(m*T[celli])
}
or
define m as dimless and use T.value() to get just the value of it
nimasam is offline   Reply With Quote

Old   February 8, 2011, 22:09
Default
  #5
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
@chandramurthy : C has the dimensions of Cp and m*T is dimensionless. .... m has dimensions of [ 0 0 0 -1 0 0 0 ] while T has that of [0 0 0 1 0 0 0].... The error says that m*T is not dimensionless .... which is not very clear to me ...
balkrishna is offline   Reply With Quote

Old   February 8, 2011, 22:19
Default
  #6
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
@nimasam : C and Cp have the same dimensions . regarding the loop you have suggested when i declare C and Cp as volScalarFields and simply do Cp = C*tanh(m*T) shouldnt it be executed on all cells ?
balkrishna is offline   Reply With Quote

Old   February 8, 2011, 22:50
Default
  #7
Senior Member
 
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,267
Blog Entries: 1
Rep Power: 25
nimasam is on a distinguished road
u are right, every thing seems correct! but those two suggested methods were to insure that variable are dimensionless
nimasam is offline   Reply With Quote

Old   February 9, 2011, 00:02
Default
  #8
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
@nimasam I get the following error for the first one :
error: ‘struct Foam::volScalarField’ has no member named ‘value’

for the second one :
error: cannot convert ‘Foam::dimensioned<double>’ to ‘double’ in assignment
balkrishna is offline   Reply With Quote

Old   February 9, 2011, 02:01
Default
  #9
Senior Member
 
Alberto Passalacqua
Join Date: Mar 2009
Location: Ames, Iowa, United States
Posts: 1,912
Rep Power: 36
alberto will become famous soon enoughalberto will become famous soon enough
Hi,

value() is a method for scalars, not for volScalarFields. You have to loop over cells to use it.

Did you check mT is actually dimensionless (you did not say how you define it in the code).

Best,
__________________
Alberto Passalacqua

GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541)
OpenQBMM - An open-source implementation of quadrature-based moment methods.

To obtain more accurate answers, please specify the version of OpenFOAM you are using.
alberto is offline   Reply With Quote

Old   February 9, 2011, 05:13
Default
  #10
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
@alberto i define m in transportProperties in the following manner :
Code:
m                 m [0 0 0 -1 0 0 0] 0.2;
to read m i define it in readTransportProperties.H
as
Code:
dimensionedScalar m (laminarTransport.lookup("m"));
and T is temperature i.e. [0 0 0 1 0 0 0] . I loop over cells in the above mentioned manner and i got the following error :
Code:
error: cannot convert ‘Foam::dimensioned<double>’ to ‘double’ in assignment
basically that means i cant declare m in readTransportProperties.H . Then what is the workaround ?
balkrishna is offline   Reply With Quote

Old   February 9, 2011, 05:21
Default
  #11
Senior Member
 
Alberto Passalacqua
Join Date: Mar 2009
Location: Ames, Iowa, United States
Posts: 1,912
Rep Power: 36
alberto will become famous soon enoughalberto will become famous soon enough
Use

m.value()

However it should really work with fields without looping.

Best,
__________________
Alberto Passalacqua

GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541)
OpenQBMM - An open-source implementation of quadrature-based moment methods.

To obtain more accurate answers, please specify the version of OpenFOAM you are using.
alberto is offline   Reply With Quote

Old   February 9, 2011, 05:32
Default about janafthermo
  #12
New Member
 
karthik
Join Date: Dec 2010
Location: munich
Posts: 16
Rep Power: 16
karthik1414 is on a distinguished road
Quote:
Originally Posted by chandramurthy View Post
i think, this is something to do with dimensional consistency for LHS and RHS. From the error message it may said that the term "C*tanh(mT)" should have the units of cp.

An alternative way is use JANAF tables.
hello,
i am very new to openfoam, is it possible to use janafthermo.H while using the interfoam solver?? basically i want to vary Cp and density with temperature and pressure in a 2 phase incompressible vof problem.
Please help me out in this matter.
regards,
karthik
karthik1414 is offline   Reply With Quote

Old   February 9, 2011, 05:43
Default
  #13
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
that gives the following error :
Code:
error: call of overloaded ‘tanh(double)’ is ambiguous
balkrishna is offline   Reply With Quote

Old   February 9, 2011, 06:05
Default
  #14
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
problem solved . Thanks everyone . I was including the variation in a header file . Once this was removed and added it in TEqn.H ... it worked ... thanks a lot for your help .
balkrishna is offline   Reply With Quote

Old   February 9, 2011, 06:12
Default ambiguous
  #15
Senior Member
 
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,267
Blog Entries: 1
Rep Power: 25
nimasam is on a distinguished road
Quote:
Originally Posted by balkrishna View Post
that gives the following error :
Code:
error: call of overloaded ‘tanh(double)’ is ambiguous
i know ur problem get solve but for who to seek answer for this problem:

use Foam::tanh(....) instead of tanh() , it will cure the pain
nimasam is offline   Reply With Quote

Old   February 10, 2011, 08:10
Default
  #16
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
In case of varying Cp with temperature , i wish to vary it conditionally .
What i mean is :
for T < Tvalue
Cp = f(T) ;
for T >= Tvalue
Cp = g(T) ;

in such a case i am not able to use the standard operators like >= or > or <
My code is as follows:
Code:
forAll(T,celli)
      {
        if ( T[celli] >= Tleft && T[celli] <= Tmid)
          {
            Cp[celli] = 1000*41.2/50.0 * (T[celli] - Tleft) +   cpConstant;
          }
        else if ( T[celli] > Tmid && T[celli] <= Tright )
          {
            Cp[celli] = -1000*41.2/50 * ( T[celli] - Tright ) + cpConstant;
          }
      }
I get the following error :
Code:
TEqn.H: In function ‘int main(int, char**)’:
TEqn.H:23: error: no match for ‘operator>=’ in ‘T.Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::<anonymous>.Foam::DimensionedField<double, Foam::volMesh>::<anonymous>.Foam::Field<double>::<anonymous>.Foam::List<double>::<anonymous>.Foam::UList<T>::operator[] [with T = double](celli) >= Tleft’
TEqn.H:23: error: no match for ‘operator<=’ in ‘T.Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::<anonymous>.Foam::DimensionedField<double, Foam::volMesh>::<anonymous>.Foam::Field<double>::<anonymous>.Foam::List<double>::<anonymous>.Foam::UList<T>::operator[] [with T = double](celli) <= Tmid’
TEqn.H:25: error: cannot convert ‘Foam::dimensioned<double>’ to ‘double’ in assignment
TEqn.H:27: error: no match for ‘operator>’ in ‘T.Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::<anonymous>.Foam::DimensionedField<double, Foam::volMesh>::<anonymous>.Foam::Field<double>::<anonymous>.Foam::List<double>::<anonymous>.Foam::UList<T>::operator[] [with T = double](celli) > Tmid’
TEqn.H:27: error: no match for ‘operator<=’ in ‘T.Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::<anonymous>.Foam::DimensionedField<double, Foam::volMesh>::<anonymous>.Foam::Field<double>::<anonymous>.Foam::List<double>::<anonymous>.Foam::UList<T>::operator[] [with T = double](celli) <= Tright’
TEqn.H:29: error: cannot convert ‘Foam::dimensioned<double>’ to ‘double’ in assignment
/home/ifmg/OpenFOAM/OpenFOAM-1.7.0/src/finiteVolume/lnInclude/readSIMPLEControls.H:9: warning: unused variable ‘transonic’
make: *** [Make/linux64GccDPOpt/buoyantBoussinesqSimpleFoam.o] Error 1
In the above case , Tmid , Tleft , Tright are dimensionedScalars defined in the following manner :
Code:
In readTransportProperties.H
dimensionedScalar  Tleft (laminarTransport.lookup("Tleft"));
dimensionedScalar   Tright (laminarTransport.lookup("Tright"));
dimensionedScalar   Tmid (laminarTransport.lookup("Tmid"));
How should i use the conditional operators in this case ?
mgg likes this.
balkrishna is offline   Reply With Quote

Old   February 10, 2011, 08:29
Default
  #17
Senior Member
 
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,267
Blog Entries: 1
Rep Power: 25
nimasam is on a distinguished road
dear friend you can not assign a dimension Scalar to a scalar so use value()

Tleft.value() and so on
nimasam is offline   Reply With Quote

Old   February 10, 2011, 08:44
Default
  #18
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
thanks ,

that was a lesson learnt ....
balkrishna is offline   Reply With Quote

Old   February 22, 2011, 06:07
Default
  #19
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
I am solving a heat transfer problem with water as fluid . So far I am using the buoyantBousinessqSimpleFoam solver . This solver however has the temperature formulation instead of the enthalpy formulation for the energy equation . That is correct considering that Cp and rho are assumed to be constant . I wish to formulate the energy equation using enthalpy . Can any of the already available solvers do this ? I went through the tutorials of solvers which are present in OF170 , what i found was that all of them used the working substance as air , assuming it as a perfectGas . This was declared in constant/thermophysicalProperties as :
Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  1.7.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      thermophysicalProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

thermoType      hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>;

mixture         air 1 28.96 1004.4 0 1.831e-05 0.705;

// ************************************************************************* //
How do i use solvers like buoyantPimpleFoam for water ?
balkrishna is offline   Reply With Quote

Old   February 22, 2011, 08:24
Default
  #20
Senior Member
 
Balkrishna Patankar
Join Date: Mar 2009
Location: Pune
Posts: 123
Rep Power: 17
balkrishna is on a distinguished road
When i rewrite the enthalpy equation as :
Code:
fvScalarMatrix hEqn
          (
           fvm::ddt(rho, h)
           + fvm::div(phi, h)
           ==
            fvm::laplacian(k,T)
           + DpDt + heatSource
           );
//In the above , k is thermal conductivity , T is temperature , h is enthalpy .
I get the following error :
Code:
incompatible fields for operation 
    [h] == [T]

    From function checkMethod(const fvMatrix<Type>&, const fvMatrix<Type>&)
    in file /home/ifmg/OpenFOAM/OpenFOAM-1.7.0/src/finiteVolume/lnInclude/fvMatrix.C at line 1181.
How to overcome it ?

Last edited by balkrishna; February 22, 2011 at 08:45. Reason: concluding line
balkrishna is offline   Reply With Quote

Reply

Tags
density, property, specific heat, temperature


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem with zeroGradient wall BC for temperature - Total temperature loss cboss OpenFOAM 12 October 1, 2018 07:36
Calculation of the Governing Equations Mihail CFX 7 September 7, 2014 07:27
monitoring point of total temperature rogbrito FLUENT 0 June 21, 2009 18:31
udf for varying inlet temperature aravind FLUENT 0 October 27, 2008 11:08
chemical reaction - decompostition La S. Hyuck CFX 1 May 23, 2001 01:07


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