35 namespace FSI_functions
51 unsigned ndim = node_pt->
ndim();
53 for (
unsigned i = 0;
i < ndim;
i++)
79 std::ostream& out,
const std::string& current_string)
const
87 for (
unsigned i = 0;
i < n_external_field_data;
i++)
89 std::stringstream conversion;
90 conversion <<
" of External Interaction Field Data " <<
i
100 for (
unsigned i = 0;
i < n_external_geom_data;
i++)
102 std::stringstream conversion;
103 conversion <<
" of External Interaction Geometric Data " <<
i
122 const unsigned& ndim_fluid)
167 unsigned n_load = load.size();
170 for (
unsigned i = 0;
i < n_load;
i++) load[
i] = 0.0;
176 unsigned n_loaded_face = 2;
179 for (
unsigned face = 0; face < n_loaded_face; face++)
190 el_f_pt->
get_load(s_adjacent,
N, fluid_load);
197 std::ostringstream warning_stream;
199 <<
"Info: No adjacent element set in FSIWallElement.\n\n"
200 <<
"Note: you can disable this message by setting \n "
201 <<
"FSIWallElement::Dont_warn_about_missing_adjacent_fluid_elements"
202 <<
"\n to true or recompiling without PARANOID.\n";
204 "FSIWallElement::fluid_load_vector()",
205 OOMPH_EXCEPTION_LOCATION);
214 if (face == 1) sign = -1.0;
217 for (
unsigned i = 0;
i < n_load;
i++)
219 load[
i] += fluid_load[
i] * sign *
q();
233 std::map<FSIFluidElement*, bool> done;
239 unsigned n_loaded_face = 2;
241 for (
unsigned face = 0; face < n_loaded_face; face++)
244 for (
unsigned iint = 0; iint < n_intpt; iint++)
258 done[el_f_pt] =
true;
280 Vector<std::set<FiniteElement*>>
const& external_elements_pt,
281 std::set<std::pair<Data*, unsigned>>& paired_interaction_data)
285 for (
unsigned i = 0;
i < n_interaction;
i++)
288 for (std::set<FiniteElement*>::const_iterator it =
289 external_elements_pt[
i].begin();
290 it != external_elements_pt[
i].end();
318 Vector<std::set<FiniteElement*>>
const& external_elements_pt,
319 std::set<Data*>& external_geometric_data_pt)
331 for (
unsigned i = 0;
i < n_interaction;
i++)
334 for (std::set<FiniteElement*>::const_iterator it =
335 external_elements_pt[
i].begin();
336 it != external_elements_pt[
i].end();
339 (*it)->identify_geometric_data(external_geometric_data_pt);
virtual void describe_dofs(std::ostream &out, const std::string ¤t_string) const
Function to describe the dofs of the Node. The ostream specifies the output stream to which the descr...
void set_value(const unsigned &i, const double &value_)
Set the i-th stored data value to specified value. The only reason that we require an explicit set fu...
Vector< double > & external_element_local_coord(const unsigned &interaction_index, const unsigned &ipt)
Access function to get source element's local coords for specified interaction index at specified int...
void set_ninteraction(const unsigned &n_interaction)
Set the number of interactions in the element This function is usually called in the specific element...
FiniteElement *& external_element_pt(const unsigned &interaction_index, const unsigned &ipt)
Access function to source element for specified interaction index at specified integration point.
unsigned nexternal_interaction_geometric_data() const
Return the number of geometric Data items that affect the external interactions in this element: i....
unsigned nexternal_interaction_field_data() const
Return the number of Data items that affect the external interactions in this element....
Data ** External_interaction_field_data_pt
/ Storage for pointers to external field Data that affect the interactions in the elemenet
Data ** External_interaction_geometric_data_pt
/ Storage for pointers to external geometric Data that affect the interactions in the elemenet
unsigned ninteraction() const
Return the number of interactions in the element.
/////////////////////////////////////////////////////////////////////////
virtual void identify_pressure_data(std::set< std::pair< Data *, unsigned >> &paired_pressure_data)=0
Add to the set paired_pressure_data pairs containing.
virtual void identify_load_data(std::set< std::pair< Data *, unsigned >> &paired_load_data)=0
Add to the set paired_load_data pairs containing.
virtual void get_load(const Vector< double > &s, const Vector< double > &N, Vector< double > &load)=0
Compute the load vector that is applied by current element (at its local coordinate s) onto the adjac...
void enable_fluid_loading_on_both_sides()
Allow element to be loaded by fluid on both sides. (Resizes containers for lookup schemes and initial...
void setup_fsi_wall_element(const unsigned &nlagr_solid, const unsigned &ndim_fluid)
Setup: Assign storage – pass the Eulerian dimension of the "adjacent" fluid elements and the number o...
void fluid_load_vector(const unsigned &intpt, const Vector< double > &N, Vector< double > &load)
Get FE Jacobian by systematic finite differencing w.r.t. nodal positition Data, internal and external...
bool Ignore_shear_stress_in_jacobian
Set this flag to true to ignore shear stress component of load when calculating the Jacobian,...
void identify_all_geometric_data_for_external_interaction(Vector< std::set< FiniteElement * >> const &external_elements_pt, std::set< Data * > &external_geometric_data_pt)
Function that must return all geometric data involved in the desired interactions from the external e...
void identify_all_field_data_for_external_interaction(Vector< std::set< FiniteElement * >> const &external_elements_pt, std::set< std::pair< Data *, unsigned >> &paired_iteraction_data)
Overload the function that must return all field data involved in the interactions from the external ...
const double & q() const
Return the ratio of the stress scales used to non-dimensionalise the fluid and solid equations....
static double Default_Q_Value
Static default value for the ratio of stress scales used in the fluid and solid equations (default is...
static bool Dont_warn_about_missing_adjacent_fluid_elements
Static flag that allows the suppression of warning messages.
void node_update_adjacent_fluid_elements()
Update the nodal positions in all fluid elements that affect the traction on this FSIWallElement.
bool Only_front_is_loaded_by_fluid
Is the element exposed to (and hence loaded by) fluid only on its "front"? True by default....
void describe_local_dofs(std::ostream &out, const std::string ¤t_string) const
Function to describe the local dofs of the element. The ostream specifies the output stream to which ...
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual void describe_local_dofs(std::ostream &out, const std::string ¤t_string) const
Function to describe the local dofs of the element[s]. The ostream specifies the output stream to whi...
virtual void node_update()
Update the positions of all nodes in the element using each node update function. The default impleme...
void set_nlagrangian_and_ndim(const unsigned &n_lagrangian, const unsigned &n_dim)
Set # of Lagrangian and Eulerian coordinates.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
double dposition_dt(const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt, either directly or via hanging node representatio...
An OomphLibWarning object which should be created as a temporary object to issue a warning....
void describe_solid_local_dofs(std::ostream &out, const std::string ¤t_string) const
Classifies dofs locally for solid specific aspects.
double Strouhal_for_no_slip
Strouhal number St = a/(UT) for application of no slip condition. Initialised to 1....
void apply_no_slip_on_moving_wall(Node *node_pt)
Apply no-slip condition for N.St. on a moving wall node u = St dR/dt, where the Strouhal number St = ...
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...