28 #ifndef OOMPH_SPHERICAL_ADV_DIFF_ELEMENTS_HEADER
29 #define OOMPH_SPHERICAL_ADV_DIFF_ELEMENTS_HEADER
34 #include <oomph-lib-config.h>
38 #include "../generic/nodes.h"
39 #include "../generic/Qelements.h"
40 #include "../generic/refineable_elements.h"
41 #include "../generic/oomph_utilities.h"
115 for (
unsigned t = 0;
t < n_time;
t++)
138 void output(std::ostream& outfile,
const unsigned& nplot);
150 void output(FILE* file_pt,
const unsigned& n_plot);
155 const unsigned& nplot,
194 inline const double&
pe()
const
250 for (
unsigned i = 0;
i < 3;
i++)
258 (*Wind_fct_pt)(
x, wind);
267 const unsigned n_node =
nnode();
280 for (
unsigned j = 0;
j < 2;
j++)
286 for (
unsigned l = 0; l < n_node; l++)
288 const double u_value = this->
nodal_value(l, u_nodal_index);
291 flux[0] += u_value * dpsidx(l, 0);
292 flux[1] += u_value * dpsidx(l, 1) /
r;
329 residuals, jacobian, mass_matrix, 2);
338 const unsigned n_node =
nnode();
350 double interpolated_u = 0.0;
353 for (
unsigned l = 0; l < n_node; l++)
355 interpolated_u +=
nodal_value(l, u_nodal_index) * psi[l];
358 return (interpolated_u);
373 const unsigned n_node =
nnode();
385 unsigned n_u_dof = 0;
386 for (
unsigned l = 0; l < n_node; l++)
397 du_ddata.resize(n_u_dof, 0.0);
398 global_eqn_number.resize(n_u_dof, 0);
402 for (
unsigned l = 0; l < n_node; l++)
410 global_eqn_number[count] = global_eqn;
412 du_ddata[count] = psi[l];
431 DShape& dtestdx)
const = 0;
440 DShape& dtestdx)
const = 0;
482 template<
unsigned NNODE_1D>
484 :
public virtual QElement<2, NNODE_1D>,
524 void output(std::ostream& outfile,
const unsigned& n_plot)
539 void output(FILE* file_pt,
const unsigned& n_plot)
547 const unsigned& n_plot,
551 outfile, n_plot, exact_soln_pt);
585 template<
unsigned NNODE_1D>
594 double J = this->dshape_eulerian(
s, psi, dpsidx);
598 for (
unsigned i = 0;
i < NNODE_1D;
i++)
601 for (
unsigned j = 0;
j < 2;
j++)
603 dtestdx(
i,
j) = dpsidx(
i,
j);
619 template<
unsigned NNODE_1D>
628 double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
642 template<
unsigned NNODE_1D>
644 :
public virtual QElement<1, NNODE_1D>
665 template<
class ELEMENT>
692 "SphericalAdvectionDiffusionFluxElement",
734 residuals, jacobian, 1);
744 const unsigned&
i)
const
758 void output(std::ostream& outfile,
const unsigned& nplot)
773 unsigned n_node =
nnode();
779 for (
unsigned i = 0;
i < n_node;
i++)
797 unsigned n_node =
nnode();
803 for (
unsigned i = 0;
i < n_node;
i++)
824 (*Beta_fct_pt)(
x,
beta);
840 (*Alpha_fct_pt)(
x,
alpha);
873 template<
class ELEMENT>
876 const int& face_index)
888 ELEMENT* elem_pt =
dynamic_cast<ELEMENT*
>(bulk_el_pt);
891 if (elem_pt->dim() == 3)
900 throw OomphLibError(
"This flux element will not work correctly if "
901 "nodes are hanging\n",
929 "Bulk element must inherit from SphericalAdvectionDiffusionEquations.";
931 "Nodes are two dimensional, but cannot cast the bulk element to\n";
932 error_string +=
"SphericalAdvectionDiffusionEquations<2>\n.";
934 "If you desire this functionality, you must implement it yourself\n";
952 template<
class ELEMENT>
958 const unsigned n_node = nnode();
961 const unsigned u_index_spherical_adv_diff = U_index_adv_diff;
964 Shape psif(n_node), testf(n_node);
967 const unsigned n_intpt = integral_pt()->nweight();
974 int local_eqn = 0, local_unknown = 0;
978 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
981 for (
unsigned i = 0;
i < 1;
i++)
983 s[
i] = integral_pt()->knot(ipt,
i);
987 double w = integral_pt()->weight(ipt);
991 double J = shape_and_test(
s, psif, testf);
998 double interpolated_u = 0.0;
1002 for (
unsigned l = 0; l < n_node; l++)
1005 double u_value = raw_nodal_value(l, u_index_spherical_adv_diff);
1006 interpolated_u += u_value * psif(l);
1008 for (
unsigned i = 0;
i < 2;
i++)
1010 interpolated_x[
i] += nodal_position(l,
i) * psif(l);
1016 get_beta(interpolated_x,
beta);
1020 get_alpha(interpolated_x,
alpha);
1025 interpolated_x[0] * interpolated_x[0] *
sin(interpolated_x[1]);
1030 for (
unsigned l = 0; l < n_node; l++)
1033 local_eqn = nodal_local_eqn(l, u_index_spherical_adv_diff);
1038 residuals[local_eqn] -=
1039 dS * (
beta -
alpha * interpolated_u) * testf(l) *
W;
1043 if ((flag) && (
alpha != 0.0))
1046 for (
unsigned l2 = 0; l2 < n_node; l2++)
1049 local_unknown = nodal_local_eqn(l2, u_index_spherical_adv_diff);
1052 if (local_unknown >= 0)
1054 jacobian(local_eqn, local_unknown) +=
1055 dS *
alpha * psif[l2] * testf[l] *
W;
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
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
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
Definition: nodes.h:367
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
Definition: elements.h:4338
int & face_index()
Definition: elements.h:4626
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:4497
double J_eulerian(const Vector< double > &s) const
Definition: elements.cc:5242
double J_eulerian_at_knot(const unsigned &ipt) const
Definition: elements.cc:5328
FaceGeometry()
Definition: spherical_advection_diffusion_elements.h:649
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
virtual void output(std::ostream &outfile)
Definition: elements.h:3050
virtual void build_face_element(const int &face_index, FaceElement *face_element_pt)
Definition: elements.cc:5132
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
double nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.h:2317
virtual void shape_at_knot(const unsigned &ipt, Shape &psi) const
Definition: elements.cc:3220
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
bool has_hanging_nodes() const
Definition: elements.h:2470
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
Definition: oomph_definitions.h:222
Definition: Qelements.h:459
Definition: spherical_advection_diffusion_elements.h:486
void output(FILE *file_pt)
Definition: spherical_advection_diffusion_elements.h:532
void output(FILE *file_pt, const unsigned &n_plot)
Definition: spherical_advection_diffusion_elements.h:539
QSphericalAdvectionDiffusionElement(const QSphericalAdvectionDiffusionElement< NNODE_1D > &dummy)=delete
Broken copy constructor.
void operator=(const QSphericalAdvectionDiffusionElement< NNODE_1D > &)=delete
Broken assignment operator.
double dshape_and_dtest_eulerian_spherical_adv_diff(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: spherical_advection_diffusion_elements.h:587
QSphericalAdvectionDiffusionElement()
Definition: spherical_advection_diffusion_elements.h:495
static const unsigned Initial_Nvalue
Definition: spherical_advection_diffusion_elements.h:490
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: spherical_advection_diffusion_elements.h:524
double dshape_and_dtest_eulerian_at_knot_spherical_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: spherical_advection_diffusion_elements.h:621
unsigned required_nvalue(const unsigned &n) const
Definition: spherical_advection_diffusion_elements.h:510
void output(std::ostream &outfile)
Definition: spherical_advection_diffusion_elements.h:517
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: spherical_advection_diffusion_elements.h:546
Definition: refineable_elements.h:97
Definition: spherical_advection_diffusion_elements.h:54
unsigned self_test()
Self-test: Return 0 for OK.
Definition: spherical_advection_diffusion_elements.cc:214
void disable_ALE()
Definition: spherical_advection_diffusion_elements.h:127
virtual void get_source_spherical_adv_diff(const unsigned &ipt, const Vector< double > &x, double &source) const
Definition: spherical_advection_diffusion_elements.h:221
SphericalAdvectionDiffusionWindFctPt wind_fct_pt() const
Access function: Pointer to wind function. Const version.
Definition: spherical_advection_diffusion_elements.h:186
double interpolated_u_spherical_adv_diff(const Vector< double > &s) const
Return FE representation of function value u(s) at local coordinate s.
Definition: spherical_advection_diffusion_elements.h:334
virtual double dshape_and_dtest_eulerian_at_knot_spherical_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact soln: r,z,u_exact at nplot^2 plot points.
Definition: spherical_advection_diffusion_elements.cc:339
const double & pe() const
Peclet number.
Definition: spherical_advection_diffusion_elements.h:194
double * PeSt_pt
Pointer to global Peclet number multiplied by Strouhal number.
Definition: spherical_advection_diffusion_elements.h:456
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: spherical_advection_diffusion_elements.h:130
double du_dt_spherical_adv_diff(const unsigned &n) const
Definition: spherical_advection_diffusion_elements.h:99
void get_flux(const Vector< double > &s, Vector< double > &flux) const
Definition: spherical_advection_diffusion_elements.h:264
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: spherical_advection_diffusion_elements.h:298
SphericalAdvectionDiffusionSourceFctPt Source_fct_pt
Pointer to source function:
Definition: spherical_advection_diffusion_elements.h:459
void output(FILE *file_pt)
C_style output with default number of plot points.
Definition: spherical_advection_diffusion_elements.h:142
SphericalAdvectionDiffusionWindFctPt Wind_fct_pt
Pointer to wind function:
Definition: spherical_advection_diffusion_elements.h:462
SphericalAdvectionDiffusionEquations(const SphericalAdvectionDiffusionEquations &dummy)=delete
Broken copy constructor.
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: spherical_advection_diffusion_elements.h:322
double *& pe_st_pt()
Pointer to Peclet number multipled by Strouha number.
Definition: spherical_advection_diffusion_elements.h:212
const double & pe_st() const
Peclet number multiplied by Strouhal number.
Definition: spherical_advection_diffusion_elements.h:206
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
Definition: spherical_advection_diffusion_elements.cc:390
SphericalAdvectionDiffusionSourceFctPt & source_fct_pt()
Access function: Pointer to source function.
Definition: spherical_advection_diffusion_elements.h:165
virtual unsigned u_index_spherical_adv_diff() const
Definition: spherical_advection_diffusion_elements.h:91
SphericalAdvectionDiffusionSourceFctPt source_fct_pt() const
Access function: Pointer to source function. Const version.
Definition: spherical_advection_diffusion_elements.h:172
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: spherical_advection_diffusion_elements.h:312
void(* SphericalAdvectionDiffusionSourceFctPt)(const Vector< double > &x, double &f)
Definition: spherical_advection_diffusion_elements.h:58
static double Default_peclet_number
Static default value for the Peclet number.
Definition: spherical_advection_diffusion_elements.h:466
double * Pe_pt
Pointer to global Peclet number.
Definition: spherical_advection_diffusion_elements.h:453
virtual void fill_in_generic_residual_contribution_spherical_adv_diff(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Definition: spherical_advection_diffusion_elements.cc:47
double *& pe_pt()
Pointer to Peclet number.
Definition: spherical_advection_diffusion_elements.h:200
virtual double dshape_and_dtest_eulerian_spherical_adv_diff(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
void(* SphericalAdvectionDiffusionWindFctPt)(const Vector< double > &x, Vector< double > &wind)
Definition: spherical_advection_diffusion_elements.h:64
SphericalAdvectionDiffusionWindFctPt & wind_fct_pt()
Access function: Pointer to wind function.
Definition: spherical_advection_diffusion_elements.h:179
void operator=(const SphericalAdvectionDiffusionEquations &)=delete
Broken assignment operator.
virtual void dinterpolated_u_adv_diff_ddata(const Vector< double > &s, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Definition: spherical_advection_diffusion_elements.h:367
SphericalAdvectionDiffusionEquations()
Definition: spherical_advection_diffusion_elements.h:70
virtual void get_wind_spherical_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: spherical_advection_diffusion_elements.h:242
Definition: spherical_advection_diffusion_elements.h:669
unsigned U_index_adv_diff
The index at which the unknown is stored at the nodes.
Definition: spherical_advection_diffusion_elements.h:858
SphericalAdvectionDiffusionPrescribedAlphaFctPt Alpha_fct_pt
Function pointer to the (global) prescribed-alpha function.
Definition: spherical_advection_diffusion_elements.h:855
void get_alpha(const Vector< double > &x, double &alpha)
Definition: spherical_advection_diffusion_elements.h:830
void(* SphericalAdvectionDiffusionPrescribedBetaFctPt)(const Vector< double > &x, double &beta)
Definition: spherical_advection_diffusion_elements.h:673
double shape_and_test_at_knot(const unsigned &ipt, Shape &psi, Shape &test) const
Definition: spherical_advection_diffusion_elements.h:792
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: spherical_advection_diffusion_elements.h:729
SphericalAdvectionDiffusionPrescribedBetaFctPt & beta_fct_pt()
Access function for the prescribed-beta function pointer.
Definition: spherical_advection_diffusion_elements.h:705
void get_beta(const Vector< double > &x, double &beta)
Definition: spherical_advection_diffusion_elements.h:814
void fill_in_generic_residual_contribution_spherical_adv_diff_flux(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: spherical_advection_diffusion_elements.h:954
void output(std::ostream &outfile, const unsigned &nplot)
Definition: spherical_advection_diffusion_elements.h:758
void output(std::ostream &outfile)
Definition: spherical_advection_diffusion_elements.h:751
void(* SphericalAdvectionDiffusionPrescribedAlphaFctPt)(const Vector< double > &x, double &alpha)
Definition: spherical_advection_diffusion_elements.h:678
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: spherical_advection_diffusion_elements.h:742
SphericalAdvectionDiffusionPrescribedAlphaFctPt & alpha_fct_pt()
Access function for the prescribed-alpha function pointer.
Definition: spherical_advection_diffusion_elements.h:711
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector.
Definition: spherical_advection_diffusion_elements.h:718
void operator=(const SphericalAdvectionDiffusionFluxElement &)=delete
Broken assignment operator.
double shape_and_test(const Vector< double > &s, Shape &psi, Shape &test) const
Definition: spherical_advection_diffusion_elements.h:768
SphericalAdvectionDiffusionFluxElement(const SphericalAdvectionDiffusionFluxElement &dummy)=delete
Broken copy constructor.
SphericalAdvectionDiffusionPrescribedBetaFctPt Beta_fct_pt
Function pointer to the (global) prescribed-beta function.
Definition: spherical_advection_diffusion_elements.h:852
SphericalAdvectionDiffusionFluxElement()
Broken empty constructor.
Definition: spherical_advection_diffusion_elements.h:689
Definition: timesteppers.h:231
unsigned ntstorage() const
Definition: timesteppers.h:601
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
bool is_steady() const
Definition: timesteppers.h:389
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
RealScalar s
Definition: level1_cplx_impl.h:130
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
char char char int int * k
Definition: level2_impl.h:374
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
void source(const Vector< double > &x, Vector< double > &f)
Source function.
Definition: unstructured_two_d_circle.cc:46
int error
Definition: calibrate.py:297
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
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
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2