52 const unsigned n_node =
nnode();
58 Shape psi(n_node), test(n_node);
59 DShape dpsidx(n_node,2), dtestdx(n_node,2);
68 const double scaled_peclet = this->
pe();
71 const double scaled_peclet_st = this->
pe_st();
75 int local_eqn=0, local_unknown=0;
78 HangInfo *hang_info_pt=0, *hang_info2_pt=0;
84 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
103 double interpolated_u=0.0;
114 for(
unsigned l=0;l<n_node;l++)
117 double u_value = this->
nodal_value(l,u_nodal_index);
118 interpolated_u += u_value*psi(l);
121 for(
unsigned j=0;j<2;j++)
124 interpolated_dudx[j] += u_value*dpsidx(l,j);
129 if (!ALE_is_disabled_flag)
131 for(
unsigned l=0;l<n_node;l++)
134 for(
unsigned j=0;j<2;j++)
153 double r = interpolated_x[0];
159 for(
unsigned l=0;l<n_node;l++)
163 unsigned n_master=1;
double hang_weight=1.0;
171 n_master = hang_info_pt->
nmaster();
180 for(
unsigned m=0;m<n_master;m++)
205 residuals[local_eqn] -=
206 (scaled_peclet_st*dudt + source)*r*test(l)*W*hang_weight;
209 residuals[local_eqn] -=
211 (interpolated_dudx[0]*
212 (scaled_peclet*wind[0]*test(l) + dtestdx(l,0)) +
214 (interpolated_dudx[1]*
215 (scaled_peclet*wind[1]*test(l) + dtestdx(l,1))))*r*W*hang_weight;
220 residuals[local_eqn] += scaled_peclet_st*(
221 mesh_velocity[0]*interpolated_dudx[0] +
222 mesh_velocity[1]*interpolated_dudx[1])*test(l)*r*W*hang_weight;
231 unsigned n_master2=1;
double hang_weight2=1.0;
233 for(
unsigned l2=0;l2<n_node;l2++)
241 n_master2 = hang_info2_pt->
nmaster();
250 for(
unsigned m2=0;m2<n_master2;m2++)
261 hang_weight2 = hang_info2_pt->master_weight(m2);
273 if(local_unknown >= 0)
277 jacobian(local_eqn,local_unknown)
278 -= scaled_peclet_st*test(l)*psi(l2)*
280 *r*W*hang_weight*hang_weight2;
285 mass_matrix(local_eqn,local_unknown) +=
286 scaled_peclet_st*test(l)*psi(l2)*r*W*hang_weight*hang_weight2;
291 jacobian(local_eqn,local_unknown) -=
294 (scaled_peclet*wind[0]*test(l) + dtestdx(l,0)) +
297 (scaled_peclet*wind[1]*test(l) + dtestdx(l,1))))*r*W*
298 hang_weight*hang_weight2;
302 jacobian(local_eqn,local_unknown)
303 += scaled_peclet_st*(
304 mesh_velocity[0]*dpsidx(l2,0) +
305 mesh_velocity[1]*dpsidx(l2,1))*test(l)*r*W*hang_weight*hang_weight2;
int local_hang_eqn(Node *const &node_pt, const unsigned &i)
Access function that returns the local equation number for the hanging node variables (values stored ...
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 ...
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
bool ALE_is_disabled
Boolean flag to indicate whether AlE formulation is disable.
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
unsigned nmaster() const
Return the number of master nodes.
virtual double dshape_and_dtest_eulerian_at_knot_axi_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Shape/test functions and derivs w.r.t. to global coords at integration point ipt; return Jacobian of ...
const double & pe_st() const
Peclet number multiplied by Strouhal number.
bool is_hanging() const
Test whether the node is geometrically hanging.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
virtual void get_wind_axi_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Get wind at (Eulerian) position x and/or local coordinate s. This function is virtual to allow overlo...
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
Refineable version of QAxisymAdvectionDiffusionElement. Inherit from the standard QAxisymAdvectionDif...
const double & pe() const
Peclet number.
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
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...
Class that contains data for hanging nodes.
double du_dt_axi_adv_diff(const unsigned &n) const
du/dt at local node n.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
void fill_in_generic_residual_contribution_axi_adv_diff(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Add the element's contribution to the elemental residual vector and/or Jacobian matrix flag=1: comput...
virtual unsigned u_index_axi_adv_diff() const
Broken assignment operator.
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 get_source_axi_adv_diff(const unsigned &ipt, const Vector< double > &x, double &source) const
Get source term at (Eulerian) position x. This function is virtual to allow overloading in multi-phys...
unsigned nnode() const
Return the number of nodes.
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
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...