From 267830387fb26dedcc826fb0488fa169632c1ce4 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 7 Oct 2024 15:57:35 +0200 Subject: [PATCH 1/4] PajeTrace - option to write only (small) html charts and no trace file --- libsrc/core/paje_trace.cpp | 20 +++++++++++++------- libsrc/core/paje_trace.hpp | 10 ++++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/libsrc/core/paje_trace.cpp b/libsrc/core/paje_trace.cpp index dc218e8a..3ffbd716 100644 --- a/libsrc/core/paje_trace.cpp +++ b/libsrc/core/paje_trace.cpp @@ -41,6 +41,7 @@ namespace ngcore bool PajeTrace::trace_thread_counter = false; bool PajeTrace::trace_threads = true; bool PajeTrace::mem_tracing_enabled = true; + bool PajeTrace::write_paje_file = true; PajeTrace :: PajeTrace(int anthreads, std::string aname) { @@ -124,7 +125,7 @@ namespace ngcore #endif if(comm.Size()==1) { - Write(tracefile_name); + Write(); } else { @@ -136,7 +137,7 @@ namespace ngcore event.timer_id += NgProfiler::SIZE*comm.Rank(); if(comm.Rank() == MPI_PAJE_WRITER) - Write(tracefile_name); + Write(); else SendData(); } @@ -443,7 +444,16 @@ namespace ngcore NGCORE_API PajeTrace *trace; - void PajeTrace::Write( const std::string & filename ) + void PajeTrace::Write( ) + { + if(write_paje_file) WritePajeFile( tracefile_name ); + WriteTimingChart(); +#ifdef NETGEN_TRACE_MEMORY + WriteMemoryChart(""); +#endif // NETGEN_TRACE_MEMORY + } + + void PajeTrace::WritePajeFile( const std::string & filename ) { auto n_events = jobs.size() + timer_events.size(); for(auto & vtasks : tasks) @@ -849,10 +859,6 @@ namespace ngcore } } } - WriteTimingChart(); -#ifdef NETGEN_TRACE_MEMORY - WriteMemoryChart(""); -#endif // NETGEN_TRACE_MEMORY paje.WriteEvents(); } diff --git a/libsrc/core/paje_trace.hpp b/libsrc/core/paje_trace.hpp index 7adc6c58..7154feb2 100644 --- a/libsrc/core/paje_trace.hpp +++ b/libsrc/core/paje_trace.hpp @@ -25,6 +25,7 @@ namespace ngcore NGCORE_API static bool trace_thread_counter; NGCORE_API static bool trace_threads; NGCORE_API static bool mem_tracing_enabled; + NGCORE_API static bool write_paje_file; bool tracing_enabled; TTimePoint start_time; @@ -32,6 +33,8 @@ namespace ngcore size_t n_memory_events_at_start; public: + NGCORE_API void Write(); + NGCORE_API void WritePajeFile( const std::string & filename ); NGCORE_API void WriteTimingChart(); #ifdef NETGEN_TRACE_MEMORY NGCORE_API void WriteMemoryChart( std::string fname ); @@ -61,6 +64,11 @@ namespace ngcore max_tracefile_size = max_size; } + static void SetWritePajeFile( bool write ) + { + write_paje_file = write; + } + std::string tracefile_name; struct Job @@ -262,8 +270,6 @@ namespace ngcore links[thread_id].push_back( ThreadLink{thread_id, key, GetTimeCounter(), false} ); } - void Write( const std::string & filename ); - void SendData(); // MPI parallel data reduction }; From a8309fae1cf3aa32d02d5658baa1ac6cc16896b8 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2024 13:59:30 +0200 Subject: [PATCH 2/4] Update d3, fix styles in timing html chart --- libsrc/core/paje_trace.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libsrc/core/paje_trace.cpp b/libsrc/core/paje_trace.cpp index 3ffbd716..244c1cf8 100644 --- a/libsrc/core/paje_trace.cpp +++ b/libsrc/core/paje_trace.cpp @@ -967,10 +967,18 @@ namespace ngcore f.precision(4); f << R"CODE_( - + - + )CODE_"; if(!time_or_memory) f << "Maximum Memory Consumption\n"; From 8a049799e2d540f64e0ae4a6b5ed321b9aa52f42 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2024 14:00:12 +0200 Subject: [PATCH 3/4] Fix debugging function GetOpenElements() --- libsrc/meshing/debugging.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/meshing/debugging.cpp b/libsrc/meshing/debugging.cpp index 949bb45c..c5dbd906 100644 --- a/libsrc/meshing/debugging.cpp +++ b/libsrc/meshing/debugging.cpp @@ -36,13 +36,13 @@ namespace netgen mesh->SetMaterial(2, "2_points"); mesh->SetMaterial(3, "3_points"); mesh->SetMaterial(4, "4_points"); - mesh->Compress(); mesh->ClearSurfaceElements(); for (auto & el : openelements) mesh->AddSurfaceElement( el ); + mesh->Compress(); return mesh; } From ab985ba0446066773e3403dfc2868daa2c0ec10d Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Tue, 8 Oct 2024 14:01:22 +0200 Subject: [PATCH 4/4] Fix optimizations in domains with non-tet elements --- libsrc/meshing/improve3.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libsrc/meshing/improve3.cpp b/libsrc/meshing/improve3.cpp index ac6fbb4d..573bdeba 100644 --- a/libsrc/meshing/improve3.cpp +++ b/libsrc/meshing/improve3.cpp @@ -239,6 +239,7 @@ double MeshOptimize3d :: CombineImproveEdge ( { Element & elem = mesh[ei]; if (elem.IsDeleted()) return false; + if(elem.GetType() != TET) return false; // TODO: implement case where pi0 or pi1 is top of a pyramid if (elem[0] == pi0 || elem[1] == pi0 || elem[2] == pi0 || elem[3] == pi0) { @@ -1320,7 +1321,7 @@ void MeshOptimize3d :: SwapImprove (const NgBitArray * working_elements) for (ElementIndex eli : myrange) { const auto & el = mesh[eli]; - if(el.Flags().fixed) + if(el.Flags().fixed || el.GetType() != TET) continue; if(mp.only3D_domain_nr && mp.only3D_domain_nr != el.GetIndex()) @@ -2637,6 +2638,7 @@ double MeshOptimize3d :: SplitImprove2Element ( Element & elem = mesh[ei0]; if (elem.IsDeleted()) return false; if (ei0 == ei) continue; + if (elem.GetType() != TET) return false; if (elem[0] == pi1 || elem[1] == pi1 || elem[2] == pi1 || elem[3] == pi1 || (elem.GetNP()==5 && elem[4]==pi1) ) if(!has_both_points0.Contains(ei0)) @@ -2648,6 +2650,7 @@ double MeshOptimize3d :: SplitImprove2Element ( Element & elem = mesh[ei1]; if (elem.IsDeleted()) return false; if (ei1 == ei) continue; + if (elem.GetType() != TET) return false; if (elem[0] == pi3 || elem[1] == pi3 || elem[2] == pi3 || elem[3] == pi3 || (elem.GetNP()==5 && elem[4]==pi3)) if(!has_both_points1.Contains(ei1))