27 #ifndef OOMPH_GEN_AXISYM_ADV_DIFF_ELEMENTS_HEADER
28 #define OOMPH_GEN_AXISYM_ADV_DIFF_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
37 #include "../generic/nodes.h"
38 #include "../generic/Qelements.h"
39 #include "../generic/oomph_utilities.h"
57 :
public virtual FiniteElement
62 typedef void (*GeneralisedAxisymAdvectionDiffusionSourceFctPt)(
63 const Vector<double>&
x,
double&
f);
67 typedef void (*GeneralisedAxisymAdvectionDiffusionWindFctPt)(
68 const Vector<double>&
x, Vector<double>& wind);
72 typedef void (*GeneralisedAxisymAdvectionDiffusionDiffFctPt)(
120 TimeStepper* time_stepper_pt = this->node_pt(
n)->time_stepper_pt();
131 const unsigned n_time = time_stepper_pt->
ntstorage();
133 for (
unsigned t = 0;
t < n_time;
t++)
136 time_stepper_pt->
weight(1,
t) * nodal_value(
t,
n, u_nodal_index);
169 void output(std::ostream& outfile,
const unsigned& nplot);
180 void output(FILE* file_pt,
const unsigned& n_plot);
185 const unsigned& nplot,
192 std::ostream& outfile,
193 const unsigned& nplot,
197 throw OomphLibError(
"There is no time-dependent output_fct() for "
198 "Advection Diffusion elements",
219 "No time-dependent compute_error() for Advection Diffusion elements",
236 GeneralisedAxisymAdvectionDiffusionSourceFctPt
source_fct_pt()
const
250 GeneralisedAxisymAdvectionDiffusionWindFctPt
wind_fct_pt()
const
278 GeneralisedAxisymAdvectionDiffusionDiffFctPt
diff_fct_pt()
const
284 const double&
pe()
const
342 for (
unsigned i = 0;
i < 3;
i++)
350 (*Wind_fct_pt)(
x, wind);
370 for (
unsigned i = 0;
i < 3;
i++)
378 (*Conserved_wind_fct_pt)(
x, wind);
400 for (
unsigned i = 0;
i < 3;
i++)
402 for (
unsigned j = 0;
j < 3;
j++)
418 (*Diff_fct_pt)(
x,
D);
427 const unsigned n_node = this->nnode();
437 dshape_eulerian(
s, psi, dpsidx);
440 for (
unsigned j = 0;
j < 2;
j++)
446 for (
unsigned l = 0; l < n_node; l++)
448 const double u_value = this->nodal_value(l, u_nodal_index);
450 flux[0] += u_value * dpsidx(l, 0);
451 flux[1] += u_value * dpsidx(l, 1);
460 const unsigned n_node = nnode();
470 dshape_eulerian(
s, psi, dpsidx);
475 double interpolated_u = 0.0;
480 for (
unsigned l = 0; l < n_node; l++)
483 const double u_value = this->nodal_value(l, u_nodal_index);
484 interpolated_u += u_value * psi(l);
486 for (
unsigned j = 0;
j < 2;
j++)
488 interpolated_x[
j] += this->nodal_position(l,
j) * psi(l);
489 interpolated_dudx[
j] += u_value * dpsidx(l,
j);
499 ipt,
s, interpolated_x, conserved_wind);
509 for (
unsigned i = 0;
i < 2;
i++)
512 for (
unsigned j = 0;
j < 2;
j++)
514 total_flux[
i] +=
D(
i,
j) * interpolated_dudx[
j];
516 total_flux[
i] -= conserved_wind[
i] * interpolated_u;
554 residuals, jacobian, mass_matrix, 2);
563 unsigned n_node = nnode();
575 double interpolated_u = 0.0;
578 for (
unsigned l = 0; l < n_node; l++)
580 interpolated_u += nodal_value(l, u_nodal_index) * psi[l];
583 return (interpolated_u);
598 DShape& dtestdx)
const = 0;
607 DShape& dtestdx)
const = 0;
656 template<
unsigned NNODE_1D>
658 :
public virtual QElement<2, NNODE_1D>,
687 return Initial_Nvalue;
699 void output(std::ostream& outfile,
const unsigned& n_plot)
714 void output(FILE* file_pt,
const unsigned& n_plot)
722 const unsigned& n_plot,
726 outfile, n_plot, exact_soln_pt);
734 const unsigned& n_plot,
739 outfile, n_plot, time, exact_soln_pt);
747 const Vector<double>&
s,
751 DShape& dtestdx)
const;
760 DShape& dtestdx)
const;
772 template<
unsigned NNODE_1D>
778 DShape& dtestdx)
const
781 double J = this->dshape_eulerian(
s, psi, dpsidx);
785 for (
unsigned i = 0;
i < NNODE_1D;
i++)
788 for (
unsigned j = 0;
j < 2;
j++)
790 dtestdx(
i,
j) = dpsidx(
i,
j);
805 template<
unsigned NNODE_1D>
812 DShape& dtestdx)
const
815 double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
837 template<
unsigned NNODE_1D>
839 :
public virtual QElement<1, NNODE_1D>
Matrix< Scalar, Dynamic, Dynamic > DenseMatrix
Definition: BenchSparseUtil.h:23
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
dominoes D
Definition: Domino.cpp:55
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
FaceGeometry()
Definition: gen_axisym_advection_diffusion_elements.h:844
Definition: gen_axisym_advection_diffusion_elements.h:660
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: gen_axisym_advection_diffusion_elements.h:721
void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: gen_axisym_advection_diffusion_elements.h:733
void output(std::ostream &outfile)
Definition: gen_axisym_advection_diffusion_elements.h:692
void output(FILE *file_pt)
Definition: gen_axisym_advection_diffusion_elements.h:707
static const unsigned Initial_Nvalue
Definition: gen_axisym_advection_diffusion_elements.h:664
double dshape_and_dtest_eulerian_at_knot_cons_axisym_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: gen_axisym_advection_diffusion_elements.h:807
void output(FILE *file_pt, const unsigned &n_plot)
Definition: gen_axisym_advection_diffusion_elements.h:714
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: gen_axisym_advection_diffusion_elements.h:699
unsigned required_nvalue(const unsigned &n) const
Broken assignment operator.
Definition: gen_axisym_advection_diffusion_elements.h:685
QGeneralisedAxisymAdvectionDiffusionElement()
Definition: gen_axisym_advection_diffusion_elements.h:669
QGeneralisedAxisymAdvectionDiffusionElement(const QGeneralisedAxisymAdvectionDiffusionElement< NNODE_1D > &dummy)=delete
Broken copy constructor.
double dshape_and_dtest_eulerian_cons_axisym_adv_diff(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: gen_axisym_advection_diffusion_elements.h:774
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
Definition: oomph_definitions.h:222
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
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
void shape(const double &s, double *Psi)
Definition: shape.h:564
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
virtual unsigned u_index_cons_axisym_adv_diff() const
Definition: gen_axisym_advection_diffusion_elements.h:110
virtual void output_fct(std::ostream &outfile, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: gen_axisym_advection_diffusion_elements.h:191
GeneralisedAxisymAdvectionDiffusionSourceFctPt Source_fct_pt
Pointer to source function:
Definition: gen_axisym_advection_diffusion_elements.h:624
GeneralisedAxisymAdvectionDiffusionWindFctPt & wind_fct_pt()
Access function: Pointer to wind function.
Definition: gen_axisym_advection_diffusion_elements.h:243
virtual double dshape_and_dtest_eulerian_at_knot_cons_axisym_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
GeneralisedAxisymAdvectionDiffusionDiffFctPt Diff_fct_pt
Pointer to diffusivity funciton.
Definition: gen_axisym_advection_diffusion_elements.h:633
GeneralisedAxisymAdvectionDiffusionWindFctPt Conserved_wind_fct_pt
Pointer to additional (conservative) wind function:
Definition: gen_axisym_advection_diffusion_elements.h:630
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: gen_axisym_advection_diffusion_elements.h:161
double interpolated_u_cons_axisym_adv_diff(const Vector< double > &s) const
Return FE representation of function value u(s) at local coordinate s.
Definition: gen_axisym_advection_diffusion_elements.h:559
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: gen_axisym_advection_diffusion_elements.h:547
virtual void get_diff_cons_axisym_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, DenseMatrix< double > &D) const
Definition: gen_axisym_advection_diffusion_elements.h:389
void output(FILE *file_pt, const unsigned &n_plot)
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: gen_axisym_advection_diffusion_elements.h:522
double * PeSt_pt
Pointer to global Peclet number multiplied by Strouhal number.
Definition: gen_axisym_advection_diffusion_elements.h:621
GeneralisedAxisymAdvectionDiffusionWindFctPt & conserved_wind_fct_pt()
Access function: Pointer to additional (conservative) wind function.
Definition: gen_axisym_advection_diffusion_elements.h:257
unsigned self_test()
Self-test: Return 0 for OK.
void get_total_flux(const Vector< double > &s, Vector< double > &total_flux) const
Get flux: .
Definition: gen_axisym_advection_diffusion_elements.h:456
GeneralisedAxisymAdvectionDiffusionDiffFctPt & diff_fct_pt()
Access function: Pointer to diffusion function.
Definition: gen_axisym_advection_diffusion_elements.h:272
static double Default_peclet_number
Static default value for the Peclet number.
Definition: gen_axisym_advection_diffusion_elements.h:642
virtual void fill_in_generic_residual_contribution_cons_axisym_adv_diff(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
const double & pe_st() const
Peclet number multiplied by Strouhal number.
Definition: gen_axisym_advection_diffusion_elements.h:296
double *& pe_st_pt()
Pointer to Peclet number multipled by Strouha number.
Definition: gen_axisym_advection_diffusion_elements.h:302
double integrate_u()
Integrate the concentration over the element.
virtual void get_conserved_wind_cons_axisym_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: gen_axisym_advection_diffusion_elements.h:361
GeneralisedAxisymAdvectionDiffusionWindFctPt Wind_fct_pt
Pointer to wind function:
Definition: gen_axisym_advection_diffusion_elements.h:627
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: gen_axisym_advection_diffusion_elements.h:536
virtual void get_source_cons_axisym_adv_diff(const unsigned &ipt, const Vector< double > &x, double &source) const
Definition: gen_axisym_advection_diffusion_elements.h:311
virtual void get_wind_cons_axisym_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: gen_axisym_advection_diffusion_elements.h:332
void disable_ALE()
Definition: gen_axisym_advection_diffusion_elements.h:144
void enable_ALE()
Definition: gen_axisym_advection_diffusion_elements.h:154
double du_dt_cons_axisym_adv_diff(const unsigned &n) const
Definition: gen_axisym_advection_diffusion_elements.h:117
GeneralisedAxisymAdvectionDiffusionSourceFctPt & source_fct_pt()
Access function: Pointer to source function.
Definition: gen_axisym_advection_diffusion_elements.h:229
double *& pe_pt()
Pointer to Peclet number.
Definition: gen_axisym_advection_diffusion_elements.h:290
bool ALE_is_disabled
Definition: gen_axisym_advection_diffusion_elements.h:638
double * Pe_pt
Pointer to global Peclet number.
Definition: gen_axisym_advection_diffusion_elements.h:618
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
void get_flux(const Vector< double > &s, Vector< double > &flux) const
Get flux: .
Definition: gen_axisym_advection_diffusion_elements.h:424
virtual double dshape_and_dtest_eulerian_cons_axisym_adv_diff(const Vector< double > &s, 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.
const double & pe() const
Peclet number.
Definition: gen_axisym_advection_diffusion_elements.h:284
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