ENH: add dimensionedLabel typedef

GIT: primitives/compat with compatibility includes
GIT: primitives/traits with pTraits, contiguous, zero, one etc.

COMP: relocate base equal(a,b) definition from scalar.H -> label.H
- make more universally available

STYLE: replace occasional use of notEqual(a,b) with !equal(a,b)
This commit is contained in:
Mark Olesen
2023-01-13 20:45:53 +01:00
parent a50d32b587
commit ecaa55295b
31 changed files with 140 additions and 65 deletions

View File

@ -48,12 +48,6 @@ using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
bool notEqual(const scalar s1, const scalar s2, const scalar tol)
{
return mag(s1-s2) > tol;
}
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -154,6 +148,8 @@ int main(int argc, char *argv[])
// Face removal engine. No checking for not merging boundary faces. // Face removal engine. No checking for not merging boundary faces.
removeFaces faceRemover(mesh, GREAT); removeFaces faceRemover(mesh, GREAT);
// Comparison for inequality
const auto isNotEqual = notEqualOp<scalar>(1e-10);
while (runTime.loop()) while (runTime.loop())
{ {
@ -254,7 +250,6 @@ int main(int argc, char *argv[])
} }
} }
// Check constant profile // Check constant profile
{ {
const scalar max = gMax(one); const scalar max = gMax(one);
@ -263,7 +258,7 @@ int main(int argc, char *argv[])
Info<< "Uniform one field min = " << min Info<< "Uniform one field min = " << min
<< " max = " << max << endl; << " max = " << max << endl;
if (notEqual(max, 1.0, 1e-10) || notEqual(min, 1.0, 1e-10)) if (isNotEqual(max, 1) || isNotEqual(min, 1))
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Uniform volVectorField not preserved." << "Uniform volVectorField not preserved."
@ -287,7 +282,7 @@ int main(int argc, char *argv[])
Info<< "Linear profile field min = " << min Info<< "Linear profile field min = " << min
<< " max = " << max << endl; << " max = " << max << endl;
if (notEqual(max, 0.0, 1e-10) || notEqual(min, 0.0, 1e-10)) if (isNotEqual(max, 0) || isNotEqual(min, 0))
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Linear profile not preserved." << "Linear profile not preserved."
@ -310,7 +305,7 @@ int main(int argc, char *argv[])
Info<< "Uniform surface field min = " << min Info<< "Uniform surface field min = " << min
<< " max = " << max << endl; << " max = " << max << endl;
if (notEqual(max, 1.0, 1e-10) || notEqual(min, 1.0, 1e-10)) if (isNotEqual(max, 1) || isNotEqual(min, 1))
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Uniform surfaceScalarField not preserved." << "Uniform surfaceScalarField not preserved."

View File

@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Typedef
Foam::dimensionedLabel
Description
Dimensioned label obtained from generic dimensioned type.
SourceFiles
\*---------------------------------------------------------------------------*/
#ifndef Foam_dimensionedLabel_H
#define Foam_dimensionedLabel_H
#include "dimensionedType.H"
#include "label.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
typedef dimensioned<label> dimensionedLabel;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -40,8 +40,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedMinMax_H #ifndef Foam_dimensionedMinMax_H
#define dimensionedMinMax_H #define Foam_dimensionedMinMax_H
#include "dimensionedType.H" #include "dimensionedType.H"
#include "MinMax.H" #include "MinMax.H"

View File

@ -35,8 +35,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedScalar_H #ifndef Foam_dimensionedScalar_H
#define dimensionedScalar_H #define Foam_dimensionedScalar_H
#include "dimensionedType.H" #include "dimensionedType.H"
#include "scalar.H" #include "scalar.H"

View File

@ -23,14 +23,12 @@ License
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedScalarFwd_H #ifndef Foam_dimensionedScalarFwd_H
#define dimensionedScalarFwd_H #define Foam_dimensionedScalarFwd_H
#include "scalar.H" #include "scalarFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -34,8 +34,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedSphericalTensor_H #ifndef Foam_dimensionedSphericalTensor_H
#define dimensionedSphericalTensor_H #define Foam_dimensionedSphericalTensor_H
#include "dimensionedType.H" #include "dimensionedType.H"
#include "sphericalTensor.H" #include "sphericalTensor.H"
@ -50,7 +50,7 @@ namespace Foam
typedef dimensioned<sphericalTensor> dimensionedSphericalTensor; typedef dimensioned<sphericalTensor> dimensionedSphericalTensor;
// global functions // Global Functions
dimensionedScalar tr(const dimensionedSphericalTensor&); dimensionedScalar tr(const dimensionedSphericalTensor&);
dimensionedScalar det(const dimensionedSphericalTensor&); dimensionedScalar det(const dimensionedSphericalTensor&);

View File

@ -34,8 +34,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedSymmTensor_H #ifndef Foam_dimensionedSymmTensor_H
#define dimensionedSymmTensor_H #define Foam_dimensionedSymmTensor_H
#include "dimensionedVector.H" #include "dimensionedVector.H"
#include "symmTensor.H" #include "symmTensor.H"

View File

@ -35,8 +35,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedTensor_H #ifndef Foam_dimensionedTensor_H
#define dimensionedTensor_H #define Foam_dimensionedTensor_H
#include "dimensionedVector.H" #include "dimensionedVector.H"
#include "dimensionedSymmTensor.H" #include "dimensionedSymmTensor.H"

View File

@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -25,11 +26,12 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedTypes_H #ifndef Foam_dimensionedTypes_H
#define dimensionedTypes_H #define Foam_dimensionedTypes_H
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "dimensionedLabel.H"
#include "dimensionedScalar.H" #include "dimensionedScalar.H"
#include "dimensionedVector.H" #include "dimensionedVector.H"
#include "dimensionedSphericalTensor.H" #include "dimensionedSphericalTensor.H"

View File

@ -34,8 +34,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef dimensionedVector_H #ifndef Foam_dimensionedVector_H
#define dimensionedVector_H #define Foam_dimensionedVector_H
#include "dimensionedScalar.H" #include "dimensionedScalar.H"
#include "vector.H" #include "vector.H"

View File

@ -282,15 +282,15 @@ inline Scalar negPart(const Scalar s) noexcept
} }
inline bool equal(const Scalar& s1, const Scalar& s2) inline bool equal(const Scalar& a, const Scalar& b)
{ {
return mag(s1 - s2) <= ScalarVSMALL; return mag(a - b) <= ScalarVSMALL;
} }
inline bool notEqual(const Scalar s1, const Scalar s2) inline bool notEqual(const Scalar a, const Scalar b)
{ {
return mag(s1 - s2) > ScalarVSMALL; return mag(a - b) > ScalarVSMALL;
} }

View File

@ -26,8 +26,8 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef doubleFloat_H #ifndef Foam_doubleFloat_H
#define doubleFloat_H #define Foam_doubleFloat_H
#include "label.H" #include "label.H"
#include "products.H" #include "products.H"
@ -41,14 +41,6 @@ namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Compare two values for equality
template<class T>
inline bool equal(const T& s1, const T& s2)
{
return s1 == s2;
}
#define MAXMINPOW(retType, type1, type2) \ #define MAXMINPOW(retType, type1, type2) \
\ \
MAXMIN(retType, type1, type2) \ MAXMIN(retType, type1, type2) \

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2016-2019 OpenCFD Ltd. Copyright (C) 2016-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -35,8 +35,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef foamEndian_H // Prefixed with 'foam' to avoid any name clashes #ifndef Foam_endian_H
#define foamEndian_H #define Foam_endian_H
#include <cstdint> #include <cstdint>
@ -75,10 +75,10 @@ public:
// Public Methods // Public Methods
//- Runtime check for big endian. //- Runtime check for big endian.
inline static bool isBig(); inline static bool isBig() noexcept;
//- Runtime check for little endian. //- Runtime check for little endian.
inline static bool isLittle(); inline static bool isLittle() noexcept;
//- Byte endian swapping for 32-bits //- Byte endian swapping for 32-bits
inline static uint32_t swap32(uint32_t); inline static uint32_t swap32(uint32_t);

View File

@ -40,7 +40,7 @@ License
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
inline bool Foam::endian::isBig() inline bool Foam::endian::isBig() noexcept
{ {
const short testBig = 0x0100; const short testBig = 0x0100;
@ -49,7 +49,7 @@ inline bool Foam::endian::isBig()
} }
inline bool Foam::endian::isLittle() inline bool Foam::endian::isLittle() noexcept
{ {
const short testLittle = 0x0001; const short testLittle = 0x0001;

View File

@ -132,6 +132,16 @@ inline constexpr label component(const label val, const direction) noexcept
} }
// * * * * * * * * * * * * * * * General Functions * * * * * * * * * * * * * //
//- Compare two values for equality
template<class T>
inline bool equal(const T& a, const T& b)
{
return (a == b);
}
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Struct labelOp Declaration Struct labelOp Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -39,8 +39,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef nullObject_H #ifndef Foam_nullObject_H
#define nullObject_H #define Foam_nullObject_H
#include "labelFwd.H" #include "labelFwd.H"
@ -101,37 +101,37 @@ public:
// Member Functions // Member Functions
//- A nullptr pointer content //- A nullptr pointer content
inline const void* pointer() const const void* pointer() const noexcept
{ {
return data_[0].ptr; return data_[0].ptr;
} }
//- Zero valued integer content //- Zero valued integer content
inline unsigned long value() const unsigned long value() const noexcept
{ {
return 0; return 0;
} }
//- No elements //- No elements
inline bool empty() const bool empty() const noexcept
{ {
return true; return true;
} }
//- Zero elements //- Zero elements
inline label size() const label size() const noexcept
{ {
return 0; return 0;
} }
//- No-op method (for HashTable replacement) //- No-op method (for HashTable replacement)
inline const NullObject& toc() const const NullObject& toc() const noexcept
{ {
return *this; return *this;
} }
//- No-op method (for HashTable replacement) //- No-op method (for HashTable replacement)
inline const NullObject& sortedToc() const const NullObject& sortedToc() const noexcept
{ {
return *this; return *this;
} }
@ -141,7 +141,7 @@ public:
//- Swallow assignment (cf, std::ignore) //- Swallow assignment (cf, std::ignore)
template<class T> template<class T>
inline const NullObject& operator=(const T&) const const NullObject& operator=(const T&) const
{ {
return *this; return *this;
} }

View File

@ -43,7 +43,7 @@ SeeAlso
#ifndef Foam_one_H #ifndef Foam_one_H
#define Foam_one_H #define Foam_one_H
#include "label.H" #include "labelFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -53,6 +53,7 @@ namespace Foam
// Forward Declarations // Forward Declarations
class zero; class zero;
class zero_one;
class Istream; class Istream;
class Ostream; class Ostream;
@ -124,7 +125,7 @@ public:
//- A static zero::null for dereferencing as a dummy element //- A static zero::null for dereferencing as a dummy element
static null dummy; static null dummy;
//- Null constructible //- Default construct
constexpr null() noexcept {} constexpr null() noexcept {}
//- Construct from Istream consumes no content. //- Construct from Istream consumes no content.
@ -132,6 +133,24 @@ public:
}; };
/*---------------------------------------------------------------------------*\
Class zero_one Declaration
\*---------------------------------------------------------------------------*/
//- Represents 0/1 concept, eg for tagged dispatch
class zero_one
{
public:
typedef zero_one value_type;
//- Default construct
constexpr zero_one() noexcept {}
//- Construct from Istream consumes no content.
explicit constexpr zero_one(Istream&) noexcept {}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Global zero (0) //- Global zero (0)

View File

@ -294,7 +294,7 @@ inline void Foam::janafThermo<EquationOfState>::operator+=
if if
( (
janafThermo<EquationOfState>::debug janafThermo<EquationOfState>::debug
&& notEqual(Tcommon_, jt.Tcommon_) && !equal(Tcommon_, jt.Tcommon_)
) )
{ {
FatalErrorInFunction FatalErrorInFunction
@ -375,7 +375,7 @@ inline Foam::janafThermo<EquationOfState> Foam::operator+
if if
( (
janafThermo<EquationOfState>::debug janafThermo<EquationOfState>::debug
&& notEqual(jt1.Tcommon_, jt2.Tcommon_) && !equal(jt1.Tcommon_, jt2.Tcommon_)
) )
{ {
FatalErrorInFunction FatalErrorInFunction
@ -456,7 +456,7 @@ inline Foam::janafThermo<EquationOfState> Foam::operator==
if if
( (
janafThermo<EquationOfState>::debug janafThermo<EquationOfState>::debug
&& notEqual(jt2.Tcommon_, jt1.Tcommon_) && !equal(jt2.Tcommon_, jt1.Tcommon_)
) )
{ {
FatalErrorInFunction FatalErrorInFunction