From ce202b898f104cbb668e5cb2f5620a8bbce4567c Mon Sep 17 00:00:00 2001
From: Utkarsh Ayachit <utkarsh.ayachit@kitware.com>
Date: Wed, 24 May 2017 14:44:40 -0400
Subject: [PATCH] PLOT3D Reader: avoid duplicate computations

vtkMultiBlockPLOT3DReader would compute certain derrived quantities
multiple times. Avoid that.
---
 IO/Parallel/vtkMultiBlockPLOT3DReader.cxx | 52 +++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/IO/Parallel/vtkMultiBlockPLOT3DReader.cxx b/IO/Parallel/vtkMultiBlockPLOT3DReader.cxx
index 46234eeadd..e3ec7275c9 100644
--- a/IO/Parallel/vtkMultiBlockPLOT3DReader.cxx
+++ b/IO/Parallel/vtkMultiBlockPLOT3DReader.cxx
@@ -2185,6 +2185,11 @@ void vtkMultiBlockPLOT3DReader::ComputeTemperature(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Temperature"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2246,6 +2251,12 @@ void vtkMultiBlockPLOT3DReader::ComputePressure(vtkStructuredGrid* output)
     return;
   }
 
+  if (outputPD->GetArray("Pressure"))
+  {
+    // already computed.
+    return;
+  }
+
   vtkIdType numPts = density->GetNumberOfTuples();
   pressure = this->NewFloatArray();
   pressure->SetNumberOfTuples(numPts);
@@ -2282,6 +2293,12 @@ void vtkMultiBlockPLOT3DReader::ComputeEnthalpy(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Enthalpy"))
+  {
+    // already computed
+    return;
+  }
+
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2327,6 +2344,11 @@ void vtkMultiBlockPLOT3DReader::ComputeKineticEnergy(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("KineticEnergy"))
+  {
+    // already computed
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   if ( density == NULL || momentum == NULL )
@@ -2368,6 +2390,11 @@ void vtkMultiBlockPLOT3DReader::ComputeVelocityMagnitude(vtkStructuredGrid* outp
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("VelocityMagnitude"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2411,6 +2438,11 @@ void vtkMultiBlockPLOT3DReader::ComputeEntropy(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Entropy"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2463,6 +2495,11 @@ void vtkMultiBlockPLOT3DReader::ComputeSwirl(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Swirl"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2521,6 +2558,11 @@ void vtkMultiBlockPLOT3DReader::ComputeVelocity(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Velocity"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2571,6 +2613,11 @@ void vtkMultiBlockPLOT3DReader::ComputeVorticity(vtkStructuredGrid* output)
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("Vorticity"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
@@ -2803,6 +2850,11 @@ void vtkMultiBlockPLOT3DReader::ComputePressureGradient(vtkStructuredGrid* outpu
   //  Check that the required data is available
   //
   vtkPointData* outputPD = output->GetPointData();
+  if (outputPD->GetArray("PressureGradient"))
+  {
+    // already computed.
+    return;
+  }
   vtkDataArray* density = outputPD->GetArray("Density");
   vtkDataArray* momentum = outputPD->GetArray("Momentum");
   vtkDataArray* energy = outputPD->GetArray("StagnationEnergy");
-- 
GitLab