Nektar++
Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
Nektar::SolverUtils::UnsteadySystem Class Reference

Base class for unsteady solvers. More...

#include <UnsteadySystem.h>

Inheritance diagram for Nektar::SolverUtils::UnsteadySystem:
[legend]

Public Member Functions

virtual SOLVER_UTILS_EXPORT ~UnsteadySystem ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep (const Array< OneD, const Array< OneD, NekDouble >> &inarray)
 Calculate the larger time-step mantaining the problem stable. More...
 
SOLVER_UTILS_EXPORT void SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
- Public Member Functions inherited from Nektar::SolverUtils::EquationSystem
virtual SOLVER_UTILS_EXPORT ~EquationSystem ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void SetUpTraceNormals (void)
 
SOLVER_UTILS_EXPORT void InitObject (bool DeclareField=true)
 Initialises the members of this object. More...
 
SOLVER_UTILS_EXPORT void DoInitialise ()
 Perform any initialisation necessary before solving the problem. More...
 
SOLVER_UTILS_EXPORT void DoSolve ()
 Solve the problem. More...
 
SOLVER_UTILS_EXPORT void TransCoeffToPhys ()
 Transform from coefficient to physical space. More...
 
SOLVER_UTILS_EXPORT void TransPhysToCoeff ()
 Transform from physical to coefficient space. More...
 
SOLVER_UTILS_EXPORT void Output ()
 Perform output operations after solve. More...
 
SOLVER_UTILS_EXPORT NekDouble LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Linf error computation. More...
 
SOLVER_UTILS_EXPORT std::string GetSessionName ()
 Get Session name. More...
 
template<class T >
std::shared_ptr< T > as ()
 
SOLVER_UTILS_EXPORT void ResetSessionName (std::string newname)
 Reset Session name. More...
 
SOLVER_UTILS_EXPORT LibUtilities::SessionReaderSharedPtr GetSession ()
 Get Session name. More...
 
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr GetPressure ()
 Get pressure field if available. More...
 
SOLVER_UTILS_EXPORT void ExtraFldOutput (std::vector< Array< OneD, NekDouble >> &fieldcoeffs, std::vector< std::string > &variables)
 
SOLVER_UTILS_EXPORT void PrintSummary (std::ostream &out)
 Print a summary of parameters and solver characteristics. More...
 
SOLVER_UTILS_EXPORT void SetLambda (NekDouble lambda)
 Set parameter m_lambda. More...
 
SOLVER_UTILS_EXPORT SessionFunctionSharedPtr GetFunction (std::string name, const MultiRegions::ExpListSharedPtr &field=MultiRegions::NullExpListSharedPtr, bool cache=false)
 Get a SessionFunction by name. More...
 
SOLVER_UTILS_EXPORT void SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 Initialise the data in the dependent fields. More...
 
SOLVER_UTILS_EXPORT void EvaluateExactSolution (int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 Evaluates an exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false)
 Compute the L2 error between fields and a given exact solution. More...
 
SOLVER_UTILS_EXPORT NekDouble L2Error (unsigned int field, bool Normalised=false)
 Compute the L2 error of the fields. More...
 
SOLVER_UTILS_EXPORT Array< OneD, NekDoubleErrorExtraPoints (unsigned int field)
 Compute error (L2 and L_inf) over an larger set of quadrature points return [L2 Linf]. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n)
 Write checkpoint file of m_fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_Output (const int n, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble >> &fieldcoeffs, std::vector< std::string > &variables)
 Write checkpoint file of custom data fields. More...
 
SOLVER_UTILS_EXPORT void Checkpoint_BaseFlow (const int n)
 Write base flow file of m_fields. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname)
 Write field data to the given filename. More...
 
SOLVER_UTILS_EXPORT void WriteFld (const std::string &outname, MultiRegions::ExpListSharedPtr &field, std::vector< Array< OneD, NekDouble >> &fieldcoeffs, std::vector< std::string > &variables)
 Write input fields to the given filename. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
 Input field data from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFldToMultiDomains (const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const int ndomains)
 Input field data from the given file to multiple domains. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, std::vector< std::string > &fieldStr, Array< OneD, Array< OneD, NekDouble >> &coeffs)
 Output a field. Input field data into array from the given file. More...
 
SOLVER_UTILS_EXPORT void ImportFld (const std::string &infile, MultiRegions::ExpListSharedPtr &pField, std::string &pFieldName)
 Output a field. Input field data into ExpList from the given file. More...
 
SOLVER_UTILS_EXPORT void SessionSummary (SummaryList &vSummary)
 Write out a session summary. More...
 
SOLVER_UTILS_EXPORT Array< OneD, MultiRegions::ExpListSharedPtr > & UpdateFields ()
 
SOLVER_UTILS_EXPORT LibUtilities::FieldMetaDataMapUpdateFieldMetaDataMap ()
 Get hold of FieldInfoMap so it can be updated. More...
 
SOLVER_UTILS_EXPORT NekDouble GetFinalTime ()
 Return final time. More...
 
SOLVER_UTILS_EXPORT int GetNcoeffs ()
 
SOLVER_UTILS_EXPORT int GetNcoeffs (const int eid)
 
SOLVER_UTILS_EXPORT int GetNumExpModes ()
 
SOLVER_UTILS_EXPORT const Array< OneD, int > GetNumExpModesPerExp ()
 
SOLVER_UTILS_EXPORT int GetNvariables ()
 
SOLVER_UTILS_EXPORT const std::string GetVariable (unsigned int i)
 
SOLVER_UTILS_EXPORT int GetTraceTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTraceNpoints ()
 
SOLVER_UTILS_EXPORT int GetExpSize ()
 
SOLVER_UTILS_EXPORT int GetPhys_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetCoeff_Offset (int n)
 
SOLVER_UTILS_EXPORT int GetTotPoints ()
 
SOLVER_UTILS_EXPORT int GetTotPoints (int n)
 
SOLVER_UTILS_EXPORT int GetNpoints ()
 
SOLVER_UTILS_EXPORT int GetSteps ()
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep ()
 
SOLVER_UTILS_EXPORT void CopyFromPhysField (const int i, Array< OneD, NekDouble > &output)
 
SOLVER_UTILS_EXPORT void CopyToPhysField (const int i, const Array< OneD, const NekDouble > &input)
 
SOLVER_UTILS_EXPORT void SetSteps (const int steps)
 
SOLVER_UTILS_EXPORT void ZeroPhysFields ()
 
SOLVER_UTILS_EXPORT void FwdTransFields ()
 
SOLVER_UTILS_EXPORT void SetModifiedBasis (const bool modbasis)
 
SOLVER_UTILS_EXPORT int GetCheckpointNumber ()
 
SOLVER_UTILS_EXPORT void SetCheckpointNumber (int num)
 
SOLVER_UTILS_EXPORT int GetCheckpointSteps ()
 
SOLVER_UTILS_EXPORT void SetCheckpointSteps (int num)
 
SOLVER_UTILS_EXPORT int GetInfoSteps ()
 
SOLVER_UTILS_EXPORT void SetInfoSteps (int num)
 
SOLVER_UTILS_EXPORT int GetPararealIterationNumber ()
 
SOLVER_UTILS_EXPORT void SetPararealIterationNumber (int num)
 
SOLVER_UTILS_EXPORT bool GetUseInitialCondition ()
 
SOLVER_UTILS_EXPORT void SetUseInitialCondition (bool num)
 
SOLVER_UTILS_EXPORT Array< OneD, const Array< OneD, NekDouble > > GetTraceNormals ()
 
SOLVER_UTILS_EXPORT void SetTime (const NekDouble time)
 
SOLVER_UTILS_EXPORT void SetTimeStep (const NekDouble timestep)
 
SOLVER_UTILS_EXPORT void SetInitialStep (const int step)
 
SOLVER_UTILS_EXPORT void SetBoundaryConditions (NekDouble time)
 Evaluates the boundary conditions at the given time. More...
 
virtual SOLVER_UTILS_EXPORT bool v_NegatedOp ()
 Virtual function to identify if operator is negated in DoSolve. More...
 
SOLVER_UTILS_EXPORT bool ParallelInTime ()
 Check if solver use Parallel-in-Time. More...
 

Public Attributes

NekDouble m_cflSafetyFactor
 CFL safety factor (comprise between 0 to 1). More...
 
NekDouble m_cflNonAcoustic
 
NekDouble m_CFLGrowth
 CFL growth rate. More...
 
NekDouble m_CFLEnd
 maximun cfl in cfl growth More...
 

Static Public Attributes

static std::string cmdSetStartTime
 
static std::string cmdSetStartChkNum
 

Protected Member Functions

SOLVER_UTILS_EXPORT UnsteadySystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 Initialises UnsteadySystem class members. More...
 
virtual SOLVER_UTILS_EXPORT void v_InitObject (bool DeclareField=true) override
 Init object for UnsteadySystem class. More...
 
SOLVER_UTILS_EXPORT NekDouble MaxTimeStepEstimator ()
 Get the maximum timestep estimator for cfl control. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoSolve () override
 Solves an unsteady problem. More...
 
virtual SOLVER_UTILS_EXPORT void v_DoInitialise () override
 Sets up initial conditions. More...
 
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary (SummaryList &s) override
 Print a summary of time stepping parameters. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_GetTimeStep (const Array< OneD, const Array< OneD, NekDouble >> &inarray)
 Return the timestep to be used for the next step in the time-marching loop. More...
 
virtual SOLVER_UTILS_EXPORT bool v_PreIntegrate (int step)
 
virtual SOLVER_UTILS_EXPORT bool v_PostIntegrate (int step)
 
virtual SOLVER_UTILS_EXPORT bool v_RequireFwdTrans ()
 
virtual SOLVER_UTILS_EXPORT void v_SteadyStateResidual (int step, Array< OneD, NekDouble > &L2)
 
SOLVER_UTILS_EXPORT void CheckForRestartTime (NekDouble &time, int &nchk)
 
SOLVER_UTILS_EXPORT void SVVVarDiffCoeff (const Array< OneD, Array< OneD, NekDouble >> vel, StdRegions::VarCoeffMap &varCoeffMap)
 Evaluate the SVV diffusion coefficient according to Moura's paper where it should proportional to h time velocity. More...
 
virtual SOLVER_UTILS_EXPORT bool v_UpdateTimeStepCheck ()
 
SOLVER_UTILS_EXPORT void DoDummyProjection (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
 Perform dummy projection. More...
 
- Protected Member Functions inherited from Nektar::SolverUtils::EquationSystem
SOLVER_UTILS_EXPORT EquationSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
 Initialises EquationSystem class members. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
 Virtual function for the L_inf error computation between fields and a given exact solution. More...
 
virtual SOLVER_UTILS_EXPORT NekDouble v_L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false)
 Virtual function for the L_2 error computation between fields and a given exact solution. More...
 
virtual SOLVER_UTILS_EXPORT void v_TransCoeffToPhys ()
 Virtual function for transformation to physical space. More...
 
virtual SOLVER_UTILS_EXPORT void v_TransPhysToCoeff ()
 Virtual function for transformation to coefficient space. More...
 
virtual SOLVER_UTILS_EXPORT void v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 
virtual SOLVER_UTILS_EXPORT void v_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 
virtual SOLVER_UTILS_EXPORT void v_Output (void)
 
virtual SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr v_GetPressure (void)
 
virtual SOLVER_UTILS_EXPORT void v_ExtraFldOutput (std::vector< Array< OneD, NekDouble >> &fieldcoeffs, std::vector< std::string > &variables)
 

Protected Attributes

int m_abortSteps
 Number of steps between checks for abort conditions. More...
 
int m_filtersInfosteps
 Number of time steps between outputting filters information. More...
 
int m_nanSteps
 
LibUtilities::TimeIntegrationSchemeSharedPtr m_intScheme
 Wrapper to the time integration scheme. More...
 
LibUtilities::TimeIntegrationSchemeOperators m_ode
 The time integration scheme operators to use. More...
 
NekDouble m_epsilon
 
bool m_explicitDiffusion
 Indicates if explicit or implicit treatment of diffusion is used. More...
 
bool m_explicitAdvection
 Indicates if explicit or implicit treatment of advection is used. More...
 
bool m_explicitReaction
 Indicates if explicit or implicit treatment of reaction is used. More...
 
bool m_homoInitialFwd
 Flag to determine if simulation should start in homogeneous forward transformed state. More...
 
NekDouble m_steadyStateTol
 Tolerance to which steady state should be evaluated at. More...
 
int m_steadyStateSteps
 Check for steady state at step interval. More...
 
NekDouble m_steadyStateRes = 1.0
 
NekDouble m_steadyStateRes0 = 1.0
 
Array< OneD, Array< OneD, NekDouble > > m_previousSolution
 Storage for previous solution for steady-state check. More...
 
std::ofstream m_errFile
 
std::vector< int > m_intVariables
 
std::vector< std::pair< std::string, FilterSharedPtr > > m_filters
 
NekDouble m_filterTimeWarning
 Number of time steps between outputting status information. More...
 
NekDouble m_TimeIntegLambda = 0.0
 coefff of spacial derivatives(rhs or m_F in GLM) in calculating the residual of the whole equation(used in unsteady time integrations) More...
 
bool m_flagImplicitItsStatistics
 
bool m_flagImplicitSolver = false
 
Array< OneD, NekDoublem_magnitdEstimat
 estimate the magnitude of each conserved varibles More...
 
Array< OneD, NekDoublem_locTimeStep
 local time step(notice only for jfnk other see m_cflSafetyFactor) More...
 
NekDouble m_inArrayNorm = -1.0
 
int m_TotLinItePerStep = 0
 
int m_StagesPerStep = 1
 
bool m_flagUpdatePreconMat
 
int m_maxLinItePerNewton
 
int m_TotNewtonIts = 0
 
int m_TotLinIts = 0
 
int m_TotImpStages = 0
 
bool m_CalcPhysicalAV = true
 flag to update artificial viscosity More...
 
- Protected Attributes inherited from Nektar::SolverUtils::EquationSystem
LibUtilities::CommSharedPtr m_comm
 Communicator. More...
 
bool m_verbose
 
LibUtilities::SessionReaderSharedPtr m_session
 The session reader. More...
 
std::map< std::string, SolverUtils::SessionFunctionSharedPtrm_sessionFunctions
 Map of known SessionFunctions. More...
 
LibUtilities::FieldIOSharedPtr m_fld
 Field input/output. More...
 
Array< OneD, MultiRegions::ExpListSharedPtrm_fields
 Array holding all dependent variables. More...
 
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
 Pointer to boundary conditions object. More...
 
SpatialDomains::MeshGraphSharedPtr m_graph
 Pointer to graph defining mesh. More...
 
std::string m_sessionName
 Name of the session. More...
 
NekDouble m_time
 Current time of simulation. More...
 
int m_initialStep
 Number of the step where the simulation should begin. More...
 
NekDouble m_fintime
 Finish time of the simulation. More...
 
NekDouble m_timestep
 Time step size. More...
 
NekDouble m_timestepMax = -1.0
 Time step size. More...
 
NekDouble m_lambda
 Lambda constant in real system if one required. More...
 
NekDouble m_checktime
 Time between checkpoints. More...
 
NekDouble m_lastCheckTime
 
NekDouble m_TimeIncrementFactor
 
int m_nchk
 Number of checkpoints written so far. More...
 
int m_steps
 Number of steps to take. More...
 
int m_checksteps
 Number of steps between checkpoints. More...
 
int m_infosteps
 Number of time steps between outputting status information. More...
 
int m_pararealIter
 Number of parareal time iteration. More...
 
int m_spacedim
 Spatial dimension (>= expansion dim). More...
 
int m_expdim
 Expansion dimension. More...
 
bool m_singleMode
 Flag to determine if single homogeneous mode is used. More...
 
bool m_halfMode
 Flag to determine if half homogeneous mode is used. More...
 
bool m_multipleModes
 Flag to determine if use multiple homogenenous modes are used. More...
 
bool m_useFFT
 Flag to determine if FFT is used for homogeneous transform. More...
 
bool m_useInitialCondition
 Flag to determine if IC are used. More...
 
bool m_homogen_dealiasing
 Flag to determine if dealiasing is used for homogeneous simulations. More...
 
bool m_specHP_dealiasing
 Flag to determine if dealisising is usde for the Spectral/hp element discretisation. More...
 
enum MultiRegions::ProjectionType m_projectionType
 Type of projection; e.g continuous or discontinuous. More...
 
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
 Array holding trace normals for DG simulations in the forwards direction. More...
 
Array< OneD, bool > m_checkIfSystemSingular
 Flag to indicate if the fields should be checked for singularity. More...
 
LibUtilities::FieldMetaDataMap m_fieldMetaDataMap
 Map to identify relevant solver info to dump in output fields. More...
 
Array< OneD, NekDoublem_movingFrameVelsxyz
 Moving frame of reference velocities. More...
 
Array< OneD, NekDoublem_movingFrameTheta
 Moving frame of reference angles with respect to the. More...
 
boost::numeric::ublas::matrix< NekDoublem_movingFrameProjMat
 Projection matrix for transformation between inertial and moving. More...
 
int m_NumQuadPointsError
 Number of Quadrature points used to work out the error. More...
 
enum HomogeneousType m_HomogeneousType
 
NekDouble m_LhomX
 physical length in X direction (if homogeneous) More...
 
NekDouble m_LhomY
 physical length in Y direction (if homogeneous) More...
 
NekDouble m_LhomZ
 physical length in Z direction (if homogeneous) More...
 
int m_npointsX
 number of points in X direction (if homogeneous) More...
 
int m_npointsY
 number of points in Y direction (if homogeneous) More...
 
int m_npointsZ
 number of points in Z direction (if homogeneous) More...
 
int m_HomoDirec
 number of homogenous directions More...
 

Private Member Functions

void InitializeSteadyState ()
 
SOLVER_UTILS_EXPORT void AppendOutput1D (Array< OneD, Array< OneD, NekDouble >> &solution1D)
 Print the solution at each solution point in a txt file. More...
 
bool CheckSteadyState (int step)
 Calculate whether the system has reached a steady state by observing residuals to a user-defined tolerance. More...
 
bool CheckSteadyState (int step, NekDouble totCPUTime)
 

Additional Inherited Members

- Protected Types inherited from Nektar::SolverUtils::EquationSystem
enum  HomogeneousType { eHomogeneous1D , eHomogeneous2D , eHomogeneous3D , eNotHomogeneous }
 Parameter for homogeneous expansions. More...
 
- Static Protected Attributes inherited from Nektar::SolverUtils::EquationSystem
static std::string equationSystemTypeLookupIds []
 

Detailed Description

Base class for unsteady solvers.

Provides the underlying timestepping framework for unsteady solvers including the general timestepping routines. This class is not intended to be directly instantiated, but rather is a base class on which to define unsteady solvers.

For details on implementing unsteady solvers see sectionADRSolverModuleImplementation here

Definition at line 48 of file UnsteadySystem.h.

Constructor & Destructor Documentation

◆ ~UnsteadySystem()

Nektar::SolverUtils::UnsteadySystem::~UnsteadySystem ( )
virtual

Destructor.

Destructor for the class UnsteadyAdvection.

Definition at line 176 of file UnsteadySystem.cpp.

177 {
178 }

◆ UnsteadySystem()

Nektar::SolverUtils::UnsteadySystem::UnsteadySystem ( const LibUtilities::SessionReaderSharedPtr pSession,
const SpatialDomains::MeshGraphSharedPtr pGraph 
)
protected

Initialises UnsteadySystem class members.

Processes SolverInfo parameters from the session file and sets up timestepping-specific code.

Parameters
pSessionSession object to read parameters from.

Definition at line 68 of file UnsteadySystem.cpp.

71  : EquationSystem(pSession, pGraph)
72 
73 {
74 }
SOLVER_UTILS_EXPORT EquationSystem(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Initialises EquationSystem class members.

Member Function Documentation

◆ AppendOutput1D()

void Nektar::SolverUtils::UnsteadySystem::AppendOutput1D ( Array< OneD, Array< OneD, NekDouble >> &  solution1D)
private

Print the solution at each solution point in a txt file.

Stores the solution in a file for 1D problems only. This method has been implemented to facilitate the post-processing for 1D problems.

Definition at line 639 of file UnsteadySystem.cpp.

641 {
642  // Coordinates of the quadrature points in the real physical space
643  Array<OneD, NekDouble> x(GetNpoints());
644  Array<OneD, NekDouble> y(GetNpoints());
645  Array<OneD, NekDouble> z(GetNpoints());
646  m_fields[0]->GetCoords(x, y, z);
647 
648  // Print out the solution in a txt file
649  ofstream outfile;
650  outfile.open("solution1D.txt");
651  for (int i = 0; i < GetNpoints(); i++)
652  {
653  outfile << scientific << setw(17) << setprecision(16) << x[i] << " "
654  << solution1D[0][i] << endl;
655  }
656  outfile << endl << endl;
657  outfile.close();
658 }
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
SOLVER_UTILS_EXPORT int GetNpoints()

References Nektar::SolverUtils::EquationSystem::GetNpoints(), and Nektar::SolverUtils::EquationSystem::m_fields.

Referenced by v_DoSolve().

◆ CheckForRestartTime()

void Nektar::SolverUtils::UnsteadySystem::CheckForRestartTime ( NekDouble time,
int &  nchk 
)
protected

Definition at line 660 of file UnsteadySystem.cpp.

661 {
662  if (m_session->DefinesFunction("InitialConditions"))
663  {
664  for (int i = 0; i < m_fields.size(); ++i)
665  {
667 
668  vType = m_session->GetFunctionType("InitialConditions",
669  m_session->GetVariable(i));
670 
671  if (vType == LibUtilities::eFunctionTypeFile)
672  {
673  std::string filename = m_session->GetFunctionFilename(
674  "InitialConditions", m_session->GetVariable(i));
675 
676  fs::path pfilename(filename);
677 
678  // redefine path for parallel file which is in directory
679  if (fs::is_directory(pfilename))
680  {
681  fs::path metafile("Info.xml");
682  fs::path fullpath = pfilename / metafile;
683  filename = LibUtilities::PortablePath(fullpath);
684  }
687  fld->ImportFieldMetaData(filename, m_fieldMetaDataMap);
688 
689  // check to see if time defined
691  {
692  auto iter = m_fieldMetaDataMap.find("Time");
693  if (iter != m_fieldMetaDataMap.end())
694  {
695  time = boost::lexical_cast<NekDouble>(iter->second);
696  }
697 
698  iter = m_fieldMetaDataMap.find("ChkFileNum");
699  if (iter != m_fieldMetaDataMap.end())
700  {
701  nchk = boost::lexical_cast<NekDouble>(iter->second);
702  }
703  }
704 
705  break;
706  }
707  }
708  }
709  if (m_session->DefinesCmdLineArgument("set-start-time"))
710  {
711  time = boost::lexical_cast<NekDouble>(
712  m_session->GetCmdLineArgument<std::string>("set-start-time")
713  .c_str());
714  }
715  if (m_session->DefinesCmdLineArgument("set-start-chknumber"))
716  {
717  nchk = boost::lexical_cast<int>(
718  m_session->GetCmdLineArgument<std::string>("set-start-chknumber"));
719  }
720  ASSERTL0(time >= 0 && nchk >= 0,
721  "Starting time and checkpoint number should be >= 0");
722 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:215
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
Definition: FieldIO.cpp:226
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
LibUtilities::FieldMetaDataMap m_fieldMetaDataMap
Map to identify relevant solver info to dump in output fields.
std::shared_ptr< FieldIO > FieldIOSharedPtr
Definition: FieldIO.h:327
std::string PortablePath(const boost::filesystem::path &path)
create portable path on different platforms for boost::filesystem path
Definition: FileSystem.cpp:45
static FieldMetaDataMap NullFieldMetaDataMap
Definition: FieldIO.h:53

References ASSERTL0, Nektar::LibUtilities::FieldIO::CreateForFile(), Nektar::LibUtilities::eFunctionTypeFile, Nektar::SolverUtils::EquationSystem::m_fieldMetaDataMap, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::EquationSystem::m_session, Nektar::LibUtilities::NullFieldMetaDataMap, and Nektar::LibUtilities::PortablePath().

Referenced by v_DoInitialise().

◆ CheckSteadyState() [1/2]

bool Nektar::SolverUtils::UnsteadySystem::CheckSteadyState ( int  step)
private

Calculate whether the system has reached a steady state by observing residuals to a user-defined tolerance.

Definition at line 844 of file UnsteadySystem.cpp.

845 {
846  return CheckSteadyState(step, 0.0);
847 }
bool CheckSteadyState(int step)
Calculate whether the system has reached a steady state by observing residuals to a user-defined tole...

Referenced by v_DoSolve().

◆ CheckSteadyState() [2/2]

bool Nektar::SolverUtils::UnsteadySystem::CheckSteadyState ( int  step,
NekDouble  totCPUTime 
)
private

Definition at line 849 of file UnsteadySystem.cpp.

850 {
851  const int nPoints = GetTotPoints();
852  const int nFields = m_fields.size();
853 
854  // Holds L2 errors.
855  Array<OneD, NekDouble> L2(nFields);
856 
857  SteadyStateResidual(step, L2);
858 
859  if (m_infosteps && m_comm->GetRank() == 0 &&
860  (((step + 1) % m_infosteps == 0) || ((step == m_initialStep))))
861  {
862  // Output time
863  m_errFile << boost::format("%25.19e") % m_time;
864 
865  m_errFile << " " << boost::format("%25.19e") % totCPUTime;
866 
867  int stepp = step + 1;
868 
869  m_errFile << " " << boost::format("%25.19e") % stepp;
870 
871  // Output residuals
872  for (int i = 0; i < nFields; ++i)
873  {
874  m_errFile << " " << boost::format("%25.19e") % L2[i];
875  }
876 
877  m_errFile << endl;
878  }
879 
880  // Calculate maximum L2 error
881  NekDouble maxL2 = Vmath::Vmax(nFields, L2, 1);
882 
883  if (m_infosteps && m_session->DefinesCmdLineArgument("verbose") &&
884  m_comm->GetRank() == 0 && ((step + 1) % m_infosteps == 0))
885  {
886  cout << "-- Maximum L^2 residual: " << maxL2 << endl;
887  }
888 
889  if (maxL2 <= m_steadyStateTol)
890  {
891  return true;
892  }
893 
894  for (int i = 0; i < m_fields.size(); ++i)
895  {
896  Vmath::Vcopy(nPoints, m_fields[i]->GetPhys(), 1, m_previousSolution[i],
897  1);
898  }
899 
901  m_steadyStateRes = maxL2;
902 
903  return false;
904 }
LibUtilities::CommSharedPtr m_comm
Communicator.
int m_infosteps
Number of time steps between outputting status information.
NekDouble m_time
Current time of simulation.
int m_initialStep
Number of the step where the simulation should begin.
SOLVER_UTILS_EXPORT int GetTotPoints()
Array< OneD, Array< OneD, NekDouble > > m_previousSolution
Storage for previous solution for steady-state check.
NekDouble m_steadyStateTol
Tolerance to which steady state should be evaluated at.
SOLVER_UTILS_EXPORT void SteadyStateResidual(int step, Array< OneD, NekDouble > &L2)
double NekDouble
T Vmax(int n, const T *x, const int incx)
Return the maximum element in x – called vmax to avoid conflict with max.
Definition: Vmath.cpp:945
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.cpp:1255

References CellMLToNektar.pycml::format, Nektar::SolverUtils::EquationSystem::GetTotPoints(), Nektar::SolverUtils::EquationSystem::m_comm, m_errFile, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::EquationSystem::m_infosteps, Nektar::SolverUtils::EquationSystem::m_initialStep, m_previousSolution, Nektar::SolverUtils::EquationSystem::m_session, m_steadyStateRes, m_steadyStateRes0, m_steadyStateTol, Nektar::SolverUtils::EquationSystem::m_time, SteadyStateResidual(), Vmath::Vcopy(), and Vmath::Vmax().

◆ DoDummyProjection()

void Nektar::SolverUtils::UnsteadySystem::DoDummyProjection ( const Array< OneD, const Array< OneD, NekDouble >> &  inarray,
Array< OneD, Array< OneD, NekDouble >> &  outarray,
const NekDouble  time 
)
protected

Perform dummy projection.

Definition at line 942 of file UnsteadySystem.cpp.

945 {
946  boost::ignore_unused(time);
947 
948  if (&inarray != &outarray)
949  {
950  for (int i = 0; i < inarray.size(); ++i)
951  {
952  Vmath::Vcopy(GetNpoints(), inarray[i], 1, outarray[i], 1);
953  }
954  }
955 }

References Nektar::SolverUtils::EquationSystem::GetNpoints(), and Vmath::Vcopy().

Referenced by Nektar::Bidomain::v_InitObject(), Nektar::BidomainRoth::v_InitObject(), and Nektar::Monodomain::v_InitObject().

◆ GetTimeStep()

NekDouble Nektar::SolverUtils::UnsteadySystem::GetTimeStep ( const Array< OneD, const Array< OneD, NekDouble >> &  inarray)

Calculate the larger time-step mantaining the problem stable.

Return the timestep to be used for the next step in the time-marching loop.

This function can be overloaded to facilitate solver which utilise a CFL (or other) parameter to determine a maximum timestep under which the problem remains stable.

Definition at line 732 of file UnsteadySystem.cpp.

734 {
735  return v_GetTimeStep(inarray);
736 }
virtual SOLVER_UTILS_EXPORT NekDouble v_GetTimeStep(const Array< OneD, const Array< OneD, NekDouble >> &inarray)
Return the timestep to be used for the next step in the time-marching loop.

References v_GetTimeStep().

◆ InitializeSteadyState()

void Nektar::SolverUtils::UnsteadySystem::InitializeSteadyState ( )
private

Definition at line 804 of file UnsteadySystem.cpp.

805 {
806  if (m_steadyStateTol > 0.0)
807  {
808  const int nPoints = m_fields[0]->GetTotPoints();
810  Array<OneD, Array<OneD, NekDouble>>(m_fields.size());
811 
812  for (int i = 0; i < m_fields.size(); ++i)
813  {
814  m_previousSolution[i] = Array<OneD, NekDouble>(nPoints);
815  Vmath::Vcopy(nPoints, m_fields[i]->GetPhys(), 1,
816  m_previousSolution[i], 1);
817  }
818 
819  if (m_comm->GetRank() == 0)
820  {
821  std::string fName =
822  m_session->GetSessionName() + std::string(".resd");
823  m_errFile.open(fName.c_str());
824  m_errFile << setw(26) << left << "# Time";
825 
826  m_errFile << setw(26) << left << "CPU_Time";
827 
828  m_errFile << setw(26) << left << "Step";
829 
830  for (int i = 0; i < m_fields.size(); ++i)
831  {
832  m_errFile << setw(26) << m_session->GetVariables()[i];
833  }
834 
835  m_errFile << endl;
836  }
837  }
838 }

References Nektar::SolverUtils::EquationSystem::m_comm, m_errFile, Nektar::SolverUtils::EquationSystem::m_fields, m_previousSolution, Nektar::SolverUtils::EquationSystem::m_session, m_steadyStateTol, and Vmath::Vcopy().

Referenced by v_DoInitialise().

◆ MaxTimeStepEstimator()

NekDouble Nektar::SolverUtils::UnsteadySystem::MaxTimeStepEstimator ( )
protected

Get the maximum timestep estimator for cfl control.

Returns the maximum time estimator for CFL control.

Definition at line 183 of file UnsteadySystem.cpp.

184 {
185  return m_intScheme->GetTimeStability();
186 }
LibUtilities::TimeIntegrationSchemeSharedPtr m_intScheme
Wrapper to the time integration scheme.

References m_intScheme.

Referenced by Nektar::CompressibleFlowSystem::GetElmtTimeStep().

◆ SteadyStateResidual()

SOLVER_UTILS_EXPORT void Nektar::SolverUtils::UnsteadySystem::SteadyStateResidual ( int  step,
Array< OneD, NekDouble > &  L2 
)
inline

Definition at line 58 of file UnsteadySystem.h.

60  {
61  v_SteadyStateResidual(step, L2);
62  }
virtual SOLVER_UTILS_EXPORT void v_SteadyStateResidual(int step, Array< OneD, NekDouble > &L2)

References v_SteadyStateResidual().

Referenced by CheckSteadyState().

◆ SVVVarDiffCoeff()

void Nektar::SolverUtils::UnsteadySystem::SVVVarDiffCoeff ( const Array< OneD, Array< OneD, NekDouble >>  vel,
StdRegions::VarCoeffMap varCoeffMap 
)
protected

Evaluate the SVV diffusion coefficient according to Moura's paper where it should proportional to h time velocity.

Definition at line 764 of file UnsteadySystem.cpp.

767 {
768  int phystot = m_fields[0]->GetTotPoints();
769  int nvel = vel.size();
770 
771  Array<OneD, NekDouble> varcoeff(phystot), tmp;
772 
773  // calculate magnitude of v
774  Vmath::Vmul(phystot, vel[0], 1, vel[0], 1, varcoeff, 1);
775  for (int n = 1; n < nvel; ++n)
776  {
777  Vmath::Vvtvp(phystot, vel[n], 1, vel[n], 1, varcoeff, 1, varcoeff, 1);
778  }
779  Vmath::Vsqrt(phystot, varcoeff, 1, varcoeff, 1);
780 
781  for (int i = 0; i < m_fields[0]->GetNumElmts(); ++i)
782  {
783  int offset = m_fields[0]->GetPhys_Offset(i);
784  int nq = m_fields[0]->GetExp(i)->GetTotPoints();
785  Array<OneD, NekDouble> unit(nq, 1.0);
786 
787  int nmodes = 0;
788 
789  for (int n = 0; n < m_fields[0]->GetExp(i)->GetNumBases(); ++n)
790  {
791  nmodes = max(nmodes, m_fields[0]->GetExp(i)->GetBasisNumModes(n));
792  }
793 
794  NekDouble h = m_fields[0]->GetExp(i)->Integral(unit);
795  h = pow(h, (NekDouble)(1.0 / nvel)) / ((NekDouble)nmodes);
796 
797  Vmath::Smul(nq, h, varcoeff + offset, 1, tmp = varcoeff + offset, 1);
798  }
799 
800  // set up map with eVarCoffLaplacian key
801  varCoeffMap[StdRegions::eVarCoeffLaplacian] = varcoeff;
802 }
void Vsqrt(int n, const T *x, const int incx, T *y, const int incy)
sqrt y = sqrt(x)
Definition: Vmath.cpp:534
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
Definition: Vmath.cpp:209
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)
vvtvp (vector times vector plus vector): z = w*x + y
Definition: Vmath.cpp:574
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Definition: Vmath.cpp:248

References Nektar::StdRegions::eVarCoeffLaplacian, Nektar::SolverUtils::EquationSystem::m_fields, Vmath::Smul(), Vmath::Vmul(), Vmath::Vsqrt(), and Vmath::Vvtvp().

Referenced by Nektar::UnsteadyViscousBurgers::DoImplicitSolve(), and Nektar::UnsteadyViscousBurgers::v_InitObject().

◆ v_DoInitialise()

void Nektar::SolverUtils::UnsteadySystem::v_DoInitialise ( void  )
overrideprotectedvirtual

Sets up initial conditions.

Sets the initial conditions.

Reimplemented from Nektar::SolverUtils::EquationSystem.

Reimplemented in Nektar::VelocityCorrectionScheme, Nektar::VCSMapping, Nektar::CoupledLinearNS, Nektar::MMFSWE, and Nektar::PulseWaveSystem.

Definition at line 598 of file UnsteadySystem.cpp.

599 {
604 }
int m_nchk
Number of checkpoints written so far.
SOLVER_UTILS_EXPORT void SetBoundaryConditions(NekDouble time)
Evaluates the boundary conditions at the given time.
SOLVER_UTILS_EXPORT void SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
Initialise the data in the dependent fields.
SOLVER_UTILS_EXPORT void CheckForRestartTime(NekDouble &time, int &nchk)

References CheckForRestartTime(), InitializeSteadyState(), Nektar::SolverUtils::EquationSystem::m_nchk, Nektar::SolverUtils::EquationSystem::m_time, Nektar::SolverUtils::EquationSystem::SetBoundaryConditions(), and Nektar::SolverUtils::EquationSystem::SetInitialConditions().

Referenced by Nektar::VCSMapping::v_DoInitialise(), and Nektar::VelocityCorrectionScheme::v_DoInitialise().

◆ v_DoSolve()

void Nektar::SolverUtils::UnsteadySystem::v_DoSolve ( void  )
overrideprotectedvirtual

Solves an unsteady problem.

Initialises the time integration scheme (as specified in the session file), and perform the time integration.

Reimplemented from Nektar::SolverUtils::EquationSystem.

Reimplemented in Nektar::CoupledLinearNS, Nektar::MMFSWE, Nektar::PulseWaveSystem, Nektar::MMFMaxwell, and Nektar::MMFAdvection.

Definition at line 192 of file UnsteadySystem.cpp.

193 {
194  ASSERTL0(m_intScheme != 0, "No time integration scheme.");
195 
196  int i = 1;
197  int nvariables = 0;
198  int nfields = m_fields.size();
199 
200  if (m_intVariables.empty())
201  {
202  for (i = 0; i < nfields; ++i)
203  {
204  m_intVariables.push_back(i);
205  }
206  nvariables = nfields;
207  }
208  else
209  {
210  nvariables = m_intVariables.size();
211  }
212 
213  // Integrate in wave-space if using homogeneous1D
215  {
216  for (i = 0; i < nfields; ++i)
217  {
218  m_fields[i]->HomogeneousFwdTrans(m_fields[i]->GetTotPoints(),
219  m_fields[i]->GetPhys(),
220  m_fields[i]->UpdatePhys());
221  m_fields[i]->SetWaveSpace(true);
222  m_fields[i]->SetPhysState(false);
223  }
224  }
225 
226  // Set up wrapper to fields data storage.
227  Array<OneD, Array<OneD, NekDouble>> fields(nvariables);
228 
229  // Order storage to list time-integrated fields first.
230  for (i = 0; i < nvariables; ++i)
231  {
232  fields[i] = m_fields[m_intVariables[i]]->GetPhys();
233  m_fields[m_intVariables[i]]->SetPhysState(false);
234  }
235 
236  // Initialise time integration scheme
237  m_intScheme->InitializeScheme(m_timestep, fields, m_time, m_ode);
238 
239  // Initialise filters
240  for (auto &x : m_filters)
241  {
242  x.second->Initialise(m_fields, m_time);
243  }
244 
245  LibUtilities::Timer timer;
246  bool doCheckTime = false;
247  int step = m_initialStep;
248  int stepCounter = 0;
249  int restartStep = -1;
250  NekDouble intTime = 0.0;
251  NekDouble cpuTime = 0.0;
252  NekDouble cpuPrevious = 0.0;
253  NekDouble elapsed = 0.0;
254  NekDouble totFilterTime = 0.0;
255 
256  m_lastCheckTime = 0.0;
257 
258  m_TotNewtonIts = 0;
259  m_TotLinIts = 0;
260  m_TotImpStages = 0;
261 
262  Array<OneD, int> abortFlags(2, 0);
263  string abortFile = "abort";
264  if (m_session->DefinesSolverInfo("CheckAbortFile"))
265  {
266  abortFile = m_session->GetSolverInfo("CheckAbortFile");
267  }
268 
269  NekDouble tmp_cflSafetyFactor = m_cflSafetyFactor;
270 
272  while ((step < m_steps || m_time < m_fintime - NekConstants::kNekZeroTol) &&
273  abortFlags[1] == 0)
274  {
275  restartStep++;
276 
277  if (m_CFLGrowth > 1.0 && m_cflSafetyFactor < m_CFLEnd)
278  {
279  tmp_cflSafetyFactor =
280  min(m_CFLEnd, m_CFLGrowth * tmp_cflSafetyFactor);
281  }
282 
283  m_flagUpdatePreconMat = true;
284 
285  // Flag to update AV
286  m_CalcPhysicalAV = true;
287 
288  // Frozen preconditioner checks
289  if (!ParallelInTime())
290  {
291  if (v_UpdateTimeStepCheck())
292  {
293  m_cflSafetyFactor = tmp_cflSafetyFactor;
294 
295  if (m_cflSafetyFactor)
296  {
297  m_timestep = GetTimeStep(fields);
298  }
299 
300  // Ensure that the final timestep finishes at the final
301  // time, or at a prescribed IO_CheckTime.
302  if (m_time + m_timestep > m_fintime && m_fintime > 0.0)
303  {
305  }
306  else if (m_checktime &&
308  {
311  doCheckTime = true;
312  }
313  }
314  }
315 
316  if (m_TimeIncrementFactor > 1.0)
317  {
318  NekDouble timeincrementFactor = m_TimeIncrementFactor;
319  m_timestep *= timeincrementFactor;
320 
321  if (m_time + m_timestep > m_fintime && m_fintime > 0.0)
322  {
324  }
325  }
326 
327  // Perform any solver-specific pre-integration steps
328  timer.Start();
329  if (v_PreIntegrate(step))
330  {
331  break;
332  }
333 
334  m_StagesPerStep = 0;
335  m_TotLinItePerStep = 0;
336 
337  ASSERTL0(m_timestep > 0, "m_timestep < 0");
338 
339  fields = m_intScheme->TimeIntegrate(stepCounter, m_timestep, m_ode);
340  timer.Stop();
341 
342  m_time += m_timestep;
343  elapsed = timer.TimePerTest(1);
344  intTime += elapsed;
345  cpuTime += elapsed;
346 
347  // Write out status information
348  if (m_infosteps &&
349  m_session->GetComm()->GetSpaceComm()->GetRank() == 0 &&
350  !((step + 1) % m_infosteps))
351  {
352  if (ParallelInTime())
353  {
354  cout << "RANK "
355  << m_session->GetComm()->GetTimeComm()->GetRank()
356  << " Steps: " << setw(8) << left << step + 1 << " "
357  << "Time: " << setw(12) << left << m_time;
358  }
359  else
360  {
361  cout << "Steps: " << setw(8) << left << step + 1 << " "
362  << "Time: " << setw(12) << left << m_time;
363  }
364 
365  if (m_cflSafetyFactor)
366  {
367  cout << " Time-step: " << setw(12) << left << m_timestep;
368  }
369 
370  stringstream ss;
371  ss << cpuTime << "s";
372  cout << " CPU Time: " << setw(8) << left << ss.str() << endl;
373  cpuPrevious = cpuTime;
374  cpuTime = 0.0;
375 
377  {
378  cout << " &&"
379  << " TotImpStages= " << m_TotImpStages
380  << " TotNewtonIts= " << m_TotNewtonIts
381  << " TotLinearIts = " << m_TotLinIts << endl;
382  }
383  }
384 
385  // Transform data into coefficient space
386  for (i = 0; i < nvariables; ++i)
387  {
388  // copy fields into ExpList::m_phys and assign the new
389  // array to fields
390  m_fields[m_intVariables[i]]->SetPhys(fields[i]);
391  fields[i] = m_fields[m_intVariables[i]]->UpdatePhys();
392  if (v_RequireFwdTrans())
393  {
394  m_fields[m_intVariables[i]]->FwdTransLocalElmt(
395  fields[i], m_fields[m_intVariables[i]]->UpdateCoeffs());
396  }
397  m_fields[m_intVariables[i]]->SetPhysState(false);
398  }
399 
400  // Perform any solver-specific post-integration steps
401  if (v_PostIntegrate(step))
402  {
403  break;
404  }
405 
406  // Check for steady-state
407  if (m_steadyStateTol > 0.0 && (!((step + 1) % m_steadyStateSteps)))
408  {
409  if (CheckSteadyState(step, intTime))
410  {
411  if (m_comm->GetRank() == 0)
412  {
413  cout << "Reached Steady State to tolerance "
414  << m_steadyStateTol << endl;
415  }
416  break;
417  }
418  }
419 
420  // test for abort conditions (nan, or abort file)
421  if (m_abortSteps && !((step + 1) % m_abortSteps))
422  {
423  abortFlags[0] = 0;
424  for (i = 0; i < nvariables; ++i)
425  {
426  if (Vmath::Nnan(fields[i].size(), fields[i], 1) > 0)
427  {
428  abortFlags[0] = 1;
429  }
430  }
431 
432  // rank zero looks for abort file and deletes it
433  // if it exists. The communicates the abort
434  if (m_session->GetComm()->GetRank() == 0)
435  {
436  if (boost::filesystem::exists(abortFile))
437  {
438  boost::filesystem::remove(abortFile);
439  abortFlags[1] = 1;
440  }
441  }
442 
443  if (!ParallelInTime())
444  {
445  m_session->GetComm()->AllReduce(abortFlags,
447  }
448 
449  ASSERTL0(!abortFlags[0], "NaN found during time integration.");
450  }
451 
452  // Update filters
453  for (auto &x : m_filters)
454  {
455  timer.Start();
456  x.second->Update(m_fields, m_time);
457  timer.Stop();
458  elapsed = timer.TimePerTest(1);
459  totFilterTime += elapsed;
460 
461  // Write out individual filter status information
462  if (m_filtersInfosteps && m_session->GetComm()->GetRank() == 0 &&
463  !((step + 1) % m_filtersInfosteps) && !m_filters.empty() &&
464  m_session->DefinesCmdLineArgument("verbose"))
465  {
466  stringstream s0;
467  s0 << x.first << ":";
468  stringstream s1;
469  s1 << elapsed << "s";
470  stringstream s2;
471  s2 << elapsed / cpuPrevious * 100 << "%";
472  cout << "CPU time for filter " << setw(25) << left << s0.str()
473  << setw(12) << left << s1.str() << endl
474  << "\t Percentage of time integration: " << setw(10)
475  << left << s2.str() << endl;
476  }
477  }
478 
479  // Write out overall filter status information
480  if (m_filtersInfosteps && m_session->GetComm()->GetRank() == 0 &&
481  !((step + 1) % m_filtersInfosteps) && !m_filters.empty())
482  {
483  stringstream ss;
484  ss << totFilterTime << "s";
485  cout << "Total filters CPU Time:\t\t\t " << setw(10) << left
486  << ss.str() << endl;
487  }
488  totFilterTime = 0.0;
489 
490  // Write out checkpoint files
491  if ((m_checksteps && !((step + 1) % m_checksteps)) || doCheckTime)
492  {
494  {
495  vector<bool> transformed(nfields, false);
496  for (i = 0; i < nfields; i++)
497  {
498  if (m_fields[i]->GetWaveSpace())
499  {
500  m_fields[i]->SetWaveSpace(false);
501  m_fields[i]->BwdTrans(m_fields[i]->GetCoeffs(),
502  m_fields[i]->UpdatePhys());
503  m_fields[i]->SetPhysState(true);
504  transformed[i] = true;
505  }
506  }
508  m_nchk++;
509  for (i = 0; i < nfields; i++)
510  {
511  if (transformed[i])
512  {
513  m_fields[i]->SetWaveSpace(true);
514  m_fields[i]->HomogeneousFwdTrans(
515  m_fields[i]->GetTotPoints(), m_fields[i]->GetPhys(),
516  m_fields[i]->UpdatePhys());
517  m_fields[i]->SetPhysState(false);
518  }
519  }
520  }
521  else
522  {
524  m_nchk++;
525  }
526  doCheckTime = false;
527  }
528 
529  // Step advance
530  ++step;
531  ++stepCounter;
532  }
533 
534  // Print out summary statistics
535  if (m_session->GetComm()->GetRank() == 0)
536  {
537  if (m_cflSafetyFactor > 0.0)
538  {
539  cout << "CFL safety factor : " << m_cflSafetyFactor << endl
540  << "CFL time-step : " << m_timestep << endl;
541  }
542 
543  if (m_session->GetSolverInfo("Driver") != "SteadyState" &&
544  m_session->GetSolverInfo("Driver") != "Parareal")
545  {
546  cout << "Time-integration : " << intTime << "s" << endl;
547  }
548 
550  {
551  cout << "-------------------------------------------" << endl
552  << "Total Implicit Stages: " << m_TotImpStages << endl
553  << "Total Newton Its : " << m_TotNewtonIts << endl
554  << "Total Linear Its : " << m_TotLinIts << endl
555  << "-------------------------------------------" << endl;
556  }
557  }
558 
559  // If homogeneous, transform back into physical space if necessary.
561  {
562  for (i = 0; i < nfields; i++)
563  {
564  if (m_fields[i]->GetWaveSpace())
565  {
566  m_fields[i]->SetWaveSpace(false);
567  m_fields[i]->BwdTrans(m_fields[i]->GetCoeffs(),
568  m_fields[i]->UpdatePhys());
569  m_fields[i]->SetPhysState(true);
570  }
571  }
572  }
573  else
574  {
575  for (i = 0; i < nvariables; ++i)
576  {
577  m_fields[m_intVariables[i]]->SetPhys(fields[i]);
578  m_fields[m_intVariables[i]]->SetPhysState(true);
579  }
580  }
581 
582  // Finalise filters
583  for (auto &x : m_filters)
584  {
585  x.second->Finalise(m_fields, m_time);
586  }
587 
588  // Print for 1D problems
589  if (m_spacedim == 1)
590  {
591  AppendOutput1D(fields);
592  }
593 }
int m_spacedim
Spatial dimension (>= expansion dim).
SOLVER_UTILS_EXPORT bool ParallelInTime()
Check if solver use Parallel-in-Time.
NekDouble m_timestep
Time step size.
NekDouble m_fintime
Finish time of the simulation.
SOLVER_UTILS_EXPORT void Checkpoint_Output(const int n)
Write checkpoint file of m_fields.
NekDouble m_checktime
Time between checkpoints.
SOLVER_UTILS_EXPORT NekDouble GetTimeStep()
NekDouble m_timestepMax
Time step size.
enum HomogeneousType m_HomogeneousType
int m_steps
Number of steps to take.
int m_checksteps
Number of steps between checkpoints.
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
NekDouble m_CFLGrowth
CFL growth rate.
virtual SOLVER_UTILS_EXPORT bool v_UpdateTimeStepCheck()
bool m_CalcPhysicalAV
flag to update artificial viscosity
std::vector< std::pair< std::string, FilterSharedPtr > > m_filters
NekDouble m_cflSafetyFactor
CFL safety factor (comprise between 0 to 1).
int m_abortSteps
Number of steps between checks for abort conditions.
virtual SOLVER_UTILS_EXPORT bool v_RequireFwdTrans()
virtual SOLVER_UTILS_EXPORT bool v_PostIntegrate(int step)
NekDouble m_CFLEnd
maximun cfl in cfl growth
virtual SOLVER_UTILS_EXPORT bool v_PreIntegrate(int step)
SOLVER_UTILS_EXPORT void AppendOutput1D(Array< OneD, Array< OneD, NekDouble >> &solution1D)
Print the solution at each solution point in a txt file.
int m_steadyStateSteps
Check for steady state at step interval.
int m_filtersInfosteps
Number of time steps between outputting filters information.
bool m_homoInitialFwd
Flag to determine if simulation should start in homogeneous forward transformed state.
static const NekDouble kNekZeroTol
int Nnan(int n, const T *x, const int incx)
Return number of NaN elements of x.
Definition: Vmath.cpp:1076

References AppendOutput1D(), ASSERTL0, Nektar::SolverUtils::EquationSystem::Checkpoint_Output(), CheckSteadyState(), Nektar::SolverUtils::EquationSystem::eNotHomogeneous, Nektar::SolverUtils::EquationSystem::GetTimeStep(), Nektar::SolverUtils::EquationSystem::GetTotPoints(), Nektar::NekConstants::kNekZeroTol, m_abortSteps, m_CalcPhysicalAV, m_CFLEnd, m_CFLGrowth, m_cflSafetyFactor, Nektar::SolverUtils::EquationSystem::m_checksteps, Nektar::SolverUtils::EquationSystem::m_checktime, Nektar::SolverUtils::EquationSystem::m_comm, Nektar::SolverUtils::EquationSystem::m_fields, m_filters, m_filtersInfosteps, Nektar::SolverUtils::EquationSystem::m_fintime, m_flagImplicitItsStatistics, m_flagImplicitSolver, m_flagUpdatePreconMat, Nektar::SolverUtils::EquationSystem::m_HomogeneousType, m_homoInitialFwd, Nektar::SolverUtils::EquationSystem::m_infosteps, Nektar::SolverUtils::EquationSystem::m_initialStep, m_intScheme, m_intVariables, Nektar::SolverUtils::EquationSystem::m_lastCheckTime, Nektar::SolverUtils::EquationSystem::m_nchk, m_ode, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_spacedim, m_StagesPerStep, m_steadyStateSteps, m_steadyStateTol, Nektar::SolverUtils::EquationSystem::m_steps, Nektar::SolverUtils::EquationSystem::m_time, Nektar::SolverUtils::EquationSystem::m_TimeIncrementFactor, Nektar::SolverUtils::EquationSystem::m_timestep, Nektar::SolverUtils::EquationSystem::m_timestepMax, m_TotImpStages, m_TotLinItePerStep, m_TotLinIts, m_TotNewtonIts, Vmath::Nnan(), Nektar::SolverUtils::EquationSystem::ParallelInTime(), Nektar::LibUtilities::ReduceMax, Nektar::LibUtilities::Timer::Start(), Nektar::LibUtilities::Timer::Stop(), Nektar::LibUtilities::Timer::TimePerTest(), v_PostIntegrate(), v_PreIntegrate(), v_RequireFwdTrans(), and v_UpdateTimeStepCheck().

Referenced by Nektar::CoupledLinearNS::v_DoSolve().

◆ v_GenerateSummary()

void Nektar::SolverUtils::UnsteadySystem::v_GenerateSummary ( SummaryList s)
overrideprotectedvirtual

Print a summary of time stepping parameters.

Prints a summary with some information regards the time-stepping.

Reimplemented from Nektar::SolverUtils::EquationSystem.

Reimplemented in Nektar::Monodomain, Nektar::BidomainRoth, Nektar::Bidomain, Nektar::UnsteadyDiffusion, Nektar::CFLtester, Nektar::SolverUtils::MMFSystem, Nektar::ShallowWaterSystem, Nektar::NonlinearSWE, Nektar::NonlinearPeregrine, Nektar::MMFSWE, Nektar::LinearSWE, Nektar::PulseWavePropagation, Nektar::MMFMaxwell, Nektar::VCSWeakPressure, Nektar::VelocityCorrectionScheme, Nektar::SmoothedProfileMethod, Nektar::CoupledLinearNS, Nektar::ImageWarpingSystem, Nektar::MMFDiffusion, Nektar::RinglebFlow, Nektar::IsentropicVortex, Nektar::UnsteadyViscousBurgers, Nektar::UnsteadyAdvectionDiffusion, Nektar::UnsteadyAdvection, and Nektar::MMFAdvection.

Definition at line 610 of file UnsteadySystem.cpp.

611 {
613  AddSummaryItem(s, "Advect. advancement",
614  m_explicitAdvection ? "explicit" : "implicit");
615 
616  AddSummaryItem(s, "Diffuse. advancement",
617  m_explicitDiffusion ? "explicit" : "implicit");
618 
619  if (m_session->GetSolverInfo("EQTYPE") ==
620  "SteadyAdvectionDiffusionReaction")
621  {
622  AddSummaryItem(s, "React. advancement",
623  m_explicitReaction ? "explicit" : "implicit");
624  }
625 
626  AddSummaryItem(s, "Time Step", m_timestep);
627  AddSummaryItem(s, "No. of Steps", m_steps);
628  AddSummaryItem(s, "Checkpoints (steps)", m_checksteps);
629  if (m_intScheme)
630  {
631  AddSummaryItem(s, "Integration Type", m_intScheme->GetName());
632  }
633 }
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &l)
Virtual function for generating summary information.
bool m_explicitReaction
Indicates if explicit or implicit treatment of reaction is used.
bool m_explicitAdvection
Indicates if explicit or implicit treatment of advection is used.
bool m_explicitDiffusion
Indicates if explicit or implicit treatment of diffusion is used.
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
Definition: Misc.cpp:49

References Nektar::SolverUtils::AddSummaryItem(), Nektar::SolverUtils::EquationSystem::m_checksteps, m_explicitAdvection, m_explicitDiffusion, m_explicitReaction, m_intScheme, Nektar::SolverUtils::EquationSystem::m_session, Nektar::SolverUtils::EquationSystem::m_steps, Nektar::SolverUtils::EquationSystem::m_timestep, and Nektar::SolverUtils::EquationSystem::v_GenerateSummary().

Referenced by Nektar::UnsteadyAdvection::v_GenerateSummary(), Nektar::UnsteadyAdvectionDiffusion::v_GenerateSummary(), Nektar::UnsteadyViscousBurgers::v_GenerateSummary(), Nektar::IsentropicVortex::v_GenerateSummary(), Nektar::RinglebFlow::v_GenerateSummary(), Nektar::ImageWarpingSystem::v_GenerateSummary(), Nektar::VelocityCorrectionScheme::v_GenerateSummary(), Nektar::VCSWeakPressure::v_GenerateSummary(), Nektar::PulseWavePropagation::v_GenerateSummary(), Nektar::ShallowWaterSystem::v_GenerateSummary(), Nektar::SolverUtils::MMFSystem::v_GenerateSummary(), Nektar::CFLtester::v_GenerateSummary(), Nektar::UnsteadyDiffusion::v_GenerateSummary(), Nektar::Bidomain::v_GenerateSummary(), Nektar::BidomainRoth::v_GenerateSummary(), and Nektar::Monodomain::v_GenerateSummary().

◆ v_GetTimeStep()

NekDouble Nektar::SolverUtils::UnsteadySystem::v_GetTimeStep ( const Array< OneD, const Array< OneD, NekDouble >> &  inarray)
protectedvirtual

Return the timestep to be used for the next step in the time-marching loop.

See also
UnsteadySystem::GetTimeStep

Reimplemented in Nektar::CompressibleFlowSystem.

Definition at line 744 of file UnsteadySystem.cpp.

746 {
747  boost::ignore_unused(inarray);
748  NEKERROR(ErrorUtil::efatal, "Not defined for this class");
749  return 0.0;
750 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:209

References Nektar::ErrorUtil::efatal, and NEKERROR.

Referenced by GetTimeStep().

◆ v_InitObject()

void Nektar::SolverUtils::UnsteadySystem::v_InitObject ( bool  DeclareField = true)
overrideprotectedvirtual

Init object for UnsteadySystem class.

Initialization object for UnsteadySystem class.

Reimplemented from Nektar::SolverUtils::EquationSystem.

Reimplemented in Nektar::ShallowWaterSystem, Nektar::NonlinearSWE, Nektar::NonlinearPeregrine, Nektar::MMFSWE, Nektar::LinearSWE, Nektar::MMFMaxwell, Nektar::Dummy, Nektar::NavierStokesImplicitCFE, Nektar::NavierStokesCFEAxisym, Nektar::EulerImplicitCFE, Nektar::EulerCFE, Nektar::CFSImplicit, Nektar::CompressibleFlowSystem, Nektar::UnsteadyViscousBurgers, Nektar::UnsteadyReactionDiffusion, Nektar::UnsteadyInviscidBurger, Nektar::UnsteadyDiffusion, Nektar::UnsteadyAdvectionDiffusion, Nektar::UnsteadyAdvection, Nektar::MMFAdvection, Nektar::CFLtester, Nektar::LEE, Nektar::APE, Nektar::AcousticSystem, Nektar::PulseWaveSystemOutput, Nektar::VelocityCorrectionScheme, Nektar::VCSMapping, Nektar::SmoothedProfileMethod, Nektar::IncNavierStokes, Nektar::CoupledLinearNS, Nektar::ImageWarpingSystem, Nektar::MMFDiffusion, Nektar::NavierStokesCFE, Nektar::Monodomain, Nektar::BidomainRoth, Nektar::Bidomain, Nektar::SolverUtils::AdvectionSystem, Nektar::PulseWaveSystem, and Nektar::PulseWavePropagation.

Definition at line 79 of file UnsteadySystem.cpp.

80 {
81  EquationSystem::v_InitObject(DeclareField);
82 
83  m_initialStep = 0;
84 
85  // Load SolverInfo parameters
86  m_session->MatchSolverInfo("DIFFUSIONADVANCEMENT", "Explicit",
87  m_explicitDiffusion, true);
88  m_session->MatchSolverInfo("ADVECTIONADVANCEMENT", "Explicit",
89  m_explicitAdvection, true);
90  m_session->MatchSolverInfo("REACTIONADVANCEMENT", "Explicit",
91  m_explicitReaction, true);
92 
93  m_session->MatchSolverInfo("FLAGIMPLICITITSSTATISTICS", "True",
95 
96  m_session->LoadParameter("CheckAbortSteps", m_abortSteps, 1);
97  // Steady state tolerance
98  m_session->LoadParameter("SteadyStateTol", m_steadyStateTol, 0.0);
99  // Frequency for checking steady state
100  m_session->LoadParameter("SteadyStateSteps", m_steadyStateSteps, 1);
101 
102  // For steady problems, we do not initialise the time integration
103  if (m_session->DefinesSolverInfo("TimeIntegrationMethod") ||
104  m_session->DefinesTimeIntScheme())
105  {
106  LibUtilities::TimeIntScheme timeInt;
107  if (m_session->DefinesTimeIntScheme())
108  {
109  timeInt = m_session->GetTimeIntScheme();
110  }
111  else
112  {
113  timeInt.method = m_session->GetSolverInfo("TimeIntegrationMethod");
114  }
115 
116  m_intScheme =
118  timeInt.method, timeInt.variant, timeInt.order,
119  timeInt.freeParams);
120 
121  // Load generic input parameters
122  m_session->LoadParameter("IO_InfoSteps", m_infosteps, 0);
123  m_session->LoadParameter("IO_FiltersInfoSteps", m_filtersInfosteps,
124  10.0 * m_infosteps);
125  m_session->LoadParameter("CFL", m_cflSafetyFactor, 0.0);
126  m_session->LoadParameter("CFLEnd", m_CFLEnd, 0.0);
127  m_session->LoadParameter("CFLGrowth", m_CFLGrowth, 1.0);
128  m_session->LoadParameter("CFLGrowth", m_CFLGrowth, 1.0);
129 
130  // Time tolerance between filter update time and time integration
131  m_session->LoadParameter("FilterTimeWarning", m_filterTimeWarning, 1);
132 
133  // Ensure that there is no conflict of parameters
134  if (m_cflSafetyFactor > 0.0)
135  {
136  // Check final condition
137  ASSERTL0(m_fintime == 0.0 || m_steps == 0,
138  "Final condition not unique: "
139  "fintime > 0.0 and Nsteps > 0");
140  // Check timestep condition
141  ASSERTL0(m_timestep == 0.0,
142  "Timestep not unique: timestep > 0.0 & CFL > 0.0");
143  }
144  else
145  {
146  ASSERTL0(m_timestep != 0.0, "Need to set either TimeStep or CFL");
147  }
148 
149  // Ensure that there is no conflict of parameters
150  if (m_CFLGrowth > 1.0)
151  {
152  // Check final condition
154  "m_CFLEnd >= m_cflSafetyFactor required");
155  }
156 
157  // Set up time to be dumped in field information
158  m_fieldMetaDataMap["Time"] = boost::lexical_cast<std::string>(m_time);
159  }
160 
161  // By default attempt to forward transform initial condition.
162  m_homoInitialFwd = true;
163 
164  // Set up filters
165  for (auto &x : m_session->GetFilters())
166  {
167  m_filters.push_back(make_pair(
168  x.first, GetFilterFactory().CreateInstance(
169  x.first, m_session, shared_from_this(), x.second)));
170  }
171 }
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:144
virtual SOLVER_UTILS_EXPORT void v_InitObject(bool DeclareFeld=true)
Initialisation object for EquationSystem.
NekDouble m_filterTimeWarning
Number of time steps between outputting status information.
TimeIntegrationSchemeFactory & GetTimeIntegrationSchemeFactory()
FilterFactory & GetFilterFactory()
Definition: Filter.cpp:41

References ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, tParam >::CreateInstance(), Nektar::LibUtilities::TimeIntScheme::freeParams, Nektar::SolverUtils::GetFilterFactory(), Nektar::LibUtilities::GetTimeIntegrationSchemeFactory(), m_abortSteps, m_CFLEnd, m_CFLGrowth, m_cflSafetyFactor, m_explicitAdvection, m_explicitDiffusion, m_explicitReaction, Nektar::SolverUtils::EquationSystem::m_fieldMetaDataMap, m_filters, m_filtersInfosteps, m_filterTimeWarning, Nektar::SolverUtils::EquationSystem::m_fintime, m_flagImplicitItsStatistics, m_homoInitialFwd, Nektar::SolverUtils::EquationSystem::m_infosteps, Nektar::SolverUtils::EquationSystem::m_initialStep, m_intScheme, Nektar::SolverUtils::EquationSystem::m_session, m_steadyStateSteps, m_steadyStateTol, Nektar::SolverUtils::EquationSystem::m_steps, Nektar::SolverUtils::EquationSystem::m_time, Nektar::SolverUtils::EquationSystem::m_timestep, Nektar::LibUtilities::TimeIntScheme::method, Nektar::LibUtilities::TimeIntScheme::order, Nektar::SolverUtils::EquationSystem::v_InitObject(), and Nektar::LibUtilities::TimeIntScheme::variant.

Referenced by Nektar::PulseWaveSystem::v_InitObject(), Nektar::SolverUtils::AdvectionSystem::v_InitObject(), Nektar::Bidomain::v_InitObject(), Nektar::BidomainRoth::v_InitObject(), Nektar::Monodomain::v_InitObject(), Nektar::MMFDiffusion::v_InitObject(), Nektar::MMFAdvection::v_InitObject(), Nektar::UnsteadyDiffusion::v_InitObject(), Nektar::UnsteadyReactionDiffusion::v_InitObject(), Nektar::Dummy::v_InitObject(), Nektar::MMFMaxwell::v_InitObject(), Nektar::MMFSWE::v_InitObject(), and Nektar::ShallowWaterSystem::v_InitObject().

◆ v_PostIntegrate()

bool Nektar::SolverUtils::UnsteadySystem::v_PostIntegrate ( int  step)
protectedvirtual

Reimplemented in Nektar::VelocityCorrectionScheme, Nektar::Dummy, and Nektar::SolverUtils::AdvectionSystem.

Definition at line 758 of file UnsteadySystem.cpp.

759 {
760  boost::ignore_unused(step);
761  return false;
762 }

Referenced by v_DoSolve(), Nektar::SolverUtils::AdvectionSystem::v_PostIntegrate(), and Nektar::Dummy::v_PostIntegrate().

◆ v_PreIntegrate()

bool Nektar::SolverUtils::UnsteadySystem::v_PreIntegrate ( int  step)
protectedvirtual

Reimplemented in Nektar::IncNavierStokes, Nektar::Dummy, Nektar::UnsteadyAdvectionDiffusion, and Nektar::AcousticSystem.

Definition at line 752 of file UnsteadySystem.cpp.

753 {
754  boost::ignore_unused(step);
755  return false;
756 }

Referenced by v_DoSolve(), Nektar::AcousticSystem::v_PreIntegrate(), and Nektar::Dummy::v_PreIntegrate().

◆ v_RequireFwdTrans()

virtual SOLVER_UTILS_EXPORT bool Nektar::SolverUtils::UnsteadySystem::v_RequireFwdTrans ( )
inlineprotectedvirtual

Reimplemented in Nektar::VelocityCorrectionScheme, and Nektar::Dummy.

Definition at line 173 of file UnsteadySystem.h.

174  {
175  return true;
176  }

Referenced by v_DoSolve().

◆ v_SteadyStateResidual()

void Nektar::SolverUtils::UnsteadySystem::v_SteadyStateResidual ( int  step,
Array< OneD, NekDouble > &  L2 
)
protectedvirtual

Reimplemented in Nektar::CompressibleFlowSystem.

Definition at line 906 of file UnsteadySystem.cpp.

907 {
908  boost::ignore_unused(step);
909  const int nPoints = GetTotPoints();
910  const int nFields = m_fields.size();
911 
912  // Holds L2 errors.
913  Array<OneD, NekDouble> RHSL2(nFields);
914  Array<OneD, NekDouble> residual(nFields);
915  Array<OneD, NekDouble> reference(nFields);
916 
917  for (int i = 0; i < nFields; ++i)
918  {
919  Array<OneD, NekDouble> tmp(nPoints);
920 
921  Vmath::Vsub(nPoints, m_fields[i]->GetPhys(), 1, m_previousSolution[i],
922  1, tmp, 1);
923  Vmath::Vmul(nPoints, tmp, 1, tmp, 1, tmp, 1);
924  residual[i] = Vmath::Vsum(nPoints, tmp, 1);
925 
926  Vmath::Vmul(nPoints, m_previousSolution[i], 1, m_previousSolution[i], 1,
927  tmp, 1);
928  reference[i] = Vmath::Vsum(nPoints, tmp, 1);
929  }
930 
931  m_comm->AllReduce(residual, LibUtilities::ReduceSum);
932  m_comm->AllReduce(reference, LibUtilities::ReduceSum);
933 
934  // L2 error
935  for (int i = 0; i < nFields; ++i)
936  {
937  reference[i] = (reference[i] == 0) ? 1 : reference[i];
938  L2[i] = sqrt(residual[i] / reference[i]);
939  }
940 }
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
Definition: Vmath.cpp:895
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
Definition: Vmath.cpp:419
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:294

References Nektar::SolverUtils::EquationSystem::GetTotPoints(), Nektar::SolverUtils::EquationSystem::m_comm, Nektar::SolverUtils::EquationSystem::m_fields, m_previousSolution, Nektar::LibUtilities::ReduceSum, tinysimd::sqrt(), Vmath::Vmul(), Vmath::Vsub(), and Vmath::Vsum().

Referenced by SteadyStateResidual().

◆ v_UpdateTimeStepCheck()

bool Nektar::SolverUtils::UnsteadySystem::v_UpdateTimeStepCheck ( )
inlineprotectedvirtual

Reimplemented in Nektar::CFSImplicit.

Definition at line 208 of file UnsteadySystem.h.

209 {
210  return true;
211 }

Referenced by v_DoSolve().

Member Data Documentation

◆ cmdSetStartChkNum

std::string Nektar::SolverUtils::UnsteadySystem::cmdSetStartChkNum
static
Initial value:
=
"set-start-chknumber", "",
"Set the starting number of the checkpoint file.")
static std::string RegisterCmdLineArgument(const std::string &pName, const std::string &pShortName, const std::string &pDescription)
Registers a command-line argument with the session reader.

Definition at line 72 of file UnsteadySystem.h.

◆ cmdSetStartTime

std::string Nektar::SolverUtils::UnsteadySystem::cmdSetStartTime
static
Initial value:
=
"set-start-time", "", "Set the starting time of the simulation.")

Definition at line 71 of file UnsteadySystem.h.

◆ m_abortSteps

int Nektar::SolverUtils::UnsteadySystem::m_abortSteps
protected

Number of steps between checks for abort conditions.

Definition at line 76 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_CalcPhysicalAV

bool Nektar::SolverUtils::UnsteadySystem::m_CalcPhysicalAV = true
protected

flag to update artificial viscosity

Definition at line 144 of file UnsteadySystem.h.

Referenced by v_DoSolve().

◆ m_CFLEnd

NekDouble Nektar::SolverUtils::UnsteadySystem::m_CFLEnd

maximun cfl in cfl growth

Definition at line 70 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_CFLGrowth

NekDouble Nektar::SolverUtils::UnsteadySystem::m_CFLGrowth

CFL growth rate.

Definition at line 68 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_cflNonAcoustic

NekDouble Nektar::SolverUtils::UnsteadySystem::m_cflNonAcoustic

Definition at line 66 of file UnsteadySystem.h.

Referenced by Nektar::CompressibleFlowSystem::v_GetTimeStep().

◆ m_cflSafetyFactor

NekDouble Nektar::SolverUtils::UnsteadySystem::m_cflSafetyFactor

◆ m_epsilon

NekDouble Nektar::SolverUtils::UnsteadySystem::m_epsilon
protected

Definition at line 85 of file UnsteadySystem.h.

◆ m_errFile

std::ofstream Nektar::SolverUtils::UnsteadySystem::m_errFile
protected

Definition at line 106 of file UnsteadySystem.h.

Referenced by CheckSteadyState(), and InitializeSteadyState().

◆ m_explicitAdvection

bool Nektar::SolverUtils::UnsteadySystem::m_explicitAdvection
protected

◆ m_explicitDiffusion

bool Nektar::SolverUtils::UnsteadySystem::m_explicitDiffusion
protected

◆ m_explicitReaction

bool Nektar::SolverUtils::UnsteadySystem::m_explicitReaction
protected

Indicates if explicit or implicit treatment of reaction is used.

Definition at line 91 of file UnsteadySystem.h.

Referenced by v_GenerateSummary(), and v_InitObject().

◆ m_filters

std::vector<std::pair<std::string, FilterSharedPtr> > Nektar::SolverUtils::UnsteadySystem::m_filters
protected

◆ m_filtersInfosteps

int Nektar::SolverUtils::UnsteadySystem::m_filtersInfosteps
protected

Number of time steps between outputting filters information.

Definition at line 78 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_filterTimeWarning

NekDouble Nektar::SolverUtils::UnsteadySystem::m_filterTimeWarning
protected

Number of time steps between outputting status information.

Definition at line 113 of file UnsteadySystem.h.

Referenced by v_InitObject().

◆ m_flagImplicitItsStatistics

bool Nektar::SolverUtils::UnsteadySystem::m_flagImplicitItsStatistics
protected

Definition at line 119 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_flagImplicitSolver

bool Nektar::SolverUtils::UnsteadySystem::m_flagImplicitSolver = false
protected

Definition at line 120 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and Nektar::CFSImplicit::v_InitObject().

◆ m_flagUpdatePreconMat

bool Nektar::SolverUtils::UnsteadySystem::m_flagUpdatePreconMat
protected

Definition at line 135 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::PreconCoeff(), and v_DoSolve().

◆ m_homoInitialFwd

bool Nektar::SolverUtils::UnsteadySystem::m_homoInitialFwd
protected

◆ m_inArrayNorm

NekDouble Nektar::SolverUtils::UnsteadySystem::m_inArrayNorm = -1.0
protected

◆ m_intScheme

LibUtilities::TimeIntegrationSchemeSharedPtr Nektar::SolverUtils::UnsteadySystem::m_intScheme
protected

◆ m_intVariables

std::vector<int> Nektar::SolverUtils::UnsteadySystem::m_intVariables
protected

◆ m_locTimeStep

Array<OneD, NekDouble> Nektar::SolverUtils::UnsteadySystem::m_locTimeStep
protected

local time step(notice only for jfnk other see m_cflSafetyFactor)

Definition at line 126 of file UnsteadySystem.h.

◆ m_magnitdEstimat

Array<OneD, NekDouble> Nektar::SolverUtils::UnsteadySystem::m_magnitdEstimat
protected

estimate the magnitude of each conserved varibles

Definition at line 123 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::CalcRefValues(), and Nektar::CFSImplicit::NumCalcRiemFluxJac().

◆ m_maxLinItePerNewton

int Nektar::SolverUtils::UnsteadySystem::m_maxLinItePerNewton
protected

Definition at line 137 of file UnsteadySystem.h.

◆ m_nanSteps

int Nektar::SolverUtils::UnsteadySystem::m_nanSteps
protected

Definition at line 79 of file UnsteadySystem.h.

Referenced by Nektar::Dummy::v_InitObject().

◆ m_ode

LibUtilities::TimeIntegrationSchemeOperators Nektar::SolverUtils::UnsteadySystem::m_ode
protected

◆ m_previousSolution

Array<OneD, Array<OneD, NekDouble> > Nektar::SolverUtils::UnsteadySystem::m_previousSolution
protected

Storage for previous solution for steady-state check.

Definition at line 104 of file UnsteadySystem.h.

Referenced by CheckSteadyState(), InitializeSteadyState(), and v_SteadyStateResidual().

◆ m_StagesPerStep

int Nektar::SolverUtils::UnsteadySystem::m_StagesPerStep = 1
protected

Definition at line 131 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::DoImplicitSolveCoeff(), and v_DoSolve().

◆ m_steadyStateRes

NekDouble Nektar::SolverUtils::UnsteadySystem::m_steadyStateRes = 1.0
protected

Definition at line 100 of file UnsteadySystem.h.

Referenced by CheckSteadyState().

◆ m_steadyStateRes0

NekDouble Nektar::SolverUtils::UnsteadySystem::m_steadyStateRes0 = 1.0
protected

Definition at line 101 of file UnsteadySystem.h.

Referenced by CheckSteadyState().

◆ m_steadyStateSteps

int Nektar::SolverUtils::UnsteadySystem::m_steadyStateSteps
protected

Check for steady state at step interval.

Definition at line 99 of file UnsteadySystem.h.

Referenced by v_DoSolve(), and v_InitObject().

◆ m_steadyStateTol

NekDouble Nektar::SolverUtils::UnsteadySystem::m_steadyStateTol
protected

Tolerance to which steady state should be evaluated at.

Definition at line 97 of file UnsteadySystem.h.

Referenced by CheckSteadyState(), InitializeSteadyState(), v_DoSolve(), and v_InitObject().

◆ m_TimeIntegLambda

NekDouble Nektar::SolverUtils::UnsteadySystem::m_TimeIntegLambda = 0.0
protected

coefff of spacial derivatives(rhs or m_F in GLM) in calculating the residual of the whole equation(used in unsteady time integrations)

Definition at line 117 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::CalcPreconMatBRJCoeff(), Nektar::CFSImplicit::DoImplicitSolveCoeff(), Nektar::CFSImplicit::NonlinSysEvaluatorCoeff(), Nektar::CFSImplicit::PreconCoeff(), and Nektar::CFSImplicit::v_UpdateTimeStepCheck().

◆ m_TotImpStages

int Nektar::SolverUtils::UnsteadySystem::m_TotImpStages = 0
protected

Definition at line 141 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::DoImplicitSolveCoeff(), and v_DoSolve().

◆ m_TotLinItePerStep

int Nektar::SolverUtils::UnsteadySystem::m_TotLinItePerStep = 0
protected

Definition at line 130 of file UnsteadySystem.h.

Referenced by v_DoSolve().

◆ m_TotLinIts

int Nektar::SolverUtils::UnsteadySystem::m_TotLinIts = 0
protected

Definition at line 140 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::DoImplicitSolveCoeff(), and v_DoSolve().

◆ m_TotNewtonIts

int Nektar::SolverUtils::UnsteadySystem::m_TotNewtonIts = 0
protected

Definition at line 139 of file UnsteadySystem.h.

Referenced by Nektar::CFSImplicit::DoImplicitSolveCoeff(), and v_DoSolve().