56 int ndim =
m_fields[0]->GetCoordim(0);
58 int bndsize = (ndim == 2) ? 4 : 7;
60 for (
const auto &it :
m_session->GetVariables())
62 if (it.size() != 4 || it[0] !=
'p' || it[1] !=
'h' || it[2] !=
'i' ||
63 it[3] <
'0' || it[4] >= bndsize +
'0')
66 "Error: incorrect variable name '" + it +
67 "', should be phi[0-3] or phi[0-6].");
76 for (
int i = 0; i < m_BndConds.size(); ++i)
78 if (boost::iequals(m_BndConds[i]->GetUserDefined(),
"MOVE"))
80 numpts += m_BndExp[i]->GetTotPoints();
85 if (
m_session->DefinesParameter(
"Pivotx"))
89 if (
m_session->DefinesParameter(
"Pivoty"))
93 if (
m_session->DefinesParameter(
"Pivotz"))
99 for (
int i = 0; i < bndsize; ++i)
105 for (
int i = 0; i < m_BndConds.size(); ++i)
107 if (boost::iequals(m_BndConds[i]->GetUserDefined(),
"MOVE"))
109 int npts = m_BndExp[i]->GetTotPoints();
112 for (
int j = 0; j < 3; ++j)
117 m_BndExp[i]->GetNormals(n);
118 m_BndExp[i]->GetCoords(x[0], x[1], x[2]);
119 for (
int j = 0; j < 3; ++j)
124 for (
int j = 0; j < ndim; ++j)
131 &n[1][0], 1, &atmp[0], 1);
136 &n[2][0], 1, &atmp[0], 1);
139 &n[0][0], 1, &atmp[0], 1);
142 for (
int j = 0; j < 2; ++j)
167 for (
int i = 0; i <
m_fields.size(); ++i)
186 int m =
m_session->GetVariable(n)[3] -
'0';
190 m_fields[n]->GetBndCondExpansions();
192 for (
int i = 0; i < m_BndConds.size(); ++i)
194 if (boost::iequals(m_BndConds[i]->GetUserDefined(),
"MOVE"))
197 m_BndExp[i]->UpdateCoeffs());
198 offset += m_BndExp[i]->GetTotPoints();
208 m_fields[0]->GetBndCondExpansions();
211 std::numeric_limits<NekDouble>::lowest());
213 for (
int i = 0; i < m_BndConds.size(); ++i)
215 if (boost::iequals(m_BndConds[i]->GetUserDefined(),
"MOVE"))
220 m_fields[0]->GetBndElmtExpansion(i, BndElmtExp,
false);
222 for (
int j = 0; j < nfld; ++j)
226 m_fields[j]->ExtractElmtToBndPhys(i, phiElm, phi[j]);
230 for (
int j = 0; j < nfld; ++j)
234 Vmath::Vmul(edgeExplist->GetTotPoints(), phi[j], 1,
236 value[k + j * nfld] = edgeExplist->Integral(mularray);
239 offset += edgeExplist->GetTotPoints();
244 if (
m_session->GetComm()->GetRank() == 0)
246 for (
int j = 0; j < nfld; ++j)
248 for (
int k = 0; k < nfld; ++k)
250 std::cout <<
"value[" <<
m_session->GetVariable(j)[3] <<
", "
252 <<
"] = " << std::scientific << std::setprecision(7)
253 << value[k + j * nfld] << std::endl;
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Array< OneD, bool > v_GetSystemSingularChecks() override
static EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Creates an instance of this class.
void v_GenerateSummary(SolverUtils::SummaryList &s) override
Virtual function for generating summary information.
void v_DoSolve() override
Virtual function for solve implementation.
StdRegions::ConstFactorMap m_factors
void setUserDefinedBC(int n)
void calculateAddedMass()
Array< OneD, NekDouble > m_pivot
void v_DoInitialise(bool dumpInitialConditions=true) override
Virtual function for initialisation implementation.
LaplacePhi(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
static std::string className
Name of class.
Array< OneD, Array< OneD, NekDouble > > m_boundValues
void v_InitObject(bool DeclareFields=true) override
Initialisation object for EquationSystem.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
A base class for describing how to solve specific equations.
SOLVER_UTILS_EXPORT void SessionSummary(SummaryList &vSummary)
Write out a session summary.
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
virtual SOLVER_UTILS_EXPORT void v_InitObject(bool DeclareFeld=true)
Initialisation object for EquationSystem.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
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 int GetTotPoints()
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::vector< std::pair< std::string, std::string > > SummaryList
EquationSystemFactory & GetEquationSystemFactory()
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
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.
void Neg(int n, T *x, const int incx)
Negate x = -x.
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
void Vvtvvtm(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtm (vector times vector minus vector times vector):
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.