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