Added and verified support for 64bit labels

To compile with 64bit labels set

WM_LABEL_SIZE=64

in ~/OpenFOAM/dev/prefs.sh

source ~/.bashrc

then Allwmake in OpenFOAM-dev.

This will build into for example OpenFOAM-dev/platforms/linux64ClangDPInt64Opt

If WM_LABEL_SIZE is unset or set to 32:

WM_LABEL_SIZE=32

the build would be placed into OpenFOAM-dev/platforms/linux64ClangDPInt32Opt

Thus both 32bit and 64bit label builds can coexist without problem.
This commit is contained in:
Henry
2014-12-31 19:02:52 +00:00
parent 38998d5e1f
commit 325b003b6e
116 changed files with 1515 additions and 1242 deletions

View File

@ -115,7 +115,7 @@ private:
{ {
typedef typename Triangulation::Geom_traits Gt; typedef typename Triangulation::Geom_traits Gt;
typedef std::pair<const typename Triangulation::Point*, int> typedef std::pair<const typename Triangulation::Point*, label>
Point_3; Point_3;
struct Less_x_3 struct Less_x_3

View File

@ -450,7 +450,7 @@ Foam::DelaunayMesh<Triangulation>::createMesh
} }
label faceI = 0; label faceI = 0;
labelList verticesOnTriFace(3, -1); labelList verticesOnTriFace(3, label(-1));
face newFace(verticesOnTriFace); face newFace(verticesOnTriFace);
for for
@ -461,7 +461,7 @@ Foam::DelaunayMesh<Triangulation>::createMesh
) )
{ {
const Cell_handle c1(fit->first); const Cell_handle c1(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
const Cell_handle c2(c1->neighbor(oppositeVertex)); const Cell_handle c2(c1->neighbor(oppositeVertex));
// Do not output if face has neither opposite vertex as an internal // Do not output if face has neither opposite vertex as an internal

View File

@ -287,7 +287,7 @@ void Foam::DistributedDelaunayMesh<Triangulation>::findProcessorBoundaryCells
// Cell_handle cit = *vcit; // Cell_handle cit = *vcit;
// //
// // Index of infinite vertex in this cell. // // Index of infinite vertex in this cell.
// int i = cit->index(Triangulation::infinite_vertex()); // label i = cit->index(Triangulation::infinite_vertex());
// //
// Cell_handle c = cit->neighbor(i); // Cell_handle c = cit->neighbor(i);
// //
@ -333,7 +333,7 @@ void Foam::DistributedDelaunayMesh<Triangulation>::findProcessorBoundaryCells
if (Triangulation::is_infinite(cit)) if (Triangulation::is_infinite(cit))
{ {
// Index of infinite vertex in this cell. // Index of infinite vertex in this cell.
int i = cit->index(Triangulation::infinite_vertex()); label i = cit->index(Triangulation::infinite_vertex());
Cell_handle c = cit->neighbor(i); Cell_handle c = cit->neighbor(i);

View File

@ -497,7 +497,7 @@ void Foam::searchableSurfaceControl::cellSizeFunctionVertices
List<pointIndexHit> infoList(1, pointIndexHit()); List<pointIndexHit> infoList(1, pointIndexHit());
vectorField normals(1); vectorField normals(1);
labelList region(1, -1); labelList region(1, label(-1));
forAll(points, pI) forAll(points, pI)
{ {

View File

@ -43,7 +43,6 @@ SourceFiles
#include "CGALTriangulation3Ddefs.H" #include "CGALTriangulation3Ddefs.H"
#include "uint.H" #include "uint.H"
#include "ulong.H"
#include "searchableSurfaces.H" #include "searchableSurfaces.H"
#include "conformationSurfaces.H" #include "conformationSurfaces.H"
#include "cellShapeControl.H" #include "cellShapeControl.H"

View File

@ -172,7 +172,7 @@ void Foam::conformalVoronoiMesh::calcTetMesh
label faceI = 0; label faceI = 0;
labelList verticesOnTriFace(3, -1); labelList verticesOnTriFace(3, label(-1));
face newFace(verticesOnTriFace); face newFace(verticesOnTriFace);
@ -184,7 +184,7 @@ void Foam::conformalVoronoiMesh::calcTetMesh
) )
{ {
const Cell_handle c1(fit->first); const Cell_handle c1(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
const Cell_handle c2(c1->neighbor(oppositeVertex)); const Cell_handle c2(c1->neighbor(oppositeVertex));
if (c1->hasFarPoint() && c2->hasFarPoint()) if (c1->hasFarPoint() && c2->hasFarPoint())
@ -347,7 +347,7 @@ Foam::label Foam::conformalVoronoiMesh::mergeIdenticalDualVertices
) )
{ {
const Cell_handle c1(fit->first); const Cell_handle c1(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
const Cell_handle c2(c1->neighbor(oppositeVertex)); const Cell_handle c2(c1->neighbor(oppositeVertex));
if (is_infinite(c1) || is_infinite(c2)) if (is_infinite(c1) || is_infinite(c2))
@ -1070,7 +1070,7 @@ Foam::labelHashSet Foam::conformalVoronoiMesh::checkPolyMeshQuality
// Check for cells with one internal face only // Check for cells with one internal face only
labelList nInternalFaces(pMesh.nCells(), 0); labelList nInternalFaces(pMesh.nCells(), label(0));
for (label fI = 0; fI < pMesh.nInternalFaces(); fI++) for (label fI = 0; fI < pMesh.nInternalFaces(); fI++)
{ {
@ -1737,7 +1737,7 @@ void Foam::conformalVoronoiMesh::createFacesOwnerNeighbourAndPatches
const label nPatches = patchNames.size(); const label nPatches = patchNames.size();
labelList procNeighbours(nPatches, -1); labelList procNeighbours(nPatches, label(-1));
forAll(procNeighbours, patchI) forAll(procNeighbours, patchI)
{ {
if (patchDicts[patchI].found("neighbProcNo")) if (patchDicts[patchI].found("neighbProcNo"))
@ -2580,7 +2580,7 @@ void Foam::conformalVoronoiMesh::removeUnusedPoints
label pointI = 0; label pointI = 0;
labelList oldToNew(pts.size(), -1); labelList oldToNew(pts.size(), label(-1));
// Move all of the used points to the start of the pointField and // Move all of the used points to the start of the pointField and
// truncate it // truncate it
@ -2637,7 +2637,7 @@ Foam::labelList Foam::conformalVoronoiMesh::removeUnusedCells
label cellI = 0; label cellI = 0;
labelList oldToNew(cellUsed.size(), -1); labelList oldToNew(cellUsed.size(), label(-1));
// Move all of the used cellCentres to the start of the pointField and // Move all of the used cellCentres to the start of the pointField and
// truncate it // truncate it

View File

@ -922,7 +922,7 @@ void Foam::conformalVoronoiMesh::createMultipleEdgePointGroup
const List<extendedFeatureEdgeMesh::sideVolumeType>& normalVolumeTypes = const List<extendedFeatureEdgeMesh::sideVolumeType>& normalVolumeTypes =
feMesh.normalVolumeTypes(); feMesh.normalVolumeTypes();
labelList nNormalTypes(4, 0); labelList nNormalTypes(4, label(0));
forAll(edNormalIs, edgeNormalI) forAll(edNormalIs, edgeNormalI)
{ {

View File

@ -90,7 +90,7 @@ inline Foam::scalar Foam::conformalVoronoiMesh::averageAnyCellSize
label nProducts = 0; label nProducts = 0;
const Cell_handle c(fit->first); const Cell_handle c(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
for (label i = 0; i < 3; i++) for (label i = 0; i < 3; i++)
{ {
@ -456,7 +456,7 @@ inline Foam::List<Foam::label> Foam::conformalVoronoiMesh::processorsAttached
DynamicList<label> procsAttached(8); DynamicList<label> procsAttached(8);
const Cell_handle c1(fit->first); const Cell_handle c1(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
const Cell_handle c2(c1->neighbor(oppositeVertex)); const Cell_handle c2(c1->neighbor(oppositeVertex));
FixedList<label, 4> c1Procs(CGAL::indexedCellOps::processorsAttached(c1)); FixedList<label, 4> c1Procs(CGAL::indexedCellOps::processorsAttached(c1));
@ -486,7 +486,7 @@ inline bool Foam::conformalVoronoiMesh::isParallelDualEdge
) const ) const
{ {
const Cell_handle c1(fit->first); const Cell_handle c1(fit->first);
const int oppositeVertex = fit->second; const label oppositeVertex = fit->second;
return return
( (

View File

@ -542,7 +542,7 @@ void Foam::conformalVoronoiMesh::reorderPoints
Info<< incrIndent << indent << "Reordering points into internal/external" Info<< incrIndent << indent << "Reordering points into internal/external"
<< endl; << endl;
labelList oldToNew(points.size(), 0); labelList oldToNew(points.size(), label(0));
// Find points that are internal // Find points that are internal
for (label fI = nInternalFaces; fI < faces.size(); ++fI) for (label fI = nInternalFaces; fI < faces.size(); ++fI)
@ -645,8 +645,8 @@ void Foam::conformalVoronoiMesh::reorderProcessorPatches
// } // }
// Rotation on new faces. // Rotation on new faces.
labelList rotation(faces.size(), 0); labelList rotation(faces.size(), label(0));
labelList faceMap(faces.size(), -1); labelList faceMap(faces.size(), label(-1));
PstreamBuffers pBufs(Pstream::nonBlocking); PstreamBuffers pBufs(Pstream::nonBlocking);
@ -692,8 +692,8 @@ void Foam::conformalVoronoiMesh::reorderProcessorPatches
const label patchStartFace = const label patchStartFace =
readLabel(patchDicts[patchI].lookup("startFace")); readLabel(patchDicts[patchI].lookup("startFace"));
labelList patchFaceMap(nPatchFaces, -1); labelList patchFaceMap(nPatchFaces, label(-1));
labelList patchFaceRotation(nPatchFaces, 0); labelList patchFaceRotation(nPatchFaces, label(0));
bool changed = refCast<const processorPolyPatch>(pp).order bool changed = refCast<const processorPolyPatch>(pp).order
( (

View File

@ -83,7 +83,7 @@ bool Foam::conformalVoronoiMesh::distributeBackground(const Triangulation& mesh)
meshSearch cellSearch(bMesh, polyMesh::FACEPLANES); meshSearch cellSearch(bMesh, polyMesh::FACEPLANES);
labelList cellVertices(bMesh.nCells(), 0); labelList cellVertices(bMesh.nCells(), label(0));
for for
( (

View File

@ -218,7 +218,7 @@ Foam::labelList Foam::conformalVoronoiMesh::calcCellZones
const pointField& cellCentres const pointField& cellCentres
) const ) const
{ {
labelList cellToSurface(cellCentres.size(), -1); labelList cellToSurface(cellCentres.size(), label(-1));
const PtrList<surfaceZonesInfo>& surfZones = const PtrList<surfaceZonesInfo>& surfZones =
geometryToConformTo().surfZones(); geometryToConformTo().surfZones();
@ -327,7 +327,7 @@ void Foam::conformalVoronoiMesh::calcFaceZones
const labelList& faceOwner = mesh.faceOwner(); const labelList& faceOwner = mesh.faceOwner();
const labelList& faceNeighbour = mesh.faceNeighbour(); const labelList& faceNeighbour = mesh.faceNeighbour();
labelList neiFaceOwner(mesh.nFaces() - mesh.nInternalFaces(), -1); labelList neiFaceOwner(mesh.nFaces() - mesh.nInternalFaces(), label(-1));
const polyBoundaryMesh& patches = mesh.boundaryMesh(); const polyBoundaryMesh& patches = mesh.boundaryMesh();

View File

@ -83,7 +83,7 @@ bool Foam::featurePointConformer::createSpecialisedFeaturePoint
const labelListList& edgeNormals = feMesh.edgeNormals(); const labelListList& edgeNormals = feMesh.edgeNormals();
label concaveEdgeI = -1; label concaveEdgeI = -1;
labelList convexEdgesI(2, -1); labelList convexEdgesI(2, label(-1));
label nConvex = 0; label nConvex = 0;
forAll(pEds, i) forAll(pEds, i)
@ -521,7 +521,7 @@ bool Foam::featurePointConformer::createSpecialisedFeaturePoint
const labelListList& edgeNormals = feMesh.edgeNormals(); const labelListList& edgeNormals = feMesh.edgeNormals();
label convexEdgeI = -1; label convexEdgeI = -1;
labelList concaveEdgesI(2, -1); labelList concaveEdgesI(2, label(-1));
label nConcave = 0; label nConcave = 0;
forAll(pEds, i) forAll(pEds, i)

View File

@ -97,7 +97,7 @@ class indexedCell
// < 0 && > ctFar : the (global) index of a dual point on a processor // < 0 && > ctFar : the (global) index of a dual point on a processor
// face // face
int index_; Foam::label index_;
//- The number of times that this Delaunay cell has been limited //- The number of times that this Delaunay cell has been limited
// during filtering // during filtering
@ -154,9 +154,9 @@ public:
// Member Functions // Member Functions
inline int& cellIndex(); inline Foam::label& cellIndex();
inline int cellIndex() const; inline Foam::label cellIndex() const;
#ifdef CGAL_INEXACT #ifdef CGAL_INEXACT
inline const Foam::point& dual(); inline const Foam::point& dual();

View File

@ -94,14 +94,14 @@ CGAL::indexedCell<Gt, Cb>::indexedCell
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Gt, class Cb> template<class Gt, class Cb>
int& CGAL::indexedCell<Gt, Cb>::cellIndex() Foam::label& CGAL::indexedCell<Gt, Cb>::cellIndex()
{ {
return index_; return index_;
} }
template<class Gt, class Cb> template<class Gt, class Cb>
int CGAL::indexedCell<Gt, Cb>::cellIndex() const Foam::label CGAL::indexedCell<Gt, Cb>::cellIndex() const
{ {
return index_; return index_;
} }

View File

@ -112,7 +112,7 @@ class indexedVertex
//- The index for this Delaunay vertex. For referred vertices, the //- The index for this Delaunay vertex. For referred vertices, the
// index is negative for vertices that are the outer (slave) of point // index is negative for vertices that are the outer (slave) of point
// pairs // pairs
int index_; Foam::label index_;
//- Number of the processor that owns this vertex //- Number of the processor that owns this vertex
int processor_; int processor_;
@ -154,7 +154,7 @@ public:
inline indexedVertex inline indexedVertex
( (
const Point& p, const Point& p,
int index, Foam::label index,
vertexType type, vertexType type,
int processor int processor
); );
@ -162,7 +162,7 @@ public:
inline indexedVertex inline indexedVertex
( (
const Foam::point& p, const Foam::point& p,
int index, Foam::label index,
vertexType type, vertexType type,
int processor int processor
); );
@ -174,9 +174,9 @@ public:
// Member Functions // Member Functions
inline int& index(); inline Foam::label& index();
inline int index() const; inline Foam::label index() const;
inline vertexType& type(); inline vertexType& type();

View File

@ -91,7 +91,7 @@ template<class Gt, class Vb>
inline CGAL::indexedVertex<Gt, Vb>::indexedVertex inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
( (
const Point& p, const Point& p,
int index, Foam::label index,
vertexType type, vertexType type,
int processor int processor
) )
@ -110,7 +110,7 @@ template<class Gt, class Vb>
inline CGAL::indexedVertex<Gt, Vb>::indexedVertex inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
( (
const Foam::point& p, const Foam::point& p,
int index, Foam::label index,
vertexType type, vertexType type,
int processor int processor
) )
@ -154,14 +154,14 @@ inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(Cell_handle f)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Gt, class Vb> template<class Gt, class Vb>
inline int& CGAL::indexedVertex<Gt, Vb>::index() inline Foam::label& CGAL::indexedVertex<Gt, Vb>::index()
{ {
return index_; return index_;
} }
template<class Gt, class Vb> template<class Gt, class Vb>
inline int CGAL::indexedVertex<Gt, Vb>::index() const inline Foam::label CGAL::indexedVertex<Gt, Vb>::index() const
{ {
return index_; return index_;
} }

View File

@ -299,7 +299,7 @@ bool Foam::autoDensity::fillBox
{ {
const conformationSurfaces& geometry = geometryToConformTo(); const conformationSurfaces& geometry = geometryToConformTo();
unsigned int initialSize = initialPoints.size(); label initialSize = initialPoints.size();
scalar maxCellSize = -GREAT; scalar maxCellSize = -GREAT;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -113,7 +113,7 @@ Foam::searchableBoxFeatures::features() const
surfacePoints[treeBoundBox::edges[eI].end()] surfacePoints[treeBoundBox::edges[eI].end()]
- surfacePoints[treeBoundBox::edges[eI].start()]; - surfacePoints[treeBoundBox::edges[eI].start()];
normalDirections[eI] = labelList(2, 0); normalDirections[eI] = labelList(2, label(0));
for (label j = 0; j < 2; ++j) for (label j = 0; j < 2; ++j)
{ {
const vector cross = const vector cross =

View File

@ -131,7 +131,7 @@ Foam::searchablePlateFeatures::features() const
surface().points()()[edges[eI].end()] surface().points()()[edges[eI].end()]
- surface().points()()[edges[eI].start()]; - surface().points()()[edges[eI].start()];
normalDirections[eI] = labelList(2, 0); normalDirections[eI] = labelList(2, label(0));
for (label j = 0; j < 2; ++j) for (label j = 0; j < 2; ++j)
{ {
const vector cross = const vector cross =

View File

@ -28,7 +28,6 @@ License
#include "transform.H" #include "transform.H"
#include "IFstream.H" #include "IFstream.H"
#include "uint.H" #include "uint.H"
#include "ulong.H"
namespace Foam namespace Foam
{ {

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -43,7 +43,7 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void Foam::writeFuns::swapWord(label& word32) void Foam::writeFuns::swapWord(int32_t& word32)
{ {
char* mem = reinterpret_cast<char*>(&word32); char* mem = reinterpret_cast<char*>(&word32);
@ -57,9 +57,9 @@ void Foam::writeFuns::swapWord(label& word32)
} }
void Foam::writeFuns::swapWords(const label nWords, label* words32) void Foam::writeFuns::swapWords(const label nWords, int32_t* words32)
{ {
for (label i = 0; i < nWords; i++) for (label i=0; i<nWords; i++)
{ {
swapWord(words32[i]); swapWord(words32[i]);
} }
@ -75,9 +75,9 @@ void Foam::writeFuns::write
{ {
if (binary) if (binary)
{ {
# ifdef LITTLEENDIAN #ifdef LITTLEENDIAN
swapWords(fField.size(), reinterpret_cast<label*>(fField.begin())); swapWords(fField.size(), reinterpret_cast<int32_t*>(fField.begin()));
# endif #endif
os.write os.write
( (
@ -111,7 +111,6 @@ void Foam::writeFuns::write
) )
{ {
List<floatScalar>& fld = fField.shrink(); List<floatScalar>& fld = fField.shrink();
write(os, binary, fld); write(os, binary, fld);
} }
@ -125,9 +124,13 @@ void Foam::writeFuns::write
{ {
if (binary) if (binary)
{ {
# ifdef LITTLEENDIAN #ifdef LITTLEENDIAN
swapWords(elems.size(), reinterpret_cast<label*>(elems.begin())); swapWords
# endif (
(sizeof(label)/4)*elems.size(),
reinterpret_cast<int32_t*>(elems.begin())
);
#endif
os.write os.write
( (
reinterpret_cast<char*>(elems.begin()), reinterpret_cast<char*>(elems.begin()),
@ -160,12 +163,10 @@ void Foam::writeFuns::write
) )
{ {
labelList& fld = elems.shrink(); labelList& fld = elems.shrink();
write(os, binary, fld); write(os, binary, fld);
} }
// Store vector in dest.
void Foam::writeFuns::insert(const point& pt, DynamicList<floatScalar>& dest) void Foam::writeFuns::insert(const point& pt, DynamicList<floatScalar>& dest)
{ {
dest.append(float(pt.x())); dest.append(float(pt.x()));
@ -174,7 +175,6 @@ void Foam::writeFuns::insert(const point& pt, DynamicList<floatScalar>& dest)
} }
// Store labelList in dest.
void Foam::writeFuns::insert(const labelList& source, DynamicList<label>& dest) void Foam::writeFuns::insert(const labelList& source, DynamicList<label>& dest)
{ {
forAll(source, i) forAll(source, i)
@ -184,7 +184,6 @@ void Foam::writeFuns::insert(const labelList& source, DynamicList<label>& dest)
} }
// Store scalarField in dest
void Foam::writeFuns::insert void Foam::writeFuns::insert
( (
const List<scalar>& source, const List<scalar>& source,
@ -198,7 +197,6 @@ void Foam::writeFuns::insert
} }
// Store scalarField (indexed through map) in dest
void Foam::writeFuns::insert void Foam::writeFuns::insert
( (
const labelList& map, const labelList& map,

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,6 +27,12 @@ Class
Description Description
Various functions for collecting and writing binary data. Various functions for collecting and writing binary data.
The LITTLE_ENDIAN is based on 32bit words.
It is not clear how 64bit labels should be handled, currently they are
split into two 32bit words and swapWord applied to these two.
writeFuns should be a namespace rather than a class.
SourceFiles SourceFiles
writeFuns.C writeFuns.C
@ -41,43 +47,54 @@ SourceFiles
#include "DynamicList.H" #include "DynamicList.H"
#include "point.H" #include "point.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class writeFuns Declaration Class writeFuns Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class writeFuns class writeFuns
{ {
//- Swap halves of word. // Private member functions
static void swapWord(label& word32);
static void swapWords(const label nWords, label* words32); //- Swap halves of word
static void swapWord(int32_t& word32);
//- Swap halves of word
static void swapWords(const label nWords, int32_t* words32);
public: public:
//- Write ascii or binary. If binary optionally in-place swaps argument //- Write floats ascii or binary.
// If binary optionally in-place swaps argument
static void write(std::ostream&, const bool, DynamicList<floatScalar>&); static void write(std::ostream&, const bool, DynamicList<floatScalar>&);
//- Write labels ascii or binary.
// If binary optionally in-place swaps argument
static void write(std::ostream&, const bool, DynamicList<label>&); static void write(std::ostream&, const bool, DynamicList<label>&);
//- Write ascii or binary. If binary optionally in-place swaps argument //- Write floats ascii or binary.
// If binary optionally in-place swaps argument
static void write(std::ostream&, const bool, List<floatScalar>&); static void write(std::ostream&, const bool, List<floatScalar>&);
//- Write labels ascii or binary.
// If binary optionally in-place swaps argument
static void write(std::ostream&, const bool, labelList&); static void write(std::ostream&, const bool, labelList&);
//- Append point to DynamicList //- Append point to given DynamicList
static void insert(const point&, DynamicList<floatScalar>& dest); static void insert(const point&, DynamicList<floatScalar>& dest);
//- Append elements of labelList to DynamicList //- Append elements of labelList to given DynamicList
static void insert(const labelList&, DynamicList<label>&); static void insert(const labelList&, DynamicList<label>&);
//- Append elements of scalarList to DynamicList
//- Append elements of scalarList to given DynamicList
static void insert(const List<scalar>&, DynamicList<floatScalar>&); static void insert(const List<scalar>&, DynamicList<floatScalar>&);
//- Append elements of scalarList to DynamicList using map //- Append elements of scalarList to given DynamicList using map
static void insert static void insert
( (
const labelList& map, const labelList& map,
@ -85,16 +102,16 @@ public:
DynamicList<floatScalar>& DynamicList<floatScalar>&
); );
//- Append points to DynamicList of floats //- Append points to given DynamicList of floats
static void insert(const List<point>& source, DynamicList<floatScalar>&); static void insert(const List<point>& source, DynamicList<floatScalar>&);
//- As above but using map
//- Append points to given DynamicList of floats using map
static void insert static void insert
( (
const labelList& map, const labelList& map,
const List<point>& source, const List<point>& source,
DynamicList<floatScalar>& DynamicList<floatScalar>&
); );
}; };

View File

@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES(
ADD_DEFINITIONS( ADD_DEFINITIONS(
-DWM_$ENV{WM_PRECISION_OPTION} -DWM_$ENV{WM_PRECISION_OPTION}
-DWM_LABEL_SIZE=$ENV{WM_LABEL_SIZE}
) )
# Set output library destination to plugin directory # Set output library destination to plugin directory

View File

@ -31,7 +31,6 @@ License
#include "cellModeller.H" #include "cellModeller.H"
#include "vtkOpenFOAMPoints.H" #include "vtkOpenFOAMPoints.H"
#include "Swap.H" #include "Swap.H"
#include "longLong.H"
// VTK includes // VTK includes
#include "vtkCellArray.h" #include "vtkCellArray.h"

View File

@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES(
ADD_DEFINITIONS( ADD_DEFINITIONS(
-DWM_$ENV{WM_PRECISION_OPTION} -DWM_$ENV{WM_PRECISION_OPTION}
-DWM_LABEL_SIZE=$ENV{WM_LABEL_SIZE}
) )
# Set output library destination to plugin directory # Set output library destination to plugin directory

View File

@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES(
ADD_DEFINITIONS( ADD_DEFINITIONS(
-DWM_$ENV{WM_PRECISION_OPTION} -DWM_$ENV{WM_PRECISION_OPTION}
-DWM_LABEL_SIZE=$ENV{WM_LABEL_SIZE}
) )
# Set output library destination to plugin directory # Set output library destination to plugin directory

View File

@ -31,7 +31,6 @@ License
#include "cellModeller.H" #include "cellModeller.H"
#include "vtkOpenFOAMPoints.H" #include "vtkOpenFOAMPoints.H"
#include "Swap.H" #include "Swap.H"
#include "longLong.H"
// VTK includes // VTK includes
#include "vtkCellArray.h" #include "vtkCellArray.h"

View File

@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES(
ADD_DEFINITIONS( ADD_DEFINITIONS(
-DWM_$ENV{WM_PRECISION_OPTION} -DWM_$ENV{WM_PRECISION_OPTION}
-DWM_LABEL_SIZE=$ENV{WM_LABEL_SIZE}
) )
# Set output library destination to plugin directory # Set output library destination to plugin directory

View File

@ -74,6 +74,10 @@ export WM_ARCH_OPTION=64
# WM_PRECISION_OPTION = DP | SP # WM_PRECISION_OPTION = DP | SP
export WM_PRECISION_OPTION=DP export WM_PRECISION_OPTION=DP
#- Label size:
# WM_LABEL_SIZE = 32 | 64
export WM_LABEL_SIZE=32
#- Optimised, debug, profiling: #- Optimised, debug, profiling:
# WM_COMPILE_OPTION = Opt | Debug | Prof # WM_COMPILE_OPTION = Opt | Debug | Prof
export WM_COMPILE_OPTION=Opt export WM_COMPILE_OPTION=Opt

View File

@ -30,7 +30,7 @@
##------------------------------------------------------------------------------ ##------------------------------------------------------------------------------
set boost_version=boost-system set boost_version=boost-system
set cgal_version=CGAL-4.3 set cgal_version=CGAL-4.5.1
setenv BOOST_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$boost_version setenv BOOST_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$boost_version
setenv CGAL_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cgal_version setenv CGAL_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cgal_version

View File

@ -30,7 +30,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
boost_version=boost-system boost_version=boost-system
cgal_version=CGAL-4.3 cgal_version=CGAL-4.5.1
export BOOST_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$boost_version export BOOST_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$boost_version
export CGAL_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cgal_version export CGAL_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cgal_version

View File

@ -34,6 +34,6 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
export SCOTCH_VERSION=scotch_6.0.0 export SCOTCH_VERSION=scotch_6.0.0
export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$SCOTCH_VERSION export SCOTCH_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_LABEL_OPTION/$SCOTCH_VERSION
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

View File

@ -142,7 +142,8 @@ setenv FOAM_JOB_DIR $WM_PROJECT_INST_DIR/jobControl
# wmake configuration # wmake configuration
setenv WM_DIR $WM_PROJECT_DIR/wmake setenv WM_DIR $WM_PROJECT_DIR/wmake
setenv WM_LINK_LANGUAGE c++ setenv WM_LINK_LANGUAGE c++
setenv WM_OPTIONS $WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_COMPILE_OPTION setenv WM_LABEL_OPTION Int$WM_LABEL_SIZE
setenv WM_OPTIONS $WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_COMPILE_OPTION
# base executables/libraries # base executables/libraries
setenv FOAM_APPBIN $WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin setenv FOAM_APPBIN $WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin

View File

@ -170,7 +170,8 @@ export FOAM_JOB_DIR=$WM_PROJECT_INST_DIR/jobControl
# wmake configuration # wmake configuration
export WM_DIR=$WM_PROJECT_DIR/wmake export WM_DIR=$WM_PROJECT_DIR/wmake
export WM_LINK_LANGUAGE=c++ export WM_LINK_LANGUAGE=c++
export WM_OPTIONS=$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_COMPILE_OPTION export WM_LABEL_OPTION=Int$WM_LABEL_SIZE
export WM_OPTIONS=$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_COMPILE_OPTION
# base executables/libraries # base executables/libraries
export FOAM_APPBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin export FOAM_APPBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin

View File

@ -74,6 +74,10 @@ setenv WM_ARCH_OPTION 64
# WM_PRECISION_OPTION = DP | SP # WM_PRECISION_OPTION = DP | SP
setenv WM_PRECISION_OPTION DP setenv WM_PRECISION_OPTION DP
#- Label size:
# WM_LABEL_SIZE = 32 | 64
setenv WM_LABEL_SIZE 32
#- Optimised, debug, profiling: #- Optimised, debug, profiling:
# WM_COMPILE_OPTION = Opt | Debug | Prof # WM_COMPILE_OPTION = Opt | Debug | Prof
setenv WM_COMPILE_OPTION Opt setenv WM_COMPILE_OPTION Opt

View File

@ -327,7 +327,7 @@ void Foam::fileMonitor::checkFiles() const
else if (FD_ISSET(watcher_->inotifyFd_, &fdSet)) else if (FD_ISSET(watcher_->inotifyFd_, &fdSet))
{ {
// Read events // Read events
ssize_t nBytes = read ssize_t nBytes = ::read
( (
watcher_->inotifyFd_, watcher_->inotifyFd_,
buffer, buffer,

View File

@ -16,11 +16,16 @@ $(chars)/char/charIO.C
$(chars)/wchar/wcharIO.C $(chars)/wchar/wcharIO.C
ints = primitives/ints ints = primitives/ints
$(ints)/int/intIO.C $(ints)/uint32/uint32.C
$(ints)/uint32/uint32IO.C
$(ints)/uint64/uint64.C
$(ints)/uint64/uint64IO.C
$(ints)/uint/uintIO.C $(ints)/uint/uintIO.C
$(ints)/long/longIO.C $(ints)/int32/int32.C
$(ints)/longLong/longLongIO.C $(ints)/int32/int32IO.C
$(ints)/ulong/ulongIO.C $(ints)/int64/int64.C
$(ints)/int64/int64IO.C
$(ints)/int/intIO.C
$(ints)/label/label.C $(ints)/label/label.C
$(ints)/uLabel/uLabel.C $(ints)/uLabel/uLabel.C
$(ints)/lists/labelIOList.C $(ints)/lists/labelIOList.C

View File

@ -27,7 +27,6 @@ License
#include "DLListBase.H" #include "DLListBase.H"
#include "IOstreams.H" #include "IOstreams.H"
#include "long.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //

View File

@ -122,8 +122,11 @@ public:
const bool quoted=true const bool quoted=true
) = 0; ) = 0;
//- Write label //- Write int32_t
virtual Ostream& write(const label) = 0; virtual Ostream& write(const int32_t) = 0;
//- Write int64_t
virtual Ostream& write(const int64_t) = 0;
//- Write floatScalar //- Write floatScalar
virtual Ostream& write(const floatScalar) = 0; virtual Ostream& write(const floatScalar) = 0;

View File

@ -254,7 +254,15 @@ Foam::Ostream& Foam::UOPstream::writeQuoted
} }
Foam::Ostream& Foam::UOPstream::write(const label val) Foam::Ostream& Foam::UOPstream::write(const int32_t val)
{
write(char(token::LABEL));
writeToBuffer(val);
return *this;
}
Foam::Ostream& Foam::UOPstream::write(const int64_t val)
{ {
write(char(token::LABEL)); write(char(token::LABEL));
writeToBuffer(val); writeToBuffer(val);

View File

@ -156,8 +156,11 @@ public:
const bool quoted=true const bool quoted=true
); );
//- Write label //- Write int32_t
Ostream& write(const label); virtual Ostream& write(const int32_t);
//- Write int64_t
Ostream& write(const int64_t);
//- Write floatScalar //- Write floatScalar
Ostream& write(const floatScalar); Ostream& write(const floatScalar);

View File

@ -409,7 +409,12 @@ Foam::UPstream::treeCommunication_(10);
// Allocate a serial communicator. This gets overwritten in parallel mode // Allocate a serial communicator. This gets overwritten in parallel mode
// (by UPstream::setParRun()) // (by UPstream::setParRun())
Foam::UPstream::communicator serialComm(-1, Foam::labelList(1, 0), false); Foam::UPstream::communicator serialComm
(
-1,
Foam::labelList(1, Foam::label(0)),
false
);

View File

@ -413,7 +413,7 @@ public:
} }
//- Process ID of given process index //- Process ID of given process index
static List<int>& procID(int communicator) static List<int>& procID(label communicator)
{ {
return procIDs_[communicator]; return procIDs_[communicator];
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,16 +31,10 @@ Description
#include "PstreamCombineReduceOps.H" #include "PstreamCombineReduceOps.H"
#include "UPstream.H" #include "UPstream.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
//template<template<class> class ListType, class T>
template<class Container, class T> template<class Container, class T>
void Pstream::exchange void Foam::Pstream::exchange
( (
const List<Container>& sendBufs, const List<Container>& sendBufs,
List<Container>& recvBufs, List<Container>& recvBufs,
@ -55,7 +49,7 @@ void Pstream::exchange
FatalErrorIn FatalErrorIn
( (
"Pstream::exchange(..)" "Pstream::exchange(..)"
) << "Continuous data only." << Foam::abort(FatalError); ) << "Continuous data only." << sizeof(T) << Foam::abort(FatalError);
} }
if (sendBufs.size() != UPstream::nProcs(comm)) if (sendBufs.size() != UPstream::nProcs(comm))
@ -153,8 +147,4 @@ void Pstream::exchange
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -350,8 +350,8 @@ Foam::Istream& Foam::ISstream::read(token& t)
{ {
if (asLabel) if (asLabel)
{ {
label labelVal; label labelVal = 0;
if (readLabel(buf, labelVal)) if (Foam::read(buf, labelVal))
{ {
t = labelVal; t = labelVal;
} }
@ -367,21 +367,6 @@ Foam::Istream& Foam::ISstream::read(token& t)
{ {
t.setBad(); t.setBad();
} }
// ---------------------------------------
// this would also be possible if desired:
// ---------------------------------------
// // return as a label when possible
// // eg, 1E6 -> 1000000
// if (scalarVal <= labelMax && scalarVal >= labelMin)
// {
// label labelVal(scalarVal);
//
// if (labelVal == scalarVal)
// {
// t = labelVal;
// }
// }
} }
} }
else else

View File

@ -183,7 +183,15 @@ Foam::Ostream& Foam::OSstream::writeQuoted
} }
Foam::Ostream& Foam::OSstream::write(const label val) Foam::Ostream& Foam::OSstream::write(const int32_t val)
{
os_ << val;
setState(os_.rdstate());
return *this;
}
Foam::Ostream& Foam::OSstream::write(const int64_t val)
{ {
os_ << val; os_ << val;
setState(os_.rdstate()); setState(os_.rdstate());

View File

@ -130,8 +130,11 @@ public:
const bool quoted=true const bool quoted=true
); );
//- Write label //- Write int32_t
virtual Ostream& write(const label); virtual Ostream& write(const int32_t);
//- Write int64_t
virtual Ostream& write(const int64_t);
//- Write floatScalar //- Write floatScalar
virtual Ostream& write(const floatScalar); virtual Ostream& write(const floatScalar);

View File

@ -137,7 +137,14 @@ Foam::Ostream& Foam::prefixOSstream::writeQuoted
} }
Foam::Ostream& Foam::prefixOSstream::write(const label val) Foam::Ostream& Foam::prefixOSstream::write(const int32_t val)
{
checkWritePrefix();
return OSstream::write(val);
}
Foam::Ostream& Foam::prefixOSstream::write(const int64_t val)
{ {
checkWritePrefix(); checkWritePrefix();
return OSstream::write(val); return OSstream::write(val);

View File

@ -121,8 +121,11 @@ public:
const bool quoted=true const bool quoted=true
); );
//- Write label //- Write int32_t
virtual Ostream& write(const label); virtual Ostream& write(const int32_t);
//- Write int64_t
virtual Ostream& write(const int64_t);
//- Write floatScalar //- Write floatScalar
virtual Ostream& write(const floatScalar); virtual Ostream& write(const floatScalar);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,13 +25,13 @@ License
#include "dlLibraryTable.H" #include "dlLibraryTable.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "long.H" #include "int.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(dlLibraryTable, 0); defineTypeNameAndDebug(dlLibraryTable, 0);
} }
@ -63,7 +63,7 @@ Foam::dlLibraryTable::~dlLibraryTable()
{ {
Info<< "dlLibraryTable::~dlLibraryTable() : closing " Info<< "dlLibraryTable::~dlLibraryTable() : closing "
<< libNames_[i] << libNames_[i]
<< " with handle " << long(libPtrs_[i]) << endl; << " with handle " << uintptr_t(libPtrs_[i]) << endl;
} }
dlClose(libPtrs_[i]); dlClose(libPtrs_[i]);
} }
@ -86,7 +86,7 @@ bool Foam::dlLibraryTable::open
if (debug) if (debug)
{ {
Info<< "dlLibraryTable::open : opened " << functionLibName Info<< "dlLibraryTable::open : opened " << functionLibName
<< " resulting in handle " << long(functionLibPtr) << endl; << " resulting in handle " << uintptr_t(functionLibPtr) << endl;
} }
if (!functionLibPtr) if (!functionLibPtr)
@ -137,7 +137,7 @@ bool Foam::dlLibraryTable::close
if (debug) if (debug)
{ {
Info<< "dlLibraryTable::close : closing " << functionLibName Info<< "dlLibraryTable::close : closing " << functionLibName
<< " with handle " << long(libPtrs_[index]) << endl; << " with handle " << uintptr_t(libPtrs_[index]) << endl;
} }
bool ok = dlClose(libPtrs_[index]); bool ok = dlClose(libPtrs_[index]);

View File

@ -530,7 +530,7 @@ TMP_UNARY_FUNCTION(Type, average)
#define G_UNARY_FUNCTION(ReturnType, gFunc, Func, rFunc) \ #define G_UNARY_FUNCTION(ReturnType, gFunc, Func, rFunc) \
\ \
template<class Type> \ template<class Type> \
ReturnType gFunc(const UList<Type>& f, const int comm) \ ReturnType gFunc(const UList<Type>& f, const label comm) \
{ \ { \
ReturnType res = Func(f); \ ReturnType res = Func(f); \
reduce(res, rFunc##Op<Type>(), Pstream::msgType(), comm); \ reduce(res, rFunc##Op<Type>(), Pstream::msgType(), comm); \
@ -554,7 +554,7 @@ scalar gSumProd
( (
const UList<Type>& f1, const UList<Type>& f1,
const UList<Type>& f2, const UList<Type>& f2,
const int comm const label comm
) )
{ {
scalar SumProd = sumProd(f1, f2); scalar SumProd = sumProd(f1, f2);
@ -567,7 +567,7 @@ Type gSumCmptProd
( (
const UList<Type>& f1, const UList<Type>& f1,
const UList<Type>& f2, const UList<Type>& f2,
const int comm const label comm
) )
{ {
Type SumProd = sumCmptProd(f1, f2); Type SumProd = sumCmptProd(f1, f2);
@ -579,7 +579,7 @@ template<class Type>
Type gAverage Type gAverage
( (
const UList<Type>& f, const UList<Type>& f,
const int comm const label comm
) )
{ {
label n = f.size(); label n = f.size();

View File

@ -212,7 +212,7 @@ TMP_UNARY_FUNCTION(Type, average)
#define G_UNARY_FUNCTION(ReturnType, gFunc, Func, rFunc) \ #define G_UNARY_FUNCTION(ReturnType, gFunc, Func, rFunc) \
\ \
template<class Type> \ template<class Type> \
ReturnType gFunc(const UList<Type>& f, const int comm = UPstream::worldComm); \ ReturnType gFunc(const UList<Type>& f, const label comm = UPstream::worldComm);\
TMP_UNARY_FUNCTION(ReturnType, gFunc) TMP_UNARY_FUNCTION(ReturnType, gFunc)
G_UNARY_FUNCTION(Type, gMax, max, max) G_UNARY_FUNCTION(Type, gMax, max, max)
@ -231,7 +231,7 @@ scalar gSumProd
( (
const UList<Type>& f1, const UList<Type>& f1,
const UList<Type>& f2, const UList<Type>& f2,
const int comm = UPstream::worldComm const label comm = UPstream::worldComm
); );
template<class Type> template<class Type>
@ -239,14 +239,14 @@ Type gSumCmptProd
( (
const UList<Type>& f1, const UList<Type>& f1,
const UList<Type>& f2, const UList<Type>& f2,
const int comm = UPstream::worldComm const label comm = UPstream::worldComm
); );
template<class Type> template<class Type>
Type gAverage Type gAverage
( (
const UList<Type>& f, const UList<Type>& f,
const int comm = UPstream::worldComm const label comm = UPstream::worldComm
); );
TMP_UNARY_FUNCTION(Type, gAverage) TMP_UNARY_FUNCTION(Type, gAverage)

View File

@ -37,7 +37,6 @@ SourceFiles
#define OSspecific_H #define OSspecific_H
#include "fileNameList.H" #include "fileNameList.H"
#include "long.H"
#include <sys/types.h> #include <sys/types.h>

View File

@ -85,7 +85,7 @@ public:
// Access // Access
//- Return communicator used for parallel communication //- Return communicator used for parallel communication
virtual int comm() const = 0; virtual label comm() const = 0;
//- Return processor number (rank in communicator) //- Return processor number (rank in communicator)
virtual int myProcNo() const = 0; virtual int myProcNo() const = 0;

View File

@ -72,7 +72,7 @@ public:
// Access // Access
//- Return communicator used for comms //- Return communicator used for comms
virtual int comm() const = 0; virtual label comm() const = 0;
//- Return processor number //- Return processor number
virtual int myProcNo() const = 0; virtual int myProcNo() const = 0;

View File

@ -677,7 +677,7 @@ void Foam::GAMGAgglomeration::calculateRegionMaster
const label comm, const label comm,
const labelList& procAgglomMap, const labelList& procAgglomMap,
labelList& masterProcs, labelList& masterProcs,
List<int>& agglomProcIDs List<label>& agglomProcIDs
) )
{ {
// Determine the master processors // Determine the master processors

View File

@ -435,7 +435,7 @@ public:
const label comm, const label comm,
const labelList& procAgglomMap, const labelList& procAgglomMap,
labelList& masterProcs, labelList& masterProcs,
List<int>& agglomProcIDs List<label>& agglomProcIDs
); );
//- Whether to agglomerate across processors //- Whether to agglomerate across processors

View File

@ -34,7 +34,6 @@ void Foam::GAMGAgglomeration::gatherList
( (
const label comm, const label comm,
const labelList& procIDs, const labelList& procIDs,
const Type& myVal, const Type& myVal,
List<Type>& allVals, List<Type>& allVals,
const int tag const int tag
@ -123,7 +122,7 @@ void Foam::GAMGAgglomeration::restrictField
{ {
label fineComm = UPstream::parent(procCommunicator_[coarseLevelIndex]); label fineComm = UPstream::parent(procCommunicator_[coarseLevelIndex]);
const List<int>& procIDs = agglomProcIDs(coarseLevelIndex); const List<label>& procIDs = agglomProcIDs(coarseLevelIndex);
const labelList& offsets = cellOffsets(coarseLevelIndex); const labelList& offsets = cellOffsets(coarseLevelIndex);
globalIndex::gather globalIndex::gather
@ -196,7 +195,7 @@ void Foam::GAMGAgglomeration::prolongField
procCommunicator_[coarseLevelIndex] procCommunicator_[coarseLevelIndex]
); );
const List<int>& procIDs = agglomProcIDs(coarseLevelIndex); const List<label>& procIDs = agglomProcIDs(coarseLevelIndex);
const labelList& offsets = cellOffsets(coarseLevelIndex); const labelList& offsets = cellOffsets(coarseLevelIndex);
label localSize = nCells_[levelIndex]; label localSize = nCells_[levelIndex];

View File

@ -266,7 +266,7 @@ bool Foam::GAMGProcAgglomeration::agglomerate
const label fineLevelIndex, const label fineLevelIndex,
const labelList& procAgglomMap, const labelList& procAgglomMap,
const labelList& masterProcs, const labelList& masterProcs,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label procAgglomComm const label procAgglomComm
) )
{ {

View File

@ -71,7 +71,7 @@ protected:
const label fineLevelIndex, const label fineLevelIndex,
const labelList& procAgglomMap, const labelList& procAgglomMap,
const labelList& masterProcs, const labelList& masterProcs,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label procAgglomComm const label procAgglomComm
); );

View File

@ -116,7 +116,7 @@ bool Foam::eagerGAMGProcAgglomeration::agglomerate()
labelList masterProcs; labelList masterProcs;
// Local processors that agglomerate. agglomProcIDs[0] // Local processors that agglomerate. agglomProcIDs[0]
// is in masterProc. // is in masterProc.
List<int> agglomProcIDs; List<label> agglomProcIDs;
GAMGAgglomeration::calculateRegionMaster GAMGAgglomeration::calculateRegionMaster
( (
levelComm, levelComm,

View File

@ -104,7 +104,7 @@ bool Foam::masterCoarsestGAMGProcAgglomeration::agglomerate()
labelList masterProcs; labelList masterProcs;
// Local processors that agglomerate. agglomProcIDs[0] is in // Local processors that agglomerate. agglomProcIDs[0] is in
// masterProc. // masterProc.
List<int> agglomProcIDs; List<label> agglomProcIDs;
GAMGAgglomeration::calculateRegionMaster GAMGAgglomeration::calculateRegionMaster
( (
levelComm, levelComm,

View File

@ -151,7 +151,7 @@ Foam::procFacesGAMGProcAgglomeration::processorAgglomeration
label singleCellMeshComm = UPstream::allocateCommunicator label singleCellMeshComm = UPstream::allocateCommunicator
( (
mesh.comm(), mesh.comm(),
labelList(1, 0) // only processor 0 labelList(1, label(0)) // only processor 0
); );
scalarField faceWeights; scalarField faceWeights;
@ -283,7 +283,7 @@ bool Foam::procFacesGAMGProcAgglomeration::agglomerate()
labelList masterProcs; labelList masterProcs;
// Local processors that agglomerate. agglomProcIDs[0] is in // Local processors that agglomerate. agglomProcIDs[0] is in
// masterProc. // masterProc.
List<int> agglomProcIDs; List<label> agglomProcIDs;
GAMGAgglomeration::calculateRegionMaster GAMGAgglomeration::calculateRegionMaster
( (
levelComm, levelComm,

View File

@ -164,7 +164,7 @@ Foam::GAMGSolver::GAMGSolver
const labelList& procAgglomMap = const labelList& procAgglomMap =
agglomeration_.procAgglomMap(fineLevelIndex+1); agglomeration_.procAgglomMap(fineLevelIndex+1);
const List<int>& procIDs = const List<label>& procIDs =
agglomeration_.agglomProcIDs(fineLevelIndex+1); agglomeration_.agglomProcIDs(fineLevelIndex+1);
procAgglomerateMatrix procAgglomerateMatrix

View File

@ -194,7 +194,7 @@ class GAMGSolver
PtrList<FieldField<Field, scalar> >& otherBouCoeffs, PtrList<FieldField<Field, scalar> >& otherBouCoeffs,
PtrList<FieldField<Field, scalar> >& otherIntCoeffs, PtrList<FieldField<Field, scalar> >& otherIntCoeffs,
List<boolList>& otherTransforms, List<boolList>& otherTransforms,
List<List<int> >& otherRanks List<List<label> >& otherRanks
) const; ) const;
//- Agglomerate processor matrices //- Agglomerate processor matrices
@ -202,7 +202,7 @@ class GAMGSolver
( (
// Agglomeration information // Agglomeration information
const labelList& procAgglomMap, const labelList& procAgglomMap,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label levelI, const label levelI,
@ -218,7 +218,7 @@ class GAMGSolver
void procAgglomerateMatrix void procAgglomerateMatrix
( (
const labelList& procAgglomMap, const labelList& procAgglomMap,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label levelI const label levelI
); );

View File

@ -296,7 +296,7 @@ void Foam::GAMGSolver::gatherMatrices
PtrList<FieldField<Field, scalar> >& otherBouCoeffs, PtrList<FieldField<Field, scalar> >& otherBouCoeffs,
PtrList<FieldField<Field, scalar> >& otherIntCoeffs, PtrList<FieldField<Field, scalar> >& otherIntCoeffs,
List<boolList>& otherTransforms, List<boolList>& otherTransforms,
List<List<int> >& otherRanks List<List<label> >& otherRanks
) const ) const
{ {
if (debug) if (debug)
@ -332,7 +332,7 @@ void Foam::GAMGSolver::gatherMatrices
// Receive number of/valid interfaces // Receive number of/valid interfaces
boolList& procTransforms = otherTransforms[otherI]; boolList& procTransforms = otherTransforms[otherI];
List<int>& procRanks = otherRanks[otherI]; List<label>& procRanks = otherRanks[otherI];
fromSlave >> procTransforms; fromSlave >> procTransforms;
fromSlave >> procRanks; fromSlave >> procRanks;
@ -372,7 +372,7 @@ void Foam::GAMGSolver::gatherMatrices
// Count valid interfaces // Count valid interfaces
boolList procTransforms(interfaceBouCoeffs.size(), false); boolList procTransforms(interfaceBouCoeffs.size(), false);
List<int> procRanks(interfaceBouCoeffs.size(), -1); List<label> procRanks(interfaceBouCoeffs.size(), -1);
forAll(interfaces, intI) forAll(interfaces, intI)
{ {
if (interfaces.set(intI)) if (interfaces.set(intI))
@ -415,7 +415,7 @@ void Foam::GAMGSolver::procAgglomerateMatrix
( (
// Agglomeration information // Agglomeration information
const labelList& procAgglomMap, const labelList& procAgglomMap,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label levelI, const label levelI,
@ -451,7 +451,7 @@ void Foam::GAMGSolver::procAgglomerateMatrix
PtrList<FieldField<Field, scalar> > otherBouCoeffs; PtrList<FieldField<Field, scalar> > otherBouCoeffs;
PtrList<FieldField<Field, scalar> > otherIntCoeffs; PtrList<FieldField<Field, scalar> > otherIntCoeffs;
List<boolList> otherTransforms; List<boolList> otherTransforms;
List<List<int> > otherRanks; List<List<label> > otherRanks;
gatherMatrices gatherMatrices
( (
agglomProcIDs, agglomProcIDs,
@ -745,7 +745,7 @@ void Foam::GAMGSolver::procAgglomerateMatrix
void Foam::GAMGSolver::procAgglomerateMatrix void Foam::GAMGSolver::procAgglomerateMatrix
( (
const labelList& procAgglomMap, const labelList& procAgglomMap,
const List<int>& agglomProcIDs, const List<label>& agglomProcIDs,
const label levelI const label levelI
) )

View File

@ -155,7 +155,7 @@ public:
//- Processor interface functions //- Processor interface functions
//- Return communicator used for comms //- Return communicator used for comms
virtual int comm() const virtual label comm() const
{ {
return procInterface_.comm(); return procInterface_.comm();
} }

View File

@ -148,7 +148,7 @@ public:
//- Processor interface functions //- Processor interface functions
//- Return communicator used for sending //- Return communicator used for sending
virtual int comm() const virtual label comm() const
{ {
return comm_; return comm_;
} }

View File

@ -80,7 +80,7 @@ public:
virtual lduInterfacePtrsList interfaces() const = 0; virtual lduInterfacePtrsList interfaces() const = 0;
//- Return communicator used for parallel communication //- Return communicator used for parallel communication
virtual int comm() const = 0; virtual label comm() const = 0;
//- Helper: reduce with current communicator //- Helper: reduce with current communicator
template<class T, class BinaryOp> template<class T, class BinaryOp>

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -35,6 +35,8 @@ Description
#ifndef contiguous_H #ifndef contiguous_H
#define contiguous_H #define contiguous_H
#include <stdint.h>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -70,67 +72,60 @@ template<>
inline bool contiguous<Pair<char> >() {return true;} inline bool contiguous<Pair<char> >() {return true;}
template<> template<>
inline bool contiguous<unsigned char>() {return true;} inline bool contiguous<int8_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<unsigned char, 2> >() {return true;} inline bool contiguous<FixedList<int8_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<unsigned char> >() {return true;} inline bool contiguous<Pair<int8_t> >() {return true;}
template<> template<>
inline bool contiguous<short>() {return true;} inline bool contiguous<uint8_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<short, 2> >() {return true;} inline bool contiguous<FixedList<uint8_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<short> >() {return true;} inline bool contiguous<Pair<uint8_t> >() {return true;}
template<> template<>
inline bool contiguous<unsigned short>() {return true;} inline bool contiguous<int16_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<unsigned short, 2> >() {return true;} inline bool contiguous<FixedList<int16_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<unsigned short> >() {return true;} inline bool contiguous<Pair<int16_t> >() {return true;}
template<> template<>
inline bool contiguous<int>() {return true;} inline bool contiguous<uint16_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<int, 2> >() {return true;} inline bool contiguous<FixedList<uint16_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<int> >() {return true;} inline bool contiguous<Pair<uint16_t> >() {return true;}
template<> template<>
inline bool contiguous<unsigned int>() {return true;} inline bool contiguous<int32_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<unsigned int, 2> >() {return true;} inline bool contiguous<FixedList<int32_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<unsigned int> >() {return true;} inline bool contiguous<Pair<int32_t> >() {return true;}
template<> template<>
inline bool contiguous<long>() {return true;} inline bool contiguous<uint32_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<long, 2> >() {return true;} inline bool contiguous<FixedList<uint32_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<long> >() {return true;} inline bool contiguous<Pair<uint32_t> >() {return true;}
template<> template<>
inline bool contiguous<unsigned long>() {return true;} inline bool contiguous<int64_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<unsigned long, 2> >() {return true;} inline bool contiguous<FixedList<int64_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<unsigned long> >() {return true;} inline bool contiguous<Pair<int64_t> >() {return true;}
template<> template<>
inline bool contiguous<long long>() {return true;} inline bool contiguous<uint64_t>() {return true;}
template<> template<>
inline bool contiguous<FixedList<long long, 2> >() {return true;} inline bool contiguous<FixedList<uint64_t, 2> >() {return true;}
template<> template<>
inline bool contiguous<Pair<long long> >() {return true;} inline bool contiguous<Pair<uint64_t> >() {return true;}
template<>
inline bool contiguous<unsigned long long>() {return true;}
template<>
inline bool contiguous<FixedList<unsigned long long, 2> >() {return true;}
template<>
inline bool contiguous<Pair<unsigned long long> >() {return true;}
template<> template<>
inline bool contiguous<float>() {return true;} inline bool contiguous<float>() {return true;}

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -28,7 +28,6 @@ Description
System integer System integer
SourceFiles SourceFiles
int.C
intIO.C intIO.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -36,27 +35,40 @@ SourceFiles
#ifndef int_H #ifndef int_H
#define int_H #define int_H
#include "word.H" #include "int32.H"
#include "int64.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
class Istream; #define MAXMIN(retType, type1, type2) \
class Ostream; \
inline retType max(const type1 s1, const type2 s2) \
{ \
return (s1 > s2)? s1: s2; \
} \
\
inline retType min(const type1 s1, const type2 s2) \
{ \
return (s1 < s2)? s1: s2; \
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a word representation of an int MAXMIN(int8_t, int8_t, int8_t)
word name(const int); MAXMIN(int16_t, int16_t, int16_t)
MAXMIN(int32_t, int32_t, int32_t)
MAXMIN(int64_t, int64_t, int32_t)
MAXMIN(int64_t, int32_t, int64_t)
MAXMIN(int64_t, int64_t, int64_t)
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
int readInt(Istream&); int readInt(Istream&);
bool readInt(const char*, int&);
Istream& operator>>(Istream&, int&);
Ostream& operator<<(Ostream&, const int);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,64 +21,13 @@ 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
Reads an int from an input stream, for a given version
number and File format. If an ascii File is being read,
then the line numbers are counted and an erroneous read
ised.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "error.H"
#include "int.H" #include "int.H"
#include "IOstreams.H" #include "IOstreams.H"
#include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const int val)
{
std::ostringstream buf;
buf << val;
return buf.str();
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, int& i)
{
token t(is);
if (!t.good())
{
is.setBad();
return is;
}
if (t.isLabel())
{
i = int(t.labelToken());
}
else
{
is.setBad();
FatalIOErrorIn("operator>>(Istream&, int&)", is)
<< "wrong token type - expected int, found " << t.info()
<< exit(FatalIOError);
return is;
}
// Check state of Istream
is.check("Istream& operator>>(Istream&, int&)");
return is;
}
int Foam::readInt(Istream& is) int Foam::readInt(Istream& is)
{ {
int val; int val;
@ -88,21 +37,4 @@ int Foam::readInt(Istream& is)
} }
bool Foam::readInt(const char* buf, int& s)
{
char *endptr = NULL;
long l = strtol(buf, &endptr, 10);
s = int(l);
return (*endptr == 0);
}
Foam::Ostream& Foam::operator<<(Ostream& os, const int i)
{
os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const int)");
return os;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "int32.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const int32_t Foam::pTraits<int32_t>::zero = 0;
const int32_t Foam::pTraits<int32_t>::one = 1;
const int32_t Foam::pTraits<int32_t>::min = INT32_MIN;
const int32_t Foam::pTraits<int32_t>::max = INT32_MAX;
const int32_t Foam::pTraits<int32_t>::rootMin = pTraits<int32_t>::min;
const int32_t Foam::pTraits<int32_t>::rootMax = pTraits<int32_t>::max;
const char* Foam::pTraits<int32_t>::componentNames[] = { "x" };
Foam::pTraits<int32_t>::pTraits(const int32_t& p)
:
p_(p)
{}
Foam::pTraits<int32_t>::pTraits(Istream& is)
{
is >> p_;
}
// ************************************************************************* //

View File

@ -0,0 +1,137 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
Primitive
int32
Description
32bit integer
SourceFiles
int32.C
int32IO.C
\*---------------------------------------------------------------------------*/
#ifndef int32_H
#define int32_H
#include <stdint.h>
#include <climits>
#include <cstdlib>
#include "word.H"
#include "pTraits.H"
#include "direction.H"
#ifndef UINT32_MIN
#define UINT32_MIN 0
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a word representation of an int32
word name(const int32_t);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
int32_t readInt32(Istream&);
bool read(const char*, int32_t&);
Istream& operator>>(Istream&, int32_t&);
Ostream& operator<<(Ostream&, const int32_t);
//- template specialization for pTraits<int32_t>
template<>
class pTraits<int32_t>
{
int32_t p_;
public:
//- Component type
typedef int32_t cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of int32_t is 0
nComponents = 1 //!< Number of components in int32_t is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const int32_t zero;
static const int32_t one;
static const int32_t min;
static const int32_t max;
static const int32_t rootMax;
static const int32_t rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const int32_t&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the int32_t value
operator int32_t() const
{
return p_;
}
//- Access to the int value
operator int32_t&()
{
return p_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,30 +21,28 @@ 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
Reads a ulong from an input stream.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "error.H" #include "error.H"
#include "ulong.H" #include "int32.H"
#include "IOstreams.H" #include "IOstreams.H"
#include <sstream> #include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const unsigned long val) Foam::word Foam::name(const int32_t val)
{ {
std::ostringstream buf; std::ostringstream buf;
buf << val; buf << val;
return buf.str(); return buf.str();
} }
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, unsigned long& val) Foam::Istream& Foam::operator>>(Istream& is, int32_t& i)
{ {
token t(is); token t(is);
@ -56,38 +54,47 @@ Foam::Istream& Foam::operator>>(Istream& is, unsigned long& val)
if (t.isLabel()) if (t.isLabel())
{ {
val = static_cast<unsigned long>(t.labelToken()); i = int32_t(t.labelToken());
} }
else else
{ {
is.setBad(); is.setBad();
FatalIOErrorIn("operator>>(Istream&, unsigned long&)", is) FatalIOErrorIn("operator>>(Istream&, int32_t&)", is)
<< "wrong token type - expected unsigned long, found " << t.info() << "wrong token type - expected int32_t, found " << t.info()
<< exit(FatalIOError); << exit(FatalIOError);
return is; return is;
} }
// Check state of Istream // Check state of Istream
is.check("Istream& operator>>(Istream&, unsigned long&)"); is.check("Istream& operator>>(Istream&, int32_t&)");
return is; return is;
} }
unsigned long Foam::readUlong(Istream& is) int32_t Foam::readInt32(Istream& is)
{ {
unsigned long val; int32_t val;
is >> val; is >> val;
return val; return val;
} }
Foam::Ostream& Foam::operator<<(Ostream& os, const unsigned long val) bool Foam::read(const char* buf, int32_t& s)
{ {
os.write(label(val)); char *endptr = NULL;
os.check("Ostream& operator<<(Ostream&, const unsigned long)"); long l = strtol(buf, &endptr, 10);
s = int32_t(l);
return (*endptr == 0);
}
Foam::Ostream& Foam::operator<<(Ostream& os, const int32_t i)
{
os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const int32_t)");
return os; return os;
} }

View File

@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "int64.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const int64_t Foam::pTraits<int64_t>::zero = 0;
const int64_t Foam::pTraits<int64_t>::one = 1;
const int64_t Foam::pTraits<int64_t>::min = INT64_MIN;
const int64_t Foam::pTraits<int64_t>::max = INT64_MAX;
const int64_t Foam::pTraits<int64_t>::rootMin = pTraits<int64_t>::min;
const int64_t Foam::pTraits<int64_t>::rootMax = pTraits<int64_t>::max;
const char* Foam::pTraits<int64_t>::componentNames[] = { "x" };
Foam::pTraits<int64_t>::pTraits(const int64_t& p)
:
p_(p)
{}
Foam::pTraits<int64_t>::pTraits(Istream& is)
{
is >> p_;
}
// ************************************************************************* //

View File

@ -0,0 +1,137 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
Primitive
int64
Description
64bit integer
SourceFiles
int64.C
int64IO.C
\*---------------------------------------------------------------------------*/
#ifndef int64_H
#define int64_H
#include <stdint.h>
#include <climits>
#include <cstdlib>
#include "word.H"
#include "pTraits.H"
#include "direction.H"
#ifndef UINT64_MIN
#define UINT64_MIN 0
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a word representation of an int64
word name(const int64_t);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
int64_t readInt64(Istream&);
bool read(const char*, int64_t&);
Istream& operator>>(Istream&, int64_t&);
Ostream& operator<<(Ostream&, const int64_t);
//- template specialization for pTraits<int64_t>
template<>
class pTraits<int64_t>
{
int64_t p_;
public:
//- Component type
typedef int64_t cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of int64_t is 0
nComponents = 1 //!< Number of components in int64_t is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const int64_t zero;
static const int64_t one;
static const int64_t min;
static const int64_t max;
static const int64_t rootMax;
static const int64_t rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const int64_t&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the int64_t value
operator int64_t() const
{
return p_;
}
//- Access to the int value
operator int64_t&()
{
return p_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,32 +21,28 @@ 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
Reads a long from an input stream, for a given version
number and File format. If an ascii File is being read, then the line
numbers are counted and an erroneous read ised.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "error.H" #include "error.H"
#include "long.H" #include "int64.H"
#include "IOstreams.H" #include "IOstreams.H"
#include <sstream> #include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const long val) Foam::word Foam::name(const int64_t val)
{ {
std::ostringstream buf; std::ostringstream buf;
buf << val; buf << val;
return buf.str(); return buf.str();
} }
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, long& l) Foam::Istream& Foam::operator>>(Istream& is, int64_t& i)
{ {
token t(is); token t(is);
@ -58,45 +54,47 @@ Foam::Istream& Foam::operator>>(Istream& is, long& l)
if (t.isLabel()) if (t.isLabel())
{ {
l = long(t.labelToken()); i = int64_t(t.labelToken());
} }
else else
{ {
is.setBad(); is.setBad();
FatalIOErrorIn("operator>>(Istream&, long&)", is) FatalIOErrorIn("operator>>(Istream&, int64_t&)", is)
<< "wrong token type - expected long, found " << t.info() << "wrong token type - expected int64_t, found " << t.info()
<< exit(FatalIOError); << exit(FatalIOError);
return is; return is;
} }
// Check state of Istream // Check state of Istream
is.check("Istream& operator>>(Istream&, long&)"); is.check("Istream& operator>>(Istream&, int64_t&)");
return is; return is;
} }
long Foam::readLong(Istream& is) int64_t Foam::readInt64(Istream& is)
{ {
long val; int64_t val;
is >> val; is >> val;
return val; return val;
} }
bool Foam::readLong(const char* buf, long& s)
bool Foam::read(const char* buf, int64_t& s)
{ {
char *endptr = NULL; char *endptr = NULL;
s = strtol(buf, &endptr, 10); long l = strtol(buf, &endptr, 10);
s = int64_t(l);
return (*endptr == 0); return (*endptr == 0);
} }
Foam::Ostream& Foam::operator<<(Ostream& os, const long l) Foam::Ostream& Foam::operator<<(Ostream& os, const int64_t i)
{ {
os.write(label(l)); os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const long)"); os.check("Ostream& operator<<(Ostream&, const int64_t)");
return os; return os;
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -28,63 +28,18 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam #if WM_LABEL_SIZE == 32
{ const char* const Foam::pTraits<int64_t>::typeName = "int64";
const char* const Foam::pTraits<int32_t>::typeName = "label";
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #elif WM_LABEL_SIZE == 64
const char* const Foam::pTraits<int64_t>::typeName = "label";
const char* const pTraits<label>::typeName = "label"; const char* const Foam::pTraits<int32_t>::typeName = "int32";
const label pTraits<label>::zero = 0;
const label pTraits<label>::one = 1;
const label pTraits<label>::min = labelMin;
const label pTraits<label>::max = labelMax;
const label pTraits<label>::rootMin = pTraits<label>::min;
const label pTraits<label>::rootMax = pTraits<label>::max;
const char* pTraits<label>::componentNames[] = { "x" };
pTraits<label>::pTraits(const label& p)
:
p_(p)
{}
pTraits<label>::pTraits(Istream& is)
{
is >> p_;
}
#if (FOAM_LABEL_MAX != INT_MAX)
const char* const pTraits<int>::typeName = "int";
const int pTraits<int>::zero = 0;
const int pTraits<int>::one = 1;
const int pTraits<int>::min = INT_MIN;
const int pTraits<int>::max = INT_MAX;
const int pTraits<int>::min = INT_MIN;
const int pTraits<int>::max = INT_MAX;
const int pTraits<int>::rootMin = pTraits<int>::min;
const int pTraits<int>::rootMax = pTraits<int>::max;
const char* pTraits<int>::componentNames[] = { "x" };
pTraits<int>::pTraits(const int& p)
:
p_(p)
{}
pTraits<int>::pTraits(Istream& is)
{
is >> p_;
}
#endif #endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Raise one label to the power of another (overloaded function call) Foam::label Foam::pow(label a, label b)
label pow(label a, label b)
{ {
register label ans = 1; register label ans = 1;
for (register label i=0; i<b; i++) for (register label i=0; i<b; i++)
@ -92,21 +47,20 @@ label pow(label a, label b)
ans *= a; ans *= a;
} }
# ifdef FULLDEBUG #ifdef FULLDEBUG
if (b < 0) if (b < 0)
{ {
FatalErrorIn("pow(label a, label b)") FatalErrorIn("pow(label a, label b)")
<< "negative value for b is not supported" << "negative value for b is not supported"
<< abort(FatalError); << abort(FatalError);
} }
# endif #endif
return ans; return ans;
} }
//- Return factorial(n) : 0 <= n <= 12 Foam::label Foam::factorial(label n)
label factorial(label n)
{ {
static label factTable[13] = static label factTable[13] =
{ {
@ -114,21 +68,17 @@ label factorial(label n)
362880, 3628800, 39916800, 479001600 362880, 3628800, 39916800, 479001600
}; };
# ifdef FULLDEBUG #ifdef FULLDEBUG
if (n > 12 && n < 0) if (n > 12 && n < 0)
{ {
FatalErrorIn("factorial(label n)") FatalErrorIn("factorial(label n)")
<< "n value out of range" << "n value out of range"
<< abort(FatalError); << abort(FatalError);
} }
# endif #endif
return factTable[n]; return factTable[n];
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,7 +25,8 @@ Typedef
Foam::label Foam::label
Description Description
A label is an int/long/long long depending on the range desired. A label is an int32_t or int64_t as specified by the pre-processor macro
WM_LABEL_SIZE.
A readLabel function is defined so that label can be constructed from A readLabel function is defined so that label can be constructed from
Istream. Istream.
@ -35,239 +36,35 @@ Description
#ifndef label_H #ifndef label_H
#define label_H #define label_H
#include <climits> #include "int.H"
#include <cstdlib>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#define INT_ADD_SIZE(x,s,y) x ## s ## y
#define INT_ADD_DEF_SIZE(x,s,y) INT_ADD_SIZE(x,s,y)
#define INT_SIZE(x,y) INT_ADD_DEF_SIZE(x,WM_LABEL_SIZE,y)
#if FOAM_LABEL64 #if WM_LABEL_SIZE != 32 && WM_LABEL_SIZE != 64
# define FOAM_LABEL_MAX 9000000000000000000 #error "label.H: WM_LABEL_SIZE must be set to either 32 or 64"
#else
# define FOAM_LABEL_MAX 2000000000
#endif
#include "pTraits.H"
#include "direction.H"
#if INT_MAX > FOAM_LABEL_MAX
// Define label as an int
# undef FOAM_LABEL_MAX
# define FOAM_LABEL_MAX INT_MAX
# include "int.H"
namespace Foam
{
typedef int label;
static const label labelMin = INT_MIN;
static const label labelMax = INT_MAX;
inline label readLabel(Istream& is)
{
return readInt(is);
}
inline bool readLabel(const char* buf, label& s)
{
return readInt(buf, s);
}
} // End namespace Foam
#elif LONG_MAX > FOAM_LABEL_MAX
// Define label as a long
# undef FOAM_LABEL_MAX
# define FOAM_LABEL_MAX LONG_MAX
# include "int.H"
# include "long.H"
namespace Foam
{
typedef long label;
static const label labelMin = LONG_MIN;
static const label labelMax = LONG_MAX;
inline label readLabel(Istream& is)
{
return readLong(is);
}
inline bool readLabel(const char* buf, label& s)
{
return readLong(buf, s);
}
} // End namespace Foam
#elif LLONG_MAX > FOAM_LABEL_MAX
// Define label as a long long
# undef FOAM_LABEL_MAX
# define FOAM_LABEL_MAX LLONG_MAX
# include "int.H"
# include "long.H"
# include "longLong.H"
namespace Foam
{
typedef long long label;
static const label labelMin = LLONG_MIN;
static const label labelMax = LLONG_MAX;
inline label readLabel(Istream& is)
{
return readLongLong(is);
}
inline bool readLabel(const char* buf, label& s)
{
return readLongLong(buf, s);
}
} // End namespace Foam
#endif #endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//#include "pTraits.H"
//#include "direction.H"
namespace Foam namespace Foam
{ {
//- template specialization for pTraits<label> // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<>
class pTraits<label> typedef INT_SIZE(int, _t) label;
static const label labelMin = INT_SIZE(INT, _MIN);
static const label labelMax = INT_SIZE(INT, _MAX);
inline label readLabel(Istream& is)
{ {
label p_; return INT_SIZE(readInt,) (is);
}
public:
//- Component type
typedef label cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of label is 0
nComponents = 1 //!< Number of components in label is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const label zero;
static const label one;
static const label min;
static const label max;
static const label rootMin;
static const label rootMax;
// Constructors
//- Construct from primitive
explicit pTraits(const label&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the label value
operator label() const
{
return p_;
}
//- Access to the label value
operator label&()
{
return p_;
}
};
// For convenience's sake always define pTraits<int> (so even if label != int)
#if (FOAM_LABEL_MAX != INT_MAX)
//- template specialization for pTraits<int>
template<>
class pTraits<int>
{
int p_;
public:
//- Component type
typedef int cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of int is 0
nComponents = 1 //!< Number of components in int is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const int zero;
static const int one;
static const int min;
static const int max;
static const int rootMax;
static const int rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const int&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the int value
operator int() const
{
return p_;
}
//- Access to the int value
operator int&()
{
return p_;
}
};
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -275,40 +72,10 @@ public:
//- Raise one label to the power of another //- Raise one label to the power of another
label pow(label a, label b); label pow(label a, label b);
//- Evaluate n! : n <= 12 //- Evaluate n! : 0 < n <= 12
label factorial(label n); label factorial(label n);
#define MAXMIN(retType, type1, type2) \
\
inline retType max(const type1 s1, const type2 s2) \
{ \
return (s1 > s2)? s1: s2; \
} \
\
inline retType min(const type1 s1, const type2 s2) \
{ \
return (s1 < s2)? s1: s2; \
}
MAXMIN(char, char, char)
MAXMIN(short, short, short)
MAXMIN(int, int, int)
MAXMIN(long, long, long)
MAXMIN(long, long, int)
MAXMIN(long long, long long, long long)
MAXMIN(unsigned char, unsigned char, unsigned char)
MAXMIN(unsigned short, unsigned short, unsigned short)
MAXMIN(unsigned int, unsigned int, unsigned int)
MAXMIN(unsigned long, unsigned long, unsigned long)
MAXMIN(unsigned long long, unsigned long long, unsigned long long)
MAXMIN(long, int, long)
MAXMIN(long long, int, long long)
MAXMIN(long long, long long, int)
inline label& setComponent(label& l, const direction) inline label& setComponent(label& l, const direction)
{ {
return l; return l;
@ -319,33 +86,18 @@ inline label component(const label l, const direction)
return l; return l;
} }
inline label mag(const label l)
{
return ::abs(l);
}
inline label sign(const label s)
{
return (s >= 0)? 1: -1;
}
inline label pos(const label s)
{
return (s >= 0)? 1: 0;
}
inline label neg(const label s)
{
return (s < 0)? 1: 0;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "labelSpecific.H"
#undef INT_ADD_SIZE
#undef INT_ADD_DEF_SIZE
#undef INT_SIZE
#endif #endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,48 +21,47 @@ 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/>.
Primitive Typedef
long Foam::label
Description Description
A long integer label specific functions for which there is no uLabel equivalent
SourceFiles
longIO.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef long_H
#define long_H
#include "word.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a string representation of a long inline label mag(const label l)
word name(const long); {
#if WM_LABEL_SIZE == 32
return ::abs(l);
#elif WM_LABEL_SIZE == 64
return ::labs(l);
#endif
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // inline label sign(const label s)
{
return (s >= 0)? 1: -1;
}
long readLong(Istream&); inline label pos(const label s)
bool readLong(const char*, long&); {
Istream& operator>>(Istream&, long&); return (s >= 0)? 1: 0;
Ostream& operator<<(Ostream&, const long); }
inline label neg(const label s)
{
return (s < 0)? 1: 0;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -1,131 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
Description
Reads a long long from an input stream, for a given version
number and File format. If an ascii File is being read, then the line
numbers are counted and an erroneous read ised.
\*---------------------------------------------------------------------------*/
#include "error.H"
#include "longLong.H"
#include "IOstreams.H"
#include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(long long val)
{
std::ostringstream buf;
buf << val;
return buf.str();
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, long long& l)
{
l = readLongLong(is);
// Check state of Istream
is.check("Istream& operator>>(Istream&, long long&)");
return is;
}
long long Foam::readLongLong(Istream& is)
{
register long long result = 0;
char c = 0;
static const label zeroOffset = int('0');
// Get next non-whitespace character
while (is.read(c) && isspace(c))
{}
do
{
if (isspace(c) || c == 0) break;
if (!isdigit(c))
{
FatalIOErrorIn("readLongLong(ISstream& is)", is)
<< "Illegal digit: \"" << c << "\""
<< exit(FatalIOError);
}
result *= 10 + int(c) - zeroOffset;
} while (is.read(c));
return result;
}
bool Foam::readLongLong(const char* buf, long long& s)
{
char *endptr = NULL;
s = strtoll(buf, &endptr, 10);
return (*endptr == 0);
}
Foam::Ostream& Foam::operator<<(Ostream& os, const long long l)
{
long long val = l;
long long mask = 1000000000000000000LL;
bool printZeroes = false;
while (mask > 0)
{
int d = int(val/mask);
if (d == 0)
{
if (printZeroes)
{
os.write('0');
}
}
else
{
printZeroes = true;
os.write(char(d+'0'));
}
val = val % mask;
mask /= 10;
}
os.check("Ostream& operator<<(Ostream&, const long long)");
return os;
}
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -23,40 +23,62 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "uLabel.H"
#include "error.H" #include "error.H"
#include "uLabel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam #if WM_LABEL_SIZE == 32
{ const char* const Foam::pTraits<uint64_t>::typeName = "uint64";
const char* const Foam::pTraits<uint32_t>::typeName = "uLabel";
#elif WM_LABEL_SIZE == 64
const char* const Foam::pTraits<uint64_t>::typeName = "uLabel";
const char* const Foam::pTraits<uint32_t>::typeName = "uint32";
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const char* const pTraits<uLabel>::typeName = "uLabel"; Foam::uLabel Foam::pow(uLabel a, uLabel b)
const uLabel pTraits<uLabel>::zero = 0;
const uLabel pTraits<uLabel>::one = 1;
const uLabel pTraits<uLabel>::min = uLabelMin;
const uLabel pTraits<uLabel>::max = uLabelMax;
const uLabel pTraits<uLabel>::rootMin = pTraits<uLabel>::min;
const uLabel pTraits<uLabel>::rootMax = pTraits<uLabel>::max;
const char* pTraits<uLabel>::componentNames[] = { "x" };
pTraits<uLabel>::pTraits(const uLabel& p)
:
p_(p)
{}
pTraits<uLabel>::pTraits(Istream& is)
{ {
is >> p_; register uLabel ans = 1;
for (register uLabel i=0; i<b; i++)
{
ans *= a;
}
#ifdef FULLDEBUG
if (b < 0)
{
FatalErrorIn("pow(uLabel a, uLabel b)")
<< "negative value for b is not supported"
<< abort(FatalError);
}
#endif
return ans;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Foam::uLabel Foam::factorial(uLabel n)
{
static uLabel factTable[13] =
{
1, 1, 2, 6, 24, 120, 720, 5040, 40320,
362880, 3628800, 39916800, 479001600
};
#ifdef FULLDEBUG
if (n > 12 && n < 0)
{
FatalErrorIn("factorial(uLabel n)")
<< "n value out of range"
<< abort(FatalError);
}
#endif
return factTable[n];
}
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,157 +25,57 @@ Typedef
Foam::uLabel Foam::uLabel
Description Description
A uLabel is an unsigned label. A uLabel is an uint32_t or uint64_t as specified by the pre-processor macro
WM_LABEL_SIZE.
SeeAlso A readLabel function is defined so that uLabel can be constructed from
label.H Istream.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef uLabel_H #ifndef uLabel_H
#define uLabel_H #define uLabel_H
#include <climits> #include "uint.H"
#include <cstdlib>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#define UINT_ADD_SIZE(x,s,y) x ## s ## y
#define UINT_ADD_DEF_SIZE(x,s,y) UINT_ADD_SIZE(x,s,y)
#define UINT_SIZE(x,y) UINT_ADD_DEF_SIZE(x,WM_LABEL_SIZE,y)
#if FOAM_LABEL64 #if WM_LABEL_SIZE != 32 && WM_LABEL_SIZE != 64
# define FOAM_ULABEL_MAX 18000000000000000000u #error "uLabel.H: WM_LABEL_SIZE must be set to either 32 or 64"
#else
# define FOAM_ULABEL_MAX 4000000000u
#endif
#if UINT_MAX > FOAM_ULABEL_MAX
// Define uLabel as an unsigned int
# undef FOAM_ULABEL_MAX
# define FOAM_ULABEL_MAX UINT_MAX
# include "uint.H"
namespace Foam
{
typedef unsigned int uLabel;
static const uLabel uLabelMin = 0;
static const uLabel uLabelMax = UINT_MAX;
inline uLabel readULabel(Istream& is)
{
return readUint(is);
}
} // End namespace Foam
#elif ULONG_MAX > FOAM_ULABEL_MAX
// Define uLabel as an unsigned long
# undef FOAM_ULABEL_MAX
# define FOAM_ULABEL_MAX ULONG_MAX
# include "uint.H"
# include "ulong.H"
namespace Foam
{
typedef unsigned long uLabel;
static const uLabel uLabelMin = 0;
static const uLabel uLabelMax = ULONG_MAX;
inline uLabel readULabel(Istream& is)
{
return readUlong(is);
}
} // End namespace Foam
#elif ULLONG_MAX > FOAM_ULABEL_MAX
// Define uLabel as an unsigned long long
# undef FOAM_ULABEL_MAX
# error "Not implemented yet"
#endif #endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "pTraits.H"
#include "direction.H"
namespace Foam namespace Foam
{ {
//- template specialization for pTraits<uLabel> // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<>
class pTraits<uLabel> typedef UINT_SIZE(uint, _t) uLabel;
static const uLabel uLabelMin = UINT_SIZE(UINT, _MIN);
static const uLabel uLabelMax = UINT_SIZE(UINT, _MAX);
inline uLabel readULabel(Istream& is)
{ {
uLabel p_; return UINT_SIZE(readUint,) (is);
}
public:
//- Component type
typedef uLabel cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of uLabel is 0
nComponents = 1 //!< Number of components in uLabel is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const uLabel zero;
static const uLabel one;
static const uLabel max;
static const uLabel min;
static const uLabel rootMax;
static const uLabel rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const uLabel&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the uLabel value
operator uLabel() const
{
return p_;
}
//- Access to the uLabel value
operator uLabel&()
{
return p_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Raise one uLabel to the power of another
uLabel pow(uLabel a, uLabel b);
//- Evaluate n! : 0 < n <= 12
uLabel factorial(uLabel n);
inline uLabel& setComponent(uLabel& l, const direction) inline uLabel& setComponent(uLabel& l, const direction)
{ {
return l; return l;
@ -186,13 +86,18 @@ inline uLabel component(const uLabel l, const direction)
return l; return l;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "uLabelSpecific.H"
#undef UINT_ADD_SIZE
#undef UINT_ADD_DEF_SIZE
#undef UINT_SIZE
#endif #endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,7 +25,7 @@ Primitive
uint uint
Description Description
System unsigned integer System uinteger
SourceFiles SourceFiles
uintIO.C uintIO.C
@ -35,26 +35,40 @@ SourceFiles
#ifndef uint_H #ifndef uint_H
#define uint_H #define uint_H
#include "word.H" #include "uint32.H"
#include "uint64.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
class Istream; #define MAXMIN(retType, type1, type2) \
class Ostream; \
inline retType max(const type1 s1, const type2 s2) \
{ \
return (s1 > s2)? s1: s2; \
} \
\
inline retType min(const type1 s1, const type2 s2) \
{ \
return (s1 < s2)? s1: s2; \
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a string representation of an uint MAXMIN(uint8_t, uint8_t, uint8_t)
word name(const unsigned int); MAXMIN(uint16_t, uint16_t, uint16_t)
MAXMIN(uint32_t, uint32_t, uint32_t)
MAXMIN(uint64_t, uint64_t, uint32_t)
MAXMIN(uint64_t, uint32_t, uint64_t)
MAXMIN(uint64_t, uint64_t, uint64_t)
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
unsigned int readUint(Istream&); uint readUint(Istream&);
Istream& operator>>(Istream&, unsigned int&);
Ostream& operator<<(Ostream&, const unsigned int);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,78 +21,20 @@ 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
Reads an uint from an input stream, for a given version
number and File format. If an ascii File is being read,
then the line numbers are counted and an erroneous read
ised.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "error.H"
#include "uint.H" #include "uint.H"
#include "IOstreams.H" #include "IOstreams.H"
#include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const unsigned int val)
{
std::ostringstream buf;
buf << val;
return buf.str();
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, unsigned int& i) uint Foam::readUint(Istream& is)
{ {
token t(is); uint val;
if (!t.good())
{
is.setBad();
return is;
}
if (t.isLabel())
{
i = static_cast<unsigned int>(t.labelToken());
}
else
{
is.setBad();
FatalIOErrorIn("operator>>(Istream&, unsigned int&)", is)
<< "wrong token type - expected unsigned int, found " << t.info()
<< exit(FatalIOError);
return is;
}
// Check state of Istream
is.check("Istream& operator>>(Istream&, unsigned int&)");
return is;
}
unsigned int Foam::readUint(Istream& is)
{
unsigned int val;
is >> val; is >> val;
return val; return val;
} }
Foam::Ostream& Foam::operator<<(Ostream& os, const unsigned int i)
{
os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const unsigned int)");
return os;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,47 +21,30 @@ 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/>.
Primitive
ulong
Description
System unsigned long
SourceFiles
ulongIO.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef ulong_H #include "uint32.H"
#define ulong_H
#include "word.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam const uint32_t Foam::pTraits<uint32_t>::zero = 0;
const uint32_t Foam::pTraits<uint32_t>::one = 1;
const uint32_t Foam::pTraits<uint32_t>::min = INT32_MIN;
const uint32_t Foam::pTraits<uint32_t>::max = INT32_MAX;
const uint32_t Foam::pTraits<uint32_t>::rootMin = pTraits<uint32_t>::min;
const uint32_t Foam::pTraits<uint32_t>::rootMax = pTraits<uint32_t>::max;
const char* Foam::pTraits<uint32_t>::componentNames[] = { "x" };
Foam::pTraits<uint32_t>::pTraits(const uint32_t& p)
:
p_(p)
{}
Foam::pTraits<uint32_t>::pTraits(Istream& is)
{ {
is >> p_;
}
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a string representation of a ulong
word name(const unsigned long);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
unsigned long readUlong(Istream&);
Istream& operator>>(Istream&, unsigned long&);
Ostream& operator<<(Ostream&, const unsigned long);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,137 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
Primitive
uint32
Description
32bit uinteger
SourceFiles
uint32.C
uint32IO.C
\*---------------------------------------------------------------------------*/
#ifndef uint32_H
#define uint32_H
#include <stdint.h>
#include <climits>
#include <cstdlib>
#include "word.H"
#include "pTraits.H"
#include "direction.H"
#ifndef UINT32_MIN
#define UINT32_MIN 0
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a word representation of an uint32
word name(const uint32_t);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
uint32_t readUint32(Istream&);
bool read(const char*, uint32_t&);
Istream& operator>>(Istream&, uint32_t&);
Ostream& operator<<(Ostream&, const uint32_t);
//- template specialization for pTraits<uint32_t>
template<>
class pTraits<uint32_t>
{
uint32_t p_;
public:
//- Component type
typedef uint32_t cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of uint32_t is 0
nComponents = 1 //!< Number of components in uint32_t is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const uint32_t zero;
static const uint32_t one;
static const uint32_t min;
static const uint32_t max;
static const uint32_t rootMax;
static const uint32_t rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const uint32_t&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the uint32_t value
operator uint32_t() const
{
return p_;
}
//- Access to the uint value
operator uint32_t&()
{
return p_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,102 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "error.H"
#include "uint32.H"
#include "IOstreams.H"
#include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const uint32_t val)
{
std::ostringstream buf;
buf << val;
return buf.str();
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, uint32_t& i)
{
token t(is);
if (!t.good())
{
is.setBad();
return is;
}
if (t.isLabel())
{
i = uint32_t(t.labelToken());
}
else
{
is.setBad();
FatalIOErrorIn("operator>>(Istream&, uint32_t&)", is)
<< "wrong token type - expected uint32_t, found " << t.info()
<< exit(FatalIOError);
return is;
}
// Check state of Istream
is.check("Istream& operator>>(Istream&, uint32_t&)");
return is;
}
uint32_t Foam::readUint32(Istream& is)
{
uint32_t val;
is >> val;
return val;
}
bool Foam::read(const char* buf, uint32_t& s)
{
char *endptr = NULL;
long l = strtol(buf, &endptr, 10);
s = uint32_t(l);
return (*endptr == 0);
}
Foam::Ostream& Foam::operator<<(Ostream& os, const uint32_t i)
{
os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const uint32_t)");
return os;
}
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -21,48 +21,30 @@ 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/>.
Primitive
long long
Description
A long long (64 bits on many systems)
SourceFiles
longLongIO.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef longLong_H #include "uint64.H"
#define longLong_H
#include "word.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam const uint64_t Foam::pTraits<uint64_t>::zero = 0;
const uint64_t Foam::pTraits<uint64_t>::one = 1;
const uint64_t Foam::pTraits<uint64_t>::min = INT64_MIN;
const uint64_t Foam::pTraits<uint64_t>::max = INT64_MAX;
const uint64_t Foam::pTraits<uint64_t>::rootMin = pTraits<uint64_t>::min;
const uint64_t Foam::pTraits<uint64_t>::rootMax = pTraits<uint64_t>::max;
const char* Foam::pTraits<uint64_t>::componentNames[] = { "x" };
Foam::pTraits<uint64_t>::pTraits(const uint64_t& p)
:
p_(p)
{}
Foam::pTraits<uint64_t>::pTraits(Istream& is)
{ {
is >> p_;
}
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a string representation of a long long
word name(long long);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
long long readLongLong(Istream&);
bool readLongLong(const char*, long long&);
Istream& operator>>(Istream&, long long&);
Ostream& operator<<(Ostream&, const long long);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,137 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
Primitive
uint64
Description
64bit uinteger
SourceFiles
uint64.C
uint64IO.C
\*---------------------------------------------------------------------------*/
#ifndef uint64_H
#define uint64_H
#include <stdint.h>
#include <climits>
#include <cstdlib>
#include "word.H"
#include "pTraits.H"
#include "direction.H"
#ifndef UINT64_MIN
#define UINT64_MIN 0
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class Istream;
class Ostream;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Return a word representation of an uint64
word name(const uint64_t);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
uint64_t readUint64(Istream&);
bool read(const char*, uint64_t&);
Istream& operator>>(Istream&, uint64_t&);
Ostream& operator<<(Ostream&, const uint64_t);
//- template specialization for pTraits<uint64_t>
template<>
class pTraits<uint64_t>
{
uint64_t p_;
public:
//- Component type
typedef uint64_t cmptType;
// Member constants
enum
{
dim = 3, //!< Dimensionality of space
rank = 0, //!< Rank of uint64_t is 0
nComponents = 1 //!< Number of components in uint64_t is 1
};
// Static data members
static const char* const typeName;
static const char* componentNames[];
static const uint64_t zero;
static const uint64_t one;
static const uint64_t min;
static const uint64_t max;
static const uint64_t rootMax;
static const uint64_t rootMin;
// Constructors
//- Construct from primitive
explicit pTraits(const uint64_t&);
//- Construct from Istream
pTraits(Istream&);
// Member Functions
//- Access to the uint64_t value
operator uint64_t() const
{
return p_;
}
//- Access to the uint value
operator uint64_t&()
{
return p_;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,102 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2014 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "error.H"
#include "uint64.H"
#include "IOstreams.H"
#include <sstream>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Foam::word Foam::name(const uint64_t val)
{
std::ostringstream buf;
buf << val;
return buf.str();
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
Foam::Istream& Foam::operator>>(Istream& is, uint64_t& i)
{
token t(is);
if (!t.good())
{
is.setBad();
return is;
}
if (t.isLabel())
{
i = uint64_t(t.labelToken());
}
else
{
is.setBad();
FatalIOErrorIn("operator>>(Istream&, uint64_t&)", is)
<< "wrong token type - expected uint64_t, found " << t.info()
<< exit(FatalIOError);
return is;
}
// Check state of Istream
is.check("Istream& operator>>(Istream&, uint64_t&)");
return is;
}
uint64_t Foam::readUint64(Istream& is)
{
uint64_t val;
is >> val;
return val;
}
bool Foam::read(const char* buf, uint64_t& s)
{
char *endptr = NULL;
long l = strtol(buf, &endptr, 10);
s = uint64_t(l);
return (*endptr == 0);
}
Foam::Ostream& Foam::operator<<(Ostream& os, const uint64_t i)
{
os.write(label(i));
os.check("Ostream& operator<<(Ostream&, const uint64_t)");
return os;
}
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,12 +27,11 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "IPstream.H" #include "IPstream.H"
#include "long.H"
#include "PstreamGlobals.H" #include "PstreamGlobals.H"
extern "C" extern "C"
{ {
# include <linux/gamma/libgamma.h> #include <linux/gamma/libgamma.h>
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,13 +27,11 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "OPstream.H" #include "OPstream.H"
#include "long.H"
#include "PstreamGlobals.H" #include "PstreamGlobals.H"
extern "C" { extern "C"
{
#include <linux/gamma/libgamma.h> #include <linux/gamma/libgamma.h>
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -351,7 +351,13 @@ void Foam::UPstream::allocatePstreamCommunicator
// Set the number of processes to the actual number // Set the number of processes to the actual number
int numProcs; int numProcs;
MPI_Comm_size(PstreamGlobals::MPICommunicators_[index], &numProcs); MPI_Comm_size(PstreamGlobals::MPICommunicators_[index], &numProcs);
procIDs_[index] = identity(numProcs);
//procIDs_[index] = identity(numProcs);
procIDs_[index].setSize(numProcs);
forAll(procIDs_[index], i)
{
procIDs_[index][i] = i;
}
} }
else else
{ {

View File

@ -53,7 +53,7 @@ void allReduce
MPI_Op op, MPI_Op op,
const BinaryOp& bop, const BinaryOp& bop,
const int tag, const int tag,
const int communicator const label communicator
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License

View File

@ -57,20 +57,20 @@ namespace Foam
Foam::label Foam::metisDecomp::decompose Foam::label Foam::metisDecomp::decompose
( (
const List<int>& adjncy, const List<label>& adjncy,
const List<int>& xadj, const List<label>& xadj,
const scalarField& cellWeights, const scalarField& cellWeights,
List<int>& finalDecomp List<label>& finalDecomp
) )
{ {
FatalErrorIn FatalErrorIn
( (
"labelList metisDecomp::decompose" "labelList metisDecomp::decompose"
"(" "("
"const List<int>&, " "const List<label>&, "
"const List<int>&, " "const List<label>&, "
"const scalarField&, " "const scalarField&, "
"List<int>&" "List<label>&"
")" ")"
) << notImplementedMessage << exit(FatalError); ) << notImplementedMessage << exit(FatalError);

View File

@ -61,11 +61,11 @@ void Foam::ptscotchDecomp::check(const int retVal, const char* str)
Foam::label Foam::ptscotchDecomp::decompose Foam::label Foam::ptscotchDecomp::decompose
( (
const fileName& meshPath, const fileName& meshPath,
const List<int>& initxadj, const List<label>& initxadj,
const List<int>& initadjncy, const List<label>& initadjncy,
const scalarField& initcWeights, const scalarField& initcWeights,
List<int>& finalDecomp List<label>& finalDecomp
) const ) const
{ {
FatalErrorIn FatalErrorIn
@ -73,24 +73,26 @@ Foam::label Foam::ptscotchDecomp::decompose
"label ptscotchDecomp::decompose" "label ptscotchDecomp::decompose"
"(" "("
"onst fileName&," "onst fileName&,"
"const List<int>&, " "const List<label>&, "
"const List<int>&, " "const List<label>&, "
"const scalarField&, " "const scalarField&, "
"List<int>&" "List<label>&"
")" ")"
) << notImplementedMessage << exit(FatalError); ) << notImplementedMessage << exit(FatalError);
return -1; return -1;
} }
Foam::label Foam::ptscotchDecomp::decompose Foam::label Foam::ptscotchDecomp::decompose
( (
const fileName& meshPath, const fileName& meshPath,
const int adjncySize, const label adjncySize,
const int adjncy[], const label adjncy[],
const int xadjSize, const label xadjSize,
const int xadj[], const label xadj[],
const scalarField& cWeights, const scalarField& cWeights,
List<int>& finalDecomp List<label>& finalDecomp
) const ) const
{ {
FatalErrorIn FatalErrorIn
@ -103,7 +105,7 @@ Foam::label Foam::ptscotchDecomp::decompose
"const int," "const int,"
"const int," "const int,"
"const scalarField&," "const scalarField&,"
"List<int>&" "List<label>&"
")" ")"
) << notImplementedMessage << exit(FatalError); ) << notImplementedMessage << exit(FatalError);

Some files were not shown because too many files have changed in this diff Show More