CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Nvd / tvd (https://www.cfd-online.com/Forums/openfoam-programming-development/93193-nvd-tvd.html)

MichiB October 7, 2011 11:19

Nvd / tvd
 
Hi,

I was wondering if there is a major difference in the implementation of NVD and TVD schemes in OpenFOAM.
Am I right in the assumption that the only real difference between NVD and TVD schemes in OpenFOAM is the limiters?
Is it right that in OpenFOAM TVD schemes are actually nothing but special NVD schemes?

I'm having a hard time grasping how convection schemes are implemented in OpenFOAM, but as far as I understand the code, both NVD and TVD should work identically up to the point where phict ( \Tilde{ phi_{C} } ) is being calculated.

The reason why I'm asking this is that I'd like to know how the van Leer TVD (or is it NVD?) scheme works and effects the diagonal dominance of my matrix...

Michi

santiagomarquezd October 7, 2011 16:30

Michael take a look to the document in the following link:

https://docs.google.com/viewer?a=v&p...ht7iRTTn&hl=es

Regards.

MichiB October 10, 2011 05:39

Thank you for the nice summery, Santiago. Te lo agradezco mucho!
It seems that I was wrong and TVD schemes in OpenFOAM do calculate r and not phict as I thought before.
Regards,
Michi

f0208secretx October 30, 2015 03:07

I have a particular question about Van Leer limiter implementation in OpenFOAM 2.4.0.

I used it to limit my divergence term by the following excerpt in fvSchemes
Code:

divSchemes
{
    default            Gauss linear;
    div(phi,U)          Gauss vanLeerV 2;
    div(phi,nuTilda)    Gauss limitedLinear 1;

}

The documentation here (http://cfd.direct/openfoam/user-guide/fvschemes/) suggested that the Van Leer limiter can be strictly bounded for scalar field. However, since I used it on U, I chose the multivariate van Leer and give it sort of an arbitrary number 2. The number 2 seems to do something, since if I don't specify this number then my solution could diverge. However, if one look into the code vanLeer.H, there does not seem to be a place for this number I specified:
Code:

 
(vanLeer.H) 
    vanLeerLimiter(Istream&)
    {}


    scalar limiter
    (
        const scalar,
        const scalar faceFlux,
        const typename LimiterFunc::phiType& phiP,
        const typename LimiterFunc::phiType& phiN,
        const typename LimiterFunc::gradPhiType& gradcP,
        const typename LimiterFunc::gradPhiType& gradcN,
        const vector& d
    ) const
    {
        scalar r = LimiterFunc::r
        (
            faceFlux, phiP, phiN, gradcP, gradcN, d
        );

        return (r + mag(r))/(1 + mag(r));
    }

Specifically, the red line seemed to suggest the in stream does not do anything. Whereas if one look into limitedLinear.H
Code:

(limtedLinear.H)
    limitedLinearLimiter(Istream& is)
    :
        k_(readScalar(is))
    {
        if (k_ < 0 || k_ > 1)
        {
            FatalIOErrorIn("limitedLinearLimiter(Istream& is)", is)
                << "coefficient = " << k_
                << " should be >= 0 and <= 1"
                << exit(FatalIOError);
        }

        // Avoid the /0 when k_ = 0
        twoByk_ = 2.0/max(k_, SMALL);
    }


    scalar limiter
    (
        const scalar cdWeight,
        const scalar faceFlux,
        const typename LimiterFunc::phiType& phiP,
        const typename LimiterFunc::phiType& phiN,
        const typename LimiterFunc::gradPhiType& gradcP,
        const typename LimiterFunc::gradPhiType& gradcN,
        const vector& d
    ) const
    {
        scalar r = LimiterFunc::r
        (
            faceFlux, phiP, phiN, gradcP, gradcN, d
        );

        return max(min(twoByk_*r, 1), 0);
    }

The instream was used and a blending factor was considered (bounded between 0 and 1).

I am very confused now if van leer takes any argument and how do I specify it? Further, if I specify a strict bound, how can one choose such a number... it does not make sense to me that one could set an absolute bound before solving the system, otherwise why do you need the solver for...

f0208secretx October 31, 2015 16:12

any ideas?

davibarreira November 5, 2015 08:18

Why are you trying to bound the U (velocity)? The use of bounded values with vanLeer is usually for scalars who have limited values, such as volume fraction that has to be between 0 and 1. For vectors, you are using vanLeerV, so I would guess that it makes no sense to prescribe a limiter such as 2, and for such reason it does nothing.

wyj216 June 2, 2021 04:54

By reading the code, I have no problem to understand the implementation of TVD. However, for the NVD, e.g. Gamma scheme, it seems that the limiter for phict > 1 is not correct. When phict > 1, upwind should be used, which means the limiter should be 0. But the code would gave a limiter having value of 1. Does anyone have the same confusion?:confused:

Code:

//position: src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/Gamma/Gamma.H
scalar limiter
    (
        const scalar cdWeight,
        const scalar faceFlux,
        const typename LimiterFunc::phiType& phiP,
        const typename LimiterFunc::phiType& phiN,
        const typename LimiterFunc::gradPhiType& gradcP,
        const typename LimiterFunc::gradPhiType& gradcN,
        const vector& d
    ) const
    {
        scalar phict = LimiterFunc::phict
        (
            faceFlux, phiP, phiN, gradcP, gradcN, d
        );
 
        return min(max(phict/k_, 0), 1);
    }


s.v June 6, 2021 15:19

Hi Youjiang:

Few years ago I looked a little bit at some OpenFOAM convection schemes and I think the Gamma scheme implementation is bugged in OpenFOAM (atleast it was in the version I was using).

I do not remember all the details of my work at this point -- but I do talk about a bug in the Gamma scheme in my PhD thesis "A LARGE EDDY SIMULATION STUDY OF THE EFFECTS OF WIND AND SLOPE ON THE STRUCTURE OF A TURBULENT LINE FIRE" (it can be downloaded from here: https://drum.lib.umd.edu/handle/1903/21883) -- please see pages 31 and 32 in my thesis -- I think I am talking about the same issue that you are mentioning in your post.

There is more information about convection schemes in my thesis that you might find interesting -- for example the Gamma and the limitedLinear schemes are practically identical at lower values of k (see Figure 2.10 in my thesis), the limitedLinear scheme is incorrectly described on the NVD diagram in the OpenFOAM documentation (see Figure 2.8 in my thesis).

I am thinking maybe I should create a small post here on cfd-online and summarize my work on OpenFOAM convection schemes -- that might be useful for other OpenFOAM users. I think my thesis goes a little bit beyond this very helpful OpenFOAM based book by Moukalled et al. https://www.springer.com/gp/book/9783319168739, in terms of OpenFOAM convection schemes.

I hope it helps a little bit.

Cheers ....

wyj216 July 21, 2021 05:27

Quote:

Originally Posted by s.v (Post 805416)
Hi Youjiang:

Few years ago I looked a little bit at some OpenFOAM convection schemes and I think the Gamma scheme implementation is bugged in OpenFOAM (atleast it was in the version I was using).

I do not remember all the details of my work at this point -- but I do talk about a bug in the Gamma scheme in my PhD thesis "A LARGE EDDY SIMULATION STUDY OF THE EFFECTS OF WIND AND SLOPE ON THE STRUCTURE OF A TURBULENT LINE FIRE" (it can be downloaded from here: https://drum.lib.umd.edu/handle/1903/21883) -- please see pages 31 and 32 in my thesis -- I think I am talking about the same issue that you are mentioning in your post.

There is more information about convection schemes in my thesis that you might find interesting -- for example the Gamma and the limitedLinear schemes are practically identical at lower values of k (see Figure 2.10 in my thesis), the limitedLinear scheme is incorrectly described on the NVD diagram in the OpenFOAM documentation (see Figure 2.8 in my thesis).

I am thinking maybe I should create a small post here on cfd-online and summarize my work on OpenFOAM convection schemes -- that might be useful for other OpenFOAM users. I think my thesis goes a little bit beyond this very helpful OpenFOAM based book by Moukalled et al. https://www.springer.com/gp/book/9783319168739, in terms of OpenFOAM convection schemes.

I hope it helps a little bit.

Cheers ....

Thanks for your reply, salman, I would have a look at your thesis. It seems that it will help a lot.


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