27 #ifndef OOMPH_IMMERSED_RIGID_BODY_ELEMENTS_HEADER
28 #define OOMPH_IMMERSED_RIGID_BODY_ELEMENTS_HEADER
33 #include <oomph-lib-config.h>
36 #include "../generic/elements.h"
37 #include "../generic/triangle_mesh.h"
38 #include "../generic/fsi.h"
103 double& external_torque);
262 for (
unsigned i = 0;
i < 2;
i++)
336 for (
unsigned e = 0;
e < nel;
e++)
452 const double&
re()
const
464 const double&
st()
const
508 double r_orig =
sqrt(
X *
X +
Y *
Y);
527 r[0] += r_orig *
cos(phi_orig);
528 r[1] += r_orig *
sin(phi_orig);
564 for (std::list<unsigned>::iterator it =
724 if (xi[0] > zeta_max)
726 std::ostringstream error_message;
727 error_message <<
"Value of intrinsic coordinate " << xi[0]
728 <<
"greater than maximum " << zeta_max <<
"\n";
730 "TriangleMeshPolygon::position()",
735 if (xi[0] == zeta_max)
746 unsigned p =
static_cast<unsigned>(
floor(xi[0]));
752 std::ostringstream error_message;
754 <<
"Something has gone wrong.\n"
755 <<
"The integer part of the input intrinsic coordinate is " <<
p
756 <<
"\nwhich is equal to or greater than the number of polylines, "
758 <<
"This should have triggered an earlier error\n";
780 unsigned n_vertex = line_pt->
nvertex();
782 for (
unsigned v = 1;
v < n_vertex;
v++)
793 for (
unsigned i = 0;
i < 2;
i++)
795 r[
i] = first[
i] + fraction * (
last[
i] - first[
i]);
819 double zeta_offset = 0.0;
822 for (
unsigned p = 0;
p < n_poly; ++
p)
828 unsigned n_vertex = line_pt->
nvertex();
837 for (
unsigned v = 1;
v < n_vertex;
v++)
841 sqrt(
pow(vertex_coord_next[0] - vertex_coord_first[0], 2.0) +
842 pow(vertex_coord_next[1] - vertex_coord_first[1], 2.0));
844 vertex_coord_first = vertex_coord_next;
849 for (
unsigned v = 1;
v < n_vertex;
v++)
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar atan2(const AnnoyingScalar &y, const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:139
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
float * p
Definition: Tutorial_Map_using.cpp:9
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
void unpin(const unsigned &i)
Unpin the i-th stored variable.
Definition: nodes.h:391
double * value_pt(const unsigned &i) const
Definition: nodes.h:324
double value(const unsigned &i) const
Definition: nodes.h:293
Definition: elements.h:4338
virtual void node_update()
Definition: elements.cc:5072
Definition: elements.h:73
void flush_external_data()
Flush all external data.
Definition: elements.cc:387
Data *& external_data_pt(const unsigned &i)
Return a pointer to i-th external data object.
Definition: elements.h:659
Data *& internal_data_pt(const unsigned &i)
Return a pointer to i-th internal data object.
Definition: elements.h:622
int internal_local_eqn(const unsigned &i, const unsigned &j) const
Definition: elements.h:267
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
void fill_in_jacobian_from_external_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
Definition: elements.cc:1199
void fill_in_jacobian_from_internal_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
Definition: elements.cc:1102
int external_local_eqn(const unsigned &i, const unsigned &j)
Definition: elements.h:311
Definition: geom_objects.h:101
virtual void position(const Vector< double > &zeta, Vector< double > &r) const =0
Parametrised position on object at current time: r(zeta).
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
Definition: immersed_rigid_body_elements.h:93
const Vector< double > & g() const
Access function for gravity.
Definition: immersed_rigid_body_elements.h:440
ExternalTorqueFctPt & external_torque_fct_pt()
Definition: immersed_rigid_body_elements.h:393
ImmersedRigidBodyElement(TimeStepper *const &time_stepper_pt, Data *const ¢re_displacement_data_pt=0)
Definition: immersed_rigid_body_elements.h:110
Vector< double > centre_of_gravity()
Get current centre of gravity.
Definition: immersed_rigid_body_elements.h:259
double & mass_shape()
Definition: immersed_rigid_body_elements.h:222
bool Include_geometric_rotation
Definition: immersed_rigid_body_elements.h:643
void position(const Vector< double > &xi, Vector< double > &r) const
Overload the position to apply the rotation and translation.
Definition: immersed_rigid_body_elements.h:186
double * St_pt
Strouhal number of external fluid.
Definition: immersed_rigid_body_elements.h:617
Vector< double > *& g_pt()
Access function to the direction of gravity.
Definition: immersed_rigid_body_elements.h:434
void pin_centre_of_mass_coordinate(const unsigned &i)
Pin the i-th coordinate of the centre of mass.
Definition: immersed_rigid_body_elements.h:271
static double Default_Physical_Constant_Value
Static default value for physical constants.
Definition: immersed_rigid_body_elements.h:626
void flush_drag_mesh()
Function to clear the drag mesh and all associated external data.
Definition: immersed_rigid_body_elements.h:410
void initialise(TimeStepper *const &time_stepper_pt)
Initialisation function.
Definition: immersed_rigid_body_elements.cc:266
void dposition_dt(const Vector< double > &zeta, const unsigned &j, Vector< double > &drdt)
Work out the position derivative, including rigid body motion.
Definition: immersed_rigid_body_elements.cc:45
double & initial_centre_of_mass(const unsigned &i)
Access function for the initial centre of mass.
Definition: immersed_rigid_body_elements.h:174
void reset_after_internal_fd()
Definition: immersed_rigid_body_elements.h:373
ExternalTorqueFctPt External_torque_fct_pt
Definition: immersed_rigid_body_elements.h:604
void(* ExternalTorqueFctPt)(const double &time, double &external_torque)
Definition: immersed_rigid_body_elements.h:102
double *& re_invfr_pt()
Definition: immersed_rigid_body_elements.h:471
unsigned ngeom_data() const
The position of the object depends on one data item.
Definition: immersed_rigid_body_elements.h:421
void update_in_external_fd(const unsigned &i)
After an external data change, update the nodal positions.
Definition: immersed_rigid_body_elements.h:347
void reset_in_external_fd(const unsigned &i)
Do nothing to reset within finite-differencing of external data.
Definition: immersed_rigid_body_elements.h:353
double * ReInvFr_pt
Reynolds number divided by Froude number of external fluid.
Definition: immersed_rigid_body_elements.h:620
void delete_external_hijacked_data()
Delete the storage for the external data formed from hijacked data.
Definition: immersed_rigid_body_elements.h:562
~ImmersedRigidBodyElement()
Destuctor: Cleanup if required.
Definition: immersed_rigid_body_elements.h:210
double & centre_y_displacement()
y-displacement of centre of mass
Definition: immersed_rigid_body_elements.h:247
double *& re_pt()
Access function for the pointer to the fluid Reynolds number.
Definition: immersed_rigid_body_elements.h:446
double Initial_Phi
Original rotation angle.
Definition: immersed_rigid_body_elements.h:582
void reset_in_internal_fd(const unsigned &i)
Do nothing to reset within finite-differencing of internal data.
Definition: immersed_rigid_body_elements.h:369
bool Displacement_data_is_internal
Boolean flag to indicate whether data is internal.
Definition: immersed_rigid_body_elements.h:639
void reset_after_external_fd()
Definition: immersed_rigid_body_elements.h:357
void get_residuals_rigid_body_generic(Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &flag)
Get residuals and/or Jacobian.
Definition: immersed_rigid_body_elements.cc:304
void(* ExternalForceFctPt)(const double &time, Vector< double > &external_force)
Definition: immersed_rigid_body_elements.h:97
void output_centre_of_gravity(std::ostream &outfile)
Output position velocity and acceleration of centre of gravity.
Definition: immersed_rigid_body_elements.cc:121
const double & st() const
Access function for the fluid Strouhal number.
Definition: immersed_rigid_body_elements.h:464
double *& density_ratio_pt()
Access function for the pointer to the density ratio.
Definition: immersed_rigid_body_elements.h:483
Data * Centre_displacement_data_pt
Definition: immersed_rigid_body_elements.h:592
void unpin_rotation_angle()
Unpin the rotation angle.
Definition: immersed_rigid_body_elements.h:289
unsigned Index_for_centre_displacement
Definition: immersed_rigid_body_elements.h:636
double * Re_pt
Reynolds number of external fluid.
Definition: immersed_rigid_body_elements.h:614
static Vector< double > Default_Gravity_vector
Static default value for gravity.
Definition: immersed_rigid_body_elements.h:632
void update_in_internal_fd(const unsigned &i)
After an internal data change, update the nodal positions.
Definition: immersed_rigid_body_elements.h:363
GeomObject * Geom_object_pt
Underlying geometric object.
Definition: immersed_rigid_body_elements.h:596
void pin_rotation_angle()
Pin the rotation angle.
Definition: immersed_rigid_body_elements.h:283
double & initial_phi()
Access function for the initial angle.
Definition: immersed_rigid_body_elements.h:168
ExternalForceFctPt External_force_fct_pt
Definition: immersed_rigid_body_elements.h:600
int centre_displacement_local_eqn(const unsigned &i)
Definition: immersed_rigid_body_elements.h:537
const double & re() const
Access function for the fluid Reynolds number.
Definition: immersed_rigid_body_elements.h:452
double Moment_of_inertia
Polar moment of inertia of body.
Definition: immersed_rigid_body_elements.h:588
Mesh *const & drag_mesh_pt()
Definition: immersed_rigid_body_elements.h:400
ExternalForceFctPt & external_force_fct_pt()
Definition: immersed_rigid_body_elements.h:386
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Get the contribution to the residuals.
Definition: immersed_rigid_body_elements.h:298
void unset_geometric_rotation()
Definition: immersed_rigid_body_elements.h:162
Data *& centre_displacement_data_pt()
Definition: immersed_rigid_body_elements.h:235
double Mass
Definition: immersed_rigid_body_elements.h:585
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Get residuals including contribution to jacobian.
Definition: immersed_rigid_body_elements.h:307
double & moment_of_inertia_shape()
Access to dimensionless polar "moment of inertia" shape parameter.
Definition: immersed_rigid_body_elements.h:228
double & centre_rotation_angle()
rotation of centre of mass
Definition: immersed_rigid_body_elements.h:253
void position(const unsigned &t, const Vector< double > &xi, Vector< double > &r) const
Overload to include the time history of the motion of the object.
Definition: immersed_rigid_body_elements.h:194
const double & re_invfr()
Access to the fluid inverse Froude number.
Definition: immersed_rigid_body_elements.h:477
Vector< double > * G_pt
The direction of gravity.
Definition: immersed_rigid_body_elements.h:611
double & centre_x_displacement()
x-displacement of centre of mass
Definition: immersed_rigid_body_elements.h:241
ImmersedRigidBodyElement(GeomObject *const &geom_object_pt, TimeStepper *const &time_stepper_pt, Data *const ¢re_displacement_data_pt=0)
Definition: immersed_rigid_body_elements.h:133
void set_drag_mesh(Mesh *const &drag_mesh_pt)
Definition: immersed_rigid_body_elements.cc:206
Data * geom_data_pt(const unsigned &j)
Definition: immersed_rigid_body_elements.h:428
Mesh * Drag_mesh_pt
Definition: immersed_rigid_body_elements.h:608
void get_force_and_torque(const double &time, Vector< double > &force, double &torque)
Definition: immersed_rigid_body_elements.cc:153
const double & density_ratio() const
Access function for the the density ratio.
Definition: immersed_rigid_body_elements.h:489
void apply_rigid_body_motion(const unsigned &t, const Vector< double > &initial_x, Vector< double > &r) const
Definition: immersed_rigid_body_elements.h:498
const double & initial_centre_of_mass(const unsigned &i) const
Access function for the initial centre of mass (const version)
Definition: immersed_rigid_body_elements.h:180
double *& st_pt()
Access function for the pointer to the fluid Strouhal number.
Definition: immersed_rigid_body_elements.h:458
static double Default_Physical_Ratio_Value
Static default value for physical ratios.
Definition: immersed_rigid_body_elements.h:629
Vector< double > Initial_centre_of_mass
X-coordinate of initial centre of gravity.
Definition: immersed_rigid_body_elements.h:579
void node_update_adjacent_fluid_elements()
Definition: immersed_rigid_body_elements.h:324
std::list< unsigned > List_of_external_hijacked_data
Definition: immersed_rigid_body_elements.h:559
double * Density_ratio_pt
Density ratio of the solid to the external fluid.
Definition: immersed_rigid_body_elements.h:623
void set_geometric_rotation()
Set the rotation of the object to be included.
Definition: immersed_rigid_body_elements.h:155
void unpin_centre_of_mass_coordinate(const unsigned &i)
Unpin the i-th coordinate of the centre of mass.
Definition: immersed_rigid_body_elements.h:277
Definition: immersed_rigid_body_elements.h:664
void assign_zeta()
Definition: immersed_rigid_body_elements.h:806
void position(const Vector< double > &xi, Vector< double > &r) const
Overload (again) the position to apply the rotation and translation.
Definition: immersed_rigid_body_elements.h:684
ImmersedRigidBodyTriangleMeshPolygon(const Vector< double > &hole_center, const Vector< TriangleMeshCurveSection * > &boundary_polyline_pt, TimeStepper *const &time_stepper_pt, Data *const ¢re_displacement_data_pt=0)
Definition: immersed_rigid_body_elements.cc:387
Vector< Vector< double > > Zeta_vertex
Vector of intrisic coordinate values at the nodes.
Definition: immersed_rigid_body_elements.h:859
void reset_reference_configuration()
Definition: immersed_rigid_body_elements.cc:549
~ImmersedRigidBodyTriangleMeshPolygon()
Empty Destuctor.
Definition: immersed_rigid_body_elements.h:681
void get_initial_position(const Vector< double > &xi, Vector< double > &r) const
Get the initial position of the polygon.
Definition: immersed_rigid_body_elements.h:711
void position(const unsigned &t, const Vector< double > &xi, Vector< double > &r) const
Overload (again) the position to apply the rotation and translation.
Definition: immersed_rigid_body_elements.h:693
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
Definition: oomph_definitions.h:222
Definition: timesteppers.h:231
Class defining a polyline for use in Triangle Mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:868
unsigned nvertex() const
Number of vertices.
Definition: unstructured_two_d_mesh_geometry_base.h:904
Vector< double > vertex_coordinate(const unsigned &i) const
Coordinate vector of i-th vertex (const version)
Definition: unstructured_two_d_mesh_geometry_base.h:929
Class defining a closed polygon for the Triangle mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:1451
unsigned npolyline() const
Number of constituent polylines.
Definition: unstructured_two_d_mesh_geometry_base.h:1482
TriangleMeshPolyLine * polyline_pt(const unsigned &i) const
Pointer to i-th constituent polyline.
Definition: unstructured_two_d_mesh_geometry_base.h:1488
static constexpr const last_t last
Definition: IndexedViewHelper.h:48
#define X
Definition: icosphere.cpp:20
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 floor(const bfloat16 &a)
Definition: BFloat16.h:643
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
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
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
const char Y
Definition: test/EulerAngles.cpp:32
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2