diff --git a/libsrc/core/paje_trace.cpp b/libsrc/core/paje_trace.cpp index dc218e8a..244c1cf8 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(); } @@ -961,10 +967,18 @@ namespace ngcore f.precision(4); f << R"CODE_( - + - + )CODE_"; if(!time_or_memory) f << "Maximum Memory Consumption\n"; 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 }; 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; } 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))