Commit f2b508a3 authored by Chris Cantwell's avatar Chris Cantwell

Merge branch 'master' into feature/MovingBodies

Conflicts:
	solvers/IncNavierStokesSolver/EquationSystems/IncNavierStokes.cpp
	solvers/IncNavierStokesSolver/Forcing/ForcingMovingBody.cpp
parents 2bf12267 6c3be247
......@@ -177,6 +177,7 @@ INCLUDE (ThirdPartyPETSc)
INCLUDE (ThirdPartyVTK)
INCLUDE (ThirdPartyQT4)
INCLUDE (ThirdPartySMV)
INCLUDE (ThirdPartyCCM)
INCLUDE (Doxygen)
......
......@@ -8,27 +8,28 @@
#If the user has not set BOOST_ROOT, look in a couple common places first.
MESSAGE(STATUS "Searching for Boost:")
SET(MIN_VER "1.52.0")
SET(NEEDED_BOOST_LIBS thread iostreams date_time filesystem system
program_options regex timer)
SET(Boost_DEBUG 0)
SET(Boost_NO_BOOST_CMAKE ON)
IF( BOOST_ROOT )
SET(Boost_NO_SYSTEM_PATHS ON)
FIND_PACKAGE( Boost COMPONENTS ${NEEDED_BOOST_LIBS})
FIND_PACKAGE( Boost ${MIN_VER} COMPONENTS ${NEEDED_BOOST_LIBS})
ELSE ()
SET(TEST_ENV1 $ENV{BOOST_HOME})
SET(TEST_ENV2 $ENV{BOOST_DIR})
IF (DEFINED TEST_ENV1)
SET(BOOST_ROOT $ENV{BOOST_HOME})
SET(Boost_NO_SYSTEM_PATHS ON)
FIND_PACKAGE( Boost QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
FIND_PACKAGE( Boost ${MIN_VER} QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
ELSEIF (DEFINED TEST_ENV2)
SET(BOOST_ROOT $ENV{BOOST_DIR})
SET(Boost_NO_SYSTEM_PATHS ON)
FIND_PACKAGE( Boost QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
FIND_PACKAGE( Boost ${MIN_VER} QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
ELSE ()
SET(BOOST_ROOT ${TPDIST})
FIND_PACKAGE( Boost QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
FIND_PACKAGE( Boost ${MIN_VER} QUIET COMPONENTS ${NEEDED_BOOST_LIBS} )
ENDIF()
ENDIF()
......@@ -148,7 +149,7 @@ IF (THIRDPARTY_BUILD_BOOST)
IF (APPLE)
EXTERNALPROJECT_ADD_STEP(boost patch-install-path
COMMAND sed -i ".bak" "s|-install_name \"|&${TPDIST}/lib/|" ${TPBUILD}/boost/tools/build/v2/tools/darwin.jam
COMMAND sed -i ".bak" "s|-install_name \"|&${TPDIST}/lib/|" ${TPBUILD}/boost/tools/build/src/tools/darwin.jam
DEPENDERS build
DEPENDEES download)
ENDIF (APPLE)
......
########################################################################
#
# ThirdParty configuration for Nektar++
#
# Star CCM i/o
#
########################################################################
OPTION(NEKTAR_USE_CCM
"CCM star i/o library is available." OFF)
IF( NEKTAR_USE_CCM )
FIND_LIBRARY(CCMIO_LIBRARY NAMES "ccmio" "adf" PATHS /usr/local/lib ${Nektar++_TP_LIBRARY_DIRS})
IF( CCMIO_LIBRARY )
MESSAGE(STATUS "Found Ccmio: ${CCMIO_LIBRARY}")
MARK_AS_ADVANCED(CCMIO_LIBRARY)
ADD_DEFINITIONS(-DNEKTAR_USE_CCM)
FIND_PATH (CCMIO_INCLUDE_DIR ccmio.h)
ELSE()
MESSAGE(FATAL_ERROR "Cound not find ccmio library")
ENDIF()
ENDIF( NEKTAR_USE_CCM )
......@@ -342,3 +342,14 @@ year={2011}
pages={95--136},
year={2014}
}
@article{Ko07,
title = {Vectorized Matlab codes for linear two-dimensional elasticity},
author = {Koko, Jonas},
journal = {Scientific Programming},
volume = 15,
number = 3,
pages = {157--172},
year = 2007,
publisher = {IOS Press}
}
......@@ -62,7 +62,7 @@ BLAS & \cmark & \cmark & \cmark & & Or MKL,
ACML, OpenBLAS
\\
LAPACK & \cmark & \cmark & \cmark & & \\
Boost $>1.49$ & \cmark & \cmark & \cmark & \cmark & Compile
Boost $>=1.52$ & \cmark & \cmark & \cmark & \cmark & Compile
with iostreams
\\
ModMETIS & \cmark & & & \cmark & \\
......@@ -218,7 +218,7 @@ BLAS & \cmark & & & & Part of
Xcode \\
LAPACK & \cmark & & & & Part of
Xcode \\
Boost $>1.49$ & \cmark & \texttt{boost} & \cmark & \cmark & Compile
Boost $>=1.52$ & \cmark & \texttt{boost} & \cmark & \cmark & Compile
with iostreams \\
TinyXML & \cmark & \texttt{tinyxml} & \cmark & \cmark & \\
ModMETIS & \cmark & & & \cmark & \\
......@@ -517,10 +517,22 @@ Components of the \nekpp package can be selected using the following options:
Enabled compilation of the 'X' solver.
\end{itemize}
A number of ThirdParty libraries are required by \nekpp. There are also
optional libraries which provide additional functionality. These can be selected
using the following options:
A number of ThirdParty libraries are required by \nekpp. There are
also optional libraries which provide additional functionality. These
can be selected using the following options:
\begin{itemize}
\item \inlsh{NEKTAR\_USE\_ACCELERATE\_FRAMEWORK}
Use the Mac Osx accelerate framework for BLAS and LAPACK
methods. This option should only be required under in a Mac OSX
environment.
\item \inlsh{NEKTAR\_USE\_ARPACK}
Build \nekpp with support for ARPACK. This provides routines used for
linear stability analyses. Alternative Arnoldi algorithms are also
implemented directly in \nekpp.
\item \inlsh{NEKTAR\_USE\_BLAS\_LAPACK} (Required)
Enables the use of Basic Linear Algebra Subroutines libraries for linear
......@@ -532,34 +544,37 @@ using the following options:
This may not be the implementation offering the highest performance for your
architecture, but it is the most likely to work without problem.
\item \inlsh{NEKTAR\_USE\_OPENBLAS}
\item \inlsh{NEKTAR\_USE\_CCM}
Use OpenBLAS for the BLAS library. OpenBLAS is based on the Goto BLAS
implementation and generally offers better performance than a non-optimised
system BLAS. However, the library must be installed on the system.
Use the ccmio library provided with the Star-CCM package for
reading ccm files. This option is required as part of MeshConvert
if you wish to convert a Star-CCM mesh into the Nektar format. It
is possible to read a Tecplot plt file from Star-CCM but this
output currently needs to be converted to ascii format using the
Tecplot package.
\item \inlsh{NEKTAR\_USE\_FFTW}
Build \nekpp with support for FFTW for performing Fast Fourier Transforms
(FFTs). This is used only when using domains with homogeneous coordinate
directions.
\item \inlsh{NEKTAR\_USE\_MKL}
Use the Intel MKL library. This is typically available on cluster
environments and should offer performance tuned for the specific cluster
environment.
\item \inlsh{NEKTAR\_USE\_MPI} (Recommended)
Build Nektar++ with MPI parallelisation. This allows solvers to be run in
serial or parallel.
\item \inlsh{NEKTAR\_USE\_FFTW}
Build \nekpp with support for FFTW for performing Fast Fourier Transforms
(FFTs). This is used only when using domains with homogeneous coordinate
directions.
\item \inlsh{NEKTAR\_USE\_ARPACK}
\item \inlsh{NEKTAR\_USE\_OPENBLAS}
Build \nekpp with support for ARPACK. This provides routines used for
linear stability analyses. Alternative Arnoldi algorithms are also
implemented directly in \nekpp.
Use OpenBLAS for the BLAS library. OpenBLAS is based on the Goto BLAS
implementation and generally offers better performance than a non-optimised
system BLAS. However, the library must be installed on the system.
\item \inlsh{NEKTAR\_USE\_VTK}
......
......@@ -353,7 +353,7 @@ the correct solution is obtained by evaluating the $L_2$ and $L_{inf}$ errors.
\subsubsection{Running the code}
\begin{lstlisting}[style=BashInputStyle]
ADRSolver Test\_Helmholtz2D\_modal.xml
ADRSolver Test_Helmholtz2D_modal.xml
\end{lstlisting}
This execution should print out a summary of input file, the $L_2$ and
......@@ -363,7 +363,7 @@ $L_{inf}$ errors and the time spent on the calculation.
Simulation results are written in the file Helmholtz2D\_modal.fld. We can choose
to visualise the output in Gmsh
\begin{lstlisting}[style=BashInputStyle]
FldToGmsh Helmholtz2D\_modal.xml Helmholtz2D\_modal.fld
FldToGmsh Helmholtz2D_modal.xml Helmholtz2D_modal.fld
\end{lstlisting}
which generates the file Helmholtz2D\_modal\_u.pos as shown in
Fig.~\ref{f:adrsolver:helmholtz2D}
......
......@@ -159,6 +159,24 @@ $\mathbf{\sigma}$ of the tissue.
\subsection{Filters}
\begin{itemize}
\item \inltt{CellHistoryPoints} writes all cell model states over time at
fixed points. Can be used along with the \inltt{HistoryPoints} filter to
record all variables at specific points during a simulation.
\begin{lstlisting}[style=XmlStyle]
<FILTER TYPE="CellHistoryPoints">
<PARAM NAME="OutputFile">crn.his</PARAM>
<PARAM NAME="OutputFrequency">1</PARAM>
<PARAM NAME="Points">
0.00 0.0 0.0
</PARAM>
</FILTER>
\end{lstlisting}
\begin{itemize}
\item \inltt{OutputFile} specifies the filename to write history data to.
\item \inltt{OutputFrequency} specifies the number of steps between successive outputs.
\item \inltt{Points} lists coordinates at which history data is to be recorded.
\end{itemize}
\item \inltt{CheckpointCellModel} checkpoints the cell model. Can be
used along with the \inltt{Checkpoint} filter to record complete simulation
state and regular intervals.
......
\chapter{Linear elasticity solver}
\label{s:elasticity}
\section{Synopsis}
The LinearElasticSolver is a solver for solving the linear elasticity equations
in two and three dimensions. Whilst this may be suitable for simple solid
mechanics problems, its main purpose is for use for mesh deformation and
high-order mesh generation, whereby the finite element mesh is treated as a
solid body, and the deformation is applied at the boundary in order to curve the
interior of the mesh.
Currently the following equation systems are supported:
%
\begin{center}
\begin{tabular}{lp{8cm}}
\toprule
Value & Description \\
\midrule
\inltt{LinearElasticSystem} & Solves the linear elastic equations. \\
\inltt{IterativeElasticSystem} & A multi-step variant of the elasticity solver,
which breaks a given deformation into multiple
steps, and applies the deformation to a mesh. \\
\bottomrule
\end{tabular}
\end{center}
\subsection{The linear elasticity equations}
The linear elasticity equations model how a solid body deforms under the
application of a `small' deformation or strain. The formulation starts with the
equilibrium of forces represented by the equation
%
\begin{equation}
\nabla \cdot \mathbf{S} + \mathbf{f} = \mathbf{0} \quad \textrm{in} \quad \Omega
\label{eq:strong}
\end{equation}
%
where $\mathbf{S}$ is the stress tensor and $\mathbf{f}$ denotes a
spatially-varying force. We further assume that the stress tensor $\mathbf{S}$
incorporates elastic and, optionally, thermal stresses that can be switched on
to assist in mesh deformation applications. We assume these can be decomposed so
that $\mathbf{S}$ is written as
%
\[
\mathbf{S} = \mathbf{S}_e + \mathbf{S}_t,
\]
%
where the subscripts $e$ and $t$ denote the elastic and thermal terms
respectively. We adopt the usual linear form of the elastic stress tensor as
%
\[
\mathbf{S}_e = \lambda\mbox{Tr}(\mathbf{E}) \, \mathbf{I} +\mu \mathbf{E},
\]
%
where $\lambda$ and $\mu$ are the Lam\'e constants, $\mathbf{E}$ represents the
strain tensor, and $\mathbf{I}$ is the identity tensor. For small deformations,
the strain tensor $\mathbf{E}$ is given as
%
\begin{equation}
\mathbf{E} =\frac{1}{2} \left ( \nabla \mathbf{u}+ \nabla \mathbf{u}^t \right )
\end{equation}
%
where $\mathbf{u}$ is the two- or three-dimensional vector of displacements. The
boundary conditions required to close the problem consist of prescribed
displacements at the boundary $\partial \Omega$, i.e.
\begin{equation}
\mathbf{u} = \hat{\mathbf{u}} \quad \textrm{in}\ \partial \Omega.
\end{equation}
We further express the Lam\'e constants in terms of the Young's modulus $E$ and
Poisson ratio $\nu$ as
%
\[
\lambda = \frac{\nu E}{(1+\nu)(1-2\nu)}, \qquad \mu = \frac{E}{2(1+\nu)}.
\]
%
The Poisson ratio, valid in the range $\nu < \tfrac{1}{2}$, is a measure of the
compressibility of the body, and the Young's modulus $E > 0$ is a measure of its
stiffness.
\section{Usage}
\begin{lstlisting}[style=BashInputStyle]
LinearElasticSolver [arguments] session.xml [another.xml] ...
\end{lstlisting}
\section{Session file configuration}
\subsection{Solver Info}
\begin{itemize}
\item \inltt{EqType} Specifies the PDE system to solve, based on the choices
in the table above.
\item \inltt{Temperature} Specifies the form of the thermal stresses to
use. The choices are:
\begin{itemize}
\item \inltt{None}: No stresses (default).
\item \inltt{Jacobian}: Sets $\mathbf{S}_t = \beta JI$, where $\beta$ is a
parameter defined in the parameters section, $J$ is the elemental Jacobian
determinant and $I$ is the identity matrix.
\item \inltt{Metric}: A more complex term, based on the eigenvalues of the
metric tensor. This can only be used for simplex elements (triangles and
tetrahedra). Controlled again by the parameter $\beta$.
\end{itemize}
\item \inltt{BCType} Specifies the type of boundary condition to apply when
the \inltt{IterativeElasticSystem} is being used.
\begin{itemize}
\item \inltt{Normal}: The boundary conditions are split into
\inltt{NumSteps} steps, as defined by a parameter in the session file
(default).
\item \inltt{Repeat}: As the geometry is updated, re-evaluate the boundary
conditions. This enables, for example, a cirlce to be rotated continuously.
\end{itemize}
\end{itemize}
\subsection{Parameters}
The following parameters can be specified in the \inltt{PARAMETERS} section of
the session file:
\begin{itemize}
\item \inltt{nu}: sets the Poisson ratio $\nu$.\\
\textit{Default value}: 0.25.
\item \inltt{E}: sets the Young's modulus $E$.\\
\textit{Default value}: 1.
\item \inltt{beta}: sets the thermal stress coefficient $\beta$.\\
\textit{Default value}: 1.
\item \inltt{NumSteps}: sets the number of steps to use in the case that the
iterative elastic system is enabled. Should be greater than 0.\\
\textit{Default value}: 0.
\end{itemize}
\section{Examples}
\subsection{L-shaped domain}
The first example is the classic L-shaped domain, in which an exact solution is
known, which makes it an ideal test case~\cite{Ko07}. The domain is the polygon
formed from the vertices
%
\[
(-1,-1), (0,-2), (2,0), (0,2), (-1,-1), (0,0).
\]
%
The exact solution for the displacements is known in polar co-ordinates
$(r,\theta)$ as
%
\begin{align*}
u_r(r,\theta) &= \frac{r^\alpha}{2\mu} \left[
C_1(C_2 - \alpha - 1)\cos((\alpha-1)\theta) - (\alpha+1)\cos((\alpha+1)\theta)
\right]\\
u_\theta(r,\theta) &= \frac{r^\alpha}{2\mu} \left[
(\alpha+1)\sin((\alpha+1)\theta) + C_1(C_2+\alpha-1)\sin((\alpha-1)\theta)
\right]
\end{align*}
%
where $\alpha\approx 0.544483737\dots$ is the solution of the equation
$\alpha\sin(2\omega) + \sin(2\omega\alpha) = 0$,
%
\[
C_1 = -\frac{\cos((\alpha+1)\omega)}{\cos((\alpha-1)\omega)},\qquad
C_2 = 2\frac{\lambda + 2\mu}{\lambda+\mu}
\]
with $\lambda$ and $\mu$ being the Lam\'e constants and $\omega = 3\pi/4$.
Boundary conditions are set to be the exact solution and
$\mathbf{f} = \mathbf{0}$. The solution has a singularity at the origin, and so
in order to test convergence $h$-refinement is required.
\begin{figure}
\begin{center}
\includegraphics[width=0.5\textwidth]{Figures/l-shape}
\end{center}
\caption{Solution of the $u$ displacement field for the L-shaped domain.}
\label{fig:elas:ldomain}
\end{figure}
A simple example of how the linear elastic solver can be set up can be found in
the \inlsh{Tests/L-shaped.xml} session file in the linear elastic solver
directory. A more refined domain with the obtained $u$ solution is shown in
figure~\ref{fig:elas:ldomain}. The solver can be run using the command:
\begin{lstlisting}[style=BashInputStyle]
LinearElasticSolver L-domain.xml
\end{lstlisting}
The obtained solution \inlsh{L-domain.fld} can be applied to the mesh to obtain
a deformed XML file using the \inltt{deform} module in \inltt{FieldConvert}:
\begin{lstlisting}[style=BashInputStyle]
FieldConvert -m deform L-domain.xml L-domain.fld L-domain-deformed.xml
\end{lstlisting}
\subsection{Boundary layer deformation}
In this example we use the iterative elastic system to apply a large deformation
to a triangular boundary layer mesh of a square mesh $\Omega = [0,1]^2$. At the
bottom edge, we apply a Dirichlet condition $g=\tfrac{1}{2}\sin(\pi x)$ that is
enforced by splitting it into $N$ substeps, so that at each step we solve the
system with the boundary condition $g^n(x) = g(x)/N$. The process is depicted in
figure~\ref{fig:elas:bl}.
\begin{figure}
\begin{center}
\includegraphics[width=0.3\textwidth]{Figures/bl-0}
\includegraphics[width=0.3\textwidth]{Figures/bl-1}
\includegraphics[width=0.3\textwidth]{Figures/bl-2}
\end{center}
\caption{Figures that show the initial domain (left), after 50 steps (middle)
and final deformation of the domain (right).}
\label{fig:elas:bl}
\end{figure}
The setup is very straightforward. The geometry can be found inside the file
\inlsh{Examples/bl-mesh.xml} and the conditions inside
\inlsh{Examples/bl-conditions.xml}. The solver can be set up using the following
parameters, with \inltt{NumSteps} denoting $N$:
\begin{lstlisting}[style=XMLStyle]
<SOLVERINFO>
<I PROPERTY="EQTYPE" VALUE="IterativeElasticSystem" />
</SOLVERINFO>
<PARAMETERS>
<P> nu = 0.3 </P>
<P> E = 1.0 </P>
<P> NumSteps = 100 </P>
</PARAMETERS>
\end{lstlisting}
To identify the boundary that we intend to split up into substeps, we must
assign the \inltt{WALL} tag to our boundary regions:
\begin{lstlisting}[style=XMLStyle]
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="u" VALUE="0" USERDEFINEDTYPE="Wall" />
<D VAR="v" VALUE="0.5*sin(PI*x)" USERDEFINEDTYPE="Wall" />
</REGION>
<REGION REF="1">
<D VAR="u" VALUE="0" />
<D VAR="v" VALUE="0" />
</REGION>
</BOUNDARYCONDITIONS>
\end{lstlisting}
The solver can then be run using the command:
\begin{lstlisting}[style=BashInputStyle]
LinearElasticSolver bl-mesh.xml bl-conditions.xml
\end{lstlisting}
This will produce a series of meshes \inlsh{bl-mesh-\%d.xml}, where \%d is an
integer running between 0 and 100. If at any point the mesh becomes invalid,
that is, a negative Jacobian is detected, execution will cease.
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../user-guide"
%%% End:
......@@ -527,7 +527,7 @@ Finally the domain is specified by the first composite by
</SOLVERINFO>
\end{lstlisting}
\paragraph{Parameters:~} Parameters used for the simulation are taken from \cite{Sherwin2003}
\paragraph{Parameters:~} Parameters used for the simulation are taken from \cite{ShFoPeFr03}
\begin{lstlisting}[style=XMLStyle]
<PARAMETERS>
<P> TimeStep = 2e-6 </P>
......
......@@ -6,5 +6,6 @@
\input{cardiac-ep}
\input{compressible-flow}
\input{incompressible-ns}
\input{linear-elastic}
\input{pulse-wave}
\input{shallow-water}
\section{Field Convert}
\section{FieldConvert}
\label{s:utilities:fieldconvert}
FieldConvert is a utility embedded in \nekpp with the primary
aim of allowing the user to convert the \nekpp output binary files
......@@ -53,7 +53,7 @@ in its compressed format \inltt{test.xml.gz}.
%
%
%
\subsection{Field Convert range option \textit{-r}}
\subsection{Range option \textit{-r}}
The Fieldconvert range option \inltt{-r} allows the user to specify
a sub-range of the mesh (computational domain) by using an
additional flag, \inltt{-r} (which stands for \inltt{r}ange and either
......@@ -77,7 +77,7 @@ FieldConvert -r 2,3,-1,2 test.xml test.fld test.dat
\end{lstlisting}
%
\end{itemize}
where \inltt{-r} defines the range option of the field convert
where \inltt{-r} defines the range option of the FieldConvert
utility, the two first numbers define the range in $x$ direction
and the the third and fourth number specify the $y$ range.
A sub-range of a 3D domain can also be specified.
......@@ -86,7 +86,7 @@ to define the $z$ range.
%
%
%
\subsection{Field Convert modules \textit{-m}}
\subsection{FieldConvert modules \textit{-m}}
FieldConvert allows the user to manipulate the \nekpp output
binary files (.chk and .fld) by using the flag \inltt{-m} (which
stands for \inltt{m}odule)..
......@@ -421,7 +421,50 @@ way as described in section \ref{s:utilities:fieldconvert:sub:convert}.
%
%
%
\subsection{Field Convert in parallel}
\subsubsection{Manipulating meshes with FieldConvert}
FieldConvert has support for two modules that can be used in conjunction with
the linear elastic solver, as shown in chapter~\ref{s:elasticity}. To do this,
FieldConvert has an XML output module, in addition to the Tecplot and VTK
formats.
The \inltt{deform} module, which takes no options, takes a displacement field
and applies it to the geometry, producing a deformed mesh:
\begin{lstlisting}[style=BashInputStyle]
FieldConvert -m deform input.xml input.fld deformed.xml
\end{lstlisting}
The \inltt{displacement} module is designed to create a boundary condition field
file. Its intended use is for mesh generation purposes. It can be used to
calculate the displacement between the linear mesh and a high-order surface, and
then produce a \inltt{fld} file, prescribing the displacement at the boundary,
that can be used in the linear elasticity solver.
Presently the process is somewhat convoluted and must be used in conjunction
with MeshConvert to create the surface file. However the bash input below
describes the procedure. Assume the high-order mesh is in a file called
\inlsh{mesh.xml}, the linear mesh is \inlsh{mesh-linear.xml} that can be
generated by removing the \inltt{CURVED} section from \inlsh{mesh.xml}, and that
we are interested in the surface with ID 123.
\begin{lstlisting}[style=BashInputStyle]
# Extract high order surface
MeshConvert -m extract:surf=123 mesh.xml mesh-surf-curved.xml
# Use FieldConvert to calculate displacement between two surfaces
FieldConvert -m displacement:id=123:to=mesh-surf-curved.xml \
mesh-linear.xml mesh-deformation.fld
# mesh-deformation.fld is used as a boundary condition inside the
# solver to prescribe the deformation conditions.xml contains
# appropriate Nektar++ parameters (mu, E, other BCs, ...)
LinearElasticSolver mesh-linear.xml conditions.xml
# This produces the final field mesh-linear.fld which is the
# displacement field, use FieldConvert to apply it:
FieldConvert-g -m deform mesh-linear.xml mesh-linear.fld mesh-deformed.xml
\end{lstlisting}
\subsection{FieldConvert in parallel}
To run FieldConvert in parallel the user needs to compile
\nekpp with MPI support and can employ the following
command
......@@ -475,3 +518,8 @@ Note the final \inltt{:info} extension on the last argument is necessary to
tell FieldConvert that you wish to generate an info file but the extension
to this file is .xml. This syntax allows the routine not to get confused with
the input/output xml files.
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../user-guide"