LifeV
MultiscaleCouplingMeanTotalNormalStress.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 Coupling Stress
30  *
31  * @date 20-10-2009
32  * @author Cristiano Malossi <cristiano.malossi@epfl.ch>
33  *
34  * @maintainer Cristiano Malossi <cristiano.malossi@epfl.ch>
35  */
36 
37 #ifndef MultiscaleCouplingMeanTotalNormalStress_H
38 #define MultiscaleCouplingMeanTotalNormalStress_H 1
39 
40 #include <lifev/multiscale/couplings/MultiscaleCoupling.hpp>
41 
42 #if defined(LIFEV_HAS_ZERODIMENSIONAL)
43 #include <lifev/multiscale/models/MultiscaleModelWindkessel0D.hpp>
44 #include <lifev/multiscale/models/MultiscaleModel0D.hpp>
45 #endif
46 
47 #if defined(LIFEV_HAS_ONEDFSI)
48 #include <lifev/multiscale/models/MultiscaleModelFSI1D.hpp>
49 #endif
50 
51 #if defined(LIFEV_HAS_NAVIERSTOKES)
52 #include <lifev/multiscale/models/MultiscaleModelFluid3D.hpp>
53 #endif
54 
55 #if defined(LIFEV_HAS_FSI)
56 #include <lifev/multiscale/models/MultiscaleModelFSI3D.hpp>
57 #endif
58 
59 namespace LifeV
60 {
61 namespace Multiscale
62 {
63 
64 //! MultiscaleCouplingMeanTotalNormalStress - Stress coupling condition
65 /*!
66  * @author Cristiano Malossi
67  *
68  * @see Full description of the Geometrical Multiscale Framework: \cite Malossi-Thesis
69  * @see Methodology: \cite Malossi2011Algorithms \cite Malossi2011Algorithms1D \cite Malossi2011Algorithms3D1DFSI \cite BlancoMalossi2012
70  * @see Applications: \cite Malossi2011Algorithms3D1DFSIAortaIliac \cite LassilaMalossi2012IdealLeftVentricle \cite BonnemainMalossi2012LVAD
71  *
72  * The MultiscaleCouplingMeanTotalNormalStress class is an implementation of the multiscaleCoupling_Type
73  * for applying Stress coupling conditions on the models.
74  */
76 {
77 public:
78 
79  //! @name Constructors & Destructor
80  //@{
81 
82  //! Constructor
84 
85  //! Destructor
87 
88  //@}
89 
90 
91  //! @name Multiscale PhysicalCoupling Implementation
92  //@{
93 
94  //! Setup the coupling variables number.
95  virtual void setupCouplingVariablesNumber();
96 
97  //! Setup the coupling
98  virtual void setupCoupling();
99 
100  //! Initialize the values of the coupling variables
101  virtual void initializeCouplingVariables();
102 
103  //! Update the coupling
104  /*!
105  * Nothing to do for this coupling.
106  */
107  virtual void updateCoupling() {};
108 
109  //! Compute the local coupling residuals vector
110  virtual void computeCouplingResiduals();
111 
112  //@}
113 
114 protected:
115 
116  //! @name Private Multiscale PhysicalCoupling Implementation
117  //@{
118 
119  //! Build the list of models affected by the perturbation of a local coupling variable
120  /*!
121  * @param localCouplingVariableID id of the perturbed local coupling variable
122  * @param perturbedModelsList list of models affected by the perturbation
123  */
124  virtual void exportListOfPerturbedModels ( const UInt& localCouplingVariableID, multiscaleModelsContainer_Type& perturbedModelsList );
125 
126  //! Insert constant coefficients into the Jacobian matrix
127  /*!
128  * @param jacobian the Jacobian matrix
129  */
131 
132  //! Insert the Jacobian coefficient(s) depending on a perturbation of the model, due to a specific variable (the column)
133  /*!
134  * @param jacobian the Jacobian matrix
135  * @param column the column related to the perturbed variable
136  * @param ID the global ID of the model which is perturbed by the variable
137  * @param solveLinearSystem a flag to which determine if the linear system has to be solved
138  */
139  virtual void insertJacobianDeltaCoefficients ( multiscaleMatrix_Type& jacobian, const UInt& column, const UInt& ID, bool& solveLinearSystem );
140 
141  //@}
142 
143 private:
144 
145  //! @name Unimplemented Methods
146  //@{
147 
149 
151 
152  //@}
153 };
154 
155 //! Factory create function
157 {
158  return new MultiscaleCouplingMeanTotalNormalStress();
159 }
160 
161 } // Namespace Multiscale
162 } // Namespace LifeV
163 
164 #endif /* MultiscaleCouplingMeanTotalNormalStress_H */
virtual void computeCouplingResiduals()
Compute the local coupling residuals vector.
virtual void exportListOfPerturbedModels(const UInt &localCouplingVariableID, multiscaleModelsContainer_Type &perturbedModelsList)
Build the list of models affected by the perturbation of a local coupling variable.
MultiscaleCouplingMeanTotalNormalStress(const MultiscaleCouplingMeanTotalNormalStress &coupling)
MultiscaleCoupling multiscaleCoupling_Type
virtual void setupCouplingVariablesNumber()
Setup the coupling variables number.
MultiscaleCouplingMeanTotalNormalStress & operator=(const MultiscaleCouplingMeanTotalNormalStress &coupling)
void updateInverseJacobian(const UInt &iQuadPt)
MultiscaleCouplingMeanTotalNormalStress - Stress coupling condition.
virtual void initializeCouplingVariables()
Initialize the values of the coupling variables.
virtual void insertJacobianDeltaCoefficients(multiscaleMatrix_Type &jacobian, const UInt &column, const UInt &ID, bool &solveLinearSystem)
Insert the Jacobian coefficient(s) depending on a perturbation of the model, due to a specific variab...
MatrixEpetra< Real > multiscaleMatrix_Type
std::vector< multiscaleModelPtr_Type > multiscaleModelsContainer_Type
virtual void insertJacobianConstantCoefficients(multiscaleMatrix_Type &jacobian)
Insert constant coefficients into the Jacobian matrix.
multiscaleCoupling_Type * createMultiscaleCouplingMeanTotalNormalStress()
Factory create function.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191