LifeV
DarcySolverTransientNonLinear.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 the LifeV library
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
21  License along with this library; if not, see <http://www.gnu.org/licenses/>
22 
23 
24 *******************************************************************************
25 */
26 //@HEADER
27 
28 /*!
29  * @file
30  @brief This file contains a non-linear and (possibly) degenerate permeability
31  term Darcy equation using expanded formulation
32 
33  @date 05/2010
34  @author A. Fumagalli <alessio.fumagalli@mail.polimi.it>
35 
36  @contributor M. Kern <michel.kern@inria.fr>
37  @maintainer M. Kern <michel.kern@inria.fr>
38  */
39 
40 #ifndef _DARCYSOLVERTRANSIENTNONLINEAR_H_
41 #define _DARCYSOLVERTRANSIENTNONLINEAR_H_ 1
42 
43 #include <lifev/darcy/solver/DarcySolverNonLinear.hpp>
44 #include <lifev/darcy/solver/DarcySolverTransient.hpp>
45 
46 // LifeV namespace.
47 namespace LifeV
48 {
49 //! @class DarcySolverTransientNonLinear This class implements a non-linear transient mixed-hybrid FE Darcy solver.
50 /*!
51  @author A. Fumagalli <alessio.fumagalli@mail.polimi.it>
52 
53  This class implements a non-linear and transient Darcy solver.
54  <br>
55  <br>
56  The classical time dependant, non-linear, Darcy formulation is a couple of differential equations of first order with
57  the unknowns \f$ p \in C^1 (\Omega ) \f$, being the pressure or the primal unknown,
58  and \f$ \sigma \in (C^1( \Omega ) )^n \f$, being the Darcy velocity or the flux or the dual unknown,
59  such that
60  \f[
61  \left\{
62  \begin{array}{l l l}
63  \Lambda^{-1}(t, p) \sigma + \nabla p = f_v(t) & \mathrm{in} & \Omega \times [0, T]\,, \vspace{0.2cm} \\
64  \displaystyle \phi \frac{\partial p}{\partial t} + \nabla \cdot \sigma + \pi(t) p - f(t) = 0 & \mathrm{in} & \Omega \times [0, T]\,, \vspace{0.2cm} \\
65  p = g_D(t) & \mathrm{on} & \Gamma_D \times [0, T]\,,\vspace{0.2cm} \\
66  \sigma \cdot n + h(t) p = g_R(t) & \mathrm{on} & \Gamma_R \times [0, T]\,. \vspace{0.2cm} \\
67  p(0) = p_0 & \mathrm{in} & \Omega
68  \end{array}
69  \right.
70  \f]
71  The data in the system are:
72  <ul>
73  <li> \f$ p_0 \f$ the primal variable at initial time; </li>
74  <li> \f$ \phi \f$ the mass term, which does not depend on time; </li>
75  <li> \f$ \Lambda(t, p) \f$ the non linear in \f$ p \f$ permeability tensor; </li>
76  <li> \f$ f(t) \f$ the scalar source term; </li>
77  <li> \f$ f_v(t) \f$ the vector source term; </li>
78  <li> \f$ \pi(t) \f$ the reaction coefficient; </li>
79  <li> \f$ \Gamma_D \f$ the subset of the boundary of \f$ \Omega \f$ with Dirichlet boundary conditions; </li>
80  <li> \f$ g_D(t) \f$ Dirichlet boundary condition data; </li>
81  <li> \f$ \Gamma_R \f$ that is the part of the boundary of \f$ \Omega \f$ with Robin, or Neumann, boundary conditions; </li>
82  <li> \f$ h(t) \f$ and \f$ g_R(t) \f$ Robin boundary condition data; </li>
83  </ul>
84  We suppose that \f$ \partial \Omega = \Gamma_D \cup \Gamma_R \f$ and \f$ \Gamma_D \cap \Gamma_R = \emptyset \f$.
85  <BR>
86  Using the hybridization procedure, and introducing a new variable, we may split the problem from
87  the entire domain to problems in each elements of the triangulation \f$ \mathcal{T}_h \f$, then we may write
88  the weak formulation for the dual problem.
89  The new variable is the hybrid unknown \f$ \lambda \f$, e.g. "the trace" of pressure of the primal unknown,
90  it is the Lagrange multipliers forcing the continuity of the flux across each faces or edges in the triangulation.
91  We introduce the following functional spaces, the first is the space of the primal variable, the third for
92  the dual variable, the fourth for the hybrid variable.
93  \f[
94  \begin{array}{l}
95  V = L^2 (\Omega ) \,,\vspace{0.2cm} \\
96  H(div, K) = \displaystyle \left\{ \tau \in ( L^2(K))^n : \nabla \cdot \tau \in L^2(K)\right\}\,, \vspace{0.2cm}\\
97  Z = \displaystyle \left\{ \tau \in L^2(\Omega) : \tau\vert_K \in H(div, K) \, \forall K \in \mathcal{T}_h \right\}\,, \vspace{0.2cm}\\
98  \Lambda = \displaystyle \left\{ \lambda \in \prod_{K \in \mathcal{T}_h} H^{1/2} (\partial K): \lambda_K = \lambda_{K'} \,\, \mathrm{on} \,\, e_{K-K'} \, \forall K \in \mathcal{T}_h,\, \lambda = g_D \,\, \mathrm{on} \,\, \Gamma_D \right\}\,.
99  \end{array}
100  \f]
101  Introducing the following bilinear forms, operator and functionals
102  \f[
103  \begin{array}{l l}
104  a(\sigma(t), \tau, p) = \displaystyle \sum_{K \in \mathcal{T}_h}\int_K \Lambda^{-1}(t, p) \sigma \cdot \tau \,, &
105  b(p, \tau) = \displaystyle -\sum_{K \in \mathcal{T}_h} \int_K p \nabla \cdot \tau\,, \vspace{0.2cm}\\
106  c(\lambda(t), \tau) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_{\partial K} \lambda(t) \tau \cdot n\,,&
107  d(p(t), q) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_{\partial K} \pi(t) p(t) q \,,\vspace{0.2cm}\\
108  h(\lambda(t), \mu) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_{\partial K \cap \Gamma_R} h \mu \lambda(t) \,,&
109  m(p(t), v) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_K \phi p(t) v \,,\vspace{0.2cm}\\
110  F(v) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_K f v\,,&
111  F_v(\tau) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_K f_v(t) \tau \,, \vspace{0.2cm}\\
112  G(\mu) = \displaystyle \sum_{K \in \mathcal{T}_h} \int_{\partial K \cap \Gamma_R} g \mu\,,
113  \end{array}
114  \f]
115  we obtain the Darcy problem in the weak form: find \f$ (\sigma(t), \, p(t), \, \lambda(t)) \in Z \times V \times \Lambda \f$ such that
116  \f[
117  \left\{
118  \begin{array}{l l}
119  a(\sigma(t), \tau, p(t)) + b(p(t), \tau) + c(\lambda(t), \tau) = F_v(\tau) \,, & \forall \tau \in Z \,,\vspace{0.2cm}\\
120  \displaystyle -\frac{\partial}{\partial t} m(p(t), v) + b(v, \sigma) - d(p(t), v)= -F(v)\,, & \forall v \in V \,,\vspace{0.2cm}\\
121  c(\mu, \sigma(t)) + h(\lambda(t), \mu) = G(\mu) \,, & \forall \mu \in \Lambda\,.
122  \end{array}
123  \right.
124  \f]
125  At the semi-discrete level only space discretization is performed, we introduce the polynomial space, of degree \f$ r \f$, that approximate the finite dimensional
126  spaces introduced above \f$ V_h \subset V \f$, \f$ Z_h \subset Z \f$ and \f$\Lambda_h \subset \Lambda \f$
127  \f[
128  \begin{array}{l}
129  V_h = \displaystyle \left\{ v_h \in V: v_h|_K \in P_r (K)\, \forall K \in \mathcal{T}_h \right\}\,, \vspace{0.2cm}\\
130  Z_h = \displaystyle \left\{ \tau_h \in Z: \tau_h|_K \in RT_r(K) \, \forall K \in \mathcal{T}_h \right\} \,, \vspace{0.2cm} \\
131  \Lambda_h = \displaystyle \left\{ \lambda_h \in \Lambda: \lambda_h|_{\partial K} \in R_r( \partial K ) \, \forall K \in \mathcal{T}_h\right\}\,,
132  \end{array}
133  \f]
134  where \f$ P_r(K) \f$ is the space of polynomial of degree \f$ r \f$ in the element \f$ K \f$, \f$ RT_r(K) \f$ is the space of
135  polynomial of Raviart-Thomas of degrees \f$ r \f$ in the element \f$ K \f$ and \f$ R_r(\partial K) \f$ is the space of polynomial of
136  degree \f$ r \f$ definite on each of the boundary of the element \f$ K \f$ and discontinuous from one edge to the other.
137  <br>
138  The finite dimensional problem is: find \f$ (\sigma_h,\,, p_h, \, \lambda_h) \in Z_h \times V_h \times \Lambda_h \f$ such that
139  \f[
140  \left\{
141  \begin{array}{l l}
142  a(\sigma_h(t), \tau_h, p_h(t)) + b(p_h(t), \tau_h) + c(\lambda_h(t), \tau_h) = F_v(\tau_h) \,, & \forall \tau_h \in Z_h \,,\vspace{0.2cm}\\
143  \displaystyle -\frac{\partial}{\partial t} m(p_h(t),v_h) + b(v_h, \sigma_h(t)) - d(p_h(t), v_h) = -F(v_h)\,, & \forall v_h \in V_h \,,\vspace{0.2cm}\\
144  c(\mu_h, \sigma_h(t)) + h(\lambda_h(t(, \mu_h) = G(\mu_h) \,, & \forall \mu_h \in \Lambda_h\,.
145  \end{array}
146  \right.
147  \f]
148  To obatin a fully discrete problem we discretize the time derivative via BDF (backward differentiation formulae) schemes of order \f$ m \f$,
149  with \f$ \Delta t \f$ as time step. Choosing
150  \f[
151  p_h^0 = \prod_{V_h} p_0
152  \f]
153  we obtain the following system for each \f$ n = 0, \ldots, N \f$, with \f$ N = \frac{T}{\Delta t} \f$
154  \f[
155  \left\{
156  \begin{array}{l l}
157  a(\sigma_h^{n+1}, \tau_h, p_h^{n+1}) + b(p_h^{n+1}, \tau_h) + c(\lambda_h^{n+1}, \tau_h) = F_v(\tau_h)\,, & \forall \tau_h \in Z_h \,,\vspace{0.2cm}\\
158  \displaystyle -\frac{\alpha_0}{\Delta t} m(p_h^{n+1},v_h) + b(v_h, \sigma_h^{n+1}) - d(p_h^{n+1}, v_h)= -F(v_h) - \frac{1}{\Delta t} m \left( \sum_{i=1}^m \alpha_i p_h^{n+1-i}, v_h \right) \,, & \forall v_h \in V_h \,,\vspace{0.2cm}\\
159  c(\mu_h, \sigma_h^{n+1}) + h(\lambda_h^{n+1}, \mu_h) = G(\mu_h) \,, & \forall \mu_h \in \Lambda_h\,.
160  \end{array}
161  \right.
162  \f]
163  To solve the non-linearity we use a fixed point scheme based on the relative difference between two consecutive iterations
164  of the primal variable. We start from the, user defined, function \f$ p^{n+1,0} \f$ and solve the linearized problem for \f$ k \geq 1 \f$:
165  find \f$ (\sigma_h^{n+1,k},\, p_h^{n+1,k}, \, \lambda_h^{n+1,k}) \in Z_h \times V_h \times \Lambda_h \f$ such that
166  \f[
167  \left\{
168  \begin{array}{l l}
169  a(\sigma_h^{n+1,k}, \tau_h, p_h^{n+1,k-1}) + b(p_h^{n+1,k}, \tau_h) + c(\lambda_h^{n+1,k}, \tau_h) = F_v(\tau_h)\,, & \forall \tau_h \in Z_h \,,\vspace{0.2cm}\\
170  \displaystyle -\frac{\alpha_0}{\Delta t} m(p_h^{n+1,k},v_h) + b(v_h, \sigma_h^{n+1,k}) - d(p_h^{n+1,k}, v_h)= -F(v_h)
171  - \frac{1}{\Delta t} m\left( \sum_{i=1}^m \alpha_i p_h^{n+1-i}, v_h \right) \,, & \forall v_h \in V_h \,,\vspace{0.2cm}\\
172  c(\mu_h, \sigma_h^{n+1,k}) + h(\lambda_h^{n+1,k}, \mu_h) = G(\mu_h) \,, & \forall \mu_h \in \Lambda_h\,.
173  \end{array}
174  \right.
175  \f]
176  At each iteration, to solve the linearized problem we use the static condensation procedure, i.e. the unknowns in the discrete
177  weak system are not independent and \f$ p_K \f$, \f$\sigma_K \f$ may be written in function of
178  \f$ \lambda_K \f$ alone. We introduce the following local matrices
179  \f[
180  \begin{array}{l l l}
181  \left[ A(p_K^{n+1,k-1}) \right]_{ij} = \displaystyle \int_K \Lambda^{-1}(t^{n+1}, p^{n+1,k-1}) \psi_j \cdot \psi_i \,, &
182  \left[ B \right]_{ij} = - \displaystyle \int_K \phi_j \nabla \cdot \psi_i \,, &
183  \left[ C \right]_{ij} = \displaystyle \int_{\partial K} \xi_i \psi_j \cdot n \,, \vspace{0.2cm} \\
184  \left[ D \right]_{ij} = \displaystyle \int_K \pi(t) \phi_j \phi_i\,, &
185  \left[ H \right]_{ij} = \displaystyle \int_{\partial K \cap \Gamma_R} h \xi_i \xi_j\,, &
186  \left[ M \right]_{ij} = \displaystyle \int_{K} \phi \phi_j \phi_i \,, \vspace{0.2cm} \\
187  \left[ F \right]_{j} = \displaystyle \int_K f \phi_j\,, &
188  \left[ F_v \right]_{j}= \displaystyle \int_K f_v( (n+1) \Delta t) \cdot \psi_j\,, &
189  \left[ G \right]_{j} = \displaystyle \int_{\partial K \cap \Gamma_R } g \xi_j\,,
190  \end{array}
191  \f]
192  where we avoid to write the dependence on the triangle \f$ K \f$ in all the matrices and vectors. <BR>
193  The local matrix formulation of the finite dimensional problem is
194  \f[
195  \left\{
196  \begin{array}{l}
197  A(p^{n+1,k-1}) \sigma_K^{n+1,k} + B p_K^{n+1,k} + C \lambda_K^{n+1,k} = F_v\,, \vspace{0.2cm} \\
198  \displaystyle -\frac{\alpha_0}{\Delta t} M p_K^{n+1,k} +B^T \sigma_K^{n+1,k} - D p_K^{n+1,k}= -F
199  - \frac{1}{\Delta t} M \sum_{i=1}^m \alpha_i p_K^{n+1-i} \,, \vspace{0.2cm}\\
200  C^T \sigma_K^{n+1,k} + H \lambda_K^{n+1,k} = G\,.
201  \end{array}
202  \right.
203  \f]
204  Or alternatively
205  \f[
206  \begin{array}{l l l}
207  \left[
208  \begin{array}{c c c}
209  A(p_K^{n+1,k-1}) & B & C \vspace{0.2cm} \\
210  B^T & \displaystyle -\frac{\alpha_0}{\Delta t} M -D& 0 \vspace{0.2cm} \\
211  C^T & 0 & H
212  \end{array}
213  \right] \, \cdot &
214  \left[
215  \begin{array}{c}
216  \sigma_K^{n+1,k} \vspace{0.2cm}\\
217  p_K^{n+1,k} \vspace{0.2cm}\\
218  \lambda_K^{n+1,K}
219  \end{array}
220  \right] \, &
221  =
222  \left[
223  \begin{array}{c}
224  F_v \vspace{0.2cm}\\
225  \displaystyle -F - \frac{1}{\Delta t} M \sum_{i=1}^m \alpha_i p_K^{n+1-i} \vspace{0.2cm}\\
226  G
227  \end{array}
228  \right]\,.
229  \end{array}
230  \f]
231  Introducing the local hybrid matrix and local hybrid right hand side
232  \f[
233  \begin{array}{l}
234  \displaystyle L_K = -C^T A^{-1}( p_k^{n+1,k-1}) C + C^T A^{-1}( p_k^{n+1,k-1}) B \left( \frac{\alpha_0}{\Delta t} M + B^T A^{-1}( p_k^{n+1,k-1}) B +
235  D \right)^{-1} B^T A^{-1}( p_k^{n+1,k-1}) C + H \,, \vspace{0.2cm} \\
236  \displaystyle r_K = G + C^T A^{-1}( p_k^{n+1,k-1}) B \left( \frac{\alpha_0}{\Delta t} + B^T A^{-1}( p_k^{n+1,k-1}) B + D\right)^{-1} F
237  + C^T A^{-1}( p_k^{n+1,k-1}) B \left( \frac{\alpha_0}{\Delta t}M + B^T A^{-1}( p_k^{n+1,k-1}) B + D \right)^{-1} B^T A^{-1}( p_k^{n+1,k-1}) F_v
238  - C^T A^{-1}( p_k^{n+1,k-1}) F_v \,,
239  \end{array}
240  \f]
241  Imposing that at each edge or face the hybrid unknown is single value we obtain a linear system for the hybrid unknown
242  \f[
243  L \lambda^{n+1,k} = r \,.
244  \f]
245  We recover the primal and dual variable as a post-process from the hybrid variable at element level, so we have
246  \f[
247  \begin{array}{l}
248  \displaystyle p_K^{n+1,k} = \left( \frac{\alpha_0}{\Delta t} M + B^T A^{-1}( p_k^{n+1,k-1}) B + D \right)^{-1}
249  \left( F + \frac{1}{\Delta t} M \sum_{i=1}^m \alpha_i p_K^{n+1-i} - B^T A^{-1}( p_k^{n+1,k-1}) C \lambda_K^{n+1,k} \right)\,, \vspace{0.2cm} \\
250  \displaystyle \sigma_K^{n+1,k} = -A^{-1} ( p_k^{n+1,k-1})( B p_K^{n+1,k} + C \lambda_K^{n+1,k} ) \,.
251  \end{array}
252  \f]
253  @note In the code we do not use the matrix \f$ H \f$ and the vector \f$ G \f$, because all the boundary
254  conditions are imposed via BCHandler class.
255  @note Example of usage can be found in darcy_nonlinear and darcy_linear.
256  Coupled with an hyperbolic solver in impes.
257  @todo Insert any scientific publications that use this solver.
258 */
259 template < typename MeshType >
261  :
262 public DarcySolverNonLinear < MeshType >,
263 public DarcySolverTransient < MeshType >
264 {
265 
266 public:
267 
268  //! @name Public Types
269  //@{
270 
271  //! Typedef for mesh template.
272  typedef MeshType mesh_Type;
273 
274  //! Self typedef.
276 
277  //! Darcy solver class.
279 
280  //! Darcy non linear solver class.
282 
283  //! Darcy transient solver class.
285 
286  //! Typedef for the data type.
288 
289  //! Shared pointer for the data type.
291 
292  //! Shared pointer to a matrix value function.
294 
295  //! Distributed vector.
297 
298  //@}
299 
300  //! @name Constructors & destructor
301  //@{
302 
303  //! Constructor for the class.
305 
306  //! Virtual destructor.
308 
309  //@}
310 
311  //! @name Methods
312  //@{
313 
314  //! Set up the linear solver, the preconditioner for the linear system and the exporter to save the solution.
315  virtual void setup ();
316 
317  //! Solve the problem calling the non linear solver.
318  virtual void solve ();
319 
320  //@}
321 
322  //! @name Set methods
323  //@{
324 
325  //! Set the inverse of diffusion tensor
326  /*!
327  Set the inverse of diffusion tensor.
328  @param invPerm Inverse of the permeability tensor for the problem.
329  */
331  {
332  // Call the set inverse permeability of the non-linear Darcy solver
333  darcySolverNonLinear_Type::setInversePermeability ( invPerm );
334  }
335 
336  //@}
337 
338 protected:
339 
340  //! @name Private Constructors
341  //@{
342 
343  //! Inhibited copy constructor.
345 
346  //@}
347 
348  //! @name Private Operators
349  //@{
350 
351  //! Inhibited assign operator.
353 
354  //@}
355 
356  //! @name Protected Methods
357  //@{
358 
359  //! Update all problem variables
360  /*!
361  Update all the variables of the problem before the construction of
362  the global hybrid matrix, e.g. reset the global hybrid matrix.
363  It is principally used for a time dependent derived class.
364  */
365  virtual void resetVariables ()
366  {
367  darcySolverNonLinear_Type::resetVariables ();
368  }
369 
370  //! Compute elementary matrices
371  /*!
372  Locally update the current finite element for the dual finite element
373  space, then compute the Hdiv mass matrix.
374  @param iElem Id of the current geometrical element.
375  @param elmatMix The local matrix in mixed form.
376  @param elmatReactionTerm The local matrix for the reaction term.
377  */
378  virtual void localMatrixComputation ( const UInt& iElem,
379  MatrixElemental& elmatMix,
380  MatrixElemental& elmatReactionTerm )
381  {
382  darcySolverTransient_Type::localMatrixComputation ( iElem, elmatMix, elmatReactionTerm );
383  }
384 
385  //! Computes local vectors
386  /*!
387  Call the Darc_y solver localVectorComputation method and
388  compute the additional scalar vector for the time dependent term.
389  @param iElem Id of the current geometrical element.
390  @param elvecMix The local vector in mixed form.
391  */
392  virtual void localVectorComputation ( const UInt& iElem,
393  VectorElemental& elvecMix )
394  {
395  darcySolverTransient_Type::localVectorComputation ( iElem, elvecMix );
396  }
397 
398  //@}
399 
400 }; // class DarcySolverTransientNonLinear
401 
402 //
403 // IMPLEMENTATION
404 //
405 
406 // ===================================================
407 // Constructors & Destructor
408 // ===================================================
409 
410 // Complete constructor.
411 template < typename MeshType >
412 DarcySolverTransientNonLinear < MeshType >::
414  // Standard Darcy solver constructor.
416  // Non-linear Darcy solver constructor.
418  // Transient Darcy solver contructor.
420 {} // Constructor
421 
422 // ===================================================
423 // Public methods
424 // ===================================================
425 
426 // Set up the linear solver and the preconditioner.
427 template < typename MeshType >
428 void
429 DarcySolverTransientNonLinear < MeshType >::
431 {
432  // Call the DarcySolverLinear setup method for setting up the linear solver and preconditioner.
433  darcySolverLinear_Type::setup ();
434 
435  // Call the DarcySolverTransient setup method for setting up the time data.
436  darcySolverTransient_Type::setupTime ();
437 
438  // Call the DarcySolverNonLinear setup method for setting up the non-linear solver.
439  darcySolverNonLinear_Type::setupNonLinear ();
440 } // setup
441 
442 // Solve the problem.
443 template < typename MeshType >
444 void
445 DarcySolverTransientNonLinear < MeshType >::
447 {
448  // Reset the right hand side coming from the time advance scheme.
449  this->M_rhsTimeAdvance.reset ( new vector_Type ( this->M_primalField->getFESpace().map() ) );
450 
451  // Update the RHS
452  this->M_timeAdvance->updateRHSFirstDerivative();
453 
454  // Put in M_rhsTimeAdvance the contribution for the right hand side coming
455  // from the time scheme, without the time step.
456  * (this->M_rhsTimeAdvance) = this->M_timeAdvance->rhsContributionFirstDerivative ();
457 
458  // Solve the problem with the fixed point scheme.
459  this->fixedPoint ();
460 
461 } // solve
462 
463 } // namespace LifeV
464 
465 #endif //_DARCYSOLVERTRANSIENTNONLINEAR_H_
466 
467 // -*- mode: c++ -*-
darcySolverLinear_Type::dataPtr_Type dataPtr_Type
Shared pointer for the data type.
DarcySolverNonLinear< mesh_Type > darcySolverNonLinear_Type
Darcy non linear solver class.
virtual void solve()
Solve the problem calling the non linear solver.
void setInversePermeability(const matrixFctPtr_Type &invPerm)
Set the inverse of diffusion tensor.
DarcySolverTransientNonLinear()
Constructor for the class.
virtual ~DarcySolverTransientNonLinear()
Virtual destructor.
virtual void setup()
Set up the linear solver, the preconditioner for the linear system and the exporter to save the solut...
implements a mixed-hybrid FE Darcy solver for transient problems
darcySolverTransientNonLinear_Type & operator=(const darcySolverTransientNonLinear_Type &)
Inhibited assign operator.
virtual void localMatrixComputation(const UInt &iElem, MatrixElemental &elmatMix, MatrixElemental &elmatReactionTerm)
Compute elementary matrices.
darcySolverLinear_Type::vector_Type vector_Type
Distributed vector.
darcySolverLinear_Type::data_Type data_Type
Typedef for the data type.
darcySolverLinear_Type::matrixFctPtr_Type matrixFctPtr_Type
Shared pointer to a matrix value function.
implements a mixed-hybrid FE Darcy solver.
virtual void localVectorComputation(const UInt &iElem, VectorElemental &elvecMix)
Computes local vectors.
MeshType mesh_Type
Typedef for mesh template.
DarcySolverTransientNonLinear(const darcySolverTransientNonLinear_Type &)
Inhibited copy constructor.
virtual void resetVariables()
Update all problem variables.
DarcySolverTransientNonLinear< mesh_Type > darcySolverTransientNonLinear_Type
Self typedef.
implements a non-linear transient mixed-hybrid FE Darcy solver.
DarcySolverLinear< mesh_Type > darcySolverLinear_Type
Darcy solver class.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191
DarcySolverTransient< mesh_Type > darcySolverTransient_Type
Darcy transient solver class.
implements a non-linear Darcy solver