28 #ifndef OOMPH_REFINEABLE_NAVIER_STOKES_ELEMENTS_HEADER
29 #define OOMPH_REFINEABLE_NAVIER_STOKES_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
37 #include "../generic/refineable_quad_element.h"
38 #include "../generic/refineable_brick_element.h"
39 #include "../generic/hp_refineable_elements.h"
40 #include "../generic/error_estimator.h"
58 template<
class ELEMENT>
85 template<
class ELEMENT>
91 HangInfo *hang_info_pt = 0, *hang_info2_pt = 0;
94 unsigned my_dim = this->dim();
105 unsigned n_intpt = this->integral_pt()->nweight();
109 int local_unknown = 0;
112 ELEMENT* bulk_el_pt =
dynamic_cast<ELEMENT*
>(this->bulk_element_pt());
115 unsigned n_pres = bulk_el_pt->npres_nst();
120 int p_index = bulk_el_pt->p_nodal_index_nst();
124 bool pressure_dof_is_hanging[n_pres];
129 for (
unsigned l = 0; l < n_pres; ++l)
131 pressure_dof_is_hanging[l] =
132 bulk_el_pt->pressure_node_pt(l)->is_hanging(p_index);
140 "Pressure advection diffusion does not work in this case\n",
144 for (
unsigned l = 0; l < n_pres; ++l)
146 pressure_dof_is_hanging[l] =
false;
151 double re = bulk_el_pt->re();
154 Shape psip(n_pres), testp(n_pres);
157 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
160 double w = this->integral_pt()->weight(ipt);
163 for (
unsigned i = 0;
i < my_dim;
i++)
164 s[
i] = this->integral_pt()->knot(ipt,
i);
167 s_bulk = this->local_coordinate_in_bulk(
s);
170 this->outer_unit_normal(ipt, unit_normal);
173 bulk_el_pt->interpolated_u_nst(s_bulk, veloc);
177 for (
unsigned i = 0;
i < my_dim + 1;
i++)
179 flux += veloc[
i] * unit_normal[
i];
186 double interpolated_press = bulk_el_pt->interpolated_p_nst(s_bulk);
189 bulk_el_pt->pshape_nst(s_bulk, psip, testp);
192 double J = this->J_eulerian(
s);
199 unsigned n_master = 1;
200 double hang_weight = 1.0;
203 for (
unsigned l = 0; l < n_pres; l++)
206 if (pressure_dof_is_hanging[l])
210 hang_info_pt = bulk_el_pt->pressure_node_pt(l)->hanging_pt(p_index);
213 n_master = hang_info_pt->
nmaster();
222 for (
unsigned m = 0;
m < n_master;
m++)
226 if (pressure_dof_is_hanging[l])
229 local_eqn = bulk_el_pt->local_hang_eqn(
236 local_eqn = bulk_el_pt->p_local_eqn(l);
243 residuals[local_eqn] -=
244 re *
flux * interpolated_press * testp[l] *
W * hang_weight;
250 unsigned n_master2 = 1;
251 double hang_weight2 = 1.0;
254 for (
unsigned l2 = 0; l2 < n_pres; l2++)
257 if (pressure_dof_is_hanging[l2])
260 bulk_el_pt->pressure_node_pt(l2)->hanging_pt(p_index);
263 n_master2 = hang_info2_pt->nmaster();
272 for (
unsigned m2 = 0;
m2 < n_master2;
m2++)
276 if (pressure_dof_is_hanging[l2])
279 local_unknown = bulk_el_pt->local_hang_eqn(
280 hang_info2_pt->master_node_pt(
m2), p_index);
282 hang_weight2 = hang_info2_pt->master_weight(
m2);
286 local_unknown = bulk_el_pt->p_local_eqn(l2);
291 if (local_unknown >= 0)
293 jacobian(local_eqn, local_unknown) -=
294 re *
flux * psip[l2] * testp[l] *
W * hang_weight *
317 template<
unsigned DIM>
356 unsigned n_element = element_pt.size();
357 for (
unsigned e = 0;
e < n_element;
e++)
369 unsigned n_element = element_pt.size();
370 for (
unsigned e = 0;
e < n_element;
e++)
391 const unsigned& which_one = 0);
406 unsigned num_entries =
DIM + (
DIM * (
DIM - 1)) / 2;
407 if (
flux.size() < num_entries)
409 std::ostringstream error_message;
410 error_message <<
"The flux vector has the wrong number of entries, "
411 <<
flux.size() <<
", whereas it should be at least "
412 << num_entries << std::endl;
427 for (
unsigned i = 0;
i <
DIM;
i++)
429 flux[icount] = strainrate(
i,
i);
434 for (
unsigned i = 0;
i <
DIM;
i++)
436 for (
unsigned j =
i + 1;
j <
DIM;
j++)
438 flux[icount] = strainrate(
i,
j);
457 this->
Re_pt = cast_father_element_pt->
re_pt();
463 this->
G_pt = cast_father_element_pt->
g_pt();
488 unsigned n_node = this->
nnode();
495 const unsigned u_nodal_index = this->
u_index_nst(i);
503 unsigned n_u_dof = 0;
504 for (
unsigned l = 0; l < n_node; l++)
506 unsigned n_master = 1;
515 n_master = hang_info_pt->
nmaster();
524 for (
unsigned m = 0;
m < n_master;
m++)
548 du_ddata.resize(n_u_dof, 0.0);
549 global_eqn_number.resize(n_u_dof, 0);
554 for (
unsigned l = 0; l < n_node; l++)
556 unsigned n_master = 1;
557 double hang_weight = 1.0;
566 n_master = hang_info_pt->
nmaster();
575 for (
unsigned m = 0;
m < n_master;
m++)
605 global_eqn_number[count] = global_eqn;
607 du_ddata[count] = psi[l] * hang_weight;
647 template<
unsigned DIM>
659 unsigned n_node = this->
nnode();
661 for (
unsigned n = 0;
n < n_node;
n++)
673 unsigned n_node = this->
nnode();
675 for (
unsigned n = 0;
n < n_node;
n++)
682 for (
unsigned l = 0; l < n_pres; l++)
687 nod_pt->
unpin(p_index);
747 values.resize(
DIM + 1, 0.0);
750 for (
unsigned i = 0;
i <
DIM;
i++)
768 values.resize(
DIM + 1);
771 for (
unsigned i = 0;
i <
DIM + 1;
i++)
777 unsigned n_node = this->
nnode();
781 this->
shape(s, psif);
784 for (
unsigned i = 0;
i <
DIM;
i++)
788 for (
unsigned l = 0; l < n_node; l++)
790 values[
i] += this->
nodal_value(t, l, u_nodal_index) * psif[l];
862 unsigned total_index = 0;
864 unsigned NNODE_1D = 2;
868 for (
unsigned i = 0;
i <
DIM;
i++)
877 else if (
s[
i] == 1.0)
879 index[
i] = NNODE_1D - 1;
885 double float_index = 0.5 * (1.0 +
s[
i]) * (NNODE_1D - 1);
886 index[
i] =
int(float_index);
889 double excess = float_index - index[
i];
900 index[
i] *
static_cast<unsigned>(
pow(
static_cast<float>(NNODE_1D),
901 static_cast<int>(
i)));
934 return static_cast<unsigned>(
pow(2.0,
static_cast<int>(
DIM)));
938 return this->
nnode();
946 const int& value_id)
const
954 return this->
shape(s, psi);
980 std::set<std::pair<Data*, unsigned>>& paired_load_data)
983 unsigned u_index[
DIM];
984 for (
unsigned i = 0;
i <
DIM;
i++)
990 unsigned n_node = this->
nnode();
991 for (
unsigned n = 0;
n < n_node;
n++)
1003 for (
unsigned j = 0;
j < nmaster;
j++)
1009 for (
unsigned i = 0;
i <
DIM;
i++)
1011 paired_load_data.insert(
1012 std::make_pair(master_nod_pt, u_index[
i]));
1021 for (
unsigned i = 0;
i <
DIM;
i++)
1023 paired_load_data.insert(
1024 std::make_pair(this->
node_pt(
n), u_index[
i]));
1034 for (
unsigned l = 0; l < n_pres; l++)
1046 unsigned nmaster = hang_info_pt->
nmaster();
1049 for (
unsigned m = 0;
m < nmaster;
m++)
1053 paired_load_data.insert(
1062 paired_load_data.insert(std::make_pair(pres_node_pt, p_index));
1073 template<
unsigned DIM>
1087 template<
unsigned DIM>
1089 :
public virtual FaceGeometry<FaceGeometry<QTaylorHoodElement<DIM>>>
1104 template<
unsigned DIM>
1116 for (
unsigned l = 0; l < n_pres; l++)
1182 values.resize(
DIM, 0.0);
1185 for (
unsigned i = 0;
i <
DIM;
i++)
1208 for (
unsigned i = 0;
i <
DIM;
i++)
1214 unsigned n_node = this->
nnode();
1218 this->
shape(s, psif);
1221 for (
unsigned i = 0;
i <
DIM;
i++)
1225 for (
unsigned l = 0; l < n_node; l++)
1227 values[
i] += this->
nodal_value(t, l, u_nodal_index) * psif[l];
1264 std::set<std::pair<Data*, unsigned>>& paired_load_data)
1267 unsigned u_index[
DIM];
1268 for (
unsigned i = 0;
i <
DIM;
i++)
1274 unsigned n_node = this->
nnode();
1275 for (
unsigned n = 0;
n < n_node;
n++)
1287 for (
unsigned j = 0;
j < nmaster;
j++)
1293 for (
unsigned i = 0;
i <
DIM;
i++)
1295 paired_load_data.insert(
1296 std::make_pair(master_nod_pt, u_index[
i]));
1305 for (
unsigned i = 0;
i <
DIM;
i++)
1307 paired_load_data.insert(
1308 std::make_pair(this->
node_pt(
n), u_index[
i]));
1316 for (
unsigned l = 0; l < n_pres; l++)
1320 paired_load_data.insert(std::make_pair(
1331 template<
unsigned DIM>
1344 for (
unsigned l = 0; l < n_pres; l++)
1359 this->p_order() = 3;
1405 double p_nst(
const unsigned&
t,
const unsigned&
i)
const
1413 return (this->p_order() - 2) * (this->p_order() - 2);
1510 values.resize(
DIM, 0.0);
1513 for (
unsigned i = 0;
i <
DIM;
i++)
1536 for (
unsigned i = 0;
i <
DIM;
i++)
1542 unsigned n_node = this->
nnode();
1546 this->
shape(s, psif);
1549 for (
unsigned i = 0;
i <
DIM;
i++)
1553 for (
unsigned l = 0; l < n_node; l++)
1555 values[
i] += this->
nodal_value(t, l, u_nodal_index) * psif[l];
1575 template<
unsigned DIM>
1577 :
public virtual FaceGeometry<QCrouzeixRaviartElement<DIM>>
1589 template<
unsigned DIM>
1591 :
public virtual FaceGeometry<FaceGeometry<QCrouzeixRaviartElement<DIM>>>
1609 using namespace QuadTreeNames;
1618 double av_press = 0.0;
1621 for (
unsigned ison = 0; ison < 4; ison++)
1626 av_press += quadtree_pt()
1629 ->internal_data_pt(this->P_nst_internal_index)
1634 internal_data_pt(this->P_nst_internal_index)->set_value(0, 0.25 * av_press);
1645 double slope1 = quadtree_pt()
1648 ->internal_data_pt(this->P_nst_internal_index)
1653 ->internal_data_pt(this->P_nst_internal_index)
1656 double slope2 = quadtree_pt()
1659 ->internal_data_pt(this->P_nst_internal_index)
1664 ->internal_data_pt(this->P_nst_internal_index)
1669 internal_data_pt(this->P_nst_internal_index)
1670 ->set_value(1, 0.5 * (slope1 + slope2));
1681 slope1 = quadtree_pt()
1684 ->internal_data_pt(this->P_nst_internal_index)
1689 ->internal_data_pt(this->P_nst_internal_index)
1692 slope2 = quadtree_pt()
1695 ->internal_data_pt(this->P_nst_internal_index)
1700 ->internal_data_pt(this->P_nst_internal_index)
1705 internal_data_pt(this->P_nst_internal_index)
1706 ->set_value(2, 0.5 * (slope1 + slope2));
1717 using namespace OcTreeNames;
1726 double av_press = 0.0;
1729 for (
unsigned ison = 0; ison < 8; ison++)
1732 av_press += octree_pt()
1735 ->internal_data_pt(this->P_nst_internal_index)
1740 internal_data_pt(this->P_nst_internal_index)
1741 ->set_value(0, 0.125 * av_press);
1752 double slope1 = octree_pt()
1755 ->internal_data_pt(this->P_nst_internal_index)
1760 ->internal_data_pt(this->P_nst_internal_index)
1763 double slope2 = octree_pt()
1766 ->internal_data_pt(this->P_nst_internal_index)
1771 ->internal_data_pt(this->P_nst_internal_index)
1774 double slope3 = octree_pt()
1777 ->internal_data_pt(this->P_nst_internal_index)
1782 ->internal_data_pt(this->P_nst_internal_index)
1785 double slope4 = octree_pt()
1788 ->internal_data_pt(this->P_nst_internal_index)
1793 ->internal_data_pt(this->P_nst_internal_index)
1798 internal_data_pt(this->P_nst_internal_index)
1799 ->set_value(1, 0.25 * (slope1 + slope2 + slope3 + slope4));
1810 slope1 = octree_pt()
1813 ->internal_data_pt(this->P_nst_internal_index)
1818 ->internal_data_pt(this->P_nst_internal_index)
1821 slope2 = octree_pt()
1824 ->internal_data_pt(this->P_nst_internal_index)
1829 ->internal_data_pt(this->P_nst_internal_index)
1832 slope3 = octree_pt()
1835 ->internal_data_pt(this->P_nst_internal_index)
1840 ->internal_data_pt(this->P_nst_internal_index)
1843 slope4 = octree_pt()
1846 ->internal_data_pt(this->P_nst_internal_index)
1851 ->internal_data_pt(this->P_nst_internal_index)
1856 internal_data_pt(this->P_nst_internal_index)
1857 ->set_value(2, 0.25 * (slope1 + slope2 + slope3 + slope4));
1868 slope1 = octree_pt()
1871 ->internal_data_pt(this->P_nst_internal_index)
1876 ->internal_data_pt(this->P_nst_internal_index)
1879 slope2 = octree_pt()
1882 ->internal_data_pt(this->P_nst_internal_index)
1887 ->internal_data_pt(this->P_nst_internal_index)
1890 slope3 = octree_pt()
1893 ->internal_data_pt(this->P_nst_internal_index)
1898 ->internal_data_pt(this->P_nst_internal_index)
1901 slope4 = octree_pt()
1904 ->internal_data_pt(this->P_nst_internal_index)
1909 ->internal_data_pt(this->P_nst_internal_index)
1913 internal_data_pt(this->P_nst_internal_index)
1914 ->set_value(3, 0.25 * (slope1 + slope2 + slope3 + slope4));
1930 using namespace QuadTreeNames;
1933 int son_type = quadtree_pt()->son_type();
1949 else if (son_type ==
SE)
1955 else if (son_type ==
NE)
1962 else if (son_type ==
NW)
1975 internal_data_pt(this->P_nst_internal_index)->set_value(0, press);
1978 for (
unsigned i = 1;
i < 3;
i++)
1980 double half_father_slope =
1985 internal_data_pt(this->P_nst_internal_index)
1986 ->set_value(
i, half_father_slope);
2002 using namespace OcTreeNames;
2005 int son_type = octree_pt()->son_type();
2009 octree_pt()->father_pt()->object_pt());
2014 for (
unsigned i = 0;
i < 3;
i++)
2016 s_father[
i] = 0.5 * OcTree::Direction_to_vector[son_type][
i];
2026 internal_data_pt(this->P_nst_internal_index)->set_value(0, press);
2029 for (
unsigned i = 1;
i < 4;
i++)
2031 double half_father_slope =
2036 internal_data_pt(this->P_nst_internal_index)
2037 ->set_value(
i, half_father_slope);
2056 double J = this->dshape_eulerian(
s, psi, dpsidx);
2060 for (
unsigned i = 0;
i < nnode_1d() * nnode_1d();
i++)
2063 dtestdx(
i, 0) = dpsidx(
i, 0);
2064 dtestdx(
i, 1) = dpsidx(
i, 1);
2079 2>::dshape_and_dtest_eulerian_at_knot_nst(
const unsigned& ipt,
2086 double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
2090 for (
unsigned i = 0;
i < nnode_1d() * nnode_1d();
i++)
2093 dtestdx(
i, 0) = dpsidx(
i, 0);
2094 dtestdx(
i, 1) = dpsidx(
i, 1);
2116 double J = this->dshape_eulerian(
s, psi, dpsidx);
2120 for (
unsigned i = 0;
i < nnode_1d() * nnode_1d() * nnode_1d();
i++)
2123 dtestdx(
i, 0) = dpsidx(
i, 0);
2124 dtestdx(
i, 1) = dpsidx(
i, 1);
2125 dtestdx(
i, 2) = dpsidx(
i, 2);
2140 3>::dshape_and_dtest_eulerian_at_knot_nst(
const unsigned& ipt,
2147 double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
2151 for (
unsigned i = 0;
i < nnode_1d() * nnode_1d() * nnode_1d();
i++)
2154 dtestdx(
i, 0) = dpsidx(
i, 0);
2155 dtestdx(
i, 1) = dpsidx(
i, 1);
2156 dtestdx(
i, 2) = dpsidx(
i, 2);
2171 unsigned npres = this->npres_nst();
2188 for (
unsigned i = 0;
i < npres_1d;
i++)
2190 for (
unsigned j = 0;
j < npres_1d;
j++)
2193 psi[
i * npres_1d +
j] = psi2[
i] * psi1[
j];
2208 if (this->npres_nst() == 1)
2214 for (
unsigned i = 0;
i < this->npres_nst();
i++)
test[
i] = psi[
i];
2226 unsigned npres = this->npres_nst();
2244 for (
unsigned i = 0;
i < npres_1d;
i++)
2246 for (
unsigned j = 0;
j < npres_1d;
j++)
2248 for (
unsigned k = 0;
k < npres_1d;
k++)
2251 psi[
i * npres_1d * npres_1d +
j * npres_1d +
k] =
2252 psi3[
i] * psi2[
j] * psi1[
k];
2268 if (this->npres_nst() == 1)
2274 for (
unsigned i = 0;
i < this->npres_nst();
i++)
test[
i] = psi[
i];
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
float * p
Definition: Tutorial_Map_using.cpp:9
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
Definition: nodes.h:367
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
void unpin(const unsigned &i)
Unpin the i-th stored variable.
Definition: nodes.h:391
void set_value(const unsigned &i, const double &value_)
Definition: nodes.h:271
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
double value(const unsigned &i) const
Definition: nodes.h:293
virtual void resize(const unsigned &n_value)
Change (increase) the number of values that may be stored.
Definition: nodes.cc:1002
Definition: error_estimator.h:79
Definition: elements.h:4338
int & face_index()
Definition: elements.h:4626
FaceGeometry()
Definition: refineable_navier_stokes_elements.h:1594
FaceGeometry()
Definition: refineable_navier_stokes_elements.h:1092
FaceGeometry()
Definition: refineable_navier_stokes_elements.h:1580
FaceGeometry()
Definition: refineable_navier_stokes_elements.h:1078
Definition: elements.h:4998
Definition: elements.h:1313
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
static const double Node_location_tolerance
Definition: elements.h:1374
virtual unsigned nvertex_node() const
Definition: elements.h:2491
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
virtual Node * get_node_at_local_coordinate(const Vector< double > &s) const
Definition: elements.cc:3882
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
virtual Node * vertex_node_pt(const unsigned &j) const
Definition: elements.h:2500
virtual unsigned nnode_1d() const
Definition: elements.h:2218
virtual void set_integration_scheme(Integral *const &integral_pt)
Set the spatial integration scheme.
Definition: elements.cc:3210
virtual double local_one_d_fraction_of_node(const unsigned &n1d, const unsigned &i)
Definition: elements.h:1858
Definition: navier_stokes_elements.h:89
Definition: integral.h:1281
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
Definition: elements.h:622
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Definition: nodes.h:808
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
Definition: nodes.h:791
unsigned nmaster() const
Return the number of master nodes.
Definition: nodes.h:785
Definition: navier_stokes_elements.h:395
double * Viscosity_Ratio_pt
Definition: navier_stokes_elements.h:436
NavierStokesSourceFctPt Source_fct_pt
Pointer to volumetric source function.
Definition: navier_stokes_elements.h:461
virtual unsigned u_index_nst(const unsigned &i) const
Definition: navier_stokes_elements.h:866
double * Re_pt
Pointer to global Reynolds number.
Definition: navier_stokes_elements.h:445
NavierStokesSourceFctPt & source_fct_pt()
Access function for the source-function pointer.
Definition: navier_stokes_elements.h:789
double *& density_ratio_pt()
Pointer to Density ratio.
Definition: navier_stokes_elements.h:747
void interpolated_u_nst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
Definition: navier_stokes_elements.h:1505
double *& viscosity_ratio_pt()
Pointer to Viscosity Ratio.
Definition: navier_stokes_elements.h:734
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)
Definition: navier_stokes_elements.cc:1185
double *& re_st_pt()
Pointer to product of Reynolds and Strouhal number (=Womersley number)
Definition: navier_stokes_elements.h:721
NavierStokesBodyForceFctPt & body_force_fct_pt()
Access function for the body-force pointer.
Definition: navier_stokes_elements.h:777
Vector< double > * G_pt
Pointer to global gravity Vector.
Definition: navier_stokes_elements.h:455
virtual double interpolated_p_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
Definition: navier_stokes_elements.h:1639
double * ReInvFr_pt
Definition: navier_stokes_elements.h:452
Vector< double > *& g_pt()
Pointer to Vector of gravitational components.
Definition: navier_stokes_elements.h:771
double *& re_invfr_pt()
Pointer to global inverse Froude number.
Definition: navier_stokes_elements.h:759
double * Density_Ratio_pt
Definition: navier_stokes_elements.h:440
double *& re_pt()
Pointer to Reynolds number.
Definition: navier_stokes_elements.h:715
NavierStokesBodyForceFctPt Body_force_fct_pt
Pointer to body force function.
Definition: navier_stokes_elements.h:458
double * ReSt_pt
Pointer to global Reynolds number x Strouhal number (=Womersley)
Definition: navier_stokes_elements.h:448
bool ALE_is_disabled
Definition: navier_stokes_elements.h:470
Vector< FpPressureAdvDiffRobinBCElementBase * > Pressure_advection_diffusion_robin_element_pt
Definition: navier_stokes_elements.h:475
HangInfo *const & hanging_pt() const
Definition: nodes.h:1228
bool is_hanging() const
Test whether the node is geometrically hanging.
Definition: nodes.h:1285
Definition: oomph_definitions.h:222
Definition: refineable_navier_stokes_elements.h:1336
void rebuild_from_sons(Mesh *&mesh_pt)
Definition: refineable_navier_stokes_elements.h:1437
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: refineable_navier_stokes_elements.h:1471
void pshape_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
double p_nst(const unsigned &t, const unsigned &i) const
Definition: refineable_navier_stokes_elements.h:1405
~PRefineableQCrouzeixRaviartElement()
Destructor.
Definition: refineable_navier_stokes_elements.h:1383
double p_nst(const unsigned &i) const
Broken assignment operator.
Definition: refineable_navier_stokes_elements.h:1400
void fix_pressure(const unsigned &p_dof, const double &p_value)
Pin p_dof-th pressure dof and set it to value specified by p_value.
Definition: refineable_navier_stokes_elements.h:1417
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: refineable_navier_stokes_elements.h:1465
PRefineableQCrouzeixRaviartElement(const PRefineableQCrouzeixRaviartElement< DIM > &dummy)=delete
Broken copy constructor.
unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
Definition: refineable_navier_stokes_elements.h:1424
void pshape_nst(const Vector< double > &s, Shape &psi, Shape &test) const
Pressure shape and test functions at local coordinte s.
unsigned npres_nst() const
// Return number of pressure values
Definition: refineable_navier_stokes_elements.h:1411
void unpin_elemental_pressure_dofs()
Unpin all internal pressure dofs.
Definition: refineable_navier_stokes_elements.h:1339
double dshape_and_dtest_eulerian_nst(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
void further_setup_hanging_nodes()
Definition: refineable_navier_stokes_elements.h:1562
unsigned nrecovery_order()
Definition: refineable_navier_stokes_elements.h:1459
unsigned ncont_interpolated_values() const
Number of continuously interpolated values: DIM (velocities)
Definition: refineable_navier_stokes_elements.h:1430
PRefineableQCrouzeixRaviartElement()
Constructor.
Definition: refineable_navier_stokes_elements.h:1352
double dshape_and_dtest_eulerian_at_knot_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:1506
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:1528
Definition: Qelements.h:2274
Definition: navier_stokes_elements.h:1749
unsigned npres_nst() const
Return number of pressure values.
Definition: navier_stokes_elements.h:1830
unsigned P_nst_internal_index
Definition: navier_stokes_elements.h:1757
Definition: navier_stokes_elements.h:2308
void pshape_nst(const Vector< double > &s, Shape &psi) const
Pressure shape functions at local coordinate s.
virtual int p_nodal_index_nst() const
Set the value at which the pressure is stored in the nodes.
Definition: navier_stokes_elements.h:2370
static const unsigned Pconv[]
Definition: navier_stokes_elements.h:2316
unsigned npres_nst() const
Return number of pressure values.
Definition: navier_stokes_elements.h:2405
A Rank 3 Tensor class.
Definition: matrices.h:1370
Definition: refineable_elements.h:97
virtual RefineableElement * father_element_pt() const
Return a pointer to the father element.
Definition: refineable_elements.h:539
Definition: refineable_navier_stokes_elements.h:61
RefineableFpPressureAdvDiffRobinBCElement(FiniteElement *const &element_pt, const int &face_index)
Definition: refineable_navier_stokes_elements.h:65
virtual void fill_in_generic_residual_contribution_fp_press_adv_diff_robin_bc(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: refineable_navier_stokes_elements.h:87
Definition: refineable_navier_stokes_elements.h:322
static void unpin_all_pressure_dofs(const Vector< GeneralisedElement * > &element_pt)
Unpin all pressure dofs in elements listed in vector.
Definition: refineable_navier_stokes_elements.h:365
RefineableNavierStokesEquations()
Constructor.
Definition: refineable_navier_stokes_elements.h:333
virtual void pin_elemental_redundant_nodal_pressure_dofs()
Definition: refineable_navier_stokes_elements.h:329
void fill_in_generic_residual_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Definition: refineable_navier_stokes_elements.cc:579
void further_build()
Further build, pass the pointers down to the sons.
Definition: refineable_navier_stokes_elements.h:445
void dinterpolated_u_nst_ddata(const Vector< double > &s, const unsigned &i, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Definition: refineable_navier_stokes_elements.h:482
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
Definition: refineable_navier_stokes_elements.h:395
static void pin_redundant_nodal_pressures(const Vector< GeneralisedElement * > &element_pt)
Definition: refineable_navier_stokes_elements.h:351
void get_pressure_and_velocity_mass_matrix_diagonal(Vector< double > &press_mass_diag, Vector< double > &veloc_mass_diag, const unsigned &which_one=0)
Definition: refineable_navier_stokes_elements.cc:39
void fill_in_generic_pressure_advection_diffusion_contribution_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: refineable_navier_stokes_elements.cc:291
virtual void get_dresidual_dnodal_coordinates(RankThreeTensor< double > &dresidual_dnodal_coordinates)
Definition: refineable_navier_stokes_elements.cc:1130
virtual void unpin_elemental_pressure_dofs()=0
Unpin all pressure dofs in the element.
virtual Node * pressure_node_pt(const unsigned &n_p)
Definition: refineable_navier_stokes_elements.h:379
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: refineable_navier_stokes_elements.h:403
Refineable version of Crouzeix Raviart elements. Generic class definitions.
Definition: refineable_navier_stokes_elements.h:1109
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: refineable_navier_stokes_elements.h:1169
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:1200
unsigned ncont_interpolated_values() const
Broken assignment operator.
Definition: refineable_navier_stokes_elements.h:1146
void unpin_elemental_pressure_dofs()
Unpin all internal pressure dofs.
Definition: refineable_navier_stokes_elements.h:1112
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:1178
unsigned nrecovery_order()
Definition: refineable_navier_stokes_elements.h:1157
void build_fp_press_adv_diff_robin_bc_element(const unsigned &face_index)
Definition: refineable_navier_stokes_elements.h:1246
RefineableQCrouzeixRaviartElement()
Constructor.
Definition: refineable_navier_stokes_elements.h:1124
void further_setup_hanging_nodes()
Definition: refineable_navier_stokes_elements.h:1234
void rebuild_from_sons(Mesh *&mesh_pt)
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: refineable_navier_stokes_elements.h:1163
RefineableQCrouzeixRaviartElement(const RefineableQCrouzeixRaviartElement< DIM > &dummy)=delete
Broken copy constructor.
void identify_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Definition: refineable_navier_stokes_elements.h:1263
Definition: refineable_brick_element.h:68
Definition: Qelements.h:2259
Definition: refineable_navier_stokes_elements.h:652
unsigned ninterpolating_node_1d(const int &value_id)
Definition: refineable_navier_stokes_elements.h:916
unsigned ninterpolating_node(const int &value_id)
Definition: refineable_navier_stokes_elements.h:930
Node * pressure_node_pt(const unsigned &n_p)
Pointer to n_p-th pressure node.
Definition: refineable_navier_stokes_elements.h:809
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:743
void unpin_elemental_pressure_dofs()
Unpin all pressure dofs.
Definition: refineable_navier_stokes_elements.h:655
void rebuild_from_sons(Mesh *&mesh_pt)
Rebuild from sons: empty.
Definition: refineable_navier_stokes_elements.h:718
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: refineable_navier_stokes_elements.h:728
RefineableQTaylorHoodElement()
Constructor.
Definition: refineable_navier_stokes_elements.h:694
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: refineable_navier_stokes_elements.h:734
void pin_elemental_redundant_nodal_pressure_dofs()
Pin all nodal pressure dofs that are not required.
Definition: refineable_navier_stokes_elements.h:668
unsigned nrecovery_order()
Definition: refineable_navier_stokes_elements.h:722
unsigned required_nvalue(const unsigned &n) const
Definition: refineable_navier_stokes_elements.h:705
void further_setup_hanging_nodes()
Definition: refineable_navier_stokes_elements.h:803
Node * interpolating_node_pt(const unsigned &n, const int &value_id)
Definition: refineable_navier_stokes_elements.h:818
double local_one_d_fraction_of_interpolating_node(const unsigned &n1d, const unsigned &i, const int &value_id)
Definition: refineable_navier_stokes_elements.h:835
unsigned ncont_interpolated_values() const
Definition: refineable_navier_stokes_elements.h:712
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: refineable_navier_stokes_elements.h:763
void build_fp_press_adv_diff_robin_bc_element(const unsigned &face_index)
Definition: refineable_navier_stokes_elements.h:962
Node * get_interpolating_node_at_local_coordinate(const Vector< double > &s, const int &value_id)
Definition: refineable_navier_stokes_elements.h:855
void identify_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)
Definition: refineable_navier_stokes_elements.h:979
void interpolating_basis(const Vector< double > &s, Shape &psi, const int &value_id) const
Definition: refineable_navier_stokes_elements.h:944
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
char char char int int * k
Definition: level2_impl.h:374
#define DIM
Definition: linearised_navier_stokes_elements.h:44
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
@ RDF
Definition: octree.h:54
@ RUB
Definition: octree.h:52
@ LUF
Definition: octree.h:55
@ LDF
Definition: octree.h:53
@ RDB
Definition: octree.h:50
@ LUB
Definition: octree.h:51
@ RUF
Definition: octree.h:56
@ LDB
Definition: octree.h:49
@ SE
Definition: quadtree.h:57
@ NW
Definition: quadtree.h:58
@ NE
Definition: quadtree.h:59
@ W
Definition: quadtree.h:63
@ SW
Definition: quadtree.h:56
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
t
Definition: plotPSD.py:36
Definition: indexed_view.cpp:20
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
void set(Container &c, Position position, const Value &value)
Definition: stdlist_overload.cpp:36
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2