Element to impose volume flux through collection of Womersley elements, in exchange for treating the pressure gradient as an unknown. The pressure gradient is created (as a singlevalued Data item) in the constructor for this element which also takes a pointer to the Mesh containing the Womersley elements whose total flux is being controlled. While doing this we tell them that their pressure gradient is now an unknown and must be treated as external Data. More...
#include <womersley_elements.h>
Public Member Functions  
ImposeFluxForWomersleyElement (Mesh *womersley_mesh_pt, double *prescribed_flux_pt)  
Constructor: Pass pointer to mesh that contains the Womersley elements whose volume flux is controlled, and pointer to double that contains the instantaneous value of the prescribed flux. More...  
Data *  pressure_gradient_data_pt () 
Readonly access to the singlevalued Data item that stores the pressure gradient (to be determined via the flux control) More...  
double  total_volume_flux () 
Get volume flux through all Womersley elements. More...  
void  get_residuals (Vector< double > &residuals) 
Compute residual vector: the volume flux constraint determines this element's oneandonly internal Data which represents the pressure gradient. More...  
void  get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) 
Compute element residual Vector and element Jacobian matrix Note: Jacobian is zero because the derivatives w.r.t. to velocity dofs are added by the Womersley elements; the current element's internal Data (the pressure gradient) does not feature in the volume constraint. More...  
Public Member Functions inherited from oomph::GeneralisedElement  
GeneralisedElement()  GeneralisedElement (const GeneralisedElement &) 
Constructor: Initialise all pointers and all values to zero. More...  
void  operator= (const GeneralisedElement &) 
Broken assignment operator. More...  
Data *&  internal_data_pt (const unsigned &i) 
Return a pointer to ith internal data object. More...  
Data *const &  internal_data_pt (const unsigned &i) const 
Return a pointer to ith internal data object (const version) More...  
Data *&  external_data_pt (const unsigned &i) 
Return a pointer to ith external data object. More...  
Data *const &  external_data_pt (const unsigned &i) const 
Return a pointer to ith external data object (const version) More...  
unsigned long  eqn_number (const unsigned &ieqn_local) const 
Return the global equation number corresponding to the ieqn_localth local equation number. More...  
int  local_eqn_number (const unsigned long &ieqn_global) const 
Return the local equation number corresponding to the ieqn_globalth 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) 
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 ith 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 ¤t_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 ¤t_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_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 ¶meter_pt, Vector< double > &dres_dparam) 
Calculate the derivatives of the residuals with respect to a parameter. More...  
virtual void  get_djacobian_dparameter (double *const ¶meter_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 ¶meter_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 () 
Selftest: Have all internal values been classified as pinned/unpinned? Return 0 if OK. 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 nonhalo 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 nonhalo 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 subdivided 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...  
Private Attributes  
Mesh *  Womersley_mesh_pt 
Pointer to mesh that contains the Womersley elements. More...  
Data *  Pressure_gradient_data_pt 
Data item whose one and only value contains the pressure gradient. More...  
double *  Prescribed_flux_pt 
Pointer to current value of prescribed flux. More...  
Additional Inherited Members  
Static Public Attributes inherited from oomph::GeneralisedElement  
static bool  Suppress_warning_about_repeated_internal_data =false 
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.0e8 
Double used for the default finite difference step in elemental jacobian calculations. 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 finitedifference 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 localtoglobal 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 lookup 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 jth value stored at the ith internal data. More...  
int  external_local_eqn (const unsigned &i, const unsigned &j) 
Return the local equation number corresponding to the jth value stored at the ith external data. More...  
virtual void  fill_in_contribution_to_residuals (Vector< double > &residuals) 
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. 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 slaved data before finite differencing takes place. More...  
virtual void  reset_after_internal_fd () 
Function that is call after the finite differencing of the internal data. This may be overloaded to reset any slaved variables that may have changed during the finite differencing. More...  
virtual void  update_in_internal_fd (const unsigned &i) 
Function called within the finite difference loop for internal data after a change in any values in the ith internal data object. More...  
virtual void  reset_in_internal_fd (const unsigned &i) 
Function called within the finite difference loop for internal data after the values in the ith external data object are reset. The default behaviour is to call the update function. 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 slaved data before finite differencing takes place. More...  
virtual void  reset_after_external_fd () 
Function that is call after the finite differencing of the external data. This may be overloaded to reset any slaved variables that may have changed during the finite differencing. More...  
virtual void  update_in_external_fd (const unsigned &i) 
Function called within the finite difference loop for external data after a change in any values in the ith external data object. More...  
virtual void  reset_in_external_fd (const unsigned &i) 
Function called within the finite difference loop for external data after the values in the ith external data object are reset. The default behaviour is to call the update function. More...  
virtual void  fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) 
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. 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 ¶meter_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 ¶meter_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 ¶meter_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 inherited from oomph::GeneralisedElement  
int  Non_halo_proc_ID 
Nonhalo 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...  
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...  
Element to impose volume flux through collection of Womersley elements, in exchange for treating the pressure gradient as an unknown. The pressure gradient is created (as a singlevalued Data item) in the constructor for this element which also takes a pointer to the Mesh containing the Womersley elements whose total flux is being controlled. While doing this we tell them that their pressure gradient is now an unknown and must be treated as external Data.
Definition at line 523 of file womersley_elements.h.

inline 
Constructor: Pass pointer to mesh that contains the Womersley elements whose volume flux is controlled, and pointer to double that contains the instantaneous value of the prescribed flux.
Definition at line 532 of file womersley_elements.h.
References oomph::GeneralisedElement::add_internal_data(), e, oomph::Mesh::element_pt(), oomph::Mesh::nelement(), oomph::ImposeFluxForWomersleyElement< DIM >::Pressure_gradient_data_pt, oomph::WomersleyEquations< DIM >::set_pressure_gradient_and_add_as_external_data(), oomph::Data::set_value(), and oomph::ImposeFluxForWomersleyElement< DIM >::Womersley_mesh_pt.

inlinevirtual 
Compute element residual Vector and element Jacobian matrix Note: Jacobian is zero because the derivatives w.r.t. to velocity dofs are added by the Womersley elements; the current element's internal Data (the pressure gradient) does not feature in the volume constraint.
Reimplemented from oomph::GeneralisedElement.
Definition at line 615 of file womersley_elements.h.
References oomph::ImposeFluxForWomersleyElement< DIM >::get_residuals(), i, and oomph::GeneralisedElement::ndof().

inlinevirtual 
Compute residual vector: the volume flux constraint determines this element's oneandonly internal Data which represents the pressure gradient.
Reimplemented from oomph::GeneralisedElement.
Definition at line 598 of file womersley_elements.h.
References oomph::GeneralisedElement::internal_local_eqn(), and oomph::ImposeFluxForWomersleyElement< DIM >::total_volume_flux().
Referenced by oomph::ImposeFluxForWomersleyElement< DIM >::get_jacobian().

inline 
Readonly access to the singlevalued Data item that stores the pressure gradient (to be determined via the flux control)
Definition at line 569 of file womersley_elements.h.
References oomph::ImposeFluxForWomersleyElement< DIM >::Pressure_gradient_data_pt.

inline 
Get volume flux through all Womersley elements.
Definition at line 576 of file womersley_elements.h.
References e, oomph::Mesh::element_pt(), oomph::WomersleyEquations< DIM >::get_volume_flux(), oomph::Mesh::nelement(), and oomph::ImposeFluxForWomersleyElement< DIM >::Womersley_mesh_pt.
Referenced by oomph::ImposeFluxForWomersleyElement< DIM >::get_residuals().

private 
Pointer to current value of prescribed flux.
Definition at line 641 of file womersley_elements.h.

private 
Data item whose one and only value contains the pressure gradient.
Definition at line 638 of file womersley_elements.h.
Referenced by oomph::ImposeFluxForWomersleyElement< DIM >::ImposeFluxForWomersleyElement(), and oomph::ImposeFluxForWomersleyElement< DIM >::pressure_gradient_data_pt().

private 
Pointer to mesh that contains the Womersley elements.
Definition at line 634 of file womersley_elements.h.
Referenced by oomph::ImposeFluxForWomersleyElement< DIM >::ImposeFluxForWomersleyElement(), and oomph::ImposeFluxForWomersleyElement< DIM >::total_volume_flux().