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>
45 #include "../generic/Qelements.h"
46 #include "../generic/Telements.h"
47 #include "../generic/projection.h"
48 #include "../generic/error_estimator.h"
66 const unsigned i)
const
68 return std::complex<unsigned>(
i,
i + 3);
76 unsigned n_node =
nnode();
84 for (
unsigned i = 0;
i < 3;
i++)
87 std::complex<unsigned> u_nodal_index =
91 disp[
i] = std::complex<double>(0.0, 0.0);
94 for (
unsigned l = 0; l < n_node; l++)
96 const std::complex<double> u_value(
100 disp[
i] += u_value * psi[l];
111 unsigned n_node =
nnode();
120 std::complex<unsigned> u_nodal_index =
124 std::complex<double> interpolated_u(0.0, 0.0);
127 for (
unsigned l = 0; l < n_node; l++)
129 const std::complex<double> u_value(
133 interpolated_u += u_value * psi[l];
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);
275 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
279 std::pair<unsigned long, unsigned> dof_lookup;
282 const unsigned n_node = this->
nnode();
285 int local_unknown = 0;
288 for (
unsigned n = 0;
n < n_node;
n++)
291 for (
unsigned i = 0;
i < 6;
i++)
297 if (local_unknown >= 0)
301 dof_lookup.first = this->
eqn_number(local_unknown);
302 dof_lookup.second = 0;
305 dof_lookup_list.push_front(dof_lookup);
380 ->fill_in_generic_contribution_to_residuals_fourier_decomp_time_harmonic_linear_elasticity(
381 residuals, jacobian, 1);
394 const unsigned& nplot,
405 void output(std::ostream& outfile,
const unsigned& n_plot);
415 void output(FILE* file_pt,
const unsigned& n_plot);
444 template<
unsigned NNODE_1D>
446 :
public virtual QElement<2, NNODE_1D>,
464 void output(std::ostream& outfile,
const unsigned& n_plot)
478 void output(FILE* file_pt,
const unsigned& n_plot)
490 template<
unsigned NNODE_1D>
493 :
public virtual QElement<1, NNODE_1D>
510 template<
unsigned NNODE_1D>
512 :
public virtual TElement<2, NNODE_1D>,
531 void output(std::ostream& outfile,
const unsigned& n_plot)
544 void output(FILE* file_pt,
const unsigned& n_plot)
582 unsigned num_entries = 12;
583 if (
flux.size() != num_entries)
585 std::ostringstream error_message;
586 error_message <<
"The flux vector has the wrong number of entries, "
587 <<
flux.size() <<
", whereas it should be " << num_entries
603 for (
unsigned i = 0;
i < 3;
i++)
605 flux[icount] = strain(
i,
i).real();
607 flux[icount] = strain(
i,
i).imag();
612 for (
unsigned i = 0;
i < 3;
i++)
614 for (
unsigned j =
i + 1;
j < 3;
j++)
616 flux[icount] = strain(
i,
j).real();
618 flux[icount] = strain(
i,
j).imag();
630 template<
unsigned NNODE_1D>
633 :
public virtual TElement<1, NNODE_1D>
650 template<
class TIME_HARMONIC_LINEAR_ELAST_ELEMENT>
671 unsigned nnod = this->
nnode();
672 for (
unsigned j = 0;
j < nnod;
j++)
675 data_values.push_back(std::make_pair(this->
node_pt(
j), fld));
686 return 3 * this->
dim();
696 std::stringstream error_stream;
697 error_stream <<
"Elements only store six fields so fld can't be"
698 <<
" " << fld << std::endl;
720 unsigned n_dim = this->
dim();
721 unsigned n_node = this->
nnode();
722 DShape dpsidx(n_node, n_dim);
736 unsigned n_node = this->
nnode();
749 double interpolated_u = 0.0;
752 for (
unsigned l = 0; l < n_node; l++)
756 if (nvalue != 3 * n_dim)
758 std::stringstream error_stream;
760 <<
"Current implementation only works for non-resized nodes\n"
761 <<
"but nvalue= " << nvalue <<
"!= 3 dim = " << 3 * n_dim
768 interpolated_u += this->
nodal_value(t, l, fld) * psi[l];
770 return interpolated_u;
777 return this->
nnode();
787 if (nvalue != 3 * n_dim)
789 std::stringstream error_stream;
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>
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Scalar * b
Definition: benchVecAdd.cpp:17
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
unsigned ntstorage() const
Definition: nodes.cc:879
Definition: error_estimator.h:79
FaceGeometry()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:827
FaceGeometry()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:813
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:497
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:637
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
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
virtual void shape(const Vector< double > &s, Shape &psi) const =0
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
unsigned dim() const
Definition: elements.h:2611
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
unsigned long eqn_number(const unsigned &ieqn_local) const
Definition: elements.h:704
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
Definition: nodes.h:1054
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
Definition: oomph_definitions.h:222
Definition: projection.h:183
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:653
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:775
unsigned nhistory_values_for_projection(const unsigned &fld)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:691
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:716
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:732
unsigned nhistory_values_for_coordinate_projection()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:709
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:782
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:665
unsigned nfields_for_projection()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:684
ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:657
Definition: Qelements.h:459
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:448
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:464
QTimeHarmonicFourierDecomposedLinearElasticityElement()
Constructor.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:451
void output(std::ostream &outfile)
Output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:458
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:478
void output(FILE *file_pt)
C-style output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:472
Definition: Telements.h:1208
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:515
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:544
unsigned nvertex_node() const
Number of vertex nodes in the element.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:552
unsigned nrecovery_order()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:565
void output(FILE *file_pt)
C-style output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:538
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:531
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:571
Node * vertex_node_pt(const unsigned &j) const
Pointer to the j-th vertex node in the element.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:558
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:579
TTimeHarmonicFourierDecomposedLinearElasticityElement()
Constructor.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:518
void output(std::ostream &outfile)
Output function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:525
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:59
std::complex< double > interpolated_u_time_harmonic_fourier_decomposed_linear_elasticity(const Vector< double > &s, const unsigned &i) const
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:107
BodyForceFctPt & body_force_fct_pt()
Access function: Pointer to body force function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:228
std::complex< double > *& youngs_modulus_pt()
Return the pointer to Young's modulus.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:171
static std::complex< double > Default_youngs_modulus_value
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:337
int * Fourier_wavenumber_pt
Pointer to Fourier wavenumber.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:323
static std::complex< double > Default_omega_sq_value
Static default value for squared frequency.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:329
std::complex< double > * Nu_pt
Pointer to Poisson's ratio.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:320
virtual std::complex< unsigned > u_index_time_harmonic_fourier_decomposed_linear_elasticity(const unsigned i) const
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:65
int & fourier_wavenumber() const
Access function for Fourier wavenumber.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:205
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.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:72
std::complex< double > & nu() const
Access function for Poisson's ratio.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:183
BodyForceFctPt Body_force_fct_pt
Pointer to body force function.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:326
void body_force(const Vector< double > &x, Vector< std::complex< double >> &b) const
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:241
std::complex< double > * Youngs_modulus_pt
Pointer to the Young's modulus.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:317
unsigned ndof_types() const
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:263
std::complex< double > youngs_modulus() const
Access function to Young's modulus.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:177
std::complex< double > *& nu_pt()
Access function for pointer to Poisson's ratio.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:199
TimeHarmonicFourierDecomposedLinearElasticityEquationsBase()
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:149
std::complex< double > *& omega_sq_pt()
Access function for square of non-dim frequency.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:165
std::complex< double > * Omega_sq_pt
Square of nondim frequency.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:314
void(* BodyForceFctPt)(const Vector< double > &x, Vector< std::complex< double >> &b)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:143
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:274
BodyForceFctPt body_force_fct_pt() const
Access function: Pointer to body force function (const version)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:234
int *& fourier_wavenumber_pt()
Access function for pointer to Fourier wavenumber.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:222
const std::complex< double > & omega_sq() const
Access function for square of non-dim frequency.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:159
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:352
TimeHarmonicFourierDecomposedLinearElasticityEquations()
Constructor.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:355
void output(std::ostream &outfile)
Output: r,z, u_r_real, u_z_real, ..., u_theta_imag.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:398
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:365
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.cc:997
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.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.cc:840
void compute_norm(double &norm)
Compute norm of solution: square of the L2 norm.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.cc:56
unsigned required_nvalue(const unsigned &n) const
Number of values required at node n.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:358
void get_strain(const Vector< double > &s, DenseMatrix< std::complex< double >> &strain)
Get strain tensor.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.cc:114
virtual void fill_in_generic_contribution_to_residuals_fourier_decomp_time_harmonic_linear_elasticity(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.cc:232
void output(FILE *file_pt)
C-style output: r,z, u_r_real, u_z_real, ..., u_theta_imag.
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:408
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: time_harmonic_fourier_decomposed_linear_elasticity_elements.h:375
unsigned ntstorage() const
Definition: timesteppers.h:601
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
int error
Definition: calibrate.py:297
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36
#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