C++ main module for emicrom Package  1.0
EMMG_StaticMagneticTensorOperator.h
Go to the documentation of this file.
1 #ifndef EMMG_StaticMagneticTensorOperator_H
2 #define EMMG_StaticMagneticTensorOperator_H
3 
4 
6 
16 
18  // ATTRIBUTES
19 
20 
21 private:
22 
23 
24 public:
25 
26 
27  // ASSOCIATION
28 
29 private:
30 
31 protected:
32 
33  // METHODS
34 
35  // CONSTRUCTORS
36 
40  }
41 
42  // DESTRUCTORS
43 
47  }
48 
49 
50 public:
54  inline static SP::EMMG_StaticMagneticTensorOperator New() {
55  SP::EMMG_StaticMagneticTensorOperator p(new EMMG_StaticMagneticTensorOperator(),
57  p->setThis(p);
58  return p;
59  };
60 
61 
62 public:
69  virtual void computeMagneticExcitationField(const EMM_RealArray& sigma,
70  const EMM_RealField& M,
71  EMM_RealField& H) const {
72  tUIndex nCells=M.getSize();
73  const tDimension& dim=M.getDimension();
74 
75  //set the size of the magnetic excitation field
76  H.setSize(nCells);
77 
78  //no computation
79  if (nCells==0) return;
80 
81  //verify the type of M
82  const EMMG_RealField *gM=dynamic_cast<const EMMG_RealField *>(&M);
83  if (gM==null) throw EMM_Exception("generic","EMMG_MagneticTensorOperator::computeMagneticExcitationField(..)",
84  "M is an incompatible real field");
85 
86 
87  //verify the type of H
88  EMMG_RealField *gH=dynamic_cast<EMMG_RealField *>(&H);
89  if (gH==null) throw EMM_Exception("generic","EMMG_MagneticTensorOperator:: computeMagneticExcitationField(..)",
90  "H is an incompatible real field");
91 
92  EMM_StaticMagneticTensorOperator::computeMagneticExcitationField(nCells,dim,sigma,&(*gM)[0],&(*gH)[0]);
93  }
94 
103  const EMM_RealField& M,
104  const EMM_RealField& D,
105  EMM_RealField& gradH) const {
106  tUIndex nCells=M.getSize();
107  const tDimension& dim=M.getDimension();
108 
109  //set the size of the gradient magnetic excitation field
110  gradH.setSize(nCells);
111 
112  //no computation
113  if (nCells==0) return false;
114 
115  //verify the type of M
116  const EMMG_RealField *gM=dynamic_cast<const EMMG_RealField *>(&M);
117  if (gM==null) throw EMM_Exception("generic","EMMG_MagneticTensorOperator::computeMagneticExcitationFieldGradient(..)",
118  "M is an incompatible real field");
119 
120 
121  //verify the type of D
122  const EMMG_RealField *gD=dynamic_cast<const EMMG_RealField *>(&D);
123  if (gD==null) throw EMM_Exception("generic","EMMG_MagneticTensorOperator:: computeMagneticExcitationFieldGradient(..)",
124  "D is an incompatible real field");
125 
126  //verify the type of gradH
127  EMMG_RealField *gGradH=dynamic_cast<EMMG_RealField *>(&gradH);
128  if (gGradH==null) throw EMM_Exception("generic","EMMG_MagneticTensorOperator:: computeMagneticExcitationFieldGradient(..)",
129  "GradH is an incompatible real field");
130 
131  return EMM_StaticMagneticTensorOperator::computeMagneticExcitationFieldGradient(nCells,dim,sigma,&(*gM)[0],&(*gD)[0],&(*gGradH)[0]);
132 
133  }
134 
135 public:
151  const EMM_RealArray& sigma,const EMM_RealField& M,const EMM_RealField& H) const {
152  // size of the operator
153  tUIndex nCells=M.getSize();
154  const tDimension& dim=M.getDimension();
155 
156  //no computation
157  if (nCells==0) return 0;
158 
159  //verify the type of M
160  const EMMG_RealField *gM=dynamic_cast<const EMMG_RealField *>(&M);
161  if (gM==null) throw EMM_Exception("generic","EMMG_MagnetostrictionOperator::computeMagneticExcitationField(..)",
162  "M is an incompatible real field");
163 
164  const EMMG_RealField *gH=dynamic_cast<const EMMG_RealField *>(&H);
165  if (gH==null) throw EMM_Exception("generic","EMMG_MagnetostrictionOperator::computeMagneticExcitationField(..)",
166  "H is an incompatible real field");
167 
168 
169  return EMM_StaticMagneticTensorOperator::computeEnergy(t,nCells,dim,sigma,&(*gM)[0]);
170  }
185  virtual tReal computeEnergy(const tReal& t, const EMM_RealArray& sigma,const EMM_RealField& M,EMM_RealField& W) const {
186  // size of the operator
187  tUIndex nCells=M.getSize();
188  const tDimension& dim=M.getDimension();
189 
190 
191  //no computation
192  if (nCells==0) return 0;
193 
194  //verify the type of M
195  const EMMG_RealField *gM=dynamic_cast<const EMMG_RealField *>(&M);
196  if (gM==null) throw EMM_Exception("generic","EMMG_StaticMagneticTensorOperator:: computeEnergy(..)",
197  "M is an incompatible real field");
198 
199 
200  return EMM_StaticMagneticTensorOperator::computeEnergy(t,nCells,dim,sigma,&(*gM)[0]);
201  }
202 
203 
204 };
205 
206 #endif
207 
virtual tUIndex getSize() const =0
return the size of the field
DEFINE_SPTR(EMMG_StaticMagneticTensorOperator)
This class describes a generic real field.
Definition: EMMG_RealField.h:17
static SP::EMMG_StaticMagneticTensorOperator New()
create a cubic anisotropy operator
Definition: EMMG_StaticMagneticTensorOperator.h:54
#define tBoolean
Definition: types.h:139
virtual tReal computeEnergy(const tReal &t, const tUIndex &nCells, const tDimension &dim, const EMM_RealArray &sigma, const tReal *Mt) const
compute the energy of the anistropy operator
Definition: EMM_StaticMagneticTensorOperator.cpp:174
EMMG_StaticMagneticTensorOperator(void)
create
Definition: EMMG_StaticMagneticTensorOperator.h:39
SP_OBJECT(EMMG_StaticMagneticTensorOperator)
#define null
Definition: types.h:144
#define tDimension
Definition: EMM_Types.h:10
This class describes the static magnetostriction operator EMM_StaticMagneticTensorOperator of the lan...
Definition: EMMG_StaticMagneticTensorOperator.h:15
virtual void computeMagneticExcitationField(const tUIndex &nCells, const tDimension &dim, const EMM_RealArray &sigma, const tReal *M, tReal *H) const
compute the normalized excitation magnetic field at M for stress tensors
Definition: EMM_StaticMagneticTensorOperator.cpp:103
This class describes the static Magnetic Tensor operator of the landau lifschitz system EMM_LandauLif...
Definition: EMM_StaticMagneticTensorOperator.h:41
#define tUIndex
Definition: types.h:126
This class describes a real array.
Definition: EMM_RealArray.h:16
const tDimension & getDimension() const
get the dimension
Definition: EMM_RealField.h:553
virtual ~EMMG_StaticMagneticTensorOperator(void)
destroy
Definition: EMMG_StaticMagneticTensorOperator.h:46
virtual void computeMagneticExcitationField(const EMM_RealArray &sigma, const EMM_RealField &M, EMM_RealField &H) const
compute the normalized excitation magnetic field at M
Definition: EMMG_StaticMagneticTensorOperator.h:69
virtual tBoolean computeMagneticExcitationFieldGradient(const tUIndex &nCells, const tDimension &dim, const EMM_RealArray &sigma, const tReal *M, const tReal *D, tReal *gradH) const
compute the gradient of the magnetic excitation field at M in the direction D
Definition: EMM_StaticMagneticTensorOperator.cpp:141
virtual tBoolean computeMagneticExcitationFieldGradient(const EMM_RealArray &sigma, const EMM_RealField &M, const EMM_RealField &D, EMM_RealField &gradH) const
compute the gradient of the magnetic excitation field at M in the direction D
Definition: EMMG_StaticMagneticTensorOperator.h:102
this class describes the exceptions raised for E-MicromM package
Definition: EMM_Exception.h:14
virtual tReal computeEnergyWithMagneticExcitation(const tReal &t, const EMM_RealArray &sigma, const EMM_RealField &M, const EMM_RealField &H) const
compute the energy of the operator
Definition: EMMG_StaticMagneticTensorOperator.h:150
This class describes a real field.
Definition: EMM_RealField.h:21
virtual void setSize(const tUIndex &n)=0
set the size
#define tReal
Definition: types.h:118
virtual tReal computeEnergy(const tReal &t, const EMM_RealArray &sigma, const EMM_RealField &M, EMM_RealField &W) const
compute the energy of the operator
Definition: EMMG_StaticMagneticTensorOperator.h:185
class Free introduced for deleting a smart pointer
Definition: CORE_Object.h:141