26 #define USE_FD_JACOBIAN_FOR_NONISOTHERMAL_AXISYMMETRIC_NAVIER_STOKES
74 AxisymmetricQCrouzeixRaviartElement::required_nvalue(
n) );
86 void output(ostream &outfile,
const unsigned &nplot)
92 outfile << this->tecplot_zone_string(nplot);
95 unsigned num_plot_points=this->nplot_points(nplot);
96 for (
unsigned iplot=0;iplot<num_plot_points;iplot++)
99 this->get_s_plot(iplot,nplot,
s);
102 for(
unsigned i=0;
i<2;
i++)
104 outfile << this->interpolated_x(
s,
i) <<
" ";
108 for(
unsigned i=0;
i<3;
i++)
110 outfile << this->interpolated_u_axi_nst(
s,
i) <<
" ";
114 outfile << this->interpolated_p_axi_nst(
s) <<
" ";
117 outfile << this->interpolated_u_adv_diff(
s) << std::endl;
119 outfile << std::endl;
122 this->write_tecplot_zone_footer(outfile,nplot);
133 void output(FILE* file_pt,
const unsigned &n_plot)
140 const unsigned &Nplot,
141 FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
160 FiniteElement::SteadyExactSolutionFctPt exact_soln_pt,
161 double&
error,
double& norm)
179 const Vector<double> &
s,
180 const Vector<double> &
x,
186 visco = *Viscosity_Ratio_pt;
192 double interpolated_t = this->interpolated_u_adv_diff(
s);
195 (*Viscosity_ratio_fct_pt)(interpolated_t,visco);
216 const Vector<double> &
s,
217 const Vector<double>&
x,
218 Vector<double>& wind)
const
221 this->interpolated_u_axi_nst(
s,wind);
241 #ifdef USE_FD_JACOBIAN_FOR_NONISOTHERMAL_AXISYMMETRIC_NAVIER_STOKES
257 #ifdef USE_OFF_DIAGONAL_FD_JACOBIAN_FOR_NONISOTHERMAL_AXISYMMETRIC_NAVIER_STOKES
261 void fill_in_off_diagonal_jacobian_blocks_by_fd(Vector<double> &residuals,
266 unsigned u_nodal_nst[2];
267 for(
unsigned i=0;
i<2;
i++)
269 u_nodal_nst[
i] = this->u_index_axi_nst(
i);
276 unsigned n_dof = this->ndof();
279 Vector<double> newres(n_dof);
282 int local_unknown =0, local_eqn = 0;
285 double fd_step = FiniteElement::Default_fd_jacobian_step;
288 unsigned n_node = this->nnode();
294 for(
unsigned n=0;
n<n_node;
n++)
297 for(
unsigned i=0;
i<2;
i++)
300 local_unknown = nodal_local_eqn(
n,u_nodal_nst[
i]);
303 if(local_unknown >= 0)
306 double *value_pt = this->node_pt(
n)->value_pt(u_nodal_nst[
i]);
309 double old_var = *value_pt;
312 *value_pt += fd_step;
318 for(
unsigned m=0;
m<n_dof;
m++) {newres[
m] = 0.0;}
324 for(
unsigned m=0;
m<n_node;
m++)
327 local_eqn = this->nodal_local_eqn(
m,u_nodal_adv_diff);
332 double sum = (newres[local_eqn] - residuals[local_eqn])/fd_step;
333 jacobian(local_eqn,local_unknown) = sum;
347 local_unknown = this->nodal_local_eqn(
n,u_nodal_adv_diff);
350 if(local_unknown >= 0)
353 double *value_pt = this->node_pt(
n)->value_pt(u_nodal_adv_diff);
356 double old_var = *value_pt;
359 *value_pt += fd_step;
365 for(
unsigned m=0;
m<n_dof;
m++) {newres[
m] = 0.0;}
370 for(
unsigned m=0;
m<n_node;
m++)
373 for(
unsigned j=0;
j<2;
j++)
376 local_eqn = this->nodal_local_eqn(
m,u_nodal_nst[
j]);
379 double sum = (newres[local_eqn] - residuals[local_eqn])/fd_step;
380 jacobian(local_eqn,local_unknown) = sum;
411 fill_in_off_diagonal_jacobian_blocks_by_fd(residuals,jacobian);
421 void fill_in_off_diagonal_jacobian_blocks_analytic(Vector<double> &residuals,
431 unsigned u_nodal_nst[2];
432 for(
unsigned i=0;
i<2;
i++)
434 u_nodal_nst[
i] = this->u_index_axi_nst(
i);
441 const unsigned n_node = this->nnode();
444 Shape psif(n_node), testf(n_node);
445 DShape dpsifdx(n_node,2), dtestfdx(n_node,2);
448 const unsigned n_intpt = this->integral_pt()->nweight();
451 double Pe = this->
pe();
452 Vector<double>
gravity = this->g();
455 int local_eqn=0, local_unknown=0;
458 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
461 double w = this->integral_pt()->weight(ipt);
464 double J = this->dshape_and_dtest_eulerian_at_knot_axi_nst(ipt,
475 Vector<double> interpolated_du_adv_diff_dx(2,0.0);
478 for(
unsigned l=0;l<n_node;l++)
481 double u_value = this->raw_nodal_value(l,u_nodal_adv_diff);
483 for(
unsigned j=0;
j<2;
j++)
485 interpolated_du_adv_diff_dx[
j] += u_value*dpsifdx(l,
j);
492 for(
unsigned l=0;l<n_node;l++)
497 local_eqn = this->nodal_local_eqn(l,u_nodal_adv_diff);
502 for(
unsigned l2=0;l2<n_node;l2++)
505 for(
unsigned i2=0;i2<2;i2++)
508 local_unknown = this->nodal_local_eqn(l2,u_nodal_nst[i2]);
510 if(local_unknown >= 0)
513 jacobian(local_eqn,local_unknown)
514 -=
Pe*psif(l2)*interpolated_du_adv_diff_dx[i2]*testf(l)*
W;
539 fill_in_off_diagonal_jacobian_blocks_analytic(residuals,jacobian);
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
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Definition: non_isothermal_axisym_nst_elements.h:49
virtual void get_viscosity_ratio_axisym_nst(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, double &visco)
Definition: non_isothermal_axisym_nst_elements.h:178
void output(ostream &outfile)
Overload the standard output function with the broken default.
Definition: non_isothermal_axisym_nst_elements.h:78
ViscosityRatioFctPt Viscosity_ratio_fct_pt
Definition: non_isothermal_axisym_nst_elements.h:551
void output(FILE *file_pt)
C-style output function: Broken default.
Definition: non_isothermal_axisym_nst_elements.h:127
void compute_error(ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: non_isothermal_axisym_nst_elements.h:159
void output_fct(ostream &outfile, const unsigned &Nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for an exact solution: Broken default.
Definition: non_isothermal_axisym_nst_elements.h:139
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
Definition: non_isothermal_axisym_nst_elements.h:133
NonIsothermalAxisymmetricQCrouzeixRaviartElement()
Definition: non_isothermal_axisym_nst_elements.h:61
void get_wind_axisym_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: non_isothermal_axisym_nst_elements.h:215
void(* ViscosityRatioFctPt)(double &temperature, double &result)
Definition: non_isothermal_axisym_nst_elements.h:56
unsigned u_index_axisym_adv_diff() const
Definition: non_isothermal_axisym_nst_elements.h:149
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Definition: non_isothermal_axisym_nst_elements.h:229
unsigned required_nvalue(const unsigned &n) const
Definition: non_isothermal_axisym_nst_elements.h:71
ViscosityRatioFctPt & viscosity_ratio_fct_pt()
Access function: Pointer to viscosity ratio function.
Definition: non_isothermal_axisym_nst_elements.h:168
ViscosityRatioFctPt viscosity_ratio_fct_pt() const
Access function: Pointer to viscosity ratio function. Const version.
Definition: non_isothermal_axisym_nst_elements.h:171
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: non_isothermal_axisym_nst_elements.h:246
void output(ostream &outfile, const unsigned &nplot)
Definition: non_isothermal_axisym_nst_elements.h:86
FaceGeometry()
Definition: non_isothermal_axisym_nst_elements.h:588
FaceGeometry()
Definition: non_isothermal_axisym_nst_elements.h:579
Definition: elements.h:4998
Definition: elements.h:3439
Definition: Qelements.h:459
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
double Pe
Peclet number.
Definition: axisym_heat_sphere.cc:59
int error
Definition: calibrate.py:297
Definition: MortaringCantileverCompareToNonMortaring.cpp:176
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
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
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: gen_axisym_advection_diffusion_elements.h:536
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
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
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