29 #ifndef OOMPH_AXISYMM_SOLID_TRACTION_ELEMENTS_HEADER
30 #define OOMPH_AXISYMM_SOLID_TRACTION_ELEMENTS_HEADER
34 #include <oomph-lib-config.h>
38 #include "../generic/Qelements.h"
39 #include "../generic/hermite_elements.h"
50 template<
class ELEMENT>
73 for (
unsigned i = 0;
i < 2;
i++)
81 (*Traction_fct_pt)(time,
x,
n, result);
129 void output(std::ostream& outfile,
const unsigned& n_plot)
141 void output(FILE* file_pt,
const unsigned& n_plot)
156 template<
class ELEMENT>
157 void AxisymmetricSolidTractionElement<
161 unsigned n_node = nnode();
163 unsigned n_position_type = nnodal_position_type();
170 Shape psi(n_node, n_position_type);
171 DShape dpsids(n_node, n_position_type, 1);
174 unsigned n_intpt = integral_pt()->nweight();
177 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
180 double w = integral_pt()->weight(ipt);
183 dshape_local_at_knot(ipt, psi, dpsids);
189 Vector<double> interpolated_dxds(2, 0.0), interpolated_dxids(2, 0.0);
192 for (
unsigned l = 0; l < n_node; l++)
195 for (
unsigned k = 0;
k < n_position_type;
k++)
198 for (
unsigned i = 0;
i < 2;
i++)
202 nodal_position_gen(l, bulk_position_type(
k),
i) * psi(l,
k);
203 interpolated_xi[
i] +=
204 this->lagrangian_position_gen(l, bulk_position_type(
k),
i) *
208 interpolated_dxds[
i] +=
209 nodal_position_gen(l, bulk_position_type(
k),
i) * dpsids(l,
k, 0);
210 interpolated_dxids[
i] +=
211 this->lagrangian_position_gen(l, bulk_position_type(
k),
i) *
221 A(0, 1) =
A(1, 0) = 0.0;
224 (interpolated_dxds[0] - interpolated_x[1] * interpolated_dxids[1]) *
225 (interpolated_dxds[0] - interpolated_x[1] * interpolated_dxids[1]) +
226 (interpolated_dxds[1] + interpolated_x[0] * interpolated_dxids[1]) *
227 (interpolated_dxds[1] + interpolated_x[0] * interpolated_dxids[1]);
230 A(1, 1) = (interpolated_x[0] *
sin(interpolated_xi[1]) +
231 interpolated_x[1] *
cos(interpolated_xi[1])) *
232 (interpolated_x[0] *
sin(interpolated_xi[1]) +
233 interpolated_x[1] *
cos(interpolated_xi[1]));
237 double W =
w *
sqrt(
A(0, 0) *
A(1, 1));
246 interpolated_normal[0] =
248 (interpolated_x[0] *
sin(interpolated_xi[1]) +
249 interpolated_x[1] *
cos(interpolated_xi[1])) *
250 (interpolated_dxds[1] + interpolated_x[0] * interpolated_dxids[1]);
252 interpolated_normal[1] =
254 (interpolated_x[0] *
sin(interpolated_xi[1]) +
255 interpolated_x[1] *
cos(interpolated_xi[1])) *
256 (interpolated_x[1] * interpolated_dxids[1] - interpolated_dxds[0]);
259 if (s_fixed_value() == -1)
261 interpolated_normal[0] *= -1.0;
262 interpolated_normal[1] *= -1.0;
267 for (
unsigned i = 0;
i < 2;
i++)
269 interpolated_normal[
i] *= normal_sign();
270 length += interpolated_normal[
i] * interpolated_normal[
i];
272 for (
unsigned i = 0;
i < 2;
i++)
274 interpolated_normal[
i] /=
sqrt(length);
281 get_traction(time(), interpolated_x, interpolated_normal, traction);
286 for (
unsigned l = 0; l < n_node; l++)
289 for (
unsigned k = 0;
k < n_position_type;
k++)
292 for (
unsigned i = 0;
i < 2;
i++)
294 local_eqn = this->position_local_eqn(l, bulk_position_type(
k),
i);
299 residuals[local_eqn] -= traction[
i] * psi(l,
k) *
W;
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Definition: axisym_solid_traction_elements.h:53
void output(std::ostream &outfile, const unsigned &n_plot)
Output function: x,y,[z],u,v,[w],p in tecplot format.
Definition: axisym_solid_traction_elements.h:129
void get_traction(const double &time, const Vector< double > &x, const Vector< double > &n, Vector< double > &result) const
Return the surface traction force.
Definition: axisym_solid_traction_elements.h:63
void output(std::ostream &outfile)
Overload the output function.
Definition: axisym_solid_traction_elements.h:123
void output(FILE *file_pt)
Overload the output function.
Definition: axisym_solid_traction_elements.h:135
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Return the jacobian.
Definition: axisym_solid_traction_elements.h:113
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Return the residuals.
Definition: axisym_solid_traction_elements.h:158
void(*&)(const double &, const Vector< double > &, const Vector< double > &, Vector< double > &) traction_fct_pt()
Return the imposed traction pointer.
Definition: axisym_solid_traction_elements.h:101
void output(FILE *file_pt, const unsigned &n_plot)
Output function: x,y,[z],u,v,[w],p in tecplot format.
Definition: axisym_solid_traction_elements.h:141
AxisymmetricSolidTractionElement(FiniteElement *const &element_pt, const int &face_index)
Definition: axisym_solid_traction_elements.h:88
void(* Traction_fct_pt)(const double &time, const Vector< double > &x, const Vector< double > &n, Vector< double > &result)
Pointer to an imposed traction function.
Definition: axisym_solid_traction_elements.h:56
Definition: elements.h:4338
int & face_index()
Definition: elements.h:4626
Definition: elements.h:4998
Definition: elements.h:1313
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
char char char int int * k
Definition: level2_impl.h:374
@ 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
list x
Definition: plotDoE.py:28