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

#include <TimeIntegrationScheme.h>

Collaboration diagram for Nektar::LibUtilities::TimeIntegrationSolution:
Collaboration graph
[legend]

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 613 of file TimeIntegrationScheme.h.

Member Typedef Documentation

Definition at line 617 of file TimeIntegrationScheme.h.

Definition at line 616 of file TimeIntegrationScheme.h.

Constructor & Destructor Documentation

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

Definition at line 75 of file TimeIntegrationScheme.cpp.

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

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

Definition at line 109 of file TimeIntegrationScheme.cpp.

References ASSERTL1, and m_scheme.

111  :
113  m_solVector(y),
114  m_t(t)
115  {
116  ASSERTL1(y.num_elements()==m_scheme->GetNsteps(),"Amount of Entries does not match number of (multi-) steps");
117  }
TimeIntegrationSchemeManagerT & TimeIntegrationSchemeManager(void)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:165
Nektar::LibUtilities::TimeIntegrationSolution::TimeIntegrationSolution ( const TimeIntegrationSchemeKey key,
unsigned int  nvar,
unsigned int  npoints 
)

Definition at line 119 of file TimeIntegrationScheme.cpp.

References m_scheme, and m_solVector.

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

Definition at line 136 of file TimeIntegrationScheme.cpp.

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

Member Function Documentation

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

Definition at line 739 of file TimeIntegrationScheme.h.

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

740  {
741  int nMultiStepVals = m_scheme->GetNmultiStepValues();
742  int size = m_scheme->GetNsteps();
743  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
744 
745  for(int i = nMultiStepVals; i < size; i++)
746  {
747  if( timeLevelOffset == offsetvec[i] )
748  {
749  return m_solVector[i];
750  }
751  }
752  ASSERTL1(false,"The solution vector of this scheme does not contain a derivative at the requested time-level");
753  return m_solVector[0];
754  }
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:165
int Nektar::LibUtilities::TimeIntegrationSolution::GetFirstDim ( ) const
inline

Definition at line 688 of file TimeIntegrationScheme.h.

References m_solVector.

689  {
690  return m_solVector[0].num_elements();
691  }
TimeIntegrationMethod Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationMethod ( ) const
inline

Definition at line 643 of file TimeIntegrationScheme.h.

References m_scheme.

644  {
645  return m_scheme->GetIntegrationMethod();
646  }
const TimeIntegrationSchemeSharedPtr& Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationScheme ( ) const
inline

Definition at line 633 of file TimeIntegrationScheme.h.

References m_scheme.

634  {
635  return m_scheme;
636  }
const TimeIntegrationSchemeKey& Nektar::LibUtilities::TimeIntegrationSolution::GetIntegrationSchemeKey ( ) const
inline

Definition at line 638 of file TimeIntegrationScheme.h.

References m_scheme.

639  {
640  return m_scheme->GetIntegrationSchemeKey();
641  }
unsigned int Nektar::LibUtilities::TimeIntegrationSolution::GetNderivs ( void  ) const
inline

Definition at line 707 of file TimeIntegrationScheme.h.

References m_scheme.

708  {
709  return m_scheme->GetNmultiStepDerivs();
710  }
int Nektar::LibUtilities::TimeIntegrationSolution::GetNsteps ( void  )
inline

Definition at line 683 of file TimeIntegrationScheme.h.

References m_scheme.

684  {
685  return m_scheme->GetNsteps();
686  }
unsigned int Nektar::LibUtilities::TimeIntegrationSolution::GetNvalues ( void  ) const
inline

Definition at line 700 of file TimeIntegrationScheme.h.

References m_scheme.

701  {
702  return m_scheme->GetNmultiStepValues();
703  }
int Nektar::LibUtilities::TimeIntegrationSolution::GetSecondDim ( ) const
inline

Definition at line 693 of file TimeIntegrationScheme.h.

References m_solVector.

694  {
695  return m_solVector[0][0].num_elements();
696  }
const DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetSolution ( ) const
inline

Definition at line 658 of file TimeIntegrationScheme.h.

References m_solVector.

659  {
660  return m_solVector[0];
661  }
const TripleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetSolutionVector ( ) const
inline

Definition at line 648 of file TimeIntegrationScheme.h.

References m_solVector.

649  {
650  return m_solVector;
651  }
NekDouble Nektar::LibUtilities::TimeIntegrationSolution::GetTime ( ) const
inline

Definition at line 678 of file TimeIntegrationScheme.h.

References m_t.

679  {
680  return m_t[0];
681  }
const Array<OneD, const unsigned int>& Nektar::LibUtilities::TimeIntegrationSolution::GetTimeLevelOffset ( )
inline

Definition at line 714 of file TimeIntegrationScheme.h.

References m_scheme.

Referenced by GetDerivative(), GetValue(), GetValueTime(), SetDerivative(), SetValue(), and TimeIntegrationSolution().

715  {
716  return m_scheme->GetTimeLevelOffset();
717  }
const Array<OneD, const NekDouble>& Nektar::LibUtilities::TimeIntegrationSolution::GetTimeVector ( ) const
inline

Definition at line 668 of file TimeIntegrationScheme.h.

References m_t.

669  {
670  return m_t;
671  }
DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::GetValue ( const unsigned int  timeLevelOffset)
inline

Definition at line 721 of file TimeIntegrationScheme.h.

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

722  {
723  int nMultiStepVals = m_scheme->GetNmultiStepValues();
724  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
725 
726  for(int i = 0; i < nMultiStepVals; i++)
727  {
728  if( timeLevelOffset == offsetvec[i] )
729  {
730  return m_solVector[i];
731  }
732  }
733  ASSERTL1(false,"The solution vector of this scheme does not contain a value at the requested time-level");
734  return m_solVector[0];
735  }
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:165
NekDouble Nektar::LibUtilities::TimeIntegrationSolution::GetValueTime ( const unsigned int  timeLevelOffset)
inline

Definition at line 758 of file TimeIntegrationScheme.h.

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

759  {
760  int nMultiStepVals = m_scheme->GetNmultiStepValues();
761  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
762 
763  for(int i = 0; i < nMultiStepVals; i++)
764  {
765  if( timeLevelOffset == offsetvec[i] )
766  {
767  return m_t[i];
768  }
769  }
770  ASSERTL1(false,"The solution vector of this scheme does not contain a value at the requested time-level");
771  return m_t[0];
772  }
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:165
void Nektar::LibUtilities::TimeIntegrationSolution::RotateSolutionVector ( )
inline

Definition at line 821 of file TimeIntegrationScheme.h.

References m_scheme, and m_solVector.

822  {
823  int i;
824  int nMultiStepVals = m_scheme->GetNmultiStepValues();
825  int size = m_scheme->GetNsteps();
826  for(i = (nMultiStepVals-1); i > 0; i--)
827  {
828  m_solVector[i] = m_solVector[i-1];
829  }
830 
831  for(i = (size-1); i > nMultiStepVals; i--)
832  {
833  m_solVector[i] = m_solVector[i-1];
834  }
835  }
void Nektar::LibUtilities::TimeIntegrationSolution::SetDerivative ( const unsigned int  timeLevelOffset,
const DoubleArray y,
const NekDouble  timestep 
)
inline

Definition at line 796 of file TimeIntegrationScheme.h.

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

797  {
798  int nMultiStepVals = m_scheme->GetNmultiStepValues();
799  int size = m_scheme->GetNsteps();
800  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
801 
802  for(int i = nMultiStepVals; i < size; i++)
803  {
804  if( timeLevelOffset == offsetvec[i] )
805  {
806  m_solVector[i] = y;
807  m_t[i] = timestep;
808  return;
809  }
810  }
811  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
void Nektar::LibUtilities::TimeIntegrationSolution::SetSolVector ( const int  Offset,
const DoubleArray y 
)
inline

Definition at line 814 of file TimeIntegrationScheme.h.

References m_solVector.

815  {
816  m_solVector[Offset] = y;
817  }
void Nektar::LibUtilities::TimeIntegrationSolution::SetValue ( const unsigned int  timeLevelOffset,
const DoubleArray y,
const NekDouble  t 
)
inline

Definition at line 777 of file TimeIntegrationScheme.h.

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

778  {
779  int nMultiStepVals = m_scheme->GetNmultiStepValues();
780  const Array<OneD, const unsigned int>& offsetvec = GetTimeLevelOffset();
781 
782  for(int i = 0; i < nMultiStepVals; i++)
783  {
784  if( timeLevelOffset == offsetvec[i] )
785  {
786  m_solVector[i] = y;
787  m_t[i] = t;
788  return;
789  }
790  }
791  }
const Array< OneD, const unsigned int > & GetTimeLevelOffset()
DoubleArray& Nektar::LibUtilities::TimeIntegrationSolution::UpdateSolution ( )
inline

Definition at line 663 of file TimeIntegrationScheme.h.

References m_solVector.

664  {
665  return m_solVector[0];
666  }
TripleArray& Nektar::LibUtilities::TimeIntegrationSolution::UpdateSolutionVector ( )
inline

Definition at line 653 of file TimeIntegrationScheme.h.

References m_solVector.

654  {
655  return m_solVector;
656  }
Array<OneD, NekDouble>& Nektar::LibUtilities::TimeIntegrationSolution::UpdateTimeVector ( )
inline

Definition at line 673 of file TimeIntegrationScheme.h.

References m_t.

674  {
675  return m_t;
676  }

Member Data Documentation

TimeIntegrationSchemeSharedPtr Nektar::LibUtilities::TimeIntegrationSolution::m_scheme
private
TripleArray Nektar::LibUtilities::TimeIntegrationSolution::m_solVector
private
Array<OneD,NekDouble> Nektar::LibUtilities::TimeIntegrationSolution::m_t
private