From 10a56a03e045e6473f4b035343882c14e9911bf7 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Wed, 16 Jul 2025 09:21:42 -0700 Subject: [PATCH 1/4] add set to removed unused points to dataset writer --- src/avt/Pipeline/Sinks/avtDatabaseWriter.C | 67 ++++++++++++++++++++++ src/avt/Pipeline/Sinks/avtDatabaseWriter.h | 4 ++ 2 files changed, 71 insertions(+) diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C index 7ac0bbf580b..33c67e58de8 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C @@ -1046,6 +1046,7 @@ avtDatabaseWriter::Write(const std::string &plotName, debug5 << line << endl << endl; } + // **************************************************************************** // Method: avtDatabaseWriter::GroupWrite // @@ -1063,6 +1064,9 @@ avtDatabaseWriter::Write(const std::string &plotName, // // Modifications: // +// Cyrus Harrison, Wed Jul 16 09:18:14 PDT 2025 +// Added call to remove unsued points for the non combined case +// // **************************************************************************** void avtDatabaseWriter::GroupWrite(const std::string &plotName, @@ -1246,9 +1250,19 @@ avtDatabaseWriter::GroupWrite(const std::string &plotName, vtkDataSet *in_ds = dt->GetDataRepresentation().GetDataVTK(); int domainId = dt->GetDataRepresentation().GetDomain(); std::string label(dt->GetDataRepresentation().GetLabel()); + ReleventPointsFilter(); + // RemoveUnusedPoints returns input dataset or new cleaned dataset + vtkDataSet *clean_ds = RemoveUnusedPoints(in_ds); + WriteChunk(in_ds, chunkID, domainId, label); chunkID++; ++nWritten; + + // clean up the clean_ds if RemoveUnusedPoints created new dataset + if(clean_ds != in_ds) + { + clean_ds->Delete() + } } } @@ -1897,3 +1911,56 @@ avtDatabaseWriter::SetContractToUse(avtContract_p ps) { savedContract = ps; } + +// **************************************************************************** +// Method: avtDatabaseWriter::RemoveUnusedPoints +// +// Purpose: +// Cleans up unused points vtkDataset +// +// Arguments: +// +// Returns: +// +// Programmer: Cyrus Harrison +// Creation: Wed Jul 16 09:15:44 PDT 2025 +// +// Modifications: +// +// **************************************************************************** +vtkDataSet * +avtDatabaseWriter::RemoveUnusedPoints(vtkDataSet *ds) +{ + vtkDataSet *res = nullptr; + switch(ds->GetDataObjectType()) + { + case VTK_POLY_DATA: + { + vtkPolyDataRelevantPointsFilter *rpfPD = vtkPolyDataRelevantPointsFilter::New(); + rpfPD->SetInputData((vtkPolyData*)ds); + out_pd = vtkPolyData::New(); + rpfPD->SetOutput(out_pd); + rpfPD->Update(); + rpfPD->Delete(); + res = out_pd; + break; + } + case VTK_UNSTRUCTURED_GRID: + { + vtkUnstructuredGridRelevantPointsFilter *rpfUG = vtkUnstructuredGridRelevantPointsFilter::New(); + rpfUG->SetInputData((vtkUnstructuredGrid*)ds); + out_ug = vtkUnstructuredGrid::New(); + rpfUG->SetOutput(out_ug); + rpfUG->Update(); + rpfUG->Delete(); + res = out_pd; + break; + } + default: // we should not need to filter points for other dataset types + { + break; + } + } + + return res; +} \ No newline at end of file diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.h b/src/avt/Pipeline/Sinks/avtDatabaseWriter.h index 908200aec11..50dfe4b367c 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.h +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.h @@ -81,6 +81,9 @@ class vtkPolyData; // Kathleen Biagas, Wed Nov 18 2020 // Replace VISIT_LONG_LONG with long long. // +// Cyrus Harrison, Wed Jul 16 09:08:30 PDT 2025 +// Added helper to remove unused points during export. +// // **************************************************************************** class PIPELINE_API avtDatabaseWriter : public virtual avtTerminatingDatasetSink @@ -221,6 +224,7 @@ class PIPELINE_API avtDatabaseWriter : public virtual avtTerminatingDatasetSink const std::vector &materialList, int numTotalChunks, int startIndex, int tag, bool writeUsingGroups, int groupSize); + vtkDataSet *RemoveUnusedPoints(vtkDataset *ds); void WaitForTurn(int tag, int &nWritten); void GrantTurn(int tag, int &nWritten); }; From 912d4b9c23297849fe471832a00e1331d4c31e70 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Thu, 11 Sep 2025 09:43:54 -0700 Subject: [PATCH 2/4] updates --- src/avt/Pipeline/Sinks/avtDatabaseWriter.C | 15 +++++++++------ src/avt/Pipeline/Sinks/avtDatabaseWriter.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C index 33c67e58de8..a9896562665 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C @@ -19,6 +19,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -1065,7 +1068,7 @@ avtDatabaseWriter::Write(const std::string &plotName, // Modifications: // // Cyrus Harrison, Wed Jul 16 09:18:14 PDT 2025 -// Added call to remove unsued points for the non combined case +// Added call to remove unused points for the non combined case // // **************************************************************************** void @@ -1250,7 +1253,7 @@ avtDatabaseWriter::GroupWrite(const std::string &plotName, vtkDataSet *in_ds = dt->GetDataRepresentation().GetDataVTK(); int domainId = dt->GetDataRepresentation().GetDomain(); std::string label(dt->GetDataRepresentation().GetLabel()); - ReleventPointsFilter(); + // RemoveUnusedPoints returns input dataset or new cleaned dataset vtkDataSet *clean_ds = RemoveUnusedPoints(in_ds); @@ -1261,7 +1264,7 @@ avtDatabaseWriter::GroupWrite(const std::string &plotName, // clean up the clean_ds if RemoveUnusedPoints created new dataset if(clean_ds != in_ds) { - clean_ds->Delete() + clean_ds->Delete(); } } } @@ -1938,7 +1941,7 @@ avtDatabaseWriter::RemoveUnusedPoints(vtkDataSet *ds) { vtkPolyDataRelevantPointsFilter *rpfPD = vtkPolyDataRelevantPointsFilter::New(); rpfPD->SetInputData((vtkPolyData*)ds); - out_pd = vtkPolyData::New(); + vtkPolyData *out_pd = vtkPolyData::New(); rpfPD->SetOutput(out_pd); rpfPD->Update(); rpfPD->Delete(); @@ -1949,11 +1952,11 @@ avtDatabaseWriter::RemoveUnusedPoints(vtkDataSet *ds) { vtkUnstructuredGridRelevantPointsFilter *rpfUG = vtkUnstructuredGridRelevantPointsFilter::New(); rpfUG->SetInputData((vtkUnstructuredGrid*)ds); - out_ug = vtkUnstructuredGrid::New(); + vtkUnstructuredGrid *out_ug = vtkUnstructuredGrid::New(); rpfUG->SetOutput(out_ug); rpfUG->Update(); rpfUG->Delete(); - res = out_pd; + res = out_ug; break; } default: // we should not need to filter points for other dataset types diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.h b/src/avt/Pipeline/Sinks/avtDatabaseWriter.h index 50dfe4b367c..e065351f517 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.h +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.h @@ -224,7 +224,7 @@ class PIPELINE_API avtDatabaseWriter : public virtual avtTerminatingDatasetSink const std::vector &materialList, int numTotalChunks, int startIndex, int tag, bool writeUsingGroups, int groupSize); - vtkDataSet *RemoveUnusedPoints(vtkDataset *ds); + vtkDataSet *RemoveUnusedPoints(vtkDataSet *ds); void WaitForTurn(int tag, int &nWritten); void GrantTurn(int tag, int &nWritten); }; From 439c21abfd1fcb169439692847a574db86bc81e0 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Thu, 11 Sep 2025 11:40:58 -0700 Subject: [PATCH 3/4] wip --- src/avt/Pipeline/Sinks/avtDatabaseWriter.C | 3 +- src/databases/Blueprint/avtBlueprintWriter.C | 72 ++++++++++++++++++-- src/databases/Blueprint/avtBlueprintWriter.h | 3 + 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C index a9896562665..35dc47bf697 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C @@ -1959,8 +1959,9 @@ avtDatabaseWriter::RemoveUnusedPoints(vtkDataSet *ds) res = out_ug; break; } - default: // we should not need to filter points for other dataset types + default: // we do not need to filter points for other dataset types { + res = ds; break; } } diff --git a/src/databases/Blueprint/avtBlueprintWriter.C b/src/databases/Blueprint/avtBlueprintWriter.C index c88c0e08485..441b60462d7 100644 --- a/src/databases/Blueprint/avtBlueprintWriter.C +++ b/src/databases/Blueprint/avtBlueprintWriter.C @@ -20,10 +20,9 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include #include #include @@ -493,9 +492,16 @@ avtBlueprintWriter::ChunkToBpMesh(vtkDataSet *ds, int chunk, int ndims, { mesh["state/time"] = m_time; } - + + vtkDataSet *clean_ds = RemoveUnusedPoints(ds); + avtConduitBlueprintDataAdaptor::VTKToBlueprint::VTKToBlueprintMesh(mesh, ds, ndims); - + + if(clean_ds != ds) + { + clean_ds->Delete(); + } + Node verify_info; if(!blueprint::mesh::verify(mesh,verify_info)) { @@ -652,3 +658,57 @@ avtBlueprintWriter::WriteRootFile() { // root file has already been written } + +// **************************************************************************** +// Method: avtBlueprintWriter::RemoveUnusedPoints +// +// Purpose: +// Cleans up unused points vtkDataset +// +// Arguments: +// +// Returns: +// +// Programmer: Cyrus Harrison +// Creation: Wed Jul 16 09:15:44 PDT 2025 +// +// Modifications: +// +// **************************************************************************** +vtkDataSet * +avtBlueprintWriter::RemoveUnusedPoints(vtkDataSet *ds) +{ + vtkDataSet *res = nullptr; + switch(ds->GetDataObjectType()) + { + case VTK_POLY_DATA: + { + vtkPolyDataRelevantPointsFilter *rpfPD = vtkPolyDataRelevantPointsFilter::New(); + rpfPD->SetInputData((vtkPolyData*)ds); + vtkPolyData *out_pd = vtkPolyData::New(); + rpfPD->SetOutput(out_pd); + rpfPD->Update(); + rpfPD->Delete(); + res = out_pd; + break; + } + case VTK_UNSTRUCTURED_GRID: + { + vtkUnstructuredGridRelevantPointsFilter *rpfUG = vtkUnstructuredGridRelevantPointsFilter::New(); + rpfUG->SetInputData((vtkUnstructuredGrid*)ds); + vtkUnstructuredGrid *out_ug = vtkUnstructuredGrid::New(); + rpfUG->SetOutput(out_ug); + rpfUG->Update(); + rpfUG->Delete(); + res = out_ug; + break; + } + default: // we do not need to filter points for other dataset types + { + res = ds; + break; + } + } + + return res; +} \ No newline at end of file diff --git a/src/databases/Blueprint/avtBlueprintWriter.h b/src/databases/Blueprint/avtBlueprintWriter.h index 3f2947dda33..e246809f0be 100644 --- a/src/databases/Blueprint/avtBlueprintWriter.h +++ b/src/databases/Blueprint/avtBlueprintWriter.h @@ -90,6 +90,9 @@ avtBlueprintWriter : public virtual avtDatabaseWriter virtual void WriteChunk(vtkDataSet *, int); virtual void CloseFile(void); virtual void WriteRootFile(); + + + vtkDataSet *RemoveUnusedPoints(vtkDataSet *ds); }; From e3d1d5cccc7065b946ab42aeedadf3c7210a58dc Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Fri, 7 Nov 2025 08:11:08 -0800 Subject: [PATCH 4/4] Update src/avt/Pipeline/Sinks/avtDatabaseWriter.C Co-authored-by: Kathleen Biagas --- src/avt/Pipeline/Sinks/avtDatabaseWriter.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C index 35dc47bf697..aa350c68f59 100644 --- a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C +++ b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C @@ -1257,7 +1257,7 @@ avtDatabaseWriter::GroupWrite(const std::string &plotName, // RemoveUnusedPoints returns input dataset or new cleaned dataset vtkDataSet *clean_ds = RemoveUnusedPoints(in_ds); - WriteChunk(in_ds, chunkID, domainId, label); + WriteChunk(clean_ds, chunkID, domainId, label); chunkID++; ++nWritten;