28#ifndef OOMPH_FOURIER_DECOMPOSED_TIME_HARMONIC_LINEAR_ELASTICITY_ELEMENTS_HEADER
29#define OOMPH_FOURIER_DECOMPOSED_TIME_HARMONIC_LINEAR_ELASTICITY_ELEMENTS_HEADER
33#include <oomph-lib-config.h>
66 const unsigned i)
const
68 return std::complex<unsigned>(
i,
i + 3);
84 for (
unsigned i = 0;
i < 3;
i++)
91 disp[
i] = std::complex<double>(0.0, 0.0);
96 const std::complex<double>
u_value(
124 std::complex<double> interpolated_u(0.0, 0.0);
129 const std::complex<double>
u_value(
136 return (interpolated_u);
183 std::complex<double>&
nu()
const
188 std::ostringstream error_message;
189 error_message <<
"No pointer to Poisson's ratio set. Please set one!\n";
210 std::ostringstream error_message;
212 <<
"No pointer to Fourier wavenumber set. Please set one!\n";
242 Vector<std::complex<double>>& b)
const
249 for (
unsigned i = 0;
i <
n;
i++)
251 b[
i] = std::complex<double>(0.0, 0.0);
256 (*Body_force_fct_pt)(x, b);
279 std::pair<unsigned long, unsigned>
dof_lookup;
291 for (
unsigned i = 0;
i < 6;
i++)
380 ->fill_in_generic_contribution_to_residuals_fourier_decomp_time_harmonic_linear_elasticity(
394 const unsigned&
nplot,
444 template<
unsigned NNODE_1D>
446 :
public virtual QElement<2, NNODE_1D>,
490 template<
unsigned NNODE_1D>
493 :
public virtual QElement<1, NNODE_1D>
510 template<
unsigned NNODE_1D>
512 :
public virtual TElement<2, NNODE_1D>,
585 std::ostringstream error_message;
586 error_message <<
"The flux vector has the wrong number of entries, "
603 for (
unsigned i = 0;
i < 3;
i++)
612 for (
unsigned i = 0;
i < 3;
i++)
614 for (
unsigned j =
i + 1;
j < 3;
j++)
630 template<
unsigned NNODE_1D>
633 :
public virtual TElement<1, NNODE_1D>
650 template<
class TIME_HARMONIC_LINEAR_ELAST_ELEMENT>
672 for (
unsigned j = 0;
j <
nnod;
j++)
686 return 3 * this->
dim();
697 error_stream <<
"Elements only store six fields so fld can't be"
698 <<
" " <<
fld << std::endl;
749 double interpolated_u = 0.0;
756 if (nvalue != 3 *
n_dim)
760 <<
"Current implementation only works for non-resized nodes\n"
761 <<
"but nvalue= " << nvalue <<
"!= 3 dim = " << 3 *
n_dim
770 return interpolated_u;
777 return this->
nnode();
787 if (nvalue != 3 *
n_dim)
791 <<
"Current implementation only works for non-resized nodes\n"
792 <<
"but nvalue= " << nvalue <<
"!= 3 dim = " << 3 *
n_dim
807 template<
class ELEMENT>
821 template<
class ELEMENT>
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
unsigned ntstorage() const
Return total number of doubles stored per value to record time history of each value (one for steady ...
Class for dense matrices, storing all the values of the matrix as a pointer to a pointer with assorte...
Base class for finite elements that can compute the quantities that are required for the Z2 error est...
FaceGeometry()
Constructor must call the constructor of the underlying element.
FaceGeometry()
Constructor must call the constructor of the underlying element.
FaceGeometry class definition: This policy class is used to allow construction of face elements that ...
A general Finite Element class.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
virtual void shape(const Vector< double > &s, Shape &psi) const =0
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for e...
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
unsigned nnode() const
Return the number of nodes.
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Function pointer for function that computes vector-valued steady "exact solution" as .
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Compute the geometric shape functions and also first derivatives w.r.t. global coordinates at local c...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
static DenseMatrix< double > Dummy_matrix
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case w...
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
An OomphLibError object which should be thrown when an run-time error is encountered....
Wrapper class for projectable elements. Adds "projectability" to the underlying ELEMENT.
Fourier-decomposed time-harmonic linear elasticity upgraded to become projectable.
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
unsigned nhistory_values_for_projection(const unsigned &fld)
Number of history values to be stored for fld-th field. (includes present value!)
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Return Jacobian of mapping and shape functions of field fld at local coordinate s.
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Return interpolated field fld at local coordinate s, at time level t (t=0: present; t>0: history valu...
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Specify the values associated with field fld. The information is returned in a vector of pairs which ...
unsigned nhistory_values_for_coordinate_projection()
Number of positional history values: Read out from positional timestepper (Note: count includes curre...
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
unsigned nfields_for_projection()
Number of fields to be projected: 3*dim, corresponding to real and imag parts of the displacement com...
ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement()
Constructor [this was only required explicitly from gcc 4.5.2 onwards...].
An Element that solves the equations of Fourier decomposed (in cylindrical polars) time-harmonic line...
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
QTimeHarmonicFourierDecomposedLinearElasticityElement()
Constructor.
void output(std::ostream &outfile)
Output function.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
void output(FILE *file_pt)
C-style output function.
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
An Element that solves the equations of Fourier decomposed (in cylindrical polars) time-harmonic line...
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
unsigned nvertex_node() const
Number of vertex nodes in the element.
unsigned nrecovery_order()
Order of recovery shape functions for Z2 error estimation: Same order as shape functions.
void output(FILE *file_pt)
C-style output function.
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Get 'flux' for Z2 error recovery: Upper triangular entries in strain tensor.
TTimeHarmonicFourierDecomposedLinearElasticityElement()
Constructor.
void output(std::ostream &outfile)
Output function.
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
A base class for elements that solve the Fourier decomposed (in cylindrical polars) equations of time...
void interpolated_u_time_harmonic_fourier_decomposed_linear_elasticity(const Vector< double > &s, Vector< std::complex< double > > &disp) const
Compute vector of FE interpolated displacement u at local coordinate s.
std::complex< double > *& omega_sq_pt()
Access function for square of non-dim frequency.
const std::complex< double > & omega_sq() const
Access function for square of non-dim frequency.
std::complex< double > & nu() const
Access function for Poisson's ratio.
static std::complex< double > Default_youngs_modulus_value
Static default value for Young's modulus (1.0 – for natural scaling, i.e. all stresses have been non-...
int * Fourier_wavenumber_pt
Pointer to Fourier wavenumber.
static std::complex< double > Default_omega_sq_value
Static default value for squared frequency.
std::complex< double > * Nu_pt
Pointer to Poisson's ratio.
BodyForceFctPt Body_force_fct_pt
Pointer to body force function.
std::complex< double > * Youngs_modulus_pt
Pointer to the Young's modulus.
void body_force(const Vector< double > &x, Vector< std::complex< double > > &b) const
Evaluate body force at Eulerian coordinate x at present time (returns zero vector if no body force fu...
unsigned ndof_types() const
The number of "DOF types" that degrees of freedom in this element are sub-divided into: for now lump ...
virtual std::complex< unsigned > u_index_time_harmonic_fourier_decomposed_linear_elasticity(const unsigned i) const
Return the index at which the i-th (i=0: r, i=1: z; i=2: theta) real or imag unknown displacement com...
TimeHarmonicFourierDecomposedLinearElasticityEquationsBase()
Constructor: Set null pointers for constitutive law. Set physical parameter values to default values,...
int *& fourier_wavenumber_pt()
Access function for pointer to Fourier wavenumber.
std::complex< double > youngs_modulus() const
Access function to Young's modulus.
std::complex< double > * Omega_sq_pt
Square of nondim frequency.
std::complex< double > *& nu_pt()
Access function for pointer to Poisson's ratio.
int & fourier_wavenumber() const
Access function for Fourier wavenumber.
void(* BodyForceFctPt)(const Vector< double > &x, Vector< std::complex< double > > &b)
Function pointer to function that specifies the body force as a function of the Cartesian coordinates...
std::complex< double > interpolated_u_time_harmonic_fourier_decomposed_linear_elasticity(const Vector< double > &s, const unsigned &i) const
Return FE interpolated displacement u[i] (i=0: r, i=1: z; i=2: theta) at local coordinate s.
BodyForceFctPt & body_force_fct_pt()
Access function: Pointer to body force function.
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned > > &dof_lookup_list) const
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contain...
BodyForceFctPt body_force_fct_pt() const
Access function: Pointer to body force function (const version)
std::complex< double > *& youngs_modulus_pt()
Return the pointer to Young's modulus.
A class for elements that solve the Fourier decomposed (in cylindrical polars) equations of time-harm...
TimeHarmonicFourierDecomposedLinearElasticityEquations()
Constructor.
void output(std::ostream &outfile)
Output: r,z, u_r_real, u_z_real, ..., u_theta_imag.
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Return the residuals for the equations (the discretised principle of virtual displacements)
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Validate against exact solution. Solution is provided via function pointer. Plot at a given number of...
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution: r,z, u_r_real, u_z_real, ..., u_theta_imag.
void compute_norm(double &norm)
Compute norm of solution: square of the L2 norm.
unsigned required_nvalue(const unsigned &n) const
Number of values required at node n.
virtual void fill_in_generic_contribution_to_residuals_fourier_decomp_time_harmonic_linear_elasticity(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Private helper function to compute residuals and (if requested via flag) also the Jacobian matrix.
void output(FILE *file_pt)
C-style output: r,z, u_r_real, u_z_real, ..., u_theta_imag.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
The jacobian is calculated by finite differences by default, We need only to take finite differences ...
void get_strain(const Vector< double > &s, DenseMatrix< std::complex< double > > &strain)
Get strain tensor.
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
A slight extension to the standard template vector class so that we can include "graceful" array rang...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).