47 Loki::NoDestroy > Type;
48 return Type::Instance();
60 : m_session(pSession),
75 if(
m_session->DefinesSolverInfo(
"PROJECTION"))
77 std::string ProjectStr
80 if((ProjectStr ==
"Continuous")||(ProjectStr ==
"Galerkin")||
81 (ProjectStr ==
"CONTINUOUS")||(ProjectStr ==
"GALERKIN"))
85 else if((ProjectStr ==
"MixedCGDG")||(ProjectStr ==
"Mixed_CG_Discontinuous"))
89 else if(ProjectStr ==
"DisContinuous")
95 ASSERTL0(
false,
"PROJECTION value not recognised");
100 cerr <<
"Projection type not specified in SOLVERINFO,"
101 "defaulting to continuous Galerkin" << endl;
108 if(
m_session->DefinesSolverInfo(
"DEALIASING"))
128 const int nConvectiveFields,
129 const Array<OneD, int> &vel_loc,
130 const Array<
OneD,
const Array<OneD, NekDouble> > &pInarray,
131 Array<
OneD, Array<OneD, NekDouble> > &pOutarray,
133 Array<OneD, NekDouble> &pWk)
136 int VelDim = vel_loc.num_elements();
137 int nqtot = pFields[0]->GetTotPoints();
138 Array<OneD, Array<OneD, NekDouble> > velocity(VelDim);
140 ASSERTL1(nConvectiveFields == pInarray.num_elements(),
"Number of convective fields and Inarray are not compatible");
142 for(i = 0; i < VelDim; ++i)
147 velocity[i] = Array<OneD, NekDouble>(nqtot,0.0);
148 pFields[i]->HomogeneousBwdTrans(pInarray[j],velocity[i]);
152 velocity[i] = pInarray[vel_loc[i]];
157 DoAdvection(pFields,velocity,pInarray,pOutarray,time,pWk);
161 const Array<
OneD,
const Array<OneD, NekDouble> > &velocity,
162 const Array<
OneD,
const Array<OneD, NekDouble> > &pInarray,
163 Array<
OneD, Array<OneD, NekDouble> > &pOutarray,
165 Array<OneD, NekDouble> &pWk)
168 int nqtot = pFields[0]->GetTotPoints();
169 int VelDim = velocity.num_elements();
170 Array<OneD, NekDouble > Deriv;
176 if(pWk.num_elements())
178 ASSERTL0(pWk.num_elements() >= nqtot*VelDim,
"Workspace is not sufficient");
183 Deriv = Array<OneD, NekDouble> (nqtot*VelDim);