diff --git a/.gitignore b/.gitignore
index 9f608ea048ac93738e263dd975216e5c9de79998..54b93cb4250605efc11db4977bec6aa791a6db8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,5 @@ ThirdParty
# Sublime project files
*.sublime-project
*.sublime-workspace
+# CLion build directories
+cmake-build-*
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a821f4b9cff6f07ba95aa26c0617856264071f4..5096bef3149769f386eb30621ee1d7f8487eca06 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,19 @@ v5.3.0
- Added float and restore avx512 back-end for SimdLib (!1387)
- Fix namespace pollution which causes boost 1.74+ errors (!1389)
- Fix missing copy assignment operator warnings in clang 13+ (!1391)
+- Add an integral filter for the time-evolution of integrals on composites,
+ supports dimension equal to or one lower than the mesh dimension (!1323)
+- Overload PhysEvaluate to give first derivatives using barycentric
+ interpolation (!1323)
+- Non-conformal interface support (!1323)
+
+**FieldConvert**
+- Added conditional to select the eNearestNeighbour method for 3D interpolation (!1335)
+- Fixed the output field names of WSS module of FieldConvert
+- Added float to scalar and avx2 back-end, disable avx512, sse2, sve (!1255)
+- Change MPI initialisation to allow MPI_Init call outside Nektar++ (!1376)
+- Added float and restore avx512 back-end for SimdLib (!1387)
+- Fix namespace pollution which causes boost 1.74+ errors (!1389)
**Python**
- Add wrappers for Interpreter and Equation classes (!1329)
@@ -16,12 +29,12 @@ v5.3.0
- Added Laplacian (NonSmooth) AV to the explicit Navier Stokes solver (!1372)
- Added Physical AV to the implicit Navier Stokes solver (!1372)
- Fixed Segmentation Fault when using C0 Smoother with Shock Capturing (!1394)
-
-**CompressibleFlowSolver**
- The Incomplete IP method was made the default method for the IP method (!1377).
+- Add additional parameters for the Isentropic Vortex equation system (!1323)
- Improve performance of the perconditioner and diffusion operator (!1393)
**NekMesh**
+- Multi domain input/output for Nekpp and HDF5 file formats (!1323)
- Replace VTK pointers with VTK smart-pointers to avoid memory leaking, when
exporting in .vtu format (!1386)
- Preserve CAD face labels and save in to session file as a "NAME=" tag on the composites (!1396)
diff --git a/cmake/ThirdPartyHDF5.cmake b/cmake/ThirdPartyHDF5.cmake
index c062dd833495fc843370aaccf348aa3a4a7b4d05..6d53afadbd9d244d09d69426fd569001cf7b2d01 100644
--- a/cmake/ThirdPartyHDF5.cmake
+++ b/cmake/ThirdPartyHDF5.cmake
@@ -69,6 +69,12 @@ IF (NEKTAR_USE_HDF5)
MESSAGE(STATUS "Found HDF5: ${HDF5_LIBRARIES}")
SET(HDF5_CONFIG_INCLUDE_DIR ${HDF5_INCLUDE_DIRS})
ADD_CUSTOM_TARGET(hdf5-1.8.16 ALL)
+
+ # Newer HDF5 versions have changed the API
+ # We compile deprecated symbols using the old API if newer than 1.10.0
+ IF(HDF5_VERSION VERSION_GREATER_EQUAL 1.10.0)
+ ADD_DEFINITIONS(-DH5_USE_110_API)
+ ENDIF()
ENDIF()
MARK_AS_ADVANCED(HDF5_LIBRARIES)
diff --git a/docs/user-guide/xml/xml-filters.tex b/docs/user-guide/xml/xml-filters.tex
index 4faa16c0cc86d6caf2e688c1133961907d51b213..c93c3845842db46f41df567fee9028c7f4b05228 100644
--- a/docs/user-guide/xml/xml-filters.tex
+++ b/docs/user-guide/xml/xml-filters.tex
@@ -353,6 +353,8 @@ The following parameters are supported:
Prefix of the output filename to which the errors are written.\\
\inltt{OutputFrequency} & \xmark & 1 &
Number of timesteps after which output is written.\\
+ \inltt{ConsoleOutput} & \xmark & 0 &
+ Also output error in the console when writing to file.\\
\bottomrule
\end{tabularx}
\end{center}
@@ -363,6 +365,49 @@ An example syntax is given below:
ErrorFile
10
+ 1
+
+\end{lstlisting}
+
+\subsection{Integral}\label{filters:Integral}
+
+This filter produces a file containing the time-evolution of the integral of
+the solver variables on user defined composites. By default this file is called
+\inltt{session.int} where \inltt{session} is the session name.
+
+The following parameters are supported:
+
+\begin{center}
+ \begin{tabularx}{0.99\textwidth}{lllX}
+ \toprule
+ \textbf{Option name} & \textbf{Required} & \textbf{Default} &
+ \textbf{Description} \\
+ \midrule
+ \inltt{OutputFile} & \xmark & \inltt{session} &
+ Prefix of the output filename to which the integrals are written.\\
+ \inltt{OutputFrequency} & \xmark & 1 &
+ Number of timesteps after which output is written.\\
+ \inltt{OutputPrecision} & \xmark & 7 &
+ Decimal precision with which the output is written.\\
+ \inltt{Composites} & \cmark & - &
+ Composites on which to calculate the integral.\\
+ \bottomrule
+ \end{tabularx}
+\end{center}
+
+Multiple composites can be defined together by using ranges with each composite
+grouping producing a summed output for each variable in the \inltt{OutputFile}.
+For example \inltt{C[1,3,5-7]} would produce a single integral output for each
+variable whilst \inltt{C[1-3], C[4]} would produce two.
+
+An example syntax is given below:
+
+\begin{lstlisting}[style=XMLStyle,gobble=2]
+
+ IntegralFile
+ 10
+ 12
+ C[1], C[2-4,6]
\end{lstlisting}
diff --git a/docs/user-guide/xml/xml-movement.tex b/docs/user-guide/xml/xml-movement.tex
new file mode 100644
index 0000000000000000000000000000000000000000..6b11bb33fa28b3577ef76d460816395c41dd763e
--- /dev/null
+++ b/docs/user-guide/xml/xml-movement.tex
@@ -0,0 +1,64 @@
+\section{Movement}
+This section defines the movement of the mesh. Currently only static
+non-conformal interfaces are supported.
+
+\subsection{Non-conformal meshes}\label{subsec:non-conformal-meshes}
+Non-conformal meshes are defined using \inltt{ZONES} and \inltt{INTERFACES}.
+Each zone is a domain as defined in the \inltt{GEOMETRY} section. For a mesh to
+be non-conformal it must consist of at least two zones with different domain
+tags. These two zones can then be split by an interface where every interface is
+defined by two composite entities, we use \inltt{LEFT} and \inltt{RIGHT}
+notation to distinguish between these. Each zone must contain either the left or
+the right interface edge. Zones can contain multiple edges across different
+interfaces but must not contain both edges for the same interface. These left
+and right interface edges have to be geometrically identical but topologically
+disconnected i.e.\ occupy the same space physically but consist of independent
+geometry objects.
+
+Non-conformal interfaces are defined enclosed in the \inltt{NEKTAR} tag. An
+example showing two non-conformal interfaces on a single mesh is below:
+
+\begin{lstlisting}[style=XMLStyle]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\end{lstlisting}
+
+Zones must have a type specified, at the moment only `FIXED' interfaces are
+supported however in the future there are plans to implement rotating, sliding,
+and prescribed motion using the ALE method. It is important for the zone IDs to
+correspond with the relevant interface IDs present on the zone, that is if there
+is an interface with ID 0 there must also be a zone with ID 0 too. Zone IDs must
+be unique but interfaces can have the same ID, e.g. in the example above zone ID
+1 has two interfaces attached to it. The inclusion of an
+\inltt{"INTERFACE NAME="..."} allows for specifying a name, which is used for
+the debug output when the verbose flag `-v' is specified. This is for user
+reference to ensure the non-conformal interfaces are set up correctly, and shows
+zone/interface IDs, number of elements in each zone and interface, and
+connections between each zone/interface. An example debug output for the above
+XML is shown below:
+
+\begin{lstlisting}
+Movement Info:
+ Num zones: 3
+ - 0 Fixed: 8 Quadrilaterals
+ - 1 Fixed: 24 Quadrilaterals
+ - 2 Fixed: 4 Quadrilaterals
+ Num interfaces: 2
+ - "First": 0 (4 Segments) <-> 1 (6 Segments)
+ - "Second": 1 (6 Segments) <-> 2 (2 Segments)
+\end{lstlisting}
\ No newline at end of file
diff --git a/docs/user-guide/xml/xml.tex b/docs/user-guide/xml/xml.tex
index 3f913bed3c89d7315aea521827ab62be2230839f..471fa45f4adb2fdc537a1cfb5b4fb2973ecb0458 100644
--- a/docs/user-guide/xml/xml.tex
+++ b/docs/user-guide/xml/xml.tex
@@ -77,3 +77,5 @@ files as illustrated below:
\input{xml/xml-coupling.tex}
\input{xml/xml-expressions.tex}
+
+\input{xml/xml-movement.tex}
diff --git a/library/Demos/StdRegions/CMakeLists.txt b/library/Demos/StdRegions/CMakeLists.txt
index 895c4a0400a5583f06ca4276ac9f8ecd00cec312..1c431ffbdd789918a0a749930fe65a033891322a 100644
--- a/library/Demos/StdRegions/CMakeLists.txt
+++ b/library/Demos/StdRegions/CMakeLists.txt
@@ -2,6 +2,8 @@ ADD_NEKTAR_EXECUTABLE(StdProject
COMPONENT demos DEPENDS StdRegions SOURCES StdProject.cpp)
ADD_NEKTAR_EXECUTABLE(StdInterp
COMPONENT demos DEPENDS StdRegions SOURCES StdInterp.cpp)
+ADD_NEKTAR_EXECUTABLE(StdInterpDeriv
+ COMPONENT demos DEPENDS StdRegions SOURCES StdInterpDeriv.cpp)
ADD_NEKTAR_EXECUTABLE(StdInterpBasis
COMPONENT demos DEPENDS StdRegions SOURCES StdInterpBasis.cpp)
ADD_NEKTAR_EXECUTABLE(StdEquiToCoeff2D
@@ -25,6 +27,26 @@ ADD_NEKTAR_TEST(StdInterpBasis_Tet_Mod_P4_Q5)
ADD_NEKTAR_TEST(StdInterpBasis_Tri_Mod_P7_Q8)
ADD_NEKTAR_TEST(StdInterpBasis_Hex_Mod_P7_Q8)
ADD_NEKTAR_TEST(StdInterpBasis_Pyr_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpBasis_Tri_Orth_P7_Q8)
+
+# interpolation tests for derivatives.
+ADD_NEKTAR_TEST(StdInterpDeriv_Seg_Lagrange_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Seg_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Seg_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Quad_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Quad_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Quad_Lagrange_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Tri_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Tri_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Pyr_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Pyr_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Prism_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Prism_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Hex_Mod_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Hex_Orth_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Hex_Lagrange_P7_Q8)
+ADD_NEKTAR_TEST(StdInterpDeriv_Tet_Mod_P8_Q9)
+ADD_NEKTAR_TEST(StdInterpDeriv_Tet_Orth_P8_Q9)
# Projection tests.
diff --git a/library/Demos/StdRegions/StdDemoSupport.hpp b/library/Demos/StdRegions/StdDemoSupport.hpp
index 4f6aad7cacb885b684a8818af605fa59cd548b2a..882184d05a91b4ff979459525c06ec0a6c1474a4 100644
--- a/library/Demos/StdRegions/StdDemoSupport.hpp
+++ b/library/Demos/StdRegions/StdDemoSupport.hpp
@@ -435,6 +435,16 @@ public:
return m_pointstype;
}
+ std::vector &GetBasisType()
+ {
+ return m_basis;
+ }
+
+ std::string &GetShape()
+ {
+ return m_shape;
+ }
+
Array> GetCoords(StdExpansion *E)
{
int dimension = E->GetShapeDimension();
diff --git a/library/Demos/StdRegions/StdInterpDeriv.cpp b/library/Demos/StdRegions/StdInterpDeriv.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..96da6440442465666dd64e94a29177d4ba76ebdd
--- /dev/null
+++ b/library/Demos/StdRegions/StdInterpDeriv.cpp
@@ -0,0 +1,180 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// File: StdInterpDeriv.cpp
+//
+// For more information, please see: http://www.nektar.info
+//
+// The MIT License
+//
+// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
+// Department of Aeronautics, Imperial College London (UK), and Scientific
+// Computing and Imaging Institute, University of Utah (USA).
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+// Description: Demo for testing functionality of PhysEvaluateDeriv
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+
+#include "StdDemoSupport.hpp"
+
+// polynomial = 4x^4 + 3y^3 + 2z^2 + 1
+Array EvalPoly(
+ const Array> &pts)
+{
+ Array ret(pts[0].size());
+ unsigned dim = pts.size();
+ for (int i = 0; i < pts[0].size(); i++)
+ {
+ ret[i] = (4 * pts[0][i] * pts[0][i] * pts[0][i] * pts[0][i]) +
+ (dim >= 2 ? (3 * pts[1][i] * pts[1][i] * pts[1][i]) : 0.0) +
+ (dim >= 3 ? (2 * pts[2][i] * pts[2][i]) : 0.0) + 1;
+ }
+
+ return ret;
+}
+
+// derivative in x = 16x^3
+Array EvalPolyDerivx(
+ const Array> &pts)
+{
+ Array ret(pts[0].size());
+ for (int i = 0; i < pts[0].size(); i++)
+ {
+ ret[i] = 16 * pts[0][i] * pts[0][i] * pts[0][i];
+ }
+
+ return ret;
+}
+
+// derivative in y = 9y^2
+Array EvalPolyDerivy(
+ const Array> &pts)
+{
+ Array ret(pts[0].size());
+ for (int i = 0; i < pts[0].size(); i++)
+ {
+ ret[i] = 9 * pts[1][i] * pts[1][i];
+ }
+
+ return ret;
+}
+
+// derivative in z = 4z
+Array EvalPolyDerivz(
+ const Array> &pts)
+{
+ Array ret(pts[0].size());
+ for (int i = 0; i < pts[0].size(); i++)
+ {
+ ret[i] = 4 * pts[2][i];
+ }
+
+ return ret;
+}
+
+int main(int argc, char *argv[])
+{
+ DemoSupport demo;
+ demo.ParseArguments(argc, argv);
+ StdExpansion *E = demo.CreateStdExpansion();
+
+ const auto dimension = (unsigned)E->GetShapeDimension();
+
+ const auto totPoints = (unsigned)E->GetTotPoints();
+ Array physIn(totPoints, 0.0), physOut(totPoints, 0.0),
+ sol(totPoints, 0.0), sol0(totPoints, 0.0), sol1(totPoints, 0.0),
+ sol2(totPoints, 0.0);
+
+ Array> physOutDeriv(totPoints);
+
+ Array> coordsE = demo.GetCoords(E);
+ physIn = EvalPoly(coordsE);
+
+ // Create a new element but with GaussGaussChebyshev points so that we
+ // perform a PhysEvaluateDeriv at a different set of nodal points
+ // (i.e. non-collocated interpolation), all tests use default types
+ // initially
+ vector &ptypes = demo.GetPointsType();
+ for (int i = 0; i < dimension; ++i)
+ {
+ ptypes[i] = "PolyEvenlySpaced";
+ }
+
+ StdExpansion *F = demo.CreateStdExpansion();
+ const Array> coordsF = demo.GetCoords(F);
+
+ for (int i = 0; i < totPoints; ++i)
+ {
+ // Fill coords array
+ Array coordIn(dimension, 0.0);
+ for (int j = 0; j < dimension; ++j)
+ {
+ coordIn[j] = coordsF[j][i];
+ }
+
+ // Operating on expansion E so using physIn from E, and coordIn from F
+ physOut[i] = E->PhysEvaluate(coordIn, physIn, physOutDeriv[i]);
+ }
+
+ // Extract derivatives in to array for error calculation
+ Array physOut0(totPoints, 0.0), physOut1(totPoints, 0.0),
+ physOut2(totPoints, 0.0);
+ switch (dimension)
+ {
+ case 3:
+ for (int j = 0; j < totPoints; ++j)
+ {
+ physOut2[j] = physOutDeriv[j][2];
+ }
+ sol2 = EvalPolyDerivz(coordsF);
+ /* fall through */
+ case 2:
+ for (int j = 0; j < totPoints; ++j)
+ {
+ physOut1[j] = physOutDeriv[j][1];
+ }
+ sol1 = EvalPolyDerivy(coordsF);
+ /* fall through */
+ case 1:
+ for (int j = 0; j < totPoints; ++j)
+ {
+ physOut0[j] = physOutDeriv[j][0];
+ }
+ sol0 = EvalPolyDerivx(coordsF);
+ /* fall through */
+ default:
+ sol = EvalPoly(coordsF);
+ break;
+ }
+
+ cout << "\nL infinity error: " << scientific
+ << E->Linf(physOut, sol) + E->Linf(physOut0, sol0) +
+ E->Linf(physOut1, sol1) + E->Linf(physOut2, sol2)
+ << endl;
+ cout << "L 2 error : " << scientific
+ << E->L2(physOut, sol) + E->L2(physOut0, sol0) +
+ E->L2(physOut1, sol1) + E->L2(physOut2, sol2)
+ << endl;
+
+ return 0;
+}
diff --git a/library/Demos/StdRegions/Tests/StdInterpBasis_Pyr_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpBasis_Pyr_Mod_P7_Q8.tst
index a7a9775bd491b98ccee1aee526a79c015e9b0d35..65450b5158d325a2ee0ca19a067f6d73ae5108a1 100644
--- a/library/Demos/StdRegions/Tests/StdInterpBasis_Pyr_Mod_P7_Q8.tst
+++ b/library/Demos/StdRegions/Tests/StdInterpBasis_Pyr_Mod_P7_Q8.tst
@@ -1,6 +1,6 @@
- StdInterpBasis Triangle Modified basis P=7 Q=8
+ StdInterpBasis Pyramid Modified basis P=7 Q=8
StdInterpBasis
-s pyramid -b Modified_A Modified_A ModifiedPyr_C -o 7 7 7 -p 8 8 8
diff --git a/library/Demos/StdRegions/Tests/StdInterpBasis_Tri_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpBasis_Tri_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..768c389df41c319e0d15b0bfe8ec7aeac7b2c048
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpBasis_Tri_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpBasis Triangle Ortho basis P=7 Q=8
+ StdInterpBasis
+ -s triangle -b Ortho_A Ortho_B -o 7 7 -p 8 8
+
+
+ 0
+
+
+ 0
+
+
+
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Lagrange_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Lagrange_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..424c123d9d47bde4c4e5438fd23a3a0e65a12a22
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Lagrange_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Hex Lagrange basis P=7 Q=8
+ StdInterpDeriv
+ -s hexahedron -b GLL_Lagrange GLL_Lagrange GLL_Lagrange -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..c7818794ed4856128df3219fbb5fc973ccb441bf
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Hex Mod basis P=7 Q=8
+ StdInterpDeriv
+ -s hexahedron -b Modified_A Modified_A Modified_A -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..2e48201a0115ff44e7ef7720c86ad7cc9cc7fb21
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Hex_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Hex Ortho basis P=7 Q=8
+ StdInterpDeriv
+ -s hexahedron -b Ortho_A Ortho_A Ortho_A -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..e9359ba26b2508b71bd8267dfcdefae4b3460c69
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Prism Mod basis P=7 Q=8
+ StdInterpDeriv
+ -s prism -b Modified_A Modified_A Modified_B -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussRadauMAlpha1Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..af1142f10d52ab0067dfb92612d233c5becf73d8
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Prism_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Prism Ortho basis P=7 Q=8
+ StdInterpDeriv
+ -s prism -b Ortho_A Ortho_A Ortho_B -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussRadauMAlpha1Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..1fd9820aad10e282b65d6d5235729daed576ef70
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Pyr Mod basis P=7 Q=8
+ StdInterpDeriv
+ -s pyramid -b Modified_A Modified_A ModifiedPyr_C -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussRadauMAlpha2Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..1d2fad7f2bb82f7585300fac0792cc0bedec99b1
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Pyr_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Pyramid Ortho basis P=7 Q=8
+ StdInterpDeriv
+ -s pyramid -b Ortho_A Ortho_A OrthoPyr_C -o 7 7 7 -p 8 8 8 -P GaussLobattoLegendre GaussLobattoLegendre GaussRadauMAlpha2Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Lagrange_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Lagrange_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..b84886cba12e80ebe854c971b9736944fd9a0cb1
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Lagrange_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Quadrilateral Lagrange basis P=7 Q=8
+ StdInterpDeriv
+ -s quadrilateral -b GLL_Lagrange GLL_Lagrange -o 7 7 -p 8 8 -P GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..f65efc0a9d584de9b369c9d1d72d38b6b06a3eb7
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Quadrilateral Modified basis P=7 Q=8
+ StdInterpDeriv
+ -s quadrilateral -b Modified_A Modified_A -o 7 7 -p 8 8 -P GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..bb6c7c165d49ddb093e76f64c6a7636d08a0f706
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Quad_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Quadrilateral Orth basis P=7 Q=8
+ StdInterpDeriv
+ -s quadrilateral -b Ortho_A Ortho_A -o 7 7 -p 8 8 -P GaussLobattoLegendre GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Lagrange_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Lagrange_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..4845a2c94da78c8b47389b38279bd2e411d8da43
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Lagrange_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Seg Lagrange basis P=7 Q=8
+ StdInterpDeriv
+ -s segment -b GLL_Lagrange -o 7 -p 8 -P GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..a30b5982b7ce0bdcf9a412db0a9d5c968f2716b6
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Seg Mod basis P=7 Q=8
+ StdInterpDeriv
+ -s segment -b Modified_A -o 7 -p 8 -P GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..90e2aed0634cd4788c8093ecd4ca7ed3b2023d52
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Seg_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Seg Orth basis P=7 Q=8
+ StdInterpDeriv
+ -s segment -b Ortho_A -o 7 -p 8 -P GaussLobattoLegendre
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Mod_P8_Q9.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Mod_P8_Q9.tst
new file mode 100644
index 0000000000000000000000000000000000000000..7fe69f0ea1b832c165ee0573029b21ea8a4c6c6f
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Mod_P8_Q9.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Tet Mod basis P=8 Q=9
+ StdInterpDeriv
+ -s tetrahedron -b Modified_A Modified_B Modified_C -o 8 8 8 -p 9 9 9 -P GaussLobattoLegendre GaussRadauMAlpha1Beta0 GaussRadauMAlpha2Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Orth_P8_Q9.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Orth_P8_Q9.tst
new file mode 100644
index 0000000000000000000000000000000000000000..43227919b8114bc81813597e01f4afa15cf1ec59
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tet_Orth_P8_Q9.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Tet Orth basis P=8 Q=9
+ StdInterpDeriv
+ -s tetrahedron -b Ortho_A Ortho_B Ortho_C -o 8 8 8 -p 9 9 9 -P GaussLobattoLegendre GaussRadauMAlpha1Beta0 GaussRadauMAlpha2Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Mod_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Mod_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..bd187def1a1c6a644732c7ecadc00b41a65ab3c9
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Mod_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Tri Modified basis P=7 Q=8
+ StdInterpDeriv
+ -s triangle -b Modified_A Modified_B -o 7 7 -p 8 8 -P GaussLobattoLegendre GaussRadauMAlpha1Beta0
+
+
+ 0
+
+
+ 0
+
+
+
diff --git a/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Orth_P7_Q8.tst b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Orth_P7_Q8.tst
new file mode 100644
index 0000000000000000000000000000000000000000..8701632b79276250a797738991b28bc7711c9c3d
--- /dev/null
+++ b/library/Demos/StdRegions/Tests/StdInterpDeriv_Tri_Orth_P7_Q8.tst
@@ -0,0 +1,14 @@
+
+
+ StdInterpDeriv Tri Ortho basis P=7 Q=8
+ StdInterpDeriv
+ -s triangle -b Ortho_A Ortho_B -o 7 7 -p 8 8 -P GaussLobattoLegendre GaussRadauMAlpha1Beta0
+
+
+ 0
+
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/library/FieldUtils/OutputModules/OutputVtk.cpp b/library/FieldUtils/OutputModules/OutputVtk.cpp
index 57215bc6e02e863ed6af0ebde0757160bac46d6c..8e53c34614e0e11f2a7b9f8f3daa521e12df8f99 100644
--- a/library/FieldUtils/OutputModules/OutputVtk.cpp
+++ b/library/FieldUtils/OutputModules/OutputVtk.cpp
@@ -1605,6 +1605,22 @@ void OutputVtk::OutputFromPts(po::variables_map &vm)
void OutputVtk::OutputFromExp(po::variables_map &vm)
{
+ // Move geometry based on zones data in .xml and time in .fld metadatamap
+ // Perform movement of zones based on time in field files metadata map
+ if (m_f->m_graph->GetMovement()->GetMoveFlag())
+ {
+ if (!m_f->m_fieldMetaDataMap["Time"].empty())
+ {
+ m_f->m_graph->GetMovement()->PerformMovement(
+ boost::lexical_cast(
+ m_f->m_fieldMetaDataMap["Time"]));
+ for (auto &i : m_f->m_exp)
+ {
+ i->Reset();
+ }
+ }
+ }
+
if (m_config["legacy"].m_beenSet)
{
ASSERTL0(!m_config["multiblock"].m_beenSet,
@@ -1623,8 +1639,11 @@ void OutputVtk::OutputFromExp(po::variables_map &vm)
// Save mesh state (if using filter this allows us to only ProcessEquispaced
// if needed)
- m_cachedMesh = m_vtkMesh;
-
+ if (!m_f->m_graph->GetMovement()->GetMoveFlag())
+ {
+ m_cachedMesh = m_vtkMesh;
+ }
+
if (m_config["highorder"].m_beenSet)
{
ASSERTL0(!m_config["multiblock"].m_beenSet,
diff --git a/library/FieldUtils/OutputModules/OutputVtk.h b/library/FieldUtils/OutputModules/OutputVtk.h
index b75c7c7706ac64ee33e1bfe7b422f265387b55ae..dc0a5577117fe17b7e7aa5055a8d360dae55e784 100644
--- a/library/FieldUtils/OutputModules/OutputVtk.h
+++ b/library/FieldUtils/OutputModules/OutputVtk.h
@@ -90,6 +90,8 @@ protected:
/// Flag if mesh has been cached
bool m_cachedMesh = false;
+ std::string PrepareOutput(po::variables_map &vm);
+
private:
/// Prepare high order Lagrange VTK output
vtkSmartPointer OutputFromExpHighOrder(
diff --git a/library/LibUtilities/BasicConst/NektarUnivConsts.hpp b/library/LibUtilities/BasicConst/NektarUnivConsts.hpp
index e606427cd9c2a73a14533cb80730d9e57943d1bb..23485a0784205219373f2cc78a82594028fdb030 100644
--- a/library/LibUtilities/BasicConst/NektarUnivConsts.hpp
+++ b/library/LibUtilities/BasicConst/NektarUnivConsts.hpp
@@ -62,6 +62,10 @@ static const NekDouble CoinTol = 1E-6;
// Factor for tolerance for floating point comparison
static const unsigned int kNekFloatCompFact = 4;
+
+// Constants for minimisation functions
+static const NekDouble kFindDistanceMin = 5e-05;
+static const unsigned int kNewtonIterations = 51;
} // namespace NekConstants
} // namespace Nektar
diff --git a/library/LibUtilities/BasicUtils/FieldIO.h b/library/LibUtilities/BasicUtils/FieldIO.h
index 43b7a86452aa52c015a0a263b48a25e09f37a6ec..b0aec9a601af9f5b8cc406c658dc10aa7ff92484 100644
--- a/library/LibUtilities/BasicUtils/FieldIO.h
+++ b/library/LibUtilities/BasicUtils/FieldIO.h
@@ -256,6 +256,10 @@ public:
LIB_UTILITIES_EXPORT static void AddInfoTag(
TagWriterSharedPtr root, const FieldMetaDataMap &fieldmetadatamap);
+ LIB_UTILITIES_EXPORT std::string SetUpOutput(const std::string outname,
+ bool perRank,
+ bool backup = false);
+
protected:
/// Communicator to use when writing parallel format
LibUtilities::CommSharedPtr m_comm;
@@ -273,10 +277,6 @@ protected:
return "fld";
}
- LIB_UTILITIES_EXPORT std::string SetUpOutput(const std::string outname,
- bool perRank,
- bool backup = false);
-
/// @copydoc FieldIO::Write
LIB_UTILITIES_EXPORT virtual void v_Write(
const std::string &outFile,
diff --git a/library/LibUtilities/BasicUtils/VmathArray.hpp b/library/LibUtilities/BasicUtils/VmathArray.hpp
index d2d332a1b0efe2a7a81223d5d30bce671f47576d..ab55408255ab1753a423644ba8c025e4926ae3df 100644
--- a/library/LibUtilities/BasicUtils/VmathArray.hpp
+++ b/library/LibUtilities/BasicUtils/VmathArray.hpp
@@ -358,7 +358,7 @@ void Vvtvm(int n, const Array &w, const int incw,
#endif
}
-/// \brief vvtvvtp (vector times vector plus vector times vector): z = v*w + y*z
+/// \brief vvtvvtp (vector times vector plus vector times vector): z = v*w + x*y
template
void Vvtvvtp(int n, const Array &v, int incv,
const Array &w, int incw,
@@ -384,6 +384,24 @@ void Vvtvvtp(int n, const Array &v, int incv,
#endif
}
+/// \brief vvtvvtm (vector times vector minus vector times vector): z = v*w -
+/// x*y
+template
+void Vvtvvtm(int n, const Array &v, int incv,
+ const Array &w, int incw,
+ const Array &x, int incx,
+ const Array &y, int incy, Array &z,
+ int incz)
+{
+ ASSERTL1(n * incv <= v.size() + v.GetOffset(), "Array out of bounds");
+ ASSERTL1(n * incw <= w.size() + w.GetOffset(), "Array out of bounds");
+ ASSERTL1(n * incx <= x.size() + x.GetOffset(), "Array out of bounds");
+ ASSERTL1(n * incy <= y.size() + y.GetOffset(), "Array out of bounds");
+ ASSERTL1(n * incz <= z.size() + z.GetOffset(), "Array out of bounds");
+
+ Vvtvvtm(n, &v[0], incv, &w[0], incw, &x[0], incx, &y[0], incy, &z[0], incz);
+}
+
/// \brief svtsvtp (scalar times vector plus scalar times vector): z = alpha*x +
/// beta*y
template
diff --git a/library/LibUtilities/Communication/Comm.h b/library/LibUtilities/Communication/Comm.h
index 7ec0b32911ba6787315a5a190e229835b0a7d303..86c64d5571dd058fedae3baeab5928b92ff2da52 100644
--- a/library/LibUtilities/Communication/Comm.h
+++ b/library/LibUtilities/Communication/Comm.h
@@ -145,6 +145,9 @@ public:
void Irsend(int pProc, T &pData, int count,
const CommRequestSharedPtr &request, int loc);
template
+ void Isend(int pProc, T &pData, int count,
+ const CommRequestSharedPtr &request, int loc);
+ template
void SendInit(int pProc, T &pData, int count,
const CommRequestSharedPtr &request, int loc);
template
@@ -235,6 +238,8 @@ protected:
virtual void v_Irsend(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc) = 0;
+ virtual void v_Isend(void *buf, int count, CommDataType dt, int dest,
+ CommRequestSharedPtr request, int loc) = 0;
virtual void v_SendInit(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc) = 0;
virtual void v_Irecv(void *buf, int count, CommDataType dt, int source,
@@ -600,6 +605,23 @@ void Comm::Irsend(int pProc, T &pData, int count,
CommDataTypeTraits::GetDataType(), pProc, request, loc);
}
+/**
+ * Starts a nonblocking send
+ *
+ * @param pProc Rank of destination
+ * @param pData Array/vector to send
+ * @param count Number of elements to send in pData
+ * @param request Communication request object
+ * @param loc Location in request to use
+ */
+template
+void Comm::Isend(int pProc, T &pData, int count,
+ const CommRequestSharedPtr &request, int loc)
+{
+ v_Isend(CommDataTypeTraits::GetPointer(pData), count,
+ CommDataTypeTraits::GetDataType(), pProc, request, loc);
+}
+
/**
* Creates a persistent request for a send
*
diff --git a/library/LibUtilities/Communication/CommMpi.cpp b/library/LibUtilities/Communication/CommMpi.cpp
index bc93c2bf2b9b93acc1ddc7f7a378d653147a0b27..8080e6dc8f5bdf449357483725fa82643b1c6123 100644
--- a/library/LibUtilities/Communication/CommMpi.cpp
+++ b/library/LibUtilities/Communication/CommMpi.cpp
@@ -416,6 +416,14 @@ void CommMpi::v_Irsend(void *buf, int count, CommDataType dt, int dest,
MPI_Irsend(buf, count, dt, dest, 0, m_comm, req->GetRequest(loc));
}
+void CommMpi::v_Isend(void *buf, int count, CommDataType dt, int dest,
+ CommRequestSharedPtr request, int loc)
+{
+ CommRequestMpiSharedPtr req =
+ std::static_pointer_cast(request);
+ MPI_Isend(buf, count, dt, dest, 0, m_comm, req->GetRequest(loc));
+}
+
void CommMpi::v_SendInit(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc)
{
@@ -444,14 +452,21 @@ void CommMpi::v_StartAll(CommRequestSharedPtr request)
{
CommRequestMpiSharedPtr req =
std::static_pointer_cast(request);
- MPI_Startall(req->GetNumRequest(), req->GetRequest(0));
+ if (req->GetNumRequest() != 0)
+ {
+ MPI_Startall(req->GetNumRequest(), req->GetRequest(0));
+ }
}
void CommMpi::v_WaitAll(CommRequestSharedPtr request)
{
CommRequestMpiSharedPtr req =
std::static_pointer_cast(request);
- MPI_Waitall(req->GetNumRequest(), req->GetRequest(0), MPI_STATUSES_IGNORE);
+ if (req->GetNumRequest() != 0)
+ {
+ MPI_Waitall(req->GetNumRequest(), req->GetRequest(0),
+ MPI_STATUSES_IGNORE);
+ }
}
CommRequestSharedPtr CommMpi::v_CreateRequest(int num)
diff --git a/library/LibUtilities/Communication/CommMpi.h b/library/LibUtilities/Communication/CommMpi.h
index 111da7a91fb133ad78d6973a0e28d44df1132540..f86e62241961d566f04d5fb4a14c938b4224b8bf 100644
--- a/library/LibUtilities/Communication/CommMpi.h
+++ b/library/LibUtilities/Communication/CommMpi.h
@@ -168,6 +168,8 @@ protected:
CommDataType recvtype) final;
virtual void v_Irsend(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc) final;
+ virtual void v_Isend(void *buf, int count, CommDataType dt, int dest,
+ CommRequestSharedPtr request, int loc) final;
virtual void v_SendInit(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc) final;
virtual void v_Irecv(void *buf, int count, CommDataType dt, int source,
diff --git a/library/LibUtilities/Communication/CommSerial.cpp b/library/LibUtilities/Communication/CommSerial.cpp
index e4e3f8a8e6a8754eca1b5a6b573acdb26deda4ed..550ec304a5f209c02ddad74aadd35f1b4e024274 100644
--- a/library/LibUtilities/Communication/CommSerial.cpp
+++ b/library/LibUtilities/Communication/CommSerial.cpp
@@ -255,6 +255,12 @@ void CommSerial::v_Irsend(void *buf, int count, CommDataType dt, int dest,
boost::ignore_unused(buf, count, dt, dest, request, loc);
}
+void CommSerial::v_Isend(void *buf, int count, CommDataType dt, int dest,
+ CommRequestSharedPtr request, int loc)
+{
+ boost::ignore_unused(buf, count, dt, dest, request, loc);
+}
+
void CommSerial::v_SendInit(void *buf, int count, CommDataType dt, int dest,
CommRequestSharedPtr request, int loc)
{
diff --git a/library/LibUtilities/Communication/CommSerial.h b/library/LibUtilities/Communication/CommSerial.h
index 6adec3774146ac832986100c5cf3d945766dee45..9823319cc7c03d224f16a6bd455ec378801ad14b 100644
--- a/library/LibUtilities/Communication/CommSerial.h
+++ b/library/LibUtilities/Communication/CommSerial.h
@@ -137,6 +137,11 @@ protected:
CommRequestSharedPtr request,
int loc) final;
+ LIB_UTILITIES_EXPORT virtual void v_Isend(void *buf, int count,
+ CommDataType dt, int dest,
+ CommRequestSharedPtr request,
+ int loc) final;
+
LIB_UTILITIES_EXPORT virtual void v_SendInit(void *buf, int count,
CommDataType dt, int dest,
CommRequestSharedPtr request,
diff --git a/library/LocalRegions/HexExp.cpp b/library/LocalRegions/HexExp.cpp
index de07729da56983cce29ec5ac7b0c75b8b95b71a1..f72bd3251a5f2f298fc67da6ec80a23ae56d2269 100644
--- a/library/LocalRegions/HexExp.cpp
+++ b/library/LocalRegions/HexExp.cpp
@@ -86,13 +86,6 @@ HexExp::HexExp(const HexExp &T)
{
}
-/**
- * \brief Destructor
- */
-HexExp::~HexExp()
-{
-}
-
//-----------------------------
// Integration Methods
//-----------------------------
@@ -410,7 +403,7 @@ void HexExp::v_IProductWRTDerivBase(const int dir,
const Array &inarray,
Array &outarray)
{
- HexExp::IProductWRTDerivBase_SumFac(dir, inarray, outarray);
+ HexExp::v_IProductWRTDerivBase_SumFac(dir, inarray, outarray);
}
/**
@@ -433,7 +426,7 @@ void HexExp::v_IProductWRTDerivBase(const int dir,
* @param inarray The function \f$ u \f$.
* @param outarray Value of the inner product.
*/
-void HexExp::IProductWRTDerivBase_SumFac(
+void HexExp::v_IProductWRTDerivBase_SumFac(
const int dir, const Array &inarray,
Array &outarray)
{
@@ -559,7 +552,7 @@ void HexExp::IProductWRTDerivBase_MatOp(
* @param inarray The function \f$ u \f$.
* @param outarray Value of the inner product.
*/
-void HexExp::IProductWRTDirectionalDerivBase_SumFac(
+void HexExp::v_IProductWRTDirectionalDerivBase_SumFac(
const Array &direction,
const Array &inarray,
Array &outarray)
@@ -623,7 +616,7 @@ NekDouble HexExp::v_StdPhysEvaluate(
const Array &physvals)
{
// Evaluate point in local coordinates.
- return StdHexExp::v_PhysEvaluate(Lcoord, physvals);
+ return StdExpansion3D::v_PhysEvaluate(Lcoord, physvals);
}
NekDouble HexExp::v_PhysEvaluate(const Array &coord,
@@ -633,7 +626,17 @@ NekDouble HexExp::v_PhysEvaluate(const Array &coord,
ASSERTL0(m_geom, "m_geom not defined");
m_geom->GetLocCoords(coord, Lcoord);
- return StdHexExp::v_PhysEvaluate(Lcoord, physvals);
+ return StdExpansion3D::v_PhysEvaluate(Lcoord, physvals);
+}
+
+NekDouble HexExp::v_PhysEvaluate(const Array &coord,
+ const Array &inarray,
+ std::array &firstOrderDerivs)
+{
+ Array Lcoord(3);
+ ASSERTL0(m_geom, "m_geom not defined");
+ m_geom->GetLocCoords(coord, Lcoord);
+ return StdHexExp::v_PhysEvaluate(Lcoord, inarray, firstOrderDerivs);
}
StdRegions::StdExpansionSharedPtr HexExp::v_GetStdExp(void) const
diff --git a/library/LocalRegions/HexExp.h b/library/LocalRegions/HexExp.h
index e6265174ecbd99e69cda679fee384e2b4664ea31..320665ad61eaa7ea80d534ab8156fa8be2586b02 100644
--- a/library/LocalRegions/HexExp.h
+++ b/library/LocalRegions/HexExp.h
@@ -45,20 +45,10 @@
namespace Nektar
{
-namespace SpatialDomains
-{
-class HexGeom;
-typedef std::shared_ptr HexGeomSharedPtr;
-} // namespace SpatialDomains
-
namespace LocalRegions
{
-class HexExp;
-
-typedef std::shared_ptr HexExpSharedPtr;
-typedef std::vector HexExpVector;
-
-class HexExp : virtual public StdRegions::StdHexExp, virtual public Expansion3D
+class HexExp final : virtual public StdRegions::StdHexExp,
+ virtual public Expansion3D
{
public:
LOCAL_REGIONS_EXPORT HexExp(const LibUtilities::BasisKey &Ba,
@@ -68,61 +58,61 @@ public:
LOCAL_REGIONS_EXPORT HexExp(const HexExp &T);
- LOCAL_REGIONS_EXPORT ~HexExp();
+ LOCAL_REGIONS_EXPORT ~HexExp() final = default;
protected:
//------------------------------
// Integration Method
//------------------------------
- LOCAL_REGIONS_EXPORT virtual NekDouble v_Integral(
- const Array &inarray);
+ LOCAL_REGIONS_EXPORT NekDouble
+ v_Integral(const Array &inarray) final;
//-----------------------------
// Differentiation Methods
//-----------------------------
- LOCAL_REGIONS_EXPORT virtual void v_PhysDeriv(
+ LOCAL_REGIONS_EXPORT void v_PhysDeriv(
const Array &inarray,
Array &out_d0, Array &out_d1,
- Array &out_d2);
+ Array &out_d2) final;
- LOCAL_REGIONS_EXPORT virtual void v_PhysDeriv(
- const int dir, const Array &inarray,
- Array &outarray);
+ LOCAL_REGIONS_EXPORT void v_PhysDeriv(
+ int dir, const Array &inarray,
+ Array &outarray) final;
LOCAL_REGIONS_EXPORT void v_PhysDirectionalDeriv(
const Array &inarray,
const Array &direction,
- Array &out);
+ Array &out) final;
//---------------------------------------
// Transforms
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual void v_FwdTrans(
+ LOCAL_REGIONS_EXPORT void v_FwdTrans(
const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
//---------------------------------------
// Inner product functions
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual void v_IProductWRTBase(
+ LOCAL_REGIONS_EXPORT void v_IProductWRTBase(
const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
- LOCAL_REGIONS_EXPORT virtual void v_IProductWRTBase_SumFac(
+ LOCAL_REGIONS_EXPORT void v_IProductWRTBase_SumFac(
const Array &inarray,
- Array &outarray, bool multiplybyweights = true);
+ Array &outarray, bool multiplybyweights = true) final;
- LOCAL_REGIONS_EXPORT virtual void v_IProductWRTDerivBase(
+ LOCAL_REGIONS_EXPORT void v_IProductWRTDerivBase(
const int dir, const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
- LOCAL_REGIONS_EXPORT void IProductWRTDerivBase_SumFac(
+ LOCAL_REGIONS_EXPORT void v_IProductWRTDerivBase_SumFac(
const int dir, const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
- LOCAL_REGIONS_EXPORT virtual void v_AlignVectorToCollapsedDir(
+ LOCAL_REGIONS_EXPORT void v_AlignVectorToCollapsedDir(
const int dir, const Array &inarray,
- Array> &outarray);
+ Array> &outarray) final;
LOCAL_REGIONS_EXPORT void IProductWRTDerivBase_MatOp(
const int dir, const Array &inarray,
@@ -136,113 +126,130 @@ protected:
IProductWRTDirectionalDerivBase_SumFac(direction, inarray, outarray);
}
- LOCAL_REGIONS_EXPORT void IProductWRTDirectionalDerivBase_SumFac(
+ LOCAL_REGIONS_EXPORT void v_IProductWRTDirectionalDerivBase_SumFac(
const Array &direction,
const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
//---------------------------------------
// Evaluation functions
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual NekDouble v_StdPhysEvaluate(
- const Array &Lcoord,
- const Array &physvals);
+ LOCAL_REGIONS_EXPORT NekDouble
+ v_StdPhysEvaluate(const Array &Lcoord,
+ const Array &physvals) final;
+
+ LOCAL_REGIONS_EXPORT NekDouble
+ v_PhysEvaluate(const Array &coords,
+ const Array &physvals) final;
- LOCAL_REGIONS_EXPORT virtual NekDouble v_PhysEvaluate(
- const Array &coords,
- const Array &physvals);
+ STD_REGIONS_EXPORT NekDouble
+ v_PhysEvaluate(const Array &coord,
+ const Array &inarray,
+ std::array &firstOrderDerivs) final;
- LOCAL_REGIONS_EXPORT virtual void v_GetCoord(
+ LOCAL_REGIONS_EXPORT void v_GetCoord(
const Array &Lcoords,
- Array &coords);
+ Array &coords) final;
- LOCAL_REGIONS_EXPORT virtual void v_GetCoords(
+ LOCAL_REGIONS_EXPORT void v_GetCoords(
Array &coords_1, Array &coords_2,
- Array &coords_3);
+ Array &coords_3) final;
//---------------------------------------
// Helper functions
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual LibUtilities::ShapeType v_DetShapeType() const;
+ LOCAL_REGIONS_EXPORT
+ LibUtilities::ShapeType v_DetShapeType() const final;
- LOCAL_REGIONS_EXPORT virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(
- void) const;
+ LOCAL_REGIONS_EXPORT
+ StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const final;
- LOCAL_REGIONS_EXPORT virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(
- void) const;
+ LOCAL_REGIONS_EXPORT
+ StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const final;
- LOCAL_REGIONS_EXPORT virtual void v_ExtractDataToCoeffs(
+ LOCAL_REGIONS_EXPORT void v_ExtractDataToCoeffs(
const NekDouble *data, const std::vector &nummodes,
const int mode_offset, NekDouble *coeffs,
- std::vector &fromType);
+ std::vector &fromType) final;
- LOCAL_REGIONS_EXPORT virtual bool v_GetFaceDGForwards(const int i) const;
+ LOCAL_REGIONS_EXPORT bool v_GetFaceDGForwards(const int i) const;
- LOCAL_REGIONS_EXPORT virtual void v_GetTracePhysMap(
- const int face, Array &outarray);
+ LOCAL_REGIONS_EXPORT void v_GetTracePhysMap(
+ const int face, Array &outarray) final;
- LOCAL_REGIONS_EXPORT void v_ComputeTraceNormal(const int face);
+ LOCAL_REGIONS_EXPORT void v_ComputeTraceNormal(const int face) final;
//---------------------------------------
// Operator creation functions
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual void v_MassMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_MassMatrixOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_LaplacianMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_LaplacianMatrixOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_LaplacianMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_LaplacianMatrixOp(
const int k1, const int k2, const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_WeakDerivMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_WeakDerivMatrixOp(
const int i, const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_WeakDirectionalDerivMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_WeakDirectionalDerivMatrixOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_MassLevelCurvatureMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_MassLevelCurvatureMatrixOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_HelmholtzMatrixOp(
+ LOCAL_REGIONS_EXPORT void v_HelmholtzMatrixOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
LOCAL_REGIONS_EXPORT void v_GeneralMatrixOp_MatOp(
const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey);
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_ReduceOrderCoeffs(
+ LOCAL_REGIONS_EXPORT void v_ReduceOrderCoeffs(
int numMin, const Array &inarray,
- Array &outarray);
+ Array &outarray) final;
- LOCAL_REGIONS_EXPORT virtual void v_SVVLaplacianFilter(
- Array &array, const StdRegions::StdMatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT void v_SVVLaplacianFilter(
+ Array &array,
+ const StdRegions::StdMatrixKey &mkey) final;
//---------------------------------------
// Matrix creation functions
//---------------------------------------
- LOCAL_REGIONS_EXPORT virtual DNekMatSharedPtr v_GenMatrix(
- const StdRegions::StdMatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT DNekMatSharedPtr
+ v_GenMatrix(const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual DNekMatSharedPtr v_CreateStdMatrix(
- const StdRegions::StdMatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT DNekMatSharedPtr
+ v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual DNekScalMatSharedPtr v_GetLocMatrix(
- const MatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT DNekScalMatSharedPtr
+ v_GetLocMatrix(const MatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(
- const MatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT
+ DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(
+ const MatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT void v_DropLocStaticCondMatrix(const MatrixKey &mkey);
+ LOCAL_REGIONS_EXPORT void v_DropLocStaticCondMatrix(
+ const MatrixKey &mkey) final;
- LOCAL_REGIONS_EXPORT virtual void v_ComputeLaplacianMetric();
+ LOCAL_REGIONS_EXPORT void v_ComputeLaplacianMetric() final;
private:
LibUtilities::NekManager
@@ -250,18 +257,18 @@ private:
LibUtilities::NekManager
m_staticCondMatrixManager;
- HexExp();
-
- virtual void v_LaplacianMatrixOp_MatFree_Kernel(
+ void v_LaplacianMatrixOp_MatFree_Kernel(
const Array &inarray,
- Array &outarray, Array &wsp);
+ Array &outarray, Array &wsp) final;
- virtual void v_NormalTraceDerivFactors(
+ void v_NormalTraceDerivFactors(
Array> &factors,
Array> &d0factors,
- Array> &d1factors);
+ Array> &d1factors) final;
};
+typedef std::shared_ptr HexExpSharedPtr;
+typedef std::vector HexExpVector;
} // namespace LocalRegions
} // namespace Nektar
diff --git a/library/LocalRegions/NodalTetExp.h b/library/LocalRegions/NodalTetExp.h
index d31c044a36ddef5097ab3c9a03f0f822ad6df7bd..4bfecbac719b4f3c9ec1e00d69bdd523b4a4e540 100644
--- a/library/LocalRegions/NodalTetExp.h
+++ b/library/LocalRegions/NodalTetExp.h
@@ -44,7 +44,7 @@ namespace Nektar
namespace LocalRegions
{
-class NodalTetExp : public TetExp
+class NodalTetExp final : virtual public TetExp
{
// public:
// NodalTetExp(const StdRegions::Basis &Ba, const StdRegions::Basis
@@ -68,7 +68,7 @@ class NodalTetExp : public TetExp
LOCAL_REGIONS_EXPORT NodalTetExp(const NodalTetExp &T);
/// Destructor
- LOCAL_REGIONS_EXPORT ~NodalTetExp();
+ LOCAL_REGIONS_EXPORT ~NodalTetExp() final = default;
protected:
private:
diff --git a/library/LocalRegions/NodalTriExp.cpp b/library/LocalRegions/NodalTriExp.cpp
index 048d833dd5d448d4a9d208e691d714d46e566296..6020e1959dbf4588ad1769cbd5d529b46cde1bbf 100644
--- a/library/LocalRegions/NodalTriExp.cpp
+++ b/library/LocalRegions/NodalTriExp.cpp
@@ -62,16 +62,14 @@ NodalTriExp::NodalTriExp(const LibUtilities::BasisKey &Ba,
}
NodalTriExp::NodalTriExp(const NodalTriExp &T)
- : StdExpansion(T), StdExpansion2D(T), StdRegions::StdNodalTriExp(T),
+ : StdExpansion(T),
+ StdExpansion2D(T), StdRegions::StdTriExp(T), StdRegions::StdNodalTriExp(
+ T),
Expansion(T), Expansion2D(T), m_matrixManager(T.m_matrixManager),
m_staticCondMatrixManager(T.m_staticCondMatrixManager)
{
}
-NodalTriExp::~NodalTriExp()
-{
-}
-
//----------------------------
// Integration Methods
//----------------------------
@@ -459,7 +457,18 @@ NekDouble NodalTriExp::PhysEvaluate(
ASSERTL0(m_geom, "m_geom not defined");
m_geom->GetLocCoords(coord, Lcoord);
- return StdNodalTriExp::v_PhysEvaluate(Lcoord, physvals);
+ return StdExpansion2D::v_PhysEvaluate(Lcoord, physvals);
+}
+
+NekDouble NodalTriExp::v_PhysEvaluate(
+ const Array &coord,
+ const Array &inarray,
+ std::array &firstOrderDerivs)
+{
+ Array Lcoord(2);
+ ASSERTL0(m_geom, "m_geom not defined");
+ m_geom->GetLocCoords(coord, Lcoord);
+ return StdExpansion2D::v_PhysEvaluate(Lcoord, inarray, firstOrderDerivs);
}
StdRegions::StdExpansionSharedPtr NodalTriExp::v_GetStdExp(void) const
diff --git a/library/LocalRegions/NodalTriExp.h b/library/LocalRegions/NodalTriExp.h
index ba76368ab5e2c9ffc6aa945a3edc3453a9ad0bd1..1b54489b8b7f8f3dd2c97a695917dcbd55519da0 100644
--- a/library/LocalRegions/NodalTriExp.h
+++ b/library/LocalRegions/NodalTriExp.h
@@ -49,8 +49,8 @@ namespace Nektar
namespace LocalRegions
{
-class NodalTriExp : virtual public StdRegions::StdNodalTriExp,
- virtual public Expansion2D
+class NodalTriExp final : virtual public StdRegions::StdNodalTriExp,
+ virtual public Expansion2D
{
public:
/** \brief Constructor using BasisKey class for quadrature
@@ -64,7 +64,7 @@ public:
LOCAL_REGIONS_EXPORT NodalTriExp(const NodalTriExp &T);
/// Destructor
- LOCAL_REGIONS_EXPORT ~NodalTriExp();
+ LOCAL_REGIONS_EXPORT ~NodalTriExp() final = default;
LOCAL_REGIONS_EXPORT void GetCoords(
Array &coords_1, Array &coords_2,
@@ -127,6 +127,11 @@ public:
StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
}
+ LOCAL_REGIONS_EXPORT NekDouble
+ v_PhysEvaluate(const Array &coord,
+ const Array &inarray,
+ std::array &firstOrderDerivs) final;
+
void LaplacianMatrixOp(const Array &inarray,
Array &outarray,
const StdRegions::StdMatrixKey &mkey)
@@ -180,11 +185,11 @@ protected:
Array &outarray,
const StdRegions::StdMatrixKey &mkey);
- virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const;
+ StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const final;
- virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const;
+ StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const final;
- virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey);
+ DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) final;
private:
LibUtilities::NekManager
@@ -202,16 +207,16 @@ private:
return StdNodalTriExp::GenNBasisTransMatrix();
}
- virtual void v_GetCoords(
+ void v_GetCoords(
Array &coords_0,
Array &coords_1 = NullNekDouble1DArray,
- Array &coords_2 = NullNekDouble1DArray)
+ Array &coords_2 = NullNekDouble1DArray) final
{
GetCoords(coords_0, coords_1, coords_2);
}
- virtual void v_GetCoord(const Array &lcoord,
- Array &coord)
+ void v_GetCoord(const Array &lcoord,
+ Array &coord) final
{
GetCoord(lcoord, coord);
}
@@ -224,45 +229,44 @@ private:
/** \brief Virtual call to integrate the physical point list \a inarray
over region (see SegExp::Integral) */
- virtual NekDouble v_Integral(const Array &inarray)
+ NekDouble v_Integral(const Array &inarray) final
{
return Integral(inarray);
}
/** \brief Virtual call to TriExp::IProduct_WRT_B */
- virtual void v_IProductWRTBase(const Array &inarray,
- Array &outarray)
+ void v_IProductWRTBase(const Array &inarray,
+ Array &outarray) final
{
IProductWRTBase(inarray, outarray);
}
- virtual void v_IProductWRTDerivBase(
- const int dir, const Array &inarray,
- Array &outarray)
+ void v_IProductWRTDerivBase(const int dir,
+ const Array &inarray,
+ Array &outarray) final
{
IProductWRTDerivBase(dir, inarray, outarray);
}
- virtual void v_StdPhysDeriv(
+ void v_StdPhysDeriv(
const Array &inarray,
Array &out_d0, Array &out_d1,
- Array &out_d2 = NullNekDouble1DArray)
+ Array &out_d2 = NullNekDouble1DArray) final
{
StdTriExp::v_PhysDeriv(inarray, out_d0, out_d1, out_d2);
}
- virtual void v_PhysDeriv(
+ void v_PhysDeriv(
const Array &inarray,
Array &out_d0, Array &out_d1,
- Array &out_d2 = NullNekDouble1DArray)
+ Array &out_d2 = NullNekDouble1DArray) final
{
boost::ignore_unused(out_d2);
PhysDeriv(inarray, out_d0, out_d1);
}
- virtual void v_PhysDeriv(const int dir,
- const Array &inarray,
- Array &outarray)
+ void v_PhysDeriv(const int dir, const Array &inarray,
+ Array &outarray) final
{
Array tmp;
switch (dir)
@@ -286,28 +290,27 @@ private:
}
/// Virtual call to SegExp::FwdTrans
- virtual void v_FwdTrans(const Array &inarray,
- Array &outarray)
+ void v_FwdTrans(const Array &inarray,
+ Array &outarray) final
{
FwdTrans(inarray, outarray);
}
/// Virtual call to TriExp::Evaluate
- virtual NekDouble v_PhysEvaluate(
- const Array &coord,
- const Array &physvals)
+ NekDouble v_PhysEvaluate(const Array &coord,
+ const Array &physvals) final
{
return PhysEvaluate(coord, physvals);
}
- virtual DNekMatSharedPtr v_CreateStdMatrix(
- const StdRegions::StdMatrixKey &mkey)
+ DNekMatSharedPtr v_CreateStdMatrix(
+ const StdRegions::StdMatrixKey &mkey) final
{
return CreateStdMatrix(mkey);
}
- virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
+ DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) final
{
return m_matrixManager[mkey];
}
@@ -321,73 +324,75 @@ private:
// m_matrixManager[mkey];
// }
- virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(
- const MatrixKey &mkey)
+ DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(
+ const MatrixKey &mkey) final
{
return m_staticCondMatrixManager[mkey];
}
- virtual void v_BwdTrans_SumFac(const Array &inarray,
- Array &outarray)
+ void v_BwdTrans_SumFac(const Array &inarray,
+ Array &outarray) final
{
StdNodalTriExp::v_BwdTrans_SumFac(inarray, outarray);
}
- virtual void v_IProductWRTBase_SumFac(
- const Array &inarray,
- Array &outarray, bool multiplybyweights = true)
+ void v_IProductWRTBase_SumFac(const Array &inarray,
+ Array &outarray,
+ bool multiplybyweights = true) final
{
boost::ignore_unused(multiplybyweights);
IProductWRTBase_SumFac(inarray, outarray);
}
- virtual void v_IProductWRTDerivBase_SumFac(
+ void v_IProductWRTDerivBase_SumFac(
const int dir, const Array &inarray,
- Array &outarray)
+ Array &outarray) final
{
IProductWRTDerivBase_SumFac(dir, inarray, outarray);
}
- virtual void v_AlignVectorToCollapsedDir(
+ void v_AlignVectorToCollapsedDir(
const int dir, const Array &inarray,
- Array> &outarray);
+ Array> &outarray) final;
- virtual void v_MassMatrixOp(const Array &inarray,
- Array &outarray,
- const StdRegions::StdMatrixKey &mkey)
+ void v_MassMatrixOp(const Array &inarray,
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final
{
MassMatrixOp(inarray, outarray, mkey);
}
- virtual void v_LaplacianMatrixOp(
- const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey)
+ void v_LaplacianMatrixOp(const Array &inarray,
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final
{
LaplacianMatrixOp(inarray, outarray, mkey);
}
- virtual void v_LaplacianMatrixOp(
- const int k1, const int k2, const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey)
+ void v_LaplacianMatrixOp(const int k1, const int k2,
+ const Array &inarray,
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final
{
LaplacianMatrixOp(k1, k2, inarray, outarray, mkey);
}
- virtual void v_WeakDerivMatrixOp(
- const int i, const Array &inarray,
- Array &outarray, const StdRegions::StdMatrixKey &mkey)
+ void v_WeakDerivMatrixOp(const int i,
+ const Array &inarray,
+ Array &outarray,
+ const StdRegions::StdMatrixKey &mkey) final
{
WeakDerivMatrixOp(i, inarray, outarray, mkey);
}
- virtual void v_HelmholtzMatrixOp(
- const Array &inarray,
- Array