1 /*! \file secOrd_op_brusselator.h 2 \brief Provides the class Esfem::SecOrd_op::Brusselator 3 4 Revision history 5 -------------------------------------------------- 6 7 Revised by Christian Power May 2016 8 Revised by Christian Power March 2016 9 Originally written by Christian Power 10 (power22c@gmail.com) February 2016 11 12 Idea 13 -------------------------------------------------- 14 15 Solves the scalar surface equation using the brusselator model. 16 You have to use the enum class `Esfem::Growth` to specify which 17 model you want. 18 19 \author Christian Power 20 \date 18. May 2016 21 \copyright Copyright (c) 2016 Christian Power. All rights reserved. 22 */ 23 24 #ifndef SECORD_OP_BRUSSELATOR_H 25 #define SECORD_OP_BRUSSELATOR_H 26 27 #include <memory> 28 #include "esfem_fwd.h" 29 30 namespace Esfem{ 31 namespace SecOrd_op{ 32 class Brusselator{ 33 public: 34 Brusselator(const Io::Parameter&, const Grid::Grid_and_time&, 35 const Growth); 36 /*!< \brief This constructor creats two internal FE functions. */ 37 Brusselator(const Io::Parameter&, const Grid::Grid_and_time&, 38 const Growth, const Grid::Scal_FEfun&, 39 const Grid::Scal_FEfun&); 40 /*!< \brief This constructor keeps references of 41 two external FE functions. 42 */ 43 ~Brusselator(); 44 45 /*! \name Numerical interface for the finite element code */ 46 //@{ 47 void solve(const Grid::Scal_FEfun& rhs, Grid::Scal_FEfun& lhs) const; 48 void mass_matrix(const Grid::Scal_FEfun& rhs, Grid::Scal_FEfun& lhs) const; 49 void massMatrix_constOne(Grid::Scal_FEfun&) const; 50 void add_massMatrixConstOne_to(Grid::Scal_FEfun&) const; 51 //@} 52 53 /*! \name Assignment member functions 54 \warning The following two methods throw exceptions if 55 you have constructed 56 this object with the second constructor. 57 */ 58 //@{ 59 void assign_firstArg_quadMassMatrix(const Grid::Scal_FEfun&); 60 void assign_secondArg_quadMassMatrix(const Grid::Scal_FEfun&); 61 //@} 62 63 void operator()(const Grid::Scal_FEfun&, Grid::Scal_FEfun&) const; 64 /*! \brief Included for testing reasons. */ 65 private: 66 struct Data; 67 std::unique_ptr<Data> d_ptr; 68 }; 69 } // namespace Grid 70 } // namespace Esfem 71 72 #endif // SECORD_OP_BRUSSELATOR_H