1 /*! \file secOrd_op_linearHeat.h 2 \author Christian Power 3 \date 17. March 2016 4 5 \brief Standard heat resp. diffusion equation for an 6 evolving or stationary surface problem 7 8 Revision history 9 -------------------------------------------------- 10 11 Revised by Christian Power dd.mm.yyyy 12 Originally written by Christian Power 13 (power22c@gmail.com) 28. Januar 2016 14 15 Idea 16 -------------------------------------------------- 17 18 Provides a class that performs the standard Dziuk Elliott evolving surface 19 finite element discretization with implicit euler time discretization. 20 21 Partial differential equation 22 ================================================== 23 24 Parameter 25 -------------------------------------------------- 26 27 - Right-hand side function f 28 - Function u_0 for start time t_0 29 - Surface velocity v 30 31 Smooth problem 32 -------------------------------------------------- 33 34 Search for \f$u\colon \surface \to \R\f$ for 35 \f{equation*}{ 36 \matd u + u \diver(v) - \laplaceBeltrami u = f 37 \f} 38 39 Finite element discretization 40 -------------------------------------------------- 41 42 Search for \f$\nodalValue{u}\colon I \to \R^N \f$ for 43 \f{equation*}{ 44 \dell_t \parentheses[\big]{M(t) \nodalValue{u} } + A(t) \nodalValue{u} 45 = M(t)\nodalValue{Pf}, 46 \f} 47 where \f$ \nodalValue{Pf} \f$ are the nodal values of the 48 \f$ L^2 \f$-projection of \f$ f \f$. 49 50 Full discretization 51 -------------------------------------------------- 52 53 Given \f$ \nodalValue{u}^n \f$ solve for \f$ \nodalValue{u}^{n+1} \f$ 54 \f{equation*}{ 55 (M\nodalValue{u})^{n+1} + \tau (A \nodalValue{u})^{n+1} 56 = (M \nodalValue{w})^n + \tau (M \nodalValue{Pf})^{n+1} 57 \f} 58 59 This programm implements a basic expression calculator. 60 Input from cin; output to cout. The grammar for input is: etc. 61 62 Created by Christian Power on 28.01.2016 63 Copyright (c) 2016 Christian Power. All rights reserved. 64 */ 65 66 #ifndef SECORD_OP_LINEARHEAT_H 67 #define SECORD_OP_LINEARHEAT_H 68 69 #include <memory> 70 #include "esfem_fwd.h" 71 72 namespace Esfem{ 73 namespace SecOrd_op{ 74 class Linear_heat{ 75 public: 76 explicit Linear_heat(const Io::Parameter&, const Grid::Grid_and_time&); 77 ~Linear_heat(); 78 79 void solve(const Grid::Scal_FEfun& rhs, Grid::Scal_FEfun& lhs) const; 80 void apply_massMatrix_to(Grid::Scal_FEfun&) const; 81 void mass_matrix(const Grid::Scal_FEfun& rhs, Grid::Scal_FEfun& lhs) const; 82 private: 83 struct Data; 84 std::unique_ptr<Data> d_ptr; 85 }; 86 } 87 } 88 89 #endif // SECORD_OP_LINEARHEAT_H