BACKPORT: Gradient caching. Backport: Dominik Christ. Merge: Dominik Christ
This commit is contained in:
commit
02fc7e5574
23 changed files with 303 additions and 66 deletions
|
@ -53,7 +53,7 @@ grad
|
||||||
const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf
|
const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return fv::gaussGrad<Type>::grad(ssf);
|
return fv::gaussGrad<Type>::gradf(ssf, "grad(" + ssf.name() + ')');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ grad
|
||||||
(
|
(
|
||||||
vf.mesh(),
|
vf.mesh(),
|
||||||
vf.mesh().schemesDict().gradScheme(name)
|
vf.mesh().schemesDict().gradScheme(name)
|
||||||
)().grad(vf);
|
)().grad(vf, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
beGaussGrad<Type>::grad
|
beGaussGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
@ -68,7 +69,7 @@ beGaussGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+ssf.name()+')',
|
name,
|
||||||
ssf.instance(),
|
ssf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|
|
@ -122,9 +122,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
extendedLeastSquaresGrad<Type>::grad
|
extendedLeastSquaresGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
@ -67,7 +68,7 @@ extendedLeastSquaresGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+vsf.name()+')',
|
name,
|
||||||
vsf.instance(),
|
vsf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|
|
@ -105,9 +105,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
fourthGrad<Type>::grad
|
fourthGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
// The fourth-order gradient is calculated in two passes. First,
|
// The fourth-order gradient is calculated in two passes. First,
|
||||||
|
@ -79,7 +80,7 @@ fourthGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+vsf.name()+')',
|
name,
|
||||||
vsf.instance(),
|
vsf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|
|
@ -86,9 +86,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
gaussGrad<Type>::grad
|
gaussGrad<Type>::gradf
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf
|
const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf,
|
||||||
|
const word& name
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
@ -61,7 +62,7 @@ gaussGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+ssf.name()+')',
|
name,
|
||||||
ssf.instance(),
|
ssf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
@ -125,16 +126,17 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
gaussGrad<Type>::grad
|
gaussGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
|
||||||
tmp<GeometricField<GradType, fvPatchField, volMesh> > tgGrad
|
tmp<GeometricField<GradType, fvPatchField, volMesh> > tgGrad
|
||||||
(
|
(
|
||||||
grad(tinterpScheme_().interpolate(vsf))
|
gradf(tinterpScheme_().interpolate(vsf), name)
|
||||||
);
|
);
|
||||||
GeometricField<GradType, fvPatchField, volMesh>& gGrad = tgGrad();
|
GeometricField<GradType, fvPatchField, volMesh>& gGrad = tgGrad();
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ public:
|
||||||
tinterpScheme_(new linear<Type>(mesh))
|
tinterpScheme_(new linear<Type>(mesh))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//- Construct from Istream
|
//- Construct from mesh and Istream
|
||||||
gaussGrad(const fvMesh& mesh, Istream& is)
|
gaussGrad(const fvMesh& mesh, Istream& is)
|
||||||
:
|
:
|
||||||
gradScheme<Type>(mesh),
|
gradScheme<Type>(mesh),
|
||||||
|
@ -122,20 +122,22 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> gradf
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvsPatchField, surfaceMesh>&
|
const GeometricField<Type, fvsPatchField, surfaceMesh>&,
|
||||||
|
const word& name
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return the gradient of the given field calculated
|
//- Return the gradient of the given field calculated
|
||||||
// using Gauss' theorem on the interpolated field
|
// using Gauss' theorem on the interpolated field
|
||||||
tmp
|
virtual tmp
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return the BlockLduSystem corresponding to the implicit grad
|
//- Return the BlockLduSystem corresponding to the implicit grad
|
||||||
|
|
|
@ -29,6 +29,7 @@ Description
|
||||||
#include "fv.H"
|
#include "fv.H"
|
||||||
#include "HashTable.H"
|
#include "HashTable.H"
|
||||||
#include "primitiveFields.H"
|
#include "primitiveFields.H"
|
||||||
|
#include "objectRegistry.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
@ -98,6 +99,176 @@ gradScheme<Type>::~gradScheme()
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp
|
||||||
|
<
|
||||||
|
Foam::GeometricField
|
||||||
|
<
|
||||||
|
typename Foam::outerProduct<Foam::vector, Type>::type,
|
||||||
|
Foam::fvPatchField,
|
||||||
|
Foam::volMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Foam::fv::gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
typedef GeometricField<GradType, fvPatchField, volMesh> GradFieldType;
|
||||||
|
|
||||||
|
if (!this->mesh().changing() && this->mesh().schemesDict().cache(name))
|
||||||
|
{
|
||||||
|
if (!mesh().objectRegistry::template foundObject<GradFieldType>(name))
|
||||||
|
{
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Calculating and caching " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
tmp<GradFieldType> tgGrad = calcGrad(vsf, name);
|
||||||
|
regIOobject::store(tgGrad.ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Retrieving " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
GradFieldType& gGrad = const_cast<GradFieldType&>
|
||||||
|
(
|
||||||
|
mesh().objectRegistry::template lookupObject<GradFieldType>(name)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (gGrad.upToDate(vsf.name()))
|
||||||
|
{
|
||||||
|
return gGrad;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Deleting " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
gGrad.release();
|
||||||
|
delete &gGrad;
|
||||||
|
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Recalculating " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
tmp<GradFieldType> tgGrad = calcGrad(vsf, name);
|
||||||
|
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Storing " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
regIOobject::store(tgGrad.ptr());
|
||||||
|
GradFieldType& gGrad = const_cast<GradFieldType&>
|
||||||
|
(
|
||||||
|
mesh().objectRegistry::template lookupObject<GradFieldType>
|
||||||
|
(
|
||||||
|
name
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return gGrad;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mesh().objectRegistry::template foundObject<GradFieldType>(name))
|
||||||
|
{
|
||||||
|
GradFieldType& gGrad = const_cast<GradFieldType&>
|
||||||
|
(
|
||||||
|
mesh().objectRegistry::template lookupObject<GradFieldType>
|
||||||
|
(
|
||||||
|
name
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (gGrad.ownedByRegistry())
|
||||||
|
{
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Deleting " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
gGrad.release();
|
||||||
|
delete &gGrad;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fvSchemes::debug)
|
||||||
|
{
|
||||||
|
Info << "Cache: Calculating " << name
|
||||||
|
<< " originating from " << vsf.name()
|
||||||
|
<< " event No. " << vsf.eventNo()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
return calcGrad(vsf, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp
|
||||||
|
<
|
||||||
|
Foam::GeometricField
|
||||||
|
<
|
||||||
|
typename Foam::outerProduct<Foam::vector, Type>::type,
|
||||||
|
Foam::fvPatchField,
|
||||||
|
Foam::volMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Foam::fv::gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return grad(vsf, "grad(" + vsf.name() + ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp
|
||||||
|
<
|
||||||
|
Foam::GeometricField
|
||||||
|
<
|
||||||
|
typename Foam::outerProduct<Foam::vector, Type>::type,
|
||||||
|
Foam::fvPatchField,
|
||||||
|
Foam::volMesh
|
||||||
|
>
|
||||||
|
>
|
||||||
|
Foam::fv::gradScheme<Type>::grad
|
||||||
|
(
|
||||||
|
const tmp<GeometricField<Type, fvPatchField, volMesh> >& tvsf
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
typedef GeometricField<GradType, fvPatchField, volMesh> GradFieldType;
|
||||||
|
|
||||||
|
tmp<GradFieldType> tgrad = grad(tvsf());
|
||||||
|
tvsf.clear();
|
||||||
|
return tgrad;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
tmp
|
tmp
|
||||||
<
|
<
|
||||||
|
|
|
@ -127,16 +127,54 @@ public:
|
||||||
return mesh_;
|
return mesh_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Calculate and return the grad of the given field
|
//- 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
|
virtual tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
|
> calcGrad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||||
|
const word& name
|
||||||
|
) const = 0;
|
||||||
|
|
||||||
|
//- Calculate and return the grad of the given field
|
||||||
|
// which may have been cached
|
||||||
|
tmp
|
||||||
|
<
|
||||||
|
GeometricField
|
||||||
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
|
> grad
|
||||||
|
(
|
||||||
|
const GeometricField<Type, fvPatchField, volMesh>&,
|
||||||
|
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, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> grad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>&
|
||||||
) 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, fvPatchField, volMesh>
|
||||||
|
> grad
|
||||||
|
(
|
||||||
|
const tmp<GeometricField<Type, fvPatchField, volMesh> >&
|
||||||
|
) const;
|
||||||
|
|
||||||
//- Return the BlockLduSystem corresponding to the implicit grad
|
//- Return the BlockLduSystem corresponding to the implicit grad
|
||||||
// discretization. For block coupled systems.
|
// discretization. For block coupled systems.
|
||||||
|
|
|
@ -52,9 +52,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
leastSquaresGrad<Type>::grad
|
leastSquaresGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
@ -67,7 +68,7 @@ leastSquaresGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+vsf.name()+')',
|
name,
|
||||||
vsf.instance(),
|
vsf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|
|
@ -88,13 +88,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, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return the BlockLduSystem corresponding to the implicit least
|
//- Return the BlockLduSystem corresponding to the implicit least
|
||||||
|
|
|
@ -121,9 +121,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,9 +91,10 @@ inline void cellLimitedGrad<Type>::limitFace
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volVectorField> cellLimitedGrad<scalar>::grad
|
tmp<volVectorField> cellLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const volScalarField& vsf
|
const volScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
@ -243,9 +244,10 @@ tmp<volVectorField> cellLimitedGrad<scalar>::grad
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volTensorField> cellLimitedGrad<vector>::grad
|
tmp<volTensorField> cellLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const volVectorField& vsf
|
const volVectorField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
|
|
@ -120,9 +120,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -48,9 +48,10 @@ makeFvGradScheme(cellMDLimitedGrad)
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volVectorField> cellMDLimitedGrad<scalar>::grad
|
tmp<volVectorField> cellMDLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const volScalarField& vsf
|
const volScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
@ -189,9 +190,10 @@ tmp<volVectorField> cellMDLimitedGrad<scalar>::grad
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volTensorField> cellMDLimitedGrad<vector>::grad
|
tmp<volTensorField> cellMDLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const volVectorField& vsf
|
const volVectorField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
|
|
@ -121,9 +121,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return the BlockLduSystem corresponding to the implicit face
|
//- Return the BlockLduSystem corresponding to the implicit face
|
||||||
|
|
|
@ -70,9 +70,10 @@ inline void faceLimitedGrad<Type>::limitFace
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volVectorField> faceLimitedGrad<scalar>::grad
|
tmp<volVectorField> faceLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const volScalarField& vsf
|
const volScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
@ -206,9 +207,10 @@ tmp<volVectorField> faceLimitedGrad<scalar>::grad
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volTensorField> faceLimitedGrad<vector>::grad
|
tmp<volTensorField> faceLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const volVectorField& vvf
|
const volVectorField& vvf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vvf.mesh();
|
const fvMesh& mesh = vvf.mesh();
|
||||||
|
|
|
@ -121,9 +121,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,10 @@ makeFvGradScheme(faceMDLimitedGrad)
|
||||||
|
|
||||||
// FaceLimited scalar gradient
|
// FaceLimited scalar gradient
|
||||||
template<>
|
template<>
|
||||||
tmp<volVectorField> faceMDLimitedGrad<scalar>::grad
|
tmp<volVectorField> faceMDLimitedGrad<scalar>::calcGrad
|
||||||
(
|
(
|
||||||
const volScalarField& vsf
|
const volScalarField& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
@ -188,9 +189,10 @@ tmp<volVectorField> faceMDLimitedGrad<scalar>::grad
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
tmp<volTensorField> faceMDLimitedGrad<vector>::grad
|
tmp<volTensorField> faceMDLimitedGrad<vector>::calcGrad
|
||||||
(
|
(
|
||||||
const volVectorField& vvf
|
const volVectorField& vvf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vvf.mesh();
|
const fvMesh& mesh = vvf.mesh();
|
||||||
|
|
|
@ -54,9 +54,10 @@ tmp
|
||||||
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
typename outerProduct<vector, Type>::type, fvPatchField, volMesh
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
leastSquaresSolidInterfaceGrad<Type>::grad
|
leastSquaresSolidInterfaceGrad<Type>::calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& vsf
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
typedef typename outerProduct<vector, Type>::type GradType;
|
typedef typename outerProduct<vector, Type>::type GradType;
|
||||||
|
@ -69,7 +70,7 @@ leastSquaresSolidInterfaceGrad<Type>::grad
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"grad("+vsf.name()+')',
|
name,
|
||||||
vsf.instance(),
|
vsf.instance(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
|
|
|
@ -94,9 +94,10 @@ public:
|
||||||
<
|
<
|
||||||
GeometricField
|
GeometricField
|
||||||
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
<typename outerProduct<vector, Type>::type, fvPatchField, volMesh>
|
||||||
> grad
|
> calcGrad
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>&
|
const GeometricField<Type, fvPatchField, volMesh>& vsf,
|
||||||
|
const word& name
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Reference in a new issue