Commit b2473616 authored by Chris Cantwell's avatar Chris Cantwell
Browse files

Merge branch 'master' into fix/override-tester-exec2

parents e4c0b5c6 d0373bd6
......@@ -6,16 +6,24 @@ v4.3.1
**Library**:
- Add `THIRDPARTY_USE_SSL` option to disable use of SSL on systems where CMake
is not compiled with SSL support. (!602)
- Fixed a number of documentation issues (!586, !593)
- Fixed a number of documentation issues (!586, !593, !596)
- Fix Homogeneous transform when unshuffling is not used. (!599)
- Fix namespace pollution in library header files. (!601)
- Fix issue with METIS compilation on clang 7.3 (!603)
- Fix bug in modified Arnoldi algorithm causing convergence to be reported when
number of vectors is less than `nvec` (!608)
- Fix uninitialised array bug in AssemblyMap (!598)
- Fix FieldConvert processing of partitions in serial (!612)
- Fix use of multi-level static condensation in parallel with periodic
boundary conditions (!614)
**NekMesh**:
- Fix incorrect link directory on CCMIO library.
**FieldConvert**:
- Fix to FLD input to update the field definitions always, not just when a range
is specified. (!611)
**Tester**:
- Remove requirement for executable to be specified in .tst file if it is
overridden on the command-line (!595)
......
\section{Compiling Documentation}
Documentation for Nektar++ is provided in a number of forms:
\begin{itemize}
\item User Guide (LaTeX, compiled to pdf or html)
\item Source code documentation (Doxygen compiled to html)
\end{itemize}
\subsection{Dependencies}
To build the LaTeX documents (user guide or tutorials), the following
dependencies are required:
\begin{itemize}
\item texlive-base
\item texlive-latex-extra
\item texlive-science
\item imagemagick
\end{itemize}
To build the Doxygen documentation, the following dependencies are required:
\begin{itemize}
\item doxygen
\item graphviz
\end{itemize}
\subsection{Compiling the User Guide}
To compile the User Guide:
\begin{enumerate}
\item Configure the Nektar++ build tree as normal.
\item Run
\begin{lstlisting}[style=BashInputStyle]
make user-guide-pdf
\end{lstlisting}
to make the PDF version, or run
\begin{lstlisting}[style=BashInputStyle]
make user-guide-html
\end{lstlisting}
to make the HTML version.
\end{enumerate}
\subsection{Compiling the code documentation}
To compile the code documentation enable the \inltt{NEKTAR\_BUILD\_DOC} option
in the \inlsh{ccmake} configuration tool.
You can then compile the HTML code documentation using:
\begin{lstlisting}[style=BashInputStyle]
make doc
\end{lstlisting}
\section{Compiling Tutorials}
If you are using a clone of the \nekpp git repository, you can also download
the source for the \nekpp tutorials which is available as a \emph{git submodule}.
\begin{enumerate}
\item From a \nekpp working directory (e.g. \inlsh{\$NEKPP}):
\begin{lstlisting}[style=BashInputStyle]
git submodule init
git submodule update --remote
\end{lstlisting}
\item From your build directory (e.g. \inlsh{\$NEKPP/build}), re-run \inlsh{cmake} to update the build system to include the tutorials
\begin{lstlisting}[style=BashInputStyle]
cmake ../
\end{lstlisting}
\item Compile each required tutorial, for example
\begin{lstlisting}[style=BashInputStyle]
make flow-stability-channel
\end{lstlisting}
\end{enumerate}
......@@ -9,4 +9,4 @@ solvers for simulation and do not need to perform additional code development.
\input{source}
\input{doc}
......@@ -504,7 +504,7 @@ namespace Nektar
{
if (pIt->second[i].isLocal)
{
graph[0][pIt->second[i].id] = gId;
graph[0][pIt->second[i].id] = graph[0][meshVertId];
}
}
}
......@@ -528,7 +528,7 @@ namespace Nektar
{
if (pIt->second[i].isLocal)
{
graph[0][pIt->second[i].id] = gId;
graph[0][pIt->second[i].id] = graph[0][pIt->first];
}
}
}
......@@ -692,6 +692,7 @@ namespace Nektar
if (i == pIt->second.size())
{
boost::add_vertex(boostGraphObj);
tempGraph[0][meshVertId] = tempGraphVertId++;
m_numNonDirVertexModes++;
}
......@@ -807,6 +808,7 @@ namespace Nektar
if (i == pIt->second.size())
{
boost::add_vertex(boostGraphObj);
tempGraph[1][meshEdgeId] = tempGraphVertId++;
m_numNonDirEdgeModes += EdgeSize[meshEdgeId];
m_numNonDirEdges++;
......@@ -857,6 +859,7 @@ namespace Nektar
meshFaceId = pIt->first;
ASSERTL0(graph[2].count(meshFaceId) == 0,
"This periodic boundary edge has been specified before");
boost::add_vertex(boostGraphObj);
tempGraph[2][meshFaceId] = tempGraphVertId++;
nFaceIntCoeffs = FaceSize[meshFaceId];
m_numNonDirFaceModes+=nFaceIntCoeffs;
......@@ -869,6 +872,7 @@ namespace Nektar
ASSERTL0(graph[2].count(pIt->second[0].id) == 0,
"This periodic boundary face has been specified before");
boost::add_vertex(boostGraphObj);
tempGraph[2][pIt->first] = tempGraphVertId;
tempGraph[2][pIt->second[0].id] = tempGraphVertId++;
nFaceIntCoeffs = FaceSize[pIt->first];
......@@ -1052,7 +1056,7 @@ namespace Nektar
}
// Container to store vertices of the graph which correspond to
// degrees of freedom along the boundary.
// degrees of freedom along the boundary and periodic BCs.
set<int> partVerts;
if (m_solnType == eIterativeMultiLevelStaticCond ||
......@@ -1167,6 +1171,29 @@ namespace Nektar
}
}
}
// Now fill with all vertices on periodic BCs
for (pIt = periodicVerts.begin(); pIt != periodicVerts.end(); ++pIt)
{
if (graph[0].count(pIt->first) == 0)
{
partVerts.insert(tempGraph[0][pIt->first]);
}
}
for (pIt = periodicEdges.begin(); pIt != periodicEdges.end(); ++pIt)
{
if (graph[1].count(pIt->first) == 0)
{
partVerts.insert(tempGraph[1][pIt->first]);
}
}
for (pIt = periodicFaces.begin(); pIt != periodicFaces.end(); ++pIt)
{
if (graph[2].count(pIt->first) == 0)
{
partVerts.insert(tempGraph[2][pIt->first]);
}
}
}
int nGraphVerts = tempGraphVertId;
......@@ -2470,7 +2497,7 @@ namespace Nektar
Array<OneD, const NekDouble> local;
if(global.data() == loc.data())
{
local = Array<OneD, NekDouble>(local.num_elements(),local.data());
local = Array<OneD, NekDouble>(loc.num_elements(),loc.data());
}
else
{
......
......@@ -119,6 +119,7 @@ IF( NEKTAR_SOLVER_INCNAVIERSTOKES )
ADD_NEKTAR_TEST_LENGTHY(Hex_channel_m8_par)
ADD_NEKTAR_TEST_LENGTHY(Pyr_channel_m6_par)
ADD_NEKTAR_TEST_LENGTHY(Hex_channel_m8_srhs_par)
ADD_NEKTAR_TEST(Tet_channel_m4_per_xxt_ml_par)
ADD_NEKTAR_TEST(Tet_channel_m8_par)
ADD_NEKTAR_TEST_LENGTHY(Tet_channel_m8_iter_ml_par)
ADD_NEKTAR_TEST_LENGTHY(bfs_tg_par)
......
......@@ -2,7 +2,7 @@
<test>
<description>3D channel flow, Tetrahedral elements, P=4, periodic BCs</description>
<executable>IncNavierStokesSolver</executable>
<parameters>Tet_channel_m4_per.xml</parameters>
<parameters>-I GlobalSysSoln=DirectStaticCond Tet_channel_m4_per.xml</parameters>
<files>
<file description="Session File">Tet_channel_m4_per.xml</file>
</files>
......
......@@ -84,7 +84,6 @@
<I PROPERTY="AdvectionForm" VALUE="Convective" />
<I PROPERTY="Projection" VALUE="Galerkin" />
<I PROPERTY="TimeIntegrationMethod" VALUE="IMEXOrder1" />
<I PROPERTY="GlobalSysSoln" VALUE="DirectStaticCond" />
</SOLVERINFO>
<PARAMETERS>
......
<?xml version="1.0" encoding="utf-8" ?>
<test>
<description>3D channel flow, Tetrahedral elements, P=4, periodic BCs, XxtMultiLevelStaticCond, par(2)</description>
<executable>IncNavierStokesSolver</executable>
<parameters>--use-metis -I GlobalSysSoln=XxtMultiLevelStaticCond Tet_channel_m4_per.xml</parameters>
<processes>2</processes>
<files>
<file description="Session File">Tet_channel_m4_per.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0</value>
<value variable="v" tolerance="1e-12">0</value>
<value variable="w" tolerance="1e-12">0</value>
<value variable="p" tolerance="1e-12">0</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0</value>
<value variable="v" tolerance="1e-12">0</value>
<value variable="w" tolerance="1e-12">0</value>
<value variable="p" tolerance="1e-12">0</value>
</metric>
</metrics>
</test>
......@@ -211,6 +211,9 @@ int main(int argc, char* argv[])
f->m_comm = boost::shared_ptr<FieldConvertComm>(
new FieldConvertComm(argc, argv, nprocs,rank));
// Set forceoutput option. Otherwise only procid 0 will write file
vm.insert(std::make_pair("forceoutput", po::variable_value()));
}
else
{
......
......@@ -261,25 +261,22 @@ void InputFld::Process(po::variables_map &vm)
}
}
// if range is defined reset up output field in case of
// reducing fld definition
if(vm.count("range"))
{
std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
= m_f->m_exp[0]->GetFieldDefinitions();
std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
// reset output field in case Import loaded elements that are not
// in the expansion (because of range option of partitioning)
std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
= m_f->m_exp[0]->GetFieldDefinitions();
std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
for (j = 0; j < nfields; ++j)
for (j = 0; j < nfields; ++j)
{
for (i = 0; i < FieldDef.size(); ++i)
{
for (i = 0; i < FieldDef.size(); ++i)
{
FieldDef[i]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[j]);
m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
}
FieldDef[i]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[j]);
m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
}
m_f->m_fielddef = FieldDef;
m_f->m_data = FieldData;
}
m_f->m_fielddef = FieldDef;
m_f->m_data = FieldData;
}
if(m_f->m_verbose)
......
......@@ -122,7 +122,7 @@ void OutputInfo::Process(po::variables_map &vm)
LibUtilities::GetMeshPartitionFactory().CreateInstance(
vPartitionerName, vSession);
vMeshPartition->PartitionMesh(false);
vMeshPartition->PartitionMesh(nprocs, true);
// get hold of local partition ids
std::vector<std::vector<unsigned int> > ElementIDs(nprocs);
......
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