diff --git a/src/avt/Pipeline/Sinks/avtDatabaseWriter.C b/src/avt/Pipeline/Sinks/avtDatabaseWriter.C index 7ac0bbf580b..aa350c68f59 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 @@ -1046,6 +1049,7 @@ avtDatabaseWriter::Write(const std::string &plotName, debug5 << line << endl << endl; } + // **************************************************************************** // Method: avtDatabaseWriter::GroupWrite // @@ -1063,6 +1067,9 @@ avtDatabaseWriter::Write(const std::string &plotName, // // Modifications: // +// Cyrus Harrison, Wed Jul 16 09:18:14 PDT 2025 +// Added call to remove unused points for the non combined case +// // **************************************************************************** void avtDatabaseWriter::GroupWrite(const std::string &plotName, @@ -1246,9 +1253,19 @@ avtDatabaseWriter::GroupWrite(const std::string &plotName, vtkDataSet *in_ds = dt->GetDataRepresentation().GetDataVTK(); int domainId = dt->GetDataRepresentation().GetDomain(); std::string label(dt->GetDataRepresentation().GetLabel()); - WriteChunk(in_ds, chunkID, domainId, label); + + // RemoveUnusedPoints returns input dataset or new cleaned dataset + vtkDataSet *clean_ds = RemoveUnusedPoints(in_ds); + + WriteChunk(clean_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 +1914,57 @@ 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); + 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/avt/Pipeline/Sinks/avtDatabaseWriter.h b/src/avt/Pipeline/Sinks/avtDatabaseWriter.h index 908200aec11..e065351f517 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); }; 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); };