Commit 05d159d4 authored by Dave Moxey's avatar Dave Moxey

Merge branch 'master' into feature/write-surface-stl

parents a3a6737a 04f55151
......@@ -14,13 +14,23 @@ v4.4.0
- Increased required boost version to 1.56.0 (!584)
- New FieldUtils library allows support for most `FieldConvert` post-processing
operations during simulation using a new filter (!589)
- Adjust CMake dependencies to reduce compile time (!671)
- Homogeneous1D dealiasing improvements (!622)
**APESolver:**
- Use a continuous basefield projection and revert to constant c formulation (!664)
- Added ability to compute CFL number (!664)
- Output Sourceterm (!664)
**IncNavierStokesSolver:**
- Add ability to simulate additional scalar fields (!624)
- Improve performance when using homogeneous dealiasing (!622)
**NekMesh:**
- Modify curve module to allow for spline input (!628)
- Add STL surface writer module (!668)
- New module for inserting an alternate high-order surface into the working
mesh (!669)
**FieldConvert:**
- Move all modules to a new library, FieldUtils, to support post-processing
......
......@@ -7,11 +7,14 @@
########################################################################
IF (NOT WIN32)
CMAKE_DEPENDENT_OPTION(NEKTAR_USE_ANN
"Use ANN routines for performing Approximate Nearest Neighbour searches." ON
"NEKTAR_USE_MESHGEN" OFF)
OPTION(NEKTAR_USE_ANN
"Use ANN routines for performing Approximate Nearest Neighbour searches." OFF)
ENDIF(NOT WIN32)
IF( NEKTAR_USE_MESHGEN )
SET(NEKTAR_USE_ANN ON CACHE BOOL "" FORCE)
ENDIF()
IF (NEKTAR_USE_ANN)
# First search for system ANN installs. Hint /opt/local for MacPorts and
# /usr/local/opt/ann for Homebrew.
......
......@@ -2,22 +2,30 @@
#
# ThirdParty configuration for Nektar++
#
# Star CCM i/o
# Star CCM i/o
#
########################################################################
OPTION(NEKTAR_USE_CCM
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})
set(CCMIO_LIBRARIES
ccmio
adf
)
FIND_LIBRARY(CCMIO_LIBRARY NAMES "ccmio" PATHS /usr/local/lib ${Nektar++_TP_LIBRARY_DIRS})
IF( CCMIO_LIBRARY )
MESSAGE(STATUS "Found Ccmio: ${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_PATH ${CCMIO_LIBRARY} PATH)
LINK_DIRECTORIES(${CCMIO_LIBRARY_PATH})
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()
......
......@@ -14,16 +14,16 @@ irrotational acoustic perturbations, in this case perturbations are assumed to
be exclusively of acoustic nature.
\begin{subequations}
\begin{align*}
\frac{\partial p'}{\partial t}
+ \overline{c}^2 \frac{\partial \overline{\rho} u'_i}{\partial x_i}
+ \overline{c}^2 \frac{\partial \overline{u}_i p' / \overline{c}^2}{\partial x_i}
&= \overline{c}^2 q_c
\\
\frac{\partial u'_i}{\partial t}
+ \frac{\partial \overline{u}_j u'_j}{\partial x_i}
+ \frac{\partial p' / \overline{\rho}}{\partial x_i}
&= 0
\end{align*}
\frac{\partial p'}{\partial t}
+ \frac{\partial \gamma \overline{p} u'_i}{\partial x_i}
+ \frac{\partial \overline{u}_i p'}{\partial x_i}
&= \overline{c}^2 q_c
\\
\frac{\partial u'_i}{\partial t}
+ \frac{\partial \overline{u}_j u'_j}{\partial x_i}
+ \frac{\partial p' / \overline{\rho}}{\partial x_i}
&= U_i
\end{align*}
\end{subequations}
where $(\overline{u}_i,\overline{p}, \overline{\rho}, \overline{c}^2 = \gamma \overline{p} / \overline{\rho} )$ represents the base flow and $(u'_i,p')$ the perturbations.
$\overline{c}^2 q_c$ is the acoustic source term.
......
SET(LibrarySubDirs FieldUtils GlobalMapping LibUtilities LocalRegions
Collections MultiRegions SpatialDomains StdRegions SolverUtils NekMeshUtils)
SET(LibrarySubDirs FieldUtils GlobalMapping LibUtilities LocalRegions
Collections MultiRegions SpatialDomains StdRegions)
SET(UnitTestSubDirs UnitTests)
SET(DemoSubDirs Demos)
SET(TimingsSubDirs Timings)
SET(SolverUtilsSubDirs SolverUtils)
SET(NekMeshUtilsSubDirs NekMeshUtils)
SUBDIRS(${LibrarySubDirs} )
SUBDIRS(${LibrarySubDirs})
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/library)
......@@ -19,3 +21,11 @@ ENDIF( NEKTAR_BUILD_DEMOS )
IF( NEKTAR_BUILD_TIMINGS )
SUBDIRS(${TimingsSubDirs})
ENDIF( NEKTAR_BUILD_TIMINGS )
IF( NEKTAR_BUILD_SOLVERS )
SUBDIRS(${SolverUtilsSubDirs})
ENDIF( NEKTAR_BUILD_SOLVERS )
IF( NEKTAR_BUILD_UTILITIES )
SUBDIRS(${NekMeshUtilsSubDirs})
ENDIF( NEKTAR_BUILD_UTILITIES )
......@@ -459,6 +459,14 @@ namespace Nektar
* \f$N_{\mathrm{eof}}\times N_{\mathrm{dof}}\f$ permutation matrix.
*
*/
void ContField1D::v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->LocalToGlobal(inarray, outarray);
}
void ContField1D::v_LocalToGlobal(void)
{
m_locToGloMap->LocalToGlobal(m_coeffs,m_coeffs);
......@@ -484,6 +492,13 @@ namespace Nektar
* \f$N_{\mathrm{eof}}\times N_{\mathrm{dof}}\f$ permutation matrix.
*
*/
void ContField1D::v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->GlobalToLocal(inarray, outarray);
}
void ContField1D::v_GlobalToLocal(void)
{
m_locToGloMap->GlobalToLocal(m_coeffs,m_coeffs);
......
......@@ -64,7 +64,7 @@ namespace Nektar
MULTI_REGIONS_EXPORT ContField1D(
const LibUtilities::SessionReaderSharedPtr &pSession,
const SpatialDomains::MeshGraphSharedPtr &graph1D,
const std::string &variable);
const std::string &variable = "DefaultVar");
/// Copy constructor.
MULTI_REGIONS_EXPORT ContField1D(const ContField1D &In);
......@@ -101,17 +101,6 @@ namespace Nektar
// inline
MULTI_REGIONS_EXPORT const Array<OneD,const SpatialDomains
::BoundaryConditionShPtr>& GetBndConditions();
/// Scatters from the global coefficients
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT void GlobalToLocal( const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
/// Gathers the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT void LocalToGlobal();
/// Assembles the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
......@@ -194,12 +183,19 @@ namespace Nektar
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT virtual void v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
MULTI_REGIONS_EXPORT virtual void v_GlobalToLocal(void);
/// Gathers the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT virtual void v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
MULTI_REGIONS_EXPORT virtual void v_LocalToGlobal(void);
virtual void v_HelmSolve(
......@@ -251,40 +247,6 @@ namespace Nektar
}
/**
* This operation is evaluated as:
* \f{tabbing}
* \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\
* \> \> Do \= $i=$ $0,N_m^e-1$ \\
* \> \> \> $\boldsymbol{\hat{u}}^{e}[i] = \mbox{sign}[e][i] \cdot
* \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]$ \\
* \> \> continue \\
* \> continue
* \f}
* where \a map\f$[e][i]\f$ is the mapping array and \a
* sign\f$[e][i]\f$ is an array of similar dimensions ensuring the
* correct modal connectivity between the different elements (both
* these arrays are contained in the data member #m_locToGloMap). This
* operation is equivalent to the scatter operation
* \f$\boldsymbol{\hat{u}}_l=\mathcal{A}\boldsymbol{\hat{u}}_g\f$, where
* \f$\mathcal{A}\f$ is the
* \f$N_{\mathrm{eof}}\times N_{\mathrm{dof}}\f$ permutation matrix.
*
* @param inarray An array of size \f$N_\mathrm{dof}\f$
* containing the global degrees of freedom
* \f$\boldsymbol{x}_g\f$.
* @param outarray The resulting local degrees of freedom
* \f$\boldsymbol{x}_l\f$ will be stored in this
* array of size \f$N_\mathrm{eof}\f$.
*/
inline void ContField1D::GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->GlobalToLocal(inarray,outarray);
}
/**
* This operation is evaluated as:
* \f{tabbing}
......
......@@ -737,13 +737,20 @@ namespace Nektar
* local coefficients \f$\boldsymbol{\hat{u}}_l\f$ will be stored in
* #m_coeffs.
*/
void ContField2D::v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->GlobalToLocal(inarray, outarray);
}
void ContField2D::v_GlobalToLocal(void)
{
m_locToGloMap->GlobalToLocal(m_coeffs,m_coeffs);
}
/**
* This operation is evaluated as:
* \f{tabbing}
......@@ -768,6 +775,14 @@ namespace Nektar
* resulting global coefficients \f$\boldsymbol{\hat{u}}_g\f$
* will be stored in #m_coeffs.
*/
void ContField2D::v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->LocalToGlobal(inarray, outarray);
}
void ContField2D::v_LocalToGlobal(void)
{
m_locToGloMap->LocalToGlobal(m_coeffs,m_coeffs);
......
......@@ -83,23 +83,6 @@ namespace Nektar
/// The default destructor.
MULTI_REGIONS_EXPORT virtual ~ContField2D();
/// Scatters from the global coefficients
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
inline void GlobalToLocal(
Array<OneD,NekDouble> &outarray) const;
/// Scatters from the global coefficients
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
inline void GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray) const;
inline void LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray) const;
/// Assembles the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
inline void Assemble();
......@@ -213,12 +196,19 @@ namespace Nektar
/// Gathers the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
MULTI_REGIONS_EXPORT virtual void v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
MULTI_REGIONS_EXPORT virtual void v_LocalToGlobal(void);
/// Scatters from the global coefficients
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
MULTI_REGIONS_EXPORT virtual void v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
MULTI_REGIONS_EXPORT virtual void v_GlobalToLocal(void);
/// Template method virtual forwarder for FwdTrans().
......@@ -293,77 +283,6 @@ namespace Nektar
typedef boost::shared_ptr<ContField2D> ContField2DSharedPtr;
/**
* This operation is evaluated as:
* \f{tabbing}
* \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\
* \> \> Do \= $i=$ $0,N_m^e-1$ \\
* \> \> \> $\boldsymbol{\hat{u}}^{e}[i] = \mbox{sign}[e][i] \cdot
* \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]$ \\
* \> \> continue \\
* \> continue
* \f}
* where \a map\f$[e][i]\f$ is the mapping array and \a
* sign\f$[e][i]\f$ is an array of similar dimensions ensuring the
* correct modal connectivity between the different elements (both
* these arrays are contained in the data member #m_locToGloMap). This
* operation is equivalent to the scatter operation
* \f$\boldsymbol{\hat{u}}_l=\mathcal{A}\boldsymbol{\hat{u}}_g\f$,
* where \f$\mathcal{A}\f$ is the
* \f$N_{\mathrm{eof}}\times N_{\mathrm{dof}}\f$ permutation matrix.
*
* @param outarray The resulting local degrees of freedom
* \f$\boldsymbol{x}_l\f$ will be stored in this
* array of size \f$N_\mathrm{eof}\f$.
*/
inline void ContField2D::GlobalToLocal(
Array<OneD,NekDouble> &outarray) const
{
m_locToGloMap->GlobalToLocal(m_coeffs,outarray);
}
/**
* This operation is evaluated as:
* \f{tabbing}
* \hspace{1cm} \= Do \= $e=$ $1, N_{\mathrm{el}}$ \\
* \> \> Do \= $i=$ $0,N_m^e-1$ \\
* \> \> \> $\boldsymbol{\hat{u}}^{e}[i] = \mbox{sign}[e][i] \cdot
* \boldsymbol{\hat{u}}_g[\mbox{map}[e][i]]$ \\
* \> \> continue \\
* \> continue
* \f}
* where \a map\f$[e][i]\f$ is the mapping array and \a
* sign\f$[e][i]\f$ is an array of similar dimensions ensuring the
* correct modal connectivity between the different elements (both
* these arrays are contained in the data member #m_locToGloMap). This
* operation is equivalent to the scatter operation
* \f$\boldsymbol{\hat{u}}_l=\mathcal{A}\boldsymbol{\hat{u}}_g\f$,
* where \f$\mathcal{A}\f$ is the
* \f$N_{\mathrm{eof}}\times N_{\mathrm{dof}}\f$ permutation matrix.
*
* @param inarray An array of size \f$N_\mathrm{dof}\f$
* containing the global degrees of freedom
* \f$\boldsymbol{x}_g\f$.
* @param outarray The resulting local degrees of freedom
* \f$\boldsymbol{x}_l\f$ will be stored in this
* array of size \f$N_\mathrm{eof}\f$.
*/
inline void ContField2D::GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray) const
{
m_locToGloMap->GlobalToLocal(inarray,outarray);
}
inline void ContField2D::LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray) const
{
m_locToGloMap->LocalToGlobal(inarray, outarray);
}
/**
* This operation is evaluated as:
* \f{tabbing}
......
......@@ -519,11 +519,27 @@ namespace Nektar
m_locToGloMap->LocalToGlobal(m_coeffs, m_coeffs);
}
void ContField3D::v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->LocalToGlobal(inarray, outarray);
}
void ContField3D::v_GlobalToLocal(void)
{
m_locToGloMap->GlobalToLocal(m_coeffs, m_coeffs);
}
void ContField3D::v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->GlobalToLocal(inarray, outarray);
}
void ContField3D::v_HelmSolve(
......
......@@ -86,14 +86,6 @@ namespace Nektar
Array<OneD, NekDouble> &inout,
Array<OneD, NekDouble> &outarray);
inline void GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
inline void LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
inline void Assemble();
inline void Assemble(
......@@ -163,9 +155,19 @@ namespace Nektar
virtual void v_LocalToGlobal(void);
virtual void v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
virtual void v_GlobalToLocal(void);
virtual void v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
virtual void v_MultiplyByInvMassMatrix(
const Array<OneD, const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray,
......@@ -196,23 +198,6 @@ namespace Nektar
return m_bndCondExpansions;
}
inline void ContField3D::GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->GlobalToLocal(inarray, outarray);
}
inline void ContField3D::LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
m_locToGloMap->LocalToGlobal(inarray, outarray);
}
inline void ContField3D::Assemble()
{
m_locToGloMap->Assemble(m_coeffs, m_coeffs);
......
......@@ -84,12 +84,15 @@ namespace Nektar
m_bndCondExpansions(),
m_bndConditions()
{
SpatialDomains::BoundaryConditions bcs(m_session, graph1D);
if (variable.compare("DefaultVar") != 0)
{
SpatialDomains::BoundaryConditions bcs(m_session, graph1D);
GenerateBoundaryConditionExpansion(graph1D,bcs,variable);
EvaluateBoundaryConditions(0.0, variable);
ApplyGeomInfo();
FindPeriodicVertices(bcs,variable);
GenerateBoundaryConditionExpansion(graph1D,bcs,variable);
EvaluateBoundaryConditions(0.0, variable);
ApplyGeomInfo();
FindPeriodicVertices(bcs,variable);
}
if(SetUpJustDG)
{
......@@ -455,13 +458,16 @@ namespace Nektar
ExpList1D(pSession,graph1D,domain, true,variable,SetToOneSpaceDimension),
m_bndCondExpansions(),
m_bndConditions()
{
SpatialDomains::BoundaryConditionsSharedPtr DomBCs = GetDomainBCs(domain,Allbcs,variable);
GenerateBoundaryConditionExpansion(graph1D,*DomBCs,variable);
EvaluateBoundaryConditions(0.0, variable);
ApplyGeomInfo();
FindPeriodicVertices(*DomBCs,variable);
{
if (variable.compare("DefaultVar") != 0)
{
SpatialDomains::BoundaryConditionsSharedPtr DomBCs = GetDomainBCs(domain,Allbcs,variable);
GenerateBoundaryConditionExpansion(graph1D,*DomBCs,variable);
EvaluateBoundaryConditions(0.0, variable);
ApplyGeomInfo();
FindPeriodicVertices(*DomBCs,variable);
}
SetUpDG(variable);
}
......
......@@ -2447,7 +2447,20 @@ namespace Nektar
"This method is not defined or valid for this class type");
}
void ExpList::v_DealiasedProd(const Array<OneD, NekDouble> &inarray1,const Array<OneD, NekDouble> &inarray2,Array<OneD, NekDouble> &outarray,CoeffState coeffstate)
void ExpList::v_DealiasedProd(const Array<OneD, NekDouble> &inarray1,
const Array<OneD, NekDouble> &inarray2,
Array<OneD, NekDouble> &outarray,
CoeffState coeffstate)
{
ASSERTL0(false,
"This method is not defined or valid for this class type");
}
void ExpList::v_DealiasedDotProd(
const Array<OneD, Array<OneD, NekDouble> > &inarray1,
const Array<OneD, Array<OneD, NekDouble> > &inarray2,
Array<OneD, Array<OneD, NekDouble> > &outarray,
CoeffState coeffstate)
{
ASSERTL0(false,
"This method is not defined or valid for this class type");
......@@ -2536,6 +2549,15 @@ namespace Nektar
"This method is not defined or valid for this class type");
}
void ExpList::v_LocalToGlobal(const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
ASSERTL0(false,
"This method is not defined or valid for this class type");
}
void ExpList::v_GlobalToLocal(void)
{
ASSERTL0(false,
......@@ -2543,6 +2565,14 @@ namespace Nektar
}
void ExpList::v_GlobalToLocal(const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray)
{
ASSERTL0(false,
"This method is not defined or valid for this class type");
}
void ExpList::v_BwdTrans(const Array<OneD, const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray,
CoeffState coeffstate)
......
......@@ -348,7 +348,13 @@ namespace Nektar
const Array<OneD, NekDouble> &inarray2,
Array<OneD, NekDouble> &outarray,
CoeffState coeffstate = eLocal);
inline void DealiasedDotProd(
const Array<OneD, Array<OneD, NekDouble> > &inarray1,
const Array<OneD, Array<OneD, NekDouble> > &inarray2,
Array<OneD, Array<OneD, NekDouble> > &outarray,
CoeffState coeffstate = eLocal);
inline void GetBCValues(
Array<OneD, NekDouble> &BndVals,
const Array<OneD, NekDouble> &TotField,
......@@ -445,11 +451,24 @@ namespace Nektar
/// Fill Bnd Condition expansion from the values stored in expansion
inline void FillBndCondFromField(void);
/// Put the coefficients into global ordering using m_coeffs
inline void LocalToGlobal(void);
/// Gathers the global coefficients \f$\boldsymbol{\hat{u}}_g\f$
/// from the local coefficients \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT inline void LocalToGlobal(void);
/// Put the coefficients into local ordering and place in m_coeffs
inline void GlobalToLocal(void);
MULTI_REGIONS_EXPORT inline void LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
/// Scatters from the global coefficients
/// \f$\boldsymbol{\hat{u}}_g\f$ to the local coefficients
/// \f$\boldsymbol{\hat{u}}_l\f$.
// inline
MULTI_REGIONS_EXPORT inline void GlobalToLocal(void);
MULTI_REGIONS_EXPORT inline void GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
/// Get the \a i th value (coefficient) of #m_coeffs
inline NekDouble GetCoeff(int i);
......@@ -1156,8 +1175,16 @@ namespace Nektar
virtual void v_LocalToGlobal(void);
virtual void v_LocalToGlobal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
virtual void v_GlobalToLocal(void);
virtual void v_GlobalToLocal(
const Array<OneD, const NekDouble> &inarray,
Array<OneD,NekDouble> &outarray);
virtual void v_BwdTrans(
const Array<OneD,const NekDouble> &inarray,
Array<OneD, NekDouble> &outarray,
......@@ -1233,7 +1260,13 @@ namespace Nektar
const Array<OneD, NekDouble> &inarray2,
Array<OneD, NekDouble> &outarray,
CoeffState coeffstate = eLocal);
virtual void v_DealiasedDotProd