Nektar++
Public Types | Public Member Functions | Private Attributes | List of all members
Nektar::LibUtilities::TimeIntegrationSolution Class Reference

#include <TimeIntegrationScheme.h>

Public Types

typedef Array< OneD, Array< OneD, Array< OneD, NekDouble > > > TripleArray
 
typedef Array< OneD, Array< OneD, NekDouble > > DoubleArray
 

Public Member Functions

 TimeIntegrationSolution (const TimeIntegrationSchemeKey &key, const DoubleArray &y, const NekDouble time, const NekDouble timestep)
 
 TimeIntegrationSolution (const TimeIntegrationSchemeKey &key, const TripleArray &y, const Array< OneD, NekDouble > &t)
 
 TimeIntegrationSolution (const TimeIntegrationSchemeKey &key, unsigned int nvar, unsigned int npoints)
 
 TimeIntegrationSolution (const TimeIntegrationSchemeKey &key)
 
const TimeIntegrationSchemeSharedPtrGetIntegrationScheme () const
 
const TimeIntegrationSchemeKeyGetIntegrationSchemeKey () const
 
TimeIntegrationMethod GetIntegrationMethod () const
 
const TripleArrayGetSolutionVector () const
 
TripleArrayUpdateSolutionVector ()
 
const DoubleArrayGetSolution () const
 
DoubleArrayUpdateSolution ()
 
const Array< OneD, const NekDouble > & GetTimeVector () const
 
Array< OneD, NekDouble > & UpdateTimeVector ()
 
NekDouble GetTime () const
 
int GetNsteps ()
 
int GetFirstDim () const
 
int GetSecondDim () const
 
unsigned int GetNvalues (void) const
 
unsigned int GetNderivs (void) const
 
const Array< OneD, const unsigned int > & GetTimeLevelOffset ()
 
DoubleArrayGetValue (const unsigned int timeLevelOffset)
 
DoubleArrayGetDerivative (const unsigned int timeLevelOffset)
 
NekDouble GetValueTime (const unsigned int timeLevelOffset)
 
void SetValue (const unsigned int timeLevelOffset, const DoubleArray &y, const NekDouble t)
 
void SetDerivative (const unsigned int timeLevelOffset, const DoubleArray &y, const NekDouble timestep)
 
void SetSolVector (const int Offset, const DoubleArray &y)
 
void RotateSolutionVector ()
 

Private Attributes

TimeIntegrationSchemeSharedPtr m_scheme
 
TripleArray m_solVector
 
Array< OneD, NekDoublem_t
 

Detailed Description

Definition at line 637 of file TimeIntegrationScheme.h.

Member Typedef Documentation

◆ DoubleArray

Definition at line 641 of file TimeIntegrationScheme.h.

◆ TripleArray

Definition at line 640 of file TimeIntegrationScheme.h.

Constructor & Destructor Documentation

◆ TimeIntegrationSolution() [1/4]

Nektar::LibUtilities::TimeIntegrationSolution::TimeIntegrationSolution ( const TimeIntegrationSchemeKey key,
const DoubleArray y,
const NekDouble  time,
const NekDouble  timestep 
)

Definition at line 74 of file TimeIntegrationScheme.cpp.

References GetTimeLevelOffset(), m_scheme, m_solVector, and m_t.

77  :
79  m_solVector(m_scheme->GetNsteps()),
80  m_t(m_scheme->GetNsteps())
81  {
82  m_solVector[0] = y;
83  m_t[0] = time;
84 
85  int nsteps = m_scheme->GetNsteps();
86  int nvar = y.num_elements();
87  int npoints = y[0].num_elements();
88  int nMultiStepVals = m_scheme->GetNmultiStepValues();
89  const Array<OneD, const unsigned int>& timeLevels = GetTimeLevelOffset();
90  for(int i = 1; i < nsteps; i++)
91  {
92  m_solVector[i] = Array<OneD, Array<OneD, NekDouble> >(nvar);
93  for(int j = 0; j < nvar; j++)
94  {
95  m_solVector[i][j] = Array<OneD,NekDouble>(npoints,0.0);
96  }
97  if(i < nMultiStepVals)
98  {
99  m_t[i] = time - i*timestep*timeLevels[i];
100  }
101  else
102  {
103  m_t[i] = timestep;
104  }
105  }
106  }
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)
const Array< OneD, const unsigned int > & GetTimeLevelOffset()

◆ TimeIntegrationSolution() [2/4]

Nektar::LibUtilities::TimeIntegrationSolution::TimeIntegrationSolution ( const TimeIntegrationSchemeKey key,
const TripleArray y,
const Array< OneD, NekDouble > &  t 
)

Definition at line 108 of file TimeIntegrationScheme.cpp.

References ASSERTL1, and m_scheme.

110  :
112  m_solVector(y),
113  m_t(t)
114  {
115  ASSERTL1(y.num_elements()==m_scheme->GetNsteps(),"Amount of Entries does not match number of (multi-) steps");
116  }
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ TimeIntegrationSolution() [3/4]

Nektar::LibUtilities::TimeIntegrationSolution::TimeIntegrationSolution ( const TimeIntegrationSchemeKey key,
unsigned int  nvar,
unsigned int  npoints 
)

Definition at line 118 of file TimeIntegrationScheme.cpp.

References m_scheme, and m_solVector.

120  :
122  m_solVector(m_scheme->GetNsteps()),
123  m_t(m_scheme->GetNsteps())
124  {
125  for(int i = 0; i < m_scheme->GetNsteps(); i++)
126  {
127  m_solVector[i] = Array<OneD, Array<OneD, NekDouble> >(nvar);
128  for(int j = 0; j < nvar; j++)
129  {
130  m_solVector[i][j] = Array<OneD,NekDouble>(npoints);
131  }
132  }
133  }
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)

◆ TimeIntegrationSolution() [4/4]

Nektar::LibUtilities::TimeIntegrationSolution::TimeIntegrationSolution ( const TimeIntegrationSchemeKey key)

Definition at line 135 of file TimeIntegrationScheme.cpp.

135  :
137  m_solVector(m_scheme->GetNsteps()),
138  m_t(m_scheme->GetNsteps())
139  {
140  }
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)

Member Function Documentation

◆ GetDerivative()

DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetDerivative ( const unsigned int  timeLevelOffset)
inline

Definition at line 763 of file TimeIntegrationScheme.h.

References ASSERTL1.

764  {
765  int nMultiStepVals = m_scheme->GetNmultiStepValues();
766  int size = m_scheme->GetNsteps();
767  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
768 
769  for(int i = nMultiStepVals; i < size; i++)
770  {
771  if( timeLevelOffset == offsetvec[i] )
772  {
773  return m_solVector[i];
774  }
775  }
776  ASSERTL1(false,"The solution vector of this scheme does not contain a derivative at the requested time-level");
777  return m_solVector[0];
778  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ GetFirstDim()

int Nektar::LibUtilities::TimeIntegrationSolution::GetFirstDim ( ) const
inline

Definition at line 712 of file TimeIntegrationScheme.h.

713  {
714  return m_solVector[0].num_elements();
715  }

◆ GetIntegrationMethod()

TimeIntegrationMethod Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationMethod ( ) const
inline

Definition at line 667 of file TimeIntegrationScheme.h.

668  {
669  return m_scheme->GetIntegrationMethod();
670  }

◆ GetIntegrationScheme()

const TimeIntegrationSchemeSharedPtr& Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationScheme ( ) const
inline

Definition at line 657 of file TimeIntegrationScheme.h.

658  {
659  return m_scheme;
660  }

◆ GetIntegrationSchemeKey()

const TimeIntegrationSchemeKey& Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationSchemeKey ( ) const
inline

Definition at line 662 of file TimeIntegrationScheme.h.

663  {
664  return m_scheme->GetIntegrationSchemeKey();
665  }

◆ GetNderivs()

unsigned int Nektar::LibUtilities::TimeIntegrationSolution::GetNderivs ( void  ) const
inline

Definition at line 731 of file TimeIntegrationScheme.h.

732  {
733  return m_scheme->GetNmultiStepDerivs();
734  }

◆ GetNsteps()

int Nektar::LibUtilities::TimeIntegrationSolution::GetNsteps ( void  )
inline

Definition at line 707 of file TimeIntegrationScheme.h.

708  {
709  return m_scheme->GetNsteps();
710  }

◆ GetNvalues()

unsigned int Nektar::LibUtilities::TimeIntegrationSolution::GetNvalues ( void  ) const
inline

Definition at line 724 of file TimeIntegrationScheme.h.

725  {
726  return m_scheme->GetNmultiStepValues();
727  }

◆ GetSecondDim()

int Nektar::LibUtilities::TimeIntegrationSolution::GetSecondDim ( ) const
inline

Definition at line 717 of file TimeIntegrationScheme.h.

718  {
719  return m_solVector[0][0].num_elements();
720  }

◆ GetSolution()

const DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetSolution ( ) const
inline

Definition at line 682 of file TimeIntegrationScheme.h.

683  {
684  return m_solVector[0];
685  }

◆ GetSolutionVector()

const TripleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetSolutionVector ( ) const
inline

Definition at line 672 of file TimeIntegrationScheme.h.

673  {
674  return m_solVector;
675  }

◆ GetTime()

NekDouble Nektar::LibUtilities::TimeIntegrationSolution::GetTime ( ) const
inline

Definition at line 702 of file TimeIntegrationScheme.h.

703  {
704  return m_t[0];
705  }

◆ GetTimeLevelOffset()

const Array<OneD, const unsigned int>& Nektar::LibUtilities::TimeIntegrationSolution::GetTimeLevelOffset ( )
inline

Definition at line 738 of file TimeIntegrationScheme.h.

Referenced by TimeIntegrationSolution().

739  {
740  return m_scheme->GetTimeLevelOffset();
741  }

◆ GetTimeVector()

const Array<OneD, const NekDouble>& Nektar::LibUtilities::TimeIntegrationSolution::GetTimeVector ( ) const
inline

Definition at line 692 of file TimeIntegrationScheme.h.

693  {
694  return m_t;
695  }

◆ GetValue()

DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetValue ( const unsigned int  timeLevelOffset)
inline

Definition at line 745 of file TimeIntegrationScheme.h.

References ASSERTL1.

746  {
747  int nMultiStepVals = m_scheme->GetNmultiStepValues();
748  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
749 
750  for(int i = 0; i < nMultiStepVals; i++)
751  {
752  if( timeLevelOffset == offsetvec[i] )
753  {
754  return m_solVector[i];
755  }
756  }
757  ASSERTL1(false,"The solution vector of this scheme does not contain a value at the requested time-level");
758  return m_solVector[0];
759  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ GetValueTime()

NekDouble Nektar::LibUtilities::TimeIntegrationSolution::GetValueTime ( const unsigned int  timeLevelOffset)
inline

Definition at line 782 of file TimeIntegrationScheme.h.

References ASSERTL1.

783  {
784  int nMultiStepVals = m_scheme->GetNmultiStepValues();
785  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
786 
787  for(int i = 0; i < nMultiStepVals; i++)
788  {
789  if( timeLevelOffset == offsetvec[i] )
790  {
791  return m_t[i];
792  }
793  }
794  ASSERTL1(false,"The solution vector of this scheme does not contain a value at the requested time-level");
795  return m_t[0];
796  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250

◆ RotateSolutionVector()

void Nektar::LibUtilities::TimeIntegrationSolution::RotateSolutionVector ( )
inline

Definition at line 845 of file TimeIntegrationScheme.h.

846  {
847  int i;
848  int nMultiStepVals = m_scheme->GetNmultiStepValues();
849  int size = m_scheme->GetNsteps();
850  for(i = (nMultiStepVals-1); i > 0; i--)
851  {
852  m_solVector[i] = m_solVector[i-1];
853  }
854 
855  for(i = (size-1); i > nMultiStepVals; i--)
856  {
857  m_solVector[i] = m_solVector[i-1];
858  }
859  }

◆ SetDerivative()

void Nektar::LibUtilities::TimeIntegrationSolution::SetDerivative ( const unsigned int  timeLevelOffset,
const DoubleArray y,
const NekDouble  timestep 
)
inline

Definition at line 820 of file TimeIntegrationScheme.h.

821  {
822  int nMultiStepVals = m_scheme->GetNmultiStepValues();
823  int size = m_scheme->GetNsteps();
824  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
825 
826  for(int i = nMultiStepVals; i < size; i++)
827  {
828  if( timeLevelOffset == offsetvec[i] )
829  {
830  m_solVector[i] = y;
831  m_t[i] = timestep;
832  return;
833  }
834  }
835  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()

◆ SetSolVector()

void Nektar::LibUtilities::TimeIntegrationSolution::SetSolVector ( const int  Offset,
const DoubleArray y 
)
inline

Definition at line 838 of file TimeIntegrationScheme.h.

839  {
840  m_solVector[Offset] = y;
841  }

◆ SetValue()

void Nektar::LibUtilities::TimeIntegrationSolution::SetValue ( const unsigned int  timeLevelOffset,
const DoubleArray y,
const NekDouble  t 
)
inline

Definition at line 801 of file TimeIntegrationScheme.h.

802  {
803  int nMultiStepVals = m_scheme->GetNmultiStepValues();
804  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
805 
806  for(int i = 0; i < nMultiStepVals; i++)
807  {
808  if( timeLevelOffset == offsetvec[i] )
809  {
810  m_solVector[i] = y;
811  m_t[i] = t;
812  return;
813  }
814  }
815  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()

◆ UpdateSolution()

DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::UpdateSolution ( )
inline

Definition at line 687 of file TimeIntegrationScheme.h.

688  {
689  return m_solVector[0];
690  }

◆ UpdateSolutionVector()

TripleArray& Nektar::LibUtilities::TimeIntegrationSolution::UpdateSolutionVector ( )
inline

Definition at line 677 of file TimeIntegrationScheme.h.

678  {
679  return m_solVector;
680  }

◆ UpdateTimeVector()

Array<OneD, NekDouble>& Nektar::LibUtilities::TimeIntegrationSolution::UpdateTimeVector ( )
inline

Definition at line 697 of file TimeIntegrationScheme.h.

698  {
699  return m_t;
700  }

Member Data Documentation

◆ m_scheme

TimeIntegrationSchemeSharedPtr Nektar::LibUtilities::TimeIntegrationSolution::m_scheme
private

Definition at line 863 of file TimeIntegrationScheme.h.

Referenced by TimeIntegrationSolution().

◆ m_solVector

TripleArray Nektar::LibUtilities::TimeIntegrationSolution::m_solVector
private

Definition at line 864 of file TimeIntegrationScheme.h.

Referenced by TimeIntegrationSolution().

◆ m_t

Array<OneD,NekDouble> Nektar::LibUtilities::TimeIntegrationSolution::m_t
private

Definition at line 865 of file TimeIntegrationScheme.h.

Referenced by TimeIntegrationSolution().