From d23666042fe339177cd1c58d3414592f4d5c6319 Mon Sep 17 00:00:00 2001
From: andy <a.heather@opencfd.co.uk>
Date: Thu, 3 Jul 2008 14:35:00 +0100
Subject: [PATCH] general clean-up, and renamed filename extension to avoid
 conflict with internal reader

---
 .../graphics/PV3FoamReader/Allwclean          |   7 +
 .../PV3FoamReader/vtkPV3FoamReader.cxx        | 101 +++++------
 .../PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C     |  25 +--
 .../PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H     |  80 +--------
 .../vtkPV3Foam/vtkPV3FoamConvertFaceField.H   | 161 +++---------------
 .../vtkPV3FoamConvertLagrangianFields.H       |  56 +-----
 .../vtkPV3FoamConvertPatchFaceField.H         |  49 +-----
 .../vtkPV3FoamConvertPatchPointField.H        |  48 +-----
 .../vtkPV3Foam/vtkPV3FoamConvertPointFields.H |  85 ++-------
 .../vtkPV3Foam/vtkPV3FoamConvertVolFields.H   |  58 +------
 .../vtkPV3Foam/vtkPV3FoamUpdate.C             |  18 +-
 .../vtkPV3Foam/vtkPV3FoamUpdateInformation.C  |  24 +--
 .../vtkPV3FoamUpdateInformationFields.H       |   7 +
 bin/paraFoam                                  |   4 +-
 14 files changed, 177 insertions(+), 546 deletions(-)
 create mode 100755 applications/utilities/postProcessing/graphics/PV3FoamReader/Allwclean

diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/Allwclean b/applications/utilities/postProcessing/graphics/PV3FoamReader/Allwclean
new file mode 100755
index 00000000000..0993c14cee9
--- /dev/null
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/Allwclean
@@ -0,0 +1,7 @@
+#!/bin/sh
+set -x
+
+rm -r PV3FoamReader/Make
+
+wclean libso vtkPV3Foam
+
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
index 091af743999..3e576a77db0 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
@@ -54,7 +54,7 @@ vtkPV3FoamReader::vtkPV3FoamReader()
 {
     Debug = 0;
     vtkDebugMacro(<<"Constructor");
-    
+
     SetNumberOfInputPorts(0);
 
     FileName  = NULL;
@@ -115,7 +115,6 @@ vtkPV3FoamReader::vtkPV3FoamReader()
 vtkPV3FoamReader::~vtkPV3FoamReader()
 {
     vtkDebugMacro(<<"Deconstructor");
-    cout << "Destroy ~vtkPV3FoamReader\n";
 
     if (foamData_)
     {
@@ -152,23 +151,30 @@ int vtkPV3FoamReader::RequestInformation
 )
 {
     vtkDebugMacro(<<"RequestInformation");
-    cout<<"REQUEST_INFORMATION\n";
+
+
+    if (Foam::vtkPV3Foam::debug)
+    {
+        cout<<"REQUEST_INFORMATION\n";
+    }
 
     if (!FileName)
     {
         vtkErrorMacro("FileName has to be specified!");
         return 0;
     }
-    
+
+    if (Foam::vtkPV3Foam::debug)
     {
         vtkInformation* outputInfo = this->GetOutputPortInformation(0);
-        outputInfo->Print(cout);
-    
+
         vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast
         (
             outputInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
         );
-        if (output) 
+
+        outputInfo->Print(cout);
+        if (output)
         {
             output->Print(cout);
         }
@@ -177,21 +183,19 @@ int vtkPV3FoamReader::RequestInformation
             cout << "no output\n";
         }
 
-        cout << "GetExecutive:\n";
-
         this->GetExecutive()->GetOutputInformation(0)->Print(cout);
-    }
-    
-    {
+
         int nInfo = outputVector->GetNumberOfInformationObjects();
-        cout<<"requestInfo with " << nInfo << " items\n";
+
+        cout<< "requestInfo with " << nInfo << " items:\n";
+
         for (int i=0; i<nInfo; i++)
         {
             vtkInformation *info = outputVector->GetInformationObject(i);
             info->Print(cout);
         }
     }
-    
+
     vtkInformation *outInfo = outputVector->GetInformationObject(0);
 
     if (!foamData_)
@@ -207,15 +211,12 @@ int vtkPV3FoamReader::RequestInformation
     else
     {
         vtkDebugMacro("RequestInformation: updating information");
-
         foamData_->UpdateInformation();
     }
 
     int nTimeSteps = 0;
     double* timeSteps = foamData_->timeSteps(nTimeSteps);
 
-    cout<<"Have nTimeSteps: " << nTimeSteps << "\n";
-
     outInfo->Set
     (
         vtkStreamingDemandDrivenPipeline::TIME_STEPS(),
@@ -229,13 +230,16 @@ int vtkPV3FoamReader::RequestInformation
         timeRange[0] = timeSteps[0];
         timeRange[1] = timeSteps[nTimeSteps-1];
 
-        cout<<"nTimeSteps " << nTimeSteps << "\n";
-        cout<<"timeRange " << timeRange[0] << " -> " << timeRange[1] << "\n";
+        if (Foam::vtkPV3Foam::debug)
+        {
+            cout<<"nTimeSteps " << nTimeSteps << "\n";
+            cout<<"timeRange " << timeRange[0] << " to " << timeRange[1] << "\n";
 
-//        for (int i = 0; i < nTimeSteps; ++i)
-//        {
-//            cout<<"step[" << i << "] = " << timeSteps[i] << "\n";
-//        }
+            for (int i = 0; i < nTimeSteps; ++i)
+            {
+                cout<< "step[" << i << "] = " << timeSteps[i] << "\n";
+            }
+        }
 
         outInfo->Set
         (
@@ -247,7 +251,6 @@ int vtkPV3FoamReader::RequestInformation
 
     delete timeSteps;
 
-    cout<<"done RequestInformation\n";
     return 1;
 }
 
@@ -261,21 +264,27 @@ int vtkPV3FoamReader::RequestData
 )
 {
     vtkDebugMacro(<<"RequestData");
-    cout<<"REQUEST_DATA\n";
 
     if (!FileName)
     {
         vtkErrorMacro("FileName has to be specified!");
         return 0;
     }
-    
+
     {
         int nInfo = outputVector->GetNumberOfInformationObjects();
-        cout<<"requestData with " << nInfo << " items\n";
+        if (Foam::vtkPV3Foam::debug)
+        {
+            cout<<"requestData with " << nInfo << " items\n";
+        }
         for (int i=0; i<nInfo; i++)
         {
             vtkInformation *info = outputVector->GetInformationObject(i);
-            info->Print(cout);
+
+            if (Foam::vtkPV3Foam::debug)
+            {
+                info->Print(cout);
+            }
         }
     }
 
@@ -284,38 +293,38 @@ int vtkPV3FoamReader::RequestData
     (
         outInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
     );
-    
-#if 1
+
+    if (Foam::vtkPV3Foam::debug)
     {
         vtkInformation* outputInfo = this->GetOutputPortInformation(0);
         outputInfo->Print(cout);
-    
+
         vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast
         (
             outputInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
         );
-        if (output) 
+        if (output)
         {
             output->Print(cout);
         }
         else
         {
-            cout << "no output\n";
+            cout<< "no output\n";
         }
-        
+
         vtkInformation* execInfo = this->GetExecutive()->GetOutputInformation(0);
         execInfo->Print(cout);
-        
+
         outInfo->Print(cout);
-        
+
         vtkMultiBlockDataSet* dobj = vtkMultiBlockDataSet::SafeDownCast
         (
             outInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
         );
-        if (dobj) 
+        if (dobj)
         {
             dobj->Print(cout);
-            
+
             vtkInformation* dobjInfo = dobj->GetInformation();
             dobjInfo->Print(cout);
         }
@@ -323,16 +332,16 @@ int vtkPV3FoamReader::RequestData
         {
             cout << "no data_object\n";
         }
-        
-
     }
-#endif
 
     if (outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))
     {
-        cout<<"Has UPDATE_TIME_STEPS\n";
-        cout<<"output->GetNumberOfBlocks() " << output->GetNumberOfBlocks() <<
-            "\n";
+        if (Foam::vtkPV3Foam::debug)
+        {
+            cout<<"Has UPDATE_TIME_STEPS\n";
+            cout<<"output->GetNumberOfBlocks() = "
+                << output->GetNumberOfBlocks() << "\n";
+        }
 
         // Get the requested time step.
         // We only supprt requests of a single time step
@@ -370,10 +379,6 @@ int vtkPV3FoamReader::RequestData
     }
     UpdateGUIOld = GetUpdateGUI();
 
-    cout<<"done RequestData\n";
-    cout<<"done output->GetNumberOfBlocks() "
-        << output->GetNumberOfBlocks() << "\n";
-
     return 1;
 }
 
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
index e019e299d0c..8b3c5a3b478 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
@@ -84,13 +84,15 @@ void Foam::vtkPV3Foam::AddToBlock
         output->SetBlock(blockNo, block);
         block->Delete();
     }
-
-    if (block)
+    else
     {
-        Info<< "block[" << blockNo << "] has "
-            << block->GetNumberOfBlocks()
-            <<  " datasets prior to adding set " << datasetNo
-            <<  " with name: " << blockName << endl;
+        if (debug)
+        {
+            Info<< "block[" << blockNo << "] has "
+                << block->GetNumberOfBlocks()
+                <<  " datasets prior to adding set " << datasetNo
+                <<  " with name: " << blockName << endl;
+        }
 
         // when assigning dataset 0, also name the parent block
         if (!datasetNo && selector.name())
@@ -481,8 +483,11 @@ Foam::vtkPV3Foam::vtkPV3Foam
 
     dbPtr_().functionObjects().off();
 
-    cout<<"constructed with output: ";
-    output_->Print(cout),
+    if (debug)
+    {
+        cout<< "constructed with output: ";
+        output_->Print(cout);
+    }
 
     resetCounters();
 
@@ -579,8 +584,8 @@ void Foam::vtkPV3Foam::Update
 {
     if (debug)
     {
-        Info<< "entered Foam::vtkPV3Foam::Update" << endl;
-        cout<<"Update\n";
+        cout<< "entered Foam::vtkPV3Foam::Update" << nl
+             <<"Update\n";
         output->Print(cout);
 
         cout<<"Internally:\n";
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
index f5aadcd0512..a1d374cc9d2 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
@@ -172,6 +172,7 @@ public:
             }
         };
 
+
 private:
 
     // Private data
@@ -645,85 +646,6 @@ public:
 };
 
 
-// * * * * * * * * * * * * * Template Specialisations  * * * * * * * * * * * //
-
-template<>
-void vtkPV3Foam::convertVolField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>& sf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo,
-    labelList& superCells
-);
-
-
-template<>
-void vtkPV3Foam::convertPatchFaceField
-(
-    const word& name,
-    const Field<scalar>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo
-);
-
-template<>
-void vtkPV3Foam::convertFaceField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo,
-    const fvMesh&,
-    const labelList& faceLabels
-);
-
-
-template<>
-void vtkPV3Foam::convertFaceField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo,
-    const fvMesh&,
-    const faceSet&
-);
-
-
-template<>
-void vtkPV3Foam::convertPointField
-(
-    const GeometricField<scalar, pointPatchField, pointMesh>&,
-    const GeometricField<scalar, fvPatchField, volMesh>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo
-);
-
-
-template<>
-void vtkPV3Foam::convertPatchPointField
-(
-    const word& name,
-    const Field<scalar>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo
-);
-
-
-template<>
-void vtkPV3Foam::convertLagrangianField
-(
-    const IOField<scalar>&,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo&,
-    const label datasetNo
-);
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H
index c6b3e51d478..114aab667a5 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H
@@ -48,6 +48,8 @@ void Foam::vtkPV3Foam::convertFaceField
     const labelList& faceLabels
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -59,33 +61,30 @@ void Foam::vtkPV3Foam::convertFaceField
 
     vtkFloatArray *cellData = vtkFloatArray::New();
     cellData->SetNumberOfTuples(faceLabels.size());
-    cellData->SetNumberOfComponents(Type::nComponents);
-    cellData->Allocate(Type::nComponents*faceLabels.size());
+    cellData->SetNumberOfComponents(nComp);
+    cellData->Allocate(nComp*faceLabels.size());
     cellData->SetName(tf.name().c_str());
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(faceLabels, faceI)
     {
         const label faceNo = faceLabels[faceI];
         if (faceNo < nInternalFaces)
         {
-            Type t = 0.5 *
-            (
-                tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]
-            );
+            Type t = 0.5*(tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]);
 
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
         }
         else
         {
             const Type& t = tf[faceOwner[faceNo]];
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
         }
 
@@ -108,6 +107,8 @@ void Foam::vtkPV3Foam::convertFaceField
     const faceSet& fSet
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -119,11 +120,11 @@ void Foam::vtkPV3Foam::convertFaceField
 
     vtkFloatArray *cellData = vtkFloatArray::New();
     cellData->SetNumberOfTuples(fSet.size());
-    cellData->SetNumberOfComponents(Type::nComponents);
-    cellData->Allocate(Type::nComponents*fSet.size());
+    cellData->SetNumberOfComponents(nComp);
+    cellData->Allocate(nComp*fSet.size());
     cellData->SetName(tf.name().c_str());
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     label faceI = 0;
     forAllConstIter(faceSet, fSet, iter)
@@ -132,22 +133,19 @@ void Foam::vtkPV3Foam::convertFaceField
 
         if (faceNo < nInternalFaces)
         {
-            Type t = 0.5 *
-            (
-                tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]
-            );
+            Type t = 0.5*(tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]]);
 
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
         }
         else
         {
             const Type& t = tf[faceOwner[faceNo]];
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
         }
 
@@ -160,125 +158,6 @@ void Foam::vtkPV3Foam::convertFaceField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertFaceField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>& tf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo,
-    const fvMesh& mesh,
-    const labelList& faceLabels
-)
-{
-    vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    const label nInternalFaces = mesh.nInternalFaces();
-    const labelList& faceOwner = mesh.faceOwner();
-    const labelList& faceNeigh = mesh.faceNeighbour();
-
-    vtkFloatArray *cellData = vtkFloatArray::New();
-    cellData->SetNumberOfTuples(faceLabels.size());
-    cellData->SetNumberOfComponents(1);
-    cellData->Allocate(faceLabels.size());
-    cellData->SetName(tf.name().c_str());
-
-    forAll(faceLabels, faceI)
-    {
-        const label faceNo = faceLabels[faceI];
-        if (faceNo < nInternalFaces)
-        {
-            cellData->InsertComponent
-            (
-                faceI,
-                0,
-                0.5 * (tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]])
-            );
-        }
-        else
-        {
-            cellData->InsertComponent
-            (
-                faceI, 0, tf[faceOwner[faceNo]]
-            );
-        }
-
-    }
-
-    vtkmesh->GetCellData()->AddArray(cellData);
-
-    if (!vtkmesh->GetCellData()->GetScalars())
-    {
-        vtkmesh->GetCellData()->SetScalars(cellData);
-    }
-
-    cellData->Delete();
-}
-
-
-template<>
-void Foam::vtkPV3Foam::convertFaceField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>& tf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo,
-    const fvMesh& mesh,
-    const faceSet& fSet
-)
-{
-    vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    const label nInternalFaces = mesh.nInternalFaces();
-    const labelList& faceOwner = mesh.faceOwner();
-    const labelList& faceNeigh = mesh.faceNeighbour();
-
-    vtkFloatArray *cellData = vtkFloatArray::New();
-    cellData->SetNumberOfTuples(fSet.size());
-    cellData->SetNumberOfComponents(1);
-    cellData->Allocate(fSet.size());
-    cellData->SetName(tf.name().c_str());
-
-    label faceI = 0;
-    forAllConstIter(faceSet, fSet, iter)
-    {
-        const label faceNo = iter.key();
-        if (faceNo < nInternalFaces)
-        {
-            cellData->InsertComponent
-            (
-                faceI,
-                0,
-                0.5 * (tf[faceOwner[faceNo]] + tf[faceNeigh[faceNo]])
-            );
-        }
-        else
-        {
-            cellData->InsertComponent
-            (
-                faceI, 0, tf[faceOwner[faceNo]]
-            );
-        }
-        ++faceI;
-    }
-
-    vtkmesh->GetCellData()->AddArray(cellData);
-
-    if (!vtkmesh->GetCellData()->GetScalars())
-    {
-        vtkmesh->GetCellData()->SetScalars(cellData);
-    }
-
-    cellData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H
index 7f999440084..0ccc3f81a04 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H
@@ -95,6 +95,8 @@ void Foam::vtkPV3Foam::convertLagrangianField
     const label datasetNo
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -102,24 +104,24 @@ void Foam::vtkPV3Foam::convertLagrangianField
 
     vtkFloatArray *pointData = vtkFloatArray::New();
     pointData->SetNumberOfTuples(tf.size());
-    pointData->SetNumberOfComponents(Type::nComponents);
-    pointData->Allocate(Type::nComponents*tf.size());
+    pointData->SetNumberOfComponents(nComp);
+    pointData->Allocate(nComp*tf.size());
     pointData->SetName(tf.name().c_str());
 
     if (debug)
     {
         Info<< "converting Lagrangian <Type>Field: " << tf.name() << nl
             << "tf.size() = " << tf.size() << nl
-            << "nComps  = " << Type::nComponents << endl;
+            << "nComp  = " << nComp << endl;
     }
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(tf, i)
     {
-        for (direction d=0; d<Type::nComponents; d++)
+        for (direction d=0; d<nComp; d++)
         {
-            vec[d] = tf[i][d];
+            vec[d] = component(tf[i], d);
         }
 
         pointData->InsertTuple(i, vec);
@@ -130,48 +132,6 @@ void Foam::vtkPV3Foam::convertLagrangianField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertLagrangianField
-(
-    const IOField<scalar>& sf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo
-)
-{
-    vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    vtkFloatArray *pointData = vtkFloatArray::New();
-    pointData->SetNumberOfTuples(sf.size());
-    pointData->SetNumberOfComponents(1);
-    pointData->Allocate(sf.size());
-    pointData->SetName(sf.name().c_str());
-
-    if (debug)
-    {
-        Info<< "converting Lagrangian scalarField: " << sf.name() << nl
-            << "sf.size() = " << sf.size() << nl
-            << "nComps  = 1" << endl;
-    }
-
-    for (int i=0; i<sf.size(); i++)
-    {
-        pointData->InsertComponent(i, 0, sf[i]);
-    }
-
-    vtkmesh->GetPointData()->AddArray(pointData);
-    if (!vtkmesh->GetPointData()->GetScalars())
-    {
-        vtkmesh->GetPointData()->SetScalars(pointData);
-    }
-
-    pointData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H
index 11954235ea5..af0fde5e21d 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H
@@ -48,6 +48,8 @@ void Foam::vtkPV3Foam::convertPatchFaceField
     const label datasetNo
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -55,18 +57,18 @@ void Foam::vtkPV3Foam::convertPatchFaceField
 
     vtkFloatArray *cellData = vtkFloatArray::New();
     cellData->SetNumberOfTuples(ptf.size());
-    cellData->SetNumberOfComponents(Type::nComponents);
-    cellData->Allocate(Type::nComponents*ptf.size());
+    cellData->SetNumberOfComponents(nComp);
+    cellData->Allocate(nComp*ptf.size());
     cellData->SetName(name.c_str());
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(ptf, i)
     {
         const Type& t = ptf[i];
-        for (direction d=0; d<Type::nComponents; d++)
+        for (direction d=0; d<nComp; d++)
         {
-            vec[d] = t[d];
+            vec[d] = component(t, d);
         }
 
         cellData->InsertTuple(i, vec);
@@ -77,43 +79,6 @@ void Foam::vtkPV3Foam::convertPatchFaceField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertPatchFaceField
-(
-    const word& name,
-    const Field<scalar>& psf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo
-)
-{
-    vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    vtkFloatArray *cellData = vtkFloatArray::New();
-    cellData->SetNumberOfTuples(psf.size());
-    cellData->SetNumberOfComponents(1);
-    cellData->Allocate(psf.size());
-    cellData->SetName(name.c_str());
-
-    forAll(psf, i)
-    {
-        cellData->InsertComponent(i, 0, psf[i]);
-    }
-
-    vtkmesh->GetCellData()->AddArray(cellData);
-
-    if (!vtkmesh->GetCellData()->GetScalars())
-    {
-        vtkmesh->GetCellData()->SetScalars(cellData);
-    }
-
-    cellData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H
index c0a3a92f9ab..a793958218a 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H
@@ -45,6 +45,8 @@ void Foam::vtkPV3Foam::convertPatchPointField
     const label datasetNo
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -52,17 +54,17 @@ void Foam::vtkPV3Foam::convertPatchPointField
 
     vtkFloatArray *pointData = vtkFloatArray::New();
     pointData->SetNumberOfTuples(pptf.size());
-    pointData->SetNumberOfComponents(Type::nComponents);
-    pointData->Allocate(Type::nComponents*pptf.size());
+    pointData->SetNumberOfComponents(nComp);
+    pointData->Allocate(nComp*pptf.size());
     pointData->SetName(name.c_str());
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(pptf, i)
     {
-        for (direction d=0; d<Type::nComponents; d++)
+        for (direction d=0; d<nComp; d++)
         {
-            vec[d] = pptf[i][d];
+            vec[d] = component(pptf[i], d);
         }
 
         pointData->InsertTuple(i, vec);
@@ -73,42 +75,6 @@ void Foam::vtkPV3Foam::convertPatchPointField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertPatchPointField
-(
-    const word& name,
-    const Field<scalar>& ppsf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo
-)
-{
-    vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    vtkFloatArray *pointData = vtkFloatArray::New();
-    pointData->SetNumberOfTuples(ppsf.size());
-    pointData->SetNumberOfComponents(1);
-    pointData->Allocate(ppsf.size());
-    pointData->SetName(name.c_str());
-
-    for (int i=0; i<ppsf.size(); i++)
-    {
-        pointData->InsertComponent(i, 0, ppsf[i]);
-    }
-
-    vtkmesh->GetPointData()->AddArray(pointData);
-    if (!vtkmesh->GetPointData()->GetScalars())
-    {
-        vtkmesh->GetPointData()->SetScalars(pointData);
-    }
-
-    pointData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H
index fc16caca719..28d7fdfe5d0 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H
@@ -33,8 +33,6 @@ InClass
 // Foam includes
 #include "interpolatePointToCell.H"
 
-// VTK includes
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 template<class Type>
@@ -145,6 +143,8 @@ void Foam::vtkPV3Foam::convertPointField
     const label datasetNo
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkUnstructuredGrid* internalMesh = vtkUnstructuredGrid::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -152,17 +152,17 @@ void Foam::vtkPV3Foam::convertPointField
 
     vtkFloatArray *pointData = vtkFloatArray::New();
     pointData->SetNumberOfTuples(ptf.size() + addPointCellLabels_.size());
-    pointData->SetNumberOfComponents(Type::nComponents);
-    pointData->Allocate(Type::nComponents*ptf.size());
+    pointData->SetNumberOfComponents(nComp);
+    pointData->Allocate(nComp*ptf.size());
     pointData->SetName(tf.name().c_str());
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(ptf, i)
     {
-        for (direction d=0; d<Type::nComponents; d++)
+        for (direction d=0; d<nComp; d++)
         {
-            vec[d] = ptf[i][d];
+            vec[d] = component(ptf[i], d);
         }
 
         pointData->InsertTuple(i, vec);
@@ -176,9 +176,9 @@ void Foam::vtkPV3Foam::convertPointField
         {
             Type t = tf[addPointCellLabels_[api]];
 
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
 
             pointData->InsertTuple(i++, vec);
@@ -190,9 +190,9 @@ void Foam::vtkPV3Foam::convertPointField
         {
             Type t = interpolatePointToCell(ptf, addPointCellLabels_[api]);
 
-            for (direction d=0; d<Type::nComponents; d++)
+            for (direction d=0; d<nComp; d++)
             {
-                vec[d] = t[d];
+                vec[d] = component(t, d);
             }
 
             pointData->InsertTuple(i++, vec);
@@ -204,69 +204,6 @@ void Foam::vtkPV3Foam::convertPointField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertPointField
-(
-    const GeometricField<scalar, pointPatchField, pointMesh>& psf,
-    const GeometricField<scalar, fvPatchField, volMesh>& sf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo
-)
-{
-    vtkUnstructuredGrid* internalMesh = vtkUnstructuredGrid::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    vtkFloatArray *pointData = vtkFloatArray::New();
-    pointData->SetNumberOfTuples(psf.size() + addPointCellLabels_.size());
-    pointData->SetNumberOfComponents(1);
-    pointData->Allocate(psf.size());
-    pointData->SetName(sf.name().c_str());
-
-    for (int i=0; i<psf.size(); i++)
-    {
-        pointData->InsertComponent(i, 0, psf[i]);
-    }
-
-    label i = psf.size();
-
-    if (&sf != &GeometricField<scalar, fvPatchField, volMesh>::null())
-    {
-        forAll(addPointCellLabels_, api)
-        {
-            pointData->InsertComponent
-            (
-                i++,
-                0,
-                sf[addPointCellLabels_[api]]
-            );
-        }
-    }
-    else
-    {
-        forAll(addPointCellLabels_, api)
-        {
-            pointData->InsertComponent
-            (
-                i++,
-                0,
-                interpolatePointToCell(psf, addPointCellLabels_[api])
-            );
-        }
-    }
-
-    internalMesh->GetPointData()->AddArray(pointData);
-    if (!internalMesh->GetPointData()->GetScalars())
-    {
-        internalMesh->GetPointData()->SetScalars(pointData);
-    }
-
-    pointData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H
index 4fcdd1725e2..ff2a1d8bcef 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H
@@ -372,6 +372,8 @@ void Foam::vtkPV3Foam::convertVolField
     labelList& superCells
 )
 {
+    const label nComp = pTraits<Type>::nComponents;
+
     vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::SafeDownCast
     (
         GetDataSetFromBlock(output, selector, datasetNo)
@@ -379,8 +381,8 @@ void Foam::vtkPV3Foam::convertVolField
 
     vtkFloatArray* celldata = vtkFloatArray::New();
     celldata->SetNumberOfTuples(superCells.size());
-    celldata->SetNumberOfComponents(Type::nComponents);
-    celldata->Allocate(Type::nComponents*superCells.size());
+    celldata->SetNumberOfComponents(nComp);
+    celldata->Allocate(nComp*superCells.size());
     celldata->SetName(tf.name().c_str());
 
     if (debug)
@@ -388,17 +390,17 @@ void Foam::vtkPV3Foam::convertVolField
         Info<< "converting vol<Type>Field: " << tf.name() << nl
             << "field size = " << tf.size() << nl
             << "nTuples = " << superCells.size() << nl
-            << "nComps  = " << Type::nComponents << endl;
+            << "nComp  = " << nComp << endl;
     }
 
-    float vec[Type::nComponents];
+    float vec[nComp];
 
     forAll(superCells, scI)
     {
         const Type& t = tf[superCells[scI]];
-        for (direction d=0; d<Type::nComponents; d++)
+        for (direction d=0; d<nComp; d++)
         {
-            vec[d] = t[d];
+            vec[d] = component(t, d);
         }
 
         celldata->InsertTuple(scI, vec);
@@ -409,50 +411,6 @@ void Foam::vtkPV3Foam::convertVolField
 }
 
 
-template<>
-void Foam::vtkPV3Foam::convertVolField
-(
-    const GeometricField<scalar, fvPatchField, volMesh>& sf,
-    vtkMultiBlockDataSet* output,
-    const selectionInfo& selector,
-    const label datasetNo,
-    labelList& superCells
-)
-{
-    vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::SafeDownCast
-    (
-        GetDataSetFromBlock(output, selector, datasetNo)
-    );
-
-    vtkFloatArray *cellData = vtkFloatArray::New();
-    cellData->SetNumberOfTuples(superCells.size());
-    cellData->SetNumberOfComponents(1);
-    cellData->Allocate(superCells.size());
-    cellData->SetName(sf.name().c_str());
-
-    if (debug)
-    {
-        Info<< "converting volScalarField: " << sf.name() << nl
-            << "field size = " << sf.size() << nl
-            << "nTuples = " << superCells.size() << nl
-            << "nComps  = 1" << endl;
-    }
-
-    forAll(superCells, scI)
-    {
-        cellData->InsertComponent(scI, 0, sf[superCells[scI]]);
-    }
-
-    vtkmesh->GetCellData()->AddArray(cellData);
-    if (!vtkmesh->GetCellData()->GetScalars())
-    {
-        vtkmesh->GetCellData()->SetScalars(cellData);
-    }
-
-    cellData->Delete();
-}
-
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #endif
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdate.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdate.C
index c1babdcdc98..e7e4ac91066 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdate.C
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdate.C
@@ -114,6 +114,12 @@ void Foam::vtkPV3Foam::updateVolFields
     }
 
     volPointInterpolation pInterp(mesh, pMesh);
+/*
+    convertVolFields<Foam::label>
+    (
+        mesh, pInterp, objects, arraySelection, output
+    );
+*/
     convertVolFields<Foam::scalar>
     (
         mesh, pInterp, objects, arraySelection, output
@@ -159,7 +165,12 @@ void Foam::vtkPV3Foam::updatePointFields
     {
         Info<< "converting Foam point fields" << endl;
     }
-
+/*
+    convertPointFields<Foam::label>
+    (
+        mesh, objects, arraySelection, output
+    );
+*/
     convertPointFields<Foam::scalar>
     (
         mesh, objects, arraySelection, output
@@ -213,6 +224,11 @@ void Foam::vtkPV3Foam::updateLagrangianFields
         Info<< "converting Foam Lagrangian fields" << endl;
     }
 
+    convertLagrangianFields<Foam::label>
+    (
+        mesh, objects, arraySelection, output
+    );
+
     convertLagrangianFields<Foam::scalar>
     (
         mesh, objects, arraySelection, output
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C
index c6a520f6734..424fb6d3567 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C
@@ -108,15 +108,13 @@ void Foam::vtkPV3Foam::updateInformationLagrangian()
 {
     if (debug)
     {
-        Info<< "entered Foam::vtkPV3Foam::updateInformationLagrangian at timePath "
-            << dbPtr_->timePath()/"lagrangian" << endl;
+        Info<< "entered Foam::vtkPV3Foam::updateInformationLagrangian "
+            << "at timePath " << dbPtr_->timePath()/"lagrangian" << endl;
     }
 
     vtkDataArraySelection* arraySelection = reader_->GetRegionSelection();
 
     // Search for list of lagrangian objects for this time
-    // IOobjectList lagrangianObjects(dbPtr(), dbPtr_().timeName(), "lagrangian");
-
     fileNameList cloudDirs
     (
         readDir(dbPtr_->timePath()/"lagrangian", fileName::DIRECTORY)
@@ -144,7 +142,8 @@ void Foam::vtkPV3Foam::updateInformationLagrangian()
     }
     else
     {
-        Info<<"no cloudDirs @ " << dbPtr_->timePath()/"lagrangian" << endl;
+        Info<<"no clouds identified in "
+            << dbPtr_->timePath()/"lagrangian" << endl;
     }
 
 }
@@ -159,7 +158,7 @@ void Foam::vtkPV3Foam::updateInformationPatches()
 
     vtkDataArraySelection *arraySelection = reader_->GetRegionSelection();
 
-    //- Read patches
+    // Read patches
     polyBoundaryMeshEntries patchEntries
     (
         IOobject
@@ -182,7 +181,7 @@ void Foam::vtkPV3Foam::updateInformationPatches()
     {
         label nFaces(readLabel(patchEntries[entryI].dict().lookup("nFaces")));
 
-        //- Valid patch if nFace > 0
+        // Valid patch if nFace > 0
         if (nFaces)
         {
             // Add patch to GUI region list
@@ -208,7 +207,7 @@ void Foam::vtkPV3Foam::updateInformationZones()
 
     vtkDataArraySelection *arraySelection = reader_->GetRegionSelection();
 
-    //- Read cell zone information
+    // Read cell zone information
     {
         zonesEntries zones
         (
@@ -240,7 +239,7 @@ void Foam::vtkPV3Foam::updateInformationZones()
         superCellZonesCells_.setSize(selectInfoCellZones_.size());
     }
 
-    //- Read face zone information
+    // Read face zone information
     {
         zonesEntries zones
         (
@@ -270,7 +269,7 @@ void Foam::vtkPV3Foam::updateInformationZones()
         }
     }
 
-    //- Read point zone information
+    // Read point zone information
     {
         zonesEntries zones
         (
@@ -373,6 +372,11 @@ void Foam::vtkPV3Foam::updateInformationLagrangianFields()
         "lagrangian"/cloudName_
     );
 
+    addFields<IOField<label> >
+    (
+        arraySelection,
+        objects
+    );
     addFields<IOField<scalar> >
     (
         arraySelection,
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H
index d93a8801289..91571ca5f4b 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H
@@ -55,6 +55,13 @@ void Foam::vtkPV3Foam::updateInformationFields
     // Populate the GUI volume/point field arrays
 
     //- Add volume fields to GUI
+/*
+    addFields<GeometricField<label, patchType, meshType> >
+    (
+        arraySelection,
+        objects
+    );
+*/
     addFields<GeometricField<scalar, patchType, meshType> >
     (
         arraySelection,
diff --git a/bin/paraFoam b/bin/paraFoam
index e32dd57964d..93fb4cf03b1 100755
--- a/bin/paraFoam
+++ b/bin/paraFoam
@@ -77,8 +77,8 @@ do
    [ -s "$parentDir/$check" ] || usage "file does not exist:  '$parentDir/$check'"
 done
 
-caseFile="$caseName.foam"
-# caseFile="$caseName.OpenFOAM"
+#caseFile="$caseName.foam"
+caseFile="$caseName.OpenFOAM"
 
 case "$ParaView_VERSION" in
 2*)
-- 
GitLab