From 526ecfecf46dee149e284092ecb6b85faf12f40f Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 2 Jun 2016 17:39:19 +0200
Subject: [PATCH] ENH: group info about particle output with "{}" etc

- The only reasonable means of mirroring the data layout.

  The '{}' delimiters mark the extent of the binary writes.

  The primitives 'label' and 'scalar' are directly supported and correspond
  to known byte widths.

  Using "List<scalar>" was a bad choice, since this triggers unpleasant
  tokenizing behaviour. Instead use 'scalars' as a provisional placeholder
  to indicates a list of scalar values. However, there is currently no
  support for actually handling lists of scalars, for several reasons:

   * The information is not available at compile-time.
     The cloud or parcel must be queried. And it must be guaranteed
     that this value is consistent for the entire cloud.

   * Binary output of lists is currently not great for determining the
     the encoded width:
        - A zero-size list is a single '0'.
        - The leading size is a non-constant number of digits.
        - There are prefix/suffix newlines need to be tagged and
          skipped.

  The special '*' (glob) token indicates that the remaining content
  has a dynamic variable length and nothing reasonable can be known
  about their sizes. This is exemplified by the collision records.
---
 src/lagrangian/basic/particle/particle.H              |  2 +-
 src/lagrangian/basic/particle/particleMacros.H        |  2 ++
 .../Templates/CollidingParcel/CollidingParcel.H       | 11 +++++------
 .../Templates/KinematicParcel/KinematicParcel.H       |  4 ++--
 .../parcels/Templates/MPPICParcel/MPPICParcel.H       |  2 +-
 .../ReactingMultiphaseParcel.H                        |  4 +---
 .../parcels/Templates/ReactingParcel/ReactingParcel.H |  3 +--
 .../parcels/Templates/ThermoParcel/ThermoParcel.H     |  3 +--
 .../spray/parcels/Templates/SprayParcel/SprayParcel.H |  4 ++--
 9 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/src/lagrangian/basic/particle/particle.H b/src/lagrangian/basic/particle/particle.H
index ea0cc38a364..e4a6f6516a4 100644
--- a/src/lagrangian/basic/particle/particle.H
+++ b/src/lagrangian/basic/particle/particle.H
@@ -322,7 +322,7 @@ public:
         //- String representation of property types
         DefinePropertyTypes
         (
-            "vector label label scalar label label label label"
+            "{vector label label scalar label label label label}"
         );
 
         //- Cumulative particle counter - used to provode unique ID
diff --git a/src/lagrangian/basic/particle/particleMacros.H b/src/lagrangian/basic/particle/particleMacros.H
index 8bb09dd1338..d54b9621163 100644
--- a/src/lagrangian/basic/particle/particleMacros.H
+++ b/src/lagrangian/basic/particle/particleMacros.H
@@ -66,6 +66,7 @@ namespace Foam
 
 
 //- Define a static 'propertyTypes' for the types of particle properties
+//  Brace brackets are used to delimit binary write groups
 // \sa AddToPropertyTypes
 #define DefinePropertyTypes(str)                                               \
                                                                                \
@@ -78,6 +79,7 @@ namespace Foam
 
 
 //- Add to existing static 'propertyTypes' for the types of particle properties
+//  Brace brackets are used to delimit binary write groups
 // \sa AddToPropertyTypes
 #define AddToPropertyTypes(ParcelType, str)                                    \
                                                                                \
diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
index 0e43224e8f6..338c3186d9a 100644
--- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
@@ -162,12 +162,11 @@ public:
         );
 
         //- String representation of property types
-        static string propertyTypes()
-        {
-            // TODO: collision information types
-            NotImplemented;
-            return string::null;
-        }
+        AddToPropertyTypes
+        (
+            ParcelType,
+            "{vector vector vector} *"
+        );
 
 
     // Constructors
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index 2ec40a105f9..fe3d1cbf997 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -325,7 +325,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " label"
+            "{label"
           + " label"
           + " scalar"
           + " scalar"
@@ -334,7 +334,7 @@ public:
           + " scalar"
           + " scalar"
           + " scalar"
-          + " vector"
+          + " vector}"
         );
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/MPPICParcel/MPPICParcel.H b/src/lagrangian/intermediate/parcels/Templates/MPPICParcel/MPPICParcel.H
index 7ebd84fee8b..22d48d5d030 100644
--- a/src/lagrangian/intermediate/parcels/Templates/MPPICParcel/MPPICParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/MPPICParcel/MPPICParcel.H
@@ -184,7 +184,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " vector"
+            "{vector}"
         );
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
index f443f14b58d..44245693838 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H
@@ -272,9 +272,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " List<scalar>"
-          + " List<scalar>"
-          + " List<Scalar>"
+            " scalars scalars scalars"
         );
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
index 8223ce22305..fda45e5f224 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H
@@ -226,8 +226,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " scalar"
-          + " List<scalar>"
+            "{scalar} scalars"
         );
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
index 9178fbcd120..9e20ea8c0c3 100644
--- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H
@@ -282,8 +282,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " scalar"
-          + " scalar"
+            "{scalar scalar}"
         );
 
 
diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
index 76210b20c0b..c62a9924ecc 100644
--- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
+++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H
@@ -201,7 +201,7 @@ public:
         AddToPropertyTypes
         (
             ParcelType,
-            " scalar"
+            "{scalar"
           + " vector"
           + " scalar"
           + " scalar"
@@ -213,7 +213,7 @@ public:
           + " scalar"
           + " scalar"
           + " scalar"
-          + " scalar"
+          + " scalar}"
         );
 
 
-- 
GitLab