mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: finiteArea: enable cache-gradient mechanism
This commit is contained in:
committed by
Andrew Heather
parent
528c5ed8eb
commit
188c303a27
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -31,6 +32,7 @@ License
|
|||||||
#include "facEdgeIntegrate.H"
|
#include "facEdgeIntegrate.H"
|
||||||
#include "faMesh.H"
|
#include "faMesh.H"
|
||||||
#include "faGradScheme.H"
|
#include "faGradScheme.H"
|
||||||
|
#include "gaussFaGrad.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -57,20 +59,10 @@ grad
|
|||||||
const GeometricField<Type, faePatchField, edgeMesh>& ssf
|
const GeometricField<Type, faePatchField, edgeMesh>& ssf
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const areaVectorField &n = ssf.mesh().faceAreaNormals();
|
return fa::gaussGrad<Type>::gradf(ssf, "grad(" + ssf.name() + ')');
|
||||||
typedef typename outerProduct<vector,Type>::type GradType;
|
|
||||||
|
|
||||||
tmp<GeometricField<GradType, faPatchField, areaMesh>> tgGrad =
|
|
||||||
fac::edgeIntegrate(ssf.mesh().Sf()*ssf);
|
|
||||||
|
|
||||||
GeometricField<GradType, faPatchField, areaMesh>& gGrad = tgGrad.ref();
|
|
||||||
|
|
||||||
gGrad -= n*(n & gGrad);
|
|
||||||
gGrad.correctBoundaryConditions();
|
|
||||||
|
|
||||||
return tgGrad;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
tmp
|
tmp
|
||||||
<
|
<
|
||||||
@ -108,22 +100,11 @@ grad
|
|||||||
const word& name
|
const word& name
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const areaVectorField &n = vf.mesh().faceAreaNormals();
|
return fa::gradScheme<Type>::New
|
||||||
typedef typename outerProduct<vector,Type>::type GradType;
|
(
|
||||||
|
vf.mesh(),
|
||||||
tmp<GeometricField<GradType, faPatchField, areaMesh>> tgGrad =
|
vf.mesh().gradScheme(name)
|
||||||
fa::gradScheme<Type>::New
|
)().grad(vf, name);
|
||||||
(
|
|
||||||
vf.mesh(),
|
|
||||||
vf.mesh().gradScheme(name)
|
|
||||||
).ref().grad(vf);
|
|
||||||
|
|
||||||
GeometricField<GradType, faPatchField, areaMesh>& gGrad = tgGrad.ref();
|
|
||||||
|
|
||||||
gGrad -= n*(n & gGrad);
|
|
||||||
gGrad.correctBoundaryConditions();
|
|
||||||
|
|
||||||
return tgGrad;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
Copyright (C) 2019-2021 OpenCFD Ltd.
|
Copyright (C) 2019-2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -28,6 +28,8 @@ License
|
|||||||
|
|
||||||
#include "fa.H"
|
#include "fa.H"
|
||||||
#include "HashTable.H"
|
#include "HashTable.H"
|
||||||
|
#include "objectRegistry.H"
|
||||||
|
#include "solution.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -83,11 +85,112 @@ tmp<gradScheme<Type>> gradScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
gradScheme<Type>::~gradScheme()
|
tmp
|
||||||
{}
|
<
|
||||||
|
GeometricField
|
||||||
|
<
|
||||||
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
typedef GeometricField<GradType, faPatchField, areaMesh> GradFieldType;
|
||||||
|
|
||||||
|
GradFieldType* pgGrad =
|
||||||
|
mesh().thisDb().template getObjectPtr<GradFieldType>(name);
|
||||||
|
|
||||||
|
if (!this->mesh().cache(name)) // || this->mesh().changing()
|
||||||
|
{
|
||||||
|
// Delete any old occurrences to avoid double registration
|
||||||
|
if (pgGrad && pgGrad->ownedByRegistry())
|
||||||
|
{
|
||||||
|
solution::cachePrintMessage("Deleting", name, vsf);
|
||||||
|
delete pgGrad;
|
||||||
|
}
|
||||||
|
|
||||||
|
solution::cachePrintMessage("Calculating", name, vsf);
|
||||||
|
return calcGrad(vsf, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!pgGrad)
|
||||||
|
{
|
||||||
|
solution::cachePrintMessage("Calculating and caching", name, vsf);
|
||||||
|
|
||||||
|
pgGrad = calcGrad(vsf, name).ptr();
|
||||||
|
regIOobject::store(pgGrad);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pgGrad->upToDate(vsf))
|
||||||
|
{
|
||||||
|
solution::cachePrintMessage("Reusing", name, vsf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
solution::cachePrintMessage("Updating", name, vsf);
|
||||||
|
delete pgGrad;
|
||||||
|
|
||||||
|
pgGrad = calcGrad(vsf, name).ptr();
|
||||||
|
regIOobject::store(pgGrad);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return *pgGrad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<
|
||||||
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>& vsf
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return grad(vsf, "grad(" + vsf.name() + ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<
|
||||||
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const tmp<GeometricField<Type, faPatchField, areaMesh>>& tvsf
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
typedef GeometricField<GradType, faPatchField, areaMesh> GradFieldType;
|
||||||
|
|
||||||
|
tmp<GradFieldType> tgrad = grad(tvsf());
|
||||||
|
tvsf.clear();
|
||||||
|
return tgrad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -113,26 +114,62 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~gradScheme();
|
virtual ~gradScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return mesh reference
|
//- Return mesh reference
|
||||||
const faMesh& mesh() const
|
const faMesh& mesh() const { return mesh_; }
|
||||||
{
|
|
||||||
return mesh_;
|
//- Calculate and return the grad of the given field.
|
||||||
}
|
// Used by grad either to recalculate the cached gradient when it is
|
||||||
|
// out of date with respect to the field or when it is not cached.
|
||||||
|
virtual tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
|
> calcGrad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>&,
|
||||||
|
const word& name
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
//- Calculate and return the grad of the given field
|
//- Calculate and return the grad of the given field
|
||||||
virtual tmp
|
//- which may have been cached
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
|
> grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>&,
|
||||||
|
const word& name
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Calculate and return the grad of the given field
|
||||||
|
//- with the default name
|
||||||
|
//- which may have been cached
|
||||||
|
tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
> grad
|
> grad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>&
|
const GeometricField<Type, faPatchField, areaMesh>&
|
||||||
) const = 0;
|
) const;
|
||||||
|
|
||||||
|
//- Calculate and return the grad of the given field
|
||||||
|
//- with the default name
|
||||||
|
//- which may have been cached
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
|
> grad
|
||||||
|
(
|
||||||
|
const tmp<GeometricField<Type, faPatchField, areaMesh>>&
|
||||||
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -47,17 +48,52 @@ tmp
|
|||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<
|
<
|
||||||
typename outerProduct<vector, Type>::type, faPatchField, areaMesh
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
gaussGrad<Type>::grad
|
gaussGrad<Type>::gradf
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>& vsf
|
const GeometricField<Type, faePatchField, edgeMesh>& ssf,
|
||||||
|
const word& name
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const areaVectorField &n = ssf.mesh().faceAreaNormals();
|
||||||
|
typedef typename outerProduct<vector,Type>::type GradType;
|
||||||
|
|
||||||
|
tmp<GeometricField<GradType, faPatchField, areaMesh>> tgGrad =
|
||||||
|
fac::edgeIntegrate(ssf.mesh().Sf()*ssf);
|
||||||
|
|
||||||
|
GeometricField<GradType, faPatchField, areaMesh>& gGrad = tgGrad.ref();
|
||||||
|
|
||||||
|
gGrad -= n*(n & gGrad);
|
||||||
|
gGrad.correctBoundaryConditions();
|
||||||
|
|
||||||
|
return tgGrad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<
|
||||||
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
gaussGrad<Type>::calcGrad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
typedef GeometricField<GradType, faPatchField, areaMesh> GradFieldType;
|
||||||
|
|
||||||
tmp<GeometricField<GradType, faPatchField, areaMesh>> tgGrad
|
tmp<GradFieldType> tgGrad
|
||||||
(
|
(
|
||||||
fac::edgeIntegrate
|
fac::edgeIntegrate
|
||||||
(
|
(
|
||||||
@ -65,12 +101,11 @@ gaussGrad<Type>::grad
|
|||||||
*tinterpScheme_().interpolate(vsf)
|
*tinterpScheme_().interpolate(vsf)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
GradFieldType& gGrad = tgGrad.ref();
|
||||||
GeometricField<GradType, faPatchField, areaMesh>& gGrad = tgGrad.ref();
|
|
||||||
|
|
||||||
gGrad.correctBoundaryConditions();
|
gGrad.correctBoundaryConditions();
|
||||||
|
gGrad.rename(name);
|
||||||
|
|
||||||
gGrad.rename("grad(" + vsf.name() + ')');
|
|
||||||
correctBoundaryConditions(vsf, gGrad);
|
correctBoundaryConditions(vsf, gGrad);
|
||||||
|
|
||||||
return tgGrad;
|
return tgGrad;
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -62,8 +63,9 @@ class gaussGrad
|
|||||||
:
|
:
|
||||||
public fa::gradScheme<Type>
|
public fa::gradScheme<Type>
|
||||||
{
|
{
|
||||||
// Private data
|
// Private Data
|
||||||
|
|
||||||
|
//- Interpolation scheme
|
||||||
tmp<edgeInterpolationScheme<Type>> tinterpScheme_;
|
tmp<edgeInterpolationScheme<Type>> tinterpScheme_;
|
||||||
|
|
||||||
|
|
||||||
@ -118,17 +120,32 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the gradient of the given field calculated
|
//- Return the gradient of the given field
|
||||||
// using Gauss' theorem on the interpolated field
|
//- calculated using Gauss' theorem on the given surface field
|
||||||
|
static
|
||||||
tmp
|
tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
> grad
|
> gradf
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>&
|
const GeometricField<Type, faePatchField, edgeMesh>&,
|
||||||
|
const word& name
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return the gradient of the given field to the
|
||||||
|
//- gradScheme::grad for optional caching
|
||||||
|
virtual tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
|
> calcGrad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
//- Correct the boundary values of the gradient using the patchField
|
//- Correct the boundary values of the gradient using the patchField
|
||||||
// snGrad functions
|
// snGrad functions
|
||||||
static void correctBoundaryConditions
|
static void correctBoundaryConditions
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -45,18 +46,20 @@ namespace fa
|
|||||||
{
|
{
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
tmp
|
tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<
|
<
|
||||||
typename outerProduct<vector, Type>::type, faPatchField, areaMesh
|
typename outerProduct<vector, Type>::type,
|
||||||
|
faPatchField,
|
||||||
|
areaMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
leastSquaresFaGrad<Type>::grad
|
leastSquaresFaGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>& vsf
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
@ -69,7 +72,7 @@ leastSquaresFaGrad<Type>::grad
|
|||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad(" + vsf.name() + ')',
|
name,
|
||||||
vsf.instance(),
|
vsf.instance(),
|
||||||
vsf.db(),
|
vsf.db(),
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -93,13 +94,16 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return the gradient of the given field to the
|
||||||
|
//- gradScheme::grad for optional caching
|
||||||
virtual tmp
|
virtual tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>&
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -116,13 +117,16 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
tmp
|
//- Return the gradient of the given field to the
|
||||||
|
//- gradScheme::grad for optional caching
|
||||||
|
virtual tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>&
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -72,14 +73,15 @@ inline void edgeLimitedGrad<Type>::limitEdge
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<areaVectorField> edgeLimitedGrad<scalar>::grad
|
tmp<areaVectorField> edgeLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const areaScalarField& vsf
|
const areaScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const faMesh& mesh = vsf.mesh();
|
const faMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<areaVectorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<areaVectorField> tGrad = basicGradScheme_().calcGrad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
@ -206,14 +208,15 @@ tmp<areaVectorField> edgeLimitedGrad<scalar>::grad
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<areaTensorField> edgeLimitedGrad<vector>::grad
|
tmp<areaTensorField> edgeLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const areaVectorField& vvf
|
const areaVectorField& vvf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const faMesh& mesh = vvf.mesh();
|
const faMesh& mesh = vvf.mesh();
|
||||||
|
|
||||||
tmp<areaTensorField> tGrad = basicGradScheme_().grad(vvf);
|
tmp<areaTensorField> tGrad = basicGradScheme_().grad(vvf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -118,14 +119,16 @@ public:
|
|||||||
const Type& extrapolate
|
const Type& extrapolate
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return the gradient of the given field to the
|
||||||
tmp
|
//- gradScheme::grad for optional caching
|
||||||
|
virtual tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
<typename outerProduct<vector, Type>::type, faPatchField, areaMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, faPatchField, areaMesh>&
|
const GeometricField<Type, faPatchField, areaMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 Wikki Ltd
|
Copyright (C) 2016-2017 Wikki Ltd
|
||||||
|
Copyright (C) 2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -94,14 +95,15 @@ inline void faceLimitedGrad<Type>::limitEdge
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<areaVectorField> faceLimitedGrad<scalar>::grad
|
tmp<areaVectorField> faceLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const areaScalarField& vsf
|
const areaScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const faMesh& mesh = vsf.mesh();
|
const faMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<areaVectorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<areaVectorField> tGrad = basicGradScheme_().calcGrad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
@ -243,14 +245,15 @@ tmp<areaVectorField> faceLimitedGrad<scalar>::grad
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<areaTensorField> faceLimitedGrad<vector>::grad
|
tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const areaVectorField& vsf
|
const areaVectorField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const faMesh& mesh = vsf.mesh();
|
const faMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<areaTensorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<areaTensorField> tGrad = basicGradScheme_().grad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -44,5 +44,11 @@ relaxationFactors
|
|||||||
Us 0.5;
|
Us 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cache
|
||||||
|
{
|
||||||
|
grad(h);
|
||||||
|
grad(Us);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
Reference in New Issue
Block a user