27 #ifndef OOMPH_AXISYM_FOEPPLVONKARMAN_ELEMENTS_HEADER
28 #define OOMPH_AXISYM_FOEPPLVONKARMAN_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
36 #include "../generic/nodes.h"
37 #include "../generic/Qelements.h"
38 #include "../generic/oomph_utilities.h"
39 #include "../generic/element_with_external_element.h"
50 class AxisymFoepplvonKarmanEquations :
public virtual FiniteElement
77 const double&
eta()
const
107 const unsigned n_plot = 5;
113 void output(std::ostream& outfile,
const unsigned& n_plot);
118 const unsigned n_plot = 5;
124 void output(FILE* file_pt,
const unsigned& n_plot);
128 const unsigned& n_plot,
135 std::ostream& outfile,
136 const unsigned& n_plot,
141 "There is no time-dependent output_fct() for Foeppl von Karman"
162 "There is no time-dependent compute_error() for Foeppl von Karman"
198 double& pressure)
const
208 (*Pressure_fct_pt)(
r, pressure);
218 double& airy_forcing)
const
228 (*Airy_forcing_fct_pt)(
r, airy_forcing);
237 const unsigned n_node =
nnode();
253 for (
unsigned l = 0; l < n_node; l++)
255 gradient[0] += this->
nodal_value(l, w_nodal_index) * dpsidr(l, 0);
272 const unsigned n_node =
nnode();
284 double interpolated_w = 0.0;
287 for (
unsigned l = 0; l < n_node; l++)
289 interpolated_w += this->
nodal_value(l, w_nodal_index) * psi[l];
292 return (interpolated_w);
299 double& sigma_phi_phi);
318 unsigned total_fvk_nodal_indices = 6;
321 unsigned n_node =
nnode();
324 for (
unsigned index = first_fvk_nodal_index + 2;
325 index < first_fvk_nodal_index + total_fvk_nodal_indices;
329 for (
unsigned inod = 0; inod < n_node; inod++)
346 DShape& dtestdr)
const = 0;
356 DShape& dtestdr)
const = 0;
386 template<
unsigned NNODE_1D>
388 :
public virtual QElement<1, NNODE_1D>,
428 void output(std::ostream& outfile,
const unsigned& n_plot)
442 void output(FILE* file_pt,
const unsigned& n_plot)
450 const unsigned& n_plot,
454 outfile, n_plot, exact_soln_pt);
461 const unsigned& n_plot,
466 outfile, n_plot, time, exact_soln_pt);
498 template<
unsigned NNODE_1D>
500 NNODE_1D>::dshape_and_dtest_eulerian_axisym_fvk(
const Vector<double>&
s,
508 const double J = this->dshape_eulerian(
s, psi, dpsidr);
525 template<
unsigned NNODE_1D>
531 DShape& dtestdr)
const
534 const double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidr);
556 template<
unsigned NNODE_1D,
class FLUID_ELEMENT>
576 const double&
q()
const
592 return this->
nnode();
607 const unsigned t = 0;
619 const unsigned n_node = this->
nnode();
628 this->
shape(zeta, psi);
631 double interpolated_w = 0.0;
632 double interpolated_r = 0.0;
635 for (
unsigned l = 0; l < n_node; l++)
637 interpolated_w += this->
nodal_value(t, l, w_nodal_index) * psi[l];
638 interpolated_r += this->
node_pt(l)->
x(
t, 0) * psi[l];
642 r[0] = interpolated_r;
643 r[1] = interpolated_w;
653 const unsigned n_node = this->
nnode();
662 this->
shape(zeta, psi);
665 double interpolated_dwdt = 0.0;
666 double interpolated_drdt = 0.0;
669 for (
unsigned l = 0; l < n_node; l++)
681 for (
unsigned t = 0;
t < n_time;
t++)
692 drdt[0] = interpolated_drdt;
693 drdt[1] = interpolated_dwdt;
703 double& pressure)
const
711 const double q_value =
q();
726 ext_el_pt->traction(s_ext,
normal, traction);
729 pressure -= q_value * traction[1];
737 unsigned nnod = this->
nnode();
745 outfile <<
"ZONE I=" << n_intpt << std::endl;
746 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
754 double interpolated_w = 0.0;
755 double interpolated_r = 0.0;
758 for (
unsigned l = 0; l < nnod; l++)
760 interpolated_w += this->
nodal_value(l, w_nodal_index) * psi[l];
761 interpolated_r += this->
node_pt(l)->
x(0) * psi[l];
771 ext_el_pt->interpolated_u_axi_nst(s_ext, veloc);
773 ext_el_pt->interpolated_x(s_ext,
x);
775 outfile << interpolated_r <<
" " << interpolated_w <<
" " << veloc[0]
776 <<
" " << veloc[1] <<
" " <<
x[0] <<
" " <<
x[1] <<
" "
784 const unsigned& nplot)
788 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
795 ext_el_pt->output(outfile, nplot);
835 std::map<FLUID_ELEMENT*, bool> done;
841 for (
unsigned iint = 0; iint < n_intpt; iint++)
854 el_f_pt->node_update();
855 done[el_f_pt] =
true;
864 void output(std::ostream& outfile,
const unsigned& n_plot)
874 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
884 double sigma_r_r = 0.0;
885 double sigma_phi_phi = 0.0;
891 << drdt[1] <<
" " << sigma_r_r <<
" " << sigma_phi_phi
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
Definition: axisym_displ_based_fvk_elements.h:404
void output(FILE *file_pt, const unsigned &n_plot)
Definition: axisym_fvk_elements.h:442
double dshape_and_dtest_eulerian_axisym_fvk(const Vector< double > &s, Shape &psi, DShape &dpsidr, Shape &test, DShape &dtestdr) const
void output(FILE *file_pt)
Definition: axisym_fvk_elements.h:435
double dshape_and_dtest_eulerian_at_knot_axisym_fvk(const unsigned &ipt, Shape &psi, DShape &dpsidr, Shape &test, DShape &dtestdr) const
void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: axisym_fvk_elements.h:460
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: axisym_fvk_elements.h:428
AxisymFoepplvonKarmanElement(const AxisymFoepplvonKarmanElement< NNODE_1D > &dummy)=delete
Broken copy constructor.
void output(std::ostream &outfile)
Definition: axisym_fvk_elements.h:421
static const unsigned Initial_Nvalue
Set the data for the number of Variables at each node - 3.
Definition: axisym_displ_based_fvk_elements.h:408
unsigned required_nvalue(const unsigned &n) const
Definition: axisym_fvk_elements.h:413
void operator=(const AxisymFoepplvonKarmanElement< NNODE_1D > &)=delete
Broken assignment operator.
AxisymFoepplvonKarmanElement()
Definition: axisym_fvk_elements.h:399
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: axisym_fvk_elements.h:449
Definition: axisym_displ_based_fvk_elements.h:51
AxisymFoepplvonKarmanPressureFctPt pressure_fct_pt() const
Access function: Pointer to pressure function. Const version.
Definition: axisym_fvk_elements.h:175
AxisymFoepplvonKarmanPressureFctPt Pressure_fct_pt
Pointer to pressure function:
Definition: axisym_displ_based_fvk_elements.h:375
static double Default_Physical_Constant_Value
Default value for physical constants.
Definition: axisym_displ_based_fvk_elements.h:386
void operator=(const AxisymFoepplvonKarmanEquations &)=delete
Broken assignment operator.
virtual void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: axisym_fvk_elements.h:134
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: axisym_fvk_elements.h:105
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the residuals with this element's contribution.
bool interpolated_stress(const Vector< double > &s, double &sigma_r_r, double &sigma_phi_phi) const
Definition: axisym_displ_based_fvk_elements.cc:234
void output(FILE *file_pt)
C_style output with default number of plot points.
Definition: axisym_fvk_elements.h:116
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Dummy, time dependent error checker.
Definition: axisym_fvk_elements.h:155
unsigned self_test()
Self-test: Return 0 for OK.
AxisymFoepplvonKarmanPressureFctPt Airy_forcing_fct_pt
Pointer to Airy forcing function.
Definition: axisym_fvk_elements.h:365
double * Eta_pt
Pointer to FvK parameter.
Definition: axisym_displ_based_fvk_elements.h:372
virtual double dshape_and_dtest_eulerian_at_knot_axisym_fvk(const unsigned &ipt, Shape &psi, DShape &dpsidr, Shape &test, DShape &dtestdr) const =0
virtual unsigned nodal_index_fvk(const unsigned &i=0) const
Definition: axisym_fvk_elements.h:99
void(* AxisymFoepplvonKarmanPressureFctPt)(const double &r, double &f)
Definition: axisym_displ_based_fvk_elements.h:55
void output(FILE *file_pt, const unsigned &n_plot)
void get_gradient_of_deflection(const Vector< double > &s, Vector< double > &gradient) const
Get gradient of deflection: gradient[i] = dw/dr_i */.
Definition: axisym_fvk_elements.h:233
AxisymFoepplvonKarmanPressureFctPt & airy_forcing_fct_pt()
Access function: Pointer to Airy forcing function.
Definition: axisym_fvk_elements.h:181
AxisymFoepplvonKarmanPressureFctPt & pressure_fct_pt()
Access function: Pointer to pressure function.
Definition: axisym_fvk_elements.h:169
void output(std::ostream &outfile, const unsigned &n_plot)
AxisymFoepplvonKarmanEquations()
Definition: axisym_fvk_elements.h:61
virtual double dshape_and_dtest_eulerian_axisym_fvk(const Vector< double > &s, Shape &psi, DShape &dpsidr, Shape &test, DShape &dtestdr) const =0
bool Linear_bending_model
Definition: axisym_displ_based_fvk_elements.h:382
const double & eta() const
FvK parameter.
Definition: axisym_fvk_elements.h:77
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact soln: r,w_exact at n_plot plot points.
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
void use_linear_bending_model()
Definition: axisym_fvk_elements.h:308
double interpolated_w_fvk(const Vector< double > &s) const
Definition: axisym_fvk_elements.h:269
virtual void get_pressure_fvk(const unsigned &ipt, const double &r, double &pressure) const
Definition: axisym_fvk_elements.h:196
double *& eta_pt()
Pointer to FvK parameter.
Definition: axisym_fvk_elements.h:83
AxisymFoepplvonKarmanEquations(const AxisymFoepplvonKarmanEquations &dummy)=delete
Broken copy constructor.
virtual void get_airy_forcing_fvk(const unsigned &ipt, const double &r, double &airy_forcing) const
Definition: axisym_fvk_elements.h:216
AxisymFoepplvonKarmanPressureFctPt airy_forcing_fct_pt() const
Access function: Pointer to Airy forcing function. Const version.
Definition: axisym_fvk_elements.h:187
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
Definition: element_with_external_element.h:56
Vector< double > & external_element_local_coord(const unsigned &interaction_index, const unsigned &ipt)
Definition: element_with_external_element.h:136
void set_ninteraction(const unsigned &n_interaction)
Definition: element_with_external_element.h:178
FiniteElement *& external_element_pt(const unsigned &interaction_index, const unsigned &ipt)
Definition: element_with_external_element.h:107
Definition: axisym_fvk_elements.h:560
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: axisym_fvk_elements.h:864
void reset_after_external_interaction_geometric_fd()
Definition: axisym_fvk_elements.h:808
void node_update_adjacent_fluid_elements()
Definition: axisym_fvk_elements.h:832
virtual ~FSIAxisymFoepplvonKarmanElement()
Empty virtual destructor.
Definition: axisym_fvk_elements.h:572
double *& q_pt()
Definition: axisym_fvk_elements.h:583
virtual Data * geom_data_pt(const unsigned &j)
Definition: axisym_fvk_elements.h:597
void update_before_external_interaction_geometric_fd()
Definition: axisym_fvk_elements.h:801
double * Q_pt
Definition: axisym_fvk_elements.h:902
void output_adjacent_fluid_elements(std::ostream &outfile, const unsigned &nplot)
Output adjacent fluid elements (for checking of fsi setup)
Definition: axisym_fvk_elements.h:783
void dposition_dt(const Vector< double > &zeta, const unsigned &j, Vector< double > &drdt)
Definition: axisym_fvk_elements.h:648
void output_integration_points(std::ostream &outfile)
Output integration points (for checking of fsi setup)
Definition: axisym_fvk_elements.h:734
virtual void get_pressure_fvk(const unsigned &ipt, const double &r, double &pressure) const
Definition: axisym_fvk_elements.h:701
void position(const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const
Definition: axisym_fvk_elements.h:614
void position(const Vector< double > &zeta, Vector< double > &r) const
Definition: axisym_fvk_elements.h:605
const double & q() const
Definition: axisym_fvk_elements.h:576
void update_in_external_interaction_geometric_fd(const unsigned &i)
Definition: axisym_fvk_elements.h:816
virtual unsigned ngeom_data() const
Definition: axisym_fvk_elements.h:590
FSIAxisymFoepplvonKarmanElement()
Constructor.
Definition: axisym_fvk_elements.h:563
void reset_in_external_interaction_geometric_fd(const unsigned &i)
Definition: axisym_fvk_elements.h:824
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 double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
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
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
Definition: oomph_definitions.h:222
Definition: Qelements.h:459
Definition: timesteppers.h:231
unsigned ntstorage() const
Definition: timesteppers.h:601
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
bool is_steady() const
Definition: timesteppers.h:389
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
RealScalar s
Definition: level1_cplx_impl.h:130
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
void normal(const Vector< double > &x, Vector< double > &normal)
Definition: free_surface_rotation.cc:65
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
Definition: indexed_view.cpp:20
#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