62 std::ostream& outfile,
80 outfile <<
"ZONE" << std::endl;
86 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
89 for (
unsigned i = 0;
i < 2;
i++)
107 (*exact_soln_pt)(time, x, exact_soln);
110 for (
unsigned i = 0;
i < 2;
i++)
112 norm += exact_soln[
i] * exact_soln[
i] *
W;
118 for (
unsigned i = 0;
i < 2;
i++)
120 outfile << x[
i] <<
" ";
124 for (
unsigned i = 0;
i < 2;
i++)
129 outfile << std::endl;
140 std::ostream& outfile,
157 outfile <<
"ZONE" << std::endl;
163 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
166 for (
unsigned i = 0;
i < 2;
i++)
184 (*exact_soln_pt)(x, exact_soln);
187 for (
unsigned i = 0;
i < 2;
i++)
189 norm += exact_soln[
i] * exact_soln[
i] *
W;
195 for (
unsigned i = 0;
i < 2;
i++)
197 outfile << x[
i] <<
" ";
201 for (
unsigned i = 0;
i < 2;
i++)
206 outfile << std::endl;
217 std::ostream& outfile,
218 const unsigned& nplot,
235 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
244 (*exact_soln_pt)(x, exact_soln);
247 for (
unsigned i = 0;
i < 2;
i++)
249 outfile << x[
i] <<
" ";
253 for (
unsigned i = 0;
i < exact_soln.size();
i++)
255 outfile << exact_soln[
i] <<
" ";
258 outfile << std::endl;
272 std::ostream& outfile,
273 const unsigned& nplot,
291 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
300 (*exact_soln_pt)(time, x, exact_soln);
303 for (
unsigned i = 0;
i < 2;
i++)
305 outfile << x[
i] <<
" ";
309 for (
unsigned i = 0;
i < exact_soln.size();
i++)
311 outfile << exact_soln[
i] <<
" ";
314 outfile << std::endl;
329 const unsigned& nplot,
333 unsigned n_node =
nnode();
348 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
357 for (
unsigned i = 0;
i < 2;
i++)
360 interpolated_u[
i] = 0.0;
362 for (
unsigned l = 0; l < n_node; l++)
364 interpolated_u[
i] +=
u_pnst(
t, l,
i) * psi[l];
370 for (
unsigned i = 0;
i < 2;
i++)
376 for (
unsigned i = 0;
i < 2;
i++)
378 outfile << interpolated_u[
i] <<
" ";
381 outfile << std::endl;
395 const unsigned& nplot)
405 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
411 const double Alpha =
alpha();
414 double theta = Alpha * phi;
417 outfile << r * cos(theta) <<
" " << r * sin(theta) <<
" ";
454 outfile << 0 <<
" " << 1 <<
" ";
457 outfile << r <<
" " << phi <<
" ";
459 outfile << std::endl;
461 outfile << std::endl;
471 //==============================================================
472 void PolarNavierStokesEquations::output(std::ostream &outfile,
473 const unsigned &nplot)
476 //Vector of local coordinates
479 // Tecplot header info
480 outfile << tecplot_zone_string(nplot);
482 // Loop over plot points
483 unsigned num_plot_points=nplot_points(nplot);
484 for (unsigned iplot=0;iplot<num_plot_points;iplot++)
487 // Get local coordinates of plot point
488 get_s_plot(iplot,nplot,s);
490 //Work out global physical coordinate
491 const double Alpha = alpha();
492 double r = interpolated_x(s,0);
493 double phi = interpolated_x(s,1);
494 double theta = Alpha*phi;
497 outfile << r*cos(theta) << " " << r*sin(theta) << " ";
500 outfile << interpolated_u_pnst(s,0)*cos(theta) -
501 interpolated_u_pnst(s,1)*sin(theta)
503 outfile << interpolated_u_pnst(s,0)*sin(theta) +
504 interpolated_u_pnst(s,1)*cos(theta)
508 outfile << interpolated_p_pnst(s) << " ";
510 // Radial and Azimuthal velocities
511 outfile << interpolated_u_pnst(s,0) << " " << interpolated_u_pnst(s,1) << "
514 // I need to add exact pressure, radial velocity and radial velocity
516 // Plus the error from these
518 double mu=(1./(sin(m)-m*cos(m)));
519 double exact_u=(mu/r)*(cos(m*phi)-cos(m));
520 double exact_p=(2.*mu)*((cos(m*phi)/(r*r))-cos(m));
521 double exact_dudr=-(exact_u/r);
522 double exact_dudphi=-mu*m*sin(m*phi)/r;
524 // If we don't have Stokes flow then we need to overwrite the Stokes
526 // reading in the correct similarity solution from file
527 const double Re = re();
530 double similarity_solution,dsimilarity_solution;
531 get_similarity_solution(theta,Alpha,similarity_solution,dsimilarity_solution);
532 double A = Global_Physical_Variables::P2/Alpha;
534 exact_u = similarity_solution/(r*Alpha);
535 exact_p = 2.*(exact_u/r)-(A/(2.*Alpha*Alpha))*((1./(r*r))-1.);
536 exact_dudr = -(exact_u/r);
537 exact_dudphi = dsimilarity_solution/(r*Alpha);
540 // exact pressure and error
541 outfile << exact_p << " " << (interpolated_p_pnst(s)-exact_p) << " ";
543 // r and theta for better plotting
544 outfile << r << " " << phi << " ";
546 // exact and oomph du/dr and du/dphi?
547 outfile << exact_u << " " << (interpolated_u_pnst(s,0)-exact_u) << " ";
548 outfile << exact_dudr << " " << (interpolated_dudx_pnst(s,0,0)-exact_dudr)
549 << " "; outfile << exact_dudphi << " " <<
550 (interpolated_dudx_pnst(s,0,1)-exact_dudphi) << " ";
552 outfile << std::endl;
554 outfile << std::endl;
574 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
580 for (
unsigned i = 0;
i < 2;
i++)
587 for (
unsigned i = 0;
i < 2;
i++)
597 fprintf(file_pt,
"\n");
608 const unsigned& nplot)
623 unsigned n_node =
nnode();
627 DShape dpsifdx(n_node, 2);
631 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
647 for (
unsigned i = 0;
i < 2;
i++)
652 for (
unsigned j = 0; j < 2; j++)
654 interpolated_dudx(
i, j) = 0.0;
661 for (
unsigned l = 0; l < n_node; l++)
664 for (
unsigned i = 0;
i < 2;
i++)
670 for (
unsigned j = 0; j < 2; j++)
672 interpolated_dudx(
i, j) +=
u_pnst(l,
i) * dpsifdx(l, j);
679 for (
unsigned i = 0;
i < 2;
i++)
681 dudt_ALE[
i] = dudt[
i];
682 for (
unsigned k = 0; k < 2; k++)
684 dudt_ALE[
i] -= mesh_veloc[k] * interpolated_dudx(
i, k);
690 for (
unsigned i = 0;
i < 2;
i++)
696 for (
unsigned i = 0;
i < 2;
i++)
705 for (
unsigned i = 0;
i < 2;
i++)
707 outfile << dudt_ALE[
i] <<
" ";
714 outfile << std::endl;
733 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
736 for (
unsigned i = 0;
i < 2;
i++)
753 double local_diss = 0.0;
754 for (
unsigned i = 0;
i < 2;
i++)
756 for (
unsigned j = 0; j < 2; j++)
758 local_diss += 2.0 * strainrate(
i, j) * strainrate(
i, j);
762 diss += local_diss * w * J;
785 for (
unsigned i = 0;
i < 2;
i++)
787 traction[
i] = -press *
N[
i];
788 for (
unsigned j = 0; j < 2; j++)
790 traction[
i] += 2.0 * strainrate(
i, j) *
N[j];
806 double local_diss = 0.0;
807 for (
unsigned i = 0;
i < 2;
i++)
809 for (
unsigned j = 0; j < 2; j++)
811 local_diss += 2.0 * strainrate(
i, j) * strainrate(
i, j);
826 if ((strainrate.
ncol() != 2) || (strainrate.
nrow() != 2))
828 std::ostringstream error_stream;
829 error_stream <<
"Wrong size " << strainrate.
ncol() <<
" "
830 << strainrate.
nrow() << std::endl;
832 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
840 unsigned n_node =
nnode();
844 DShape dpsifdx(n_node, 2);
850 unsigned u_nodal_index[2];
851 for (
unsigned i = 0;
i < 2;
i++)
863 for (
unsigned i = 0;
i < 2;
i++)
865 interpolated_u[
i] = 0.0;
867 for (
unsigned j = 0; j < 2; j++)
869 interpolated_dudx(
i, j) = 0.0;
875 for (
unsigned l = 0; l < n_node; l++)
878 for (
unsigned i = 0;
i < 2;
i++)
881 double u_value = this->
nodal_value(l, u_nodal_index[
i]);
882 interpolated_u[
i] += u_value * psif[l];
886 for (
unsigned j = 0; j < 2; j++)
888 interpolated_dudx(
i, j) += u_value * dpsifdx(l, j);
893 const double Alpha =
alpha();
895 strainrate(0, 0) = interpolated_dudx(0, 0);
900 0.5 * (interpolated_dudx(1, 0) - (interpolated_u[1] /
interpolated_x[0]) +
902 strainrate(0, 1) = strainrate(1, 0);
913 if ((strainrate.
ncol() != 2) || (strainrate.
nrow() != 2))
915 std::ostringstream error_stream;
916 error_stream <<
"Wrong size " << strainrate.
ncol() <<
" "
917 << strainrate.
nrow() << std::endl;
919 error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
927 unsigned n_node =
nnode();
931 DShape dpsifdx(n_node, 2);
937 unsigned u_nodal_index[2];
938 for (
unsigned i = 0;
i < 2;
i++)
950 for (
unsigned i = 0;
i < 2;
i++)
952 interpolated_u[
i] = 0.0;
954 for (
unsigned j = 0; j < 2; j++)
956 interpolated_dudx(
i, j) = 0.0;
962 for (
unsigned l = 0; l < n_node; l++)
965 for (
unsigned i = 0;
i < 2;
i++)
968 double u_value = this->
nodal_value(l, u_nodal_index[
i]);
969 interpolated_u[
i] += u_value * psif[l];
973 for (
unsigned j = 0; j < 2; j++)
975 interpolated_dudx(
i, j) += u_value * dpsifdx(l, j);
980 const double Alpha =
alpha();
982 strainrate(0, 0) = interpolated_dudx(0, 0);
987 0.5 * (interpolated_dudx(1, 0) - (interpolated_u[1] /
interpolated_x[0]) +
989 strainrate(0, 1) = strainrate(1, 0);
1009 double kin_en = 0.0;
1018 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1021 for (
unsigned i = 0;
i < 2;
i++)
1033 double veloc_squared = 0.0;
1034 for (
unsigned i = 0;
i < 2;
i++)
1039 kin_en += 0.5 * veloc_squared * w * J;
1051 double press_int = 0;
1060 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1063 for (
unsigned i = 0;
i < 2;
i++)
1081 press_int += press *
W;
1107 unsigned n_node =
nnode();
1113 unsigned u_nodal_index[2];
1114 for (
unsigned i = 0;
i < 2;
i++)
1120 Shape psif(n_node), testf(n_node);
1121 DShape dpsifdx(n_node, 2), dtestfdx(n_node, 2);
1124 Shape psip(n_pres), testp(n_pres);
1133 const double Re =
re();
1134 const double Alpha =
alpha();
1135 const double Re_St =
re_st();
1138 int local_eqn = 0, local_unknown = 0;
1141 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1150 ipt, psif, dpsifdx, testf, dtestfdx);
1160 double interpolated_p = 0.0;
1168 for (
unsigned i = 0;
i < 2;
i++)
1172 interpolated_u[
i] = 0.0;
1174 for (
unsigned j = 0; j < 2; j++)
1176 interpolated_dudx(
i, j) = 0.0;
1181 for (
unsigned l = 0; l < n_pres; l++)
1182 interpolated_p +=
p_pnst(l) * psip[l];
1187 for (
unsigned l = 0; l < n_node; l++)
1190 for (
unsigned i = 0;
i < 2;
i++)
1193 double u_value = this->
nodal_value(l, u_nodal_index[
i]);
1194 interpolated_u[
i] += u_value * psif[l];
1200 for (
unsigned j = 0; j < 2; j++)
1202 interpolated_dudx(
i, j) += u_value * dpsifdx(l, j);
1211 for (
unsigned l = 0; l < n_node; l++)
1222 residuals[local_eqn] +=
1225 ((1. / Alpha) * interpolated_dudx(1, 1) + interpolated_u[0])) *
1229 residuals[local_eqn] +=
1230 (interpolated_p - (1. +
Gamma[
i]) * interpolated_dudx(0, 0)) *
1234 residuals[local_eqn] -=
1237 Gamma[
i] * interpolated_dudx(1, 0)) *
1242 residuals[local_eqn] -=
1244 (interpolated_u[0] * interpolated_dudx(0, 0) +
1246 interpolated_dudx(0, 1) -
1255 for (
unsigned l2 = 0; l2 < n_node; l2++)
1263 if (local_unknown >= 0)
1266 jacobian(local_eqn, local_unknown) -=
1271 jacobian(local_eqn, local_unknown) -=
1272 (1. +
Gamma[
i]) * dpsifdx(l2, 0) * dtestfdx(l, 0) *
1275 jacobian(local_eqn, local_unknown) -=
1281 jacobian(local_eqn, local_unknown) -=
1283 (psif[l2] * interpolated_dudx(0, 0) +
1284 interpolated_u[0] * dpsifdx(l2, 0) +
1292 mass_matrix(local_eqn, local_unknown) +=
1304 if (local_unknown >= 0)
1307 jacobian(local_eqn, local_unknown) -=
1311 jacobian(local_eqn, local_unknown) -=
1313 Gamma[
i] * dpsifdx(l2, 0)) *
1318 jacobian(local_eqn, local_unknown) -=
1321 interpolated_dudx(0, 1) -
1332 for (
unsigned l2 = 0; l2 < n_pres; l2++)
1336 if (local_unknown >= 0)
1338 jacobian(local_eqn, local_unknown) +=
1342 jacobian(local_eqn, local_unknown) +=
1358 residuals[local_eqn] +=
1360 interpolated_dudx(0, 1) -
1366 residuals[local_eqn] -=
1367 (interpolated_dudx(1, 0) +
1374 residuals[local_eqn] +=
1383 residuals[local_eqn] -=
1385 (interpolated_u[0] * interpolated_dudx(1, 0) +
1387 interpolated_dudx(1, 1) +
1395 for (
unsigned l2 = 0; l2 < n_node; l2++)
1403 if (local_unknown >= 0)
1406 jacobian(local_eqn, local_unknown) +=
1410 jacobian(local_eqn, local_unknown) -=
1415 jacobian(local_eqn, local_unknown) -=
1421 jacobian(local_eqn, local_unknown) -=
1423 (psif[l2] * interpolated_dudx(1, 0) +
1434 if (local_unknown >= 0)
1437 jacobian(local_eqn, local_unknown) +=
1442 jacobian(local_eqn, local_unknown) -=
1447 jacobian(local_eqn, local_unknown) -=
1453 jacobian(local_eqn, local_unknown) -=
1455 (interpolated_u[0] * dpsifdx(l2, 0) +
1457 interpolated_dudx(1, 1) +
1466 mass_matrix(local_eqn, local_unknown) +=
1478 for (
unsigned l2 = 0; l2 < n_pres; l2++)
1482 if (local_unknown >= 0)
1484 jacobian(local_eqn, local_unknown) +=
1501 for (
unsigned l = 0; l < n_pres; l++)
1507 residuals[local_eqn] +=
1508 (interpolated_dudx(0, 0) + (interpolated_u[0] /
interpolated_x[0]) +
1517 for (
unsigned l2 = 0; l2 < n_node; l2++)
1523 if (local_unknown >= 0)
1525 jacobian(local_eqn, local_unknown) +=
1535 if (local_unknown >= 0)
1537 jacobian(local_eqn, local_unknown) +=
1561 2, 2, 2, 2, 2, 2, 2, 2, 2};
1567 const unsigned int& n)
const
1578 std::set<std::pair<Data*, unsigned>>& paired_load_data)
1581 unsigned n_node = this->
nnode();
1582 for (
unsigned n = 0; n < n_node; n++)
1586 for (
unsigned i = 0;
i < 2;
i++)
1588 paired_load_data.insert(std::make_pair(this->
node_pt(n),
i));
1594 for (
unsigned l = 0; l < n_internal; l++)
1598 for (
unsigned j = 0; j < nval; j++)
1612 3, 2, 3, 2, 2, 2, 3, 2, 3};
1623 std::set<std::pair<Data*, unsigned>>& paired_load_data)
1626 unsigned n_node = this->
nnode();
1627 for (
unsigned n = 0; n < n_node; n++)
1631 for (
unsigned i = 0;
i < 2;
i++)
1633 paired_load_data.insert(std::make_pair(this->
node_pt(n),
i));
1639 for (
unsigned l = 0; l < n_pres; l++)
1643 paired_load_data.insert(std::make_pair(this->
node_pt(
Pconv[l]), 2));
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
unsigned long nrow() const
Return the number of rows of the matrix.
unsigned long ncol() const
Return the number of columns of the matrix.
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction")
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned nnode() const
Return the number of nodes.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as .
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direc...
virtual unsigned nplot_points(const unsigned &nplot) const
Return total number of plot points (when plotting nplot points in each "coordinate direction")
double nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is ...
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Compute the geometric shape functions and also first derivatives w.r.t. global coordinates at local c...
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"...
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Function pointer for function that computes Vector-valued time-dependent function as .
double dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n.
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
unsigned ninternal_data() const
Return the number of internal data objects.
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
An OomphLibError object which should be thrown when an run-time error is encountered....
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
void get_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Add to the set paired_load_data pairs of pointers to data objects and unsigned integers that index th...
static const unsigned Initial_Nvalue[]
Static array of ints to hold required number of variables at nodes.
double dissipation() const
Return integral of dissipation over element.
virtual void pshape_pnst(const Vector< double > &s, Shape &psi) const =0
Compute the pressure shape functions at local coordinate s.
double kin_energy() const
Get integral of kinetic energy over element.
static double Default_Physical_Constant_Value
Static default value for the physical constants (all initialised to zero)
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
virtual int p_local_eqn(const unsigned &n)=0
Access function for the local equation number information for the pressure. p_local_eqn[n] = local eq...
static double Default_Physical_Ratio_Value
Static default value for the physical ratios (all are initialised to one)
const double & alpha() const
Alpha.
virtual double p_pnst(const unsigned &n_p) const =0
Pressure at local pressure "node" n_p Uses suitably interpolated value for hanging nodes.
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction)
Compute traction (on the viscous scale) at local coordinate s for outer unit normal N.
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: Now returns polar strain.
void output(std::ostream &outfile)
Output functionget_vels(const Vector<double>& x_to_get, Vector<double>& vels): x,y,...
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution specified via function pointer at a given number of plot points....
virtual double dshape_and_dtest_eulerian_at_knot_pnst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Compute the shape functions and derivatives w.r.t. global coords at ipt-th integration point Return J...
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
static int Pressure_not_stored_at_node
Static "magic" number that indicates that the pressure is not stored at a node.
void output_veloc(std::ostream &outfile, const unsigned &nplot, const unsigned &t)
Output function: x,y,[z],u,v,[w] in tecplot format. nplot points in each coordinate direction at time...
void strain_rate_by_r(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Function to return polar strain multiplied by r.
virtual unsigned u_index_pnst(const unsigned &i) const
Return the index at which the i-th unknown velocity component is stored. The default value,...
void full_output(std::ostream &outfile)
Full output function: x,y,[z],u,v,[w],p,du/dt,dv/dt,[dw/dt],dissipation in tecplot format....
const double & re() const
Reynolds number.
void interpolated_u_pnst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
const double & re_st() const
Product of Reynolds and Strouhal number (=Womersley number)
double du_dt_pnst(const unsigned &n, const unsigned &i) const
i-th component of du/dt at local node n. Uses suitably interpolated value for hanging nodes.
virtual void fill_in_generic_residual_contribution(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Compute the residuals for the Navier–Stokes equations; flag=1(or 0): do (or don't) compute the Jacobi...
double pressure_integral() const
Integral of pressure over element.
virtual double u_pnst(const unsigned &n, const unsigned &i) const =0
Velocity i at local node n. Uses suitably interpolated value for hanging nodes.
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Validate against exact solution at given time Solution is provided via function pointer....
virtual unsigned npres_pnst() const =0
Function to return number of pressure degrees of freedom.
double interpolated_p_pnst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
void get_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Add to the set paired_load_data pairs of pointers to data objects and unsigned integers that index th...
static const unsigned Pconv[]
Static array of ints to hold conversion from pressure node numbers to actual node numbers.
static const unsigned Initial_Nvalue[]
Static array of ints to hold number of variables at node.
unsigned npres_pnst() const
Return number of pressure values.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...