root/include/secOrd_op_solutionDriven.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*! \file secOrd_op_solutionDriven.h
   2     \brief Surface operator for the solution driven paper
   3 
   4      Revision history
   5      --------------------------------------------------
   6 
   7           Revised by Christian Power April 2016
   8           Originally written by Christian Power
   9                (power22c@gmail.com) March 2016
  10 
  11      Idea
  12      --------------------------------------------------
  13 
  14      Provides a class that perfoms the Dziuk mean curvature flow
  15      scheme with an additional right-hand side.
  16 
  17 
  18     \author Christian Power
  19     \date 23. April 2016
  20     \copyright Copyright (c) 2016 Christian Power.  All rights reserved.
  21 */
  22 
  23 #ifndef SECORD_OP_SOLUTIONDRIVEN_H
  24 #define SECORD_OP_SOLUTIONDRIVEN_H
  25 
  26 #include <memory>
  27 #include "esfem_fwd.h"
  28 
  29 namespace Esfem{
  30   namespace SecOrd_op{
  31     class Solution_driven{
  32     public:
  33       //! Get PDE parameter, time and growth promoting function \f$u\f$.
  34       /*! Extracts from `Io::Parameter` the parameter \f$ \alpha \f$ 
  35         and \f$ \delta \f$.
  36         `Grid::Grid_and_time` provides dynamical time steps via `time_provider`.
  37         More precisely we need the method `velocity_regularization`,
  38         `surface_growthFactor` and `mcf_regularization` from `Io::Parameter`.
  39         \post Grid_and_time and `u_wrapper` outlive this object. 
  40        */
  41       Solution_driven(const Io::Parameter&, const Grid::Grid_and_time&,
  42                       const Grid::Scal_FEfun& u_wrapper);
  43       //! Required for the pointer to implementation technique.
  44       ~Solution_driven();
  45 
  46       //! Solve regularized mean curvature equation
  47       /*! \param rhs \f$\nodalValue{Y}\f$
  48         \retval lhs Solution of
  49         \f$
  50         \parentheses[\big]{M_3^n + (\alpha + \varepsilon\tau) A_3^n}
  51         \nodalValue{X}^{n+1} = \nodalValue{Y}
  52         \f$
  53         \remark The solver is the conjugated gradient method.
  54         \pre Parameter `rhs` must be assembled.
  55         \sa brusselator_rhs(), Vec_rhs
  56        */      
  57       void solve(const Grid::Vec_FEfun& rhs, Grid::Vec_FEfun& lhs) const;
  58       //! Generates right-hand side without load vector for the linear system.
  59       /*! \param rhs \f$\nodalValue{X}^n\f$
  60         \retval lhs 
  61         \f$ 
  62         (M_3^n + \alpha A_3^n) \nodalValue{X}^n
  63         + \tau \delta M_3^n(\nodalValue{u}^n, \nodalValue{\surfaceNormal})
  64         \f$
  65         \pre \f$u\f$, which is given in the constructor, is still valid.  
  66         The nodal values of `rhs` should be the nodes itself.
  67         \sa Identity
  68       */
  69       void brusselator_rhs(const Grid::Vec_FEfun& rhs, Grid::Vec_FEfun& lhs) const;
  70       //! For debugging reasons
  71       /*! \param rhs \f$\nodalValue{X}\f$
  72         \retval lhs \f$ (M^n + (\alpha + \varepsilon \tau) A^n) \nodalValue{X} \f$
  73        */
  74       void operator()(const Grid::Vec_FEfun& rhs, Grid::Vec_FEfun& lhs) const;
  75     private:
  76       struct Data;
  77       //! Pointer to data members
  78       std::unique_ptr<Data> d_ptr;
  79     };
  80     /*!< \brief Solve the surface partial differential equation for
  81                 solution driven paper.
  82 
  83      Partial differential equation
  84      ==================================================
  85 
  86      Parameter
  87      --------------------------------------------------
  88 
  89      \f$\varepsilon, \delta, a \in \R\f$ for the surface equation, where 
  90      \f$\varepsilon\f$ and \f$\alpha\f$ are small regularization parameter.
  91 
  92      Smooth problem
  93      --------------------------------------------------
  94 
  95      For given \f$u\colon \surface \to \R\f$ search for
  96      \f$X\colon \surface_{0} \times [0,T] \to \R^{m+1}\f$ such that
  97      \f{align*}{
  98        v - \alpha \laplaceBeltrami v = {} &  
  99        \parentheses[\big]{\varepsilon (-\meanCurvature) + \delta u} \surfaceNormal
 100        = \varepsilon \laplaceBeltrami X + \delta u \surfaceNormal, \\
 101        \dell_{t} X = {} & v(X).
 102      \f}
 103 
 104      Finite element discretization
 105      --------------------------------------------------
 106 
 107      For given \f$\nodalValue{u}\colon I \to \R^{N}\f$ search for
 108      \f$\nodalValue{X}\colon I \to \R^{3N}\f$ (surface nodal values) such that
 109      \f{equation*}{
 110        \parentheses[\big]{M(X) + \alpha A(X)} \dell_t X = 
 111        \varepsilon A(X)X + \delta M(u,\nodalValue{\surfaceNormal})
 112      \f}
 113 
 114      Full discretization
 115      --------------------------------------------------
 116 
 117      For given \f$\nodalValue{X}^n\f$ and \f$\nodalValue{u}^n\f$ solve for 
 118      \f$\nodalValue{X}^{n+1}\f$
 119         \f{equation*}{
 120           \parentheses[\big]{M_3^n + (\alpha + \varepsilon\tau) A_3^n} 
 121           \nodalValue{X}^{n+1} 
 122           =  (M_3^n + \alpha A_3^n) \nodalValue{X}^n 
 123           + \tau \delta M_3^n(\nodalValue{u}^n, 
 124           \nodalValue{\surfaceNormal}),
 125         \f}
 126      where \f$\nodalValue{\surfaceNormal}^n\f$ is elementwise normal.  
 127      */
 128   } 
 129 } // Esfem
 130 
 131 #endif // SECORD_OP_SOLUTIONDRIVEN_H

/* [<][>][^][v][top][bottom][index][help] */