vtkMaterialInterfaceFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: $RCSfile: vtkMaterialInterfaceFilter.h,v $
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
35 #ifndef vtkMaterialInterfaceFilter_h
36 #define vtkMaterialInterfaceFilter_h
37 
39 #include "vtkPVVTKExtensionsFiltersMaterialInterfaceModule.h" //needed for exports
40 #include <string> // needed for string
41 #include <vector> // needed for vector
42 
43 #include "vtkSmartPointer.h" // needed for smart pointer
44 #include "vtkTimerLog.h" // needed for vtkTimerLog.
45 
46 class vtkDataSet;
47 class vtkImageData;
48 class vtkPolyData;
50 class vtkPoints;
51 class vtkDoubleArray;
52 class vtkCellArray;
53 class vtkCellData;
54 class vtkIntArray;
57 class vtkCallbackCommand;
59 
60 // specific to us
61 class vtkMaterialInterfaceLevel;
62 class vtkMaterialInterfaceFilterBlock;
63 class vtkMaterialInterfaceFilterIterator;
64 class vtkMaterialInterfaceEquivalenceSet;
65 class vtkMaterialInterfaceFilterRingBuffer;
68 
71 {
72 public:
75  void PrintSelf(ostream& os, vtkIndent indent) override;
76 
77  // PARAVIEW interface stuff
78 
80 
83  void SelectMaterialArray(const char* name);
87  void UnselectMaterialArray(const char* name);
91  void UnselectAllMaterialArrays();
95  void SetMaterialArrayStatus(const char* name, int status);
97 
100  int GetMaterialArrayStatus(const char* name);
101  int GetMaterialArrayStatus(int index);
103 
106  int GetNumberOfMaterialArrays();
110  const char* GetMaterialArrayName(int index);
111 
113 
116  void SelectMassArray(const char* name);
120  void UnselectMassArray(const char* name);
124  void UnselectAllMassArrays();
128  void SetMassArrayStatus(const char* name, int status);
130 
133  int GetMassArrayStatus(const char* name);
134  int GetMassArrayStatus(int index);
136 
139  int GetNumberOfMassArrays();
143  const char* GetMassArrayName(int index);
144 
146 
149  void SelectVolumeWtdAvgArray(const char* name);
153  void UnselectVolumeWtdAvgArray(const char* name);
157  void UnselectAllVolumeWtdAvgArrays();
158 
162  void SetVolumeWtdAvgArrayStatus(const char* name, int status);
164 
167  int GetVolumeWtdAvgArrayStatus(const char* name);
168  int GetVolumeWtdAvgArrayStatus(int index);
170 
173  int GetNumberOfVolumeWtdAvgArrays();
177  const char* GetVolumeWtdAvgArrayName(int index);
178 
180 
183  void SelectMassWtdAvgArray(const char* name);
187  void UnselectMassWtdAvgArray(const char* name);
191  void UnselectAllMassWtdAvgArrays();
192 
196  void SetMassWtdAvgArrayStatus(const char* name, int status);
198 
201  int GetMassWtdAvgArrayStatus(const char* name);
202  int GetMassWtdAvgArrayStatus(int index);
204 
207  int GetNumberOfMassWtdAvgArrays();
211  const char* GetMassWtdAvgArrayName(int index);
212 
214 
217  void SelectSummationArray(const char* name);
221  void UnselectSummationArray(const char* name);
225  void UnselectAllSummationArrays();
229  void SetSummationArrayStatus(const char* name, int status);
231 
234  int GetSummationArrayStatus(const char* name);
235  int GetSummationArrayStatus(int index);
237 
240  int GetNumberOfSummationArrays();
244  const char* GetSummationArrayName(int index);
245 
247 
248 
251  void SetMaterialFractionThreshold(double fraction);
252  vtkGetMacro(MaterialFractionThreshold, double);
254 
256 
257 
260  vtkSetMacro(ComputeOBB, bool);
261  vtkGetMacro(ComputeOBB, bool);
263 
265 
266 
276  void SetUpperLoadingBound(int nPolys);
277  vtkGetMacro(UpperLoadingBound, int);
279 
281 
282 
285  vtkSetStringMacro(OutputBaseName);
286  vtkGetStringMacro(OutputBaseName);
288 
289 
292  vtkSetMacro(WriteGeometryOutput, bool);
293  vtkGetMacro(WriteGeometryOutput, bool);
294  vtkSetMacro(WriteStatisticsOutput, bool);
295  vtkGetMacro(WriteStatisticsOutput, bool);
297 
299 
304  vtkSetMacro(BlockGhostLevel, unsigned char);
305  vtkGetMacro(BlockGhostLevel, unsigned char);
307 
311  static void SelectionModifiedCallback(vtkObject*, unsigned long, void* clientdata, void*);
312 
314 
317  void SetClipFunction(vtkImplicitFunction* clipFunction);
318  vtkGetObjectMacro(ClipFunction, vtkImplicitFunction);
320 
322 
326  vtkSetMacro(InvertVolumeFraction, int);
327  vtkGetMacro(InvertVolumeFraction, int);
329 
333  vtkMTimeType GetMTime() override;
334 
335 protected:
337  ~vtkMaterialInterfaceFilter() override;
338 
340  int FillInputPortInformation(int port, vtkInformation* info) override;
341  int FillOutputPortInformation(int port, vtkInformation* info) override;
342 
343  // Set up the result arrays for the calculations we are about to
344  // make.
345  void PrepareForPass(vtkNonOverlappingAMR* hbdsInput,
346  std::vector<std::string>& volumeWtdAvgArrayNames,
347  std::vector<std::string>& massWtdAvgArrayNames, std::vector<std::string>& summedArrayNames,
348  std::vector<std::string>& integratedArrayNames);
349  // Create a new fragment/piece.
350  vtkPolyData* NewFragmentMesh();
351  // Process each cell, looking for fragments.
352  int ProcessBlock(int blockId);
353  // Cell has been identified as inside the fragment. Integrate, and
354  // generate fragment surface etc...
355  void ConnectFragment(vtkMaterialInterfaceFilterRingBuffer* iterator);
356  void GetNeighborIterator(vtkMaterialInterfaceFilterIterator* next,
357  vtkMaterialInterfaceFilterIterator* iterator, int axis0, int maxFlag0, int axis1, int maxFlag1,
358  int axis2, int maxFlag2);
359  void GetNeighborIteratorPad(vtkMaterialInterfaceFilterIterator* next,
360  vtkMaterialInterfaceFilterIterator* iterator, int axis0, int maxFlag0, int axis1, int maxFlag1,
361  int axis2, int maxFlag2);
362  void CreateFace(vtkMaterialInterfaceFilterIterator* in, vtkMaterialInterfaceFilterIterator* out,
363  int axis, int outMaxFlag);
364  int ComputeDisplacementFactors(vtkMaterialInterfaceFilterIterator* pointNeighborIterators[8],
365  double displacmentFactors[3], int rootNeighborIdx, int faceAxis);
366  int SubVoxelPositionCorner(double* point,
367  vtkMaterialInterfaceFilterIterator* pointNeighborIterators[8], int rootNeighborIdx,
368  int faceAxis);
369  void FindPointNeighbors(vtkMaterialInterfaceFilterIterator* iteratorMin0,
370  vtkMaterialInterfaceFilterIterator* iteratorMax0, int axis0, int maxFlag1, int maxFlag2,
371  vtkMaterialInterfaceFilterIterator pointNeighborIterators[8], double pt[3]);
372  // Finds a global origin for the data set, and level 0 dx
373  int ComputeOriginAndRootSpacingOld(vtkNonOverlappingAMR* input);
374  void ComputeOriginAndRootSpacing(vtkNonOverlappingAMR* input);
375  // Returns the total number of local(wrt this proc) blocks.
376  int GetNumberOfLocalBlocks(vtkNonOverlappingAMR* input);
377  // Complex ghost layer Handling.
378  std::vector<vtkMaterialInterfaceFilterBlock*> GhostBlocks;
379  void ShareGhostBlocks();
380  void HandleGhostBlockRequests();
381  int ComputeRequiredGhostExtent(int level, int inExt[6], int outExt[6]);
382 
383  void ComputeAndDistributeGhostBlocks(
384  int* numBlocksInProc, int* blockMetaData, int myProc, int numProcs);
385 
387 
388  vtkMaterialInterfaceEquivalenceSet* EquivalenceSet;
389  void AddEquivalence(
390  vtkMaterialInterfaceFilterIterator* neighbor1, vtkMaterialInterfaceFilterIterator* neighbor2);
391  //
392  void PrepareForResolveEquivalences();
393  //
394  void ResolveEquivalences();
395  void GatherEquivalenceSets(vtkMaterialInterfaceEquivalenceSet* set);
396  void ShareGhostEquivalences(vtkMaterialInterfaceEquivalenceSet* globalSet, int* procOffsets);
397  void ReceiveGhostFragmentIds(vtkMaterialInterfaceEquivalenceSet* globalSet, int* procOffset);
398  void MergeGhostEquivalenceSets(vtkMaterialInterfaceEquivalenceSet* globalSet);
399 
400  // Sum/finalize attribute's contribution for those
401  // which are split over multiple processes.
402  int ResolveIntegratedAttributes(const int controllingProcId);
403  // Initialize our attribute arrays to ho9ld resolved attributes
404  int PrepareToResolveIntegratedAttributes();
405 
406  // Send my integrated attributes to another process.
407  int SendIntegratedAttributes(const int recipientProcId);
408  // Receive integrated attributes from another process.
409  int ReceiveIntegratedAttributes(const int sourceProcId);
410  // Size buffers etc...
411  int PrepareToCollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
412  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
413  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
414  std::vector<std::vector<vtkDoubleArray*> >& volumeWtdAvgs,
415  std::vector<std::vector<vtkDoubleArray*> >& massWtdAvgs,
416  std::vector<std::vector<vtkDoubleArray*> >& sums);
417  // Free resources.
418  int CleanUpAfterCollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
419  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
420  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
421  std::vector<std::vector<vtkDoubleArray*> >& volumeWtdAvgs,
422  std::vector<std::vector<vtkDoubleArray*> >& massWtdAvgs,
423  std::vector<std::vector<vtkDoubleArray*> >& sums);
424  // Receive all integrated attribute arrays from all other
425  // processes.
426  int CollectIntegratedAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
427  std::vector<vtkDoubleArray*>& volumes, std::vector<vtkDoubleArray*>& clipDepthMaxs,
428  std::vector<vtkDoubleArray*>& clipDepthMins, std::vector<vtkDoubleArray*>& moments,
429  std::vector<std::vector<vtkDoubleArray*> >& volumeWtdAvgs,
430  std::vector<std::vector<vtkDoubleArray*> >& massWtdAvgs,
431  std::vector<std::vector<vtkDoubleArray*> >& sums);
432  // Send my integrated attributes to all other processes.
433  int BroadcastIntegratedAttributes(const int sourceProcessId);
434  // Send my geometric attribuites to a controller.
435  int SendGeometricAttributes(const int controllingProcId);
436  // size buffers & new containers
437  int PrepareToCollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
438  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
439  std::vector<int*>& ids);
440  // Free resources.
441  int CleanUpAfterCollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
442  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
443  std::vector<int*>& ids);
444  // Receive all geometric attributes from all other
445  // processes.
446  int CollectGeometricAttributes(std::vector<vtkMaterialInterfaceCommBuffer>& buffers,
447  std::vector<vtkDoubleArray*>& coaabb, std::vector<vtkDoubleArray*>& obb,
448  std::vector<int*>& ids);
449  // size local copy to hold all.
450  int PrepareToMergeGeometricAttributes();
451  // Gather geometric attributes on a single process.
452  int GatherGeometricAttributes(const int recipientProcId);
453  // Merge fragment's geometry that are split on this process
454  void ResolveLocalFragmentGeometry();
455  // Merge fragment's geometry that are split across processes
456  void ResolveRemoteFragmentGeometry();
457  // Clean duplicate points from fragment geometry.
458  void CleanLocalFragmentGeometry();
459  //
460  void BuildLoadingArray(std::vector<vtkIdType>& loadingArray);
461  int PackLoadingArray(vtkIdType*& buffer);
462  int UnPackLoadingArray(vtkIdType* buffer, int bufSize, std::vector<vtkIdType>& loadingArray);
463 
464  // copy any integrated attributes (volume, id, weighted averages, sums, etc)
465  // into the fragment polys in the output data sets.
466  void CopyAttributesToOutput0();
467  void CopyAttributesToOutput1();
468  void CopyAttributesToOutput2();
469  // Write a text file containing local fragment attributes.
470  int WriteGeometryOutputToTextFile();
471  int WriteStatisticsOutputToTextFile();
472  // Build the output data
473  int BuildOutputs(vtkMultiBlockDataSet* mbdsOutput0, vtkMultiBlockDataSet* mbdsOutput1,
474  vtkMultiBlockDataSet* mbdsOutput2, int materialId);
475 
476  // integration helper, returns 0 if the source array
477  // type is unsupported.
478  int Accumulate(double* dest, // scalar/vector result
479  vtkDataArray* src, // array to accumulate from
480  int nComps, //
481  int srcCellIndex, // which cell
482  double weight); // weight of contribution
483  int AccumulateMoments(double* moments, // =(Myz, Mxz, Mxy, m)
484  vtkDataArray* massArray, //
485  int srcCellIndex, // from which cell in mass
486  double* X);
487  // Compute the geomteric attributes that have been requested.
488  void ComputeGeometricAttributes();
489  int ComputeLocalFragmentOBB();
490  int ComputeLocalFragmentAABBCenters();
491  // int ComputeFragmentMVBB();
492 
493  // Format input block into an easy to access array with
494  // extra metadata (information) extracted.
496  vtkMaterialInterfaceFilterBlock** InputBlocks;
497  void DeleteAllBlocks();
498  int InitializeBlocks(vtkNonOverlappingAMR* input, std::string& materialFractionArrayName,
499  std::string& massArrayName, std::vector<std::string>& volumeWtdAvgArrayNames,
500  std::vector<std::string>& massWtdAvgArrayNames, std::vector<std::string>& summedArrayNames,
501  std::vector<std::string>& integratedArrayNames);
502  void AddBlock(vtkMaterialInterfaceFilterBlock* block, unsigned char levelOfGhostLayer);
503 
504  // New methods for connecting neighbors.
505  void CheckLevelsForNeighbors(vtkMaterialInterfaceFilterBlock* block);
506  // Returns 1 if there we neighbors found, 0 if not.
507  int FindFaceNeighbors(unsigned int blockLevel, int blockIndex[3], int faceAxis, int faceMaxFlag,
508  std::vector<vtkMaterialInterfaceFilterBlock*>* result);
509 
510  // We need ghost cells for edges and corners as well as faces.
511  // neighborDirection is used to specify a face, edge or corner.
512  // Using a 2x2x2 cube center at origin: (-1,-1,-1), (-1,-1,1) ... are corners.
513  // (1,1,0) is an edge, and (-1,0,0) is a face.
514  // Returns 1 if the neighbor exists.
515  int HasNeighbor(unsigned int blockLevel, int blockIndex[3], int neighborDirection[3]);
516 
517  // Threshold value used to select a cell
518  // as being iniside some fragment, PV uses
519  // a double between 0 and 1, this is stored here
521  // The extraction filter uses a scaled threshold
522  // in the range of 0 to 255
524  //
526  vtkSetStringMacro(MaterialFractionArrayName);
527 
528  // while processing a material array this holds
529  // a pointer to the output poly data
530  // data set
532  // As pieces/fragments are found they are stored here
533  // until resolution.
534  std::vector<vtkPolyData*> FragmentMeshes;
535 
536  // TODO? this could be cleaned up (somewhat) by
537  // adding an integration class which encapsulates
538  // all of the supported operations.
541  // Local id of current fragment
543  // Accumulator for the volume of the current fragment.
545  // Fragment volumes indexed by the fragment id. It's a local
546  // per-process indexing until fragments have been resolved
548 
549  // Min and max depth of crater.
550  // These are only computed when the clip plane is on.
551  double ClipDepthMin;
552  double ClipDepthMax;
555 
556  // Accumulator for moments of the current fragment
557  std::vector<double> FragmentMoment; // =(Myz, Mxz, Mxy, m)
558  // Moments indexed by fragment id
560  // Centers of fragment AABBs, only computed if moments are not
562  // let us know if the user has specified a mass array
564 
565  // Weighted average, where weights correspond to fragment volume.
566  // Accumulators one for each array to average, scalar or vector
567  std::vector<std::vector<double> > FragmentVolumeWtdAvg;
568  // weighted averages indexed by fragment id.
569  std::vector<vtkDoubleArray*> FragmentVolumeWtdAvgs;
570  // number of arrays for which to compute the weighted average
572  // Names of the arrays to average.
573  std::vector<std::string> VolumeWtdAvgArrayNames;
574 
575  // Weighted average, where weights correspond to fragment mass.
576  // Accumulators one for each array to average, scalar or vector
577  std::vector<std::vector<double> > FragmentMassWtdAvg;
578  // weighted averages indexed by fragment id.
579  std::vector<vtkDoubleArray*> FragmentMassWtdAvgs;
580  // number of arrays for which to compute the weighted average
582  // Names of the arrays to average.
583  std::vector<std::string> MassWtdAvgArrayNames;
584 
585  // Unique list of all integrated array names
586  // it's used construct list of arrays that
587  // will be copied into output.
588  std::vector<std::string> IntegratedArrayNames;
589  std::vector<int> IntegratedArrayNComp;
590  // number of integrated arrays
592 
593  // Sum of data over the fragment.
594  // Accumulators, one for each array to sum
595  std::vector<std::vector<double> > FragmentSum;
596  // sums indexed by fragment id.
597  std::vector<vtkDoubleArray*> FragmentSums;
598  // number of arrays for which to compute the weighted average
599  int NToSum;
601 
602  // OBB indexed by fragment id
604  // turn on/off OBB calculation
606 
607  // Upper bound used to exclude heavily loaded procs
608  // from work sharing. Reducing may aliviate oom issues.
610 
611  // This is getting a bit ugly but ...
612  // When we resolve (merge equivalent) fragments we need a mapping
613  // from local ids to global ids.
614  // This array give an offset into the global array for each process.
615  // The array is computed when we resolve ids, and is used
616  // when resoving other attributes like volume
617  int* NumberOfRawFragmentsInProcess; // in each process by proc id for a single material
618  int* LocalToGlobalOffsets; // indexes into a gathered array of local ids by proc id
619  int TotalNumberOfRawFragments; // over all processes for a single material
620  int NumberOfResolvedFragments; // over all processes for a single material
621  // Total number of fragments over all materials, used to
622  // generate a unique id for each fragment.
624  // Material id, each pass involves a different material use this to
625  // tag fragments by material.
627 
628  // For each material an array of resolved fragments. Blocks are multi piece
629  // of poly data. The multipiece is much like a std vector of poly data *.
630  // multi block is indexed by material.
632  // for each material a list of global ids of pieces we own.
633  std::vector<std::vector<int> > ResolvedFragmentIds;
634  // List of split fragments
635  std::vector<std::vector<int> > FragmentSplitMarker;
637 
638  // A polydata with points at fragment centers, same structure
639  // as the resolved fragments.
641  //
642  std::vector<vtkPoints*> ResolvedFragmentPoints;
643 
644  // A polydata representing OBB, same structure as the resolved
645  // fragments.
647 
648  double GlobalOrigin[3];
649  double RootSpacing[3];
650  int StandardBlockDimensions[3];
651 
652  void SaveBlockSurfaces(const char* fileName);
653  void SaveGhostSurfaces(const char* fileName);
654 
655  // Use for the moment to find neighbors.
656  // It could be changed into the primary storage of blocks.
657  std::vector<vtkMaterialInterfaceLevel*> Levels;
658 
659  // Ivars for computing the point on corners and edges of a face.
660  vtkMaterialInterfaceFilterIterator* FaceNeighbors;
661  // Permutation of the neighbors. Axis0 normal to face.
665  double FaceCornerPoints[12];
666  double FaceEdgePoints[12];
667  int FaceEdgeFlags[4];
668  // outMaxFlag implies out is positive direction of axis.
669  void ComputeFacePoints(vtkMaterialInterfaceFilterIterator* in,
670  vtkMaterialInterfaceFilterIterator* out, int axis, int outMaxFlag);
671  void ComputeFaceNeighbors(vtkMaterialInterfaceFilterIterator* in,
672  vtkMaterialInterfaceFilterIterator* out, int axis, int outMaxFlag);
673 
674  long ComputeProximity(const int faceIdx[3], int faceLevel, const int ext[6], int refLevel);
675 
676  void FindNeighbor(int faceIndex[3], int faceLevel, vtkMaterialInterfaceFilterIterator* neighbor,
677  vtkMaterialInterfaceFilterIterator* reference);
678 
679  // PARAVIEW interface data
689  int DrawOBB;
690  double Progress;
694 // Debug
695 #ifdef vtkMaterialInterfaceFilterDEBUG
696  int MyPid;
697 #endif
698 
700 
701  // Variables that setup clipping with a sphere and a plane.
702  double ClipCenter[3];
704  double ClipRadius;
706  double ClipPlaneVector[3];
707  double ClipPlaneNormal[3];
708 
709  // Variable that will invert a material.
711 
712  // Specify the number of Ghost level available in each block.
713  // By default set to 1
714  unsigned char BlockGhostLevel;
715 
716 #ifdef vtkMaterialInterfaceFilterPROFILE
717  // Lets profile to see what takes the most time for large number of processes.
718  vtkSmartPointer<vtkTimerLog> InitializeBlocksTimer;
719  vtkSmartPointer<vtkTimerLog> ShareGhostBlocksTimer;
720  long NumberOfBlocks;
721  long NumberOfGhostBlocks;
722  vtkSmartPointer<vtkTimerLog> ProcessBlocksTimer;
723  vtkSmartPointer<vtkTimerLog> ResolveEquivalencesTimer;
724 #endif
725 
726 private:
728  void operator=(const vtkMaterialInterfaceFilter&) = delete;
729 };
730 
731 #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