Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
oomph::ImmersedRigidBodyElement Class Reference

Class that solves the equations of motion for a general two-dimensional rigid body subject to a particular imposed force and torque distribution and immersed within an external fluid. The body's position is entirely specified by the location of its centre of mass, $\mbox{\boldmath$X$}$, and a single angle, $\phi$, that represents a possible rotation. The equations of motion are then simply Newton's second law for the conservation of linear momentum in two directions and angular momentum about the single possible axis of rotation. More...

#include <immersed_rigid_body_elements.h>

+ Inheritance diagram for oomph::ImmersedRigidBodyElement:

Public Types

typedef void(* ExternalForceFctPt) (const double &time, Vector< double > &external_force)
 Function pointer to function that specifies external force. More...
 
typedef void(* ExternalTorqueFctPt) (const double &time, double &external_torque)
 Function pointer to function that specifies external torque. More...
 

Public Member Functions

 ImmersedRigidBodyElement (GeomObject *const &geom_object_pt, TimeStepper *const &time_stepper_pt, Data *const &centre_displacement_data_pt=0)
 Constructor that takes an underlying geometric object: and timestepper. More...
 
void set_geometric_rotation ()
 Set the rotation of the object to be included. More...
 
void unset_geometric_rotation ()
 Set the rotation of the object to be ignored (only really useful if you have a circular shape) More...
 
double & initial_phi ()
 Access function for the initial angle. More...
 
double & initial_centre_of_mass (const unsigned &i)
 Access function for the initial centre of mass. More...
 
const double & initial_centre_of_mass (const unsigned &i) const
 Access function for the initial centre of mass (const version) More...
 
void position (const Vector< double > &xi, Vector< double > &r) const
 Overload the position to apply the rotation and translation. More...
 
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. More...
 
void dposition_dt (const Vector< double > &zeta, const unsigned &j, Vector< double > &drdt)
 Work out the position derivative, including rigid body motion. More...
 
 ~ImmersedRigidBodyElement ()
 Destuctor: Cleanup if required. More...
 
double & mass_shape ()
 Access to dimensionless "mass" shape parameter that must be set by hand for non polygonal shapes. More...
 
double & moment_of_inertia_shape ()
 Access to dimensionless polar "moment of inertia" shape parameter. More...
 
Data *& centre_displacement_data_pt ()
 Pointer to Data for centre of gravity displacement. Values: 0: x-displ; 1: y-displ; 2: rotation angle. More...
 
double & centre_x_displacement ()
 x-displacement of centre of mass More...
 
double & centre_y_displacement ()
 y-displacement of centre of mass More...
 
double & centre_rotation_angle ()
 rotation of centre of mass More...
 
Vector< double > centre_of_gravity ()
 Get current centre of gravity. More...
 
void pin_centre_of_mass_coordinate (const unsigned &i)
 Pin the i-th coordinate of the centre of mass. More...
 
void unpin_centre_of_mass_coordinate (const unsigned &i)
 Unpin the i-th coordinate of the centre of mass. More...
 
void pin_rotation_angle ()
 Pin the rotation angle. More...
 
void unpin_rotation_angle ()
 Unpin the rotation angle. More...
 
void output_centre_of_gravity (std::ostream &outfile)
 Output position velocity and acceleration of centre of gravity. More...
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 Get the contribution to the residuals. More...
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 Get residuals including contribution to jacobian. More...
 
void node_update_adjacent_fluid_elements ()
 Update the positions of the nodes in fluid elements adjacent to the rigid body, defined as being elements in the drag mesh. More...
 
void update_in_external_fd (const unsigned &i)
 After an external data change, update the nodal positions. More...
 
void reset_in_external_fd (const unsigned &i)
 Do nothing to reset within finite-differencing of external data. More...
 
void reset_after_external_fd ()
 After all external data finite-differencing, update nodal positions. More...
 
void update_in_internal_fd (const unsigned &i)
 After an internal data change, update the nodal positions. More...
 
void reset_in_internal_fd (const unsigned &i)
 Do nothing to reset within finite-differencing of internal data. More...
 
void reset_after_internal_fd ()
 After all internal data finite-differencing, update nodal positions. More...
 
void get_force_and_torque (const double &time, Vector< double > &force, double &torque)
 Get force and torque from specified fct pointers and drag mesh. More...
 
ExternalForceFctPtexternal_force_fct_pt ()
 Access to function pointer to function that specifies external force. More...
 
ExternalTorqueFctPtexternal_torque_fct_pt ()
 Access to function pointer to function that specifies external torque. More...
 
Mesh *const & drag_mesh_pt ()
 Access fct to mesh containing face elements that allow the computation of the drag on the body. More...
 
void set_drag_mesh (Mesh *const &drag_mesh_pt)
 Function to set the drag mesh and add the appropriate load and geometric data as external data to the Rigid Body. More...
 
void flush_drag_mesh ()
 Function to clear the drag mesh and all associated external data. More...
 
unsigned ngeom_data () const
 The position of the object depends on one data item. More...
 
Datageom_data_pt (const unsigned &j)
 Return pointer to the j-th (only) Data item that the object's shape depends on. More...
 
Vector< double > *& g_pt ()
 Access function to the direction of gravity. More...
 
const Vector< double > & g () const
 Access function for gravity. More...
 
double *& re_pt ()
 Access function for the pointer to the fluid Reynolds number. More...
 
const double & re () const
 Access function for the fluid Reynolds number. More...
 
double *& st_pt ()
 Access function for the pointer to the fluid Strouhal number. More...
 
const double & st () const
 Access function for the fluid Strouhal number. More...
 
double *& re_invfr_pt ()
 Access function for pointer to the fluid inverse Froude number (dimensionless gravitational loading) More...
 
const double & re_invfr ()
 Access to the fluid inverse Froude number. More...
 
double *& density_ratio_pt ()
 Access function for the pointer to the density ratio. More...
 
const double & density_ratio () const
 Access function for the the density ratio. More...
 
- Public Member Functions inherited from oomph::GeneralisedElement
GeneralisedElement() GeneralisedElement (const GeneralisedElement &)=delete
 Constructor: Initialise all pointers and all values to zero. More...
 
void operator= (const GeneralisedElement &)=delete
 Broken assignment operator. More...
 
Data *& internal_data_pt (const unsigned &i)
 Return a pointer to i-th internal data object. More...
 
Data *const & internal_data_pt (const unsigned &i) const
 Return a pointer to i-th internal data object (const version) More...
 
Data *& external_data_pt (const unsigned &i)
 Return a pointer to i-th external data object. More...
 
Data *const & external_data_pt (const unsigned &i) const
 Return a pointer to i-th external data object (const version) More...
 
unsigned long eqn_number (const unsigned &ieqn_local) const
 Return the global equation number corresponding to the ieqn_local-th local equation number. More...
 
int local_eqn_number (const unsigned long &ieqn_global) const
 Return the local equation number corresponding to the ieqn_global-th global equation number. Returns minus one (-1) if there is no local degree of freedom corresponding to the chosen global equation number. More...
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 Add a (pointer to an) external data object to the element and return its index (i.e. the index required to obtain it from the access function external_data_pt(...). The optional boolean flag indicates whether the data should be included in the general finite-difference loop when calculating the jacobian. The default value is true, i.e. the data will be included in the finite-differencing. More...
 
bool external_data_fd (const unsigned &i) const
 Return the status of the boolean flag indicating whether the external data is included in the finite difference loop. More...
 
void exclude_external_data_fd (const unsigned &i)
 Set the boolean flag to exclude the external datum from the the finite difference loop when computing the jacobian matrix. More...
 
void include_external_data_fd (const unsigned &i)
 Set the boolean flag to include the external datum in the the finite difference loop when computing the jacobian matrix. More...
 
void flush_external_data ()
 Flush all external data. More...
 
void flush_external_data (Data *const &data_pt)
 Flush the object addressed by data_pt from the external data array. More...
 
unsigned ninternal_data () const
 Return the number of internal data objects. More...
 
unsigned nexternal_data () const
 Return the number of external data objects. More...
 
unsigned ndof () const
 Return the number of equations/dofs in the element. More...
 
void dof_vector (const unsigned &t, Vector< double > &dof)
 Return the vector of dof values at time level t. More...
 
void dof_pt_vector (Vector< double * > &dof_pt)
 Return the vector of pointers to dof values. More...
 
void set_internal_data_time_stepper (const unsigned &i, TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 Set the timestepper associated with the i-th internal data object. More...
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 Assign the global equation numbers to the internal Data. The arguments are the current highest global equation number (which will be incremented) and a Vector of pointers to the global variables (to which any unpinned values in the internal Data are added). More...
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 Function to describe the dofs of the element. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More...
 
virtual void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 Function to describe the local dofs of the element. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More...
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 Add pointers to the internal data values to map indexed by the global equation number. More...
 
void add_internal_data_values_to_vector (Vector< double > &vector_of_values)
 Add all internal data and time history values to the vector in the internal storage order. More...
 
void read_internal_data_values_from_vector (const Vector< double > &vector_of_values, unsigned &index)
 Read all internal data and time history values from the vector starting from index. On return the index will be set to the value at the end of the data that has been read in. More...
 
void add_internal_eqn_numbers_to_vector (Vector< long > &vector_of_eqn_numbers)
 Add all equation numbers associated with internal data to the vector in the internal storage order. More...
 
void read_internal_eqn_numbers_from_vector (const Vector< long > &vector_of_eqn_numbers, unsigned &index)
 Read all equation numbers associated with internal data from the vector starting from index. On return the index will be set to the value at the end of the data that has been read in. More...
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 Setup the arrays of local equation numbers for the element. If the optional boolean argument is true, then pointers to the associated degrees of freedom are stored locally in the array Dof_pt. More...
 
virtual void complete_setup_of_dependencies ()
 Complete the setup of any additional dependencies that the element may have. Empty virtual function that may be overloaded for specific derived elements. Used, e.g., for elements with algebraic node update functions to determine the "geometric Data", i.e. the Data that affects the element's shape. This function is called (for all elements) at the very beginning of the equation numbering procedure to ensure that all dependencies are accounted for. More...
 
virtual void get_residuals (Vector< double > &residuals)
 Calculate the vector of residuals of the equations in the element. By default initialise the vector to zero and then call the fill_in_contribution_to_residuals() function. Note that this entire function can be overloaded if desired. More...
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 Calculate the elemental Jacobian matrix "d equation / d variable". More...
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 Calculate the residuals and the elemental "mass" matrix, the matrix that multiplies the time derivative terms in a problem. More...
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 Calculate the residuals and jacobian and elemental "mass" matrix, the matrix that multiplies the time derivative terms. More...
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 Calculate the derivatives of the residuals with respect to a parameter. More...
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 Calculate the derivatives of the elemental Jacobian matrix and residuals with respect to a parameter. More...
 
virtual void get_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 Calculate the derivatives of the elemental Jacobian matrix mass matrix and residuals with respect to a parameter. More...
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 Calculate the product of the Hessian (derivative of Jacobian with respect to all variables) an eigenvector, Y, and other specified vectors, C (d(J_{ij})/d u_{k}) Y_{j} C_{k}. More...
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 Return the vector of inner product of the given pairs of history values. More...
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 Compute the vectors that when taken as a dot product with other history values give the inner product over the element. More...
 
virtual unsigned self_test ()
 Self-test: Have all internal values been classified as pinned/unpinned? Return 0 if OK. More...
 
virtual void compute_norm (Vector< double > &norm)
 Compute norm of solution – broken virtual can be overloaded by element writer to implement whatever norm is desired for the specific element. More...
 
virtual void compute_norm (double &norm)
 Compute norm of solution – broken virtual can be overloaded by element writer to implement whatever norm is desired for the specific element. More...
 
void set_halo (const unsigned &non_halo_proc_ID)
 Label the element as halo and specify processor that holds non-halo counterpart. More...
 
void set_nonhalo ()
 Label the element as not being a halo. More...
 
bool is_halo () const
 Is this element a halo? More...
 
int non_halo_proc_ID ()
 ID of processor ID that holds non-halo counterpart of halo element; negative if not a halo. More...
 
void set_must_be_kept_as_halo ()
 Insist that this element be kept as a halo element during a distribute? More...
 
void unset_must_be_kept_as_halo ()
 Do not insist that this element be kept as a halo element during distribution. More...
 
bool must_be_kept_as_halo () const
 Test whether the element must be kept as a halo element. More...
 
virtual unsigned ndof_types () const
 The number of types of degrees of freedom in this element are sub-divided into. More...
 
virtual void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 Create a list of pairs for the unknowns that this element is "in charge of" – ignore any unknowns associated with external Data. The first entry in each pair must contain the global equation number of the unknown, while the second one contains the number of the DOF type that this unknown is associated with. (The function can obviously only be called if the equation numbering scheme has been set up.) More...
 
- Public Member Functions inherited from oomph::GeomObject
 GeomObject ()
 Default constructor. More...
 
 GeomObject (const unsigned &ndim)
 Constructor: Pass dimension of geometric object (# of Eulerian coords = # of Lagrangian coords; no time history available/needed) More...
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim)
 Constructor: pass # of Eulerian and Lagrangian coordinates. No time history available/needed. More...
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim, TimeStepper *time_stepper_pt)
 Constructor: pass # of Eulerian and Lagrangian coordinates and pointer to time-stepper which is used to handle the position at previous timesteps and allows the evaluation of veloc/acceleration etc. in cases where the GeomData varies with time. More...
 
 GeomObject (const GeomObject &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const GeomObject &)=delete
 Broken assignment operator. More...
 
virtual ~GeomObject ()
 (Empty) destructor More...
 
unsigned nlagrangian () const
 Access function to # of Lagrangian coordinates. More...
 
unsigned ndim () const
 Access function to # of Eulerian coordinates. More...
 
void set_nlagrangian_and_ndim (const unsigned &n_lagrangian, const unsigned &n_dim)
 Set # of Lagrangian and Eulerian coordinates. More...
 
TimeStepper *& time_stepper_pt ()
 Access function for pointer to time stepper: Null if object is not time-dependent. More...
 
TimeSteppertime_stepper_pt () const
 Access function for pointer to time stepper: Null if object is not time-dependent. Const version. More...
 
virtual void position (const double &t, const Vector< double > &zeta, Vector< double > &r) const
 Parametrised position on object: r(zeta). Evaluated at the continuous time value, t. More...
 
virtual void dposition (const Vector< double > &zeta, DenseMatrix< double > &drdzeta) const
 Derivative of position Vector w.r.t. to coordinates: $ \frac{dR_i}{d \zeta_\alpha}$ = drdzeta(alpha,i). Evaluated at current time. More...
 
virtual void d2position (const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const
 2nd derivative of position Vector w.r.t. to coordinates: $ \frac{d^2R_i}{d \zeta_\alpha d \zeta_\beta}$ = ddrdzeta(alpha,beta,i). Evaluated at current time. More...
 
virtual void d2position (const Vector< double > &zeta, Vector< double > &r, DenseMatrix< double > &drdzeta, RankThreeTensor< double > &ddrdzeta) const
 Posn Vector and its 1st & 2nd derivatives w.r.t. to coordinates: $ \frac{dR_i}{d \zeta_\alpha}$ = drdzeta(alpha,i). $ \frac{d^2R_i}{d \zeta_\alpha d \zeta_\beta}$ = ddrdzeta(alpha,beta,i). Evaluated at current time. More...
 
virtual void locate_zeta (const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
 A geometric object may be composed of may sub-objects (e.g. a finite-element representation of a boundary). In order to implement sparse update functions, it is necessary to know the sub-object and local coordinate within that sub-object at a given intrinsic coordinate, zeta. Note that only one sub-object can "cover" any given intrinsic position. If the position is at an "interface" between sub-objects, either one can be returned. The default implementation merely returns, the pointer to the "entire" GeomObject and the coordinate, zeta The optional boolean flag only applies if a Newton method is used to find the value of zeta, and if true the value of the coordinate s is used as the initial guess for the method. If the flag is false (the default) a value of s=0 is used as the initial guess. More...
 
virtual void interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const
 A geometric object may be composed of many sub-objects each with their own local coordinate. This function returns the "global" intrinsic coordinate zeta (within the compound object), at a given local coordinate s (i.e. the intrinsic coordinate of the sub-GeomObject. In simple (non-compound) GeomObjects, the local intrinsic coordinate is the global intrinsic coordinate and so the function merely returns s. To make it less likely that the default implementation is called in error (because it is not overloaded in a derived GeomObject where the default is not appropriate, we do at least check that s and zeta have the same size if called in PARANOID mode. More...
 

Protected Member Functions

 ImmersedRigidBodyElement (TimeStepper *const &time_stepper_pt, Data *const &centre_displacement_data_pt=0)
 Default constructor that intialises everything to zero. This is expected to be called only from derived clases such as the ImmersedRigidBodyTriangleMeshPolygon that can provided their own position() functions. More...
 
void apply_rigid_body_motion (const unsigned &t, const Vector< double > &initial_x, Vector< double > &r) const
 Helper function to adjust the position in response to changes in position and angle of the solid about the centre of mass. More...
 
- Protected Member Functions inherited from oomph::GeneralisedElement
unsigned add_internal_data (Data *const &data_pt, const bool &fd=true)
 Add a (pointer to an) internal data object to the element and return the index required to obtain it from the access function internal_data_pt(). The boolean indicates whether the datum should be included in the general finite-difference loop when calculating the jacobian. The default value is true, i.e. the data will be included in the finite differencing. More...
 
bool internal_data_fd (const unsigned &i) const
 Return the status of the boolean flag indicating whether the internal data is included in the finite difference loop. More...
 
void exclude_internal_data_fd (const unsigned &i)
 Set the boolean flag to exclude the internal datum from the finite difference loop when computing the jacobian matrix. More...
 
void include_internal_data_fd (const unsigned &i)
 Set the boolean flag to include the internal datum in the finite difference loop when computing the jacobian matrix. More...
 
void clear_global_eqn_numbers ()
 Clear the storage for the global equation numbers and pointers to dofs (if stored) More...
 
void add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt)
 Add the contents of the queue global_eqn_numbers to the local storage for the local-to-global translation scheme. It is essential that the entries in the queue are added IN ORDER i.e. from the front. More...
 
virtual void assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt)
 Assign the local equation numbers for the internal and external Data This must be called after the global equation numbers have all been assigned. It is virtual so that it can be overloaded by ElementWithExternalElements so that any external data from the external elements in included in the numbering scheme. If the boolean argument is true then pointers to the dofs will be stored in Dof_pt. More...
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 Assign all the local equation numbering schemes that can be applied generically for the element. In most cases, this is the function that will be overloaded by inherited classes. It is required to ensure that assign_additional_local_eqn_numbers() can always be called after ALL other local equation numbering has been performed. The default for the GeneralisedElement is simply to call internal and external local equation numbering. If the boolean argument is true then pointers to the dofs will be stored in Dof_pt. More...
 
virtual void assign_additional_local_eqn_numbers ()
 Setup any additional look-up schemes for local equation numbers. Examples of use include using local storage to refer to explicit degrees of freedom. The additional memory cost of such storage may or may not be offset by fast local access. More...
 
int internal_local_eqn (const unsigned &i, const unsigned &j) const
 Return the local equation number corresponding to the j-th value stored at the i-th internal data. More...
 
int external_local_eqn (const unsigned &i, const unsigned &j)
 Return the local equation number corresponding to the j-th value stored at the i-th external data. More...
 
void fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 Calculate the contributions to the jacobian from the internal degrees of freedom using finite differences. This version of the function assumes that the residuals vector has already been calculated. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More...
 
void fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 Calculate the contributions to the jacobian from the internal degrees of freedom using finite differences. This version computes the residuals vector before calculating the jacobian terms. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More...
 
void fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 Calculate the contributions to the jacobian from the external degrees of freedom using finite differences. This version of the function assumes that the residuals vector has already been calculated. If the boolean argument is true, the finite differencing will be performed for all external data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More...
 
void fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 Calculate the contributions to the jacobian from the external degrees of freedom using finite differences. This version computes the residuals vector before calculating the jacobian terms. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More...
 
virtual void update_before_internal_fd ()
 Function that is called before the finite differencing of any internal data. This may be overloaded to update any dependent data before finite differencing takes place. More...
 
virtual void update_before_external_fd ()
 Function that is called before the finite differencing of any external data. This may be overloaded to update any dependent data before finite differencing takes place. More...
 
virtual void fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 Add the elemental contribution to the mass matrix matrix. and the residuals vector. Note that this function should NOT initialise the residuals vector or the mass matrix. It must be called after the residuals vector and jacobian matrix have been initialised to zero. The default is deliberately broken. More...
 
virtual void fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 Add the elemental contribution to the jacobian matrix, mass matrix and the residuals vector. Note that this function should NOT initialise any entries. It must be called after the residuals vector and matrices have been initialised to zero. More...
 
virtual void fill_in_contribution_to_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 Add the elemental contribution to the derivatives of the residuals with respect to a parameter. This function should NOT initialise any entries and must be called after the entries have been initialised to zero The default implementation is to use finite differences to calculate the derivatives. More...
 
virtual void fill_in_contribution_to_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 Add the elemental contribution to the derivatives of the elemental Jacobian matrix and residuals with respect to a parameter. This function should NOT initialise any entries and must be called after the entries have been initialised to zero The default implementation is to use finite differences to calculate the derivatives. More...
 
virtual void fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 Add the elemental contribution to the derivative of the jacobian matrix, mass matrix and the residuals vector with respect to the passed parameter. Note that this function should NOT initialise any entries. It must be called after the residuals vector and matrices have been initialised to zero. More...
 
virtual void fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 Fill in contribution to the product of the Hessian (derivative of Jacobian with respect to all variables) an eigenvector, Y, and other specified vectors, C (d(J_{ij})/d u_{k}) Y_{j} C_{k}. More...
 
virtual void fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 Fill in the contribution to the inner products between given pairs of history values. More...
 
virtual void fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 Fill in the contributions to the vectors that when taken as dot product with other history values give the inner product over the element. More...
 

Protected Attributes

Vector< double > Initial_centre_of_mass
 X-coordinate of initial centre of gravity. More...
 
double Initial_Phi
 Original rotation angle. More...
 
double Mass
 
double Moment_of_inertia
 Polar moment of inertia of body. More...
 
DataCentre_displacement_data_pt
 Data for centre of gravity displacement. Values: 0: x-displ; 1: y-displ; 2: rotation angle. More...
 
- Protected Attributes inherited from oomph::GeneralisedElement
int Non_halo_proc_ID
 Non-halo processor ID for Data; -1 if it's not a halo. More...
 
bool Must_be_kept_as_halo
 Does this element need to be kept as a halo element during a distribute? More...
 
- Protected Attributes inherited from oomph::GeomObject
unsigned NLagrangian
 Number of Lagrangian (intrinsic) coordinates. More...
 
unsigned Ndim
 Number of Eulerian coordinates. More...
 
TimeStepperGeom_object_time_stepper_pt
 Timestepper (used to handle access to geometry at previous timesteps) More...
 

Private Member Functions

int centre_displacement_local_eqn (const unsigned &i)
 Return the equation number associated with the i-th centre of gravity displacment 0: x-displ; 1: y-displ; 2: rotation angle. More...
 
void initialise (TimeStepper *const &time_stepper_pt)
 Initialisation function. More...
 
void get_residuals_rigid_body_generic (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &flag)
 Get residuals and/or Jacobian. More...
 
void delete_external_hijacked_data ()
 Delete the storage for the external data formed from hijacked data. More...
 

Private Attributes

std::list< unsigned > List_of_external_hijacked_data
 Storage for the external data that is formed from hijacked data that must be deleted by this element. More...
 
GeomObjectGeom_object_pt
 Underlying geometric object. More...
 
ExternalForceFctPt External_force_fct_pt
 Function pointer to function that specifies external force. More...
 
ExternalTorqueFctPt External_torque_fct_pt
 Function pointer to function that specifies external torque. More...
 
MeshDrag_mesh_pt
 Mesh containing face elements that allow the computation of the drag on the body. More...
 
Vector< double > * G_pt
 The direction of gravity. More...
 
double * Re_pt
 Reynolds number of external fluid. More...
 
double * St_pt
 Strouhal number of external fluid. More...
 
double * ReInvFr_pt
 Reynolds number divided by Froude number of external fluid. More...
 
double * Density_ratio_pt
 Density ratio of the solid to the external fluid. More...
 
unsigned Index_for_centre_displacement
 Index for the data (internal or external) that contains the centre-of-gravity displacement. More...
 
bool Displacement_data_is_internal
 Boolean flag to indicate whether data is internal. More...
 
bool Include_geometric_rotation
 Boolean to indicate that the rotation variable does not affect the boundary shape. More...
 

Static Private Attributes

static double Default_Physical_Constant_Value = 0.0
 Static default value for physical constants. More...
 
static double Default_Physical_Ratio_Value = 1.0
 Static default value for physical ratios. More...
 
static Vector< double > Default_Gravity_vector
 Static default value for gravity. More...
 

Additional Inherited Members

- Static Public Attributes inherited from oomph::GeneralisedElement
static bool Suppress_warning_about_any_repeated_data = false
 Static boolean to suppress warnings about repeated data. Defaults to false. More...
 
static bool Suppress_warning_about_repeated_internal_data
 Static boolean to suppress warnings about repeated internal data. Defaults to false. More...
 
static bool Suppress_warning_about_repeated_external_data = true
 Static boolean to suppress warnings about repeated external data. Defaults to true. More...
 
static double Default_fd_jacobian_step = 1.0e-8
 Double used for the default finite difference step in elemental jacobian calculations. More...
 
- Static Protected Attributes inherited from oomph::GeneralisedElement
static DenseMatrix< double > Dummy_matrix
 Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case when only the residuals are being assembled. More...
 
static std::deque< double * > Dof_pt_deque
 Static storage for deque used to add_global_equation_numbers when pointers to the dofs in each element are not required. More...
 

Detailed Description

Class that solves the equations of motion for a general two-dimensional rigid body subject to a particular imposed force and torque distribution and immersed within an external fluid. The body's position is entirely specified by the location of its centre of mass, $\mbox{\boldmath$X$}$, and a single angle, $\phi$, that represents a possible rotation. The equations of motion are then simply Newton's second law for the conservation of linear momentum in two directions and angular momentum about the single possible axis of rotation.

The non-dimensionalisation is based on the viscous scales of the surrounding fluid, in which case, the governing equations are

\[ Re St^{2} M \frac{\mbox{d}^{2} \mbox{\boldmath$X$}}{\mbox{d} t^{2}} = \mbox{\boldmath$F$} + \oint \mbox{\boldmath$t$} \mbox{d} s \quad\mbox{and}\quad Re St^{2} I \frac{\mbox{d}^{2}\Phi}{\mbox{d} t^{2}} = \mbox{\boldmath$T$} + \oint \mbox{\boldmath$q$} \mbox{d} s, \]

where $\mbox{\boldmath$F$} = \mbox{\boldmath$F$}^{*}/\mu U$ is the external force per unit length; $\mbox{\boldmath$t$}$ is the net force per unit length applied on the rigid body by the surrounding fluid; $\mbox{\boldmath$T$} = \mbox{\boldmath$T$}^{*}/(\mu UL)$ is the external torque per unit length; and $\mbox{\boldmath$q$}$ is the net torque per unit length applied on the body by the fluid. $M$ is a scaled mass the density ratio multiplied by a shape parameter and $I$ is a scaled moment of inertia. Finally, $Re$ and $St$ are the Reynolds and Strouhal numbers of the surrounding fluid. Note that these equations may be used without the external fluid, in which case the non-dimensionalisation doesn't make a lot of sense, but may be re-interpreted accordingly.

A Data object whose three values represent the x and y displacements of the body's centre of mass and its rotation about the centre of mass may be passed in as external data or, if not, it will be constructed internally.

For general usage, an underlying geometric object must passed to the constructor and the position will be determined by applying rigid body motions to the underlying object based on the initial_centre_of_mass and initial_phi (angle), which default to zero. If these defaults are not suitable, the values must be set externally. In addition a mass and moment of inertia should also be set externally.

If added to a mesh in the Problem (in its incarnation as a GeneralisedElement) the displacement/rotation of the body is computed in response to (i) user-specifiable applied forces and a torque and (ii) the net drag (and associated torque) from a mesh of elements that can exert a drag onto the body (typically Navier-Stokes FaceElements that apply a viscous drag to an immersed body, represented by the body.)

Definition at line 92 of file immersed_rigid_body_elements.h.

Member Typedef Documentation

◆ ExternalForceFctPt

typedef void(* oomph::ImmersedRigidBodyElement::ExternalForceFctPt) (const double &time, Vector< double > &external_force)

Function pointer to function that specifies external force.

Definition at line 97 of file immersed_rigid_body_elements.h.

◆ ExternalTorqueFctPt

typedef void(* oomph::ImmersedRigidBodyElement::ExternalTorqueFctPt) (const double &time, double &external_torque)

Function pointer to function that specifies external torque.

Definition at line 102 of file immersed_rigid_body_elements.h.

Constructor & Destructor Documentation

◆ ImmersedRigidBodyElement() [1/2]

oomph::ImmersedRigidBodyElement::ImmersedRigidBodyElement ( TimeStepper *const &  time_stepper_pt,
Data *const &  centre_displacement_data_pt = 0 
)
inlineprotected

Default constructor that intialises everything to zero. This is expected to be called only from derived clases such as the ImmersedRigidBodyTriangleMeshPolygon that can provided their own position() functions.

Definition at line 110 of file immersed_rigid_body_elements.h.

References initialise().

◆ ImmersedRigidBodyElement() [2/2]

oomph::ImmersedRigidBodyElement::ImmersedRigidBodyElement ( GeomObject *const &  geom_object_pt,
TimeStepper *const &  time_stepper_pt,
Data *const &  centre_displacement_data_pt = 0 
)
inline

Constructor that takes an underlying geometric object: and timestepper.

Definition at line 133 of file immersed_rigid_body_elements.h.

References initialise().

◆ ~ImmersedRigidBodyElement()

oomph::ImmersedRigidBodyElement::~ImmersedRigidBodyElement ( )
inline

Member Function Documentation

◆ apply_rigid_body_motion()

void oomph::ImmersedRigidBodyElement::apply_rigid_body_motion ( const unsigned &  t,
const Vector< double > &  initial_x,
Vector< double > &  r 
) const
inlineprotected

Helper function to adjust the position in response to changes in position and angle of the solid about the centre of mass.

Definition at line 498 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, Include_geometric_rotation, Initial_centre_of_mass, and oomph::Data::value().

Referenced by position(), oomph::ImmersedRigidBodyTriangleMeshPolygon::position(), and oomph::ImmersedRigidBodyTriangleMeshPolygon::reset_reference_configuration().

◆ centre_displacement_data_pt()

Data*& oomph::ImmersedRigidBodyElement::centre_displacement_data_pt ( )
inline

Pointer to Data for centre of gravity displacement. Values: 0: x-displ; 1: y-displ; 2: rotation angle.

Definition at line 235 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt.

◆ centre_displacement_local_eqn()

int oomph::ImmersedRigidBodyElement::centre_displacement_local_eqn ( const unsigned &  i)
inlineprivate

Return the equation number associated with the i-th centre of gravity displacment 0: x-displ; 1: y-displ; 2: rotation angle.

Definition at line 537 of file immersed_rigid_body_elements.h.

References Displacement_data_is_internal, oomph::GeneralisedElement::external_local_eqn(), Index_for_centre_displacement, and oomph::GeneralisedElement::internal_local_eqn().

Referenced by get_residuals_rigid_body_generic().

◆ centre_of_gravity()

Vector<double> oomph::ImmersedRigidBodyElement::centre_of_gravity ( )
inline

Get current centre of gravity.

Definition at line 259 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, i, Initial_centre_of_mass, and oomph::Data::value().

◆ centre_rotation_angle()

double& oomph::ImmersedRigidBodyElement::centre_rotation_angle ( )
inline

rotation of centre of mass

Definition at line 253 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, and oomph::Data::value_pt().

◆ centre_x_displacement()

double& oomph::ImmersedRigidBodyElement::centre_x_displacement ( )
inline

x-displacement of centre of mass

Definition at line 241 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, and oomph::Data::value_pt().

◆ centre_y_displacement()

double& oomph::ImmersedRigidBodyElement::centre_y_displacement ( )
inline

y-displacement of centre of mass

Definition at line 247 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, and oomph::Data::value_pt().

◆ delete_external_hijacked_data()

void oomph::ImmersedRigidBodyElement::delete_external_hijacked_data ( )
inlineprivate

Delete the storage for the external data formed from hijacked data.

Definition at line 562 of file immersed_rigid_body_elements.h.

References oomph::GeneralisedElement::external_data_pt(), and List_of_external_hijacked_data.

Referenced by flush_drag_mesh(), and set_drag_mesh().

◆ density_ratio()

const double& oomph::ImmersedRigidBodyElement::density_ratio ( ) const
inline

Access function for the the density ratio.

Definition at line 489 of file immersed_rigid_body_elements.h.

References Density_ratio_pt.

Referenced by get_residuals_rigid_body_generic().

◆ density_ratio_pt()

double*& oomph::ImmersedRigidBodyElement::density_ratio_pt ( )
inline

Access function for the pointer to the density ratio.

Definition at line 483 of file immersed_rigid_body_elements.h.

References Density_ratio_pt.

◆ dposition_dt()

void oomph::ImmersedRigidBodyElement::dposition_dt ( const Vector< double > &  zeta,
const unsigned &  j,
Vector< double > &  drdt 
)
virtual

Work out the position derivative, including rigid body motion.

Work out the position derivative taking into account the movement relative to the original centre of mass.

Reimplemented from oomph::GeomObject.

Definition at line 45 of file immersed_rigid_body_elements.cc.

References Centre_displacement_data_pt, Geom_object_pt, i, Include_geometric_rotation, Initial_centre_of_mass, position(), oomph::GeomObject::position(), oomph::TimeStepper::time_derivative(), oomph::Data::time_stepper_pt(), and oomph::Data::value().

◆ drag_mesh_pt()

Mesh* const& oomph::ImmersedRigidBodyElement::drag_mesh_pt ( )
inline

Access fct to mesh containing face elements that allow the computation of the drag on the body.

Definition at line 400 of file immersed_rigid_body_elements.h.

References Drag_mesh_pt.

Referenced by set_drag_mesh().

◆ external_force_fct_pt()

ExternalForceFctPt& oomph::ImmersedRigidBodyElement::external_force_fct_pt ( )
inline

Access to function pointer to function that specifies external force.

Definition at line 386 of file immersed_rigid_body_elements.h.

References External_force_fct_pt.

◆ external_torque_fct_pt()

ExternalTorqueFctPt& oomph::ImmersedRigidBodyElement::external_torque_fct_pt ( )
inline

Access to function pointer to function that specifies external torque.

Definition at line 393 of file immersed_rigid_body_elements.h.

References External_torque_fct_pt.

◆ fill_in_contribution_to_jacobian()

void oomph::ImmersedRigidBodyElement::fill_in_contribution_to_jacobian ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian 
)
inlinevirtual

◆ fill_in_contribution_to_residuals()

void oomph::ImmersedRigidBodyElement::fill_in_contribution_to_residuals ( Vector< double > &  residuals)
inlinevirtual

Get the contribution to the residuals.

Reimplemented from oomph::GeneralisedElement.

Definition at line 298 of file immersed_rigid_body_elements.h.

References oomph::GeneralisedElement::Dummy_matrix, and get_residuals_rigid_body_generic().

◆ flush_drag_mesh()

void oomph::ImmersedRigidBodyElement::flush_drag_mesh ( )
inline

Function to clear the drag mesh and all associated external data.

Definition at line 410 of file immersed_rigid_body_elements.h.

References delete_external_hijacked_data(), Drag_mesh_pt, and oomph::GeneralisedElement::flush_external_data().

◆ g()

const Vector<double>& oomph::ImmersedRigidBodyElement::g ( ) const
inline

Access function for gravity.

Definition at line 440 of file immersed_rigid_body_elements.h.

References G_pt.

Referenced by get_residuals_rigid_body_generic().

◆ g_pt()

Vector<double>*& oomph::ImmersedRigidBodyElement::g_pt ( )
inline

Access function to the direction of gravity.

Definition at line 434 of file immersed_rigid_body_elements.h.

References G_pt.

◆ geom_data_pt()

Data* oomph::ImmersedRigidBodyElement::geom_data_pt ( const unsigned &  j)
inlinevirtual

Return pointer to the j-th (only) Data item that the object's shape depends on.

Reimplemented from oomph::GeomObject.

Definition at line 428 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt.

◆ get_force_and_torque()

void oomph::ImmersedRigidBodyElement::get_force_and_torque ( const double &  time,
Vector< double > &  force,
double &  torque 
)

Get force and torque from specified fct pointers and drag mesh.

Obtain the external force and torque on the body from specified function pointers and also from a drag mesh, if there is one.

Definition at line 153 of file immersed_rigid_body_elements.cc.

References Drag_mesh_pt, e, oomph::Mesh::element_pt(), External_force_fct_pt, External_torque_fct_pt, and oomph::Mesh::nelement().

Referenced by get_residuals_rigid_body_generic().

◆ get_residuals_rigid_body_generic()

void oomph::ImmersedRigidBodyElement::get_residuals_rigid_body_generic ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
const bool &  flag 
)
private

◆ initial_centre_of_mass() [1/2]

double& oomph::ImmersedRigidBodyElement::initial_centre_of_mass ( const unsigned &  i)
inline

Access function for the initial centre of mass.

Definition at line 174 of file immersed_rigid_body_elements.h.

References i, and Initial_centre_of_mass.

◆ initial_centre_of_mass() [2/2]

const double& oomph::ImmersedRigidBodyElement::initial_centre_of_mass ( const unsigned &  i) const
inline

Access function for the initial centre of mass (const version)

Definition at line 180 of file immersed_rigid_body_elements.h.

References i, and Initial_centre_of_mass.

◆ initial_phi()

double& oomph::ImmersedRigidBodyElement::initial_phi ( )
inline

Access function for the initial angle.

Definition at line 168 of file immersed_rigid_body_elements.h.

References Initial_Phi.

◆ initialise()

void oomph::ImmersedRigidBodyElement::initialise ( TimeStepper *const &  time_stepper_pt)
private

◆ mass_shape()

double& oomph::ImmersedRigidBodyElement::mass_shape ( )
inline

Access to dimensionless "mass" shape parameter that must be set by hand for non polygonal shapes.

Definition at line 222 of file immersed_rigid_body_elements.h.

References Mass.

◆ moment_of_inertia_shape()

double& oomph::ImmersedRigidBodyElement::moment_of_inertia_shape ( )
inline

Access to dimensionless polar "moment of inertia" shape parameter.

Definition at line 228 of file immersed_rigid_body_elements.h.

References Moment_of_inertia.

◆ ngeom_data()

unsigned oomph::ImmersedRigidBodyElement::ngeom_data ( ) const
inlinevirtual

The position of the object depends on one data item.

Reimplemented from oomph::GeomObject.

Definition at line 421 of file immersed_rigid_body_elements.h.

◆ node_update_adjacent_fluid_elements()

void oomph::ImmersedRigidBodyElement::node_update_adjacent_fluid_elements ( )
inline

Update the positions of the nodes in fluid elements adjacent to the rigid body, defined as being elements in the drag mesh.

Definition at line 324 of file immersed_rigid_body_elements.h.

References Drag_mesh_pt, e, oomph::Mesh::element_pt(), oomph::Mesh::nelement(), and oomph::FiniteElement::node_update().

Referenced by reset_after_external_fd(), reset_after_internal_fd(), update_in_external_fd(), and update_in_internal_fd().

◆ output_centre_of_gravity()

void oomph::ImmersedRigidBodyElement::output_centre_of_gravity ( std::ostream &  outfile)

Output position velocity and acceleration of centre of gravity.

Output the position of the centre of gravity including velocities and accelerations.

Definition at line 121 of file immersed_rigid_body_elements.cc.

References Centre_displacement_data_pt, Initial_centre_of_mass, Initial_Phi, oomph::TimeStepper::time(), oomph::TimeStepper::time_derivative(), oomph::GeomObject::time_stepper_pt(), oomph::Data::time_stepper_pt(), and oomph::Data::value().

◆ pin_centre_of_mass_coordinate()

void oomph::ImmersedRigidBodyElement::pin_centre_of_mass_coordinate ( const unsigned &  i)
inline

Pin the i-th coordinate of the centre of mass.

Definition at line 271 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, i, and oomph::Data::pin().

◆ pin_rotation_angle()

void oomph::ImmersedRigidBodyElement::pin_rotation_angle ( )
inline

Pin the rotation angle.

Definition at line 283 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, and oomph::Data::pin().

◆ position() [1/2]

void oomph::ImmersedRigidBodyElement::position ( const unsigned &  t,
const Vector< double > &  xi,
Vector< double > &  r 
) const
inlinevirtual

Overload to include the time history of the motion of the object.

Reimplemented from oomph::GeomObject.

Reimplemented in oomph::ImmersedRigidBodyTriangleMeshPolygon.

Definition at line 194 of file immersed_rigid_body_elements.h.

References apply_rigid_body_motion(), Geom_object_pt, and oomph::GeomObject::position().

◆ position() [2/2]

void oomph::ImmersedRigidBodyElement::position ( const Vector< double > &  xi,
Vector< double > &  r 
) const
inlinevirtual

Overload the position to apply the rotation and translation.

Implements oomph::GeomObject.

Reimplemented in oomph::ImmersedRigidBodyTriangleMeshPolygon.

Definition at line 186 of file immersed_rigid_body_elements.h.

References apply_rigid_body_motion(), Geom_object_pt, and oomph::GeomObject::position().

Referenced by dposition_dt().

◆ re()

const double& oomph::ImmersedRigidBodyElement::re ( ) const
inline

Access function for the fluid Reynolds number.

Definition at line 452 of file immersed_rigid_body_elements.h.

References Re_pt.

Referenced by get_residuals_rigid_body_generic().

◆ re_invfr()

const double& oomph::ImmersedRigidBodyElement::re_invfr ( )
inline

Access to the fluid inverse Froude number.

Definition at line 477 of file immersed_rigid_body_elements.h.

References ReInvFr_pt.

Referenced by get_residuals_rigid_body_generic().

◆ re_invfr_pt()

double*& oomph::ImmersedRigidBodyElement::re_invfr_pt ( )
inline

Access function for pointer to the fluid inverse Froude number (dimensionless gravitational loading)

Definition at line 471 of file immersed_rigid_body_elements.h.

References ReInvFr_pt.

◆ re_pt()

double*& oomph::ImmersedRigidBodyElement::re_pt ( )
inline

Access function for the pointer to the fluid Reynolds number.

Definition at line 446 of file immersed_rigid_body_elements.h.

References Re_pt.

◆ reset_after_external_fd()

void oomph::ImmersedRigidBodyElement::reset_after_external_fd ( )
inlinevirtual

After all external data finite-differencing, update nodal positions.

Reimplemented from oomph::GeneralisedElement.

Definition at line 357 of file immersed_rigid_body_elements.h.

References node_update_adjacent_fluid_elements().

◆ reset_after_internal_fd()

void oomph::ImmersedRigidBodyElement::reset_after_internal_fd ( )
inlinevirtual

After all internal data finite-differencing, update nodal positions.

Reimplemented from oomph::GeneralisedElement.

Definition at line 373 of file immersed_rigid_body_elements.h.

References node_update_adjacent_fluid_elements().

◆ reset_in_external_fd()

void oomph::ImmersedRigidBodyElement::reset_in_external_fd ( const unsigned &  i)
inlinevirtual

Do nothing to reset within finite-differencing of external data.

Reimplemented from oomph::GeneralisedElement.

Definition at line 353 of file immersed_rigid_body_elements.h.

◆ reset_in_internal_fd()

void oomph::ImmersedRigidBodyElement::reset_in_internal_fd ( const unsigned &  i)
inlinevirtual

Do nothing to reset within finite-differencing of internal data.

Reimplemented from oomph::GeneralisedElement.

Definition at line 369 of file immersed_rigid_body_elements.h.

◆ set_drag_mesh()

void oomph::ImmersedRigidBodyElement::set_drag_mesh ( Mesh *const &  drag_mesh_pt)

Function to set the drag mesh and add the appropriate load and geometric data as external data to the Rigid Body.

Set the external drag mesh, which should consist of NavierStokesSurfaceDragTorqueElements and then read out the appropriate load and geometric data from those elements and set as external data for this element.

Definition at line 206 of file immersed_rigid_body_elements.cc.

References oomph::GeneralisedElement::add_external_data(), delete_external_hijacked_data(), drag_mesh_pt(), Drag_mesh_pt, e, oomph::Mesh::element_pt(), oomph::GeneralisedElement::flush_external_data(), oomph::FiniteElement::identify_geometric_data(), oomph::FSIFluidElement::identify_load_data(), List_of_external_hijacked_data, and oomph::Mesh::nelement().

◆ set_geometric_rotation()

void oomph::ImmersedRigidBodyElement::set_geometric_rotation ( )
inline

Set the rotation of the object to be included.

Definition at line 155 of file immersed_rigid_body_elements.h.

References Include_geometric_rotation.

◆ st()

const double& oomph::ImmersedRigidBodyElement::st ( ) const
inline

Access function for the fluid Strouhal number.

Definition at line 464 of file immersed_rigid_body_elements.h.

References St_pt.

Referenced by get_residuals_rigid_body_generic().

◆ st_pt()

double*& oomph::ImmersedRigidBodyElement::st_pt ( )
inline

Access function for the pointer to the fluid Strouhal number.

Definition at line 458 of file immersed_rigid_body_elements.h.

References St_pt.

◆ unpin_centre_of_mass_coordinate()

void oomph::ImmersedRigidBodyElement::unpin_centre_of_mass_coordinate ( const unsigned &  i)
inline

Unpin the i-th coordinate of the centre of mass.

Definition at line 277 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, i, and oomph::Data::unpin().

◆ unpin_rotation_angle()

void oomph::ImmersedRigidBodyElement::unpin_rotation_angle ( )
inline

Unpin the rotation angle.

Definition at line 289 of file immersed_rigid_body_elements.h.

References Centre_displacement_data_pt, and oomph::Data::unpin().

◆ unset_geometric_rotation()

void oomph::ImmersedRigidBodyElement::unset_geometric_rotation ( )
inline

Set the rotation of the object to be ignored (only really useful if you have a circular shape)

Definition at line 162 of file immersed_rigid_body_elements.h.

References Include_geometric_rotation.

◆ update_in_external_fd()

void oomph::ImmersedRigidBodyElement::update_in_external_fd ( const unsigned &  i)
inlinevirtual

After an external data change, update the nodal positions.

Reimplemented from oomph::GeneralisedElement.

Definition at line 347 of file immersed_rigid_body_elements.h.

References node_update_adjacent_fluid_elements().

◆ update_in_internal_fd()

void oomph::ImmersedRigidBodyElement::update_in_internal_fd ( const unsigned &  i)
inlinevirtual

After an internal data change, update the nodal positions.

Reimplemented from oomph::GeneralisedElement.

Definition at line 363 of file immersed_rigid_body_elements.h.

References node_update_adjacent_fluid_elements().

Member Data Documentation

◆ Centre_displacement_data_pt

Data* oomph::ImmersedRigidBodyElement::Centre_displacement_data_pt
protected

◆ Default_Gravity_vector

Vector< double > oomph::ImmersedRigidBodyElement::Default_Gravity_vector
staticprivate

Static default value for gravity.

Static default gravity direction vector.

Definition at line 632 of file immersed_rigid_body_elements.h.

◆ Default_Physical_Constant_Value

double oomph::ImmersedRigidBodyElement::Default_Physical_Constant_Value = 0.0
staticprivate

Static default value for physical constants.

Static default value for physical constants Zero gives instantaneous force and torque balances — no solid intertia.

Definition at line 626 of file immersed_rigid_body_elements.h.

◆ Default_Physical_Ratio_Value

double oomph::ImmersedRigidBodyElement::Default_Physical_Ratio_Value = 1.0
staticprivate

Static default value for physical ratios.

Static default value for physical ratio.

Definition at line 629 of file immersed_rigid_body_elements.h.

◆ Density_ratio_pt

double* oomph::ImmersedRigidBodyElement::Density_ratio_pt
private

Density ratio of the solid to the external fluid.

Definition at line 623 of file immersed_rigid_body_elements.h.

Referenced by density_ratio(), and density_ratio_pt().

◆ Displacement_data_is_internal

bool oomph::ImmersedRigidBodyElement::Displacement_data_is_internal
private

Boolean flag to indicate whether data is internal.

Definition at line 639 of file immersed_rigid_body_elements.h.

Referenced by centre_displacement_local_eqn(), initialise(), and ~ImmersedRigidBodyElement().

◆ Drag_mesh_pt

Mesh* oomph::ImmersedRigidBodyElement::Drag_mesh_pt
private

Mesh containing face elements that allow the computation of the drag on the body.

Definition at line 608 of file immersed_rigid_body_elements.h.

Referenced by drag_mesh_pt(), flush_drag_mesh(), get_force_and_torque(), node_update_adjacent_fluid_elements(), and set_drag_mesh().

◆ External_force_fct_pt

ExternalForceFctPt oomph::ImmersedRigidBodyElement::External_force_fct_pt
private

Function pointer to function that specifies external force.

Definition at line 600 of file immersed_rigid_body_elements.h.

Referenced by external_force_fct_pt(), and get_force_and_torque().

◆ External_torque_fct_pt

ExternalTorqueFctPt oomph::ImmersedRigidBodyElement::External_torque_fct_pt
private

Function pointer to function that specifies external torque.

Definition at line 604 of file immersed_rigid_body_elements.h.

Referenced by external_torque_fct_pt(), and get_force_and_torque().

◆ G_pt

Vector<double>* oomph::ImmersedRigidBodyElement::G_pt
private

The direction of gravity.

Definition at line 611 of file immersed_rigid_body_elements.h.

Referenced by g(), and g_pt().

◆ Geom_object_pt

GeomObject* oomph::ImmersedRigidBodyElement::Geom_object_pt
private

Underlying geometric object.

Definition at line 596 of file immersed_rigid_body_elements.h.

Referenced by dposition_dt(), and position().

◆ Include_geometric_rotation

bool oomph::ImmersedRigidBodyElement::Include_geometric_rotation
private

Boolean to indicate that the rotation variable does not affect the boundary shape.

Definition at line 643 of file immersed_rigid_body_elements.h.

Referenced by apply_rigid_body_motion(), dposition_dt(), set_geometric_rotation(), and unset_geometric_rotation().

◆ Index_for_centre_displacement

unsigned oomph::ImmersedRigidBodyElement::Index_for_centre_displacement
private

Index for the data (internal or external) that contains the centre-of-gravity displacement.

Definition at line 636 of file immersed_rigid_body_elements.h.

Referenced by centre_displacement_local_eqn(), and initialise().

◆ Initial_centre_of_mass

Vector<double> oomph::ImmersedRigidBodyElement::Initial_centre_of_mass
protected

◆ Initial_Phi

double oomph::ImmersedRigidBodyElement::Initial_Phi
protected

◆ List_of_external_hijacked_data

std::list<unsigned> oomph::ImmersedRigidBodyElement::List_of_external_hijacked_data
private

Storage for the external data that is formed from hijacked data that must be deleted by this element.

Definition at line 559 of file immersed_rigid_body_elements.h.

Referenced by delete_external_hijacked_data(), and set_drag_mesh().

◆ Mass

double oomph::ImmersedRigidBodyElement::Mass
protected

◆ Moment_of_inertia

double oomph::ImmersedRigidBodyElement::Moment_of_inertia
protected

◆ Re_pt

double* oomph::ImmersedRigidBodyElement::Re_pt
private

Reynolds number of external fluid.

Definition at line 614 of file immersed_rigid_body_elements.h.

Referenced by re(), and re_pt().

◆ ReInvFr_pt

double* oomph::ImmersedRigidBodyElement::ReInvFr_pt
private

Reynolds number divided by Froude number of external fluid.

Definition at line 620 of file immersed_rigid_body_elements.h.

Referenced by re_invfr(), and re_invfr_pt().

◆ St_pt

double* oomph::ImmersedRigidBodyElement::St_pt
private

Strouhal number of external fluid.

Definition at line 617 of file immersed_rigid_body_elements.h.

Referenced by st(), and st_pt().


The documentation for this class was generated from the following files: