Commit 63c0ec12 authored by David Moxey's avatar David Moxey

Merge remote-tracking branch 'upstream/master' into feature/CADfix-export

parents f67b00dd 24feb9db
......@@ -4,6 +4,7 @@
!.gitattributes
!.clang-format
!.dockerignore
!.gitlab-ci
# Ignore builds and ThirdParty directories
build
builds
......
This diff is collapsed.
FROM %%BASE_IMAGE%%
ADD --chown=nektar:nektar . /home/nektar/nektar
#!/bin/bash -x
[[ $OS_VERSION != "osx" ]] && ccache -s && ccache -M 5G
rm -rf build && mkdir -p build && (cd build && if [[ $BUILD_TYPE == "default" ]]; then cmake -G 'Unix Makefiles' .. -DCMAKE_BUILD_TYPE=Release -DNEKTAR_TEST_ALL=ON -DNEKTAR_BUILD_TIMINGS=ON -DNEKTAR_ERROR_ON_WARNINGS=OFF ..; elif [[ $BUILD_TYPE == "full" ]]; then cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DNEKTAR_FULL_DEBUG:BOOL=ON -DNEKTAR_TEST_ALL:BOOL=ON -DNEKTAR_BUILD_TIMINGS:BOOL=ON -DNEKTAR_USE_ARPACK:BOOL=ON -DNEKTAR_USE_FFTW:BOOL=ON -DNEKTAR_USE_MPI:BOOL=ON -DNEKTAR_USE_SCOTCH:BOOL=ON -DNEKTAR_USE_PETSC:BOOL=ON -DNEKTAR_USE_HDF5:BOOL=ON -DNEKTAR_USE_MESHGEN:BOOL=ON -DNEKTAR_USE_CCM:BOOL=ON -DNEKTAR_BUILD_PYTHON:BOOL=ON -DNEKTAR_TEST_USE_HOSTFILE=ON -DNEKTAR_ERROR_ON_WARNINGS=OFF ..; fi) && \
make -C build -j $NUM_CPUS all 2>&1 && \
make -C build -j $NUM_CPUS install && \
(cd build && ctest -j $NUM_CPUS --output-on-failure)
exit_code=$?
if [[ $exit_code -ne 0 ]]
then
[[ $OS_VERSION != "osx" ]] && rm -rf build/dist
exit $exit_code
fi
#!/bin/bash
rm -rf nektar/build/dist
tar czf nektar.tar.gz nektar
rm -rf nektar
Changelog
=========
v5.1.0
------
**Library**
- Refactored time integration code using factory pattern (!1034)
- Fix to preprocessor logic for boost with Visual Studio >= 2015 (!1115)
**CardiacEPSolver**
- Added additional parameter sets to Fenton-Karma model (!1119)
v5.0.1
------
**Library**
- Fix incorrect coordinate dimension used in history point filter (!1118)
v5.0.1
------
**CI**
- Switched to Gitlab CI (!1120, !1120, !1128, !1129)
v5.0.0
------
**Library**
......
......@@ -10,7 +10,7 @@ split up into a number of sections:
- [How to contribute](#how-to-contribute)
- [Submission checklist](#submission-checklist)
- [Git cheatsheet](#git-cheatsheet)
- [Testing and Buildbot](#testing-and-buildbot)
- [Testing and GitLab CI](#testing-and-gitlab)
- [Documentation](#documentation)
- [Formatting guidelines](#formatting-guidelines)
......@@ -51,9 +51,9 @@ project. It's a pretty simple process:
## Submission checklist
- Did you add regression tests (for fixes) or unit tests and/or normal tests for
new features?
- Have you run your branch through buildbot and do all the tests pass?
- Have you run your branch through GitLab CI and do all the tests pass?
- Have you fixed any new compiler warnings your code has introduced into the
compilation step for all of the Linux buildbots?
compilation step for all of the Linux CI environments?
- **unused parameters**: if these are genuinely needed (e.g. virtual functions
in a derived class, please use `boost::ignore_unused()` to mark as such.
- **switch case may fall-through**: for switch statements which
......@@ -105,7 +105,7 @@ commit, you can additionally use the `git gui` command to bring up a simple
interface. `git difftool` can also be used in combination with a GUI diff
viewer, to graphically view the output of `git diff`.
## Testing and Buildbot
## Testing and GitLab CI
Your new features or fixes should include tests that cover the code you've
added. There are numerous examples within the various `Tests` directory lying
within the source trees, and there is an example of writing `.tst` files for our
......@@ -114,29 +114,15 @@ tests, add them to the `CMakeLists.txt` file for the relevant solver, or to the
appropriate demos directory for library features in whatever directory you are
working in.
You should also test your branch on the
[Nektar++ buildbot](http://buildbot.nektar.info/), which will compile and test
the code against a number of Linux, Mac and Windows operating systems, both 32-
and 64-bit. If your tests don't pass, we can't merge the code into master.
You should also test your branch on the Nektar++ GitLab CI, which will compile
and test the code against a number of Linux, Mac and Windows operating
systems. If your tests don't pass, we can't merge the code into master.
When you submit a merge request testing on buildbot will happen automatically,
When you submit a merge request testing on GitLab CI will happen automatically,
unless you have marked the merge request as a work-in-progress (WIP: prefix).
Each time you push commits to a non-WIP merge request branch, it will also
trigger a build.
For WIP merge request branches, you can force a build on individual builders
using the buildbot web interface:
1. Go to the buildbot site and log in using the drop-down menu (top right).
2. Go to the console display and select the builder from the column headings on
which you would like to force test.
3. Select 'Force' from the top-right of the page.
4. Enter the details as required. If you're working on a fork, then the *Fork*
box should be changed to `username/nektar`.
5. Hit the *Start build* button.
6. Return to the *console* display to see progress. You can click on the
flashing indicator for your active build to see progress and output.
## Documentation
Nektar++ has a fairly comprehensive user guide and a developer guide that is
presently very incomplete. The following are rough guidelines for what you
......
FROM centos:%%OS_VERSION%%
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
ENV CENTOS_VERSION %%OS_VERSION%%
COPY docker/nektar-env/${CENTOS_VERSION}_default_packages.txt packages.txt
RUN yum install -y epel-release && \
yum install -y $(cat packages.txt) \
&& yum clean all
# openmpi installs to a non-standard location on centos7
# below env vars added to help out cmake
ENV LD_LIBRARY_PATH /usr/lib64/openmpi/lib/
ENV PATH /usr/lib64/openmpi/bin/:$PATH
RUN ln -s /usr/bin/ccache /usr/local/bin/cc && ln -s /usr/bin/ccache /usr/local/bin/c++
RUN groupadd nektar && useradd -m -g nektar nektar
USER nektar:nektar
RUN mkdir /home/nektar/nektar
WORKDIR /home/nektar/nektar
FROM %%REGISTRY%%:env-%%OS_VERSION%%-default
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
USER root
COPY docker/nektar-env/${CENTOS_VERSION}_full_packages.txt packages.txt
RUN yum install -y epel-release && \
yum install -y $(cat packages.txt) \
&& yum clean all
USER nektar:nektar
FROM debian:%%OS_VERSION%%-slim
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
ENV DEBIAN_VERSION %%OS_VERSION%%
COPY docker/nektar-env/${DEBIAN_VERSION}_default_packages.txt packages.txt
RUN echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION} non-free" > \
/etc/apt/sources.list.d/debian-non-free.list && \
apt-get update && \
apt-get install -y $(cat packages.txt) \
&& rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/bin/ccache /usr/local/bin/cc && ln -s /usr/bin/ccache /usr/local/bin/c++
RUN groupadd nektar && useradd -m -g nektar nektar
USER nektar:nektar
RUN mkdir /home/nektar/nektar
WORKDIR /home/nektar/nektar
FROM %%BASE_IMAGE%%:env-buster-default
USER root
COPY docker/nektar-env/buster_documentation_packages.txt packages.txt
RUN echo "deb http://deb.debian.org/debian buster non-free" > \
/etc/apt/sources.list.d/debian-non-free.list && \
apt-get update && \
apt-get install -y $(cat packages.txt) \
&& rm -rf /var/lib/apt/lists/*
USER nektar:nektar
FROM %%REGISTRY%%:env-%%OS_VERSION%%-default
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
USER root
COPY docker/nektar-env/${DEBIAN_VERSION}_full_packages.txt packages.txt
RUN echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION} non-free" > \
/etc/apt/sources.list.d/debian-non-free.list && \
apt-get update && \
apt-get install -y $(cat packages.txt) \
&& rm -rf /var/lib/apt/lists/*
USER nektar:nektar
FROM ubuntu:%%OS_VERSION%%
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
ENV UBUNTU_VERSION %%OS_VERSION%%
COPY docker/nektar-env/${UBUNTU_VERSION}_default_packages.txt packages.txt
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y $(cat packages.txt) \
&& rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/bin/ccache /usr/local/bin/cc && ln -s /usr/bin/ccache /usr/local/bin/c++
RUN groupadd nektar && useradd -m -g nektar nektar
USER nektar:nektar
RUN mkdir /home/nektar/nektar
WORKDIR /home/nektar/nektar
FROM %%REGISTRY%%:env-%%OS_VERSION%%-default
LABEL maintainer="Nektar++ Development Team <nektar-users@imperial.ac.uk>"
USER root
COPY docker/nektar-env/${UBUNTU_VERSION}_full_packages.txt packages.txt
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y $(cat packages.txt) \
&& rm -rf /var/lib/apt/lists/*
USER nektar:nektar
......@@ -24,3 +24,8 @@ or similar.
```sh
docker build -t nektarpp/nektar-env -f Dockerfile .
```
# Other environment images
The other dockerfiles for different operating systems and package lists are used
to provide environment images for the CI system. See .gitlab-ci.yml for details.
ccache
cmake
g++
libboost-filesystem-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-regex-dev
libboost-system-dev
libboost-thread-dev
liblapack-dev
libscotch-dev
libtinyxml-dev
zlib1g-dev
libarpack2-dev
libboost-numpy-dev
libboost-python-dev
libfftw3-dev
libhdf5-mpi-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
libptscotch-dev
libtet1.5-dev
libtriangle-dev
mpi-default-dev
petsc-dev
python-dev
python-numpy
rsh-client
build-essential
ccache
cmake
libboost-filesystem-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-regex-dev
libboost-system-dev
libboost-thread-dev
liblapack-dev
libscotch-dev
libtinyxml-dev
zlib1g-dev
cmake
doxygen
dvipng
graphviz
imagemagick
texlive-base
texlive-fonts-recommended
texlive-latex-extra
texlive-pstricks
texlive-science
libarpack2-dev
libboost-numpy-dev
libboost-python-dev
libfftw3-dev
libhdf5-dev
libhdf5-mpi-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
libptscotch-dev
libtet1.5-dev
libtriangle-dev
mpi-default-dev
petsc-dev
python-numpy
blas-devel
ccache
cmake
fftw-devel
gcc-c++
gcc-gfortran
lapack-devel
make
patch
scotch-devel
tinyxml-devel
zlib-devel
OCE-devel
arpack-devel
boost-devel
boost-python-devel
hdf5-openmpi-devel
numpy
openmpi-devel
petsc-devel
ptscotch-openmpi-devel
python-devel
scotch-devel
tetgen-devel
build-essential
ccache
cmake
libboost-filesystem-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-regex-dev
libboost-system-dev
libboost-thread-dev
liblapack-dev
libscotch-dev
libtinyxml-dev
zlib1g-dev
libarpack2-dev
libboost-python-dev
libfftw3-dev
libhdf5-dev
libhdf5-mpi-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
libptscotch-dev
libtet1.5-dev
libtriangle-dev
mpi-default-dev
petsc-dev
python-numpy
rsh-client
ccache
cmake
g++
libboost-filesystem-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-regex-dev
libboost-system-dev
libboost-thread-dev
liblapack-dev
libscotch-dev
libtinyxml-dev
zlib1g-dev
libarpack2-dev
libboost-python-dev
libfftw3-dev
libhdf5-mpi-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
libptscotch-dev
libtet1.5-dev
libtriangle-dev
mpi-default-dev
patch
petsc-dev
python-dev
python-numpy
rsh-client
ccache
cmake
g++
libboost-filesystem-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-regex-dev
libboost-system-dev
libboost-thread-dev
liblapack-dev
libscotch-dev
libtinyxml-dev
zlib1g-dev
libarpack2-dev
libboost-python-dev
libfftw3-dev
libhdf5-mpi-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
libptscotch-dev
libtet1.5-dev
libtriangle-dev
mpi-default-dev
patch
petsc-dev
python-dev
python-numpy
rsh-client
......@@ -239,35 +239,40 @@ time-integration schemes:
AdamsBashforthOrder1 & Adams-Bashforth Forward multi-step scheme of order 1\\
AdamsBashforthOrder2 & Adams-Bashforth Forward multi-step scheme of order 2\\
AdamsBashforthOrder3 & Adams-Bashforth Forward multi-step scheme of order 3\\
AdamsBashforthOrder4 & Adams-Bashforth Forward multi-step scheme of order 4\\
AdamsMoultonOrder1 & Adams-Moulton Forward multi-step scheme of order 1\\
AdamsMoultonOrder2 & Adams-Moulton Forward multi-step scheme of order 2\\
AdamsMoultonOrder3 & Adams-Moulton Forward multi-step scheme of order 3\\
AdamsMoultonOrder4 & Adams-Moulton Forward multi-step scheme of order 4\\
BDFImplicitOrder1 & BDF multi-step scheme of order 1 (implicit)\\
BDFImplicitOrder2 & BDF multi-step scheme of order 2 (implicit)\\
ClassicalRungeKutta4 & Runge-Kutta multi-stage scheme 4th order explicit (old name)\\
RungeKutta4 & Runge-Kutta multi-stage scheme 4th order explicit (new name for ClassicalRungeKutta4)\\
RungeKutta3\_SSP & Nonlinear SSP RungeKutta3 explicit\\
RungeKutta4 & Runge-Kutta multi-stage scheme 4th order explicit (new name for ClassicalRungeKutta4)\\
RungeKutta3\_SSP & Nonlinear SSP RungeKutta3 explicit\\
RungeKutta2\_ImprovedEuler & Improved RungeKutta2 explicit (old name meaning Heun's method)\\
RungeKutta2\_SSP & Nonlinear SSP RungeKutta2 explicit (surrogate for RungeKutta2\_ImprovedEuler)\\
RungeKutta2\_SSP & Nonlinear SSP RungeKutta2 explicit (surrogate for RungeKutta2\_ImprovedEuler)\\
RungeKutta2 & Classical RungeKutta2 method (new name for Midpoint)\\
Midpoint & Midpoint method (old name)\\
ForwardEuler & Forward-Euler scheme\\
BackwardEuler & Backward Euler scheme\\
BackwardEuler & Backward Euler scheme\\
IMEXOrder1 & IMEX 1st order scheme using Euler Backwards Euler
Forwards \\
IMEXOrder2 & IMEX 2nd order scheme using Backward Different Formula \&
Extrapolation\\
IMEXOrder3 & IMEX 3rd order scheme using Backward Different Formula \&
Extrapolation\\
Midpoint & Midpoint method (old name)\\
RungeKutta2 & Classical RungeKutta2 method (new name for Midpoint)\\
IMEXOrder4 & IMEX 4rd order scheme using Backward Different Formula \&
Extrapolation\\
DIRKOrder2 & Diagonally Implicit Runge-Kutta scheme of order 2\\
DIRKOrder3 & Diagonally Implicit Runge-Kutta scheme of order 3\\
CNAB & Crank-Nicolson-Adams-Bashforth Order 2 (CNAB)\\
IMEXGear & IMEX Gear Order 2\\
MCNAB & Modified Crank-Nicolson-Adams-Bashforth Order 2 (MCNAB)\\
IMEXdirk\_1\_1\_1 & Forward-Backward Euler IMEX DIRK(1,1,1)\\
IMEXdirk\_1\_2\_1 & Forward-Backward Euler IMEX DIRK(1,2,1)\\
IMEXdirk\_1\_2\_2 & Implicit-Explicit Midpoint IMEX DIRK(1,2,2)\\
IMEXdirk\_1\_1\_1 & Forward-Backward Euler, first order IMEX DIRK(1,1,1)\\
IMEXdirk\_1\_2\_1 & Forward-Backward Euler, first order IMEX DIRK(1,2,1)\\
IMEXdirk\_1\_2\_2 & Implicit-Explicit Midpoint, second order IMEX DIRK(1,2,2)\\
IMEXdirk\_2\_2\_2 & L-stable, two stage, second order IMEX DIRK(2,2,2)\\
IMEXdirk\_2\_3\_2 & L-stable, three stage, third order IMEX DIRK(3,4,3)\\
IMEXdirk\_2\_3\_2 & L-stable, two stage, second order IMEX DIRK(2,3,2)\\
IMEXdirk\_2\_3\_3 & L-stable, two stage, third order IMEX DIRK(2,3,3)\\
IMEXdirk\_3\_4\_3 & L-stable, three stage, third order IMEX DIRK(3,4,3)\\
IMEXdirk\_4\_4\_3 & L-stable, four stage, third order IMEX DIRK(4,4,3)\\
......
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 8</parameters>
<parameters>--dof 100 --timesteps 100 --method 8</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.10135</value>
<value tolerance="1e-12">0.0389723</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 5</parameters>
<parameters>--dof 100 --timesteps 100 --method 5</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.0616905</value>
<value tolerance="1e-12">0.00420771</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 6</parameters>
<parameters>--dof 100 --timesteps 100 --method 6</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.061634</value>
<value tolerance="1e-12">0.00429031</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 7</parameters>
<parameters>--dof 100 --timesteps 100 --method 7</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.499518</value>
<value tolerance="1e-12">0.508365</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 1</parameters>
<parameters>--dof 100 --timesteps 100 --method 1</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.224678</value>
<value tolerance="1e-12">0.242278</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 2</parameters>
<parameters>--dof 100 --timesteps 100 --method 2</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.0798986</value>
<value tolerance="1e-12">0.0133794</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 3</parameters>
<parameters>--dof 100 --timesteps 100 --method 3</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.0610636</value>
<value tolerance="1e-12">0.00516762</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 4</parameters>
<parameters>--dof 100 --timesteps 100 --method 4</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.0615357</value>
<value tolerance="1e-12">0.00438272</value>
</metric>
</metrics>
</test>
......@@ -2,10 +2,10 @@
<test>
<description>Test for time integration schemes</description>
<executable>TimeIntegrationDemo</executable>
<parameters>--points 100 --timesteps 100 --method 9</parameters>
<parameters>--dof 100 --timesteps 100 --method 9</parameters>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">0.134315</value>
<value tolerance="1e-12">0.0744875</value>
</metric>
</metrics>
</test>
......@@ -30,6 +30,15 @@
//
// Description: Collection of templated functions for vector mathematics
//
// Note: For those unfamiliar with the vector routines notation, it is
// reverse polish notation (RPN). For example:
//
// In the function "Vvtvp()", it is "Vvt" means vector vector times,
// which in infix notation is "v * v". So "Vvtvp" is:
//
// RPN: vector vector times vector plus
// Infix: ( vector * vector ) + vector
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_LIB_LIBUTILITIES_BASSICUTILS_VECTORMATH_HPP
......@@ -40,18 +49,14 @@
namespace Vmath
{
/***************** Math routines ***************/
/// \brief Fill a vector with a constant value
template<class T> LIB_UTILITIES_EXPORT void Fill( int n, const T alpha, T *x, const int incx );
/// \brief Generates a number from ~Normal(0,1)
template<class T> LIB_UTILITIES_EXPORT T ran2 (long* idum);
/// \brief Fills a vector with white noise.
template<class T> LIB_UTILITIES_EXPORT void FillWhiteNoise(
int n, const T eps, T *x, const int incx, int seed = 9999);
......@@ -136,37 +141,40 @@ namespace Vmath
T *y, const int incy);
/********** Triad routines ***********************/
/// \brief vvtvp (vector times vector plus vector): z = w*x + y
template<class T> LIB_UTILITIES_EXPORT void Vvtvp(int n,
const T *w, const int incw,
const T *x, const int incx,
const T *y, const int incy,
T *z, const int incz);
template<class T> LIB_UTILITIES_EXPORT void Vvtvp( int n,
const T *w, const int incw,
const T *x, const int incx,
const T *y, const int incy,
T *z, const int incz );
/// \brief vvtvm (vector times vector plus vector): z = w*x - y
template<class T> LIB_UTILITIES_EXPORT void Vvtvm(int n, const T *w, const int incw, const T *x,
const int incx, const T *y, const int incy,
T *z, const int incz);
/// \brief svtvp (scalar times vector plus vector): z = alpha*x + y
/// \brief Svtvp (scalar times vector plus vector): z = alpha*x + y
template<class T> LIB_UTILITIES_EXPORT void Svtvp(int n, const T alpha, const T *x,
const int incx, const T *y, const int incy,
T *z, const int incz);
/// \brief svtvp (scalar times vector plus vector): z = alpha*x - y
template<class T> LIB_UTILITIES_EXPORT void Svtvm(int n, const T alpha, const T *x,
const int incx, const T *y, const int incy,
T *z, const int incz);
/// \brief Svtvm (scalar times vector minus vector): z = alpha*x - y