36 template<
unsigned DIM>
44 template<
unsigned DIM>
48 template<
unsigned DIM>
53 template<
unsigned DIM>
58 template<
unsigned DIM>
68 template<
unsigned DIM>
71 Vector<double>& press_mass_diag,
72 Vector<double>& veloc_mass_diag,
73 const unsigned& which_one)
96 Vector<double>
s(
DIM + 1, 0.0);
102 for (
unsigned i = 0;
i <
DIM;
i++)
112 unsigned n_pres = npres_nst();
133 for (
unsigned i = 0;
i <
DIM + 1;
i++)
152 for (
unsigned i = 0;
i <
DIM;
i++)
194 template<
unsigned DIM>
198 norm.resize(
DIM + 1, 0.0);
201 Vector<double>
s(
DIM + 1, 0.0);
210 for (
unsigned i = 0;
i <
DIM + 1;
i++)
225 for (
unsigned i = 0;
i <
DIM;
i++)
228 norm[
i] +=
pow(interpolated_u_nst(
s,
i), 2) *
W;
232 norm[
DIM] +=
pow(interpolated_p_nst(
s), 2) *
W;
242 template<
unsigned DIM>
244 std::ostream& outfile,
260 Vector<double>
s(
DIM + 1, 0.0);
263 Vector<double> x(
DIM, 0.0);
275 for (
unsigned i = 0;
i <
DIM + 1;
i++)
281 for (
unsigned i = 0;
i <
DIM;
i++)
303 for (
unsigned i = 0;
i <
DIM;
i++)
340 for (
unsigned i = 0;
i <
DIM;
i++)
353 for (
unsigned i = 0;
i <
DIM;
i++)
363 for (
unsigned i = 0;
i <
DIM;
i++)
386 template<
unsigned DIM>
388 std::ostream& outfile,
391 Vector<double>& error,
392 Vector<double>& norm)
398 norm.resize(
DIM + 1, 0.0);
404 Vector<double>
s(
DIM + 1, 0.0);
407 Vector<double> x(
DIM, 0.0);
419 for (
unsigned i = 0;
i <
DIM + 1;
i++)
425 for (
unsigned i = 0;
i <
DIM;
i++)
447 for (
unsigned i = 0;
i <
DIM;
i++)
484 for (
unsigned i = 0;
i <
DIM;
i++)
497 for (
unsigned i = 0;
i <
DIM;
i++)
507 for (
unsigned i = 0;
i <
DIM;
i++)
530 template<
unsigned DIM>
547 Vector<double>
s(
DIM + 1, 0.0);
550 Vector<double> x(
DIM, 0.0);
562 for (
unsigned i = 0;
i <
DIM + 1;
i++)
568 for (
unsigned i = 0;
i <
DIM;
i++)
590 for (
unsigned i = 0;
i <
DIM;
i++)
606 template<
unsigned DIM>
619 Vector<double>
s(
DIM + 1, 0.0);
622 Vector<double> x(
DIM, 0.0);
634 for (
unsigned i = 0;
i <
DIM + 1;
i++)
640 for (
unsigned i = 0;
i <
DIM;
i++)
659 for (
unsigned i = 0;
i <
DIM;
i++)
676 template<
unsigned DIM>
678 std::ostream& outfile,
693 Vector<double>
s(
DIM + 1, 0.0);
696 Vector<double> x(
DIM, 0.0);
702 outfile <<
"ZONE" << std::endl;
711 for (
unsigned i = 0;
i <
DIM + 1;
i++)
717 for (
unsigned i = 0;
i <
DIM;
i++)
739 for (
unsigned i = 0;
i <
DIM;
i++)
749 for (
unsigned i = 0;
i <
DIM;
i++)
759 for (
unsigned i = 0;
i <
DIM;
i++)
776 template<
unsigned DIM>
778 std::ostream& outfile,
779 const unsigned& n_plot,
786 Vector<double>
s(
DIM + 1, 0.0);
789 Vector<double> x(
DIM, 0.0);
807 for (
unsigned i = 0;
i <
DIM;
i++)
820 for (
unsigned i = 0;
i <
DIM;
i++)
850 template<
unsigned DIM>
852 std::ostream& outfile,
853 const unsigned& n_plot,
861 Vector<double>
s(
DIM + 1, 0.0);
864 Vector<double> x(
DIM, 0.0);
882 for (
unsigned i = 0;
i <
DIM;
i++)
895 for (
unsigned i = 0;
i <
DIM;
i++)
927 template<
unsigned DIM>
929 const unsigned& n_plot,
939 Vector<double>
s(
DIM + 1, 0.0);
954 for (
unsigned i = 0;
i <
DIM + 1;
i++)
961 for (
unsigned i = 0;
i <
DIM;
i++)
964 outfile << interpolated_u_nst(
s,
i) <<
" ";
981 template<
unsigned DIM>
983 const unsigned& n_plot)
992 Vector<double>
s(
DIM + 1, 0.0);
1007 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1014 for (
unsigned i = 0;
i <
DIM;
i++)
1017 outfile << interpolated_u_nst(
s,
i) <<
" ";
1021 outfile << interpolated_p_nst(
s) <<
" ";
1040 template<
unsigned DIM>
1042 const unsigned& n_plot)
1045 Vector<double>
s(
DIM + 1, 0.0);
1060 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1067 for (
unsigned i = 0;
i <
DIM;
i++)
1090 template<
unsigned DIM>
1092 const unsigned& n_plot)
1095 Vector<double>
s(
DIM + 1, 0.0);
1125 Vector<double> du_dt(
DIM, 0.0);
1131 DenseMatrix<double> interpolated_dudx(
DIM,
DIM, 0.0);
1137 for (
unsigned i = 0;
i <
DIM;
i++)
1155 for (
unsigned j = 0;
j <
DIM;
j++)
1167 for (
unsigned i = 0;
i <
DIM;
i++)
1173 for (
unsigned k = 0;
k <
DIM;
k++)
1181 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1188 for (
unsigned i = 0;
i <
DIM;
i++)
1191 outfile << interpolated_u_nst(
s,
i) <<
" ";
1195 outfile << interpolated_p_nst(
s) <<
" ";
1198 for (
unsigned i = 0;
i <
DIM;
i++)
1222 template<
unsigned DIM>
1224 std::ostream& outfile,
const unsigned& n_plot)
1227 Vector<double>
s(
DIM + 1, 0.0);
1247 std::string error_message =
1248 "Can't output vorticity in 1D - in fact, what ";
1249 error_message +=
"do you mean\nby the 1D Navier-Stokes equations?\n";
1250 throw OomphLibError(
1267 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1304 template<
unsigned DIM>
1314 Vector<double>
s(
DIM + 1, 0.0);
1320 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1342 for (
unsigned i = 0;
i <
DIM;
i++)
1345 for (
unsigned j = 0;
j <
DIM;
j++)
1365 template<
unsigned DIM>
1367 const Vector<double>&
s,
const Vector<double>& N, Vector<double>& traction)
1376 double press = interpolated_p_nst(
s);
1379 for (
unsigned i = 0;
i <
DIM;
i++)
1385 for (
unsigned j = 0;
j <
DIM;
j++)
1399 template<
unsigned DIM>
1401 const Vector<double>&
s,
1402 const Vector<double>& N,
1403 Vector<double>& traction_p,
1404 Vector<double>& traction_visc_n,
1405 Vector<double>& traction_visc_t)
1417 double press = interpolated_p_nst(
s);
1420 for (
unsigned i = 0;
i <
DIM;
i++)
1426 for (
unsigned j = 0;
j <
DIM;
j++)
1443 template<
unsigned DIM>
1445 const Vector<double>&
s)
const
1453 for (
unsigned i = 0;
i <
DIM;
i++)
1455 for (
unsigned j = 0;
j <
DIM;
j++)
1467 template<
unsigned DIM>
1469 const Vector<double>&
s, DenseMatrix<double>& strainrate)
const
1474 std::ostringstream error_message;
1475 error_message <<
"The strain rate has incorrect dimensions "
1477 <<
" not " <<
DIM << std::endl;
1478 throw OomphLibError(
1484 DenseMatrix<double>
dudx(
DIM);
1499 dudx.initialise(0.0);
1502 for (
unsigned i = 0;
i <
DIM;
i++)
1508 for (
unsigned j = 0;
j <
DIM;
j++)
1520 for (
unsigned i = 0;
i <
DIM;
i++)
1523 for (
unsigned j = 0;
j <
DIM;
j++)
1542 std::ostringstream error_message;
1543 error_message <<
"Computation of vorticity in 2D requires a 1D vector\n"
1544 <<
"which contains the only non-zero component of the\n"
1545 <<
"vorticity vector. You've passed a vector of size "
1572 dudx.initialise(0.0);
1575 for (
unsigned i = 0;
i <
DIM;
i++)
1581 for (
unsigned j = 0;
j <
DIM;
j++)
1608 get_vorticity(
s,
vort);
1622 template<
unsigned DIM>
1638 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1651 for (
unsigned i = 0;
i <
DIM;
i++)
1667 template<
unsigned DIM>
1684 unsigned u_index[
DIM];
1685 for (
unsigned i = 0;
i <
DIM;
i++)
1687 u_index[
i] = this->u_index_nst(
i);
1700 Vector<double> interpolated_u(
DIM, 0.0);
1707 for (
unsigned i = 0;
i <
DIM;
i++)
1718 DenseMatrix<double> interpolated_dudx(
DIM,
DIM, 0.0);
1723 for (
unsigned i = 0;
i <
DIM;
i++)
1727 for (
unsigned j = 0;
j <
DIM;
j++)
1729 interpolated_dudx(
i,
j) +=
1736 for (
unsigned i = 0;
i <
DIM;
i++)
1738 for (
unsigned k = 0;
k <
DIM;
k++)
1748 for (
unsigned i = 0;
i <
DIM;
i++)
1764 template<
unsigned DIM>
1774 Vector<double>
s(
DIM + 1, 0.0);
1780 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1795 double press = interpolated_p_nst(
s);
1810 template<
unsigned DIM>
1813 Vector<double>& residuals,
1814 DenseMatrix<double>& jacobian,
1815 const unsigned& flag)
1817 OomphLibWarning(
"I'm not sure this is correct yet...",
1822 if (
ndof() == 0)
return;
1828 unsigned n_pres = npres_nst();
1832 for (
unsigned i = 0;
i <
DIM;
i++)
1851 Vector<double>
s(
DIM + 1, 0.0);
1855 double scaled_re = re() * density_ratio();
1865 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1884 Vector<double> x(
DIM + 1, 0.0);
1887 Vector<double> interpolated_u(
DIM, 0.0);
1893 for (
unsigned i = 0;
i <
DIM;
i++)
1900 for (
unsigned i = 0;
i <
DIM;
i++)
1902 interpolated_u[
i] = interpolated_u_nst(
s,
i);
1906 for (
unsigned i = 0;
i <
DIM + 1;
i++)
1912 double source = 0.0;
1913 if (Press_adv_diff_source_fct_pt != 0)
1915 source = Press_adv_diff_source_fct_pt(x);
1928 for (
unsigned k = 0;
k <
DIM;
k++)
1949 for (
unsigned k = 0;
k <
DIM;
k++)
1962 Pinned_fp_pressure_eqn))
1977 unsigned nrobin = Pressure_advection_diffusion_robin_element_pt.size();
1980 Pressure_advection_diffusion_robin_element_pt[
e]
1981 ->fill_in_generic_residual_contribution_fp_press_adv_diff_robin_bc(
1992 template<
unsigned DIM>
1995 DenseMatrix<double>& jacobian,
1996 DenseMatrix<double>& mass_matrix,
1997 const unsigned& flag)
2000 if (
ndof() == 0)
return;
2006 unsigned n_pres = npres_nst();
2012 for (
unsigned i = 0;
i <
DIM;
i++)
2040 Vector<double>
s(
DIM + 1, 0.0);
2046 double scaled_re = re() * density_ratio();
2061 Vector<double>
G = g();
2073 for (
unsigned i = 0;
i <
DIM + 1;
i++)
2083 double J = dshape_and_dtest_eulerian_at_knot_nst(
2096 double interpolated_p = 0.0;
2102 Vector<double> interpolated_u(
DIM, 0.0);
2111 DenseMatrix<double> interpolated_dudx(
DIM,
DIM, 0.0);
2117 interpolated_p += p_nst(
l) *
psip[
l];
2130 for (
unsigned i = 0;
i <
DIM;
i++)
2145 for (
unsigned j = 0;
j <
DIM;
j++)
2160 for (
unsigned i = 0;
i <
DIM;
i++)
2169 Vector<double> body_force(
DIM, 0.0);
2187 for (
unsigned i = 0;
i <
DIM;
i++)
2212 for (
unsigned k = 0;
k <
DIM;
k++)
2222 for (
unsigned k = 0;
k <
DIM;
k++)
2226 interpolated_dudx(
i,
k) *
testf[
l] *
W);
2230 for (
unsigned k = 0;
k <
DIM;
k++)
2237 Gamma[
i] * interpolated_dudx(
k,
i)) *
2291 for (
unsigned k = 0;
k <
DIM;
k++)
2301 for (
unsigned k = 0;
k <
DIM;
k++)
2310 for (
unsigned k = 0;
k <
DIM;
k++)
2342 if (Strouhal_is_stored_as_external_data)
2366 for (
unsigned k = 0;
k <
DIM;
k++)
2371 interpolated_dudx(
i,
k) *
testf[
l] *
W);
2397 for (
unsigned k = 0;
k <
DIM;
k++)
2439 template<
unsigned DIM>
2442 double*
const& parameter_pt,
2443 Vector<double>& dres_dparam,
2444 DenseMatrix<double>& djac_dparam,
2445 DenseMatrix<double>& dmass_matrix_dparam,
2446 const unsigned& flag)
2449 throw OomphLibError(
"Not yet implemented\n",
2458 template<
unsigned DIM>
2461 Vector<double>
const& Y,
2462 DenseMatrix<double>
const& C,
2463 DenseMatrix<double>& product)
2466 throw OomphLibError(
"Not yet implemented\n",
2478 template<
unsigned DIM>
2480 RankThreeTensor<double>& dresidual_dnodal_coordinates)
2483 throw OomphLibError(
"Space-time update needs to be checked!",
2497 const unsigned n_pres = npres_nst();
2501 for (
unsigned i = 0;
i <
DIM;
i++)
2534 Vector<double>
s(
DIM + 1, 0.0);
2538 double scaled_re = re() * density_ratio();
2542 Vector<double>
G = g();
2551 for (
unsigned q = 0; q <
n_node; q++)
2556 if (
nod_pt->has_auxiliary_node_update_fct_pt())
2562 for (
unsigned i = 0;
i <
DIM;
i++)
2568 for (
unsigned p = 0;
p <
DIM;
p++)
2578 nod_pt->perform_auxiliary_node_update_fct();
2588 nod_pt->perform_auxiliary_node_update_fct();
2600 for (
unsigned i = 0;
i <
DIM + 1;
i++)
2609 const double J = dshape_and_dtest_eulerian_at_knot_nst(
ipt,
2625 double interpolated_p = 0.0;
2631 Vector<double> interpolated_u(
DIM, 0.0);
2640 DenseMatrix<double> interpolated_dudx(
DIM,
DIM, 0.0);
2646 interpolated_p += p_nst(
l) *
psip[
l];
2659 for (
unsigned i = 0;
i <
DIM;
i++)
2674 for (
unsigned j = 0;
j <
DIM;
j++)
2689 for (
unsigned i = 0;
i <
DIM;
i++)
2699 for (
unsigned q = 0; q <
n_node; q++)
2702 for (
unsigned p = 0;
p <
DIM;
p++)
2704 for (
unsigned i = 0;
i <
DIM;
i++)
2706 for (
unsigned k = 0;
k <
DIM;
k++)
2724 Vector<double> body_force(
DIM);
2739 get_body_force_gradient_nst(
2746 get_source_gradient_nst(
2769 for (
unsigned i = 0;
i <
DIM;
i++)
2779 for (
unsigned p = 0;
p <
DIM;
p++)
2782 for (
unsigned q = 0; q <
n_node; q++)
2797 for (
unsigned k = 0;
k <
DIM;
k++)
2804 (interpolated_dudx(
i,
k) +
2805 Gamma[
i] * interpolated_dudx(
k,
i)) *
2813 for (
unsigned k = 0;
k <
DIM;
k++)
2817 interpolated_dudx(
i,
k) *
testf[
l];
2824 for (
unsigned k = 0;
k <
DIM;
k++)
2828 interpolated_dudx(
i,
k) *
testf[
l];
2847 for (
unsigned k = 0;
k <
DIM;
k++)
2850 Gamma[
i] * interpolated_dudx(
k,
i)) *
2858 for (
unsigned k = 0;
k <
DIM;
k++)
2871 interpolated_dudx(
i,
p) *
testf(
l);
2887 for (
unsigned k = 0;
k <
DIM;
k++)
2918 for (
unsigned p = 0;
p <
DIM;
p++)
2921 for (
unsigned q = 0; q <
n_node; q++)
2927 double aux = -source;
2930 for (
unsigned k = 0;
k <
DIM;
k++)
2932 aux += interpolated_dudx(
k,
k);
2944 for (
unsigned k = 0;
k <
DIM;
k++)
2977 3, 2, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2,
2978 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 3, 2, 3};
2983 0, 2, 6, 8, 18, 20, 24, 26};
2994 template<
unsigned DIM>
2999 unsigned u_index[
DIM];
3002 for (
unsigned i = 0;
i <
DIM;
i++)
3005 u_index[
i] = this->u_index_nst(
i);
3016 for (
unsigned i = 0;
i <
DIM;
i++)
3036 template<
unsigned DIM>
3038 std::set<std::pair<Data*, unsigned>>& paired_pressure_data)
3041 unsigned p_index =
static_cast<unsigned>(this->p_nodal_index_nst());
3044 unsigned n_pres = npres_nst();
3064 //============================================================================
3065 template<unsigned DIM>
3066 void QTaylorHoodSpaceTimeElement<DIM>::get_dof_numbers_for_unknowns(
3067 std::list<std::pair<unsigned long, unsigned> >& dof_lookup_list) const
3069 // Get the number of nodes in this element
3070 unsigned n_node=this->nnode();
3072 // Temporary pair (used to store dof lookup prior to being added to list)
3073 std::pair<unsigned,unsigned> dof_lookup;
3075 // Loop over the nodes
3076 for (unsigned n=0;n<n_node;n++)
3078 // Find the number of values at this node
3079 unsigned n_value=this->required_nvalue(n);
3081 // Loop over these values
3082 for (unsigned i_value=0;i_value<n_value;i_value++)
3084 // Determine the local eqn number associated with this value
3085 int local_eqn_number=this->nodal_local_eqn(n,i_value);
3087 // Ignore pinned values - far away degrees of freedom resulting
3088 // from hanging nodes can be ignored since these are be dealt
3089 // with by the element containing their master nodes
3090 if (local_eqn_number>=0)
3092 // Store dof lookup in temporary pair; the global equation number
3093 // is the first entry in pair
3094 dof_lookup.first=this->eqn_number(local_eqn_number);
3096 // Set dof numbers; dof number is the second entry in pair
3097 // DRAIG: Uncomment whichever one you want to use. Setting
3098 // all dof numbers to 0 means you don't distinguish between
3099 // velocity and pressure component; just aggregate everything.
3100 // In contrast, setting the dof number to i_value means the
3101 // dofs associated with the first velocity component, second
3102 // velocity component and the pressure are all separated
3103 dof_lookup.second=i_value;
3106 dof_lookup_list.push_front(dof_lookup);
3108 } // for (unsigned v=0;v<nv;v++)
3109 } // for (unsigned n=0;n<n_node;n++)
3110 } // End of get_dof_numbers_for_unknowns
3116 template class SpaceTimeNavierStokesEquations<2>;
3117 template class QTaylorHoodSpaceTimeElement<2>;
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when time-derivatives are computed....
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
virtual double J_eulerian(const Vector< double > &s) const
Return the Jacobian of mapping from local to global coordinates at local position s.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
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 double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Return the geometric shape functions and also first derivatives w.r.t. global coordinates at the ipt-...
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
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 .
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...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
virtual double J_eulerian_at_knot(const unsigned &ipt) const
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point.
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n but do NOT take hanging nodes into account.
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. Do not use the hanging node representation....
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.
virtual void shape_at_knot(const unsigned &ipt, Shape &psi) const
Return the geometric shape function at the ipt-th integration point.
static double Default_fd_jacobian_step
Double used for the default finite difference step in elemental jacobian calculations.
unsigned ndof() const
Return the number of equations/dofs in the element.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
int external_local_eqn(const unsigned &i, const unsigned &j)
Return the local equation number corresponding to the j-th value stored at the i-th external data.
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.
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
An OomphLibError object which should be thrown when an run-time error is encountered....
/////////////////////////////////////////////////////////////////////////// /////////////////////////...
void identify_pressure_data(std::set< std::pair< Data *, unsigned > > &paired_pressure_data)
Add to the set paired_pressure_data pairs containing.
void identify_load_data(std::set< std::pair< Data *, unsigned > > &paired_load_data)
Add to the set paired_load_data pairs containing.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
void get_pressure_and_velocity_mass_matrix_diagonal(Vector< double > &press_mass_diag, Vector< double > &veloc_mass_diag, const unsigned &which_one=0)
Compute the diagonal of the velocity/pressure mass matrices. If which one=0, both are computed,...
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not N.B. This needs to be public so th...
void get_traction(const Vector< double > &s, const Vector< double > &N, Vector< double > &traction)
Compute traction (on the viscous scale) exerted onto the fluid at local coordinate s....
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....
void compute_norm(Vector< double > &norm)
Compute the vector norm of the FEM solution.
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....
static double Default_Physical_Constant_Value
Static default value for the physical constants (all initialised to zero)
void fill_in_contribution_to_hessian_vector_products(Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
Compute the hessian tensor vector products required to perform continuation of bifurcations analytica...
double kin_energy() const
Get integral of kinetic energy over element.
virtual void fill_in_generic_pressure_advection_diffusion_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
Compute the residuals for the associated pressure advection diffusion problem. Used by the Fp precond...
virtual void fill_in_generic_dresidual_contribution_nst(double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam, const unsigned &flag)
Compute the derivatives of the residuals for the Navier-Stokes equations with respect to a parameter ...
static int Pressure_not_stored_at_node
Static "magic" number that indicates that the pressure is not stored at a node.
void output(std::ostream &outfile)
Output function: x,y,t,u,v,p in tecplot format. The default number of plot points is five.
double d_kin_energy_dt() const
Get integral of time derivative of kinetic energy over element.
double dissipation() const
Return integral of dissipation over element.
static Vector< double > Default_Gravity_vector
Static default value for the gravity vector.
virtual void fill_in_generic_residual_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, const unsigned &flag)
Compute the residuals for the Navier-Stokes equations. Flag=1 (or 0): do (or don't) compute the Jacob...
double pressure_integral() const
Integral of pressure over element.
void output_veloc(std::ostream &outfile, const unsigned &nplot, const unsigned &t)
Output function: x,y,t,u,v in tecplot format. Use n_plot points in each coordinate direction at times...
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 void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Compute derivatives of elemental residual vector with respect to nodal coordinates....
void get_vorticity(const Vector< double > &s, Vector< double > &vorticity) const
Compute the vorticity vector at local coordinate s.
void strain_rate(const Vector< double > &s, DenseMatrix< double > &strain_rate) const
Strain-rate tensor: 1/2 (du_i/dx_j+du_j/dx_i)
static double Default_Physical_Ratio_Value
Static default value for the physical ratios (all are initialised to one)
void output_vorticity(std::ostream &outfile, const unsigned &nplot)
Output function: x,y,t,omega in tecplot format. nplot points in each coordinate direction.
//////////////////////////////////////////////////////////////////////
TAdvectionDiffusionReactionElement()
Constructor: Call constructors for TElement and AdvectionDiffusionReaction equations.
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...