mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
COMP: rename field methods clamp() -> clamp_range()
- this is slightly longer to write (but consistent with clamp_min etc). The main reason is that this allows easier use of the clamp() free function. STYLE: skip checks for bad/invalid clamping ranges - ranges are either already validated before calling, the caller logic has already made the branching decision.
This commit is contained in:
@ -162,9 +162,16 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Info<< "result: " << result << nl;
|
Info<< "result: " << result << nl;
|
||||||
|
|
||||||
someField.clamp(zero_one{});
|
someField.clamp_range(zero_one{});
|
||||||
|
|
||||||
Info<< "inplace: " << someField << nl;
|
Info<< "inplace: " << someField << nl;
|
||||||
|
|
||||||
|
scalar val(1.414);
|
||||||
|
|
||||||
|
Info<< "clamp " << val
|
||||||
|
// nope << " : " << clamp(val, zero_one{})
|
||||||
|
// nope << " : " << clamp(val, scalarMinMax(zero_one{}))
|
||||||
|
<< " : " << clamp(val, 0, 1)
|
||||||
|
<< nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< nl << "\nDone\n" << endl;
|
Info<< nl << "\nDone\n" << endl;
|
||||||
|
|||||||
@ -282,39 +282,6 @@ void FieldField<Field, Type>::replace
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<template<class> class Field, class Type>
|
|
||||||
void FieldField<Field, Type>::clamp
|
|
||||||
(
|
|
||||||
const Type& lower,
|
|
||||||
const Type& upper
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (lower < upper)
|
|
||||||
{
|
|
||||||
for (auto& ff : *this)
|
|
||||||
{
|
|
||||||
ff.clamp(lower, upper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<template<class> class Field, class Type>
|
|
||||||
void FieldField<Field, Type>::clamp
|
|
||||||
(
|
|
||||||
const MinMax<Type>& range
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (range.min() < range.max())
|
|
||||||
{
|
|
||||||
for (auto& ff : *this)
|
|
||||||
{
|
|
||||||
ff.clamp(range.min(), range.max());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<template<class> class Field, class Type>
|
template<template<class> class Field, class Type>
|
||||||
void FieldField<Field, Type>::clamp_min
|
void FieldField<Field, Type>::clamp_min
|
||||||
(
|
(
|
||||||
@ -341,6 +308,37 @@ void FieldField<Field, Type>::clamp_max
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<template<class> class Field, class Type>
|
||||||
|
void FieldField<Field, Type>::clamp_range
|
||||||
|
(
|
||||||
|
const Type& lower,
|
||||||
|
const Type& upper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Note: no checks for bad/invalid clamping ranges
|
||||||
|
|
||||||
|
for (auto& ff : *this)
|
||||||
|
{
|
||||||
|
ff.clamp_range(lower, upper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<template<class> class Field, class Type>
|
||||||
|
void FieldField<Field, Type>::clamp_range
|
||||||
|
(
|
||||||
|
const MinMax<Type>& range
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Note: no checks for bad/invalid clamping ranges
|
||||||
|
|
||||||
|
for (auto& ff : *this)
|
||||||
|
{
|
||||||
|
ff.clamp_range(range.min(), range.max());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<template<class> class Field, class Type>
|
template<template<class> class Field, class Type>
|
||||||
tmp<FieldField<Field, Type>> FieldField<Field, Type>::T() const
|
tmp<FieldField<Field, Type>> FieldField<Field, Type>::T() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -149,20 +149,20 @@ public:
|
|||||||
//- Replace a component field of the field
|
//- Replace a component field of the field
|
||||||
void replace(const direction, const cmptType&);
|
void replace(const direction, const cmptType&);
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const Type& lower, const Type& upper);
|
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const MinMax<Type>& range);
|
|
||||||
|
|
||||||
//- Impose lower (floor) clamp on the field values (in-place)
|
//- Impose lower (floor) clamp on the field values (in-place)
|
||||||
void clamp_min(const Type& lower);
|
void clamp_min(const Type& lower);
|
||||||
|
|
||||||
//- Impose upper (ceiling) clamp on the field values (in-place)
|
//- Impose upper (ceiling) clamp on the field values (in-place)
|
||||||
void clamp_max(const Type& upper);
|
void clamp_max(const Type& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const Type& lower, const Type& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const MinMax<Type>& range);
|
||||||
|
|
||||||
//- Return the field transpose (only defined for second rank tensors)
|
//- Return the field transpose (only defined for second rank tensors)
|
||||||
tmp<FieldField<Field, Type>> T() const;
|
tmp<FieldField<Field, Type>> T() const;
|
||||||
|
|
||||||
|
|||||||
@ -658,27 +658,6 @@ void Foam::Field<Type>::replace
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
void Foam::Field<Type>::clamp(const Type& lower, const Type& upper)
|
|
||||||
{
|
|
||||||
// Use free functions min(), max() to impose component-wise clamping
|
|
||||||
if (lower < upper)
|
|
||||||
{
|
|
||||||
// std::for_each
|
|
||||||
for (auto& val : *this)
|
|
||||||
{
|
|
||||||
val = min(max(val, lower), upper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
void Foam::Field<Type>::clamp(const MinMax<Type>& range)
|
|
||||||
{
|
|
||||||
clamp(range.min(), range.max());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::Field<Type>::clamp_min(const Type& lower)
|
void Foam::Field<Type>::clamp_min(const Type& lower)
|
||||||
{
|
{
|
||||||
@ -702,6 +681,26 @@ void Foam::Field<Type>::clamp_max(const Type& upper)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Field<Type>::clamp_range(const Type& lower, const Type& upper)
|
||||||
|
{
|
||||||
|
// Note: no checks for bad/invalid clamping ranges
|
||||||
|
|
||||||
|
// Use free functions min(), max() to impose component-wise clamping
|
||||||
|
// std::for_each
|
||||||
|
for (auto& val : *this)
|
||||||
|
{
|
||||||
|
val = min(max(val, lower), upper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Field<Type>::clamp_range(const MinMax<Type>& range)
|
||||||
|
{
|
||||||
|
Field<Type>::clamp_range(range.min(), range.max());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
template<class VSForm>
|
template<class VSForm>
|
||||||
VSForm Foam::Field<Type>::block(const label start) const
|
VSForm Foam::Field<Type>::block(const label start) const
|
||||||
|
|||||||
@ -434,20 +434,20 @@ public:
|
|||||||
//- Replace a component field of the field
|
//- Replace a component field of the field
|
||||||
void replace(const direction, const cmptType&);
|
void replace(const direction, const cmptType&);
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const Type& lower, const Type& upper);
|
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const MinMax<Type>& range);
|
|
||||||
|
|
||||||
//- Impose lower (floor) clamp on the field values (in-place)
|
//- Impose lower (floor) clamp on the field values (in-place)
|
||||||
void clamp_min(const Type& lower);
|
void clamp_min(const Type& lower);
|
||||||
|
|
||||||
//- Impose upper (ceiling) clamp on the field values (in-place)
|
//- Impose upper (ceiling) clamp on the field values (in-place)
|
||||||
void clamp_max(const Type& upper);
|
void clamp_max(const Type& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const Type& lower, const Type& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const MinMax<Type>& range);
|
||||||
|
|
||||||
template<class VSForm>
|
template<class VSForm>
|
||||||
VSForm block(const label start) const;
|
VSForm block(const label start) const;
|
||||||
|
|
||||||
|
|||||||
@ -664,28 +664,22 @@ void clamp
|
|||||||
const MinMax<Type>& range
|
const MinMax<Type>& range
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
// Note: no checks for bad/invalid clamping ranges
|
||||||
|
|
||||||
if (result.cdata() == f1.cdata())
|
if (result.cdata() == f1.cdata())
|
||||||
{
|
{
|
||||||
// Apply in-place
|
// Apply in-place
|
||||||
result.clamp(range);
|
result.clamp_range(range);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (range.good())
|
std::transform
|
||||||
{
|
(
|
||||||
std::transform
|
f1.cbegin(),
|
||||||
(
|
f1.cbegin(result.size()),
|
||||||
f1.cbegin(),
|
result.begin(),
|
||||||
f1.cbegin(result.size()),
|
clampOp<Type>(range)
|
||||||
result.begin(),
|
);
|
||||||
clampOp<Type>(range)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// No clamping
|
|
||||||
std::copy(f1.cbegin(), f1.cbegin(result.size()), result.begin());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1249,50 +1249,6 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::replace
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp
|
|
||||||
(
|
|
||||||
const Type& lower,
|
|
||||||
const Type& upper
|
|
||||||
)
|
|
||||||
{
|
|
||||||
primitiveFieldRef().clamp(lower, upper);
|
|
||||||
boundaryFieldRef().clamp(lower, upper);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp
|
|
||||||
(
|
|
||||||
const MinMax<Type>& range
|
|
||||||
)
|
|
||||||
{
|
|
||||||
primitiveFieldRef().clamp(range.min(), range.max());
|
|
||||||
boundaryFieldRef().clamp(range.min(), range.max());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp
|
|
||||||
(
|
|
||||||
const dimensioned<Type>& lower,
|
|
||||||
const dimensioned<Type>& upper
|
|
||||||
)
|
|
||||||
{
|
|
||||||
this->clamp(lower.value(), upper.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp
|
|
||||||
(
|
|
||||||
const dimensioned<MinMax<Type>>& range
|
|
||||||
)
|
|
||||||
{
|
|
||||||
this->clamp(range.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_min
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_min
|
||||||
(
|
(
|
||||||
@ -1335,6 +1291,50 @@ void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_max
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_range
|
||||||
|
(
|
||||||
|
const Type& lower,
|
||||||
|
const Type& upper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
primitiveFieldRef().clamp_range(lower, upper);
|
||||||
|
boundaryFieldRef().clamp_range(lower, upper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_range
|
||||||
|
(
|
||||||
|
const MinMax<Type>& range
|
||||||
|
)
|
||||||
|
{
|
||||||
|
primitiveFieldRef().clamp_range(range.min(), range.max());
|
||||||
|
boundaryFieldRef().clamp_range(range.min(), range.max());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_range
|
||||||
|
(
|
||||||
|
const dimensioned<Type>& lower,
|
||||||
|
const dimensioned<Type>& upper
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->clamp_range(lower.value(), upper.value());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::clamp_range
|
||||||
|
(
|
||||||
|
const dimensioned<MinMax<Type>>& range
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->clamp_range(range.value());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type, template<class> class PatchField, class GeoMesh>
|
template<class Type, template<class> class PatchField, class GeoMesh>
|
||||||
void Foam::GeometricField<Type, PatchField, GeoMesh>::negate()
|
void Foam::GeometricField<Type, PatchField, GeoMesh>::negate()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -629,26 +629,6 @@ public:
|
|||||||
const dimensioned<cmptType>& ds
|
const dimensioned<cmptType>& ds
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const Type& lower, const Type& upper);
|
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range.
|
|
||||||
void clamp(const MinMax<Type>& range);
|
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range. No dimension checking.
|
|
||||||
void clamp
|
|
||||||
(
|
|
||||||
const dimensioned<Type>& lower,
|
|
||||||
const dimensioned<Type>& upper
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
|
||||||
// A no-op for an invalid range. No dimension checking.
|
|
||||||
void clamp(const dimensioned<MinMax<Type>>& range);
|
|
||||||
|
|
||||||
//- Impose lower (floor) clamp on the field values (in-place)
|
//- Impose lower (floor) clamp on the field values (in-place)
|
||||||
void clamp_min(const Type& lower);
|
void clamp_min(const Type& lower);
|
||||||
|
|
||||||
@ -663,6 +643,26 @@ public:
|
|||||||
// No dimension checking
|
// No dimension checking
|
||||||
void clamp_max(const dimensioned<Type>& upper);
|
void clamp_max(const dimensioned<Type>& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not. No dimension checking.
|
||||||
|
void clamp_range(const dimensioned<MinMax<Type>>& range);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const Type& lower, const Type& upper);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not.
|
||||||
|
void clamp_range(const MinMax<Type>& range);
|
||||||
|
|
||||||
|
//- Clamp field values (in-place) to the specified range.
|
||||||
|
// Does not check if range is valid or not. No dimension checking.
|
||||||
|
void clamp_range
|
||||||
|
(
|
||||||
|
const dimensioned<Type>& lower,
|
||||||
|
const dimensioned<Type>& upper
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Member Operators
|
// Member Operators
|
||||||
|
|
||||||
@ -715,17 +715,17 @@ public:
|
|||||||
// Housekeeping
|
// Housekeeping
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
//- Clamp field values (in-place) to the specified range.
|
||||||
// \deprecated(2023-01) prefer clamp() naming
|
// \deprecated(2023-01) prefer clamp_range() naming
|
||||||
void clip(const dimensioned<MinMax<Type>>& range)
|
void clip(const dimensioned<MinMax<Type>>& range)
|
||||||
{
|
{
|
||||||
this->clamp(range);
|
this->clamp_range(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Clamp field values (in-place) to the specified range.
|
//- Clamp field values (in-place) to the specified range.
|
||||||
// \deprecated(2023-01) prefer clamp() naming
|
// \deprecated(2023-01) prefer clamp_range() naming
|
||||||
void clip(const dimensioned<Type>& lo, const dimensioned<Type>& hi)
|
void clip(const dimensioned<Type>& lo, const dimensioned<Type>& hi)
|
||||||
{
|
{
|
||||||
this->clamp(lo.value(), hi.value());
|
this->clamp_range(lo.value(), hi.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Use minimum of the field and specified value. ie, clamp_max().
|
//- Use minimum of the field and specified value. ie, clamp_max().
|
||||||
@ -738,12 +738,12 @@ public:
|
|||||||
// \deprecated(2023-01) prefer clamp_min()
|
// \deprecated(2023-01) prefer clamp_min()
|
||||||
void max(const dimensioned<Type>& lower) { this->clamp_min(lower); }
|
void max(const dimensioned<Type>& lower) { this->clamp_min(lower); }
|
||||||
|
|
||||||
//- Deprecated(2019-01) identical to clamp()
|
//- Deprecated(2019-01) identical to clamp_range()
|
||||||
// \deprecated(2019-01) identical to clamp()
|
// \deprecated(2019-01) identical to clamp_range()
|
||||||
FOAM_DEPRECATED_FOR(2019-01, "clamp() method")
|
FOAM_DEPRECATED_FOR(2019-01, "clamp_range() method")
|
||||||
void maxMin(const dimensioned<Type>& lo, const dimensioned<Type>& hi)
|
void maxMin(const dimensioned<Type>& lo, const dimensioned<Type>& hi)
|
||||||
{
|
{
|
||||||
return this->clamp(lo.value(), hi.value());
|
return this->clamp_range(lo.value(), hi.value());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user