/* This file is part of Lemma, a geophysical modelling and inversion API.
* More information is available at http://lemmasoftware.org
*/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* @file
* @date 03/21/2016 01:39:32 PM
* @version $Id$
* @author Trevor Irons (ti)
* @email tirons@egi.utah.edu
* @copyright Copyright (c) 2016, University of Utah
* @copyright Copyright (c) 2016, Lemma Software, LLC
*/
#ifndef LINEARMAG_INC
#define LINEARMAG_INC
#include "FEM4EllipticPDE.h"
namespace Lemma {
/** \addtogroup FEM4EllipticPDE
@{
*/
/**
\brief Provides modelling of linear magnetic media
\details This class solves the problem
\f{equation}{
\nabla^2 u(\mathbf{r}) = \nabla \cdot \kappa(\mathbf{r}) \mathbf{H}_0,
\f}
where \f$ \mathbf{H}_0\f$ is the static homogeneous inducing field, \f$ \kappa \f$
is the isotropic magnetic suceptibility. The secondary field can be calculated
\f$ \mathbf{H} = -\nabla \cdot u \f$
*/
class LinearMag : public FEM4EllipticPDE {
friend std::ostream &operator<<(std::ostream &stream,
const LinearMag &ob);
public:
// ==================== LIFECYCLE =======================
/**
* @copybrief LemmaObject::New()
* @copydetails LemmaObject::New()
*/
static LinearMag* New();
/**
* @copybrief LemmaObject::Delete()
* @copydetails LemmaObject::Delete()
*/
void Delete();
#ifdef HAVE_YAMLCPP
/**
* Uses YAML to serialize this object.
* @return a YAML::Node
*/
YAML::Node Serialize() const;
/**
* Constructs an object from a YAML::Node.
*/
static LinearMag* DeSerialize(const YAML::Node& node);
#endif
// ==================== OPERATORS =======================
// ==================== OPERATIONS =======================
// ==================== ACCESS =======================
// ==================== INQUIRY =======================
protected:
// ==================== LIFECYCLE =======================
/** Default protected constructor, use New */
LinearMag (const std::string& name);
#ifdef HAVE_YAMLCPP
/** Protected DeDerializing constructor, use factory DeSerialize method*/
LinearMag (const YAML::Node& node);
#endif
/** Default protected destructor, use Delete */
~LinearMag ();
/**
* @copybrief LemmaObject::Release()
* @copydetails LemmaObject::Release()
*/
void Release();
private:
// ==================== DATA MEMBERS =========================
}; // ----- end of class LinearMag -----
/*! @} */ // End of group
} // ----- end of Lemma name -----
#endif // ----- #ifndef LINEARMAG_INC -----