Galerkin FEM for elliptic PDEs
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

LinearMag.h 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /* This file is part of Lemma, a geophysical modelling and inversion API.
  2. * More information is available at http://lemmasoftware.org
  3. */
  4. /* This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  7. */
  8. /**
  9. * @file
  10. * @date 03/21/2016 01:39:32 PM
  11. * @version $Id$
  12. * @author Trevor Irons (ti)
  13. * @email tirons@egi.utah.edu
  14. * @copyright Copyright (c) 2016, University of Utah
  15. * @copyright Copyright (c) 2016, Lemma Software, LLC
  16. */
  17. #ifndef LINEARMAG_INC
  18. #define LINEARMAG_INC
  19. #include "FEM4EllipticPDE.h"
  20. namespace Lemma {
  21. /** \addtogroup FEM4EllipticPDE
  22. @{
  23. */
  24. /**
  25. \brief Provides modelling of linear magnetic media
  26. \details This class solves the problem
  27. \f{equation}{
  28. \nabla^2 u(\mathbf{r}) = \nabla \cdot \kappa(\mathbf{r}) \mathbf{H}_0,
  29. \f}
  30. where \f$ \mathbf{H}_0\f$ is the static <B>homogeneous</B> inducing field, \f$ \kappa \f$
  31. is the <B>isotropic</B> magnetic suceptibility. The secondary field can be calculated
  32. \f$ \mathbf{H} = -\nabla \cdot u \f$
  33. */
  34. class LinearMag : public FEM4EllipticPDE {
  35. friend std::ostream &operator<<(std::ostream &stream,
  36. const LinearMag &ob);
  37. public:
  38. // ==================== LIFECYCLE =======================
  39. /**
  40. * @copybrief LemmaObject::New()
  41. * @copydetails LemmaObject::New()
  42. */
  43. static LinearMag* New();
  44. /**
  45. * @copybrief LemmaObject::Delete()
  46. * @copydetails LemmaObject::Delete()
  47. */
  48. void Delete();
  49. #ifdef HAVE_YAMLCPP
  50. /**
  51. * Uses YAML to serialize this object.
  52. * @return a YAML::Node
  53. */
  54. YAML::Node Serialize() const;
  55. /**
  56. * Constructs an object from a YAML::Node.
  57. */
  58. static LinearMag* DeSerialize(const YAML::Node& node);
  59. #endif
  60. // ==================== OPERATORS =======================
  61. // ==================== OPERATIONS =======================
  62. // ==================== ACCESS =======================
  63. // ==================== INQUIRY =======================
  64. protected:
  65. // ==================== LIFECYCLE =======================
  66. /** Default protected constructor, use New */
  67. LinearMag (const std::string& name);
  68. #ifdef HAVE_YAMLCPP
  69. /** Protected DeDerializing constructor, use factory DeSerialize method*/
  70. LinearMag (const YAML::Node& node);
  71. #endif
  72. /** Default protected destructor, use Delete */
  73. ~LinearMag ();
  74. /**
  75. * @copybrief LemmaObject::Release()
  76. * @copydetails LemmaObject::Release()
  77. */
  78. void Release();
  79. private:
  80. // ==================== DATA MEMBERS =========================
  81. }; // ----- end of class LinearMag -----
  82. /*! @} */ // End of group
  83. } // ----- end of Lemma name -----
  84. #endif // ----- #ifndef LINEARMAG_INC -----