LifeV
Womersley.hpp
Go to the documentation of this file.
1 //@HEADER
2 /*
3 *******************************************************************************
4 
5  Copyright (C) 2004, 2005, 2007 EPFL, Politecnico di Milano, INRIA
6  Copyright (C) 2010 EPFL, Politecnico di Milano, Emory University
7 
8  This file is part of LifeV.
9 
10  LifeV is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  LifeV is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with LifeV. If not, see <http://www.gnu.org/licenses/>.
22 
23 *******************************************************************************
24 */
25 //@HEADER
26 
27 /*!
28  @file
29  @brief Womersley Analytical Solution
30 
31  @author Mauro Perego <mauro@mathcs.emory.edu>
32  @contributor Umberto Villa <uvilla@emory.edu>
33  @maintainer Umberto Villa <uvilla@emory.edu>
34 
35  @date 11-12-2009
36 
37  Analytic solution of Womersley for unsteady Navier-Stokes 3D on the cylinder having axis x, origin (0,0,0), diameter D and height L.
38  Solution of incompressible NS equation in a cylindrical vessel with a sinusoidal pressure drop (deltaP = A cos(wt) )
39  between the inflow and the outflow and no-slip conditions on the vessel wall.
40  this solution works also in the 2D-axisymmetric formulation (geometry [0, L]x[0, D/2]).
41  <br>
42  The Womersley number \alpha arises in the solution of the linearized Navier Stokes equations
43  for oscillatory flow (presumed to be laminar and incompressible) in a tube.
44  When \alpha is small (1 or less), it means the frequency of pulsations is sufficiently low
45  that a parabolic velocity profile has time to develop during each cycle,
46  and the flow will be very nearly in phase with the pressure gradient,
47  and will be given to a good approximation by Poiseuille's law,
48  using the instantaneous pressure gradient.
49  When \alpha is large (10 or more), it means the frequency of pulsations is sufficiently large
50  that the velocity profile is relatively flat or plug-like,
51  and the mean flow lags the pressure gradient by about 90 degrees.
52 
53  */
54 
55 #ifndef __WOMERSLEY_HPP
56 #define __WOMERSLEY_HPP 1
57 
58 #include <complex>
59 
60 #include <lifev/core/LifeV.hpp>
61 #include <lifev/core/filter/GetPot.hpp>
62 
63 
64 
65 namespace LifeV
66 {
67 
68 class Womersley
69 {
70 public:
71  static Real f ( const Real& t, const Real& x, const Real& y,
72  const Real& z, const ID& i );
73 
74  static Real xexact ( const Real& t, const Real& x, const Real& y,
75  const Real& z, const ID& i );
76  static Real uexact ( const Real& t, const Real& x, const Real& y,
77  const Real& z, const ID& i );
78  static Real pexact ( const Real& t, const Real& x, const Real& y,
79  const Real& z, const ID& i );
80 
81  // Initial velocity
82  static Real x0 ( const Real& t, const Real& x, const Real& y,
83  const Real& z, const ID& i );
84 
85  static Real u0 ( const Real& t, const Real& x, const Real& y,
86  const Real& z, const ID& i );
87 
88  static Real p0 ( const Real& t, const Real& x, const Real& y,
89  const Real& z, const ID& i );
90 
91  static Real grad_u ( const UInt& icoor, const Real& t, const Real& x, const Real& y,
92  const Real& z, const ID& i );
93 
94  static Real fNeumann ( const Real& t, const Real& x, const Real& y,
95  const Real& z, const ID& i );
96 
97  static Real normalVector ( const Real& t, const Real& x, const Real& y,
98  const Real& z, const ID& i );
99 
100  static Real fShearStress ( const Real& t, const Real& x, const Real& y,
101  const Real& z, const ID& i );
102 
103  static Real fWallShearStress ( const Real& t, const Real& x, const Real& y,
104  const Real& z, const ID& i );
105  static void setParamsFromGetPot ( const GetPot& dataFile );
106  static void showMe();
107 
108 
109 private:
110 
112  static Real S_mu;
113  static Real S_nu;
114  static Real S_D;
115  static Real S_T;
116  static Real S_rho;
117  static Real S_W0;
118  static Real S_L;
119  static Real S_A;
120  static Real S_w;
121  static std::complex<Real> S_cj1, S_cy0, S_cy1, S_cj0p, S_cj1p, S_cy0p, S_cy1p , S_z1, S_b1 , S_ii, S_wi;
122 }; // class Womersley
123 
124 } // namespace LifeV
125 
126 #endif /* __WOMERSLEY_HPP */
static Real S_mu
Definition: Womersley.hpp:112
static Real S_T
Definition: Womersley.hpp:115
static std::complex< Real > S_cj0p
Definition: Womersley.hpp:121
static Real S_w
Definition: Womersley.hpp:120
static std::complex< Real > S_cj1p
Definition: Womersley.hpp:121
static std::complex< Real > S_cy0
Definition: Womersley.hpp:121
static std::complex< Real > S_wi
Definition: Womersley.hpp:121
static Real pexact(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:69
static std::complex< Real > S_cy1p
Definition: Womersley.hpp:121
static std::complex< Real > S_cy1
Definition: Womersley.hpp:121
int32_type Int
Generic integer data.
Definition: LifeV.hpp:188
static std::complex< Real > S_cj1
Definition: Womersley.hpp:121
static Real fNeumann(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:184
static Real S_nu
Definition: Womersley.hpp:113
static std::complex< Real > S_z1
Definition: Womersley.hpp:121
static Real fWallShearStress(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:291
static Real x0(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:166
uint32_type ID
IDs.
Definition: LifeV.hpp:194
static Real S_L
Definition: Womersley.hpp:118
static std::complex< Real > S_b1
Definition: Womersley.hpp:121
static std::complex< Real > S_cy0p
Definition: Womersley.hpp:121
static Real u0(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:172
static Real S_D
Definition: Womersley.hpp:114
static Real f(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:127
double Real
Generic real data.
Definition: LifeV.hpp:175
static Real S_rho
Definition: Womersley.hpp:116
static std::complex< Real > S_ii
Definition: Womersley.hpp:121
static Real S_A
Definition: Womersley.hpp:119
static void setParamsFromGetPot(const GetPot &dataFile)
Definition: Womersley.cpp:330
static Real fShearStress(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:252
static void showMe()
Definition: Womersley.cpp:349
static Real grad_u(const UInt &icoor, const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:74
static Real xexact(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:143
static Real S_W0
Definition: Womersley.hpp:117
static Real normalVector(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:225
static Real p0(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:178
static Real uexact(const Real &t, const Real &x, const Real &y, const Real &z, const ID &i)
Definition: Womersley.cpp:48
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191
static Int S_flagStrain
Definition: Womersley.hpp:111