LifeV
MultiscaleInterface.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 File containing the Multiscale Interface for Fluid problems
30  *
31  * @date 31-03-2011
32  * @author Cristiano Malossi <cristiano.malossi@epfl.ch>
33  *
34  * @maintainer Cristiano Malossi <cristiano.malossi@epfl.ch>
35  */
36 
37 #ifndef MultiscaleInterface_H
38 #define MultiscaleInterface_H 1
39 
40 #include <lifev/multiscale/framework/MultiscaleDefinitions.hpp>
41 
42 namespace LifeV
43 {
44 namespace Multiscale
45 {
46 
47 //! MultiscaleInterface - The multiscale interface for fluid problems
48 /*!
49  * @author Cristiano Malossi
50  *
51  * @see Full description of the Geometrical Multiscale Framework: \cite Malossi-Thesis
52  * @see Methodology: \cite Malossi2011Algorithms \cite Malossi2011Algorithms1D \cite Malossi2011Algorithms3D1DFSI \cite BlancoMalossi2012
53  * @see Applications: \cite Malossi2011Algorithms3D1DFSIAortaIliac \cite LassilaMalossi2012IdealLeftVentricle \cite BonnemainMalossi2012LVAD
54  *
55  * The MultiscaleInterface class provides a general and abstract interface for the
56  * coupling of fluid problems.
57  */
59 {
60 public:
61 
62  //! @name Type definitions
63  //@{
64 
65  typedef std::function< Real ( const Real&, const Real&, const Real&, const Real&, const ID& ) > function_Type;
66 
67  //@}
68 
69 
70  //! @name Constructors & Destructor
71  //@{
72 
73  //! The main constructor.
74  explicit MultiscaleInterface() {}
75 
76  //! Destructor
77  virtual ~MultiscaleInterface() {}
78 
79  //@}
80 
81 
82  //! @name Multiscale Interface Virtual Methods
83  //@{
84 
85  //! Impose the flow rate on a specific interface of the model
86  /*!
87  * @param boundaryID ID of the boundary interface
88  * @param function boundary condition function
89  */
90  virtual void imposeBoundaryFlowRate ( const multiscaleID_Type& boundaryID, const function_Type& function ) = 0;
91 
92  //! Impose the integral of the mean normal stress on a specific boundary interface of the model
93  /*!
94  * @param boundaryID ID of the boundary interface
95  * @param function boundary condition function
96  */
97  virtual void imposeBoundaryMeanNormalStress ( const multiscaleID_Type& boundaryID, const function_Type& function ) = 0;
98 
99  //! Impose the integral of the mean total normal stress on a specific boundary interface of the model
100  /*!
101  * @param boundaryID ID of the boundary interface
102  * @param function boundary condition function
103  */
104  virtual void imposeBoundaryMeanTotalNormalStress ( const multiscaleID_Type& boundaryID, const function_Type& function ) = 0;
105 
106  //! Impose the area on a specific boundary interface of the model
107  /*!
108  * @param boundaryID ID of the boundary interface
109  * @param function boundary condition function
110  */
111  virtual void imposeBoundaryArea ( const multiscaleID_Type& boundaryID, const function_Type& function ) = 0;
112 
113  //! Get the flow rate on a specific boundary interface of the model
114  /*!
115  * @param boundaryID ID of the boundary interface
116  * @return flow rate value
117  */
118  virtual Real boundaryFlowRate ( const multiscaleID_Type& boundaryID ) const = 0;
119 
120  //! Get the integral of the mean normal stress on a specific boundary interface of the model
121  /*!
122  * @param boundaryID ID of the boundary interface
123  * @return mean normal stress value
124  */
125  virtual Real boundaryMeanNormalStress ( const multiscaleID_Type& boundaryID ) const = 0;
126 
127  //! Get the integral of the mean total normal stress on a specific boundary interface of the model
128  /*!
129  * @param boundaryID ID of the boundary interface
130  * @return mean total normal stress value
131  */
132  virtual Real boundaryMeanTotalNormalStress ( const multiscaleID_Type& boundaryID ) const = 0;
133 
134  //! Get the area on a specific boundary interface of the model
135  /*!
136  * @param boundaryID ID of the boundary interface
137  * @return area value
138  */
139  virtual Real boundaryArea ( const multiscaleID_Type& boundaryID ) const = 0;
140 
141  //! Get the variation of the flow rate (on a specific boundary interface) using the linear model
142  /*!
143  * @param boundaryID ID of the boundary interface
144  * @param solveLinearSystem a flag to which determine if the linear system has to be solved
145  * @return variation of the flow rate
146  */
147  virtual Real boundaryDeltaFlowRate ( const multiscaleID_Type& boundaryID, bool& solveLinearSystem ) = 0;
148 
149  //! Get the variation of the integral of the mean normal stress (on a specific boundary interface) using the linear model
150  /*!
151  * @param boundaryID ID of the boundary interface
152  * @param solveLinearSystem a flag to which determine if the linear system has to be solved
153  * @return variation of the mean normal stress
154  */
155  virtual Real boundaryDeltaMeanNormalStress ( const multiscaleID_Type& boundaryID, bool& solveLinearSystem ) = 0;
156 
157  //! Get the variation of the integral of the mean total normal stress (on a specific boundary interface) using the linear model
158  /*!
159  * @param boundaryID ID of the boundary interface
160  * @param solveLinearSystem a flag to which determine if the linear system has to be solved
161  * @return variation of the mean total normal stress
162  */
163  virtual Real boundaryDeltaMeanTotalNormalStress ( const multiscaleID_Type& boundaryID, bool& solveLinearSystem ) = 0;
164 
165  //! Get the variation of the integral of the area (on a specific boundary interface) using the linear model
166  /*!
167  * @param boundaryID ID of the boundary interface
168  * @param solveLinearSystem a flag to which determine if the linear system has to be solved
169  * @return variation of the area
170  */
171  virtual Real boundaryDeltaArea ( const multiscaleID_Type& boundaryID, bool& solveLinearSystem ) = 0;
172 
173  //@}
174 
175 private:
176 
177  //! @name Unimplemented Methods
178  //@{
179 
180  MultiscaleInterface ( const MultiscaleInterface& interface );
181 
182  MultiscaleInterface& operator= ( const MultiscaleInterface& interface );
183 
184  //@}
185 };
186 
187 } // Namespace multiscale
188 } // Namespace LifeV
189 
190 #endif /* MultiscaleInterface_H */
std::function< Real(const Real &, const Real &, const Real &, const Real &, const ID &) > function_Type
MultiscaleInterface & operator=(const MultiscaleInterface &interface)
virtual Real boundaryDeltaMeanNormalStress(const multiscaleID_Type &boundaryID, bool &solveLinearSystem)=0
Get the variation of the integral of the mean normal stress (on a specific boundary interface) using ...
virtual Real boundaryDeltaArea(const multiscaleID_Type &boundaryID, bool &solveLinearSystem)=0
Get the variation of the integral of the area (on a specific boundary interface) using the linear mod...
void updateInverseJacobian(const UInt &iQuadPt)
virtual void imposeBoundaryArea(const multiscaleID_Type &boundaryID, const function_Type &function)=0
Impose the area on a specific boundary interface of the model.
virtual void imposeBoundaryFlowRate(const multiscaleID_Type &boundaryID, const function_Type &function)=0
Impose the flow rate on a specific interface of the model.
virtual Real boundaryMeanTotalNormalStress(const multiscaleID_Type &boundaryID) const =0
Get the integral of the mean total normal stress on a specific boundary interface of the model...
virtual void imposeBoundaryMeanTotalNormalStress(const multiscaleID_Type &boundaryID, const function_Type &function)=0
Impose the integral of the mean total normal stress on a specific boundary interface of the model...
virtual void imposeBoundaryMeanNormalStress(const multiscaleID_Type &boundaryID, const function_Type &function)=0
Impose the integral of the mean normal stress on a specific boundary interface of the model...
virtual Real boundaryFlowRate(const multiscaleID_Type &boundaryID) const =0
Get the flow rate on a specific boundary interface of the model.
MultiscaleInterface(const MultiscaleInterface &interface)
double Real
Generic real data.
Definition: LifeV.hpp:175
virtual Real boundaryDeltaMeanTotalNormalStress(const multiscaleID_Type &boundaryID, bool &solveLinearSystem)=0
Get the variation of the integral of the mean total normal stress (on a specific boundary interface) ...
virtual Real boundaryDeltaFlowRate(const multiscaleID_Type &boundaryID, bool &solveLinearSystem)=0
Get the variation of the flow rate (on a specific boundary interface) using the linear model...
virtual Real boundaryMeanNormalStress(const multiscaleID_Type &boundaryID) const =0
Get the integral of the mean normal stress on a specific boundary interface of the model...
MultiscaleInterface - The multiscale interface for fluid problems.
virtual Real boundaryArea(const multiscaleID_Type &boundaryID) const =0
Get the area on a specific boundary interface of the model.