oomph::NodeElementSolidOnlyMortaringElement Class Reference

#include <node_element_constraint_elements.h>

+ Inheritance diagram for oomph::NodeElementSolidOnlyMortaringElement:

Public Member Functions

 NodeElementSolidOnlyMortaringElement (SolidNode *node_pt, FiniteElement *elem_pt, Vector< double > &s)
 
void fill_in_contribution_to_residuals (Vector< double > &residuals) override
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) override
 
void position_in_element (Vector< double > &x)
 
SolidNodesolid_node_pt ()
 
- Public Member Functions inherited from oomph::ConstraintElement
 ConstraintElement (Vector< Data * > &data_pt)
 
 ConstraintElement (Vector< Data * > data_pt)
 
virtual void construct_lagrange_multipliers ()
 
- Public Member Functions inherited from oomph::GeneralisedElement
 GeneralisedElement ()
 Constructor: Initialise all pointers and all values to zero. More...
 
virtual ~GeneralisedElement ()
 Virtual destructor to clean up any memory allocated by the object. More...
 
 GeneralisedElement (const GeneralisedElement &)=delete
 Broken copy constructor. 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
 
int local_eqn_number (const unsigned long &ieqn_global) const
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 
bool external_data_fd (const unsigned &i) const
 
void exclude_external_data_fd (const unsigned &i)
 
void include_external_data_fd (const unsigned &i)
 
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)
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void complete_setup_of_dependencies ()
 
virtual void get_residuals (Vector< double > &residuals)
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
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)
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
virtual unsigned self_test ()
 
virtual void compute_norm (Vector< double > &norm)
 
virtual void compute_norm (double &norm)
 
virtual unsigned ndof_types () const
 
virtual void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 

Private Member Functions

void fill_in_contribution_to_jacobian_mortared_nodes (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &flag)
 

Static Private Member Functions

static Vector< Data * > node_and_vector_to_data_pt (SolidNode *node_pt, FiniteElement *elem_pt)
 

Private Attributes

Vector< doubleLocal_Coord
 
SolidNodeNode_pt
 
FiniteElementElement_pt
 
unsigned Dim
 

Additional Inherited Members

- Static Public Attributes inherited from oomph::GeneralisedElement
static bool Suppress_warning_about_repeated_internal_data
 
static bool Suppress_warning_about_repeated_external_data = true
 
static double Default_fd_jacobian_step = 1.0e-8
 
- Protected Member Functions inherited from oomph::ConstraintElement
virtual void evaluate_constraint_functions (Vector< double > &error)
 
Vector< unsignedget_constrained_data_local_index ()
 
unsigned get_lagrange_multiplier_index ()
 
Datalagrange_multiplier ()
 
const int lagrange_eqn (const unsigned &i)
 
Dataext_data_pt (const unsigned &i)
 
const int ext_eqn (const unsigned &i, const unsigned &j)
 
- Protected Member Functions inherited from oomph::GeneralisedElement
unsigned add_internal_data (Data *const &data_pt, const bool &fd=true)
 
bool internal_data_fd (const unsigned &i) const
 
void exclude_internal_data_fd (const unsigned &i)
 
void include_internal_data_fd (const unsigned &i)
 
void clear_global_eqn_numbers ()
 
void add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt)
 
virtual void assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void assign_additional_local_eqn_numbers ()
 
int internal_local_eqn (const unsigned &i, const unsigned &j) const
 
int external_local_eqn (const unsigned &i, const unsigned &j)
 
void fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
virtual void update_before_internal_fd ()
 
virtual void reset_after_internal_fd ()
 
virtual void update_in_internal_fd (const unsigned &i)
 
virtual void reset_in_internal_fd (const unsigned &i)
 
virtual void update_before_external_fd ()
 
virtual void reset_after_external_fd ()
 
virtual void update_in_external_fd (const unsigned &i)
 
virtual void reset_in_external_fd (const unsigned &i)
 
virtual void fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void fill_in_contribution_to_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
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)
 
virtual void fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
- Protected Attributes inherited from oomph::ConstraintElement
Vector< unsignedConstrained_Data_Local_Index
 
unsigned Num_Constrained_Data
 
unsigned Lagrange_Multiplier_Index
 
unsigned Num_Constraints
 
- Static Protected Attributes inherited from oomph::GeneralisedElement
static DenseMatrix< doubleDummy_matrix
 
static std::deque< double * > Dof_pt_deque
 

Constructor & Destructor Documentation

◆ NodeElementSolidOnlyMortaringElement()

oomph::NodeElementSolidOnlyMortaringElement::NodeElementSolidOnlyMortaringElement ( SolidNode node_pt,
FiniteElement elem_pt,
Vector< double > &  s 
)
inline
20  Local_Coord(s),
21  Node_pt(node_pt),
22  Element_pt(elem_pt),
23  Dim(node_pt->ndim())
24  {
25  if(Dim != elem_pt->dim())
26  {
27  throw OomphLibError("Mortaring element and node do not have the same number of dimensions " + std::to_string(Dim) + " " + std::to_string(elem_pt->dim()),
30  }
31  // Build the lagrange multipliers
34  }
unsigned Num_Constraints
Definition: constraint_elements.h:180
unsigned Lagrange_Multiplier_Index
Definition: constraint_elements.h:178
ConstraintElement(Vector< Data * > &data_pt)
Definition: constraint_elements.h:85
unsigned add_internal_data(Data *const &data_pt, const bool &fd=true)
Definition: elements.cc:62
Vector< double > Local_Coord
Definition: node_element_constraint_elements.h:175
unsigned Dim
Definition: node_element_constraint_elements.h:178
static Vector< Data * > node_and_vector_to_data_pt(SolidNode *node_pt, FiniteElement *elem_pt)
Definition: node_element_constraint_elements.h:162
FiniteElement * Element_pt
Definition: node_element_constraint_elements.h:177
SolidNode * Node_pt
Definition: node_element_constraint_elements.h:176
RealScalar s
Definition: level1_cplx_impl.h:130
std::string to_string(T object, unsigned float_precision=8)
Definition: oomph_utilities.h:189
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::GeneralisedElement::add_internal_data(), Dim, oomph::FiniteElement::dim(), oomph::ConstraintElement::Lagrange_Multiplier_Index, oomph::ConstraintElement::Num_Constraints, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::StringConversion::to_string().

Member Function Documentation

◆ fill_in_contribution_to_jacobian()

void oomph::NodeElementSolidOnlyMortaringElement::fill_in_contribution_to_jacobian ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian 
)
inlineoverridevirtual

Add the elemental contribution to the jacobian matrix. and the residuals vector. Note that this function will NOT initialise the residuals vector or the jacobian matrix. It must be called after the residuals vector and jacobian matrix have been initialised to zero. The default is to use finite differences to calculate the jacobian

Reimplemented from oomph::GeneralisedElement.

41  {
43  }
void fill_in_contribution_to_jacobian_mortared_nodes(Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &flag)
Definition: node_element_constraint_elements.h:74

References fill_in_contribution_to_jacobian_mortared_nodes().

◆ fill_in_contribution_to_jacobian_mortared_nodes()

void oomph::NodeElementSolidOnlyMortaringElement::fill_in_contribution_to_jacobian_mortared_nodes ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
const bool flag 
)
inlineprivate
75  {
76  // The number of nodes in the element
77  const unsigned n_node = Element_pt->nnode();
78 
79  // The shape function
80  Shape psi(n_node);
82 
83  // Loop over the dimensions
84  for(unsigned i=0; i<Dim; i++)
85  {
86  // eqn numbers
87  const int lambda_eqn = lagrange_eqn(i);
88  const int node_eqn = ext_eqn(0,i);
89  Vector<int> element_node_eqn(n_node);
90 
91  // Get the lagrange multiplier value
92  const double lambda = lagrange_multiplier()->value(i);
93 
94  // The node coordinate
95  const double x_node = ext_data_pt(0)->value(i);
96 
97  // Get the interpolated element coordinate
98  double x_elem = 0.0;
99  for(unsigned l=0;l<n_node;l++)
100  {
101  // Get the eqn number
102  element_node_eqn[l] = ext_eqn(1+l, i);
103  // Get the coordinate of the node
104  x_elem += psi[l] * ext_data_pt(1+l)->value(i);
105  }
106 
107  // Fill in the residuals and jacobian entries
108 
109  // Lambda residual
110  if(lambda_eqn>=0)
111  {
112  residuals[lambda_eqn] += (x_node - x_elem);
113  if(flag)
114  {
115  if(node_eqn>=0)
116  {
117  jacobian(lambda_eqn, node_eqn) += 1.0;
118  }
119  for(unsigned l=0;l<n_node;l++)
120  {
121  if(element_node_eqn[l]>=0)
122  {
123  jacobian(lambda_eqn, element_node_eqn[l]) -= psi[l];
124  }
125  }
126  }
127  }
128 
129  // Node residual
130  if(node_eqn>=0)
131  {
132  residuals[node_eqn] += lambda;
133  if(flag)
134  {
135  if(lambda_eqn>=0)
136  {
137  jacobian(node_eqn, lambda_eqn) += 1.0;
138  }
139  }
140  }
141 
142  // Element node residual
143  for(unsigned l=0;l<n_node;l++)
144  {
145  if(element_node_eqn[l]>=0)
146  {
147  residuals[element_node_eqn[l]] -= lambda*psi[l];
148  if(flag)
149  {
150  if(lambda_eqn>=0)
151  {
152  jacobian(element_node_eqn[l], lambda_eqn) -= psi[l];
153  }
154  }
155  }
156  }
157  }
158  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
cout<< "The eigenvalues of A are:"<< endl<< ces.eigenvalues()<< endl;cout<< "The matrix of eigenvectors, V, is:"<< endl<< ces.eigenvectors()<< endl<< endl;complex< float > lambda
Definition: ComplexEigenSolver_compute.cpp:9
Data * lagrange_multiplier()
Definition: constraint_elements.h:131
const int lagrange_eqn(const unsigned &i)
Definition: constraint_elements.h:135
const int ext_eqn(const unsigned &i, const unsigned &j)
Definition: constraint_elements.h:160
Data * ext_data_pt(const unsigned &i)
Definition: constraint_elements.h:148
double value(const unsigned &i) const
Definition: nodes.h:293
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210

References Dim, Element_pt, oomph::ConstraintElement::ext_data_pt(), oomph::ConstraintElement::ext_eqn(), i, oomph::ConstraintElement::lagrange_eqn(), oomph::ConstraintElement::lagrange_multiplier(), lambda, Local_Coord, oomph::FiniteElement::nnode(), oomph::FiniteElement::shape(), and oomph::Data::value().

Referenced by fill_in_contribution_to_jacobian(), and fill_in_contribution_to_residuals().

◆ fill_in_contribution_to_residuals()

void oomph::NodeElementSolidOnlyMortaringElement::fill_in_contribution_to_residuals ( Vector< double > &  residuals)
inlineoverridevirtual

Add the elemental contribution to the residuals vector. Note that this function will NOT initialise the residuals vector. It must be called after the residuals vector has been initialised to zero.

Reimplemented from oomph::ConstraintElement.

37  {
39  }
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227

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

◆ node_and_vector_to_data_pt()

static Vector<Data*> oomph::NodeElementSolidOnlyMortaringElement::node_and_vector_to_data_pt ( SolidNode node_pt,
FiniteElement elem_pt 
)
inlinestaticprivate
163  {
164  const unsigned n_node_element = elem_pt->nnode();
165  Vector<Data*> data_pt(1 + n_node_element);
166  data_pt[0] = node_pt->variable_position_pt();
167  for(unsigned i=0; i<n_node_element; i++)
168  {
169  data_pt[i+1] = dynamic_cast<SolidNode*>(elem_pt->node_pt(i))->variable_position_pt();
170  }
171  return data_pt;
172  }

References i, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and oomph::SolidNode::variable_position_pt().

◆ position_in_element()

void oomph::NodeElementSolidOnlyMortaringElement::position_in_element ( Vector< double > &  x)
inline
46  {
47  // The number of nodes in the element
48  const unsigned n_node = Element_pt->nnode();
49 
50  // The shape function
51  Shape psi(n_node);
53 
54  // Get the interpolated element coordinate
55  for(unsigned i=0; i<Dim; i++)
56  {
57  x[i] = 0.0;
58  for(unsigned l=0; l<n_node; l++)
59  {
60  // Get the coordinate of the node
61  x[i] += psi[l] * ext_data_pt(1+l)->value(i);
62  }
63  }
64  }
list x
Definition: plotDoE.py:28

References Dim, Element_pt, oomph::ConstraintElement::ext_data_pt(), i, Local_Coord, oomph::FiniteElement::nnode(), oomph::FiniteElement::shape(), oomph::Data::value(), and plotDoE::x.

Referenced by MortaringValidationProblem< ELEMENT, NON_MORTAR_ELEMENT >::verify_mortared_nodes_coincide().

◆ solid_node_pt()

SolidNode* oomph::NodeElementSolidOnlyMortaringElement::solid_node_pt ( )
inline

Member Data Documentation

◆ Dim

unsigned oomph::NodeElementSolidOnlyMortaringElement::Dim
private

◆ Element_pt

FiniteElement* oomph::NodeElementSolidOnlyMortaringElement::Element_pt
private

◆ Local_Coord

Vector<double> oomph::NodeElementSolidOnlyMortaringElement::Local_Coord
private

◆ Node_pt

SolidNode* oomph::NodeElementSolidOnlyMortaringElement::Node_pt
private

Referenced by solid_node_pt().


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