CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   meaning of HbyA (http://www.cfd-online.com/Forums/openfoam-programming-development/118928-meaning-hbya.html)

Tobi June 6, 2013 14:14

meaning of HbyA
 
Hi all,

I am not clear about the variable HbyA
Code:

volVectorField HbyA("HbyA", U);
HbyA = rAU*UEqn().H();

Can someone tell me what that variable is for?

In the 1.6-ext version I found the same declaration:
Code:

U = rUA*UEqn().h();
So I think its the same, but why the different names?

Thanks in advance
Tobi

Cyp June 6, 2013 16:07

Dear Toby,

As you noticed, both lines are similiar. Actually, the notation HbyA has been spread over all the solvers since the latest OF version (OF 2.2.0) for a sake of clarity.

Keep in mind that for the computation of Naviers-Stokes equation, OF uses either PISO or SIMPLE algorithms. The semi-discretized form of the momentum is :

a_{P} \textbf{U}_{P} = \textbf{H}(\textbf{U}) - \nabla p

where a_{P} is the diagonal coefficients of the matrix resulting from the discretization of the momentum equation. \textbf{H}(\textbf{U}) stands for the non-diagonal coefficient (mainly composed by convective and diffusive terms) and the source terms (the source part of the transient term and other source that appear in UEqn) apart from the pressure gradient.

Once this equation has been implicitly solved (the momentum predictor step), the predicted velocity does not satisfy the continuity equation. Moreover, in the previous equation, the pressure field result from the previous time step. Therefore, we are looking for (U,p) that obeys

\textbf{U}_{P} = \frac{\textbf{H}(\textbf{U})}{a_{P} } - \frac{1}{a_{P} } \nabla p
and
\nabla \cdot \textbf{U}_{P} = 0

Assembling this two equations, you can form the pressure equation:
\nabla \cdot \left( \frac{1}{a_{P}}\nabla p \right) = \nabla \cdot \left(\frac{\textbf{H}(\textbf{U})}{a_{P} }   \right)

and then you reconstruct the velocity with:
\textbf{U}_{P} = \frac{\textbf{H}(\textbf{U})}{a_{P} } - \frac{1}{a_{P} } \nabla p

You clearly remark in this procedure that you use H divided by A or.. HbyA ;-)


PS: in OF, rAU is the notation for the diagonal coeff of the matrix

Best regards,
Cyp

Cyp June 6, 2013 16:23

I made slides some times ago to explain the PISO loops in OpenFOAM : http://fr.scribd.com/doc/143414962/P...on-in-OpenFOAM

They are in French but understandable. It uses old OpenFOAM version, that means without the HbyA notation.

sharonyue July 5, 2013 02:45

Quote:

Originally Posted by Cyp (Post 432521)

Assembling this two equations, you can form the pressure equation:
\nabla \cdot \left( \frac{1}{a_{P}}\nabla p \right) = \nabla \cdot \left(\frac{\textbf{H}(\textbf{U})}{a_{P} }   \right)

Best regards,
Cyp

Hi, about this, why it is not
Code:

fvScalarMatrix pEqn
                (
                    fvm::laplacian(rAU, p) == fvc::div(rAU&HbyA)
                );

Thanks in advance.

Tobi July 5, 2013 06:24

Hi all,

as I understand from Cyp 's comment:

\frac{\bf{H}(U)}{a_P} = \text{HbyA}

So your last line should be:

Code:

fvScalarMatrix pEqn
                (
                    xxx == fvc::div(HbyA)
                );

I am not able to have a look into the code at the moment.

Cyp November 15, 2013 16:30

the same doc, in English with OF2.2

http://www.scribd.com/doc/181588911/...ion-of-icoFoam

pixarzhang December 24, 2013 03:41

thx
 
Quote:

Originally Posted by Cyp (Post 462156)
the same doc, in English with OF2.2

http://www.scribd.com/doc/181588911/...ion-of-icoFoam

it's very clear for me

ooo March 14, 2014 16:26

1 Attachment(s)
Dear Guys,

I'm using the 3step runge-kutta scheme to solve Navier Stokes equation.
There are some differences in the equations must be solved, but the main equations are same.you can see the equations in the attachment(those equations are put in a for loop, from k=1 to k=3)
Also, below you can see my summarized code to solve that, but i don't know how to use coefficients(same as piso loop of icoFoam) !
I would appreciate any idea on how to change my code to something like the piso loop of icoFoam :

Code:

while (runTime.loop())
{
for (int i = 1 ;  i<=3 ; ++i)
{
U = U + runTime.deltaT() *
        (
        + 2*alpha*fvc::laplacian(nu,U)
        - 2*alpha*fvc::grad(p)
        - gamma*fvc::div(phi, U)
        - zeta*fvc::div(phiOld2, UOld2)
        );

      solve(alpha*runTime.deltaT()*fvm::laplacian(nu,Unew) - fvm::Sp(1.,Unew)  == //(alpha*runTime.deltaT())  ==
      (-1.)*(U) + alpha*runTime.deltaT()*fvc::laplacian(nu,U) );

      solve (fvm::laplacian(pPhi) == fvc::div(U)/(2.*alpha*runTime.deltaT()));// pPhi is a pseudo pressure without physical meaning

      U =  Unew - (2.*alpha*runTime.deltaT()*fvc::grad(pPhi));
      p += pPhi - alpha*runTime.deltaT()*nu*(fvc::laplacian(pPhi));

      adjustPhi(phi, U, p);
      U.correctBoundaryConditions();
}
} //alpha,gamma and zeta change in each of those 3 steps



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