CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Verification & Validation (https://www.cfd-online.com/Forums/openfoam-verification-validation/)
-   -   rhoCentralFoam: Diffusion correction scheme? (https://www.cfd-online.com/Forums/openfoam-verification-validation/172417-rhocentralfoam-diffusion-correction-scheme.html)

schuyler May 30, 2016 17:35

rhoCentralFoam: Diffusion correction scheme?
 
Can someone please direct me to a good literature resource on diffusion correction predictor corrector scheme? I am having difficulty with understanding the one implemented in rhoCentralFoam.

I am doing extensive analysis using OpenFOAM, and rhoCentralFOAM in my research. Some of this analysis requires post-processing the transport equations themselves (the details of why are not important for my inquiry). This means regenerating the equations used by the solver. I am having some trouble understanding the implementation.

When I compare the corrector equation (below) to the equation from Greenshields:

Quote:

solve
(
fvm::ddt(rho, U) - fvc::ddt(rho, U)
- fvm::laplacian(muEff, U)
- fvc::div(tauMC)
);

I can't see how this matches the actual equation. In the Greenshields paper ((Link to paper), Equation 19 does not indicate to me a need for both the implicit AND explicit ddt(rho,U) terms.

Similarly in the energy equation, both an implicit and explicit term are included.

Some explanation from those wiser than I would be hugely appreciated.

Schuyler

usv001 November 18, 2016 23:41

Hi there,

The 'fvc::ddt(rho,U)' implicit term is the remnant of the predictor step. This is how I understand it.

The predictor step solves for:
Code:

fvm::ddt(rhoU) + fvc::div(phiUp) == 0
So, the results from this step correspond to the following with an updated U from the predictor step:
Code:

- fvc::ddt(rho*U) = fvc::div(phiUp)
Now, they are reintroducing the flux term 'fvc::div(phiUp)' through an updated '- fvc::ddt(rho*U)'. So, when you combine the predictor and corrector steps, you get the correct equation, which should be the case.

Please correct me if I'm wrong, though.

USV

schuyler November 19, 2016 12:58

Completely forgot about this post!

Thanks for the reply! Yeah I figured this out while studying for my PhD candidacy exam.

The predictor is:

Code:

solve(fvm::ddt(rhoU) + fvc::div(phiUp));
(viscous term omitted)

Then the corrector is:

Code:

            solve
            (
                fvm::ddt(rho, U) - fvc::ddt(rho, U)
              - fvm::laplacian(muEff, U)
              - fvc::div(tauMC)
            );

The corrector equation is the complete momentum equation. But instead of calculating the flux and the pressure gradient explicitly, they calculate: -fvc::ddt(rho, U) - fvm::laplacian(muEff, U) which is equivalent to div(phiUp) - using the predicted velocity field. Therefore the Navier-Stokes are recovered.


Schuyler

usv001 November 19, 2016 21:22

No problem.

Do you happen to know why they include the viscous term sigmaDotU in the predictor step of the energy equation? Isn't this supposed to be the inviscid predictor step? I am not able yo reconcile the fact that they are interpolating the U in this term using:
Code:

a_pos*U_pos + a_neg*U_neg
where a_pos and a_neg are calculated based on the eigenvalues of the Euler equations (U+c, U-c).

I was able to follow the calculation of phi, phiUp and phiEp as the implementation of the Kurganov flux scheme but this little piece above threw me off. I think I'm missing something important here.

USV

schuyler November 20, 2016 18:57

Quote:

Originally Posted by usv001 (Post 626022)
No problem.

Do you happen to know why they include the viscous term sigmaDotU in the predictor step of the energy equation? Isn't this supposed to be the inviscid predictor step? I am not able yo reconcile the fact that they are interpolating the U in this term using:
Code:

a_pos*U_pos + a_neg*U_neg
where a_pos and a_neg are calculated based on the eigenvalues of the Euler equations (U+c, U-c).

I was able to follow the calculation of phi, phiUp and phiEp as the implementation of the Kurganov flux scheme but this little piece above threw me off. I think I'm missing something important here.

USV

Good question. I think it is because it is a "diffusion correction scheme". The sigmadotU term (while it is a viscous term) is not a diffusive term in the energy equation it's a work term.

I'm not sure if I totally understand the other part of the question... but the a_pos and a_neg are the flux weighting factors calculated by Equation 9 in the rhoCentralFoam paper (linked in my original post).

Hopefully I was helpful.

Schuyler

usv001 November 22, 2016 04:05

Thanks Schuyler.

This has given me a new way of thinking about it.

USV


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