Commit 8751f5ad authored by Pavel Burovskiy's avatar Pavel Burovskiy
Browse files

Merge branch 'master' into fix/remove-spblas

parents 05158add b9f0d3d9
......@@ -67,6 +67,8 @@ OPTION(NEKTAR_BUILD_UNIT_TESTS "Build unit tests." ON)
OPTION(NEKTAR_BUILD_TESTS "Build regression tests." ON)
OPTION(NEKTAR_BUILD_TIMINGS "Build benchmark timing codes." OFF)
OPTION(NEKTAR_TEST_ALL "Include full set of regression tests to this build." OFF)
# Build options
OPTION(NEKTAR_FULL_DEBUG "Enable Full Debugging." OFF)
MARK_AS_ADVANCED(NEKTAR_FULL_DEBUG)
......
......@@ -271,3 +271,11 @@ MACRO(ADD_NEKTAR_TEST name)
ADD_TEST(NAME ${dir}_${name}
COMMAND Tester ${CMAKE_CURRENT_SOURCE_DIR}/Tests/${name}.tst)
ENDMACRO(ADD_NEKTAR_TEST)
MACRO(ADD_NEKTAR_TEST_LENGTHY name)
IF (NEKTAR_TEST_ALL)
GET_FILENAME_COMPONENT(dir ${CMAKE_CURRENT_SOURCE_DIR} NAME)
ADD_TEST(NAME ${dir}_${name}
COMMAND Tester ${CMAKE_CURRENT_SOURCE_DIR}/Tests/${name}.tst)
ENDIF(NEKTAR_TEST_ALL)
ENDMACRO(ADD_NEKTAR_TEST_LENGTHY)
......@@ -107,7 +107,7 @@ ADD_NEKTAR_TEST(Helmholtz2D_CG_P7_Modes_curved_tri)
ADD_NEKTAR_TEST(Helmholtz2D_HDG_P7_Modes)
ADD_NEKTAR_TEST(Helmholtz2D_HDG_P7_Modes_AllBCs)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex)
ADD_NEKTAR_TEST_LENGTHY(Helmholtz3D_CG_Hex)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs_iter_ml)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs_iter_sc_cont)
......@@ -116,9 +116,9 @@ ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_iter_ml)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_Deformed)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Homo1D)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Homo1D)
ADD_NEKTAR_TEST_LENGTHY(Helmholtz3D_HDG_Homo1D)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Prism)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Hex_AllBCs)
ADD_NEKTAR_TEST_LENGTHY(Helmholtz3D_HDG_Hex_AllBCs)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Tet)
ADD_NEKTAR_TEST(LinearAdvDiffReact2D_P7_Modes)
......@@ -132,14 +132,14 @@ IF (NEKTAR_USE_MPI)
ADD_NEKTAR_TEST(Helmholtz2D_CG_P7_Modes_AllBCs_iter_ml_par3)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs_iter_ml_par3)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_iter_ml_par3)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs_xxt_sc_par3)
ADD_NEKTAR_TEST_LENGTHY(Helmholtz3D_CG_Hex_AllBCs_xxt_sc_par3)
#
# TODO: This test fails due to a bug with Dirichlet bnd conditions.
# To be resolved in a separate branch.
#
# ADD_NEKTAR_TEST(Helmholtz3D_CG_Tet_iter_global_par3)
ADD_NEKTAR_TEST(Helmholtz2D_HDG_P7_Modes_AllBCs_par2)
ADD_NEKTAR_TEST_LENGTHY(Helmholtz2D_HDG_P7_Modes_AllBCs_par2)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Prism_par2)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Hex_AllBCs_par2)
ENDIF (NEKTAR_USE_MPI)
......@@ -38,6 +38,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXOrder1::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXOrder1;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXOrder1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -52,6 +53,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXOrder2::v_InitObject()
{
m_intSteps = 2;
m_method = eIMEXOrder2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXOrder1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -68,6 +70,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXOrder3::v_InitObject()
{
m_intSteps = 3;
m_method = eIMEXOrder3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_3_4_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -86,6 +89,7 @@ namespace LibUtilities {
void TimeIntegrationForwardEuler::v_InitObject()
{
m_intSteps = 1;
m_method = eForwardEuler;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eForwardEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -99,6 +103,7 @@ namespace LibUtilities {
void TimeIntegrationBackwardEuler::v_InitObject()
{
m_intSteps = 1;
m_method = eBackwardEuler;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eBackwardEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -113,6 +118,7 @@ namespace LibUtilities {
void TimeIntegrationBDFImplicitOrder1::v_InitObject()
{
m_intSteps = 1;
m_method = eBDFImplicitOrder1;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eBDFImplicitOrder1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -127,6 +133,7 @@ namespace LibUtilities {
void TimeIntegrationBDFImplicitOrder2::v_InitObject()
{
m_intSteps = 2;
m_method = eBDFImplicitOrder2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eBackwardEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -143,6 +150,7 @@ namespace LibUtilities {
void TimeIntegrationRungeKutta2_ImprovedEuler::v_InitObject()
{
m_intSteps = 1;
m_method = eRungeKutta2_ImprovedEuler;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eRungeKutta2_ImprovedEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -157,6 +165,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_1_1_1::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_1_1_1;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_1_1_1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -171,6 +180,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_1_2_1::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_1_2_1;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_1_2_1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -185,6 +195,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_1_2_2::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_1_2_2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_1_2_2);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -199,6 +210,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_4_4_3::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_4_4_3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_4_4_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -213,6 +225,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_2_2_2::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_2_2_2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_2_2_2);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -227,6 +240,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_2_3_3::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_2_3_3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_2_3_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -241,6 +255,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_2_3_2::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_2_3_2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_2_3_2);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -255,6 +270,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXdirk_3_4_3::v_InitObject()
{
m_intSteps = 1;
m_method = eIMEXdirk_3_4_3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_3_4_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -269,6 +285,7 @@ namespace LibUtilities {
void TimeIntegrationDIRKOrder2::v_InitObject()
{
m_intSteps = 1;
m_method = eDIRKOrder2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eDIRKOrder2);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -282,6 +299,7 @@ namespace LibUtilities {
void TimeIntegrationDIRKOrder3::v_InitObject()
{
m_intSteps = 1;
m_method = eDIRKOrder3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eDIRKOrder3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -295,6 +313,7 @@ namespace LibUtilities {
void TimeIntegrationClassicalRungeKutta4::v_InitObject()
{
m_intSteps = 1;
m_method = eClassicalRungeKutta4;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eClassicalRungeKutta4);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -308,6 +327,7 @@ namespace LibUtilities {
void TimeIntegrationMidpoint::v_InitObject()
{
m_intSteps = 1;
m_method = eMidpoint;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eMidpoint);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -321,6 +341,7 @@ namespace LibUtilities {
void TimeIntegrationRungeKutta2_ModifiedEuler::v_InitObject()
{
m_intSteps = 1;
m_method = eRungeKutta2_ModifiedEuler;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eRungeKutta2_ModifiedEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -334,6 +355,7 @@ namespace LibUtilities {
void TimeIntegrationAdamsBashforthOrder2::v_InitObject()
{
m_intSteps = 2;
m_method = eAdamsBashforthOrder2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eForwardEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -349,6 +371,7 @@ namespace LibUtilities {
void TimeIntegrationAdamsBashforthOrder3::v_InitObject()
{
m_intSteps = 2;
m_method = eAdamsBashforthOrder3;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eForwardEuler);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -364,6 +387,7 @@ namespace LibUtilities {
void TimeIntegrationAdamsMoultonOrder2::v_InitObject()
{
m_intSteps = 2;
m_method = eAdamsMoultonOrder2;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXOrder1);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -379,6 +403,7 @@ namespace LibUtilities {
void TimeIntegrationIMEXGear::v_InitObject()
{
m_intSteps = 2;
m_method = eIMEXGear;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_2_2_2);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -394,6 +419,7 @@ namespace LibUtilities {
void TimeIntegrationCNAB::v_InitObject()
{
m_intSteps = 3;
m_method = eCNAB;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_3_4_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......@@ -411,6 +437,7 @@ namespace LibUtilities {
void TimeIntegrationMCNAB::v_InitObject()
{
m_intSteps = 3;
m_method = eMCNAB;
m_integrationScheme = std::vector<TimeIntegrationSchemeSharedPtr> (m_intSteps);
TimeIntegrationSchemeKey IntKey0(eIMEXdirk_3_4_3);
m_integrationScheme[0] = TimeIntegrationSchemeManager()[IntKey0];
......
......@@ -20,20 +20,22 @@ namespace Nektar {
typedef NekFactory<
std::string, TimeIntegrationWrapper
> TimeIntegrationWrapperFactory;
TimeIntegrationWrapperFactory& GetTimeIntegrationWrapperFactory();
LIB_UTILITIES_EXPORT TimeIntegrationWrapperFactory&
GetTimeIntegrationWrapperFactory();
typedef boost::shared_ptr<TimeIntegrationWrapper> TimeIntegrationWrapperSharedPtr;
class TimeIntegrationWrapper
{
public:
virtual ~TimeIntegrationWrapper() {}
LIB_UTILITIES_EXPORT virtual ~TimeIntegrationWrapper() {}
inline void InitObject()
LIB_UTILITIES_EXPORT inline void InitObject()
{
v_InitObject();
}
LIB_UTILITIES_EXPORT
TimeIntegrationSolutionSharedPtr InitializeScheme(
const NekDouble timestep,
TimeIntegrationScheme::ConstDoubleArray &y_0,
......@@ -43,6 +45,7 @@ namespace Nektar {
return m_integrationScheme[m_intSteps-1]->InitializeScheme(timestep, y_0, time, op);
}
LIB_UTILITIES_EXPORT
TimeIntegrationScheme::ConstDoubleArray&
TimeIntegrate(
const int timestep,
......@@ -53,11 +56,13 @@ namespace Nektar {
return m_integrationScheme[min(timestep,m_intSteps-1)]->TimeIntegrate(delta_t, solvector, op);
}
LIB_UTILITIES_EXPORT
TimeIntegrationMethod GetIntegrationMethod()
{
return m_method;
}
LIB_UTILITIES_EXPORT
unsigned int GetIntegrationSteps()
{
return m_intSteps;
......
This diff is collapsed.
///////////////////////////////////////////////////////////////////////////////
//
// File ADR2DManifold.h
//
// 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).
//
// License for the specific language governing rights and limitations under
// 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: Basic ADR2DManifold definition
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_SOLVERS_ADVECTIONDIFFUSIONREACTION_ADVECTIONDIFFUSIONREACTION_H
#define NEKTAR_SOLVERS_ADVECTIONDIFFUSIONREACTION_ADVECTIONDIFFUSIONREACTION_H
#include <SolverUtils/EquationSystem.h>
#include <LibUtilities/TimeIntegration/TimeIntegrationScheme.h>
#include <LibUtilities/BasicUtils/SessionReader.h>
using namespace Nektar::SolverUtils;
namespace Nektar
{
enum EquationType
{
eNoEquationType,
eUnsteadyAdvection,
eUnsteadyDiffusion,
eUnsteadyDiffusionReaction,
eNonlinearMorphogenensis,
eFHNtesttype1,
eFHNMONO,
eAlievPanfilov,
eBarkley,
eEquationTypeSize,
};
// Keep this consistent with the enums in EquationType.
const std::string kEquationTypeStr[] =
{
"NoType",
"UnsteadyAdvection",
"UnsteadyDiffusion",
"UnsteadyDiffusionReaction",
"NonlinearMorphogenensis",
"FHNtesttype1",
"FHNMONO",
"AlievPanfilov",
"Barkley"
};
/**
* \brief This class is the base class for the development of solvers.
*
* It is basically a class handling vector valued fields where every field is
* a DisContField2D class
*/
class ADR2DManifold: public EquationSystem
{
public:
/**
* Default constructor.
*
*/
// ADR2DManifold();
/**
* Constructor.
* /param
*
*
*/
ADR2DManifold(LibUtilities::SessionReaderSharedPtr& pSession);
EquationType GetEquationType(void)
{
return m_equationType;
}
bool GetExplicitAdvection(void)
{
return m_explicitAdvection;
}
bool GetExplicitDiffusion(void)
{
return m_explicitDiffusion;
}
bool GetExplicitReaction(void)
{
return m_explicitReaction;
}
LibUtilities::TimeIntegrationMethod GetTimeIntMethod(void)
{
return m_timeIntMethod;
}
inline int Getinitialwavetype(void)
{
return m_initialwavetype;
}
inline int GetUsedirDeriv(void)
{
return m_UseDirDeriv;
}
// Return true if equation is a steady state problem
void WeakDGAdvectionDir(const Array<OneD, Array<OneD, NekDouble> >& InField,
Array<OneD, Array<OneD, NekDouble> >& OutField,
bool NumericalFluxIncludesNormal = true,
bool InFieldIsInPhysSpace = false, int nvariables = 0);
void WeakDGAdvectionDir(const Array<OneD, Array<OneD, NekDouble> >& InField,
const Array<OneD, Array<OneD, NekDouble> >& dirForcing,
Array<OneD, Array<OneD, NekDouble> >& OutField,
bool NumericalFluxIncludesNormal = true,
bool InFieldIsInPhysSpace = false, int nvariables = 0);
void WeakDirectionalDerivative(const Array<OneD, NekDouble> &physfield,
const Array<OneD, Array<OneD, NekDouble> > &dirForcing,
Array<OneD, NekDouble> &outarray);
void MGBoundaryCondtions(int bcRegion, int cnt, NekDouble time);
void WallBoundary2D(const int bcRegion, const int cnt,
const Array<OneD, const Array<OneD, NekDouble> >&inarray);
void SetUSERDEFINEDInitialConditions(const int Readfntype, bool SetRestingState = true, NekDouble initialtime=0.0);
void EvaluateUSERDEFINEDExactSolution(unsigned int field, Array<OneD, NekDouble> &outfield,
const NekDouble time, const int Readfntype);
NekDouble USERDEFINEDError(int field, const int type, const int Readfntype = 0,
Array<OneD,NekDouble> &exactsoln = NullNekDouble1DArray);
void SetUpTangentialVectors();
void GetFluxVector(const int i, Array<OneD, Array<OneD, NekDouble> >&physfield, Array<OneD, Array<OneD, NekDouble> >&flux);
void GetFluxVector(const int i, const int j, Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &flux);
void NumericalFlux(Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &numflux);
void NumericalFluxdir(Array<OneD, Array<OneD, NekDouble> > &physfield,
const Array<OneD, Array<OneD, NekDouble> > &dirForcing,
Array<OneD, Array<OneD, NekDouble> > &numflux);
void NumericalFlux(Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &numfluxX,
Array<OneD, Array<OneD, NekDouble> > &numfluxY);
void NumFluxforScalar(Array<OneD, Array<OneD, NekDouble> > &ufield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &uflux);
void NumFluxforVector(Array<OneD, Array<OneD, NekDouble> > &ufield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &qfield,
Array<OneD, Array<OneD, NekDouble> > &qflux);
NekDouble AdvectionSphere(const NekDouble x0j, const NekDouble x1j,
const NekDouble x2j, const NekDouble time);
NekDouble Morphogenesis(const int field, const NekDouble x0j, const NekDouble x1j,
const NekDouble x2j, const NekDouble time);
void WeakPenaltyforScalar(const int var,
const Array<OneD, const NekDouble> &physfield,
Array<OneD, NekDouble> &penaltyflux,
NekDouble time=0.0);
void WeakPenaltyforVector(const int var,
const int dir,
const Array<OneD, const NekDouble> &physfield,
Array<OneD, NekDouble> &penaltyflux,
NekDouble C11,
NekDouble time=0.0);
void ODErhs(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeReaction(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeLinearMGReaction(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeNonlinearMorphoReaction(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeReactionFHNtest1(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeReactionFHNmono(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeReactionAP(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEeReactionBarkley(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
const NekDouble time);
void ODEhelmSolve(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
NekDouble time,
NekDouble lambda);
void ODEhelmSolveFHNtest1(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
NekDouble time,
NekDouble lambda);
void ODEhelmSolveFHNmono(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
NekDouble time,
NekDouble lambda);
void ODEhelmSolveAP(const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
NekDouble time,
NekDouble lambda);
void GeneralTimeIntegration(int nsteps,
LibUtilities::TimeIntegrationMethod IntMethod,
LibUtilities::TimeIntegrationSchemeOperators ode);
void SolveHelmholtz(const int indx, const NekDouble kappa, const int m_UseDirDeriv = 1);
void PlotTangentialVectorMap();
void Getrestingstate(const NekDouble epsilon, const NekDouble beta,
Array<OneD, NekDouble> rstates);
void Summary(std::ostream &out);
void AdditionalSessionSummary(std::ostream &out);
protected:
int m_initialwavetype; ///< Type of function for initial condition and exact solutions
NekDouble m_duration;
int m_UseDirDeriv;
int m_Anisotropy;