linearised_navier_stokes_eigenvalue_elements.cc
Go to the documentation of this file.
1 // LIC// ====================================================================
2 // LIC// This file forms part of oomph-lib, the object-oriented,
3 // LIC// multi-physics finite-element library, available
4 // LIC// at http://www.oomph-lib.org.
5 // LIC//
6 // LIC// Copyright (C) 2006-2023 Matthias Heil and Andrew Hazel
7 // LIC//
8 // LIC// This library is free software; you can redistribute it and/or
9 // LIC// modify it under the terms of the GNU Lesser General Public
10 // LIC// License as published by the Free Software Foundation; either
11 // LIC// version 2.1 of the License, or (at your option) any later version.
12 // LIC//
13 // LIC// This library is distributed in the hope that it will be useful,
14 // LIC// but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // LIC// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // LIC// Lesser General Public License for more details.
17 // LIC//
18 // LIC// You should have received a copy of the GNU Lesser General Public
19 // LIC// License along with this library; if not, write to the Free Software
20 // LIC// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 // LIC// 02110-1301 USA.
22 // LIC//
23 // LIC// The authors may be contacted at oomph-lib@maths.man.ac.uk.
24 // LIC//
25 // LIC//====================================================================
26 // The element-independent guts for imposition of "constant volume"
27 // constraints in free surface/interface problems.
28 
29 
31 
32 namespace oomph
33 {
34  //=====================================================================
35  /// Fill in the residuals for the volume constraint
36  //====================================================================
39  Vector<double>& residuals)
40  {
41  // Note that this element can only be used with our linearised navier
42  // stokes elements
43  // Read part
44  {
45  const int local_eqn = this->eigenvalue_local_eqn(0);
46  if (local_eqn >= 0)
47  {
48  residuals[local_eqn] -= (*Normalisation_pt).real();
49  }
50  }
51  // Imaginary part
52  {
53  const int local_eqn = this->eigenvalue_local_eqn(1);
54  if (local_eqn >= 0)
55  {
56  residuals[local_eqn] -= (*Normalisation_pt).imag();
57  }
58  }
59  // Bifurcation constraint
60  const int local_eqn = this->eigenvalue_local_eqn(2);
61  if (local_eqn >= 0)
62  {
63  residuals[local_eqn] += this->eigenvalue(0);
64  }
65  }
66 
67  //===========================================================================
68  /// Constructor: Pass pointer to target volume. "Pressure" value that
69  /// "traded" for the volume contraint is created internally (as a Data
70  /// item with a single pressure value)
71  //===========================================================================
74  std::complex<double>* const& normalisation_pt)
75  {
76  // Store pointer to normalisation
77  Normalisation_pt = normalisation_pt;
78 
79  // Create data, add as internal data and record the index
80  // (gets deleted automatically in destructor of GeneralisedElement)
82  add_internal_data(new Data(3));
83 
84  // ...and stored the "traded pressure" value as first value
86  }
87 
88  //======================================================================
89  /// Constructor: Pass pointer to target volume, pointer to Data
90  /// item whose value specified by index_of_traded_pressure represents
91  /// the "Pressure" value that "traded" for the volume contraint.
92  /// The Data is stored as external Data for this element.
93  //======================================================================
94  /* LinearisedNavierStokesEigenfunctionNormalisationElement::LinearisedNavierStokesEigenfunctionNormalisationElement(
95  double* prescribed_volume_pt,
96  Data* p_traded_data_pt,
97  const unsigned& index_of_traded_pressure)
98  {
99  // Store pointer to prescribed volume
100  Prescribed_volume_pt = prescribed_volume_pt;
101 
102  // Add as external data and record the index
103  External_or_internal_data_index_of_traded_pressure=
104  add_external_data(p_traded_data_pt);
105 
106  // Record that it is external data
107  Traded_pressure_stored_as_internal_data=false;
108 
109  // Record index
110  Index_of_traded_pressure_value=index_of_traded_pressure;
111  } */
112 
113 
114 } // namespace oomph
A class that represents a collection of data; each Data object may contain many different individual ...
Definition: nodes.h:86
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 ...
Definition: elements.cc:62
LinearisedNavierStokesEigenfunctionNormalisationElement(std::complex< double > *const &normalisation_pt)
Constructor: Pass pointer to target volume. "Pressure" value that "traded" for the volume contraint i...
int eigenvalue_local_eqn(const unsigned &i)
The local eqn number for the traded pressure.
unsigned External_or_internal_data_index_of_eigenvalue
Storage for the initial index of the eigenvalue.
std::complex< double > * Normalisation_pt
Pointer to the desired normalisation.
void fill_in_generic_contribution_to_residuals_normalisation(Vector< double > &residuals)
Fill in the residuals for the volume constraint.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...