Foam::tmp<Foam::volVectorField> Foam::fv::cellLimitedGrad<Foam::scalar>::calcGrad ( const volScalarField& vsf, const word& name ) const { const fvMesh& mesh = vsf.mesh(); tmp<volVectorField> tGrad = basicGradScheme_().calcGrad(vsf, name); if (k_ < SMALL) { return tGrad; } volVectorField& g = tGrad(); const labelUList& owner = mesh.owner(); const labelUList& neighbour = mesh.neighbour(); const volVectorField& C = mesh.C(); const surfaceVectorField& Cf = mesh.Cf(); scalarField maxVsf(vsf.internalField()); scalarField minVsf(vsf.internalField()); forAll(owner, facei) { label own = owner[facei]; label nei = neighbour[facei]; scalar vsfOwn = vsf[own]; scalar vsfNei = vsf[nei]; maxVsf[own] = max(maxVsf[own], vsfNei); minVsf[own] = min(minVsf[own], vsfNei); maxVsf[nei] = max(maxVsf[nei], vsfOwn); minVsf[nei] = min(minVsf[nei], vsfOwn); }
tmp<volVectorField> cellMDLimitedGrad<scalar>::grad ( const volScalarField& vsf ) const { const fvMesh& mesh = vsf.mesh(); tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf); if (k_ < SMALL) { return tGrad; } volVectorField& g = tGrad(); const unallocLabelList& owner = mesh.owner(); const unallocLabelList& neighbour = mesh.neighbour(); const volVectorField& C = mesh.C(); const surfaceVectorField& Cf = mesh.Cf(); scalarField maxVsf(vsf.internalField()); scalarField minVsf(vsf.internalField()); forAll(owner, facei) { label own = owner[facei]; label nei = neighbour[facei]; scalar vsfOwn = vsf[own]; scalar vsfNei = vsf[nei]; maxVsf[own] = max(maxVsf[own], vsfNei); minVsf[own] = min(minVsf[own], vsfNei); maxVsf[nei] = max(maxVsf[nei], vsfOwn); minVsf[nei] = min(minVsf[nei], vsfOwn); }