36 using namespace oomph;
45 template<
unsigned DIM>
71 this->set_ninteraction(1);
75 this->ignore_external_geometric_data();
84 const double &
ra()
const {
return *Ra_pt;}
87 double* &
ra_pt() {
return Ra_pt;}
95 void output(ostream &outfile,
const unsigned &nplot)
101 outfile << this->tecplot_zone_string(nplot);
104 unsigned num_plot_points=this->nplot_points(nplot);
105 for (
unsigned iplot=0;iplot<num_plot_points;iplot++)
108 this->get_s_plot(iplot,nplot,
s);
111 for(
unsigned i=0;
i<
DIM;
i++)
112 {outfile << this->interpolated_x(
s,
i) <<
" ";}
115 for(
unsigned i=0;
i<
DIM;
i++)
116 {outfile << this->interpolated_u_nst(
s,
i) <<
" ";}
119 outfile << this->interpolated_p_nst(
s) <<
" " << std::endl;;
121 outfile << std::endl;
124 this->write_tecplot_zone_footer(outfile,nplot);
133 void output(FILE* file_pt,
const unsigned &n_plot)
164 cast_father_element_pt
166 this->father_element_pt());
170 this->Ra_pt = cast_father_element_pt->
ra_pt();
186 double&
error,
double& norm)
197 double&
error,
double& norm)
202 void get_body_force_nst(
const double& time,
const unsigned& ipt,
208 void get_dbody_force_nst_dexternal_element_data(
226 #ifdef USE_FD_JACOBIAN_FOR_MY_NAVIER_STOKES_ELEMENT
234 this->fill_in_off_diagonal_block_analytic(residuals,jacobian);
249 residuals,jacobian,mass_matrix);
259 unsigned u_nodal_nst[
DIM];
260 for(
unsigned i=0;
i<
DIM;
i++)
261 {u_nodal_nst[
i] = this->u_index_nst(
i);}
264 const unsigned n_node = this->nnode();
267 Shape psif(n_node), testf(n_node);
271 const unsigned n_intpt = this->integral_pt()->nweight();
274 int local_eqn=0, local_unknown=0;
280 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
283 double w = this->integral_pt()->weight(ipt);
287 this->dshape_and_dtest_eulerian_at_knot_nst(ipt,psif,dpsifdx,
302 this->get_dbody_force_nst_dexternal_element_data(
303 ipt,dbody_dexternal_element_data,
304 global_eqn_number_of_external_element_data);
306 const unsigned n_external_element_data =
307 global_eqn_number_of_external_element_data.size();
310 for(
unsigned l=0;l<n_node;l++)
315 unsigned n_master = 1;
316 double hang_weight = 1.0;
319 bool is_node_hanging = this->node_pt(l)->is_hanging();
324 hang_info_pt = this->node_pt(l)->hanging_pt();
325 n_master = hang_info_pt->
nmaster();
334 for(
unsigned m=0;
m<n_master;
m++)
350 for(
unsigned i=0;
i<
DIM;
i++)
362 local_eqn = this->nodal_local_eqn(l,u_nodal_nst[
i]);
368 for(
unsigned l2=0;l2<n_external_element_data;l2++)
373 this->local_eqn_number(
374 global_eqn_number_of_external_element_data[l2]);
375 if(local_unknown >= 0)
378 jacobian(local_eqn,local_unknown)
379 += dbody_dexternal_element_data(
i,l2)*testf(l)*hang_weight*
W;
391 (std::list<std::pair<unsigned long, unsigned> >& dof_lookup_list)
const
411 template<
unsigned DIM>
424 this->set_ninteraction(1);
428 this->ignore_external_geometric_data();
442 void output(ostream &outfile,
const unsigned &nplot)
448 outfile << this->tecplot_zone_string(nplot);
451 unsigned num_plot_points=this->nplot_points(nplot);
452 for (
unsigned iplot=0;iplot<num_plot_points;iplot++)
455 this->get_s_plot(iplot,nplot,
s);
458 for(
unsigned i=0;
i<
DIM;
i++)
459 {outfile << this->interpolated_x(
s,
i) <<
" ";}
462 outfile << this->interpolated_u_adv_diff(
s) << std::endl;
464 outfile << std::endl;
467 this->write_tecplot_zone_footer(outfile,nplot);
476 void output(FILE* file_pt,
const unsigned &n_plot)
526 double&
error,
double& norm)
537 double&
error,
double& norm)
549 void get_dwind_adv_diff_dexternal_element_data(
550 const unsigned& ipt,
const unsigned &
i,
566 #ifdef USE_FD_JACOBIAN_FOR_MY_ADVECTION_DIFFUSION_ELEMENT
574 this->fill_in_off_diagonal_block_analytic(residuals,jacobian);
588 residuals,jacobian,mass_matrix);
599 const unsigned u_nodal_adv_diff = this->u_index_adv_diff();
602 const unsigned n_node = this->nnode();
609 const unsigned n_intpt = this->integral_pt()->nweight();
612 int local_eqn=0, local_unknown=0;
618 const double peclet = this->
pe();
621 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
624 double w = this->integral_pt()->weight(ipt);
628 this->dshape_and_dtest_eulerian_at_knot_adv_diff(ipt,psi,dpsidx,
637 for(
unsigned l=0;l<n_node;l++)
640 for(
unsigned j=0;
j<
DIM;
j++)
642 interpolated_dudx[
j] +=
643 this->nodal_value(l,u_nodal_adv_diff)*dpsidx(l,
j);
655 for(
unsigned i2=0;i2<
DIM;i2++)
658 this->get_dwind_adv_diff_dexternal_element_data(
659 ipt,i2,dwind_dexternal_element_data,
660 global_eqn_number_of_external_element_data);
664 const unsigned n_external_element_data =
665 global_eqn_number_of_external_element_data.size();
668 for(
unsigned l=0;l<n_node;l++)
672 unsigned n_master = 1;
673 double hang_weight = 1.0;
676 bool is_node_hanging = this->node_pt(l)->is_hanging();
681 hang_info_pt = this->node_pt(l)->hanging_pt();
682 n_master = hang_info_pt->
nmaster();
691 for(
unsigned m=0;
m<n_master;
m++)
715 local_eqn = this->nodal_local_eqn(l,u_nodal_adv_diff);
721 for(
unsigned l2=0;l2<n_external_element_data;l2++)
726 this->local_eqn_number(
727 global_eqn_number_of_external_element_data[l2]);
728 if(local_unknown >= 0)
731 jacobian(local_eqn,local_unknown)
732 -= peclet*dwind_dexternal_element_data[l2]*
733 interpolated_dudx[i2]*
test(l)*hang_weight*
W;
745 (std::list<std::pair<unsigned long, unsigned> >& dof_lookup_list)
const
751 unsigned n_node = this->nnode();
754 std::pair<unsigned,unsigned> dof_lookup;
757 for (
unsigned n = 0;
n < n_node;
n++)
760 unsigned nv = this->node_pt(
n)->nvalue();
763 for (
unsigned v = 0;
v < nv;
v++)
766 int local_eqn_number = this->nodal_local_eqn(
n,
v);
771 if (local_eqn_number >= 0)
775 dof_lookup.first = this->eqn_number(local_eqn_number);
778 dof_lookup.second = 0;
781 dof_lookup_list.push_front(dof_lookup);
801 template<
unsigned DIM>
808 unsigned interaction=0;
813 (external_element_pt(interaction,ipt));
820 for (
unsigned i=0;
i<
DIM;
i++)
823 (external_element_local_coord(interaction,ipt))*ra();
831 template<
unsigned DIM>
838 unsigned interaction=0;
843 (external_element_pt(interaction,ipt));
852 external_element_local_coord(interaction,ipt),du_adv_diff_ddata,
856 unsigned n_external_element_data = du_adv_diff_ddata.size();
858 result.
resize(
DIM,n_external_element_data);
861 for (
unsigned i=0;
i<
DIM;
i++)
864 for(
unsigned n=0;
n<n_external_element_data;
n++)
866 result(
i,
n) = -
gravity[
i]*du_adv_diff_ddata[
n]*ra();
879 template<
unsigned DIM>
886 unsigned interaction=0;
891 (external_element_pt(interaction,ipt));
895 (external_element_local_coord(interaction,ipt),wind);
904 template<
unsigned DIM>
912 unsigned interaction=0;
917 (external_element_pt(interaction,ipt));
923 external_element_local_coord(interaction,ipt),
i,result,
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Definition: my_boussinesq_elements.h:415
void output(ostream &outfile, const unsigned &nplot)
Definition: my_boussinesq_elements.h:442
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Definition: my_boussinesq_elements.h:745
void get_wind_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: my_boussinesq_elements.h:882
void get_dwind_adv_diff_dexternal_element_data(const unsigned &ipt, const unsigned &i, Vector< double > &result, Vector< unsigned > &global_eqn_number)
Definition: my_boussinesq_elements.h:906
void compute_error(ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: my_boussinesq_elements.h:535
void output_fct(ostream &outfile, const unsigned &Nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: my_boussinesq_elements.h:488
void output_fct(ostream &outfile, const unsigned &Nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for an exact solution: Broken default.
Definition: my_boussinesq_elements.h:480
unsigned ndof_types() const
Number of dof types in this element.
Definition: my_boussinesq_elements.h:788
void output(ostream &outfile)
Overload the standard output function with the broken default.
Definition: my_boussinesq_elements.h:437
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
Definition: my_boussinesq_elements.h:476
void output(FILE *file_pt)
C-style output function: Broken default.
Definition: my_boussinesq_elements.h:472
void compute_error(ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Definition: my_boussinesq_elements.h:523
RefineableQAdvectionDiffusionElementWithExternalElement()
Constructor: call the underlying constructors.
Definition: my_boussinesq_elements.h:420
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: my_boussinesq_elements.h:580
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: my_boussinesq_elements.h:594
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: my_boussinesq_elements.h:563
unsigned required_nvalue(const unsigned &n) const
Definition: my_boussinesq_elements.h:433
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Just call the fill_in_residuals for AdvDiff.
Definition: my_boussinesq_elements.h:555
Definition: my_boussinesq_elements.h:49
void compute_error(ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: my_boussinesq_elements.h:195
void get_dbody_force_nst_dexternal_element_data(const unsigned &ipt, DenseMatrix< double > &result, Vector< unsigned > &global_eqn_number)
external unknowns
Definition: my_boussinesq_elements.h:833
void output_fct(ostream &outfile, const unsigned &Nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: my_boussinesq_elements.h:145
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: my_boussinesq_elements.h:254
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Definition: my_boussinesq_elements.h:391
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the constituent elements' contribution to the residual vector.
Definition: my_boussinesq_elements.h:214
void output_fct(ostream &outfile, const unsigned &Nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for an exact solution: Broken default.
Definition: my_boussinesq_elements.h:137
unsigned ndof_types() const
Definition: my_boussinesq_elements.h:398
unsigned required_nvalue(const unsigned &n) const
Definition: my_boussinesq_elements.h:80
void output(FILE *file_pt)
C-style output function: Broken default.
Definition: my_boussinesq_elements.h:129
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
Definition: my_boussinesq_elements.h:133
void output(ostream &outfile)
Overload the standard output function with the broken default.
Definition: my_boussinesq_elements.h:90
double *& ra_pt()
Access function for the pointer to the Rayleigh number.
Definition: my_boussinesq_elements.h:87
RefineableQCrouzeixRaviartElementWithExternalElement()
Definition: my_boussinesq_elements.h:64
void get_body_force_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &result)
Definition: my_boussinesq_elements.h:804
const double & ra() const
Access function for the Rayleigh number (const version)
Definition: my_boussinesq_elements.h:84
void output(ostream &outfile, const unsigned &nplot)
Definition: my_boussinesq_elements.h:95
void further_build()
Definition: my_boussinesq_elements.h:157
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: my_boussinesq_elements.h:241
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: my_boussinesq_elements.h:223
void compute_error(ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Definition: my_boussinesq_elements.h:183
static double Default_Physical_Constant_Value
The static default value of the Rayleigh number.
Definition: my_boussinesq_elements.h:57
double * Ra_pt
Pointer to a private data member, the Rayleigh number.
Definition: my_boussinesq_elements.h:54
double interpolated_u_adv_diff(const Vector< double > &s) const
Return FE representation of function value u(s) at local coordinate s.
Definition: advection_diffusion_elements.h:458
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: advection_diffusion_elements.h:435
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: advection_diffusion_elements.h:421
void resize(const unsigned long &n)
Definition: matrices.h:498
Definition: element_with_external_element.h:56
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: elements.h:1735
virtual void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output an exact solution over the element.
Definition: elements.h:3104
virtual void output(std::ostream &outfile)
Definition: elements.h:3050
virtual void compute_error(FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Calculate the norm of the error and that of the exact solution.
Definition: elements.h:3198
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
virtual void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: elements.cc:1322
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
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Compute the element's residual Vector.
Definition: navier_stokes_elements.h:1260
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
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: navier_stokes_elements.h:1273
unsigned required_nvalue(const unsigned &n) const
Definition: advection_diffusion_elements.h:633
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
Definition: navier_stokes_elements.cc:2581
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Definition: navier_stokes_elements.cc:2662
unsigned ndof_types() const
Definition: navier_stokes_elements.h:1935
Definition: refineable_advection_diffusion_elements.h:58
void dinterpolated_u_adv_diff_ddata(const Vector< double > &s, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Definition: refineable_advection_diffusion_elements.h:199
Definition: refineable_navier_stokes_elements.h:322
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
Definition: refineable_advection_diffusion_elements.h:355
Refineable version of Crouzeix Raviart elements. Generic class definitions.
Definition: refineable_navier_stokes_elements.h:1109
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
#define DIM
Definition: linearised_navier_stokes_elements.h:44
squared absolute sa ArrayBase::abs2 DOXCOMMA MatrixBase::cwiseAbs2 sa Eigen::abs2 DOXCOMMA Eigen::pow DOXCOMMA ArrayBase::square nearest sa Eigen::floor DOXCOMMA Eigen::ceil DOXCOMMA ArrayBase::round nearest integer not less than the given sa Eigen::floor DOXCOMMA ArrayBase::ceil not a number test
Definition: GlobalFunctions.h:109
void gravity(const double &t, const Vector< double > &xi, Vector< double > &b)
Definition: ConstraintElementsUnitTest.cpp:20
int error
Definition: calibrate.py:297
Definition: MortaringCantileverCompareToNonMortaring.cpp:176
double Default_Physical_Constant_Value
Default value for physical constants.
Definition: multi_domain_boussinesq_elements.h:48
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
const double & pe() const
Peclet number.
Definition: gen_axisym_advection_diffusion_elements.h:284
list x
Definition: plotDoE.py:28
Definition: indexed_view.cpp:20
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2