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