vtkMaterialInterfaceFilter.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
2 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
3 // SPDX-License-Identifier: BSD-3-Clause
26 #ifndef vtkMaterialInterfaceFilter_h
27 #define vtkMaterialInterfaceFilter_h
28 
30 #include "vtkPVVTKExtensionsFiltersMaterialInterfaceModule.h" //needed for exports
31 #include <string> // needed for string
32 #include <vector> // needed for vector
33 
34 #include "vtkSmartPointer.h" // needed for smart pointer
35 #include "vtkTimerLog.h" // needed for vtkTimerLog.
36 
37 class vtkDataSet;
38 class vtkImageData;
39 class vtkPolyData;
41 class vtkPoints;
42 class vtkDoubleArray;
43 class vtkCellArray;
44 class vtkCellData;
45 class vtkIntArray;
48 class vtkCallbackCommand;
50 
51 // specific to us
52 class vtkMaterialInterfaceLevel;
53 class vtkMaterialInterfaceFilterBlock;
54 class vtkMaterialInterfaceFilterIterator;
55 class vtkMaterialInterfaceEquivalenceSet;
56 class vtkMaterialInterfaceFilterRingBuffer;
59 
62 {
63 public:
66  void PrintSelf(ostream& os, vtkIndent indent) override;
67 
68  // PARAVIEW interface stuff
69 
71 
74  void SelectMaterialArray(const char* name);
78  void UnselectMaterialArray(const char* name);
82  void UnselectAllMaterialArrays();
86  void SetMaterialArrayStatus(const char* name, int status);
88 
91  int GetMaterialArrayStatus(const char* name);
92  int GetMaterialArrayStatus(int index);
94 
97  int GetNumberOfMaterialArrays();
101  const char* GetMaterialArrayName(int index);
102 
104 
107  void SelectMassArray(const char* name);
111  void UnselectMassArray(const char* name);
115  void UnselectAllMassArrays();
119  void SetMassArrayStatus(const char* name, int status);
121 
124  int GetMassArrayStatus(const char* name);
125  int GetMassArrayStatus(int index);
127 
130  int GetNumberOfMassArrays();
134  const char* GetMassArrayName(int index);
135 
137 
140  void SelectVolumeWtdAvgArray(const char* name);
144  void UnselectVolumeWtdAvgArray(const char* name);
148  void UnselectAllVolumeWtdAvgArrays();
149 
153  void SetVolumeWtdAvgArrayStatus(const char* name, int status);
155 
158  int GetVolumeWtdAvgArrayStatus(const char* name);
159  int GetVolumeWtdAvgArrayStatus(int index);
161 
164  int GetNumberOfVolumeWtdAvgArrays();
168  const char* GetVolumeWtdAvgArrayName(int index);
169 
171 
174  void SelectMassWtdAvgArray(const char* name);
178  void UnselectMassWtdAvgArray(const char* name);
182  void UnselectAllMassWtdAvgArrays();
183 
187  void SetMassWtdAvgArrayStatus(const char* name, int status);
189 
192  int GetMassWtdAvgArrayStatus(const char* name);
193  int GetMassWtdAvgArrayStatus(int index);
195 
198  int GetNumberOfMassWtdAvgArrays();
202  const char* GetMassWtdAvgArrayName(int index);
203 
205 
208  void SelectSummationArray(const char* name);
212  void UnselectSummationArray(const char* name);
216  void UnselectAllSummationArrays();
220  void SetSummationArrayStatus(const char* name, int status);
222 
225  int GetSummationArrayStatus(const char* name);
226  int GetSummationArrayStatus(int index);
228 
231  int GetNumberOfSummationArrays();
235  const char* GetSummationArrayName(int index);
236 
239 
242  void SetMaterialFractionThreshold(double fraction);
243  vtkGetMacro(MaterialFractionThreshold, double);
245 
248 
251  vtkSetMacro(ComputeOBB, bool);
252  vtkGetMacro(ComputeOBB, bool);
254 
257 
267  void SetUpperLoadingBound(int nPolys);
268  vtkGetMacro(UpperLoadingBound, int);
270 
273 
276  vtkSetStringMacro(OutputBaseName);
277  vtkGetStringMacro(OutputBaseName);
280 
283  vtkSetMacro(WriteGeometryOutput, bool);
284  vtkGetMacro(WriteGeometryOutput, bool);
285  vtkSetMacro(WriteStatisticsOutput, bool);
286  vtkGetMacro(WriteStatisticsOutput, bool);
288 
290 
295  vtkSetMacro(BlockGhostLevel, unsigned char);
296  vtkGetMacro(BlockGhostLevel, unsigned char);
298 
302  static void SelectionModifiedCallback(vtkObject*, unsigned long, void* clientdata, void*);
303 
305 
308  void SetClipFunction(vtkImplicitFunction* clipFunction);
309  vtkGetObjectMacro(ClipFunction, vtkImplicitFunction);
311 
313 
317  vtkSetMacro(InvertVolumeFraction, int);
318  vtkGetMacro(InvertVolumeFraction, int);
320 
324  vtkMTimeType GetMTime() override;
325 
326 protected:
328  ~vtkMaterialInterfaceFilter() override;
329 
331  int FillInputPortInformation(int port, vtkInformation* info) override;
332  int FillOutputPortInformation(int port, vtkInformation* info) override;
333 
334  // Set up the result arrays for the calculations we are about to
335  // make.
336  void PrepareForPass(vtkNonOverlappingAMR* hbdsInput,
337  std::vector<std::string>& volumeWtdAvgArrayNames,
338  std::vector<std::string>& massWtdAvgArrayNames, std::vector<std::string>& summedArrayNames,
339  std::vector<std::string>& integratedArrayNames);
340  // Create a new fragment/piece.
341  vtkPolyData* NewFragmentMesh();
342  // Process each cell, looking for fragments.
343  int ProcessBlock(int blockId);
344  // Cell has been identified as inside the fragment. Integrate, and
345  // generate fragment surface etc...
346  void ConnectFragment(vtkMaterialInterfaceFilterRingBuffer* iterator);
347  void GetNeighborIterator(vtkMaterialInterfaceFilterIterator* next,
348  vtkMaterialInterfaceFilterIterator* iterator, int axis0, int maxFlag0, int axis1, int maxFlag1,
349  int axis2, int maxFlag2);
350  void GetNeighborIteratorPad(vtkMaterialInterfaceFilterIterator* next,
351  vtkMaterialInterfaceFilterIterator* iterator, int axis0, int maxFlag0, int axis1, int maxFlag1,
352  int axis2, int maxFlag2);
353  void CreateFace(vtkMaterialInterfaceFilterIterator* in, vtkMaterialInterfaceFilterIterator* out,
354  int axis, int outMaxFlag);
355  int ComputeDisplacementFactors(vtkMaterialInterfaceFilterIterator* pointNeighborIterators[8],
356  double displacmentFactors[3], int rootNeighborIdx, int faceAxis);
357  int SubVoxelPositionCorner(double* point,
358  vtkMaterialInterfaceFilterIterator* pointNeighborIterators[8], int rootNeighborIdx,
359  int faceAxis);
360  void FindPointNeighbors(vtkMaterialInterfaceFilterIterator* iteratorMin0,
361  vtkMaterialInterfaceFilterIterator* iteratorMax0, int axis0, int maxFlag1, int maxFlag2,
362  vtkMaterialInterfaceFilterIterator pointNeighborIterators[8], double pt[3]);
363  // Finds a global origin for the data set, and level 0 dx
364  int ComputeOriginAndRootSpacingOld(vtkNonOverlappingAMR* input);
365  void ComputeOriginAndRootSpacing(vtkNonOverlappingAMR* input);
366  // Returns the total number of local(wrt this proc) blocks.
367  int GetNumberOfLocalBlocks(vtkNonOverlappingAMR* input);
368  // Complex ghost layer Handling.
369  std::vector<vtkMaterialInterfaceFilterBlock*> GhostBlocks;
370  void ShareGhostBlocks();
371  void HandleGhostBlockRequests();
372  int ComputeRequiredGhostExtent(int level, int inExt[6], int outExt[6]);
373 
374  void ComputeAndDistributeGhostBlocks(
375  int* numBlocksInProc, int* blockMetaData, int myProc, int numProcs);
376 
378 
379  vtkMaterialInterfaceEquivalenceSet* EquivalenceSet;
380  void AddEquivalence(
381  vtkMaterialInterfaceFilterIterator* neighbor1, vtkMaterialInterfaceFilterIterator* neighbor2);
382  //
383  void PrepareForResolveEquivalences();
384  //
385  void ResolveEquivalences();
386  void GatherEquivalenceSets(vtkMaterialInterfaceEquivalenceSet* set);
387  void ShareGhostEquivalences(vtkMaterialInterfaceEquivalenceSet* globalSet, int* procOffsets);
388  void ReceiveGhostFragmentIds(vtkMaterialInterfaceEquivalenceSet* globalSet, int* procOffset);
389  void MergeGhostEquivalenceSets(vtkMaterialInterfaceEquivalenceSet* globalSet);
390 
391  // Sum/finalize attribute's contribution for those
392  // which are split over multiple processes.
393  int ResolveIntegratedAttributes(int controllingProcId);
394  // Initialize our attribute arrays to ho9ld resolved attributes
395  int PrepareToResolveIntegratedAttributes();
396 
397  // Send my integrated attributes to another process.
398  int SendIntegratedAttributes(int recipientProcId);
399  // Receive integrated attributes from another process.
400  int ReceiveIntegratedAttributes(int sourceProcId);
401  // Size buffers etc...
402  int PrepareToCollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
403  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
404  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
405  std::vector<std::vector<vtkDoubleArray*>>& volumeWtdAvgs,
406  std::vector<std::vector<vtkDoubleArray*>>& massWtdAvgs,
407  std::vector<std::vector<vtkDoubleArray*>>& sums);
408  // Free resources.
409  int CleanUpAfterCollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
410  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
411  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
412  std::vector<std::vector<vtkDoubleArray*>>& volumeWtdAvgs,
413  std::vector<std::vector<vtkDoubleArray*>>& massWtdAvgs,
414  std::vector<std::vector<vtkDoubleArray*>>& sums);
415  // Receive all integrated attribute arrays from all other
416  // processes.
417  int CollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
418  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
419  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
420  std::vector<std::vector<vtkDoubleArray*>>& volumeWtdAvgs,
421  std::vector<std::vector<vtkDoubleArray*>>& massWtdAvgs,
422  std::vector<std::vector<vtkDoubleArray*>>& sums);
423  // Send my integrated attributes to all other processes.
424  int BroadcastIntegratedAttributes(int sourceProcessId);
425  // Send my geometric attribuites to a controller.
426  int SendGeometricAttributes(int controllingProcId);
427  // size buffers & new containers
428  int PrepareToCollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
429  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
430  std::vector<int*>& ids);
431  // Free resources.
432  int CleanUpAfterCollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
433  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
434  std::vector<int*>& ids);
435  // Receive all geometric attributes from all other
436  // processes.
437  int CollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
438  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
439  std::vector<int*>& ids);
440  // size local copy to hold all.
441  int PrepareToMergeGeometricAttributes();
442  // Gather geometric attributes on a single process.
443  int GatherGeometricAttributes(int recipientProcId);
444  // Merge fragment's geometry that are split on this process
445  void ResolveLocalFragmentGeometry();
446  // Merge fragment's geometry that are split across processes
447  void ResolveRemoteFragmentGeometry();
448  // Clean duplicate points from fragment geometry.
449  void CleanLocalFragmentGeometry();
450  //
451  void BuildLoadingArray(std::vector<vtkIdType>& loadingArray);
452  int PackLoadingArray(vtkIdType*& buffer);
453  int UnPackLoadingArray(vtkIdType* buffer, int bufSize, std::vector<vtkIdType>& loadingArray);
454 
455  // copy any integrated attributes (volume, id, weighted averages, sums, etc)
456  // into the fragment polys in the output data sets.
457  void CopyAttributesToOutput0();
458  void CopyAttributesToOutput1();
459  void CopyAttributesToOutput2();
460  // Write a text file containing local fragment attributes.
461  int WriteGeometryOutputToTextFile();
462  int WriteStatisticsOutputToTextFile();
463  // Build the output data
464  int BuildOutputs(vtkMultiBlockDataSet* mbdsOutput0, vtkMultiBlockDataSet* mbdsOutput1,
465  vtkMultiBlockDataSet* mbdsOutput2, int materialId);
466 
467  // integration helper, returns 0 if the source array
468  // type is unsupported.
469  int Accumulate(double* dest, // scalar/vector result
470  vtkDataArray* src, // array to accumulate from
471  int nComps, //
472  int srcCellIndex, // which cell
473  double weight); // weight of contribution
474  int AccumulateMoments(double* moments, // =(Myz, Mxz, Mxy, m)
475  vtkDataArray* massArray, //
476  int srcCellIndex, // from which cell in mass
477  double* X);
478  // Compute the geomteric attributes that have been requested.
479  void ComputeGeometricAttributes();
480  int ComputeLocalFragmentOBB();
481  int ComputeLocalFragmentAABBCenters();
482  // int ComputeFragmentMVBB();
483 
484  // Format input block into an easy to access array with
485  // extra metadata (information) extracted.
487  vtkMaterialInterfaceFilterBlock** InputBlocks;
488  void DeleteAllBlocks();
489  int InitializeBlocks(vtkNonOverlappingAMR* input, std::string& materialFractionArrayName,
490  std::string& massArrayName, std::vector<std::string>& volumeWtdAvgArrayNames,
491  std::vector<std::string>& massWtdAvgArrayNames, std::vector<std::string>& summedArrayNames,
492  std::vector<std::string>& integratedArrayNames);
493  void AddBlock(vtkMaterialInterfaceFilterBlock* block, unsigned char levelOfGhostLayer);
494 
495  // New methods for connecting neighbors.
496  void CheckLevelsForNeighbors(vtkMaterialInterfaceFilterBlock* block);
497  // Returns 1 if there we neighbors found, 0 if not.
498  int FindFaceNeighbors(unsigned int blockLevel, int blockIndex[3], int faceAxis, int faceMaxFlag,
499  std::vector<vtkMaterialInterfaceFilterBlock*>* result);
500 
501  // We need ghost cells for edges and corners as well as faces.
502  // neighborDirection is used to specify a face, edge or corner.
503  // Using a 2x2x2 cube center at origin: (-1,-1,-1), (-1,-1,1) ... are corners.
504  // (1,1,0) is an edge, and (-1,0,0) is a face.
505  // Returns 1 if the neighbor exists.
506  int HasNeighbor(unsigned int blockLevel, int blockIndex[3], int neighborDirection[3]);
507 
508  // Threshold value used to select a cell
509  // as being iniside some fragment, PV uses
510  // a double between 0 and 1, this is stored here
512  // The extraction filter uses a scaled threshold
513  // in the range of 0 to 255
515  //
517  vtkSetStringMacro(MaterialFractionArrayName);
518 
519  // while processing a material array this holds
520  // a pointer to the output poly data
521  // data set
523  // As pieces/fragments are found they are stored here
524  // until resolution.
525  std::vector<vtkPolyData*> FragmentMeshes;
526 
527  // TODO? this could be cleaned up (somewhat) by
528  // adding an integration class which encapsulates
529  // all of the supported operations.
532  // Local id of current fragment
534  // Accumulator for the volume of the current fragment.
536  // Fragment volumes indexed by the fragment id. It's a local
537  // per-process indexing until fragments have been resolved
539 
540  // Min and max depth of crater.
541  // These are only computed when the clip plane is on.
542  double ClipDepthMin;
543  double ClipDepthMax;
546 
547  // Accumulator for moments of the current fragment
548  std::vector<double> FragmentMoment; // =(Myz, Mxz, Mxy, m)
549  // Moments indexed by fragment id
551  // Centers of fragment AABBs, only computed if moments are not
553  // let us know if the user has specified a mass array
555 
556  // Weighted average, where weights correspond to fragment volume.
557  // Accumulators one for each array to average, scalar or vector
558  std::vector<std::vector<double>> FragmentVolumeWtdAvg;
559  // weighted averages indexed by fragment id.
560  std::vector<vtkDoubleArray*> FragmentVolumeWtdAvgs;
561  // number of arrays for which to compute the weighted average
563  // Names of the arrays to average.
564  std::vector<std::string> VolumeWtdAvgArrayNames;
565 
566  // Weighted average, where weights correspond to fragment mass.
567  // Accumulators one for each array to average, scalar or vector
568  std::vector<std::vector<double>> FragmentMassWtdAvg;
569  // weighted averages indexed by fragment id.
570  std::vector<vtkDoubleArray*> FragmentMassWtdAvgs;
571  // number of arrays for which to compute the weighted average
573  // Names of the arrays to average.
574  std::vector<std::string> MassWtdAvgArrayNames;
575 
576  // Unique list of all integrated array names
577  // it's used construct list of arrays that
578  // will be copied into output.
579  std::vector<std::string> IntegratedArrayNames;
580  std::vector<int> IntegratedArrayNComp;
581  // number of integrated arrays
583 
584  // Sum of data over the fragment.
585  // Accumulators, one for each array to sum
586  std::vector<std::vector<double>> FragmentSum;
587  // sums indexed by fragment id.
588  std::vector<vtkDoubleArray*> FragmentSums;
589  // number of arrays for which to compute the weighted average
590  int NToSum;
592 
593  // OBB indexed by fragment id
595  // turn on/off OBB calculation
597 
598  // Upper bound used to exclude heavily loaded procs
599  // from work sharing. Reducing may aliviate oom issues.
601 
602  // This is getting a bit ugly but ...
603  // When we resolve (merge equivalent) fragments we need a mapping
604  // from local ids to global ids.
605  // This array give an offset into the global array for each process.
606  // The array is computed when we resolve ids, and is used
607  // when resoving other attributes like volume
608  int* NumberOfRawFragmentsInProcess; // in each process by proc id for a single material
609  int* LocalToGlobalOffsets; // indexes into a gathered array of local ids by proc id
610  int TotalNumberOfRawFragments; // over all processes for a single material
611  int NumberOfResolvedFragments; // over all processes for a single material
612  // Total number of fragments over all materials, used to
613  // generate a unique id for each fragment.
615  // Material id, each pass involves a different material use this to
616  // tag fragments by material.
618 
619  // For each material an array of resolved fragments. Blocks are multi piece
620  // of poly data. The multipiece is much like a std vector of poly data *.
621  // multi block is indexed by material.
623  // for each material a list of global ids of pieces we own.
624  std::vector<std::vector<int>> ResolvedFragmentIds;
625  // List of split fragments
626  std::vector<std::vector<int>> FragmentSplitMarker;
628 
629  // A polydata with points at fragment centers, same structure
630  // as the resolved fragments.
632  //
633  std::vector<vtkPoints*> ResolvedFragmentPoints;
634 
635  // A polydata representing OBB, same structure as the resolved
636  // fragments.
638 
639  double GlobalOrigin[3];
640  double RootSpacing[3];
641  int StandardBlockDimensions[3];
642 
643  void SaveBlockSurfaces(const char* fileName);
644  void SaveGhostSurfaces(const char* fileName);
645 
646  // Use for the moment to find neighbors.
647  // It could be changed into the primary storage of blocks.
648  std::vector<vtkMaterialInterfaceLevel*> Levels;
649 
650  // Ivars for computing the point on corners and edges of a face.
651  vtkMaterialInterfaceFilterIterator* FaceNeighbors;
652  // Permutation of the neighbors. Axis0 normal to face.
656  double FaceCornerPoints[12];
657  double FaceEdgePoints[12];
658  int FaceEdgeFlags[4];
659  // outMaxFlag implies out is positive direction of axis.
660  void ComputeFacePoints(vtkMaterialInterfaceFilterIterator* in,
661  vtkMaterialInterfaceFilterIterator* out, int axis, int outMaxFlag);
662  void ComputeFaceNeighbors(vtkMaterialInterfaceFilterIterator* in,
663  vtkMaterialInterfaceFilterIterator* out, int axis, int outMaxFlag);
664 
665  long ComputeProximity(const int faceIdx[3], int faceLevel, const int ext[6], int refLevel);
666 
667  void FindNeighbor(int faceIndex[3], int faceLevel, vtkMaterialInterfaceFilterIterator* neighbor,
668  vtkMaterialInterfaceFilterIterator* reference);
669 
670  // PARAVIEW interface data
680  int DrawOBB;
681  double Progress;
685 // Debug
686 #ifdef vtkMaterialInterfaceFilterDEBUG
687  int MyPid;
688 #endif
689 
691 
692  // Variables that setup clipping with a sphere and a plane.
693  double ClipCenter[3];
695  double ClipRadius;
697  double ClipPlaneVector[3];
698  double ClipPlaneNormal[3];
699 
700  // Variable that will invert a material.
702 
703  // Specify the number of Ghost level available in each block.
704  // By default set to 1
705  unsigned char BlockGhostLevel;
706 
707 #ifdef vtkMaterialInterfaceFilterPROFILE
708  // Lets profile to see what takes the most time for large number of processes.
709  vtkSmartPointer<vtkTimerLog> InitializeBlocksTimer;
710  vtkSmartPointer<vtkTimerLog> ShareGhostBlocksTimer;
711  long NumberOfBlocks;
712  long NumberOfGhostBlocks;
713  vtkSmartPointer<vtkTimerLog> ProcessBlocksTimer;
714  vtkSmartPointer<vtkTimerLog> ResolveEquivalencesTimer;
715 #endif
716 
717 private:
719  void operator=(const vtkMaterialInterfaceFilter&) = delete;
720 };
721 
722 #endif
vtkMaterialInterfaceEquivalenceSet * EquivalenceSet
int FragmentId
class vtkMaterialInterfaceFilterIntegrator {
Extract particles and analyse them.
Data structure that describes a fragment&#39;s loading.
vtkDataArraySelection * SummationArraySelection
vtkMultiProcessController * Controller
std::vector< vtkPolyData * > FragmentMeshes
std::vector< std::vector< int > > ResolvedFragmentIds
vtkMaterialInterfaceFilterIterator * FaceNeighbors
#define VTKPVVTKEXTENSIONSFILTERSMATERIALINTERFACE_EXPORT
vtkDataArraySelection * MaterialArraySelection
vtkMultiBlockDataSet * ResolvedFragments
std::vector< vtkDoubleArray * > FragmentSums
int vtkIdType
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
vtkMultiBlockDataSet * ResolvedFragmentOBBs
vtkTypeUInt64 vtkMTimeType
static vtkMultiBlockDataSetAlgorithm * New()
virtual int FillOutputPortInformation(int port, vtkInformation *info)
vtkMultiBlockDataSet * ResolvedFragmentCenters
std::vector< std::vector< double > > FragmentVolumeWtdAvg
vtkMaterialInterfaceFilterBlock ** InputBlocks
std::vector< std::string > VolumeWtdAvgArrayNames
std::vector< std::vector< double > > FragmentSum
virtual vtkMTimeType GetMTime()
std::vector< std::string > MassWtdAvgArrayNames
std::vector< std::vector< int > > FragmentSplitMarker
std::vector< vtkPoints * > ResolvedFragmentPoints
std::vector< vtkDoubleArray * > FragmentMassWtdAvgs
vtkDataArraySelection * MassWtdAvgArraySelection
std::vector< vtkDoubleArray * > FragmentVolumeWtdAvgs
std::vector< std::vector< double > > FragmentMassWtdAvg
std::vector< std::string > IntegratedArrayNames
virtual int FillInputPortInformation(int port, vtkInformation *info)
void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE
vtkDataArraySelection * VolumeWtdAvgArraySelection
void operator=(const vtkObjectBase &)
std::vector< vtkMaterialInterfaceFilterBlock * > GhostBlocks
vtkDataArraySelection * MassArraySelection
std::vector< vtkMaterialInterfaceLevel * > Levels