32 #ifndef OOMPH_UNSTEADY_HEAT_FLUX_PSEUDO_MELT_ELEMENTS_HEADER
33 #define OOMPH_UNSTEADY_HEAT_FLUX_PSEUDO_MELT_ELEMENTS_HEADER
37 #include <oomph-lib-config.h>
64 template <
class ELEMENT>
106 const unsigned &
i)
const
117 void output(std::ostream &outfile,
const unsigned &n_plot)
126 const unsigned n_node =
nnode();
140 for (
unsigned iplot=0;iplot<num_plot_points;iplot++)
159 for(
unsigned i=0;
i<
Dim;
i++)
165 for(
unsigned l=0;l<n_node;l++)
176 unsigned first_index=
183 u+=nod_pt->
value(u_index_ust_heat)*psi[l];
186 for(
unsigned i=0;
i<
Dim;
i++)
197 for(
unsigned i=0;
i<
Dim;
i++)
203 outfile <<
flux <<
" ";
207 for(
unsigned i=0;
i<
Dim;
i++)
209 outfile << unit_normal[
i] <<
" ";
211 outfile << std::endl;
222 void output(FILE* file_pt,
const unsigned &n_plot)
229 std::ostream &soln_outfile,
242 unsigned first_index=
247 double m_back=nod_pt->
value(first_index);
250 int global_eqn_m = nod_pt->
eqn_number(first_index);
252 if (global_eqn_u<0) abort();
253 if (global_eqn_m<0) abort();
258 soln_outfile << u_back <<
" "
260 << residuals[global_eqn_u] <<
" "
261 << residuals[global_eqn_m]<< std::endl;
270 landscape_outfile <<
"ZONE I=" << nplot <<
", J=" << nplot << std::endl;
271 for (
unsigned i=0;
i<nplot;
i++)
273 double x0=u_min+(u_max-u_min)*
double(
i)/
double(nplot-1);
274 for (
unsigned j=0;
j<nplot;
j++)
276 double x1=m_min+(m_max-m_min)*
double(
j)/
double(nplot-1);
282 landscape_outfile <<
x0 <<
" "
284 << residuals[global_eqn_u] <<
" "
285 << residuals[global_eqn_m] << std::endl;
318 unsigned n_node=
nnode();
319 for(
unsigned l=0;l<n_node;l++)
330 unsigned first_index=
334 nod_pt->
pin(first_index);
347 unsigned n_node =
nnode();
353 for(
unsigned i=0;
i<n_node;
i++) {
test[
i] = psi[
i];}
371 (*Flux_fct_pt)(time,
x,
flux);
410 template<
class ELEMENT>
413 const int &face_index,
const unsigned &
id) :
422 ELEMENT* elem_pt =
new ELEMENT;
424 if(elem_pt->dim()==3)
431 "This flux element will not work correctly if nodes are hanging\n",
432 "UnsteadyHeatFluxPseudoMeltElement::Constructor",
480 "Bulk element must inherit from UnsteadyHeatEquations.";
482 "Nodes are one dimensional, but cannot cast the bulk element to\n";
483 error_string +=
"UnsteadyHeatEquations<1>\n.";
485 "If you desire this functionality, you must implement it yourself\n";
509 "Bulk element must inherit from UnsteadyHeatEquations.";
511 "Nodes are two dimensional, but cannot cast the bulk element to\n";
512 error_string +=
"UnsteadyHeatEquations<2>\n.";
514 "If you desire this functionality, you must implement it yourself\n";
537 "Bulk element must inherit from UnsteadyHeatEquations.";
539 "Nodes are three dimensional, but cannot cast the bulk element to\n";
540 error_string +=
"UnsteadyHeatEquations<3>\n.";
542 "If you desire this functionality, you must implement it yourself\n";
559 std::ostringstream error_stream;
560 error_stream <<
"Dimension of node is " <<
Dim
561 <<
". It should be 1,2, or 3!" << std::endl;
576 template<
class ELEMENT>
592 const unsigned n_node = nnode();
595 double time=node_pt(0)->time_stepper_pt()->time_pt()->time();
598 Shape psif(n_node), testf(n_node);
601 const unsigned n_intpt = integral_pt()->nweight();
610 const unsigned u_index_ust_heat = U_index_ust_heat;
614 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
618 for(
unsigned i=0;
i<(
Dim-1);
i++)
620 s[
i] = integral_pt()->knot(ipt,
i);
624 double w = integral_pt()->weight(ipt);
628 double J = shape_and_test(
s,psif,testf);
643 for(
unsigned i=0;
i<
Dim;
i++)
645 interpolated_x[
i] = 0.0;
649 for(
unsigned l=0;l<n_node;l++)
652 Node* nod_pt = node_pt(l);
660 unsigned first_index=
667 u+=nod_pt->
value(u_index_ust_heat)*psif[l];
670 for(
unsigned i=0;
i<
Dim;
i++)
672 interpolated_x[
i] += nodal_position(l,
i)*psif[l];
683 for(
unsigned l=0;l<n_node;l++)
685 local_eqn = nodal_local_eqn(l,u_index_ust_heat);
699 for(
unsigned l=0;l<n_node;l++)
702 Node* nod_pt = node_pt(l);
710 unsigned first_index=
712 local_eqn = nodal_local_eqn(l,first_index);
717 double u=nod_pt->
value(u_index_ust_heat);
727 residuals[local_eqn]+=(melt_temperature()-u);
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
unsigned index_of_first_value_assigned_by_face_element(const unsigned &face_id=0) const
Definition: nodes.h:2061
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
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
void set_value(const unsigned &i, const double &value_)
Definition: nodes.h:271
Definition: double_vector.h:58
Definition: elements.h:4338
int & face_index()
Definition: elements.h:4626
void outer_unit_normal(const Vector< double > &s, Vector< double > &unit_normal) const
Compute outer unit normal at the specified local coordinate.
Definition: elements.cc:6006
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:4497
void add_additional_values(const Vector< unsigned > &nadditional_values, const unsigned &id)
Definition: elements.h:4428
double interpolated_x(const Vector< double > &s, const unsigned &i) const
Definition: elements.h:4528
double J_eulerian(const Vector< double > &s) const
Definition: elements.cc:5242
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
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Definition: elements.h:3161
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
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual unsigned nplot_points(const unsigned &nplot) const
Definition: elements.h:3186
double nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.h:2317
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
Definition: nodes.h:1054
double value(const unsigned &i) const
Definition: nodes.cc:2408
Definition: oomph_definitions.h:222
Definition: oomph_definitions.h:267
Definition: problem.h:151
virtual void get_residuals(DoubleVector &residuals)
Get the total residuals Vector for the problem.
Definition: problem.cc:3714
Definition: refineable_elements.h:97
Time *const & time_pt() const
Access function for the pointer to time (const version)
Definition: timesteppers.h:572
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
Definition: unsteady_heat_elements.h:72
virtual unsigned u_index_ust_heat() const
Broken assignment operator.
Definition: unsteady_heat_elements.h:112
Definition: unsteady_heat_flux_pseudo_melt_elements.h:67
double shape_and_test(const Vector< double > &s, Shape &psi, Shape &test) const
Definition: unsteady_heat_flux_pseudo_melt_elements.h:343
unsigned Dim
The spatial dimension of the problem.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:389
void plot_residual_landscape(std::ostream &landscape_outfile, std::ostream &soln_outfile, Problem *problem_pt, const unsigned &j)
Plot landscape of residuals for j-th node.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:228
UnsteadyHeatFluxPseudoMeltElement(const UnsteadyHeatFluxPseudoMeltElement &dummy)
Broken copy constructor.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:82
double * Melt_temperature_pt
Pointer to non-default melt temperature.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:398
UnsteadyHeatPrescribedFluxFctPt Flux_fct_pt
Function pointer to the (global) prescribed-flux function.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:386
void get_flux(const double &time, const Vector< double > &x, double &flux)
Definition: unsteady_heat_flux_pseudo_melt_elements.h:361
double *& melt_temperature_pt()
Pointer to (non-default) melt temperature.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:309
void(* UnsteadyHeatPrescribedFluxFctPt)(const double &time, const Vector< double > &x, double &flux)
Definition: unsteady_heat_flux_pseudo_melt_elements.h:74
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: unsteady_heat_flux_pseudo_melt_elements.h:105
unsigned Melt_id
Id of first value assigned by this face element.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:395
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Compute the element residual vector.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:92
void output(FILE *file_pt, const unsigned &n_plot)
Definition: unsteady_heat_flux_pseudo_melt_elements.h:222
void output(FILE *file_pt)
Definition: unsteady_heat_flux_pseudo_melt_elements.h:217
double melt_temperature()
Melt temperature.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:296
unsigned U_index_ust_heat
The index at which the unknown is stored at the nodes.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:392
UnsteadyHeatPrescribedFluxFctPt & flux_fct_pt()
Access function for the prescribed-flux function pointer.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:89
void output(std::ostream &outfile)
Output function.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:110
void fill_in_generic_residual_contribution_ust_heat_flux(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Compute the element's residual vector and the Jacobian matrix.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:578
UnsteadyHeatFluxPseudoMeltElement(FiniteElement *const &bulk_el_pt, const int &face_index, const unsigned &id=0)
Definition: unsteady_heat_flux_pseudo_melt_elements.h:412
void disable_melting()
Switch off melting by pinning melting dofs.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:316
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
Definition: unsteady_heat_flux_pseudo_melt_elements.h:117
RealScalar s
Definition: level1_cplx_impl.h:130
char char char int int * k
Definition: level2_impl.h:374
double melt_flux(const double &t)
Definition: stefan_boltzmann_melt.cc:643
static const unsigned Dim
Problem dimension.
Definition: two_d_tilted_square.cc:62
Vector< double > x1(const Vector< double > &coord)
Cartesian coordinates centered at the point (0.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:86
Vector< double > x0(2, 0.0)
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:212
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
void get_flux(const Vector< double > &s, Vector< double > &flux) const
Get flux: .
Definition: gen_axisym_advection_diffusion_elements.h:424
list x
Definition: plotDoE.py:28
Definition: indexed_view.cpp:20
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
void output(std::ostream &outfile, const unsigned &nplot)
Overload output function.
Definition: overloaded_element_body.h:490
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2