Commit dc770c73 authored by Dave Moxey's avatar Dave Moxey
Browse files

Merge branch 'feature/prism_only_linearise' into 'master'

feature/prisms only linearise

In an effort to reduce cost on massive meshes, this makes the linearise module only consider prisms (which is most cases are the only deformed elements

See merge request !688
parents 051b5baa bb7c6646
......@@ -48,6 +48,7 @@ v4.4.0
mesh (!669)
- Improvements to mesh linearisation module (!659)
- Add support for Gmsh high-order output (!679)
- Add option to `linearise` module to linearise only prisms (!688)
**FieldConvert:**
- Move all modules to a new library, FieldUtils, to support post-processing
......
......@@ -542,17 +542,32 @@ The module parameters are:
\subsection{Linearisation}
The ability to remove all the high-order information in a mesh can be useful
at times.
The ability to remove all the high-order information in a mesh can be useful at
times when mesh generation is tricky or impossible in the presence of curvature
To do this in NekMesh use the command:
\begin{lstlisting}[style=BashInputStyle]
NekMesh -m linearise high-order-mesh.xml linear-mesh.xml
NekMesh -m linearise:all high-order-mesh.xml linear-mesh.xml
\end{lstlisting}
The output will contain only the linear mesh information, all curved information
is removed.
is removed. Alternatively
\begin{lstlisting}[style=BashInputStyle]
NekMesh -m linearise:invalid high-order-mesh.xml linear-mesh.xml
\end{lstlisting}
attempts to remove curvature from elements only where necessary. This is a
simple algorithm that removes curvature from invalid elements and repeats until
all elements are valid. Either \inlsh{all} or \inlsh{invalid} must be specified.
\begin{itemize}
\item \inlsh{all}: remove curvature from all elements.
\item \inlsh{invalid}: remove curvature from invalid elements.
\item \inlsh{prismonly}: consider only prisms when removing curvature. This is
useful in the presence of a prismatic boundary layer.
\end{itemize}
\subsection{Extracting interface between tetrahedra and prismatic elements}
......
......@@ -53,6 +53,8 @@ ProcessLinear::ProcessLinear(MeshSharedPtr m) : ProcessModule(m)
ConfigOption(true, "0", "remove curve nodes for all elements.");
m_config["invalid"] =
ConfigOption(true, "0", "remove curve nodes if element is invalid.");
m_config["prismonly"] =
ConfigOption(false, "", "only acts on prims");
}
ProcessLinear::~ProcessLinear()
......@@ -139,6 +141,14 @@ void ProcessLinear::Process()
{
for (int i = 0; i < el.size(); ++i)
{
if(m_config["prismonly"].beenSet)
{
if(el[i]->GetConf().m_e != LibUtilities::ePrism)
{
continue;
}
}
// Create elemental geometry.
SpatialDomains::GeometrySharedPtr geom =
el[i]->GetGeom(m_mesh->m_spaceDim);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment