46 EigenValuesAdvection::EigenValuesAdvection(
58 std::vector<std::string> vel;
108 cout <<
"Num Phys Points = " << npoints << endl;
109 cout <<
"Num Coeffs = " << ncoeffs << endl;
110 cout <<
"Num Cont Coeffs = " << dofs << endl;
119 for (
int j = 0; j < npoints; j++)
136 m_fields[0]->MultiplyByElmtInvMass(WeakAdv[0],WeakAdv[0]);
138 m_fields[0]->BwdTrans(WeakAdv[0],outarray[0]);
147 for(i = 0; i < nvariables; ++i)
150 m_fields[i]->FwdTrans(inarray[i],WeakAdv[i]);
152 m_fields[i]->BwdTrans_IterPerExp(WeakAdv[i],tmp[i]);
161 m_fields[i]->FwdTrans(outarray[i],WeakAdv[i]);
163 m_fields[i]->BwdTrans_IterPerExp(WeakAdv[i],outarray[i]);
171 Vmath::Vcopy(npoints,&(outarray[0][0]),1,&(MATRIX[j]),npoints);
183 int info = 0, lwork = 3*npoints;
191 Lapack::Dgeev(jobvl,jobvr,npoints,MATRIX.get(),npoints,EIG_R.get(),EIG_I.get(),&dum,1,&dum,1,&work[0],lwork,info);
197 mFile = fopen (
"WeakAdvMatrix.txt",
"w");
198 for(
int j = 0; j<npoints; j++)
200 for(
int k = 0; k<npoints; k++)
202 fprintf(mFile,
"%e ",MATRIX[j*npoints+k]);
212 pFile = fopen (
"Eigenvalues.txt",
"w");
213 for(
int j = 0; j<npoints; j++)
215 fprintf(pFile,
"%e %e\n",EIG_R[j],EIG_I[j]);
219 cout <<
"\nEigenvalues : " << endl;
220 for(
int j = 0; j<npoints; j++)
222 cout << EIG_R[j] <<
"\t" << EIG_I[j] << endl;
230 ASSERTL1(flux.num_elements() ==
m_velocity.num_elements(),
"Dimension of flux array and velocity array do not match");
232 for(
int j = 0; j < flux.num_elements(); ++j)
251 for(i = 0; i < nvel; ++i)
257 for(i = 0; i < numflux.num_elements(); ++i)
259 m_fields[i]->GetFwdBwdTracePhys(physfield[i],Fwd,Bwd);
260 m_fields[i]->GetTrace()->Upwind(Vn,Fwd,Bwd,numflux[i]);
262 Vmath::Vmul(nTraceNumPoints,numflux[i],1,Vn,1,numflux[i],1);
f SOLVER_UTILS_EXPORT void AdvectionNonConservativeForm(const Array< OneD, Array< OneD, NekDouble > > &V, const Array< OneD, const NekDouble > &u, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wk=NullNekDouble1DArray)
Compute the non-conservative advection.
A base class for describing how to solve specific equations.
virtual void v_GetFluxVector(const int i, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &flux)
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
enum MultiRegions::ProjectionType m_projectionType
Type of projection; e.g continuous or discontinuous.
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
virtual ~EigenValuesAdvection()
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Initialisation object for EquationSystem.
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
Array holding trace normals for DG simulations in the forwards direction.
int m_spacedim
Spatial dimension (>= expansion dim).
void Neg(int n, T *x, const int incx)
Negate x = -x.
virtual void v_DoInitialise()
Virtual function for initialisation implementation.
virtual void v_NumericalFlux(Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &numflux)
SOLVER_UTILS_EXPORT void EvaluateFunction(Array< OneD, Array< OneD, NekDouble > > &pArray, std::string pFunctionName, const NekDouble pTime=0.0, const int domain=0)
Evaluates a function as specified in the session file.
EquationSystemFactory & GetEquationSystemFactory()
virtual void v_InitObject()
Initialisation object for EquationSystem.
Array< OneD, Array< OneD, NekDouble > > m_velocity
SOLVER_UTILS_EXPORT int GetNpoints()
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
SOLVER_UTILS_EXPORT int GetTraceNpoints()
SOLVER_UTILS_EXPORT int GetNcoeffs()
SOLVER_UTILS_EXPORT void WeakDGAdvection(const Array< OneD, Array< OneD, NekDouble > > &InField, Array< OneD, Array< OneD, NekDouble > > &OutField, bool NumericalFluxIncludesNormal=true, bool InFieldIsInPhysSpace=false, int nvariables=0)
Calculate the weak discontinuous Galerkin advection.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
virtual void v_DoSolve()
Virtual function for solve implementation.
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.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory.