From b9054a6ed52ab616503d8049897e796d5e7e3509 Mon Sep 17 00:00:00 2001 From: Guillermo Suarez <guillermo.suarez@scicomp.uni-kl.de> Date: Thu, 25 Jul 2024 07:41:45 +0000 Subject: [PATCH] Fix/filter fieldconvert --- CHANGELOG.md | 3 +++ docs/user-guide/utilities/fieldconvert.tex | 4 ++-- docs/user-guide/xml/xml-filters.tex | 9 +++++++-- .../ProcessModules/ProcessBoundaryExtract.cpp | 10 +++++----- library/SolverUtils/Filters/FilterAeroForces.cpp | 2 +- library/SolverUtils/Filters/FilterCheckpoint.cpp | 3 ++- .../SolverUtils/Filters/FilterFieldConvert.cpp | 15 ++++++++++++++- library/SolverUtils/Filters/FilterFieldConvert.h | 2 ++ 8 files changed, 36 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13a78b4fde..36ce4cb5e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ v5.7.0 - Fix memory-leak with LowEnergyBlock preconditioner for time-updated matrices (!1627) - Fix Fourier expansion integration weights are related test (!1803) - Separate MeshGraph input/output functions into a new class (!1778) +- Added checkpoint file writing start time in the fieldconvert filter (!1789) +- Fix fieldconvert filter incorrect boundary values (!1789) +- Fix numerical precision issues with filters OutputStartTime (!1789) - Fix AdaptiveSFD for MPI (!1821) **IncNavierStokesSolver** diff --git a/docs/user-guide/utilities/fieldconvert.tex b/docs/user-guide/utilities/fieldconvert.tex index 5c75617ca1..6e2e2c4f8d 100644 --- a/docs/user-guide/utilities/fieldconvert.tex +++ b/docs/user-guide/utilities/fieldconvert.tex @@ -641,7 +641,7 @@ FieldConvert -m dof file.xml file.fld out.stdout This module interpolates the output data to a truly equispaced set of points (not equispaced along the collapsed coordinate system). Therefore a tetrahedron is represented by a tetrahedral -number of poinst. This produces much smaller output files. The points +number of points. This produces much smaller output files. The points are then connected together by simplices (triangles and tetrahedrons). \begin{lstlisting}[style=BashInputStyle] @@ -651,7 +651,7 @@ FieldConvert -m equispacedoutput test.xml test.fld test.dat or \begin{lstlisting}[style=BashInputStyle] -FieldConvert -m equispacedouttput test.xml test.fld test.vtu +FieldConvert -m equispacedoutput test.xml test.fld test.vtu \end{lstlisting} diff --git a/docs/user-guide/xml/xml-filters.tex b/docs/user-guide/xml/xml-filters.tex index 6aabe5f69f..af1936527b 100644 --- a/docs/user-guide/xml/xml-filters.tex +++ b/docs/user-guide/xml/xml-filters.tex @@ -559,6 +559,8 @@ The following parameters are supported: Number of timesteps after which output is written, $M$.\\ \inltt{Modules} & \xmark & & FieldConvert modules to run, separated by a white space.\\ + \inltt{OutputStartTime} & \xmark & 0 & + Specifies the simulation time at which to start writing checkpoint files.\\ \bottomrule \end{tabularx} \end{center} @@ -568,11 +570,14 @@ As an example, consider: \begin{lstlisting}[style=XMLStyle,gobble=2] <FILTER TYPE="FieldConvert"> <PARAM NAME="OutputFile">MyFile.vtu</PARAM> - <PARAM NAME="OutputFrequency">100</PARAM> + <PARAM NAME="OutputFrequency">100</PARAM> + <PARAM NAME="OutputStartTime"> 50.0 </PARAM> <PARAM NAME="Modules"> vorticity isocontour:fieldid=0:fieldvalue=0.1 </PARAM> </FILTER> \end{lstlisting} +See the Checkpoint fields filter for more details about the \inltt{OutputStartTime} parameter. + This will create a sequence of files named \inltt{MyFile\_*\_fc.vtu} containing isocontours. The result will be output every 100 time steps. @@ -1216,4 +1221,4 @@ An example is given below: <PARAM NAME="RootOutputL2Norm">1</PARAM> </FILTER> </FILTERS> -\end{lstlisting} \ No newline at end of file +\end{lstlisting} diff --git a/library/FieldUtils/ProcessModules/ProcessBoundaryExtract.cpp b/library/FieldUtils/ProcessModules/ProcessBoundaryExtract.cpp index c7f28e801a..dfd2cae3f3 100644 --- a/library/FieldUtils/ProcessModules/ProcessBoundaryExtract.cpp +++ b/library/FieldUtils/ProcessModules/ProcessBoundaryExtract.cpp @@ -118,13 +118,13 @@ void ProcessBoundaryExtract::v_Process(po::variables_map &vm) else { m_f->m_bndRegionsToWrite = bndRegions; + } - if (m_f->m_exp[0]->GetNumElmts() != 0) + if (m_f->m_exp[0]->GetNumElmts() != 0) + { + for (int i = 0; i < m_f->m_exp.size(); ++i) { - for (int i = 0; i < m_f->m_exp.size(); ++i) - { - m_f->m_exp[i]->FillBndCondFromField(m_f->m_exp[i]->GetCoeffs()); - } + m_f->m_exp[i]->FillBndCondFromField(m_f->m_exp[i]->GetCoeffs()); } } } diff --git a/library/SolverUtils/Filters/FilterAeroForces.cpp b/library/SolverUtils/Filters/FilterAeroForces.cpp index 60a16ddcdf..3bb7fbb8ef 100644 --- a/library/SolverUtils/Filters/FilterAeroForces.cpp +++ b/library/SolverUtils/Filters/FilterAeroForces.cpp @@ -447,7 +447,7 @@ void FilterAeroForces::v_Update( { return; } - if ((m_index++) % m_outputFrequency || (time < m_startTime)) + if ((m_index++) % m_outputFrequency || (time - m_startTime) < -1.0e-07) { return; } diff --git a/library/SolverUtils/Filters/FilterCheckpoint.cpp b/library/SolverUtils/Filters/FilterCheckpoint.cpp index c142c2373f..ec91df53f3 100644 --- a/library/SolverUtils/Filters/FilterCheckpoint.cpp +++ b/library/SolverUtils/Filters/FilterCheckpoint.cpp @@ -96,7 +96,8 @@ void FilterCheckpoint::v_Update( const NekDouble &time) { - if (m_index++ % m_outputFrequency > 0 || time < m_outputStartTime) + if (m_index++ % m_outputFrequency > 0 || + (time - m_outputStartTime) < -1.0e-07) { return; } diff --git a/library/SolverUtils/Filters/FilterFieldConvert.cpp b/library/SolverUtils/Filters/FilterFieldConvert.cpp index 25035d13ce..44f1a13ba5 100644 --- a/library/SolverUtils/Filters/FilterFieldConvert.cpp +++ b/library/SolverUtils/Filters/FilterFieldConvert.cpp @@ -75,6 +75,18 @@ FilterFieldConvert::FilterFieldConvert( } } + // Time after which we need to write checkfiles + it = pParams.find("OutputStartTime"); + if (it == pParams.end()) + { + m_outputStartTime = 0; + } + else + { + LibUtilities::Equation equ(m_session->GetInterpreter(), it->second); + m_outputStartTime = equ.Evaluate(); + } + // Restart file it = pParams.find("RestartFile"); if (it == pParams.end()) @@ -444,7 +456,8 @@ void FilterFieldConvert::v_Update( const NekDouble &time) { m_index++; - if (m_index % m_sampleFrequency > 0) + if (m_index % m_sampleFrequency > 0 || + (time - m_outputStartTime) < -1.0e-07) { return; } diff --git a/library/SolverUtils/Filters/FilterFieldConvert.h b/library/SolverUtils/Filters/FilterFieldConvert.h index 6e39a48fca..3ac9ffd19a 100644 --- a/library/SolverUtils/Filters/FilterFieldConvert.h +++ b/library/SolverUtils/Filters/FilterFieldConvert.h @@ -127,6 +127,8 @@ protected: NekDouble m_phaseSamplePhase; NekDouble m_phaseTolerance; NekDouble m_dt; + // Time when we start writing checkfiles + NekDouble m_outputStartTime; std::vector<ModuleSharedPtr> m_modules; LibUtilities::FieldMetaDataMap m_fieldMetaData; -- GitLab