From b86f9944d7e9315c407c2637f5df1b0c1ea6caf8 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Tue, 6 Aug 2019 16:57:29 +0200 Subject: [PATCH] ENH: handle some miscellaneous mixed input types (#1378) --- .../laserDTRM/DTRMParticle/DTRMParticleIO.C | 17 ++++++++++++++++- .../primitiveShapes/objectHit/PointIndexHit.H | 4 ++++ .../directions/directionInfo/directionInfo.C | 10 ++++++++++ .../wallNormalInfo/wallNormalInfo.C | 9 +++++++++ .../field/nearWallFields/findCellParticle.C | 11 +++++++++++ .../wallBoundedStreamLine/wallBoundedParticle.C | 15 +++++++++++++-- .../trackedParticle/trackedParticle.C | 14 ++++++++++++++ 7 files changed, 77 insertions(+), 3 deletions(-) diff --git a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/laserDTRM/DTRMParticle/DTRMParticleIO.C b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/laserDTRM/DTRMParticle/DTRMParticleIO.C index d65c864ea72..219c0ecb35e 100644 --- a/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/laserDTRM/DTRMParticle/DTRMParticleIO.C +++ b/applications/solvers/multiphase/icoReactingMultiphaseInterFoam/laserDTRM/DTRMParticle/DTRMParticleIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -61,6 +61,21 @@ Foam::DTRMParticle::DTRMParticle { is >> p0_ >> p1_ >> I0_ >> I_ >> dA_ >> transmissiveId_; } + else if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + + is.beginRawRead(); + + readRawScalar(is, p0_.data(), vector::nComponents); + readRawScalar(is, p1_.data(), vector::nComponents); + readRawScalar(is, &I0_); + readRawScalar(is, &I_); + readRawScalar(is, &dA_); + readRawLabel(is, &transmissiveId_); + + is.endRawRead(); + } else { is.read(reinterpret_cast<char*>(&p0_), sizeofFields_); diff --git a/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointIndexHit.H b/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointIndexHit.H index 8b481069641..e6286a765f5 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointIndexHit.H +++ b/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointIndexHit.H @@ -227,6 +227,10 @@ public: } else { + // TODO (2019-08-06): + // cannot properly handle mixed-precision reading + // owning to bool and Point type. + is.read ( reinterpret_cast<char*>(&pHit), diff --git a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C index f7580c61d46..c5c1738f33e 100644 --- a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C +++ b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C @@ -231,6 +231,16 @@ Foam::Istream& Foam::operator>>(Foam::Istream& is, Foam::directionInfo& wDist) { is >> wDist.index_ >> wDist.n_; } + else if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + is.beginRawRead(); + + readRawLabel(is, &wDist.index_); + readRawScalar(is, wDist.n_.data(), vector::nComponents); + + is.endRawRead(); + } else { is.read diff --git a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C index 28871b271cd..dccfe125e67 100644 --- a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C +++ b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C @@ -59,6 +59,15 @@ Foam::Istream& Foam::operator>>(Foam::Istream& is, Foam::wallNormalInfo& wDist) { is >> wDist.normal_; } + else if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + is.beginRawRead(); + + readRawScalar(is, wDist.normal_.data(), vector::nComponents); + + is.endRawRead(); + } else { is.read diff --git a/src/functionObjects/field/nearWallFields/findCellParticle.C b/src/functionObjects/field/nearWallFields/findCellParticle.C index 1c266b7a1b4..1b26bd19c78 100644 --- a/src/functionObjects/field/nearWallFields/findCellParticle.C +++ b/src/functionObjects/field/nearWallFields/findCellParticle.C @@ -79,6 +79,17 @@ Foam::findCellParticle::findCellParticle { is >> start_ >> end_ >> data_; } + else if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + is.beginRawRead(); + + readRawScalar(is, start_.data(), vector::nComponents); + readRawScalar(is, end_.data(), vector::nComponents); + readRawLabel(is, &data_); + + is.endRawRead(); + } else { is.read diff --git a/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C b/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C index d09a5dac061..a77298166fe 100644 --- a/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C +++ b/src/functionObjects/field/wallBoundedStreamLine/wallBoundedParticle.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -418,7 +418,6 @@ Foam::wallBoundedParticle::wallBoundedParticle const label diagEdge ) : -// particle(mesh, barycentric(1, 0, 0, 0), celli, tetFacei, tetPti), particle(mesh, position, celli, tetFacei, tetPti, false), localPosition_(position), meshEdgeStart_(meshEdgeStart), @@ -442,6 +441,18 @@ Foam::wallBoundedParticle::wallBoundedParticle { is >> localPosition_ >> meshEdgeStart_ >> diagEdge_; } + if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + + is.beginRawRead(); + + readRawScalar(is, localPosition_.data(), vector::nComponents); + readRawLabel(is, &meshEdgeStart_); + readRawLabel(is, &diagEdge_); + + is.endRawRead(); + } else { is.read(reinterpret_cast<char*>(&localPosition_), sizeofFields_); diff --git a/src/mesh/snappyHexMesh/trackedParticle/trackedParticle.C b/src/mesh/snappyHexMesh/trackedParticle/trackedParticle.C index d5d1f47e80e..2a93e7aa708 100644 --- a/src/mesh/snappyHexMesh/trackedParticle/trackedParticle.C +++ b/src/mesh/snappyHexMesh/trackedParticle/trackedParticle.C @@ -99,6 +99,20 @@ Foam::trackedParticle::trackedParticle { is >> start_ >> end_ >> level_ >> i_ >> j_ >> k_; } + else if (!is.checkLabelSize<>() || !is.checkScalarSize<>()) + { + // Non-native label or scalar size + is.beginRawRead(); + + readRawScalar(is, start_.data(), vector::nComponents); + readRawScalar(is, end_.data(), vector::nComponents); + readRawLabel(is, &level_); + readRawLabel(is, &i_); + readRawLabel(is, &j_); + readRawLabel(is, &k_); + + is.endRawRead(); + } else { is.read -- GitLab