|
C++ mpi module for stochmagnet_main Package
|
This class is describes a demagnetized operator. More...
#include <SM_DipolarOperator.h>


Public Member Functions | |
| virtual tMemSize | getMemorySize () const |
| return the memory size of the class and the memory size of all its attributes/associations More... | |
| virtual tMemSize | getContentsMemorySize () const |
| return the memory size of the included associations More... | |
| virtual void | discretize (const SM_Network &network, const SM_Material &material) override |
| discretize the operator on the netowek More... | |
| void | computeDipolarFieldAtPoints (const SM_Material &material, const tInteger &nP, const tReal *P, const tReal *S, const tInteger &nX, const tReal *X, const tBoolean &alpha, tReal *H) const |
| compute the magnetic field by virtual method More... | |
| void | computeDipolarFieldAtSeparatedPoints (const SM_Material &material, const tInteger &nP, const tReal *P, const tReal *S, const tInteger &nX, const tReal *X, const tBoolean &alpha, tReal *H) const |
| compute the dipolar field at separated X points More... | |
Public Member Functions inherited from SM_SliceOperator | |
| virtual CORE_UniquePointer< SM_SliceOperator > | NewInstance () const =0 |
| create a New instance of this More... | |
| const tString & | getName () const |
| return the operator name More... | |
| virtual void | copy (const SM_SliceOperator &op) |
| copy More... | |
| virtual void | adimensionize (const tReal &cH) |
| adimensionize operator with characteric field value in J More... | |
| virtual void | updateState (const tIndex &timeIndex, const SM_Network &network, const SM_Material &material, const SM_RealField &S) |
| update the stae of the operator at time index More... | |
| virtual void | computeMagneticFieldSlice (const tIndex &timeIndex, const SM_Network &network, const SM_Material &material, const tIndex &startIndex, const tIndex &endIndex, const tReal *S, const tBoolean &alpha, const tIndex &nH, tReal *H) const =0 |
| compute the magnetic field slice by virtual method for particles in indices [startIndex,endIndex[ More... | |
| virtual tReal | computeSpinEnergy (const tIndex &i, const tIndex &timeIndex, const SM_Network &network, const SM_Material &material, const SM_RealField &S) const =0 |
| compute the spin energy by virtual method More... | |
| virtual tReal | computeEnergySlice (const tIndex &timeIndex, const SM_Network &network, const SM_Material &material, const tIndex &startIndex, const tIndex &endIndex, const tReal *S) const =0 |
| compute the energy by virtual method More... | |
| virtual tString | toString () const override |
| return string representaton of the operator | |
Public Member Functions inherited from SM_Object | |
| SM_Object (void) | |
| create | |
| virtual | ~SM_Object (void) |
| destroy | |
Public Member Functions inherited from CORE_Object | |
| template<class T > | |
| std::shared_ptr< T > | getSharedPointer () |
| return the shared pointer for this More... | |
| template<class T > | |
| std::shared_ptr< const T > | getConstSharedPointer () const |
| return a const shared pointer for this More... | |
| template<class T > | |
| tBoolean | isInstanceOf () const |
| test if the clas T is an instance of this class More... | |
| tString | getClassName () const |
| return the name of the class More... | |
| tString | getPointerString () const |
| retrun the pointer of the class as a string More... | |
| tString | getIdentityString () const |
| retrun the string identification of the class More... | |
Static Public Member Functions | |
| static void | ComputeSpinDipolarEnergy (const tReal &mu_s, const tReal &Edip, const tInteger &nParticles, const tReal *X, const tReal *S, const tReal *Xi, const tReal *Si, tReal &E) |
| compute the dipolar spin energy More... | |
| static void | ComputeSeparatedSpinDipolarEnergy (const tReal &mu_s, const tReal &Edip, const tInteger &nParticles, const tReal *X, const tReal *S, const tReal *Xi, const tReal *Si, tReal &E) |
| compute the dipolar spin energy for a separated domain \( \Omega_j\) More... | |
Static Public Member Functions inherited from CORE_Object | |
| static tBoolean | EnableMemoryStack (const tBoolean &isMemoryChecked) |
| enable the memory stack More... | |
| static void | EnableMemoryStack () |
| enable the memory stack | |
| static void | DisableMemoryStack () |
| disable the memory stack | |
| static tBoolean | IsMemoryStackEnabled () |
| return trur if the memory stack is enabled | |
| static tString | MemoryStackToString () |
| get the memory stack in string More... | |
| static tIndex | GetRegisteredClassesNumber () |
| get the memory stack in string More... | |
Static Public Member Functions inherited from SM_LinearSliceOperator | |
| static tReal | ComputeEnergy (const SM_Network &network, const SM_Material &material, const tIndex &startIndex, const tIndex &endIndex, const tReal *S, const tInteger &nH, const tReal *H) |
| compute the energy by virtual method More... | |
Protected Member Functions | |
| SM_DipolarOperator (void) | |
| create a network class | |
| virtual | ~SM_DipolarOperator (void) |
| destroy | |
| const tReal & | getLambdaH () const |
| get lambda H More... | |
Protected Member Functions inherited from SM_SliceOperator | |
| SM_SliceOperator (void) | |
| create a network class | |
| virtual | ~SM_SliceOperator (void) |
| destroy | |
| void | setName (const tString &name) |
| set the name More... | |
Protected Member Functions inherited from CORE_Object | |
| CORE_Object () | |
| build an instance of the object | |
| virtual | ~CORE_Object () |
| destroy the instance of object std | |
Protected Member Functions inherited from SM_LinearSliceOperator | |
| SM_LinearSliceOperator (void) | |
| create a network class | |
| virtual | ~SM_LinearSliceOperator (void) |
| destroy | |
This class is describes a demagnetized operator.
The demagnetized energy at a spin i located at particle \( P_i\) is \( E_i= \frac{\mu_0.\mu_s^2\mu_B^2}{4.\pi.A^3} \displaystyle \sum_{j=0,i\neq j}^{j=P-1} \left ( \frac{<S_i,S_j>}{r_{ij}^3} - 3 \frac{<r_{ij},S_i><r_{ij},S_j>}{r_{ij}^5} \right ) \) with \( r_{ij}=P_j-P_i \) where A is the 1 agstrom expressed in m \( A=1.10^{-10} \)
In order to have \(\displaystyle \forall i \in [0,P[, \frac{dE}{d\mu_i}(P)=-\frac{1}{\mu_s.\mu_B}. H(P) \),
the corresponding magnetic excitation field is at particle \( P_i\) for spin i : \( H(P_i)= - \frac{\mu_0.\mu_s\mu_B}{4.\pi.A^3} \displaystyle \sum_{j=0,j \neq i}^{P-1} \left ( \frac{S_j}{r_{ij}^3} - 3 \frac{r_{ij} <r_{ij},S_j>}{r_{ij}^5} \right ) \)
The total demagnetzied field of all the system is the half of the sum of all spin energy in order not to take into accoung dipolar energy between spin i and j twice and to verify the above relation which link the energy and the magnetic field:
\( E_i= \frac{1}{2} . \frac{\mu_0.\mu_s^2\mu_B^2}{4.\pi.A^3} \displaystyle \sum_{i=0}^{i=P-1} \sum_{j=0,i\neq j}^{j=P-1} \left ( \frac{<S_i,S_j>}{r_{ij}^3} - 3 \frac{<r_{ij},S_i><r_{ij},S_j>}{r_{ij}^5} \right ) \) with \( r_{ij}=P_j-P_i \)
As H is linear with respect of \( \mu_i\), the energy can also be computed as \( \displaystyle E=- \frac{1}{2} \sum_{i=0}^{P-1} <H(P_i),\mu(P_i)> \)
The adimensionized version gives:
\( e_i= \frac{\mu_s^2}{4.\pi} \displaystyle \sum_{j=0,i\neq j}^{j=P-1} \left ( \frac{<S_i,S_j>}{r_{ij}^3} - 3 \frac{<r_{ij},S_i><r_{ij},S_j>}{r_{ij}^5} \right ) \) with \( r_{ij}=P_j-P_i \) \( h_i= - \frac{\mu_s}{4.\pi} \displaystyle \sum_{j=0,j \neq i}^{P-1} \left ( \frac{S_j}{r_{ij}^3} - 3 \frac{r_{ij} <r_{ij},S_j>}{r_{ij}^5} \right ) \)
| void SM_DipolarOperator::computeDipolarFieldAtPoints | ( | const SM_Material & | material, |
| const tInteger & | nP, | ||
| const tReal * | P, | ||
| const tReal * | S, | ||
| const tInteger & | nX, | ||
| const tReal * | X, | ||
| const tBoolean & | alpha, | ||
| tReal * | H | ||
| ) | const |
compute the magnetic field by virtual method
| [in] | material | : material of the networks |
| [in] | nP | number of particles of the network (P,S) |
| [in] | P | network of the points on with to compute the dipolar field |
| [in] | S | unit direction of magnetic spin moment of size nParticles x SM_Constants::DIM |
| [in] | nX | number of particles in X |
| [in] | X | ; coordinates of points X |
| [in] | alpha | sum operator 0 or 1 |
| [in,out] | H | total magnetic field of size nH x SM_Constants::DIM |
Computes \( H(X)=alpha.H(X)+H_{op}(X) \) with
\( \Omega=\{X_i\}_{j=0,N_X-1} \) \( \Omega_c=\{P_j\}_{j=0,N_P-1} \) \( \forall X_i in \Omega, , H_{op}(X_i)= \frac{H_{dip}}{4.\pi} \displaystyle \sum_{j=0}^{j=N_P-1} \frac{1}{r_{ij}^3} \left (3 U_{ij} <U_{ij},Sj> - S_j \right )\) with \(r_{ij}=|P_j-X_i|\) and \( U_{ij}=\frac{1}{r_ij} (P_j-X_i) \)
| void SM_DipolarOperator::computeDipolarFieldAtSeparatedPoints | ( | const SM_Material & | material, |
| const tInteger & | nP, | ||
| const tReal * | P, | ||
| const tReal * | S, | ||
| const tInteger & | nX, | ||
| const tReal * | X, | ||
| const tBoolean & | alpha, | ||
| tReal * | H | ||
| ) | const |
compute the dipolar field at separated X points
| [in] | material | : material of the networks |
| [in] | nP | number of particles of the network (P,S) |
| [in] | P | network of the points on with to compute the dipolar field |
| [in] | S | unit direction of magnetic spin moment of size nParticles x SM_Constants::DIM |
| [in] | nX | number of particles in X |
| [in] | X | ; coordinates of points X |
| [in] | alpha | sum operator 0 or 1 |
| [in,out] | H | total magnetic field of size nH x SM_Constants::DIM |
Computes \( H(X)=alpha.H(X)+H_{op}(X) \) with
\( \Omega=\{X_i\}_{j=0,N_X-1} \) \( \Omega_c=\{P_j\}_{j=0,N_P-1} \) \( \forall X_i in \Omega, , H_{op}(X_i)= \frac{H_{dip}}{4.\pi} \displaystyle \sum_{j=0}^{j=N_P-1} \frac{1}{r_{ij}^3} \left (3 U_{ij} <U_{ij},Sj> - S_j \right )\) with \(r_{ij}=|P_j-X_i|\) and \( U_{ij}=\frac{1}{r_ij} (P_j-X_i) \)
|
inlinestatic |
compute the dipolar spin energy for a separated domain \( \Omega_j\)
| [in] | mu_s | : mu at spin |
| [in] | Edip | : dipolar energy factor normalisation |
| [in] | nParticles | numbr of particles |
| [in] | X | : coordinates of all spins |
| [in] | S | direction of magnetic moment of all spin |
| [in] | Xi | : coordinate of the spin i |
| [in] | Si | : dierction of the magnetic moment of the spin i |
| [out] | E | energy of the spin \( E_i= \mu_s^2.\frac{cEdip}{4.\pi} \displaystyle \sum_{j=0}^{j=P-1} \frac{1}{r_{ij}^3} \left ( <S_i,S_j> -3<U,Si><U,Sj> \right )\) with \(r_{ij}=|P_j-P_i|\) and \( U=\frac{1}{r_ij} (P_j-P_i)\) |
|
inlinestatic |
compute the dipolar spin energy
| [in] | mu_s | : mu at spin |
| [in] | Edip | : dipolar energy factor normalisation |
| [in] | nParticles | number of particles |
| [in] | X | : coordinates of all spins |
| [in] | S | direction of magnetic moment of all spin |
| [in] | Xi | : coordinate of the spin i |
| [in] | Si | : dierction of the magnetic moment of the spin i |
| [out] | E | energy of the spin \( E_i= \mu_s^2.\frac{cEdip}{4.\pi} \displaystyle \sum_{j=0}^{j=P-1} \frac{1}{r_{ij}^3} \left ( <S_i,S_j> -3<U,Si><U,Sj> \right )\) with \(r_{ij}=|P_j-P_i|\) and \( U=\frac{1}{r_ij} (P_j-P_i)\) |
|
inlineoverridevirtual |
discretize the operator on the netowek
| [in] | network | :operator on which the operatr is applied |
| [in] | material | : material on particles of the network |
It computes \( \lambda_H=\frac{1}{4.\pi \)
Reimplemented from SM_SliceOperator.
|
inlinevirtual |
return the memory size of the included associations
Reimplemented from SM_SliceOperator.
Reimplemented in SMOMPI_DipolarOperator.
|
inlineprotected |
get lambda H
|
inlinevirtual |
return the memory size of the class and the memory size of all its attributes/associations
Reimplemented from SM_LinearSliceOperator.
Reimplemented in SMOMPI_DipolarOperator.