Commit 8b074a89 authored by Dave Moxey's avatar Dave Moxey

Merge remote-tracking branch 'upstream/master' into feature/boost-std-cleanup

Conflicts:
	library/Collections/CollectionOptimisation.cpp
	library/MultiRegions/ContField3D.cpp
parents 7b9539c6 eb8eab36
......@@ -3,13 +3,21 @@ Changelog
v5.0.0
------
**Library**
- Added in sum factorisation version for pyramid expansions and orthogonal
expansion in pyramids (!750)
- Significant overhaul of CMake infrastructure (!770)
**NekMesh**:
- Add feature to read basic 2D geo files as CAD (!731)
- Add periodic boundary condition meshing in 2D (!733)
- Adjust boundary layer thickness in corners in 2D (!739)
- Add non-O BL meshing in 2D (!757)
- Fix issue with reading CCM files due to definition of default arrays rather than a vector (!797)
- Add ability to compile CCIO library but tar file is not yet openly
available whist we seek permission from Simens (!799)
- Fix issue with reading CCM files due to definition of default arrays
rather than a vector (!797)
- Fix inverted triangles and small memory issue in surface meshing (!798)
**Library**
- Added in sum factorisation version for pyramid expansions and orthogonal
......@@ -21,6 +29,15 @@ v5.0.0
**Documentation**:
- Added the developer-guide repository as a submodule (!751)
v4.4.2
------
**NekMesh**:
- Fix uninitialised memory bug in Nek5000 input module (!801)
**Library**
- Fix ability to set default implementation in Collections and added an option
to set eNoCollections in FieldConvert as default (!789)
v4.4.1
------
**Library**
......
......@@ -6,28 +6,76 @@
#
########################################################################
OPTION(NEKTAR_USE_CCM
"CCM star i/o library is available." OFF)
"use CCM star i/o" OFF)
IF( NEKTAR_USE_CCM )
# First search for system ccmioL installs. Hint /usr/local
FIND_PATH (CCMIO_INCLUDE_DIR ccmio.h PATHS /usr/local/include)
FIND_LIBRARY(CCMIO_LIBRARY NAMES "ccmio" PATHS /usr/local/lib)
# If we have our library then don't build CCMIO.
IF (CCMIO_INCLUDE_DIR AND CCMIO_LIBRARY)
SET(BUILD_CCMIO OFF)
ELSE()
SET(BUILD_CCMIO ON)
ENDIF ()
OPTION(THIRDPARTY_BUILD_CCMIO
"Build CCMIO library from ThirdParty if permitted." ${BUILD_CCMIO})
IF (THIRDPARTY_BUILD_CCMIO)
INCLUDE(ExternalProject)
MESSAGE(WARNING "We are seeking permission to distribute ccmio with Nektar++. If you are entitled to use libccmio please contact nektar-users@imperial.ac.uk and place the file ccmio-2.06.tar.bz2 in the director $NEKTAR/ThirdParty")
EXTERNALPROJECT_ADD(
ccmio-2.06
PREFIX ${TPSRC}
URL ${TPURL}/ccmio-2.06.tar.bz2
URL_MD5 809ee34a983cbc8931ca23879d92b4d0
STAMP_DIR ${TPBUILD}/stamp
DOWNLOAD_DIR ${TPSRC}
SOURCE_DIR ${TPSRC}/ccmio-2.06
BINARY_DIR ${TPBUILD}/ccmio-2.06
TMP_DIR ${TPBUILD}/ccmio-2.06-tmp
INSTALL_DIR ${TPDIST}
CONFIGURE_COMMAND ${CMAKE_COMMAND}
-G ${CMAKE_GENERATOR}
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
-DCMAKE_INSTALL_PREFIX:PATH=${TPDIST}
${TPSRC}/ccmio-2.06
)
SET(CCMIO_LIBRARY ccmio CACHE FILEPATH
"CCMIO library" FORCE)
SET(CCMIO_INCLUDE_DIR ${TPDIST}/include CACHE FILEPATH
"CCMIO include" FORCE)
LINK_DIRECTORIES(${TPDIST}/lib)
INCLUDE_DIRECTORIES(NekMesh ${CCMIO_INCLUDE_DIR})
IF (WIN32)
MESSAGE(STATUS
"Build CCMIO: ${TPDIST}/${LIB_DIR}/${CCMIO_LIBRARY}.dll")
ELSE ()
MESSAGE(STATUS
"Build CCMIO: ${TPDIST}/${LIB_DIR}/lib${CCMIO_LIBRARY}.a")
ENDIF ()
SET(CCMIO_CONFIG_INCLUDE_DIR ${TPINC})
set(CCMIO_LIBRARIES
ccmio
adf
)
ELSE()
ADD_CUSTOM_TARGET(ccmio-2.06 ALL)
MESSAGE(STATUS "Found CCMIO: ${CCMIO_LIBRARY}")
SET(CCMIO_CONFIG_INCLUDE_DIR ${CCMIO_INCLUDE_DIR})
INCLUDE_DIRECTORIES(NekMesh ${CCMIO_INCLUDE_DIR})
LINK_DIRECTORIES(${CCMIO_LIBRARY_DIR})
ENDIF (THIRDPARTY_BUILD_CCMIO)
FIND_LIBRARY(CCMIO_LIBRARY NAMES "ccmio" 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)
GET_FILENAME_COMPONENT(CCMIO_LIBRARY_DIR ${CCMIO_LIBRARY} PATH)
INCLUDE_DIRECTORIES(NekMesh ${CCMIO_INCLUDE_DIR})
LINK_DIRECTORIES(${CCMIO_LIBRARY_DIR})
MESSAGE(STATUS ${CCMIO_LIBRARY_DIR})
ELSE()
MESSAGE(FATAL_ERROR "Cound not find ccmio library")
ENDIF()
ENDIF( NEKTAR_USE_CCM )
SET(CCMIO_LIBRARIES ccmio adf)
MARK_AS_ADVANCED(CCMIO_INCLUDE_DIR)
MARK_AS_ADVANCED(CCMIO_LIBRARY)
......@@ -23,19 +23,10 @@ IF( NEKTAR_USE_MPI )
SET(MPI_BUILTIN OFF CACHE INTERNAL
"Determines whether MPI is built into the compiler")
IF (NOT "${HAVE_MPI_H}" OR NOT "${HAVE_MPI_SEND}")
# No in-built MPI: try to find it on the system instead.
IF (NOT THIRDPARTY_BUILD_MPI)
FIND_PACKAGE(MPI)
INCLUDE (FindMPI)
IF (NOT MPI_CXX_FOUND)
# No MPI at all: we have to build it
SET(BUILD_MPI ON)
ELSE()
MARK_AS_ADVANCED(file_cmd)
INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH})
MESSAGE(STATUS "Found MPI: ${MPI_CXX_LIBRARIES}")
ENDIF()
ENDIF()
FIND_PACKAGE(MPI REQUIRED)
INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH} )
MESSAGE(STATUS "Found MPI: ${MPI_CXX_LIBRARIES}")
ELSE()
SET(MPI_BUILTIN ON)
MESSAGE(STATUS "Found MPI: built in")
......
......@@ -437,6 +437,7 @@ Compressible flow is characterised by abrupt changes in density within the flow
\begin{equation}\label{eq:sensor}
S_e=\frac{||\rho^p_e-\rho^{p-1}_e||_{L_2}}{||\rho_e^p||_{L_2}}
\end{equation}
by default the comparison is made with the $p-1$ solution, but this can be changed by setting the parameter \inltt{SensorOffset}.
An artificial diffusion term is introduced locally to the Euler equations to deal with flow discontinuity and the consequential numerical oscillations. Two models are implemented, a non-smooth and a smooth artificial viscosity model.
\subsubsection{Non-smooth artificial viscosity model}
For the non-smooth artificial viscosity model the added artificial viscosity is constant in each element and discontinuous between the elements. The Euler system is augmented by an added laplacian term on right hand side of equation \ref{eq:euler}. The diffusivity of the system is controlled by a variable viscosity coefficient $\epsilon$. The value of $\epsilon$ is dependent on $\epsilon_0$, which is the maximum viscosity that is dependent on the polynomial order ($p$), the mesh size ($h$) and the maximum wave speed and the local sensor value. Based on pre-defined sensor threshold values, the variable viscosity is set accordingly
......@@ -512,4 +513,53 @@ The polynomial order in each element can be adjusted based on the sensor value t
\end{equation}
For now, the threshold values $s_e$, $s_{ds}$, $s_{sm}$ and $s_{fl}$ are determined empirically by looking at the sensor distribution in the domain. Once these values are set, two .txt files are outputted, one that has the composites called VariablePComposites.txt and one with the expansions called VariablePExpansions.txt. These values have to copied into a new .xml file to create the adapted mesh.
\subsection{Quasi-1D nozzle flow}
A quasi-1D inviscid flow (flow with area variation) can be obtained using the
\inltt{Quasi1D} forcing in a 1D solution of the Euler equations:
\begin{lstlisting}[style=XMLStyle]
<FORCING>
<FORCE TYPE="Quasi1D">
<AREAFCN> Area </AREAFCN>
</FORCE>
</FORCING>
\end{lstlisting}
in this case a function named \inltt{Area} must be specified in the \inltt{CONDITIONS} section of the session file.
In this case, it is possible to prescribe the inflow conditions in terms of stagnation properties (density and pressure)
by using the following boundary condition
\begin{lstlisting}[style=XmlStyle]
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="rho" USERDEFINEDTYPE="StagnationInflow" VALUE="rhoStag" />
<D VAR="rhou" USERDEFINEDTYPE="StagnationInflow" VALUE="0" />
<D VAR="E" USERDEFINEDTYPE="StagnationInflow" VALUE="pStag/(Gamma-1)" />
</REGION>
</BOUNDARYCONDITIONS>
\end{lstlisting}
\subsection{Axi-symmetric flow}
An axi-symmetric inviscid flow (with symmetry axis on x=0) can be obtained using
the \inltt{AxiSymmetric} forcing in a 2D solution of the Euler equations:
\begin{lstlisting}[style=XMLStyle]
<FORCING>
<FORCE TYPE="AxiSymmetric">
</FORCE>
</FORCING>
\end{lstlisting}
The \inltt{StagnationInflow} boundary condition can also be used in this case.
Also, by defining the geometry with \inltt{<GEOMETRY DIM="2" SPACE="3">} (i.e. a two-dimensional
mesh in three-dimensional space) and adding the \inltt{rhow} variable, we obtain an axi-symmetric
flow with swirl, in which case the \inltt{StagnationInflow} boundary condition allows prescribing \inltt{rhow}:
\begin{lstlisting}[style=XmlStyle]
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="rho" USERDEFINEDTYPE="StagnationInflow" VALUE="rhoStag" />
<D VAR="rhou" USERDEFINEDTYPE="StagnationInflow" VALUE="0" />
<D VAR="rhov" USERDEFINEDTYPE="StagnationInflow" VALUE="0" />
<D VAR="rhow" USERDEFINEDTYPE="StagnationInflow" VALUE="x" />
<D VAR="E" USERDEFINEDTYPE="StagnationInflow" VALUE="pStag/(Gamma-1)" />
</REGION>
</BOUNDARYCONDITIONS>
\end{lstlisting}
......@@ -81,11 +81,16 @@ CollectionOptimisation::CollectionOptimisation(
{
for (auto &it2 : elTypes)
{
defaultsPhysDeriv [ElmtOrder(it2.second, -1)] = eNoCollection;
// For 1<=N<=5 use StdMat otherwise IterPerExp or given default type
for (int i = 1; i < 5; ++i)
{
defaults[ElmtOrder(it2.second, i)] = eStdMat;
}
// For 1<=N<=3 use SumFac otherwise NoCollection. Note that
// default is not currently overwritten by given default
// type
defaultsPhysDeriv [ElmtOrder(it2->second, -1)] = eNoCollection;
for (int i = 1; i < 3; ++i)
{
defaultsPhysDeriv[ElmtOrder(it2.second, i)] = eSumFac;
......@@ -154,6 +159,7 @@ CollectionOptimisation::CollectionOptimisation(
ASSERTL0(i != Collections::SIZE_ImplementationType,
"Unknown default collection scheme: "+collinfo);
defaults.clear();
// Override default types
for (auto &it2 : elTypes)
{
......
......@@ -147,7 +147,7 @@ class IProductWRTDerivBase_StdMat : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_dim = PtsKey.size();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
int nqtot = m_stdExp->GetTotPoints();
int nmodes = m_stdExp->GetNcoeffs();
......
......@@ -164,7 +164,8 @@ struct Field
Exp2DH1 =
MemoryManager<MultiRegions::ExpList2DHomogeneous1D>::
AllocateSharedPtr(m_session, Bkey, ly, m_useFFT,
dealiasing, m_graph);
dealiasing, m_graph,
Collections::eNoCollection);
exp = Exp2DH1;
}
else if (NumHomogeneousDir == 2)
......@@ -210,7 +211,8 @@ struct Field
MultiRegions::ContField3DHomogeneous2D>::
AllocateSharedPtr(m_session, BkeyY, BkeyZ, ly, lz,
m_useFFT, dealiasing, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
Collections::eNoCollection);
}
else if (m_declareExpansionAsDisContField)
{
......@@ -218,14 +220,16 @@ struct Field
MultiRegions::DisContField3DHomogeneous2D>::
AllocateSharedPtr(m_session, BkeyY, BkeyZ, ly, lz,
m_useFFT, dealiasing, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
Collections::eNoCollection);
}
else
{
Exp3DH2 = MemoryManager<
MultiRegions::ExpList3DHomogeneous2D>::
AllocateSharedPtr(m_session, BkeyY, BkeyZ, ly, lz,
m_useFFT, dealiasing, m_graph);
m_useFFT, dealiasing, m_graph,
Collections::eNoCollection);
}
exp = Exp3DH2;
......@@ -238,18 +242,23 @@ struct Field
{
Exp1D = MemoryManager<MultiRegions::ContField1D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
Collections::eNoCollection);
}
else if (m_declareExpansionAsDisContField)
{
Exp1D = MemoryManager<MultiRegions::DisContField1D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
true,
Collections::eNoCollection);
}
else
{
Exp1D = MemoryManager<MultiRegions::ExpList1D>::
AllocateSharedPtr(m_session, m_graph);
AllocateSharedPtr(m_session, m_graph,
true,
Collections::eNoCollection);
}
exp = Exp1D;
......@@ -314,7 +323,8 @@ struct Field
MultiRegions::ContField3DHomogeneous1D>::
AllocateSharedPtr(m_session, Bkey, lz, m_useFFT,
dealiasing, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
Collections::eNoCollection);
}
else if (m_declareExpansionAsDisContField)
{
......@@ -322,14 +332,17 @@ struct Field
MultiRegions::DisContField3DHomogeneous1D>::
AllocateSharedPtr(m_session, Bkey, lz, m_useFFT,
dealiasing, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
Collections::eNoCollection);
}
else
{
Exp3DH1 = MemoryManager<
MultiRegions::ExpList3DHomogeneous1D>::
AllocateSharedPtr(m_session, Bkey, lz, m_useFFT,
dealiasing, m_graph);
dealiasing, m_graph,
"DefaultVar",
Collections::eNoCollection);
}
exp = Exp3DH1;
}
......@@ -341,18 +354,25 @@ struct Field
{
Exp2D = MemoryManager<MultiRegions::ContField2D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
true,false,
Collections::eNoCollection);
}
else if (m_declareExpansionAsDisContField)
{
Exp2D = MemoryManager<MultiRegions::DisContField2D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
true,true,
Collections::eNoCollection);
}
else
{
Exp2D = MemoryManager<MultiRegions::ExpList2D>::
AllocateSharedPtr(m_session, m_graph);
AllocateSharedPtr(m_session, m_graph,
true,
"DefaultVar",
Collections::eNoCollection);
}
exp = Exp2D;
......@@ -367,19 +387,26 @@ struct Field
{
Exp3D = MemoryManager<MultiRegions::ContField3D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
false,
Collections::eNoCollection);
}
else if (m_declareExpansionAsDisContField)
{
Exp3D = MemoryManager<MultiRegions::DisContField3D>::
AllocateSharedPtr(m_session, m_graph,
m_session->GetVariable(0));
m_session->GetVariable(0),
true,
Collections::eNoCollection);
}
else
{
Exp3D = MemoryManager<
MultiRegions::ExpList3D>::AllocateSharedPtr(m_session,
m_graph);
MultiRegions::ExpList3D>::AllocateSharedPtr(
m_session,
m_graph,
"DefaultVar",
Collections::eNoCollection);
}
exp = Exp3D;
......
......@@ -66,7 +66,7 @@
BOOST_PP_COMMA_IF(BOOST_PP_LESS(n, BOOST_PP_SUB(BOOST_PP_ARRAY_SIZE(data), 1)))
#define NEKTAR_CREATE_EXPLICIT_INTSTANTIATION(z, n, data) \
template LIB_UTILITIES_EXPORT \
template LIB_UTILITIES_EXPORT COCKCOCK \
BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_ELEM(2, data)) BOOST_PP_ARRAY_ELEM(0, data) BOOST_PP_LPAREN() \
BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(3, data)), NEKTAR_PRINT_ARRAY, BOOST_PP_ARRAY_ELEM(3, data)) \
BOOST_PP_COMMA_IF(BOOST_PP_GREATER(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(3, data)), 0)) \
......
......@@ -1111,6 +1111,12 @@ namespace Nektar
TimeIntegrationSolutionSharedPtr y_out =
MemoryManager<TimeIntegrationSolution>::AllocateSharedPtr(m_schemeKey,y_0,time,timestep);
if( GetIntegrationSchemeType() == eExplicit)
{
// ensure initial solution is in correct space
op.DoProjection(y_0,y_out->UpdateSolution(),time);
}
// calculate the initial derivative, if is part of the
// solution vector of the current scheme
if(m_numMultiStepDerivs)
......@@ -1573,8 +1579,12 @@ namespace Nektar
}
else if( type == eExplicit)
{
// ensure solution is in correct space
op.DoProjection(m_Y,m_Y,m_T);
// Avoid projecting the same solution twice
if( ! ((i==0) && m_firstStageEqualsOldSolution) )
{
// ensure solution is in correct space
op.DoProjection(m_Y,m_Y,m_T);
}
op.DoOdeRhs(m_Y, m_F[i], m_T);
}
}
......
......@@ -41,7 +41,21 @@ namespace Nektar
{
namespace LocalRegions
{
void Expansion1D::v_NegateVertexNormal(const int vertex)
{
m_negatedNormals[vertex] = true;
for (int i = 0; i < GetCoordim(); ++i)
{
Vmath::Neg(m_vertexNormals[vertex][i].num_elements(),
m_vertexNormals[vertex][i], 1);
}
}
bool Expansion1D::v_VertexNormalNegated(const int vertex)
{
return m_negatedNormals[vertex];
}
DNekMatSharedPtr Expansion1D::v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
{
DNekMatSharedPtr returnval;
......
......@@ -94,6 +94,8 @@ namespace Nektar
inline SpatialDomains::Geometry1DSharedPtr GetGeom1D() const;
protected:
std::map<int, bool> m_negatedNormals;
virtual DNekMatSharedPtr v_GenMatrix(
const StdRegions::StdMatrixKey &mkey);
......@@ -106,6 +108,10 @@ namespace Nektar
const int vert,
const Array<OneD, const NekDouble > &primCoeffs,
Array<OneD, NekDouble> &coeffs);
virtual void v_NegateVertexNormal (const int vertex);
virtual bool v_VertexNormalNegated(const int vertex);
private:
Expansion2DWeakPtr m_elementLeft;
......
......@@ -114,10 +114,12 @@ namespace Nektar
* @param variable An optional parameter to indicate for which
* variable the field should be constructed.
*/
ContField1D::ContField1D(const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph1D,
const std::string &variable):
DisContField1D(pSession,graph1D,variable,false),
ContField1D::ContField1D(
const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph1D,
const std::string &variable,
const Collections::ImplementationType ImpType):
DisContField1D(pSession,graph1D,variable,false,ImpType),
m_locToGloMap(),
m_globalLinSysManager(
std::bind(&ContField1D::GenGlobalLinSys, this, std::placeholders::_1),
......
......@@ -64,7 +64,9 @@ namespace Nektar
MULTI_REGIONS_EXPORT ContField1D(
const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph1D,
const std::string &variable = "DefaultVar");
const std::string &variable = "DefaultVar",
const Collections::ImplementationType ImpType
= Collections::eNoImpType);
/// Copy constructor.
MULTI_REGIONS_EXPORT ContField1D(const ContField1D &In);
......
......@@ -117,12 +117,14 @@ namespace Nektar
* @param variable An optional parameter to indicate for which
* variable the field should be constructed.
*/
ContField2D::ContField2D(const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph2D,
const std::string &variable,
const bool DeclareCoeffPhysArrays,
const bool CheckIfSingularSystem):
DisContField2D(pSession,graph2D,variable,false,DeclareCoeffPhysArrays),
ContField2D::ContField2D(
const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph2D,
const std::string &variable,
const bool DeclareCoeffPhysArrays,
const bool CheckIfSingularSystem,
const Collections::ImplementationType ImpType):
DisContField2D(pSession,graph2D,variable,false,DeclareCoeffPhysArrays,ImpType),
m_globalMat(MemoryManager<GlobalMatrixMap>::AllocateSharedPtr()),
m_globalLinSysManager(
std::bind(&ContField2D::GenGlobalLinSys, this, std::placeholders::_1),
......
......@@ -66,7 +66,9 @@ namespace Nektar
const SpatialDomains::MeshGraphSharedPtr &graph2D,
const std::string &variable = "DefaultVar",
const bool DeclareCoeffPhysArrays = true,
const bool CheckIfSingularSystem = false);
const bool CheckIfSingularSystem = false,
const Collections::ImplementationType ImpType
= Collections::eNoImpType);
/// Construct a global continuous field with solution type based on
/// another field but using a separate input mesh and boundary
......
......@@ -80,8 +80,9 @@ namespace Nektar
ContField3D::ContField3D(const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph3D,
const std::string &variable,
const bool CheckIfSingularSystem):
DisContField3D(pSession,graph3D,variable,false),
const bool CheckIfSingularSystem,
const Collections::ImplementationType ImpType):
DisContField3D(pSession,graph3D,variable,false,ImpType),
m_globalMat(MemoryManager<GlobalMatrixMap>::AllocateSharedPtr()),
m_globalLinSysManager(
std::bind(&ContField3D::GenGlobalLinSys, this, std::placeholders::_1),
......
......@@ -58,7 +58,9 @@ namespace Nektar
const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph3D,
const std::string &variable = "DefaultVar",
const bool CheckIfSingularSystem = false);
const bool CheckIfSingularSystem = false,
const Collections::ImplementationType ImpType
= Collections::eNoImpType);
/// Construct a global continuous field with solution type based on
/// another field but using a separate input mesh and boundary
......
......@@ -66,10 +66,10 @@ namespace Nektar
}
ContField3DHomogeneous1D::ContField3DHomogeneous1D(
const ContField3DHomogeneous1D &In,
const SpatialDomains::MeshGraphSharedPtr &graph2D,
const std::string &variable):
DisContField3DHomogeneous1D (In, false)
const ContField3DHomogeneous1D &In,
const SpatialDomains::MeshGraphSharedPtr &graph2D,
const std::string &variable):
DisContField3DHomogeneous1D (In, false)
{
ContField2DSharedPtr zero_plane_old =
std::dynamic_pointer_cast<ContField2D> (In.m_planes[0]);
......@@ -101,15 +101,17 @@ namespace Nektar
}
ContField3DHomogeneous1D::ContField3DHomogeneous1D(