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

Different define of psi uesd in pEqn.H

Register Blogs Community New Posts Updated Threads Search

Like Tree1Likes
  • 1 Post By zqlhzx

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   December 24, 2013, 08:45
Default Different define of psi uesd in pEqn.H
  #1
Member
 
赵庆良
Join Date: Aug 2013
Posts: 56
Rep Power: 12
zqlhzx is on a distinguished road
Hi foamers,
I found a strange problem with the two difference define of psi in createField.H.
one is
Code:
const volScalarField& psi=thermo.psi();
another one is
Code:
const volScalarField psi 
    ( 
        IOobject 
        ( 
            "psi", 
            runTime.timeName(), 
            mesh, 
            IOobject::NO_READ, 
            IOobject::NO_WRITE 
        ), 
        thermo.psi() 
    );
If I use the first one :"const volScalarField& psi=thermo.psi();",then I run my case,it gave me error and just gave me the available volScalarField :
Quote:
FOAM FATAL ERROR:

request for volScalarField psi from objectRegistry region0 failed
available objects of type volScalarField are

57
(
ignite
thermo:mu
thermosi
N2
K
fvar_0
CH2CO
K_0
C2H4
C3H8
alphaLam
rho
C2H6
CO2
Dt
C2H2
CH3COCH3
H2O2
O2
sqrt(((2*symm(grad(U)))&&symm(grad(U))))
p_rgh
H2
(1|A(U))
fmix_0
dpdt
gh
fort_0
delta
CH4
ha
thermosi_0
.......... and so on (I just list some available volScalarField)
)
Dose it mean that volScalarField psi is need and I have not define?
So ,I define psi using the latter way:
Code:
const volScalarField psi 
    ( 
        IOobject 
        ( 
            "psi", 
            runTime.timeName(), 
            mesh, 
            IOobject::NO_READ, 
            IOobject::NO_WRITE 
        ), 
        thermo.psi() 
    );
then I run my case ,there is no error and my case can be run.However,I found sovles in OF define psi as the first way:"const volScalarField& psi=thermo.psi();".
For the error,I found it appears when my case run at the location where I use red words in the following pEqn.H.(I use OF2.2.2 )
Code:
{ 
 rho = thermo.rho(); 
    //psi = thermo.psi(); 
    // Thermodynamic density needs to be updated by psi*d(p) after the 
    // pressure solution - done in 2 parts. Part 1: 
 thermo.rho() = thermo.rho()-psi*p_rgh; 
    volScalarField rAU(1.0/UEqn.A()); 
    surfaceScalarField rhorAUf("Dp", fvc::interpolate(rho*rAU)); 
    volVectorField HbyA("HbyA", U); 
    HbyA = rAU*UEqn.H(); 
    surfaceScalarField phig(-rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf()); 
    surfaceScalarField phiHbyA 
    ( 
        "phiHbyA", 
        fvc::interpolate(rho) 
       *( 
            (fvc::interpolate(U) & mesh.Sf()) 
          + fvc::ddtPhiCorr(rAU, rho, U, phi) 
        ) 
      + phig 
    ); 
    fvOptions.relativeFlux(fvc::interpolate(rho), phiHbyA); 
 
    fvScalarMatrix p_rghDDtEqn 
    ( 
        fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh)) 
      + fvc::div(phiHbyA) 
      == 
        fvOptions(psi, p_rgh, rho.name()) 
    ); 
 
    while (pimple.correctNonOrthogonal()) 
    { 
        fvScalarMatrix p_rghEqn 
        ( 
            p_rghDDtEqn 
          - fvm::laplacian(rhorAUf, p_rgh) 
        ); 
 
        fvOptions.constrain(p_rghEqn); 
 
        p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter()))); 
 
        if (pimple.finalNonOrthogonalIter()) 
        { 
            // Calculate the conservative fluxes 
            phi = phiHbyA + p_rghEqn.flux(); 
 
            // Explicitly relax pressure for momentum corrector 
            p_rgh.relax(); 
 
            // Correct the momentum source with the pressure gradient flux 
            // calculated from the relaxed pressure 
            U = HbyA + rAU*fvc::reconstruct((phig + p_rghEqn.flux())/rhorAUf); 
            U.correctBoundaryConditions(); 
            fvOptions.correct(U); 
            K = 0.5*magSqr(U); 
        } 
    } 
    p = p_rgh + rho*gh; 
    // Second part of thermodynamic density update 
    thermo.rho() = thermo.rho()+psi*p_rgh; 
    if (thermo.dpdt()) 
    { 
        dpdt = fvc::ddt(p); 
    } 
    #include "rhoEqn.H" 
    #include "compressibleContinuityErrs.H" 
}
I think psi can not work at the pressure equations.But it is so strange why it did not work when I use the first way to define psi and it works when I use the latter way?
Does some one can help to explain the problem?And how can I use the first way to define psi?Because OF use the first way to define psi,I also want to do like that.
Thanks in advance!
charmc likes this.
zqlhzx is offline   Reply With Quote

Reply


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
HELP----Surface Reaction UDF Ashi Fluent UDF and Scheme Programming 1 May 19, 2020 21:13
Installing OF 1.6 on Mac OS X gschaider OpenFOAM Installation 129 June 19, 2010 09:23
Missing math.h header Travis FLUENT 4 January 15, 2009 11:48
Free surface boudary conditions with SOLA-VOF Fan Main CFD Forum 10 September 9, 2006 12:24
UDF FOR UNSTEADY TIME STEP mayur FLUENT 3 August 9, 2006 10:19


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