LifeV
MonolithicBlockComposedDND.hpp
Go to the documentation of this file.
1 //@HEADER
2 /*
3 ************************************************************************
4 
5  This file is part of the LifeV Applications.
6  Copyright (C) 2001-2010 EPFL, Politecnico di Milano, INRIA
7 
8  This library is free software; you can redistribute it and/or modify
9  it under the terms of the GNU Lesser General Public License as
10  published by the Free Software Foundation; either version 2.1 of the
11  License, or (at your option) any later version.
12 
13  This library is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21  USA
22 
23 ************************************************************************
24 */
25 //@HEADER
26 
27 /*!
28  @file
29  @brief Composed preconditioner for a three blocks coupled problem
30 
31  @author Paolo Crosetto <crosetto@iacspc70.epfl.ch>
32  @date 09 Aug 2010
33 
34  Solves a Dirichlet--Neumann--Dirichlet system for the three blocks
35  */
36 
37 #ifndef COMPOSEDDND_H
38 #define COMPOSEDDND_H 1
39 
40 #include <lifev/core/LifeV.hpp>
41 #include <lifev/fsi/solver/MonolithicBlockComposedDN.hpp>
42 
43 namespace LifeV
44 {
45 
46 //! MonolithicBlockComposedDND - Modular preconditioner for (e.g.) geometry implicit monolithic FSI, three factors splitting
47 /*!
48  @author Paolo Crosetto
49 
50 Class implementing a modular preconditioner for FSI with the fluid geometry implicit. The preconditioner si split into
51 three factor, which can be recomputed every time or reused.
52  */
53 class MonolithicBlockComposedDND : public MonolithicBlockComposedDN
54 {
55 public:
56 
57  //! @name Public Types
58  //@{
59 
60  typedef MonolithicBlockComposedDN super_Type;
61 
62  //@}
63  //! @name Constructors and destructor
64  //@{
65 
66  MonolithicBlockComposedDND ( const std::vector<Int>& flag, const std::vector<Int>& order ) :
67  super_Type (flag, order),
68  M_swapped (false)
69  {
70  }
71 
72  ~MonolithicBlockComposedDND() {}
73 
74  //@}
75  //!@name Public Methods
76  //@{
77 
78  void blockAssembling( );
79 
80  //@}
81 
82 
83 
84  static MonolithicBlock* createComposedDNDGI()
85  {
86  const Int order[] = { MonolithicBlockComposed::mesh, MonolithicBlockComposed::solid, MonolithicBlockComposed::fluid };
87  const Int couplingsDNGI2[] = { 0, 7, 0 };
88  const std::vector<Int> couplingVectorDNGI2 (couplingsDNGI2, couplingsDNGI2 + 3);
89  const std::vector<Int> orderVector (order, order + 3);
90  return new MonolithicBlockComposedDND ( couplingVectorDNGI2, orderVector );
91  }
92 
93  static MonolithicBlock* createComposedDND2GI()
94  {
95  const Int order[] = { MonolithicBlockComposed::mesh, MonolithicBlockComposed::fluid , MonolithicBlockComposed::solid};
96  const Int couplingsDN2GI2[] = { 8, 6, 0 };
97  const std::vector<Int> couplingVectorDN2GI2 (couplingsDN2GI2, couplingsDN2GI2 + 3);
98  const std::vector<Int> orderVector (order, order + 3);
99  return new MonolithicBlockComposedDND ( couplingVectorDN2GI2, orderVector );
100  }
101 
102 
103 private:
104 
105  //!@name Protected Members
106  //@{
107 
108  bool M_swapped;
109 
110  //@}
111 
112 };
113 
114 } // Namespace LifeV
115 
116 #endif /* COMPOSEDDNN_H */