C++ main module for emicrom Package  1.0
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
EMM_DisplacementFEMOperator Class Referenceabstract

This class describes the displacement operator defined on the points of the mesh. More...

#include <EMM_DisplacementFEMOperator.h>

Inheritance diagram for EMM_DisplacementFEMOperator:
Inheritance graph
[legend]
Collaboration diagram for EMM_DisplacementFEMOperator:
Collaboration graph
[legend]

Public Member Functions

virtual tBoolean discretize (const EMM_LandauLifschitzSystem &system)
 discretize the operator More...
 
virtual tBoolean resetToInitialState (const EMM_LandauLifschitzSystem &system)
 reset the operator to initial state the operator More...
 
void setMassMatrixType (const tFlag &t)
 set the mass matrix type More...
 
const tFlaggetMassMatrixType () const
 get the mass matrix type More...
 
virtual SP::EMM_MassMatrix NewMassMatrix () const
 create the accelerator matrix More...
 
const tUIndexgetPointsNumber () const
 get the points number in each direction More...
 
const tCellFlaggetPeriodicIndicator () const
 get the periodicity indication More...
 
const EMM_CellFlagArraygetNeighborsIndicator () const
 return the neighbors indicator in bits $ \displaystyle \sum_{f=0}^{f=F-1} v_f 2^f $ where F is the number of faces per element and $ v_f $ is 1 if there is a neighbor cell with the face f More...
 
virtual tULLInt getMemorySize () const
 return the memory size in byte More...
 
virtual tBoolean getDataFieldSpace (const tUSInt &index, tString &dataName, tFlag &supportType, tString &dFieldType, tUIndex &n, tDimension &dim) const
 get the data field at index for saving data in vtk,txt,... files. More...
 
virtual void computeEquilibriumMatrixDiagonalConditioner (MATH_Vector &D) const
 compute the diagonal conditioner More...
 
virtual tReal computeCineticEnergy (const EMM_RealField &V) const
 compute the energy of the magnetostriction operator at current displacement and velocity More...
 
virtual tReal computePotentialEnergy (const EMM_RealField &U) const
 compute the potential energy to the space variation of the displacement More...
 
tReal computeStressConstraintEnergy (const EMM_RealField &Uf) const
 compute the stress constraint energy on boundary More...
 
virtual tString toString () const
 turn the martix into string More...
 
virtual void adimensionize (const tReal &Le, const tReal &Ms, const tReal &T, const tReal &L)
 adimensionize the operator More...
 
const tRealgetAdimensionizedSegmentsSize () const
 get the segments size in all directions More...
 
const EMM_RealArraygetAdimensionizedVolumicMass () const
 get the adimensionized volumic mass per cell More...
 
const EMM_4SymmetricTensorsgetLambdaE () const
 return the adimensionized elastic tensor distribution $ \lambda^e $ More...
 
const EMM_4TensorsgetLambdaEDoubleDotLambdaM () const
 return the adimensionized magnetic tensor distribution $ \lambda^e:\lambda^m $ More...
 
const EMM_4TensorsgetLambdaMDoubleDotLambdaE () const
 return the adimensionized magnetic tensor distribution $ \lambda^m:\lambda^e $ More...
 
const EMM_4SymmetricTensorsgetLambdaMDoubleDotLambdaEDoubleDotLambdaM () const
 return the adimensionized magnetic tensor distribution $ \lambda^m:\lambda^e:\lambda^m $ More...
 
void setInitialDisplacement (const tReal &scale, const tString &dataFile)
 set initial displacement field. More...
 
void setInitialDisplacement (const tReal data[3])
 set initial displacement field More...
 
void setInitialDisplacement (const tReal U0, const tReal &U1, const tReal &U2)
 set initial displacement field More...
 
void setInitialDisplacement (const EMM_RealField &data)
 set initial displacement field More...
 
void setInitialVelocity (const tReal &scale, const tString &dataFile)
 set initial velocity field More...
 
void setInitialVelocity (const EMM_RealField &data)
 set initial velocity field More...
 
void setInitialVelocity (const tReal data[3])
 set initial velocity field More...
 
void setInitialVelocity (const tReal &V0, const tReal &V1, const tReal &V2)
 set initial velocity field More...
 
void setLimitConditionOnPoints (const EMM_IntArray &lc)
 set the limit condition each point is set to More...
 
void setLimitConditionOnPoints (const tLimitCondition &lc)
 set the limit condition to all points More...
 
void setConstraints (const tFlag &C, const tString &dataFile)
 set constraints from file defined on points More...
 
void setConstraints (const tFlag &C, const tReal data[3])
 set constraints field More...
 
void setConstraints (const tFlag &C, const tReal &C0, const tReal &C1, const tReal &C2)
 set initial constriants field More...
 
void setConstraints (const tFlag &C, const EMM_RealField &data)
 set constraints More...
 
const tFlaggetConstraintFaces () const
 get the constraint faces $ C=\sum_{f=0}^{f=5} C_f 2^f $ $ C_f=1 $ if face f is constrainted More...
 
const EMM_RealFieldgetConstraints () const
 get the constraints field for reading More...
 
EMM_RealFieldgetConstraints ()
 get the constraints field for writing More...
 
const EMM_LimitConditionArraygetLimitConditionOnPoints () const
 
SPC::EMM_LimitConditionArray getLimitConditionOnPointsByReference () const
 
void nullProjectionOnDirichletBoundary (EMM_RealField &V) const
 project the velocity to 0 on dirichlet boundary points More...
 
void nullProjectionOnDirichletBoundary (const tUIndex &nPoints, const tDimension &dim, tReal *V) const
 project the velocity to 0 on dirichlet boundary points More...
 
void projectionOnDirichletBoundary (const EMM_RealField &V0, EMM_RealField &V) const
 project the velocity to 0 on dirichlet boundary points More...
 
void projectionOnDirichletBoundary (const tUIndex &nPoints, const tDimension &dim, const tBoolean &incV0, const tReal *V0, tReal *V) const
 project the velocity to 0 on dirichlet boundary points More...
 
void periodicProjection (const tCellFlag &periodicity, const tUInteger nPoints[3], EMM_RealField &V) const
 make the periodic projection of the field V More...
 
virtual tBoolean backup (const tString &prefix, const tString &suffix, const tString &ext) const
 backup of the operator data into file(s) used for restoring More...
 
virtual tBoolean restore (const EMM_LandauLifschitzSystem &system, const tString &prefix, const tString &suffix, const tString &ext)
 restore the operator data from file(s) More...
 
const EMM_2PackedSymmetricTensorsgetElasticTensor () const
 return the elastic tensor $ \varepsilon(u)=\displaystyle \frac{1}{2} \left ( \frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i} \right ) $ More...
 
virtual tUSInt getDataFieldsNumber () const
 get the number of field used in the operator More...
 
virtual tBoolean getDataField (const tUSInt &index, tString &dataName, tUIndex &n, tDimension &dim, const float *&values) const
 get the data field at index for saving data in vtk,txt,... files. More...
 
virtual tBoolean getDataField (const tUSInt &index, tString &dataName, tUIndex &n, tDimension &dim, const double *&values) const
 get the data field at index for saving data in vtk,txt,... files. More...
 
virtual tBoolean getDataField (const tUSInt &index, tString &dataName, tUIndex &n, tDimension &dim, const long double *&values) const
 get the data field at index for saving data in vtk,txt,... files. More...
 
virtual tBoolean isAffine () const
 return true if the operator is either constant or linear More...
 
virtual tBoolean isGradientComputationable () const
 return true if the gradient of the magnetic excitation is computationable More...
 
void setDisplacement (const EMM_RealField &u)
 set the displacement field More...
 
void setDisplacement (const tReal &Ux, const tReal &Uy, const tReal &Uz)
 set the displacement field to an uniform vector defied on points More...
 
EMM_RealFieldgetDisplacement ()
 get the displacement for writing More...
 
const EMM_RealFieldgetDisplacement () const
 get the displacement for reading More...
 
const EMM_RealFieldgetDisplacement (const tReal &t) const
 get the veolicty at time More...
 
void setVelocity (const EMM_RealField &v)
 set the velocity of dicplacement defined on points More...
 
void setVelocity (const tReal &Vx, const tReal &Vy, const tReal &Vz)
 set the displacement velocity field to an uniform vector defined on points More...
 
EMM_RealFieldgetVelocity ()
 get the velocity for writing More...
 
const EMM_RealFieldgetVelocity (const tReal &t) const
 get the velocity at time More...
 
const EMM_RealFieldgetVelocity () const
 get the velocity at t for reading More...
 
EMM_RealFieldgetAccelerator ()
 get the accelerator for writing More...
 
const EMM_RealFieldgetAccelerator () const
 get the accelerator for reading More...
 
virtual void setSolver (const tString &solverName)
 set the solver More...
 
void setSolver (SP::MATH_Solver solver)
 set the solver More...
 
MATH_SolvergetSolver ()
 get the solver of the system More...
 
void setElasticityState (const tFlag &v)
 set the elasticity state More...
 
tBoolean isSteadyState () const
 
tBoolean isEquilibriumState () const
 
tBoolean isFrozenState () const
 
void setTimeIntegrationMethod (const tFlag &m)
 set the time integration method for new field More...
 
const tFlaggetTimeIntegrationMethod () const
 get the time integration method for next time step More...
 
void setTimeIntegrationOrder (const tInt &o)
 set the time integration order for new field More...
 
const tUCIntgetTimeIntegrationOrder () const
 get the time integration order for new field More...
 
const tRealgetTimeStep () const
 get the time step for elasticty More...
 
void setCFL (const tReal &cfl)
 set the cfl for computing the initial time step More...
 
virtual tBoolean computeFieldsAtTime (const tReal &t, const tFlag &order, const EMM_RealArray &sigma, const EMM_RealField &dM_dt0, const EMM_RealField &M0)
 compute the fields of operator at time More...
 
virtual tBoolean updateAtNextTimeStep (const tReal &dt, const EMM_RealArray &sigma, const EMM_RealField &Mt)
 update the data of operator at next time step More...
 
virtual SP::EMM_BlockEquilibriumMatrix NewEquilibriumMatrix () const
 create the equilibrium matrix More...
 
void setIsEquilibriumMatrixReconditioned (const tBoolean &c)
 set to true if the equilibrium matrix is conditioned More...
 
const tBooleanisEquilibriumMatrixReconditioned () const
 get if the equilibrium matrix is conditioned More...
 
tBoolean computeEquilibriumState (const EMM_RealArray &sigma, const EMM_RealField &M, const EMM_RealField &U0, EMM_RealField &U)
 compute the equilibirum state $ div(\lambda^e:epsilon(U))=div(\lambda^e:\lambda^m:M \otimes M) $ More...
 
virtual void computeElasticStressMatrixProduct (const tUIndex &nData, const tDimension &dim, const tReal *U, tReal *D) const
 compute the elastic stress Matrix product $ A.U = - div \left (\tilde \lambda^e : \varepsilon(u) \right ) $ More...
 
virtual void computeElasticTensor (const EMM_RealField &U, EMM_2PackedSymmetricTensors &eTensor)
 compute the elastic tensor for all cells $ \epsilon(U)=\frac{1}{2} \left (\nabla U + \nabla^t U \right ) $ More...
 
void computeStress (const EMM_RealArray &sigma, const EMM_RealField &U, const EMM_RealField &M, EMM_RealField &stress) const
 compute the stress $ div(sigma(U,M))=div(\lambda^e:\epsilon(U))-div(\lambda^2:\lambda^m:M\otimes M)$ More...
 
virtual void computeElasticStress (const EMM_RealField &U, EMM_RealField &S) const
 compute the elastic stress for all cells $ div(\lambda^e:\epsilon(U)) $ More...
 
void computeElasticStress (const tUIndex &nData, const tDimension &dim, const tReal *U, tReal *D) const
 compute the elastic stress $ S_e(u) =div \left (\tilde \lambda^e : \varepsilon(u) \right )$ More...
 
void computeMagneticStress (const EMM_RealArray &sigma, const EMM_RealField &M, EMM_RealField &S) const
 compute the magnetic stress for all cells $ S=div(\lambda^e:\lambda^m:M\otimes M) $ More...
 
virtual void computeMagneticStress (const tReal &alpha, const tReal &beta, const EMM_RealArray &sigma, const EMM_RealField &M, EMM_RealField &S) const =0
 compute the magnetic stress for all cells from the stress $ S=alpha*S+beta*div(\lambda^e:\lambda^m:M\otimes M) $ More...
 
tReal computeEnergy (const tReal &t, const tUIndex &nCells, const tDimension &dim, const EMM_RealArray &sigma, const tReal *M) const
 compute the energy of the magnetostriction operator at current displacement and velocity More...
 
tReal computeCineticEnergyAtTime (const tReal &t) const
 compute the energy due to velocity More...
 
tReal computePotentialEnergyAtTime (const tReal &t) const
 compute the potential energy to the space variation of the displacement More...
 
tReal computeStressConstraintEnergy (const tReal &t) const
 compute the energy of the boundary stress constraint More...
 
virtual tString getName () const
 return an human reading name of the operator More...
 
const tBooleanisCubicVolume () const
 return the true if the element is cubic More...
 
const tRealgetElementVolume () const
 return the adimensionized volume of the element More...
 
void getSharedPointer (SP::CORE_Object &p)
 get the shared pointer of this class into p More...
 
void getSharedPointer (SPC::CORE_Object &p) const
 get the shared pointer of this class into p More...
 
tString getClassName () const
 return the class name of the object More...
 
tString getIdentityString () const
 return the identity string of the object of the form className_at_address More...
 
tString getPointerAddress () const
 return the identity string of the object More...
 
template<class T >
tBoolean isInstanceOf () const
 test if the clas T is an instance of this class More...
 
tBoolean isInstanceOf (const tString &name) const
 test if the object is an instance of className More...
 

Static Public Member Functions

static void setIsMemoryChecked (const tBoolean &v)
 set if the memory checking is used More...
 
static void setOut (SP::CORE_Out out)
 set the output stream More...
 
static void resetOut ()
 reset the output stream More...
 
static void setThread (SP::CORE_Thread thread)
 set the thread More...
 
static void resetThread ()
 reset the output stream More...
 
static CORE_Outout ()
 get the output More...
 
static SP::CORE_Out getOut ()
 get the output More...
 
static CORE_ThreadgetThread ()
 get the profilier More...
 
static const tBooleanisMemoryChecked ()
 get if the memory checking is used More...
 
static tString getClassName (const tString &identityString)
 return the class name of the object More...
 
template<class T >
static tString getTypeName ()
 get type name More...
 
static tBoolean is64Architecture ()
 return true if the machine is a 64 bits machine More...
 
static tBoolean is32Architecture ()
 return true if the machine is a 32 bits machine More...
 
static tString pointer2String (const void *obj)
 return the string representation of a pointer More...
 
static void printObjectsInMemory (ostream &f)
 print object in memory More...
 
static void printObjectsInMemory ()
 print object in memory in the standart output More...
 
static tChar getMaxChar ()
 get the max value for tChar type More...
 
static tChar getMinChar ()
 get the min value for tChar type More...
 
static tUChar getMaxUChar ()
 get the max value for tUChar type More...
 
static tUChar getMinUChar ()
 get the min value for tUChar type More...
 
static tSInt getMaxSInt ()
 get the max value for tSInt type More...
 
static tSInt getMinSInt ()
 get the min value for tSInt type More...
 
static tUSInt getMaxUSInt ()
 get the max value for tUSInt type More...
 
static tUSInt getMinUSInt ()
 get the min value for tUSInt type More...
 
static tInt getMaxInt ()
 get the max value for tInt type More...
 
static tInt getMinInt ()
 get the min value for tInt type More...
 
static tUInt getMaxUInt ()
 get the max value for tUInt type More...
 
static tUInt getMinUInt ()
 get the min value for tUInt type More...
 
static tLInt getMaxLInt ()
 get the max value for tLInt type More...
 
static tLInt getMinLInt ()
 get the min value for tLInt type More...
 
static tULInt getMaxULInt ()
 get the max value for tULInt type More...
 
static tULInt getMinULInt ()
 get the min value for tULInt type More...
 
static tLLInt getMaxLLInt ()
 get the max value for tULInt type More...
 
static tLLInt getMinLLInt ()
 get the min value for tLLInt type More...
 
static tULLInt getMaxULLInt ()
 get the max value for tULLInt type More...
 
static tULLInt getMinULLInt ()
 get the min value for tULLInt type More...
 
static tFloat getMaxFloat ()
 get the max value for tFloat type More...
 
static tFloat getMinFloat ()
 get the min value for tFloat type More...
 
template<class T >
static T getEpsilon ()
 get the epsilon value for T type More...
 
template<class T >
static T getInfinity ()
 get the infinity for T type More...
 
static tFloat getFloatEpsilon ()
 get the epsilon value for tFloat type More...
 
static tFloat getFloatInfinity ()
 get the infinity value for tFloat type More...
 
static tDouble getMaxDouble ()
 get the max value for tDouble type More...
 
static tDouble getMinDouble ()
 get the min value for tDouble type More...
 
static tDouble getDoubleInfinity ()
 get the infinity value for tFloat type More...
 
static tDouble getDoubleEpsilon ()
 get the epsilon value for tDouble type More...
 
static tLDouble getMinLDouble ()
 get the min value for tLDouble type More...
 
static tLDouble getMaxLDouble ()
 get the max value for tLDouble type More...
 
static tLDouble getLDoubleEpsilon ()
 get the epsilon value for tLDouble type More...
 
static tDouble getLDoubleInfinity ()
 get the infinity value for tDouble type More...
 
static tIndex getMaxIndex ()
 get the max value for the array/vector indexing type More...
 
static tIndex getMinIndex ()
 get the min value for the array/vector indexing type More...
 
static tUIndex getMaxUIndex ()
 get the max value for difference the array/vector indexing type More...
 
static tUIndex getMinUIndex ()
 get the min value for difference the array/vector indexing type More...
 
static tFlag getMaxFlag ()
 get the max value for the tFlag type More...
 
static tFlag getMinFlag ()
 get the min value for the tFlag type More...
 
static tUInteger getMaxUInteger ()
 get the max value for the unsigned integer type More...
 
static tUInteger getMinUInteger ()
 get the min value for the unsigned integer type More...
 
static tInteger getMaxInteger ()
 get the max value for the integer type More...
 
static tInteger getMinInteger ()
 get the min value for the integer type More...
 
static tReal getMaxReal ()
 get the max value for the real type More...
 
static tReal getMinReal ()
 get the min value for the real type More...
 
static tReal getRealEpsilon ()
 get the eps which is the difference between 1 and the least value greater than 1 that is representable. More...
 
static tReal getRealInfinity ()
 get the infinity value More...
 
template<class T >
static T computeEpsilon ()
 compute epsilon More...
 

Static Public Attributes

static const tFlag CANONICAL_MASS_MATRIX =0
 mass matrix whose each element is real More...
 
static const tFlag BLOCK_MASS_MATRIX =1
 mass matrix whose each element is a digonal matrixof size 3 More...
 
static const tFlag CONDENSED_MASS_MATRIX =2
 mass matrix is diagonal More...
 
static const tFlag P1 =1
 
static const tFlag TE =0
 
static const tFlag FROZEN_STATE =1
 
static const tFlag EQUILIBRIUM_STATE =3
 
static const tFlag UNSTEADY_STATE =0
 
static const tReal Mu0 =4*M_PI*1e-07
 
static const tReal Gamma =-1.7e11
 
static const tDimension X =0
 
static const tDimension Y =1
 
static const tDimension Z =2
 
static const tReal NULL_VALUE [] ={0,0,0}
 

Protected Member Functions

 EMM_DisplacementFEMOperator (void)
 create More...
 
virtual ~EMM_DisplacementFEMOperator (void)
 destroy More...
 
virtual void buildDataOnBoundaryFaces (const EMM_Grid3D &mesh, const EMM_LimitConditionArray &limitConditionOnPoints, const EMM_RealField &U0, EMM_RealField &DnU0)
 build the data on boundary faces More...
 
virtual tBoolean solveAcceleratorSystem (EMM_RealField &V)
 solve the velocity form the accelerator matrix : M.X=V V:=X More...
 
virtual void spaceProjection (EMM_RealField &V) const
 make the projection of the vector B into the solving linear space More...
 
virtual void spaceProjection (const EMM_RealField &V0, EMM_RealField &V) const
 make the projection of the vector B into the solving linear space More...
 
virtual void spaceRelevant (EMM_RealField &V) const
 make the rebuild of the vector V from the solving space. More...
 
virtual void computeElasticTensor (const tUIndex &nData, const tDimension &dim, const tReal *U, EMM_2PackedSymmetricTensors &eTensor) const
 compute the elastic tensor for all cells More...
 
virtual void computeElasticStress (const tBoolean &withConstraints, const tReal &beta, const tUIndex &nData, const tDimension &dim, const tReal *U, tReal *D) const
 compute the elastic stress $ S_e(u) = \beta * div \left (\tilde \lambda^e : \varepsilon(u) \right )$ More...
 
virtual void computeMagneticStress (const tReal &alpha, const tReal &beta, const tUIndex &nCells, const tDimension &dim, const EMM_RealArray &sigma, const tReal *M, const tUIndex &nData, tReal *D) const
 compute the magnetic stress $ S=\alpha S + \beta * div \left (\sigma^2 . \tilde \lambda^2 : ( \lambda^m : m \otimes m ) \right ) $ to elastic stress S More...
 
virtual void toDoAfterThisSetting ()
 method called after the setting of the shared pointer this method can only be called once. More...
 
virtual void initializeEquilibriumSolver (const EMM_RealField &U0)
 initialize the equilibrium solver More...
 
void setThis (SP::CORE_Object p)
 set this weak shared pointer called toDoAfterThis setting method More...
 

Private Member Functions

 SP_OBJECT (EMM_DisplacementFEMOperator)
 
tBoolean buildDataOnNeumannBoundaryFaces (const EMM_Grid3D &mesh, const EMM_LimitConditionArray &limitConditionOnPoints, const EMM_RealField &DnU0, EMM_RealField &C) const
 build the data on boundary faces More...
 
void addBoundaryElasticStress (const tReal &beta, const tUIndex &nPoints, const tDimension &dim, tReal *D) const
 add the elastic stress from boundary More...
 

Private Attributes

tFlag mMassMatrixType
 
SP::EMM_MassMatrix mMassMatrix
 

Static Private Attributes

static const tCInt INT_GRAD_PHI []
 
static const tUCInt INT_GRAD_PHI_FACTOR =4
 

Detailed Description

This class describes the displacement operator defined on the points of the mesh.

It solves the adimensionzed equations by finite element method:

$ \displaystyle \kappa \frac{\partial^2 u}{\partial t^2} = div( \tilde \lambda^e:\epsilon(u)) - div( \sigma^2(x) \tilde \lambda^e:\tilde \lambda^m : m \otimes m ) $

with

To compute the normalized displacement $ u $, we multiply by an arbitrary function $ v $ the conservation of momentum normalized equation and by integrating in the whole normalized domain and after using the green formula, for dirichlet problem v $ \in R^3 $ where v=0 on $ \partial \omega_0 $ , we obtain by taking into account the Neumann condition on $ \partial \omega_1$, $ \left ( \lambda^e:\epsilon(U) - \lambda^e:\lambda^m : M \otimes M \right ) \cdot n = C $

$ \displaystyle \int_\omega \frac{\partial^2 u}{\partial t^2} v d\omega = - \int_\omega \left ( \tilde \lambda^e:\epsilon(u) \right): \nabla v d\omega + \int_{\partial \omega_1} v. \left ( \tilde \lambda^e : \varepsilon(u) \right ). N d\sigma + $

$ \int_\omega \left (\tilde \lambda^e:\tilde \lambda^m:m \otimes m \sigma^2(x) \right ) : \nabla v d\omega $

With the applied forces, it becomes:

$ \displaystyle \int_\omega \frac{\partial^2 u}{\partial t^2} v d\omega = - \int_\omega \left ( \tilde \lambda^e:\epsilon(u) \right): \nabla v d\omega + \int_{\partial \omega_1} v. C d\sigma + $

$ \int_\omega \left (\tilde \lambda^e:\tilde \lambda^m:m \otimes m \sigma^2(x) \right ) : \nabla v d\omega $

The 3d-variable $ u(t,x)=[u_0(t,x),u_1(t,x),u_2(t,x)] $ is decomposed in $ R^3 $ with $ \displaystyle u_k(t,x)=\sum_{p=0}^{p=N-1} u_p^k(t) \Phi_p(x) $ where N is the number of points of the mesh of the magnetized domain, $ \Phi_p $ is the Q1 base element : $ \Phi_p(x,y,z)=c_7.xyz+c_6.xy+c_5.yz+c_4.xz+c_3.x+c_2.y+c_1.z+c_0$ which is null in all the mesh points except at the point p where its value is 1.

The points of the mesh is composed by

We can have a Dirichlet condition on periodical faces : $ \Gamma_p \cap \Gamma_d \neq \emptyset $.

$ \forall q \in J=I \cup \Gamma_n \cup \Gamma_m $, on all free points, we take $ v=\Phi_q $, the k-coordinate projection, we have (as $ \tilde \lambda^e_{ijkl}=\tilde \lambda^e_{ijlk} $):

$ \displaystyle \frac{d^2}{dt^2}\int_\omega u_k(t,x) \Phi_q(x) d\omega = - \int_\omega \sum_{jst} \left ( \tilde \lambda^e_{kjst} \frac{\partial u_s }{\partial x_t } \frac{\partial \Phi_q }{\partial x_j } \right ) d\omega + \int_{\Gamma_n} C_k (x) \cdot \Phi_q d\sigma + \displaystyle \int_\omega \left ( \sum_{jstli} \tilde \lambda^e_{kjst} \tilde \lambda^m_{stli} \sigma^2(x) m_l m_i \frac{\partial \Phi_q }{\partial x_j }\right ) d\omega $

The magnetized domain is discretized with M parallelepiped cells, $ \omega = \displaystyle \bigcup_{c=0}^{c=M-1} \omega_c $, $ \Gamma_n = \displaystyle \bigcup_{f=0}^{f=F-1} \gamma_f $.

$ \displaystyle \frac{d^2}{dt^2} \left ( \sum_{p \in N } u_p^k(t) \sum_{c=0}^{M-1} \int_{\omega_c} \Phi_p(x) \Phi_q(x) d\omega \right ) = - \sum_{p \in N} \sum_{c=0}^{M-1} \int_{\omega_c} \sum_{jst} \left ( \tilde \lambda^e_{kjst} u_p^s(t)\frac{\partial \Phi_p }{\partial x_t } \frac{\partial \Phi_q }{\partial x_j } \right ) d\omega + \sum_{f=0}^{F-1} \int_{\gamma_f} C^k_p \Phi_p \cdot \Phi_q d\sigma + \displaystyle \sum_{c=0}^{M-1} \int_{\omega_c} \left ( \sum_{jstli} \tilde \lambda^e_{kjst} \tilde \lambda^m_{stli} \sigma_i^2 m_l m_i \frac{\partial \Phi_q }{\partial x_j }\right ) d\omega $

On the discretized domain, we obtain the system , $ \forall k \in \{0,1,2\}, \forall q \in J$:

$ \displaystyle \frac{d^2}{dt^2} \sum_{p \in N } M_{pq} U_{3p+k}(t) = \sum_{p \in N } \sum_{s \in \{0,1,2\}} A_{3q+k,3p+s}.U_{3p+s}(t) =B_{3q+k}(M) + C_{3q+k}$ where

So we have:

$ \displaystyle \forall q \in J, \frac{d^2}{dt^2} \sum_{p \in N } \sum_{s \in \{0,1,2\}} M_{3q+k,3p+s} U_{3p+s}(t) = \sum_{p \in N } \sum_{s \in \{0,1,2\}} A_{3q+k,3p+s}.U_{3p+s}(t)+B_{3q+k}(M)+C_{3q+k} $

where M_{p,q} is defined by a mass block matrix whose block is $I_3 $ :

$ M_{3q+k,3p+s}=C_{q,p} \delta_{ks} $ with $ \delta_{ks}=1$ if and only if $ k=s $.

The linear equation to solve is :

$ \displaystyle \frac{d^2}{dt^2} M.U(t) = A.U(t)+B(M(t)) +C $

The time step scheme is given by a taylor expansion of order 2 with time step $ dt_n=t^{n+1}-t^n$ and with $ \eta=\frac{dt_n}{dt_{n-1}} $

$ \frac{\partial^2 U}{\partial t^2}= \displaystyle \frac{2. \eta}{(\eta+1) \cdot dt_{n}^2} \left ( U^{n+1}+\eta. U^{n-1}-(1+\eta).U^n \right ) $

we solve the linear system : $ M . W = S $ where $ S= \left ( B- A \cdot U^n \right) $

and we deduce the new value of the displacment field thanks to W :

$ U^{n+1} = \frac{(\eta+1)\cdot.dt_{n}^2}{2\eta} W +(1+\eta) U^n - \eta U^{n-1} $.

This formulation leads to a non squared matrix. In order to inverse rapidly the matrix M , the matrix is turned into a symmetric definite positive squared matrix by adding diagonal rows on linked points in $ \Gamma_f \cup \Gamma_s $ :

$ \forall q \in N \setminus J , M_{3q+k,3p+s}= \delta_{pq}.\delta{ks} $ and

$ \forall q \in N \setminus J , S_{3q+k}= 0 $

to ensure that $ W_{3q+k}=0 $ after resolving the linear system.

Then U is rebuild by the formulas :

So to solve the U we use the following algorithm:

Note that if we have a Dirichlet condition depending on time (not implemented yet), the projection of S of the solving space will impose to set :

$ \forall q \in \Gamma_d, \forall k \in \{0,1,2\}, S_{3q+k}=\frac{2\eta}{(\eta+1) \cdot dt_{n}^2} \left ( U^0(t_{n+1},3q+k)+\eta. U_{3q+k}^{n-1}-(1+\eta).U^n_{3q+k} \right ) \neq 0 $

To reduce the size of the system, a map from N into J may be built but it will need more memory size to store the map and it is not sure that a lot of CPU time may be saved (not implemented).

To compute the equilibrium state we have to solve the equations : $ \displaystyle div( \tilde \lambda^e:\epsilon(u)) - div( \sigma^2(x) \tilde \lambda^e:\tilde \lambda^m : m \otimes m ) = 0$

with

The weak formulation gives :

$ \displaystyle - \int_\omega \left ( \tilde \lambda^e:\epsilon(u) \right): \nabla v d\omega + \int_{\partial \omega_1} v. \left ( \tilde \lambda^2 : \varepsilon(u) \right ). N d\sigma + $

$ \int_\omega \left (\tilde \lambda^e:\tilde \lambda^m:m \otimes m \sigma^2(x) \right ) : \nabla v d\omega = 0 $

In order to ensure the definite positive of the operator, we put it in the form : $ \displaystyle \int_\omega \left ( \tilde \lambda^e:\epsilon(u) \right): \nabla v d\omega = \int_{\partial \omega_1} v. C d\sigma + $

$ \int_\omega \left (\tilde \lambda^e:\tilde \lambda^m:m \otimes m \sigma^2(x) \right ) : \nabla v d\omega $

The discrete formulation is

$ \sum_{p \in N } \sum_{s \in \{0,1,2\}} A_{3q+k,3p+s}.U_{3p+s}(t) = B_{3q+k}(M) + C_{3q+k}$ where

To compute $ \displaystyle \int_{\omega_c} \Phi_p \Phi_q d\omega $ , $ \displaystyle \int_{\omega_c} \frac{\partial \Phi_p }{\partial x_l } \frac{\partial \Phi_q }{\partial x_j } d\omega $ or $ \displaystyle \int_{\omega_c} \frac{\partial \Phi_q }{\partial x_j }d\omega $, $ \displaystyle \int_{\gamma_f} \Phi_p \Phi_q d\gamma $ , each cell $ \omega_c \subset \omega $ and each $ \gamma_f \subset \Gamma_n $ of the mesh is transformed into the referenced cell in $ [0,1]\times[0,1]\times[0,1]$ with reference nodes $P_0=(0,0,0)$, $P_1=(1,0,0)$, $P_2=(0,1,0)$, $P_3=(1,1,0)$, $P_4=(0,0,1)$, $P_5=(1,0,1)$, $P_6=(0,1,1)$, $P_7=(1,1,1)$ by the transform function $ T(r,s,t)=(N^0_0+h_0.r,N^1_0+h_1.s,N_0^2+h_2.t) $ where $ r,s,t \in [0,1]^3=\hat{\omega} $, $ N_0 $ if the base corner (min point) of the mesh cell $ \omega_c $, and $ h_0,h_1,h_2 $, the size of the cell mesh $ w_c $.

The corresponding reference base function $ \displaystyle \hat{\Phi_i} $ on the cell 's point $ P_i $ is given by $ \displaystyle \Phi_i(P_j)=\delta_{ij} $.

The integral is transformed into a referenced cell: $ \displaystyle \int_{{\omega_c}} \frac{\partial \Phi_q }{\partial x_j }d{\omega_c} = |\omega_c| \int_{\hat{\omega}} \frac{\partial \hat{\Phi_q} }{\partial r_j }\frac{1}{h_j} d{\hat{\omega}} $ where $ |\omega_c| = h_0.h_1.h_2 $ by normalization.

The computation $ \int_{\hat{\omega}} \frac{\partial \hat{\Phi_q} }{\partial r_j }d\hat{\omega} $ is done as follow:

\begin{tabular}{llllllll} $ i $ & $ \displaystyle \hat{\Phi_i}$ & $ \displaystyle \frac{\partial \hat{\Phi_i}}{\partial r} $ & $ \displaystyle \frac{\partial \hat{\Phi_i}}{\partial s} $ & $ \displaystyle \frac{\partial \hat{\Phi_i}}{\partial t} $ & $ \displaystyle \int_{\hat{\omega}} \frac{\partial \hat {\Phi_i}}{\partial r }d\hat{\omega}$ & $ \displaystyle \int_{\hat{\omega}} \frac{\partial \hat {\Phi_i}}{\partial s }d\hat{\omega}$ & $ \displaystyle \int_{\hat{\omega}} \frac{\partial \hat {\Phi_i}}{\partial t }d\hat{\omega}$ \\ $0$ & $ \displaystyle (1-r)(1-s)(1-t)$ & $ \displaystyle (1-s)(t-1)$ & $ \displaystyle (1-r)(t-1)$ & $ \displaystyle (1-r)(s-1)$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ \\ $1$ & $ \displaystyle r(1-s)(1-t)$ & $ \displaystyle (1-s)(1-t)$ & $ \displaystyle r(t-1)$ & $ \displaystyle r(s-1)$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ \\ $2$ & $ \displaystyle (1-r)s(1-t)$ & $ \displaystyle s(t-1)$ & $ \displaystyle (1-r)(1-t)$ & $ \displaystyle (r-1)s$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ \\ $3$ & $ \displaystyle rs(1-t)$ & $ \displaystyle s(1-t)$ & $ \displaystyle r(1-t)$ & $ \displaystyle -rs$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ \\ $4$ & $ \displaystyle (1-r)(1-s)t$ & $ \displaystyle (s-1)t$ & $ \displaystyle (r-1)t$ & $ \displaystyle (1-r)(1-s)$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ \\ $5$ & $ \displaystyle r(1-s)t$ & $ \displaystyle (1-s)t$ & $ \displaystyle -rt$ & $ \displaystyle r(1-s)$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ \\ $6$ & $ \displaystyle (1-r)st$ & $ \displaystyle -st$ & $ \displaystyle (1-r)t$ & $ \displaystyle (1-r)s$ & $ \displaystyle -\frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ \\ $7$ & $ \displaystyle rst$ & $ \displaystyle st$ & $ \displaystyle rt$ & $ \displaystyle rs$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ & $ \displaystyle \frac{1}{4}$ \end{tabular}

We can compress formula by $ \hat \Phi_p(x_0,x_1,x_2)=\displaystyle \prod_{k=0}^{k=2} (1-x_k)^{1-p_k}\cdot x_k^{p_k} $ where $ \displaystyle p=\sum_{k=0}^{k=2} p_k.2^k=(p_0,p_1,p_2) $, base point of the reference element.

Then we have $ \displaystyle \frac{\partial \hat \Phi_p}{\partial x_i }=(-1)^{1-p_i} \prod_{k=0,k\neq i}^{k=2} (1-x_k)^{1-p_k} \cdot x_k^{p_k} $.

So we have $ \displaystyle \int_{\hat \omega} \frac{\partial \hat \Phi_q }{\partial x_j }d{\hat \omega} = \displaystyle (-1)^{1-q_j} \frac{1}{4} $ with $ q=(q_0,q_1,q_2)$

It can be rewritten as $ \displaystyle \int_{\omega_c} \frac{\partial \Phi_q }{\partial x_j }d{\omega_c} = \frac{h_0.h_1.h_2}{4.h_j} . D_ {qj} $ where D is the matrix 8x3:

\begin{tabular}{lll} -1 & -1 & -1 \\ 1 & -1 & -1 \\ -1 & 1 & -1 \\ 1 & 1 & -1 \\ -1 & -1 & 1 \\ 1 & -1 & 1 \\ -1 & 1 & 1 \\ 1 & 1 & 1 \\ \end{tabular}

To compute the following integrals, we note that :

So, $ \int_0^1 (1-x)^{2-p} \cdot x^p dx=I(p) $ where

So $ I(p)=\frac{1}{6}\cdot (|p-1|+1) $

So to compute $ \displaystyle \int_{\omega_c} \frac{\partial \Phi_p}{\partial x_i}\frac{\partial \Phi_q}{\partial x_j} d\omega_c=\displaystyle \frac{h_0.h_1.h_2}{h_i.h_j} \int_{\hat \omega } \frac{\partial \hat \Phi_p}{\partial x_i}\frac{\partial \hat \Phi_q}{\partial x_j} d{hat \omega} $.

$ \forall p,q \in [0,7]^2, \forall i \neq j , \int_{\hat \omega } \frac{\partial \hat \Phi_p}{\partial x_i}\frac{\partial \hat \Phi_q}{\partial x_j} d{\hat \omega} = \displaystyle \frac{1}{6.2.2} \cdot (-1)^{p_i+q_j} \cdot (|p_k+q_k-1|+1) $, k is the only value in {0,1,2} different from i and j.

$ \forall p,q \in [0,7]^2, \forall i \int_{\hat \omega } \frac{\partial \hat \Phi_p}{\partial x_i}\frac{\partial \hat \Phi_q}{\partial x_i} d{\hat \omega} = \displaystyle \frac{1}{6.6} \cdot (-1)^{p_i+q_i} \cdot \prod_{k=0,k\neq i}^{k=2} (|p_k+q_k-1|+1) $.

To compute the constraint matrix, $ \displaystyle C_{p,q} = \displaystyle \int_{\Gamma_n} \Phi_p(x) \Phi_q(x) d{\gamma} = \sum_{\gamma_f | P_p,P_q \in \gamma_f^2} \displaystyle \int_{\gamma_f} \Phi_p(x) \Phi_q(x) d{\gamma} $

$ \displaystyle \int_{\gamma_f} \Phi_p(x) \Phi_q(x) d{\gamma} = \prod_{k=0,k \neq l}^{k=2} h_k. \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \cdot \hat \Phi_q(x_0,x_1,x_2) dx_k $ where the normal of the face f is on the l-direction. But,

$ \displaystyle \prod_{k=0,k \neq l}^{k=2} h_k. \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \cdot \hat \Phi_q(x_0,x_1,x_2) dx_k = $

$ (1-x_l)^{2-(p_l+q_l)}\cdot x_l^{p_l+q_l} \prod_{k=0,k \neq l}^{k=2} h_k \cdot \int_0^1 (1-x_k)^{2-(p_k+q_k)}\cdot x_k^{p_k+q_k} dx_k $.

As we have:

$ \displaystyle \int_0^1 (1-x_k)^{2-(p_k+q_k)}\cdot x_k^{p_k+q_k} dx_k = I(p_k+q_k)=\frac{1}{6}\cdot ( |pk+qk-1|+1) $

we conclude

$ \displaystyle \int_{\gamma_f} \Phi_p(x) \Phi_q(x) d{\gamma} = \frac{1}{36} \cdot \prod_{k=0,k\neq l}^{k=2} h_k. (|p_k+q_k-1|+1) $

To compute the mass matrix, $ \displaystyle M_{p,q}=\displaystyle \int_{\omega} \Phi_p(x) \Phi_q(x) d{\omega} = \sum_{\omega_c | P_p,P_q \in \omega_c^2} \displaystyle h_0.h_1.h_2. \int_0^1 \int_0^1 \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \hat \Phi_q(x_0,x_1,x_2) dx_0.dx_1.dx_2 $

$ \displaystyle \int_0^1 \int_0^1 \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \hat \Phi_q(x_0,x_1,x_2) dx_0.dx_1.dx_2 = \displaystyle \int_0^1 \int_0^1 \int_0^1 \prod_{k=0}^{k=2} (1-x_k)^{1-p_k-q_k}\cdot x_k^{p_k+q_k} dx_0.dx_1.dx_2 $

$ \displaystyle \int_0^1 \int_0^1 \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \hat \Phi_q(x_0,x_1,x_2) dx_0.dx_1.dx_2 = \displaystyle \prod_{k=0}^{k=2} I(p_k+q_k) $

$ \displaystyle \int_0^1 \int_0^1 \int_0^1 \hat \Phi_p(x_0,x_1,x_2) \hat \Phi_q(x_0,x_1,x_2) dx_0.dx_1.dx_2 = \displaystyle \frac{1}{6^3} \prod_{k=0}^{k=2} \left (|p_k+q_k-1|+1\right ) $

$ \displaystyle \int_0^1 \int_0^1 \int_0^1 \hat \Phi_p(r,s,t) \hat \Phi_q(r,s,t) dr.ds.dt = \displaystyle \frac{1}{6^3} \Delta_{p,q} $

where $ \Delta $ is a column packed symmetric matrix matrix 8x8:

\begin{tabular}{lllllllll} p,q & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ 0 & 8 & 4 & 4 & 2 & 4 & 2 & 2 & 1 \\ 1 & 4 & 8 & 2 & 4 & 2 & 4 & 1 & 2 \\ 2 & 4 & 2 & 8 & 4 & 2 & 1 & 4 & 2 \\ 3 & 2 & 4 & 4 & 8 & 1 & 2 & 2 & 4 \\ 4 & 4 & 2 & 2 & 1 & 8 & 4 & 4 & 2 \\ 5 & 2 & 4 & 1 & 2 & 4 & 8 & 2 & 4 \\ 6 & 2 & 1 & 4 & 2 & 4 & 2 & 8 & 4 \\ 7 & 1 & 2 & 2 & 4 & 2 & 4 & 4 & 8 \\ \end{tabular}

If we use the mean formula of integration $ \displaystyle \int_0^1 (1-x)^{2-(p_k+q_k)}.x^{p_k+q_k} dx = \frac{1}{2}.\left( (1-1)^{2-(p_k+q_k)}.1^{p_k+q_k} + (1-0)^{2-(p_k+q_k)}.0^{p_k+q_k} \right ) $,

we have $ \displaystyle \int_0^1 (1-x)^{2-(p_k+q_k)}.x^{p_k+q_k} dx = \delta_{p_k,q_k} . \frac{1}{2} $.

So $ \displaystyle M_{p,q}=\displaystyle \sum_{\omega_c | P_p,P_q \in \omega_c^2} \int_{\omega_c} \Phi_p(x) \Phi_q(x) d{\omega_c} = \displaystyle \sum_{ \omega_c | P_p,P_q \in \omega_c^2} | \cdot h_0.h_1.h_2.\frac{1}{8} \delta_{p,q} $ with is a diagonal matrix called Condensed Mass matrix.

The K & M matrix are computing during the discretization step because they do not evolutate during the relaxation process.

The normalized energy of this implemented displacement class is reduced to its cinetic energy:

$ e_m(m)=\displaystyle +\frac{1}{4} \int_\omega |\frac{\partial u}{\partial t}|^2d\omega $

The velocity verifies by using a Taylor expansion of order 2 in time with $ \eta=\displaystyle \frac{t_{n+1}-t_n}{t_n-t_{n-1}}=\frac{dt_n}{dt_{n-1}}$

$ \frac{\partial u}{\partial t} = \displaystyle \frac{1}{dt \cdot (\eta+1)} \cdot \left ( u(t_{n+1})-\eta^2 u(t_{n-1}) -(1-\eta^2) u(t_n) \right ) $

@author Stephane Despreaux
@version 1.0

Constructor & Destructor Documentation

◆ EMM_DisplacementFEMOperator()

EMM_DisplacementFEMOperator::EMM_DisplacementFEMOperator ( void  )
protected

create

References BLOCK_MASS_MATRIX, and mMassMatrixType.

◆ ~EMM_DisplacementFEMOperator()

EMM_DisplacementFEMOperator::~EMM_DisplacementFEMOperator ( void  )
protectedvirtual

destroy

Member Function Documentation

◆ addBoundaryElasticStress()

void EMM_DisplacementFEMOperator::addBoundaryElasticStress ( const tReal beta,
const tUIndex nPoints,
const tDimension dim,
tReal D 
) const
private

add the elastic stress from boundary

Parameters
[in]beta: multiplicator of Boundary Stress B
[in]nPointsnumber of points
[in]dimdimension of the problem in [1,3]
[in,out]Dthe elastic stress of size nPoints*dim

D+=beta.B with $ B=\int_{partial omega} C.\phi d\sigma $

References EMM_DisplacementOperator::getConstraints(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), null, OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, tDimension, tReal, tUIndex, and tUInteger.

Referenced by computeElasticStress(), and getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adimensionize()

virtual void EMM_DisplacementOperator::adimensionize ( const tReal Le,
const tReal Ms,
const tReal T,
const tReal L 
)
inlinevirtualinherited

adimensionize the operator

Parameters
[in]Lecommon elasticity adimensionized parameter
[in]Mscommon magnetization at saturation
[in]Tcaracterictic time
[in]Lcaracteristic length

adimensionize the associated displacement operator

Reimplemented from EMM_Operator.

◆ backup()

tBoolean EMM_DisplacementOperator::backup ( const tString prefix,
const tString suffix,
const tString ext 
) const
virtualinherited

backup of the operator data into file(s) used for restoring

Parameters
prefix: common prefix of the saving files
suffix: common suffix of the saving files
ext: common extension of the saving files
Returns
true if the saving of the U & V file have succeeded

It saves

  • the current time step in {prefix}_dt_{suffix}.{ext}
  • U at previous time step in {prefix}_Unm1_{suffix}.{ext}
  • U at current time step in {prefix}_Un_{suffix}.{ext}
  • V at current time step in {prefix}_Vn_{suffix}.{ext}
  • dV/dt at current time step in {prefix}_Acc_{suffx}.{ext}

Reimplemented from EMM_Operator.

Reimplemented in EMM_DisplacementFVMOperator.

References EMM_DisplacementOperator::isEquilibriumState(), EMM_DisplacementOperator::isFrozenState(), EMM_DisplacementOperator::mAccelerator, EMM_DisplacementOperator::mDt, EMM_DisplacementOperator::mEpsilonUt, EMM_DisplacementOperator::mTimeIntegrationMethod, EMM_DisplacementOperator::mUn, EMM_DisplacementOperator::mUnm1, EMM_DisplacementOperator::mVn, CORE_Object::out(), CORE_Out::println(), EMM_Tensors::saveToFile(), tBoolean, EMM_DisplacementOperator::TE, and tString.

Referenced by EMM_DisplacementFVMOperator::backup(), and EMM_DisplacementOperator::getLimitConditionOnPointsByReference().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ buildDataOnBoundaryFaces()

virtual void EMM_DisplacementFEMOperator::buildDataOnBoundaryFaces ( const EMM_Grid3D mesh,
const EMM_LimitConditionArray limitConditionOnPoints,
const EMM_RealField U0,
EMM_RealField DnU0 
)
inlineprotectedvirtual

build the data on boundary faces

Parameters
meshthe mesh of the domain
limitConditionOnPoints: limit condition on points
U0: U at all points at t=0
DnU0: grad UO . N at each point slave Naumann points and Neumann points

recompute the DnUO with the formula :

  • $ C^d_q = 0 $ if q is not a Neumann points
  • $ C^d_q= \sum_{f | q \in \gamma_f } \sum_{p | p \in \gamma_f} (D_nU^0)^d_p \frac{1}{36} \cdot \prod_{k=0,k\neq l}^{k=2} h_k. (|p_k+q_k-1|+1) $ where the l is the direction of the normal to $ \gamma_f $

Implements EMM_DisplacementOperator.

References buildDataOnNeumannBoundaryFaces(), EMM_RealField::copy(), discretize(), EMM_RealField::NewInstance(), resetToInitialState(), EMM_RealField::setSize(), and tBoolean.

Here is the call graph for this function:

◆ buildDataOnNeumannBoundaryFaces()

tBoolean EMM_DisplacementFEMOperator::buildDataOnNeumannBoundaryFaces ( const EMM_Grid3D mesh,
const EMM_LimitConditionArray limitConditionOnPoints,
const EMM_RealField DnU0,
EMM_RealField C 
) const
private

build the data on boundary faces

Parameters
meshthe mesh of the domain
limitConditionOnPoints: limit condition on points
DnU0: grad UO . N at each point
C: the constraint of ach point of the mesh

compute the constraint on each point of the mesh with the formula :

  • $ C^d_q = 0 $ if q is not a Neumann points
  • $ C^d_q= \sum_{f | q \in \gamma_f } \sum_{p | p \in \gamma_f} (D_nU^0)^d_p \frac{1}{36} \cdot \prod_{k=0,k\neq l}^{k=2} h_k. (|p_k+q_k-1|+1) $ where the l is the dierction of the normal to $ \gamma_f $
    Returns
    false if U is null

periodicity of the domain

start=iq+Px.(jq+Py.kq)

References EMM_Grid3D::ELEMENT_POINTS, EMM_Grid3D::FACE_POINTS, EMM_Grid3D::GET_MASTER_PERIODIC_POINT(), EMM_DisplacementOperator::getAdimensionizedSegmentsSize(), EMM_DisplacementOperator::getConstraintFaces(), EMM_RealField::getDimension(), EMM_Grid3D::getNeighborsIndicators(), EMM_Grid3D::getPeriodicIndicator(), EMM_Grid3D::getSegmentsNumber(), EMM_RealField::getSize(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), EMM_RealField::getValues(), EMM_Grid3D::getVerticesNumber(), iand, EMM_RealField::initField(), EMM_Grid3D::IS_ELEMENT_MAGNETIZED(), EMM_Grid3D::NEUMANN_LIMIT_CONDITION, null, OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT_REDUCTION, EMM_Grid3D::POINTS_NUMBER_PER_ELEMENT, EMM_Grid3D::POINTS_NUMBER_PER_FACE, EMM_RealField::setDimension(), EMM_RealField::setSize(), EMM_Grid3D::SLAVE_LIMIT_CONDITION, tBoolean, tCellFlag, tDimension, tFlag, tInteger, tLimitCondition, tReal, tUCInt, tUIndex, tUInteger, and tUSInt.

Referenced by buildDataOnBoundaryFaces().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeCineticEnergy()

tReal EMM_DisplacementFEMOperator::computeCineticEnergy ( const EMM_RealField V) const
virtual

compute the energy of the magnetostriction operator at current displacement and velocity

Parameters
Vvelocity
Returns
cinetic energy value $ \int_\omega |\frac{\partial u}{\partial t}|(t) ^2 d\omega $

Implements EMM_DisplacementOperator.

References EMM_DisplacementOperator::getAdimensionizedVolumicMass(), EMM_RealField::getSize(), and mMassMatrix.

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeCineticEnergyAtTime()

tReal EMM_DisplacementOperator::computeCineticEnergyAtTime ( const tReal t) const
inlineinherited

compute the energy due to velocity

Parameters
ttime in [0,dt[ where dt is the time step
Returns
cinetic energy value $ \int_\omega |\frac{\partial u}{\partial t}|(t) ^2 d\omega $

References EMM_DisplacementOperator::computeCineticEnergy(), EMM_DisplacementOperator::getVelocity(), and tReal.

Referenced by EMM_DisplacementOperator::computeEnergy().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeElasticStress() [1/3]

void EMM_DisplacementFEMOperator::computeElasticStress ( const tBoolean withConstraints,
const tReal beta,
const tUIndex nData,
const tDimension dim,
const tReal U,
tReal D 
) const
protectedvirtual

compute the elastic stress $ S_e(u) = \beta * div \left (\tilde \lambda^e : \varepsilon(u) \right )$

Parameters
withConstraints: if true compute the whore opertaor if false, compute only the linear part of operator
betafactor of the strees to turn intto definite positive/negative matrix
nDatanumber of data for U (nCells or nVertices depending on the method)
dimdimension of the problem in [1,3]
Uthe displacement field values
Dthe elastic stress of size nData*dim

$ S_e(u) = - \beta \sum_{c \in [0,M[} \sum_{jt\in \{0,1,2\}^2} \tilde \lambda^e_{kjst} \int_{\omega_c} \frac{\partial \Phi_p }{\partial x_t } \frac{\partial \Phi_q }{\partial x_j } d\omega_c $

It is an affine operator $ S_e(U)= A. U + B.U_0 + C.F $ where

  • A is symmetric definite positive which is the linear part of the affine operator
  • $ B.U_0 + C.F $ is the constant part of the affine operator
    • $ U_0 $ is the Dirichlet values of the field
    • $ F $ is the applied forces

start=iq+Px.(jq+Py.kq)

Implements EMM_DisplacementOperator.

References addBoundaryElasticStress(), EMM_Grid3D::DIRICHLET_LIMIT_CONDITION, EMM_Grid3D::ELEMENT_POINTS, EMM_Grid3D::GET_MASTER_PERIODIC_POINT(), EMM_DisplacementOperator::getAdimensionizedSegmentsSize(), EMM_Operator::getElementVolume(), EMM_DisplacementOperator::getLambdaE(), EMM_DisplacementOperator::getLimitConditionOnPoints(), getNeighborsIndicator(), getPeriodicIndicator(), getPointsNumber(), EMM_4Tensors::getTensorSize(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), EMM_Grid3D::IS_ELEMENT_MAGNETIZED(), EMM_Tensors::isNotNull(), null, OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, EMM_Grid3D::POINTS_NUMBER_PER_ELEMENT, EMM_Grid3D::SLAVE_LIMIT_CONDITION, tBoolean, tCellFlag, tDimension, tFlag, tInteger, tLimitCondition, tReal, tUCInt, tUIndex, and tUInteger.

Referenced by EMMG_DisplacementFEMOperator::computeElasticStress(), and getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeElasticStress() [2/3]

virtual void EMM_DisplacementOperator::computeElasticStress ( const EMM_RealField U,
EMM_RealField S 
) const
inlinevirtualinherited

compute the elastic stress for all cells $ div(\lambda^e:\epsilon(U)) $

Parameters
Uthe displacement field
Sthe elastic stress field

It computes:

$ \forall (i,k) \in [0,N[\times[0,d[, S^i_k= \displaystyle div(\lambda^e:\varepsilon(u^i))_k = \displaystyle \sum_{l=0}^{d-1} \frac{\partial \left( \displaystyle \sum_{r,s=0}^{r,s=d-1} \lambda^e_{klrs} \frac{\partial u^i_s}{\partial x_r} \right )}{\partial x_l} $ where

  • $ u^i_s $ is the s-coordinate of the displacement u at cell i when s is in [0,d[ and d is the dimension of the space (i.e. 3).
  • $ x_r $ is the r-coordinate of points in cell

Reimplemented in EMMG_DisplacementFVM_VOGGROperator, EMMG_DisplacementFVM_SSGROperator, EMMG_DisplacementFVM_STEGROperator, EMMG_DisplacementFVM_VTEGROperator, and EMMG_DisplacementFEMOperator.

References EMM_RealField::getDimension(), EMM_RealField::getValues(), tDimension, tReal, and tUIndex.

Referenced by EMM_DisplacementOperator::computeElasticStress(), EMM_DisplacementOperator::computeElasticStressMatrixProduct(), EMM_DisplacementOperator::computeStress(), and EMM_DisplacementOperator::initializeEquilibriumSolver().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeElasticStress() [3/3]

void EMM_DisplacementOperator::computeElasticStress ( const tUIndex nData,
const tDimension dim,
const tReal U,
tReal D 
) const
inlineinherited

compute the elastic stress $ S_e(u) =div \left (\tilde \lambda^e : \varepsilon(u) \right )$

Parameters
nDatanumber of data for U (nCells or nVertices depending on the method)
dimdimension of the problem in [1,3]
Uthe displacement field values
Dthe elastic stress of size nData*dim

It computes $ S^i_e(u) = - \displaystyle \int_\Omega \left (\tilde \lambda^e : \varepsilon(u) \right ) : \nabla \phi^i d\Omega $

$ \forall d \in [0,3[, \forall q \in [0,P[, B[3q+d]= \displaystyle - \sum_{c \in V(P_q)} \int_{\omega_c} \sum_{p=0}^{p=8} \sum_{lrs} \left ( \lambda^c_{dlrs} u_{i_P}^s(t)\frac{\partial \Phi_p }{\partial x_r } \frac{\partial \Phi_q }{\partial x_l} \right ) d\omega $

where $i_P $ is the index of the p-th point into cell $ \omega_c $, P is the number of interior magnetized points and $ V(P_q) $ is the set of cells connected to point q.

Algorithm:

  • D=0, initialize to 0
  • pts={[0,0,0],[1,0,0],[0,1,0],[1,1,0],[0,0,1],[1,0,1],[0,1,1],[1,1,1]} local coordinates of cell points.
  • $ \forall i_Q \in [0, N[ $
    • $ \forall c \in V(iQ) $
      • $ iCell=i+jN_x+kN_x*N_y $ index of the cell c
      • if iCell is in magnetized domain
        • $ \lambda^e=getLambda^e(iCell)$ of size 3x3x3x3
        • $ \forall p \in [0,8[ $ loop on nodes of cell iCell of local coordinate $ Px,Py,Pz \in {0,1}^3 $.
          • iP is the global index of local point p
          • iP=(i+Px)+Nx*(j+Py)+Nx.Ny.(k+Pz)
          • $ \forall (d,l,r,s)\in R^4, D_{i_Q,d}-=\lambda^e_{klrs}.D_{pqrl}.U^{i_P}_s $ with
            • $ D_{pqrr}=\frac{h_0.h_1.h_2}{h^2_r} . \frac{1}{36}. (-1)^{p_r+q_r} . \prod_{k=0}^{k=2} (|p_k+q_k-1|+1) $
            • $ D_{pqrl}=\frac{h_0.h_1.h_2}{h_r.h_l}.\frac{1}{24}. (-1)^{p_r+q_l} . (|p_k+q_k-1|+1) k \neq l, k \neq r $

References EMM_DisplacementOperator::computeElasticStress(), tBoolean, tDimension, tReal, and tUIndex.

Here is the call graph for this function:

◆ computeElasticStressMatrixProduct()

virtual void EMM_DisplacementOperator::computeElasticStressMatrixProduct ( const tUIndex nData,
const tDimension dim,
const tReal U,
tReal D 
) const
inlinevirtualinherited

compute the elastic stress Matrix product $ A.U = - div \left (\tilde \lambda^e : \varepsilon(u) \right ) $

Parameters
nDatanumber of data for U (nCells or nVertices depending on the method)
dimdimension of the problem in [1,3]
Uthe displacement field values
Dthe elastic stress of size nData*dim

make the computation of A.U=-S_e.U for the elastic equilibrium matrix product with null constraints

Reimplemented in EMM_DisplacementFVM_VIGROperator.

References EMM_DisplacementOperator::computeElasticStress(), EMM_DisplacementOperator::computeElasticTensor(), tDimension, tReal, and tUIndex.

Here is the call graph for this function:

◆ computeElasticTensor() [1/2]

void EMM_DisplacementFEMOperator::computeElasticTensor ( const tUIndex nData,
const tDimension dim,
const tReal U,
EMM_2PackedSymmetricTensors eTensor 
) const
protectedvirtual

compute the elastic tensor for all cells

Parameters
nDatasize of the displacement field
dimdimension of the displacement field
Uvalues of the displacement field
eTensorthe elastic tensor of size 3x3 stored in column-packed symmetric upper matrix array of size 6

$ \forall (r,s) \in [0,3[^2, \varepsilon_{rs}= \displaystyle \frac{1}{2}\left ( \frac{\partial u_r}{\partial x_s} + \frac{\partial u_s}{\partial x_r} \right )=eTensor[r+(s*(s+1)/2)]$ where

  • $ u_r $ is the r-coordinate of the displacement u
  • $ x_s $ is the s-coordinate of point in cell

The finite element approximation of $ \frac{\partial u_r}{\partial x_s} $ at cell i , is given by

$ \displaystyle \frac{\partial u_r}{\partial x_s} = \displaystyle \frac{1}{|\omega|} \int_\omega \frac{\partial u_r}{\partial x_s} d\omega = \displaystyle \sum_{q=0}^{q=7} u_q^r \frac{D_{qs}}{4.h_s}$ where $ \displaystyle \frac{D_{qs}}{4}=\int_{\hat \omega} \frac{\partial \hat \Phi_q }{\partial r_s }d{\hat \omega} $

$ \varepsilon_{ks} $ is computed as follow in a packed symmetric column storage at cell i :

  • for all k in [0,3 [
    • $ \displaystyle \frac{dU^i_s}{dx_k}= \sum_{q=0}^{q=7} u_q^k \frac{D_{qs}}{4.h_s} $
    • for all s in [0,k[, $ \varepsilon_{ks} += \frac{1}{2}.\frac{dU^i_s}{dx_k} $
    • $ \varepsilon_{kk} = \frac{dU^i_k}{dx_k} $
    • for all s in ]k,3[, $ \varepsilon_{sk} += \frac{1}{2}. \frac{dU^i_s}{dx_k} $

Implements EMM_DisplacementOperator.

References CORE_MorseArray< T >::begin(), EMM_Grid3D::ELEMENT_POINTS, CORE_MorseArray< T >::fitToSize(), EMM_DisplacementOperator::getAdimensionizedSegmentsSize(), CORE_MorseArray< T >::getIndices(), getNeighborsIndicator(), getPointsNumber(), CORE_Array< T >::getSize(), EMM_2PackedSymmetricTensors::getTensorSize(), EMM_Tensors::getTensorsNumber(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), EMM_Tensors::getValues(), INT_GRAD_PHI, INT_GRAD_PHI_FACTOR, EMM_Grid3D::IS_ELEMENT_MAGNETIZED(), OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, EMM_Grid3D::POINTS_NUMBER_PER_ELEMENT, EMM_Tensors::setTensorsNumber(), tBoolean, tCellFlag, tCInt, tDimension, tReal, tUCInt, tUIndex, tUInteger, and CORE_MorseArrayIterator< T >::values().

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeElasticTensor() [2/2]

void EMM_DisplacementOperator::computeElasticTensor ( const EMM_RealField U,
EMM_2PackedSymmetricTensors eTensor 
)
virtualinherited

compute the elastic tensor for all cells $ \epsilon(U)=\frac{1}{2} \left (\nabla U + \nabla^t U \right ) $

Parameters
Uthe displacement field
eTensorthe elastic tensor of size 3x3 stored in row-packed symmetric upper matrix array of size 6

$ \forall (r,s) \in [0,3[^2, \varepsilon_{rs}= \displaystyle \frac{1}{2}\left ( \frac{\partial u_r}{\partial x_s} + \frac{\partial u_s}{\partial x_r} \right )=eTensor[r+(s*(s+1)/2)]$ where

  • $ u_r $ is the r-coordinate of the displacement u
  • $ x_s $ is the s-coordinate of point in cell

Reimplemented in EMM_DisplacementFVMOperator, and EMM_DisplacementFVM_VIGROperator.

References EMM_RealField::getDimension(), EMM_RealField::getValues(), tDimension, tReal, and tUIndex.

Referenced by EMM_DisplacementOperator::computeElasticStressMatrixProduct(), EMM_DisplacementFVMOperator::computeElasticTensor(), EMM_DisplacementOperator::computeFieldsAtTime(), EMM_DisplacementOperator::restore(), and EMM_DisplacementOperator::updateAtNextTimeStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeEnergy()

tReal EMM_DisplacementOperator::computeEnergy ( const tReal t,
const tUIndex nCells,
const tDimension dim,
const EMM_RealArray sigma,
const tReal M 
) const
inherited

compute the energy of the magnetostriction operator at current displacement and velocity

Parameters
tthe time in [0,dt[ where dt is the time step
nCells: number of cells
dimdimension of each point of mesh
sigmathe weight of each cell
Mthe magnetization field values
Returns
energy value : $ E(m,u)=\displaystyle \frac{1}{2} \int_\omega \sigma^4(x)[\tilde \lambda^e:(\tilde \lambda^m:m \otimes m)]:(\tilde \lambda^m:m \otimes m) d\omega $ $ \displaystyle -\int_\omega \sigma^2(x) \epsilon(u):(\tilde \lambda^e:(\tilde \lambda^m:m \otimes m)) d\omega $ $ \displaystyle +\frac{1}{2} \int_\omega (\tilde \lambda^e:\epsilon(u)):\epsilon(u) d\omega $ $ \displaystyle +\frac{1}{2} \int_\omega |\frac{\partial u}{\partial t}|^2d\omega $

References EMM_DisplacementOperator::computeCineticEnergyAtTime(), EMM_DisplacementOperator::computePotentialEnergyAtTime(), EMM_DisplacementOperator::computeStressConstraintEnergy(), EMM_DisplacementOperator::getConstraints(), EMM_DisplacementOperator::getElasticTensor(), EMM_Operator::getElementVolume(), CORE_Array< T >::getSize(), CORE_Object::getThread(), EMM_DisplacementOperator::isEquilibriumState(), EMM_DisplacementOperator::mLme, CORE_Thread::startChrono(), tBoolean, tReal, and tString.

Referenced by EMM_MagnetostrictionOperator::computeEnergy(), and EMM_DisplacementOperator::computeMagneticStress().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeEpsilon()

template<class T >
static T CORE_Object::computeEpsilon ( )
inlinestaticinherited

compute epsilon

Returns
the epsilon value eps=10^{-p/3} where p is defined by getEpsilon()=10^{-p}

◆ computeEquilibriumMatrixDiagonalConditioner()

void EMM_DisplacementFEMOperator::computeEquilibriumMatrixDiagonalConditioner ( MATH_Vector D) const
virtual

◆ computeEquilibriumState()

tBoolean EMM_DisplacementOperator::computeEquilibriumState ( const EMM_RealArray sigma,
const EMM_RealField M,
const EMM_RealField U0,
EMM_RealField U 
)
inherited

compute the equilibirum state $ div(\lambda^e:epsilon(U))=div(\lambda^e:\lambda^m:M \otimes M) $

Parameters
[in]sigma: the weight array due to unhomegeneous magnetization at saturation
[in]M: the magnetization field
[in]U0: the displacement field at dirichlet point
[out]Uthe dispacement field at equilibrium
Returns
true if the solving succeeds
  • compute the right hand side of the equation $ W=W_m-W_e $
  • make a projection of W into f the solving space (W=U0 on Dirichlet point) in order to ensure that U=U_0 on Dirichlet boundary
  • solve the linear equation with a conjugate gradient method $ -S_e.U=-W $ S_e is diagonla for derichlet point
  • make a relevant of the solution (Us=Um for slave/master points)

References EMM_DisplacementOperator::computeMagneticStress(), EMM_RealField::copy(), EMM_DisplacementOperator::getAccelerator(), EMM_DisplacementOperator::getSolver(), EMM_DisplacementOperator::mEquilibriumMatrix, EMM_DisplacementOperator::mUt, MATH_Solver::setMaximumIterationsNumber(), EMM_DisplacementOperator::spaceProjection(), EMM_DisplacementOperator::spaceRelevant(), and tBoolean.

Referenced by EMM_DisplacementOperator::computeEquilibriumMatrixDiagonalConditioner(), and EMM_DisplacementOperator::updateAtNextTimeStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeFieldsAtTime()

tBoolean EMM_DisplacementOperator::computeFieldsAtTime ( const tReal t,
const tFlag order,
const EMM_RealArray sigma,
const EMM_RealField dM_dt0,
const EMM_RealField M0 
)
virtualinherited

◆ computeMagneticStress() [1/3]

void EMM_DisplacementFEMOperator::computeMagneticStress ( const tReal alpha,
const tReal beta,
const tUIndex nCells,
const tDimension dim,
const EMM_RealArray sigma,
const tReal M,
const tUIndex nData,
tReal D 
) const
protectedvirtual

compute the magnetic stress $ S=\alpha S + \beta * div \left (\sigma^2 . \tilde \lambda^2 : ( \lambda^m : m \otimes m ) \right ) $ to elastic stress S

Parameters
alpha: multiplicator of the total stress
beta: mustilicator of the magnetic stress
nCellsthe size of the magnetism value
dimdimension of the problem in [1,3]
sigmaweight of each cell
Mthe magnetization field value
nDatanumber of data for the stress
Dthe stress divergence in input the elastic stress , in output the total stress

$ \displaystyle S_{3i_Q+d} =\alpha * S_{3i_Q+d} - \beta * \sum_{w \in V(i_Q)} \sum_{l,u,v,r,s \in \{0,1,2\}^5} \lambda^{e}_{dluv}.\lambda^m_{uvrs} \sigma_i^2 m^i_r m^i_s \int_{\omega_w} \frac{\partial \Phi_q }{\partial x_l }d\omega_w $ where $ n V(i_Q) $ is the cells connected to point at global index $ i_Q $ abd q is the local index of $iQ$ in cell $ \omega_w $.

  • pts={[0,0,0],[1,0,0],[0,1,0],[1,1,0],[0,0,1],[1,0,1],[0,1,1],[1,1,1]} local coordinates of cell points.
  • $ \forall i_Q \in [0,P[ $ P is the number of points of the domain
    • $ \forall c \in V(iQ) $
      • $ iCell=i+jN_x+kN_x*N_y $ index of the cell c
      • if iCell is in magnetized domain
        • $ \lambda^e=getLambda^e(iCell)$ of size 3x3x3x3
        • $ \lambda^m=getLambda^m(iCell)$ of size 3x3x3x3
        • $ M=M[3*iCell] $ of size 3
        • $ \forall p \in [0,8[ $ loop on nodes of cell iCell of local coordinate $ Px,Py,Pz \in {0,1}^3 $.
          • compute the index of the point iP=(i+Px)+Nx*(j+Py)+Nx.Ny.(k+Pz)
          • $ \forall (d,l,u,v,r,s)\in R^6, \displaystyle D_{i_Q,d}=alpha * D_{i_Q,d} - beta* \sigma_i^2*\lambda^e_{kluv}.^lambda^m_{uvrs}.M_s. M_r D_{ql} . \frac{h_0.h_1.h_2}{4.h_l} $

start=iq+Px.(jq+Py.kq)

Implements EMM_DisplacementOperator.

References EMM_Grid3D::ELEMENT_POINTS, EMM_DisplacementOperator::getAdimensionizedSegmentsSize(), EMM_Operator::getElementVolume(), EMM_DisplacementOperator::getLambdaEDoubleDotLambdaM(), getNeighborsIndicator(), getPeriodicIndicator(), getPointsNumber(), CORE_Array< T >::getSize(), EMM_4Tensors::getTensorSize(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), INT_GRAD_PHI, INT_GRAD_PHI_FACTOR, EMM_Grid3D::IS_ELEMENT_MAGNETIZED(), EMM_Tensors::isNotNull(), OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, EMM_Grid3D::POINTS_NUMBER_PER_ELEMENT, tBoolean, tCellFlag, tCInt, tDimension, tInteger, tReal, tUCInt, tUIndex, and tUInteger.

Referenced by EMMG_DisplacementFEMOperator::computeMagneticStress(), and getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeMagneticStress() [2/3]

void EMM_DisplacementOperator::computeMagneticStress ( const EMM_RealArray sigma,
const EMM_RealField M,
EMM_RealField S 
) const
inlineinherited

compute the magnetic stress for all cells $ S=div(\lambda^e:\lambda^m:M\otimes M) $

Parameters
[in]sigmamagnetized weight for each cell
[in]Mthe magnetization field
[out]Sthe magnetic stress dield

It computes:

$ \forall (i,k) \in [0,N[\times[0,d[, S^i_k= \displaystyle div(\lambda^e:(\lambda^m:m \times m)_k = \displaystyle \sum_{l=0}^{d-1} \frac{\partial \left( \displaystyle \sum_{r,s,i,j=0}^{r,s,i,j=d-1} \lambda^e_{klij} . \lambda^m_{ijrs} m^i_r . m^i_s \right )}{\partial x_l} $ where

  • $ m^i_s $ is the s-coordinate of the magnetization field M at cell i when s is in [0,d[ and d is the dimension of the space (i.e. 3).
  • $ x_r $ is the r-coordinate of center of cell

References EMM_DisplacementOperator::computeEnergy(), EMM_RealField::setDimension(), EMM_RealField::setSize(), tDimension, tReal, and tUIndex.

Referenced by EMM_DisplacementOperator::computeEquilibriumState(), and EMM_DisplacementOperator::computeStress().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeMagneticStress() [3/3]

virtual void EMM_DisplacementOperator::computeMagneticStress ( const tReal alpha,
const tReal beta,
const EMM_RealArray sigma,
const EMM_RealField M,
EMM_RealField S 
) const
pure virtualinherited

compute the magnetic stress for all cells from the stress $ S=alpha*S+beta*div(\lambda^e:\lambda^m:M\otimes M) $

Parameters
[in]alpha: multiplicator factor for S
[in]beta: multiplicator factor for magnetic stress
[in]sigmathe magnetized weight of cells
[in]Mthe magnetization field
[in,out]Sthe total stress field

It computes:

$ \forall (i,k) \in [0,N[\times[0,d[, S^i_k= \alpha S^i_k +\displaystyle \beta. div(\lambda^e:(\lambda^m:m \times m)_k = \alpha S^i_k + \displaystyle \beta . \sum_{l=0}^{d-1} \frac{\partial \left( \displaystyle \sum_{r,s,i,j=0}^{r,s,i,j=d-1} \lambda^e_{klij} . \lambda^m_{ijrs} m^i_r . m^i_s \right )}{\partial x_l} $ where

  • $ m^i_s $ is the s-coordinate of the magnetization field M at cell i when s is in [0,d[ and d is the dimension of the space (i.e. 3).
  • $ x_r $ is the r-coordinate of center of cell

Implemented in EMMG_DisplacementFVM_VOGGROperator, EMMG_DisplacementFVM_SSGROperator, EMMG_DisplacementFVM_STEGROperator, EMMG_DisplacementFVM_VTEGROperator, and EMMG_DisplacementFEMOperator.

◆ computePotentialEnergy()

tReal EMM_DisplacementFEMOperator::computePotentialEnergy ( const EMM_RealField U) const
virtual

compute the potential energy to the space variation of the displacement

Parameters
Udisplacement field
Returns
potential energy value $ \int_\omega (\lambda^e:\varepsilon(u)):\varepsilon(u) d\omega $

Reimplemented from EMM_DisplacementOperator.

References EMM_DisplacementOperator::computePotentialEnergy().

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computePotentialEnergyAtTime()

tReal EMM_DisplacementOperator::computePotentialEnergyAtTime ( const tReal t) const
inlineinherited

compute the potential energy to the space variation of the displacement

Parameters
ttime in [0,dt[ where dt is the time step
Returns
potential energy value $ \int_\omega (\lambda^e:\varepsilon(u)):\varepsilon(u) d\omega $

References EMM_DisplacementOperator::computePotentialEnergy(), EMM_DisplacementOperator::getDisplacement(), and tReal.

Referenced by EMM_DisplacementOperator::computeEnergy().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeStress()

void EMM_DisplacementOperator::computeStress ( const EMM_RealArray sigma,
const EMM_RealField U,
const EMM_RealField M,
EMM_RealField stress 
) const
inlineinherited

compute the stress $ div(sigma(U,M))=div(\lambda^e:\epsilon(U))-div(\lambda^2:\lambda^m:M\otimes M)$

Parameters
sigmamagnetized weight for each cell
Uthe displacement field
Mthe magnetization field
stressthe divergence stress field

It calls:

References EMM_DisplacementOperator::computeElasticStress(), and EMM_DisplacementOperator::computeMagneticStress().

Referenced by EMM_DisplacementOperator::computeFieldsAtTimeWithGLnInterpolation(), EMM_DisplacementOperator::restore(), and EMM_DisplacementOperator::updateAtNextTimeStep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeStressConstraintEnergy() [1/2]

tReal EMM_DisplacementFEMOperator::computeStressConstraintEnergy ( const EMM_RealField Uf) const
virtual

◆ computeStressConstraintEnergy() [2/2]

tReal EMM_DisplacementOperator::computeStressConstraintEnergy ( const tReal t) const
inlineinherited

compute the energy of the boundary stress constraint

Parameters
ttime in [0,dt[ where dt is the time step

References EMM_DisplacementOperator::getDisplacement(), and tReal.

Referenced by EMM_DisplacementOperator::computeEnergy().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ discretize()

tBoolean EMM_DisplacementFEMOperator::discretize ( const EMM_LandauLifschitzSystem system)
virtual

◆ getAccelerator() [1/2]

EMM_RealField& EMM_DisplacementOperator::getAccelerator ( )
inlineinherited

◆ getAccelerator() [2/2]

const EMM_RealField& EMM_DisplacementOperator::getAccelerator ( ) const
inlineinherited

get the accelerator for reading

Returns
the accelerator field

References EMM_DisplacementOperator::setSolver(), and tString.

Here is the call graph for this function:

◆ getAdimensionizedSegmentsSize()

const tReal* EMM_DisplacementOperator::getAdimensionizedSegmentsSize ( ) const
inlineinherited

◆ getAdimensionizedVolumicMass()

const EMM_RealArray& EMM_DisplacementOperator::getAdimensionizedVolumicMass ( ) const
inlineinherited

get the adimensionized volumic mass per cell

Returns
the adimensionized volumic mass

References EMM_DisplacementOperator::mKappa.

Referenced by EMM_DisplacementFVMOperator::computeCineticEnergy(), and computeCineticEnergy().

Here is the caller graph for this function:

◆ getClassName() [1/2]

tString CORE_Object::getClassName ( ) const
inherited

return the class name of the object

Returns
the class name of the object

References tString.

Referenced by CORE_Object::getIdentityString(), EMM_Operator::getName(), and CORE_Object::isMemoryChecked().

Here is the caller graph for this function:

◆ getClassName() [2/2]

static tString CORE_Object::getClassName ( const tString identityString)
inlinestaticinherited

return the class name of the object

Parameters
identityStringthe identity string of the object
Returns
the class name

◆ getConstraintFaces()

const tFlag& EMM_DisplacementOperator::getConstraintFaces ( ) const
inlineinherited

get the constraint faces $ C=\sum_{f=0}^{f=5} C_f 2^f $ $ C_f=1 $ if face f is constrainted

Returns
the constraints faces

References EMM_DisplacementOperator::mConstraintFaces.

Referenced by buildDataOnNeumannBoundaryFaces(), and EMM_DisplacementFVMOperator::computeElasticStress().

Here is the caller graph for this function:

◆ getConstraints() [1/2]

const EMM_RealField& EMM_DisplacementOperator::getConstraints ( ) const
inlineinherited

get the constraints field for reading

Returns
the constraints field

Referenced by addBoundaryElasticStress(), EMM_DisplacementFVMOperator::computeElasticStress(), EMM_DisplacementOperator::computeEnergy(), and computeStressConstraintEnergy().

Here is the caller graph for this function:

◆ getConstraints() [2/2]

EMM_RealField& EMM_DisplacementOperator::getConstraints ( )
inlineinherited

get the constraints field for writing

Returns
the constraints field

◆ getDataField() [1/3]

virtual tBoolean EMM_DisplacementOperator::getDataField ( const tUSInt index,
tString dataName,
tUIndex n,
tDimension dim,
const float *&  values 
) const
inlinevirtualinherited

get the data field at index for saving data in vtk,txt,... files.

Parameters
indexindex of the field in [0,getDataFieldsNumber()[
dataNamename of the field
nnumber of element of the field
dimdimension of the field in [1,3[
valuesvalues of the field
Returns
true if the field at index exists
  • 0 : it returns the displacement field U
  • 1 : it returns the velocity field dU_dt
  • 2 : it returns the accelerator field acc= $ \frac{d^2U}{dt^2} $

Reimplemented from EMM_Operator.

References tBoolean.

◆ getDataField() [2/3]

virtual tBoolean EMM_DisplacementOperator::getDataField ( const tUSInt index,
tString dataName,
tUIndex n,
tDimension dim,
const double *&  values 
) const
inlinevirtualinherited

get the data field at index for saving data in vtk,txt,... files.

Parameters
indexindex of the field in [0,getDataFieldsNumber()[
dataNamename of the field
nnumber of element of the field
dimdimension of the field in [1,3[
valuesvalues of the field
Returns
true if the field at index exists
  • 0 : it returns the displacement field U
  • 1 : it returns the velocity field dU_dt
  • 2 : it returns the accelerator field acc= $ \frac{d^2U}{dt^2} $

Reimplemented from EMM_Operator.

References tBoolean.

◆ getDataField() [3/3]

virtual tBoolean EMM_DisplacementOperator::getDataField ( const tUSInt index,
tString dataName,
tUIndex n,
tDimension dim,
const long double *&  values 
) const
inlinevirtualinherited

get the data field at index for saving data in vtk,txt,... files.

Parameters
indexindex of the field in [0,getDataFieldsNumber()[
dataNamename of the field
nnumber of element of the field
dimdimension of the field in [1,3[
valuesvalues of the field
Returns
true if the field at index exists
  • 0 : it returns the displacement field U
  • 1 : it returns the velocity field dU_dt
  • 2 : it returns the accelerator field acc= $ \frac{d^2U}{dt^2} $

Reimplemented from EMM_Operator.

References tBoolean.

◆ getDataFieldsNumber()

virtual tUSInt EMM_DisplacementOperator::getDataFieldsNumber ( ) const
inlinevirtualinherited

get the number of field used in the operator

Returns
the number of data

Reimplemented from EMM_Operator.

References EMM_DisplacementOperator::isSteadyState().

Here is the call graph for this function:

◆ getDataFieldSpace()

virtual tBoolean EMM_DisplacementFEMOperator::getDataFieldSpace ( const tUSInt index,
tString dataName,
tFlag supportType,
tString dFieldType,
tUIndex n,
tDimension dim 
) const
inlinevirtual

get the data field at index for saving data in vtk,txt,... files.

Parameters
indexindex of the field in [0,getDataFieldsNumber()[
dataNamename of the field
supportType: mesh element whre the field is applied EMM_Grid3D::ELEMENT; || EMM_Grid3D::POINT
dFieldType: type of the field double,float,int,....
nnumber of element of the field
dimdimension of the field in [1,3[
Returns
true if the field at index exists

Reimplemented from EMM_Operator.

References addBoundaryElasticStress(), computeCineticEnergy(), computeElasticStress(), computeElasticTensor(), computeEquilibriumMatrixDiagonalConditioner(), computeMagneticStress(), computePotentialEnergy(), computeStressConstraintEnergy(), EMM_DisplacementOperator::getAccelerator(), EMM_RealField::getDimension(), EMM_DisplacementOperator::getDisplacement(), EMM_RealField::getSize(), EMM_DisplacementOperator::getVelocity(), EMM_Grid3D::POINT, solveAcceleratorSystem(), spaceProjection(), spaceRelevant(), tBoolean, tDimension, tReal, and tUIndex.

Here is the call graph for this function:

◆ getDisplacement() [1/3]

EMM_RealField& EMM_DisplacementOperator::getDisplacement ( )
inlineinherited

◆ getDisplacement() [2/3]

const EMM_RealField& EMM_DisplacementOperator::getDisplacement ( ) const
inlineinherited

get the displacement for reading

Returns
the displacement field

◆ getDisplacement() [3/3]

const EMM_RealField& EMM_DisplacementOperator::getDisplacement ( const tReal t) const
inlineinherited

get the veolicty at time

Parameters
ttime to get velocity

References EMM_DisplacementOperator::isSteadyState().

Here is the call graph for this function:

◆ getDoubleEpsilon()

static tDouble CORE_Object::getDoubleEpsilon ( )
inlinestaticinherited

get the epsilon value for tDouble type

Returns
the epsilon value for tDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getDoubleInfinity()

static tDouble CORE_Object::getDoubleInfinity ( )
inlinestaticinherited

get the infinity value for tFloat type

Returns
the intinity value for tFloat type

◆ getElasticTensor()

const EMM_2PackedSymmetricTensors& EMM_DisplacementOperator::getElasticTensor ( ) const
inlineinherited

return the elastic tensor $ \varepsilon(u)=\displaystyle \frac{1}{2} \left ( \frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i} \right ) $

Returns
the aelastic tensor

References EMM_DisplacementOperator::mEpsilonUt.

Referenced by EMM_DisplacementOperator::computeEnergy().

Here is the caller graph for this function:

◆ getElementVolume()

const tReal& EMM_Operator::getElementVolume ( ) const
inlineinherited

◆ getEpsilon()

template<class T >
static T CORE_Object::getEpsilon ( )
inlinestaticinherited

get the epsilon value for T type

Returns
the epsilon value for T type

◆ getFloatEpsilon()

static tFloat CORE_Object::getFloatEpsilon ( )
inlinestaticinherited

get the epsilon value for tFloat type

Returns
the epsilon value for tFloat type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getFloatInfinity()

static tFloat CORE_Object::getFloatInfinity ( )
inlinestaticinherited

get the infinity value for tFloat type

Returns
the intinity value for tFloat type

◆ getIdentityString()

tString CORE_Object::getIdentityString ( ) const
inlineinherited

◆ getInfinity()

template<class T >
static T CORE_Object::getInfinity ( )
inlinestaticinherited

get the infinity for T type

Returns
the infinity value for T type

◆ getLambdaE()

const EMM_4SymmetricTensors& EMM_DisplacementOperator::getLambdaE ( ) const
inlineinherited

return the adimensionized elastic tensor distribution $ \lambda^e $

Returns
the adimensionized elastic tensor of size 3x3x3x3 at each cell of size nCells in a morse array

Referenced by EMM_DisplacementFVMOperator::computeElasticStress(), computeElasticStress(), EMM_DisplacementFVMOperator::computeEquilibriumMatrixDiagonalConditioner(), and computeEquilibriumMatrixDiagonalConditioner().

Here is the caller graph for this function:

◆ getLambdaEDoubleDotLambdaM()

const EMM_4Tensors& EMM_DisplacementOperator::getLambdaEDoubleDotLambdaM ( ) const
inlineinherited

return the adimensionized magnetic tensor distribution $ \lambda^e:\lambda^m $

Returns
the adimensionized magnetic tensor of size 3x3x3x3 at each cell of size nCells in a morse array

Referenced by EMM_DisplacementFVMOperator::computeMagneticStress(), and computeMagneticStress().

Here is the caller graph for this function:

◆ getLambdaMDoubleDotLambdaE()

const EMM_4Tensors& EMM_DisplacementOperator::getLambdaMDoubleDotLambdaE ( ) const
inlineinherited

return the adimensionized magnetic tensor distribution $ \lambda^m:\lambda^e $

Returns
the adimensionized magnetic tensor of size 3x3x3x3 at each cell of size nCells in a morse array

◆ getLambdaMDoubleDotLambdaEDoubleDotLambdaM()

const EMM_4SymmetricTensors& EMM_DisplacementOperator::getLambdaMDoubleDotLambdaEDoubleDotLambdaM ( ) const
inlineinherited

return the adimensionized magnetic tensor distribution $ \lambda^m:\lambda^e:\lambda^m $

Returns
the adimensionized magnetic tensor of size 3x3x3x3 at each cell of size nCells in a morse array

Referenced by EMM_MagnetostrictionOperator::computeEnergy().

Here is the caller graph for this function:

◆ getLDoubleEpsilon()

static tLDouble CORE_Object::getLDoubleEpsilon ( )
inlinestaticinherited

get the epsilon value for tLDouble type

Returns
the epsilon value for tLDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getLDoubleInfinity()

static tDouble CORE_Object::getLDoubleInfinity ( )
inlinestaticinherited

get the infinity value for tDouble type

Returns
the infinity value for tDouble type

◆ getLimitConditionOnPoints()

const EMM_LimitConditionArray& EMM_DisplacementOperator::getLimitConditionOnPoints ( ) const
inlineinherited

◆ getLimitConditionOnPointsByReference()

SPC::EMM_LimitConditionArray EMM_DisplacementOperator::getLimitConditionOnPointsByReference ( ) const
inlineinherited

◆ getMassMatrixType()

const tFlag& EMM_DisplacementFEMOperator::getMassMatrixType ( ) const
inline

get the mass matrix type

Returns
the mass matrix type CANONICAL,BLOCK,CONDENSED

References mMassMatrixType, and NewMassMatrix().

Here is the call graph for this function:

◆ getMaxChar()

static tChar CORE_Object::getMaxChar ( )
inlinestaticinherited

get the max value for tChar type

Returns
the max value for tChar type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxDouble()

static tDouble CORE_Object::getMaxDouble ( )
inlinestaticinherited

get the max value for tDouble type

Returns
the max value for tDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxFlag()

static tFlag CORE_Object::getMaxFlag ( )
inlinestaticinherited

get the max value for the tFlag type

Returns
the max value for the tFlag type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxFloat()

static tFloat CORE_Object::getMaxFloat ( )
inlinestaticinherited

get the max value for tFloat type

Returns
the max value for tFloat type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxIndex()

static tIndex CORE_Object::getMaxIndex ( )
inlinestaticinherited

get the max value for the array/vector indexing type

Returns
the max value for the array/vector indexing type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxInt()

static tInt CORE_Object::getMaxInt ( )
inlinestaticinherited

get the max value for tInt type

Returns
the max value for tInt type

Referenced by MATSGN_FFT::fastFourierTransform3D_FFTW(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxInteger()

static tInteger CORE_Object::getMaxInteger ( )
inlinestaticinherited

get the max value for the integer type

Returns
the max value for the integer type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxLDouble()

static tLDouble CORE_Object::getMaxLDouble ( )
inlinestaticinherited

get the max value for tLDouble type

Returns
the max value for tLDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxLInt()

static tLInt CORE_Object::getMaxLInt ( )
inlinestaticinherited

get the max value for tLInt type

Returns
the max value for tLInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxLLInt()

static tLLInt CORE_Object::getMaxLLInt ( )
inlinestaticinherited

get the max value for tULInt type

Returns
the max value for tULInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxReal()

static tReal CORE_Object::getMaxReal ( )
inlinestaticinherited

get the max value for the real type

Returns
he max value for the real type

Referenced by EMM_MatterField::adimensionize(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxSInt()

static tSInt CORE_Object::getMaxSInt ( )
inlinestaticinherited

get the max value for tSInt type

Returns
the max value for tSInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxUChar()

static tUChar CORE_Object::getMaxUChar ( )
inlinestaticinherited

get the max value for tUChar type

Returns
the max value for tUChar type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxUIndex()

static tUIndex CORE_Object::getMaxUIndex ( )
inlinestaticinherited

get the max value for difference the array/vector indexing type

Returns
the max value for difference the array/vector indexing type

Referenced by CORE_Vector< T >::addAfterIndices(), CORE_Vector< T >::search(), CORE_Test::testType(), CORE_Integer::toHexString(), and CORE_Integer::toString().

Here is the caller graph for this function:

◆ getMaxUInt()

static tUInt CORE_Object::getMaxUInt ( )
inlinestaticinherited

get the max value for tUInt type

Returns
the max value for tUInt type

Referenced by EMM_Array< tCellFlag >::loadFromFile(), EMM_RealField::loadFromFile(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxUInteger()

static tUInteger CORE_Object::getMaxUInteger ( )
inlinestaticinherited

get the max value for the unsigned integer type

Returns
the max value for the unsigned integer type

Referenced by MATH_Pn::computeExtrenums(), EMM_MultiScaleGrid::computeLevelsNumber(), EMM_Input::restoreBackup(), MATH_P0::solve(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxULInt()

static tULInt CORE_Object::getMaxULInt ( )
inlinestaticinherited

get the max value for tULInt type

Returns
the max value for tULInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxULLInt()

static tULLInt CORE_Object::getMaxULLInt ( )
inlinestaticinherited

get the max value for tULLInt type

Returns
the max value for tULLInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMaxUSInt()

static tUSInt CORE_Object::getMaxUSInt ( )
inlinestaticinherited

get the max value for tUSInt type

Returns
the max value for tUSInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMemorySize()

virtual tULLInt EMM_DisplacementFEMOperator::getMemorySize ( ) const
inlinevirtual

return the memory size in byte

Returns
the memory size of the storage in bytes 1 Kb = 1024 bytes 1 Mb = 1024 Kb 1 Gb = 1024 Mb 1 Tb = 1024 Gb 1 Hb = 1024 Tb

Reimplemented from EMM_DisplacementOperator.

References EMM_DisplacementOperator::getMemorySize().

Here is the call graph for this function:

◆ getMinChar()

static tChar CORE_Object::getMinChar ( )
inlinestaticinherited

get the min value for tChar type

Returns
the min value for tChar type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinDouble()

static tDouble CORE_Object::getMinDouble ( )
inlinestaticinherited

get the min value for tDouble type

Returns
the min value for tDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinFlag()

static tFlag CORE_Object::getMinFlag ( )
inlinestaticinherited

get the min value for the tFlag type

Returns
the min value for the tFlag type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinFloat()

static tFloat CORE_Object::getMinFloat ( )
inlinestaticinherited

get the min value for tFloat type

Returns
the min value for tFloat type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinIndex()

static tIndex CORE_Object::getMinIndex ( )
inlinestaticinherited

get the min value for the array/vector indexing type

Returns
the min value for the array/vector indexing type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinInt()

static tInt CORE_Object::getMinInt ( )
inlinestaticinherited

get the min value for tInt type

Returns
the min value for tInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinInteger()

static tInteger CORE_Object::getMinInteger ( )
inlinestaticinherited

get the min value for the integer type

Returns
the minin value for the integer type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinLDouble()

static tLDouble CORE_Object::getMinLDouble ( )
inlinestaticinherited

get the min value for tLDouble type

Returns
the min value for tLDouble type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinLInt()

static tLInt CORE_Object::getMinLInt ( )
inlinestaticinherited

get the min value for tLInt type

Returns
the min value for tLInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinLLInt()

static tLLInt CORE_Object::getMinLLInt ( )
inlinestaticinherited

get the min value for tLLInt type

Returns
the min value for tLLInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinReal()

static tReal CORE_Object::getMinReal ( )
inlinestaticinherited

get the min value for the real type

Returns
the min value for the real type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinSInt()

static tSInt CORE_Object::getMinSInt ( )
inlinestaticinherited

get the min value for tSInt type

Returns
the min value for tSInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinUChar()

static tUChar CORE_Object::getMinUChar ( )
inlinestaticinherited

get the min value for tUChar type

Returns
the min value for tUChar type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinUIndex()

static tUIndex CORE_Object::getMinUIndex ( )
inlinestaticinherited

get the min value for difference the array/vector indexing type

Returns
the min value for difference the array/vector indexing type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinUInt()

static tUInt CORE_Object::getMinUInt ( )
inlinestaticinherited

get the min value for tUInt type

Returns
the min value for tUInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinUInteger()

static tUInteger CORE_Object::getMinUInteger ( )
inlinestaticinherited

get the min value for the unsigned integer type

Returns
the min value for the unsigned integer type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinULInt()

static tULInt CORE_Object::getMinULInt ( )
inlinestaticinherited

get the min value for tULInt type

Returns
the min value for tULInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinULLInt()

static tULLInt CORE_Object::getMinULLInt ( )
inlinestaticinherited

get the min value for tULLInt type

Returns
the min value for tULLInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getMinUSInt()

static tUSInt CORE_Object::getMinUSInt ( )
inlinestaticinherited

get the min value for tUSInt type

Returns
the min value for tUSInt type

Referenced by CORE_Test::testType().

Here is the caller graph for this function:

◆ getName()

virtual tString EMM_Operator::getName ( ) const
inlinevirtualinherited

return an human reading name of the operator

Returns
the name of the operator

References CORE_Object::getClassName(), EMM_Operator::isAffine(), EMM_Operator::isGradientComputationable(), tBoolean, tString, and tUIndex.

Here is the call graph for this function:

◆ getNeighborsIndicator()

const EMM_CellFlagArray& EMM_DisplacementFEMOperator::getNeighborsIndicator ( ) const
inline

return the neighbors indicator in bits $ \displaystyle \sum_{f=0}^{f=F-1} v_f 2^f $ where F is the number of faces per element and $ v_f $ is 1 if there is a neighbor cell with the face f

Referenced by computeElasticStress(), computeElasticTensor(), computeEquilibriumMatrixDiagonalConditioner(), computeMagneticStress(), and computeStressConstraintEnergy().

Here is the caller graph for this function:

◆ getOut()

static SP::CORE_Out CORE_Object::getOut ( )
inlinestaticinherited

get the output

Returns
the shared pointer to the output stream

References CORE_Object::OUT.

◆ getPeriodicIndicator()

const tCellFlag& EMM_DisplacementFEMOperator::getPeriodicIndicator ( ) const
inline

get the periodicity indication

Returns
the periodicity indicator in bits: $ \displaystyle \sum_{f=0}^{f=F-1} v_f 2^f $ where F is the number of faces per element and $ v_f $ is 1 if there is a periodiity in the face f

Referenced by computeElasticStress(), computeEquilibriumMatrixDiagonalConditioner(), computeMagneticStress(), computeStressConstraintEnergy(), and spaceRelevant().

Here is the caller graph for this function:

◆ getPointerAddress()

tString CORE_Object::getPointerAddress ( ) const
inlineinherited

return the identity string of the object

Returns
the identity string of the object

References CORE_Object::pointer2String().

Here is the call graph for this function:

◆ getPointsNumber()

const tUIndex* EMM_DisplacementFEMOperator::getPointsNumber ( ) const
inline

get the points number in each direction

Returns
the array containing the points number of size 3

Referenced by computeElasticStress(), computeElasticTensor(), computeEquilibriumMatrixDiagonalConditioner(), computeMagneticStress(), and computeStressConstraintEnergy().

Here is the caller graph for this function:

◆ getRealEpsilon()

static tReal CORE_Object::getRealEpsilon ( )
inlinestaticinherited

get the eps which is the difference between 1 and the least value greater than 1 that is representable.

Returns
the eps which is the difference between 1 and the least value greater than 1 that is representable.

Referenced by MATH_P4::solveP4De(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ getRealInfinity()

static tReal CORE_Object::getRealInfinity ( )
inlinestaticinherited

◆ getSharedPointer() [1/2]

void CORE_Object::getSharedPointer ( SP::CORE_Object &  p)
inlineinherited

◆ getSharedPointer() [2/2]

void CORE_Object::getSharedPointer ( SPC::CORE_Object &  p) const
inlineinherited

get the shared pointer of this class into p

Parameters
p: shared pointer of the class This

◆ getSolver()

MATH_Solver* EMM_DisplacementOperator::getSolver ( )
inlineinherited

get the solver of the system

Returns
the solver null by default

Referenced by EMM_DisplacementOperator::computeEquilibriumState(), EMMG_ClassFactory::NewInstance(), and solveAcceleratorSystem().

Here is the caller graph for this function:

◆ getThread()

static CORE_Thread& CORE_Object::getThread ( )
inlinestaticinherited

get the profilier

Returns
the profiler

Referenced by MATH_MaskVector::add(), MATH_Vector::add(), addBoundaryElasticStress(), buildDataOnNeumannBoundaryFaces(), EMM_DisplacementFVMOperator::computeCineticEnergy(), EMM_DisplacementFVMOperator::computeElasticStress(), computeElasticStress(), EMM_DisplacementFVMOperator::computeElasticTensor(), computeElasticTensor(), EMM_StaticMagneticTensorOperator::computeEnergy(), EMM_CubicAnisotropyOperator::computeEnergy(), EMM_MagnetostrictionOperator::computeEnergy(), EMM_DisplacementOperator::computeEnergy(), EMM_AnisotropyOperator::computeEnergyWithMagneticExcitation(), EMM_DisplacementFVMOperator::computeEquilibriumMatrixDiagonalConditioner(), computeEquilibriumMatrixDiagonalConditioner(), EMM_FullExchangeOperator::computeMagneticExcitationField(), EMM_StaticMagnetostrictionOperator::computeMagneticExcitationField(), EMM_LinearAnisotropyOperator::computeMagneticExcitationField(), EMM_StaticMagneticTensorOperator::computeMagneticExcitationField(), EMM_CubicAnisotropyOperator::computeMagneticExcitationField(), EMM_MinimalExchangeOperator::computeMagneticExcitationField(), EMM_AnisotropyOperator::computeMagneticExcitationField(), EMM_MagnetostrictionOperator::computeMagneticExcitationField(), EMM_CubicAnisotropyOperator::computeMagneticExcitationFieldGradient(), EMM_AnisotropyOperator::computeMagneticExcitationFieldGradient(), EMM_DisplacementFVMOperator::computeMagneticStress(), computeMagneticStress(), EMM_OptimalTimeStep::computeOptimalTimeStep(), computeStressConstraintEnergy(), EMM_FullExchangeOperator::discretize(), EMM_MinimalExchangeOperator::discretize(), EMM_CondensedMassMatrix::discretize(), EMM_LinearAnisotropyOperator::discretize(), EMM_AnisotropyOperator::discretize(), EMM_DemagnetizedOperator::discretize(), EMMG_SLDemagnetizedOperator::discretize(), EMM_LandauLifschitzSystem::discretize(), MATH_Vector::divide(), MATH_MaskVector::dot(), MATH_Vector::dot(), EMM_4SymmetricTensors::doubleDot(), EMM_4Tensors::doubleDotCrossDoubleDotScalar(), EMM_4Tensors::doubleDotCrossProduct(), EMM_4Tensors::doubleDotCrossSquaredScalar(), EMM_4Tensors::doubleDotProduct(), MATH_Vector::init(), MATH_MaskVector::init(), EMM_LandauLifschitzODE_RK::integrateMagnetizationFieldAtTime(), EMM_DisplacementFVM_Interpolator::interpolateUAtVertices(), EMMG_SLDemagnetizedOperator::localAssembly(), EMM_DisplacementOperator::nullProjectionOnDirichletBoundary(), EMM_DisplacementOperator::periodicProjection(), EMM_2PackedSymmetricTensors::product(), EMM_CanonicalMassMatrix::product(), MATH_FullMatrix::product(), EMM_CondensedMassMatrix::product(), EMM_BlockMassMatrix::product(), MATH_MorseMatrix::product(), EMMG_SLDemagnetizedOperator::product(), EMM_DisplacementOperator::projectionOnDirichletBoundary(), EMM_LandauLifschitzSystem::resetOperatorsToInitialState(), EMM_DisplacementFVMOperator::setBoundaryFaceTypes(), FFTW_MultiDFTs::setFFT(), FFTW_MultiLevelsDFT::setFFT(), FFTW_MultiLevelsDFT::setLevels(), FFTW_MultiDFTs::setPlan(), FFTW_MultiLevelsDFT::setPlan(), EMM_CondensedMassMatrix::solve(), EMM_LandauLifschitzODE::solveODE(), EMM_4SymmetricTensors::squaredDoubleDot(), EMM_4Tensors::squaredDoubleDotCrossScalar(), EMM_4Tensors::squaredDoubleDotScalar(), EMM_CanonicalMassMatrix::symmetricDot(), EMM_CondensedMassMatrix::symmetricDot(), EMM_BlockMassMatrix::symmetricDot(), FFTW_Test::test(), MATH_SolverTest::test(), EMM_ODETest::testODE(), and EMM_Grid3D::updateLimitConditionOnPoints().

Here is the caller graph for this function:

◆ getTimeIntegrationMethod()

const tFlag& EMM_DisplacementOperator::getTimeIntegrationMethod ( ) const
inlineinherited

get the time integration method for next time step

Returns
integration method in P1 | TE

References EMM_DisplacementOperator::mTimeIntegrationMethod.

◆ getTimeIntegrationOrder()

const tUCInt& EMM_DisplacementOperator::getTimeIntegrationOrder ( ) const
inlineinherited

get the time integration order for new field

Returns
integration order in {1,2}

References EMM_DisplacementOperator::mTimeIntegrationOrder.

◆ getTimeStep()

const tReal& EMM_DisplacementOperator::getTimeStep ( ) const
inlineinherited

get the time step for elasticty

Returns
the time step for elasticity

References EMM_DisplacementOperator::mDt.

◆ getTypeName()

template<class T >
static tString CORE_Object::getTypeName ( )
inlinestaticinherited

get type name

Returns
the type name of the class

References tString.

◆ getVelocity() [1/3]

EMM_RealField& EMM_DisplacementOperator::getVelocity ( )
inlineinherited

◆ getVelocity() [2/3]

const EMM_RealField& EMM_DisplacementOperator::getVelocity ( const tReal t) const
inlineinherited

get the velocity at time

Parameters
ttime to get velocity

References EMM_DisplacementOperator::isSteadyState().

Here is the call graph for this function:

◆ getVelocity() [3/3]

const EMM_RealField& EMM_DisplacementOperator::getVelocity ( ) const
inlineinherited

get the velocity at t for reading

Returns
the velocity field

◆ initializeEquilibriumSolver()

void EMM_DisplacementOperator::initializeEquilibriumSolver ( const EMM_RealField U0)
protectedvirtualinherited

◆ is32Architecture()

static tBoolean CORE_Object::is32Architecture ( )
inlinestaticinherited

return true if the machine is a 32 bits machine

Returns
true is the computing is done in a 32 bits machine

References CORE_Object::pointer2String(), CORE_Object::printObjectsInMemory(), and tString.

Referenced by CORE_Test::testType().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is64Architecture()

static tBoolean CORE_Object::is64Architecture ( )
inlinestaticinherited

return true if the machine is a 64 bits machine

Returns
true is the computing is done in a 64 bits machine

Referenced by EMM_VTK::getVTKType(), and CORE_Test::testType().

Here is the caller graph for this function:

◆ isAffine()

virtual tBoolean EMM_DisplacementOperator::isAffine ( ) const
inlinevirtualinherited

return true if the operator is either constant or linear

Returns
true if the operator is either constant or linear

Implements EMM_Operator.

◆ isCubicVolume()

const tBoolean& EMM_Operator::isCubicVolume ( ) const
inlineinherited

return the true if the element is cubic

Returns
true is all size of the volum is same

References EMM_Operator::mIsCubic.

Referenced by EMM_FullExchangeOperator::discretize(), and EMM_MinimalExchangeOperator::discretize().

Here is the caller graph for this function:

◆ isEquilibriumMatrixReconditioned()

const tBoolean& EMM_DisplacementOperator::isEquilibriumMatrixReconditioned ( ) const
inlineinherited

get if the equilibrium matrix is conditioned

Returns
true to recondition the equilibrium matrix

References EMM_DisplacementOperator::mIsEquilibriumMatrixConditioned.

Referenced by EMM_DisplacementFVMOperator::computeEquilibriumMatrixDiagonalConditioner(), and computeEquilibriumMatrixDiagonalConditioner().

Here is the caller graph for this function:

◆ isEquilibriumState()

tBoolean EMM_DisplacementOperator::isEquilibriumState ( ) const
inlineinherited

◆ isFrozenState()

tBoolean EMM_DisplacementOperator::isFrozenState ( ) const
inlineinherited

Referenced by EMM_DisplacementOperator::backup(), and EMM_DisplacementOperator::updateAtNextTimeStep().

Here is the caller graph for this function:

◆ isGradientComputationable()

virtual tBoolean EMM_DisplacementOperator::isGradientComputationable ( ) const
inlinevirtualinherited

return true if the gradient of the magnetic excitation is computationable

Returns
true if the the gradient of the magnetic excitation is computationable

Implements EMM_Operator.

◆ isInstanceOf() [1/2]

template<class T >
tBoolean CORE_Object::isInstanceOf ( ) const
inlineinherited

test if the clas T is an instance of this class

Returns
true if the object is an instance of T

References null.

Referenced by MATH_ToeplitzTest::toeplitzTest().

Here is the caller graph for this function:

◆ isInstanceOf() [2/2]

tBoolean CORE_Object::isInstanceOf ( const tString name) const
inlineinherited

test if the object is an instance of className

Parameters
namename of the class
Returns
true if the object is an instance of class Name

References CORE_Object::getIdentityString().

Here is the call graph for this function:

◆ isMemoryChecked()

static const tBoolean& CORE_Object::isMemoryChecked ( )
inlinestaticinherited

get if the memory checking is used

Returns
true: if the memory checking is used.

References CORE_Object::getClassName(), CORE_Object::mIsMemoryTesting, and tString.

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isSteadyState()

tBoolean EMM_DisplacementOperator::isSteadyState ( ) const
inlineinherited

◆ NewEquilibriumMatrix()

SP::EMM_BlockEquilibriumMatrix EMM_DisplacementOperator::NewEquilibriumMatrix ( ) const
virtualinherited

create the equilibrium matrix

Returns
the equilibrium matrix

References EMM_DisplacementOperator::getDisplacement(), CORE_Object::getThis(), and EMM_BlockEquilibriumMatrix::New().

Referenced by EMM_DisplacementOperator::initializeEquilibriumSolver(), and EMM_DisplacementOperator::setCFL().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ NewMassMatrix()

SP::EMM_MassMatrix EMM_DisplacementFEMOperator::NewMassMatrix ( ) const
virtual

create the accelerator matrix

Returns
the accelerator matrix

References BLOCK_MASS_MATRIX, CANONICAL_MASS_MATRIX, CONDENSED_MASS_MATRIX, mMassMatrixType, EMM_BlockMassMatrix::New(), EMM_CanonicalMassMatrix::New(), and EMM_CondensedMassMatrix::New().

Referenced by discretize(), and getMassMatrixType().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nullProjectionOnDirichletBoundary() [1/2]

void EMM_DisplacementOperator::nullProjectionOnDirichletBoundary ( EMM_RealField V) const
inherited

project the velocity to 0 on dirichlet boundary points

Parameters
Vthe field

set V=0 on Dirichlet points; V must be defined on points (return an exception if not)

References EMM_RealField::getDimension(), EMM_RealField::getValues(), EMM_RealField::initField(), EMM_DisplacementOperator::mLimitConditionOnPoints, tDimension, tReal, and tUIndex.

Referenced by EMM_DisplacementOperator::getLimitConditionOnPointsByReference(), EMM_DisplacementOperator::projectionOnDirichletBoundary(), EMM_DisplacementOperator::resetToInitialState(), and spaceProjection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nullProjectionOnDirichletBoundary() [2/2]

void EMM_DisplacementOperator::nullProjectionOnDirichletBoundary ( const tUIndex nPoints,
const tDimension dim,
tReal V 
) const
inherited

project the velocity to 0 on dirichlet boundary points

Parameters
[in]nPoints: the number of points
[in]dim: the dimension of each point
[in,out]V: the values field defined on points

set V=0 on Dirichlet points; V must be defined on points (return an excepion if not)

References EMM_Grid3D::DIRICHLET_LIMIT_CONDITION, EMM_DisplacementOperator::getLimitConditionOnPoints(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, tLimitCondition, tReal, tUIndex, and tUInteger.

Here is the call graph for this function:

◆ out()

static CORE_Out& CORE_Object::out ( )
inlinestaticinherited

get the output

Returns
the output stream

Referenced by EMM_Matter::adimensionize(), EMM_DisplacementFVMOperator::backup(), EMM_DisplacementOperator::backup(), MATH_ElementaryMultiLevelsToeplitzMatrix::buildSpectralVectorProjector(), EMM_Test::caseTest(), EMM_Test::caseTests(), EMM_MatterField::computeAnisotropyDirectionsField(), EMM_OptimalTimeStep::computeOptimalTimeStep(), MATH_MultiLevelsToeplitzMatrix::copy(), CORE_Exception::CORE_Exception(), EMM_MatterField::createAnisotropyOperator(), CORE_Run::createIO(), EMM_ElementaryTest::defaultBackupTest(), EMM_ElementaryTest::defaultTest(), MATH_MultiLevelsFFTToeplitzMatrix::diagonalize(), EMM_DisplacementFVMOperator::discretize(), EMM_MagnetostrictionOperator::discretize(), discretize(), EMM_4SymmetricTensors::doubleDot(), EMM_4Tensors::doubleDotCrossDoubleDotScalar(), EMM_TensorsTest::doubleDotCrossDoubleDotScalarTests(), EMM_4Tensors::doubleDotCrossProduct(), EMM_TensorsTest::doubleDotCrossProductTests(), EMM_4Tensors::doubleDotCrossSquaredScalar(), EMM_TensorsTest::doubleDotCrossSquaredScalarTests(), EMM_4Tensors::doubleDotProduct(), EMM_TensorsTest::doubleDotProductTests(), EMM_DisplacementWaveTest::elasticWaveTest(), EMM_Test::elementaryTests(), FFTW_Test::fftwTutorial(), MATH_IntegrationTest::gaussLegendreTest(), EMM_MagnetostrictionTest::HComputingTest(), EMM_DemagnetizedPeriodicalTest::HTest(), EMMH_HysteresisTest::hysteresisDefaultCycleTest(), EMM_TensorsTest::initializationTests(), EMM_MultiScaleGrid::initialize(), EMM_MultiScaleSDGrid::initialize(), EMM_MatterField::loadFromANIFile(), EMM_AnisotropyDirectionsField::loadFromFile(), EMM_Matter::loadFromFile(), EMM_Grid3D::loadFromGEOFile(), EMM_MatterField::loadFromLOCFile(), EMM_Array< tCellFlag >::loadFromStream(), EMM_Matter::loadFromStream(), EMM_Matter::loadMattersFromFile(), EMM_Run::loadSystemFromOptions(), EMM_ElementaryTest::magnetostrictionBackupTest(), CORE_Run::make(), EMMH_Run::makeHysteresis(), EMM_Run::makeRun(), CORE_Run::makeType(), EMM_ElementaryTest::optionsTest(), MATH_PolynomialTest::P4Tests(), EMM_Test::primaryTests(), EMM_LandauLifschitzSystem::printLog(), CORE_Run::printOptions(), EMM_2PackedSymmetricTensors::product(), EMMG_SLDemagnetizedOperator::projectionOnSpectralSpace(), CORE_Run::readOptionsFromCommandLine(), CORE_Test::readVectorTest(), EMM_DemagnetizedPeriodicalTest::relaxationTest(), EMM_DisplacementFVMOperator::restore(), EMM_DisplacementOperator::restore(), EMM_Input::restoreBackup(), EMMH_Hysteresis::run(), EMM_Output::save(), EMM_AnisotropyDirectionsField::saveToFile(), EMM_MatterField::saveToFile(), EMM_Grid3D::saveToGEOFile(), CORE_IOTest::searchTest(), EMMH_Hysteresis::setInitialMagnetizationField(), MATH_MultiLevelsToeplitzMatrix::setLevels(), EMM_4SymmetricTensors::squaredDoubleDot(), EMM_4Tensors::squaredDoubleDotCrossScalar(), EMM_TensorsTest::squaredDoubleDotCrossScalarTests(), EMM_4Tensors::squaredDoubleDotScalar(), EMM_TensorsTest::squaredDoubleDotScalarTests(), EMM_TensorsTest::squaredDoubleDotTests(), EMM_MatterTest::testAdimensionize(), EMM_MatterTest::testANIFile(), CORE_Test::testComplex(), CORE_Test::testDateWeek(), FFTW_Test::testDFT(), EMM_MatterTest::testIO(), EMM_ODETest::testODE(), CORE_Test::testOut(), CORE_Test::testReal(), EMM_FieldTest::testRealArray(), EMM_Grid3DTest::testSegment(), EMM_Grid3DTest::testThinSheet(), CORE_Test::testTime(), CORE_Test::testType(), MATH_FullMatrix::toString(), EMM_DemagnetizedPeriodicalTest::xyPeriodicalCubeSDGTest(), and EMM_DemagnetizedPeriodicalTest::xyPeriodicalSheetSDGTest().

Here is the caller graph for this function:

◆ periodicProjection()

void EMM_DisplacementOperator::periodicProjection ( const tCellFlag periodicity,
const tUInteger  nPoints[3],
EMM_RealField V 
) const
inherited

make the periodic projection of the field V

Parameters
periodicity:: periodcidcity projection
nPointsnumber of points of each direction
Vfield to project

V at slave point is set to V at master point

References EMM_Grid3D::GET_MASTER_PERIODIC_POINT(), EMM_RealField::getDimension(), EMM_DisplacementOperator::getLimitConditionOnPoints(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), EMM_RealField::getValues(), null, OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, EMM_Grid3D::SLAVE_LIMIT_CONDITION, tDimension, tLimitCondition, CORE_Integer::toString(), tReal, tUIndex, and tUInteger.

Referenced by EMM_DisplacementOperator::getLimitConditionOnPointsByReference(), EMM_DisplacementOperator::resetToInitialState(), and spaceRelevant().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pointer2String()

tString CORE_Object::pointer2String ( const void *  obj)
staticinherited

return the string representation of a pointer

Parameters
obj: oject to get the string pointer
Returns
the string pointer of the object

References tString.

Referenced by CORE_Object::CORE_Object(), CORE_Object::getIdentityString(), CORE_Object::getPointerAddress(), CORE_Object::is32Architecture(), and CORE_Object::~CORE_Object().

Here is the caller graph for this function:

◆ printObjectsInMemory() [1/2]

void CORE_Object::printObjectsInMemory ( ostream &  f)
staticinherited

print object in memory

Parameters
f: output to print the objects in memory

References CORE_Object::getIdentityString(), CORE_Object::getSharedPointer(), CORE_Object::mIsMemoryTesting, CORE_Object::mObjects, and tInteger.

Here is the call graph for this function:

◆ printObjectsInMemory() [2/2]

static void CORE_Object::printObjectsInMemory ( )
inlinestaticinherited

print object in memory in the standart output

Referenced by CORE_Object::is32Architecture(), and main().

Here is the caller graph for this function:

◆ projectionOnDirichletBoundary() [1/2]

void EMM_DisplacementOperator::projectionOnDirichletBoundary ( const EMM_RealField V0,
EMM_RealField V 
) const
inherited

project the velocity to 0 on dirichlet boundary points

Parameters
[in]V0the field value on dirichlet points
[out]Vthe field

set V=V0 on Dirichlet points; V must be defined on points (return an excepion if not)

References EMM_RealField::getDimension(), EMM_RealField::getSize(), EMM_RealField::getValues(), EMM_RealField::initField(), EMM_DisplacementOperator::mLimitConditionOnPoints, null, EMM_DisplacementOperator::nullProjectionOnDirichletBoundary(), tBoolean, tDimension, tReal, and tUIndex.

Referenced by EMM_DisplacementOperator::getLimitConditionOnPointsByReference(), and spaceProjection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ projectionOnDirichletBoundary() [2/2]

void EMM_DisplacementOperator::projectionOnDirichletBoundary ( const tUIndex nPoints,
const tDimension dim,
const tBoolean incV0,
const tReal V0,
tReal V 
) const
inherited

project the velocity to 0 on dirichlet boundary points

Parameters
[in]nPointsthe number of points
[in]dimthe dimension of each point
[in]incV0increment (either 0 or 1) of the values field on dirichlet points
[in]V0the values field on dirichlet points of size >=3
[in,out]Vthe values field defined on points

set V=V0 on Dirichlet points; V must be defined on points (return an excepion if not)

References EMM_Grid3D::DIRICHLET_LIMIT_CONDITION, EMM_DisplacementOperator::getLimitConditionOnPoints(), CORE_Object::getThread(), CORE_Thread::getThreadsNumber(), OMP_GET_THREAD_ID, OMP_PARALLEL_PRIVATE_SHARED_DEFAULT, tDimension, tLimitCondition, tReal, tUIndex, and tUInteger.

Here is the call graph for this function:

◆ resetOut()

static void CORE_Object::resetOut ( )
inlinestaticinherited

reset the output stream

Referenced by run().

Here is the caller graph for this function:

◆ resetThread()

static void CORE_Object::resetThread ( )
inlinestaticinherited

reset the output stream

Referenced by run().

Here is the caller graph for this function:

◆ resetToInitialState()

tBoolean EMM_DisplacementFEMOperator::resetToInitialState ( const EMM_LandauLifschitzSystem system)
virtual

reset the operator to initial state the operator

Parameters
systemthe data to initialize the operator
Returns
true if it succeeds
  • call EMM_DisplacementOperator::resetToInitialStep()
  • recompute the accelerator vector at time 0

Reimplemented from EMM_DisplacementOperator.

References EMM_LandauLifschitzSystem::getMagnetizationField(), EMM_LandauLifschitzSystem::getSigma(), EMM_DisplacementOperator::resetToInitialState(), tBoolean, and EMM_DisplacementOperator::updateAtNextTimeStep().

Referenced by buildDataOnBoundaryFaces().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ restore()

tBoolean EMM_DisplacementOperator::restore ( const EMM_LandauLifschitzSystem system,
const tString prefix,
const tString suffix,
const tString ext 
)
virtualinherited

restore the operator data from file(s)

Parameters
system: general data to restore the operator
prefix: common prefix of the saving files
suffix: common suffix of the saving files
ext: common extension of the saving files
Returns
if the restoring of the displacament & velocity field have succeeds

It restore the state from :

  • the current time step in {prefix}_dt_{suffix}.{ext}
  • U at previous time step in {prefix}_Unm1_{suffix}.{ext}
  • U at current time step in {prefix}_Un_{suffix}.{ext}
  • V at current time step in {prefix}_Vn_{suffix}.{ext}
  • dV/dt at current time step in {prefix}_Acc_{suffx}.{ext}

Reimplemented from EMM_Operator.

Reimplemented in EMM_DisplacementFVMOperator.

References EMM_DisplacementOperator::computeAccelerator(), EMM_DisplacementOperator::computeElasticTensor(), EMM_DisplacementOperator::computeStress(), EMM_LandauLifschitzSystem::getMagnetizationField(), EMM_LandauLifschitzSystem::getSigma(), EMM_DisplacementOperator::initializeEquilibriumSolver(), EMM_DisplacementOperator::isEquilibriumState(), EMM_DisplacementOperator::mAccelerator, EMM_DisplacementOperator::mDt, EMM_DisplacementOperator::mEpsilonUt, EMM_DisplacementOperator::mKappa, EMM_DisplacementOperator::mTimeIntegrationMethod, EMM_DisplacementOperator::mUn, EMM_DisplacementOperator::mUnm1, EMM_DisplacementOperator::mVn, CORE_Object::out(), CORE_Out::println(), tBoolean, EMM_DisplacementOperator::TE, CORE_Real::toString(), and tString.

Referenced by EMM_DisplacementOperator::getLimitConditionOnPointsByReference(), and EMM_DisplacementFVMOperator::restore().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setCFL()

void EMM_DisplacementOperator::setCFL ( const tReal cfl)
inlineinherited

◆ setConstraints() [1/4]

void EMM_DisplacementOperator::setConstraints ( const tFlag C,
const tString dataFile 
)
inlineinherited

set constraints from file defined on points

Parameters
Cconstraints faces in bit : $ C=\sum_{f=0}^5 C_f 2^f $ $ C_f=1 $ if face f is constrainted
dataFile: file which contains the constraints field defined on points

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setConstraints() [2/4]

void EMM_DisplacementOperator::setConstraints ( const tFlag C,
const tReal  data[3] 
)
inlineinherited

set constraints field

Parameters
Cconstraint faces in bit : $ C=\sum_{f=0}^5 C_f 2^f $ $ C_f=1 $ if face f is constrainted
data: uniform data for constraints

References EMM_RealField::setValue().

Here is the call graph for this function:

◆ setConstraints() [3/4]

void EMM_DisplacementOperator::setConstraints ( const tFlag C,
const tReal C0,
const tReal C1,
const tReal C2 
)
inlineinherited

set initial constriants field

Parameters
Cconstraint faces in bit : $ C=\sum_{f=0}^5 C_f 2^f $ $ C_f=1 $ if face f is constrainted
C0x-coordinate of constraint
C1y-coordinate of constraint
C2z-coordinate of constraint

References EMM_RealField::initField().

Here is the call graph for this function:

◆ setConstraints() [4/4]

void EMM_DisplacementOperator::setConstraints ( const tFlag C,
const EMM_RealField data 
)
inlineinherited

set constraints

Parameters
Cconstraint faces in bit : $ C=\sum_{f=0}^5 C_f 2^f $ $ C_f=1 $ if face f is constrainted
dataconstraints field

◆ setDisplacement() [1/2]

void EMM_DisplacementOperator::setDisplacement ( const EMM_RealField u)
inlineinherited

set the displacement field

Parameters
u: is the displacement field defined ob points

◆ setDisplacement() [2/2]

void EMM_DisplacementOperator::setDisplacement ( const tReal Ux,
const tReal Uy,
const tReal Uz 
)
inlineinherited

set the displacement field to an uniform vector defied on points

Parameters
Uxuniform value of the field on the x-direction
Uyuniform value of the field on the y-direction
Uzuniform value of the field on the z-direction

◆ setElasticityState()

void EMM_DisplacementOperator::setElasticityState ( const tFlag v)
inlineinherited

set the elasticity state

Parameters
vthe elasticity state eithet equilibrium | steady | unsteady

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setInitialDisplacement() [1/4]

void EMM_DisplacementOperator::setInitialDisplacement ( const tReal scale,
const tString dataFile 
)
inlineinherited

set initial displacement field.

Parameters
scale: the scale factor of the file
dataFile: file which contains the displacement field defined on points

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setInitialDisplacement() [2/4]

void EMM_DisplacementOperator::setInitialDisplacement ( const tReal  data[3])
inlineinherited

set initial displacement field

Parameters
data: uniform data for displacement

References EMM_RealField::setValue().

Here is the call graph for this function:

◆ setInitialDisplacement() [3/4]

void EMM_DisplacementOperator::setInitialDisplacement ( const tReal  U0,
const tReal U1,
const tReal U2 
)
inlineinherited

set initial displacement field

Parameters
U0x-coordinate of displacement
U1y-coordinate of displacement
U2z-coordinate of displacement

References EMM_RealField::initField().

Here is the call graph for this function:

◆ setInitialDisplacement() [4/4]

void EMM_DisplacementOperator::setInitialDisplacement ( const EMM_RealField data)
inlineinherited

set initial displacement field

Parameters
data: data for displacement

◆ setInitialVelocity() [1/4]

void EMM_DisplacementOperator::setInitialVelocity ( const tReal scale,
const tString dataFile 
)
inlineinherited

set initial velocity field

Parameters
scalescale of the file
dataFile: file which contains the velocity field defined on points

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setInitialVelocity() [2/4]

void EMM_DisplacementOperator::setInitialVelocity ( const EMM_RealField data)
inlineinherited

set initial velocity field

Parameters
datavelocity field

◆ setInitialVelocity() [3/4]

void EMM_DisplacementOperator::setInitialVelocity ( const tReal  data[3])
inlineinherited

set initial velocity field

Parameters
data: uniform data for velocity

References EMM_RealField::setValue().

Here is the call graph for this function:

◆ setInitialVelocity() [4/4]

void EMM_DisplacementOperator::setInitialVelocity ( const tReal V0,
const tReal V1,
const tReal V2 
)
inlineinherited

set initial velocity field

Parameters
V0x-coordinate of velocity
V1y-coordinate of velocity
V2z-coordinate of velocity

References EMM_RealField::initField().

Here is the call graph for this function:

◆ setIsEquilibriumMatrixReconditioned()

void EMM_DisplacementOperator::setIsEquilibriumMatrixReconditioned ( const tBoolean c)
inlineinherited

set to true if the equilibrium matrix is conditioned

Parameters
ctrue to recondition the equilibrium matrix

◆ setIsMemoryChecked()

static void CORE_Object::setIsMemoryChecked ( const tBoolean v)
inlinestaticinherited

set if the memory checking is used

Parameters
v: true to check memory

Referenced by main().

Here is the caller graph for this function:

◆ setLimitConditionOnPoints() [1/2]

void EMM_DisplacementOperator::setLimitConditionOnPoints ( const EMM_IntArray lc)
inlineinherited

set the limit condition each point is set to

Parameters
lcthe limit condition value for all points of the mesh. Interior point are ignored (0)
  • NO_LIMIT_CONDITION for all interior points or not magnetized point
  • DIRICHLET_LIMIT_CONDITION for all points on Dirichlet boundary
  • NEUMANN_LIMIT_CONDITION for all points on Neumann boundary

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setLimitConditionOnPoints() [2/2]

void EMM_DisplacementOperator::setLimitConditionOnPoints ( const tLimitCondition lc)
inlineinherited

set the limit condition to all points

Parameters
lcthe limit condition value for all points of the mesh. Interiror point are ignored (0)
  • NO_LIMIT_CONDITION for all interior points or not magnetized point
  • DIRICHLET_LIMIT_CONDITION for all points on Dirichlet boundary
  • NEUMANN_LIMIT_CONDITION for all points on Neumann boundary

◆ setMassMatrixType()

void EMM_DisplacementFEMOperator::setMassMatrixType ( const tFlag t)
inline

set the mass matrix type

Parameters
t: the mass matrix type CANONICAL,BLOCK,CONDENSED

◆ setOut()

static void CORE_Object::setOut ( SP::CORE_Out  out)
inlinestaticinherited

set the output stream

Parameters
out: the shared pointer to the new output stream

References null.

◆ setSolver() [1/2]

void EMM_DisplacementOperator::setSolver ( const tString solverName)
virtualinherited

set the solver

Parameters
solverNamename of the solver which can be either :
  • CG or
  • biCGStab or
  • empty

If empty biCGStab is used only for FVM displacement with equilibrium state

Reimplemented in EMM_DisplacementFVMOperator.

References tString.

Referenced by EMM_DisplacementOperator::getAccelerator(), EMMG_ClassFactory::NewInstance(), and EMM_DisplacementFVMOperator::setSolver().

Here is the caller graph for this function:

◆ setSolver() [2/2]

void EMM_DisplacementOperator::setSolver ( SP::MATH_Solver  solver)
inlineinherited

set the solver

Parameters
solver: the solver

◆ setThis()

void CORE_Object::setThis ( SP::CORE_Object  p)
inlineprotectedinherited

set this weak shared pointer called toDoAfterThis setting method

Parameters
p: shared pointer of the class This

References CORE_Object::toDoAfterThisSetting().

Here is the call graph for this function:

◆ setThread()

static void CORE_Object::setThread ( SP::CORE_Thread  thread)
inlinestaticinherited

set the thread

Parameters
threadthe shared pointer to the thread

References null.

Referenced by EMM_Run::EMM_Run(), EMM_TensorsRun::EMM_TensorsRun(), and MATH_SolverRun::MATH_SolverRun().

Here is the caller graph for this function:

◆ setTimeIntegrationMethod()

void EMM_DisplacementOperator::setTimeIntegrationMethod ( const tFlag m)
inlineinherited

set the time integration method for new field

Parameters
mintegration method in P1 | TE

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setTimeIntegrationOrder()

void EMM_DisplacementOperator::setTimeIntegrationOrder ( const tInt o)
inlineinherited

set the time integration order for new field

Parameters
ointegration ordre in {1,2}

Referenced by EMMG_ClassFactory::NewInstance().

Here is the caller graph for this function:

◆ setVelocity() [1/2]

void EMM_DisplacementOperator::setVelocity ( const EMM_RealField v)
inlineinherited

set the velocity of dicplacement defined on points

Parameters
v: is the displacement velocity field

◆ setVelocity() [2/2]

void EMM_DisplacementOperator::setVelocity ( const tReal Vx,
const tReal Vy,
const tReal Vz 
)
inlineinherited

set the displacement velocity field to an uniform vector defined on points

Parameters
Vxuniform value of the field on the x-direction
Vyuniform value of the field on the y-direction
Vzuniform value of the field on the z-direction

◆ solveAcceleratorSystem()

tBoolean EMM_DisplacementFEMOperator::solveAcceleratorSystem ( EMM_RealField V)
protectedvirtual

solve the velocity form the accelerator matrix : M.X=V V:=X

Parameters
V
  • input : the total stress
  • output : the accelerator $ U^{"} $
Returns
true if the solving succeeds

M is the mass matrix

Implements EMM_DisplacementOperator.

References EMM_DisplacementOperator::getSolver(), mMassMatrix, and tBoolean.

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SP_OBJECT()

EMM_DisplacementFEMOperator::SP_OBJECT ( EMM_DisplacementFEMOperator  )
private

◆ spaceProjection() [1/2]

void EMM_DisplacementFEMOperator::spaceProjection ( EMM_RealField V) const
protectedvirtual

make the projection of the vector B into the solving linear space

Parameters
[out]Vfield to project in linear solving space

V is set to 0 on all dirichlet points

Implements EMM_DisplacementOperator.

References EMM_DisplacementOperator::nullProjectionOnDirichletBoundary().

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spaceProjection() [2/2]

void EMM_DisplacementFEMOperator::spaceProjection ( const EMM_RealField V0,
EMM_RealField V 
) const
protectedvirtual

make the projection of the vector B into the solving linear space

Parameters
[in]V0:orthogonal vector of the linear solving space
[out]V: field to project in linear solving space

V is set to V0 on all dirichlet points

Implements EMM_DisplacementOperator.

References EMM_DisplacementOperator::projectionOnDirichletBoundary().

Here is the call graph for this function:

◆ spaceRelevant()

void EMM_DisplacementFEMOperator::spaceRelevant ( EMM_RealField V) const
protectedvirtual

make the rebuild of the vector V from the solving space.

Parameters
Vthe vector to rebuild from the solving space

V at slave periodical point is set to the value of V at the master periodical point

Implements EMM_DisplacementOperator.

References getPeriodicIndicator(), mMassMatrix, and EMM_DisplacementOperator::periodicProjection().

Referenced by getDataFieldSpace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ toDoAfterThisSetting()

virtual void EMM_DisplacementOperator::toDoAfterThisSetting ( )
inlineprotectedvirtualinherited

method called after the setting of the shared pointer this method can only be called once.

Reimplemented from EMM_Object.

Reimplemented in EMM_DisplacementFVMOperator.

References EMM_Object::toDoAfterThisSetting().

Referenced by EMM_DisplacementFVMOperator::toDoAfterThisSetting().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ toString()

virtual tString EMM_DisplacementFEMOperator::toString ( ) const
inlinevirtual

turn the martix into string

Reimplemented from EMM_DisplacementOperator.

Referenced by discretize().

Here is the caller graph for this function:

◆ updateAtNextTimeStep()

tBoolean EMM_DisplacementOperator::updateAtNextTimeStep ( const tReal dt,
const EMM_RealArray sigma,
const EMM_RealField Mt 
)
virtualinherited

update the data of operator at next time step

Parameters
dtthe time step
sigmathe magnetized weight of each cell
Mtthe magnetization field at each point at next time step
Returns
true if the updating of the operator has succeeded if (dt==0) the function is called after discretization during the relaxation process

Implements EMM_Operator.

References EMM_DisplacementOperator::computeAccelerator(), EMM_DisplacementOperator::computeElasticTensor(), EMM_DisplacementOperator::computeEquilibriumState(), EMM_DisplacementOperator::computePastDisplacement(), EMM_DisplacementOperator::computeStress(), EMM_DisplacementOperator::initializeEquilibriumSolver(), EMM_DisplacementOperator::isEquilibriumState(), EMM_DisplacementOperator::isFrozenState(), EMM_DisplacementOperator::mAccelerator, EMM_DisplacementOperator::mDt, EMM_DisplacementOperator::mEpsilonUt, EMM_DisplacementOperator::mKappa, EMM_DisplacementOperator::mTimeIntegrationMethod, EMM_DisplacementOperator::mTimeIntegrationOrder, EMM_DisplacementOperator::mUn, EMM_DisplacementOperator::mUnm1, EMM_DisplacementOperator::mUt, EMM_DisplacementOperator::mVn, EMM_DisplacementOperator::mVt, tBoolean, and EMM_DisplacementOperator::TE.

Referenced by EMM_DisplacementFVMOperator::discretize(), discretize(), EMM_DisplacementFVMOperator::resetToInitialState(), resetToInitialState(), EMM_DisplacementOperator::resetToInitialState(), and EMM_DisplacementOperator::setCFL().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ BLOCK_MASS_MATRIX

const tFlag EMM_DisplacementFEMOperator::BLOCK_MASS_MATRIX =1
static

mass matrix whose each element is a digonal matrixof size 3

Referenced by EMM_DisplacementFEMOperator(), and NewMassMatrix().

◆ CANONICAL_MASS_MATRIX

const tFlag EMM_DisplacementFEMOperator::CANONICAL_MASS_MATRIX =0
static

mass matrix whose each element is real

Referenced by NewMassMatrix().

◆ CONDENSED_MASS_MATRIX

const tFlag EMM_DisplacementFEMOperator::CONDENSED_MASS_MATRIX =2
static

mass matrix is diagonal

Referenced by NewMassMatrix().

◆ EQUILIBRIUM_STATE

const tFlag EMM_DisplacementOperator::EQUILIBRIUM_STATE =3
staticinherited

◆ FROZEN_STATE

const tFlag EMM_DisplacementOperator::FROZEN_STATE =1
staticinherited

◆ Gamma

const tReal EMM_Object::Gamma =-1.7e11
staticinherited

◆ INT_GRAD_PHI

const tCInt EMM_DisplacementFEMOperator::INT_GRAD_PHI
staticprivate
Initial value:
={-1,-1,-1,
1 ,-1,-1,
-1, 1,-1,
1, 1,-1,
-1,-1, 1,
1 ,-1, 1,
-1, 1, 1,
1, 1, 1,}

Referenced by computeElasticTensor(), and computeMagneticStress().

◆ INT_GRAD_PHI_FACTOR

const tUCInt EMM_DisplacementFEMOperator::INT_GRAD_PHI_FACTOR =4
staticprivate

◆ mMassMatrix

SP::EMM_MassMatrix EMM_DisplacementFEMOperator::mMassMatrix
private

◆ mMassMatrixType

tFlag EMM_DisplacementFEMOperator::mMassMatrixType
private

◆ Mu0

const tReal EMM_Object::Mu0 =4*M_PI*1e-07
staticinherited

◆ NULL_VALUE

const tReal EMM_Object::NULL_VALUE ={0,0,0}
staticinherited

◆ P1

const tFlag EMM_DisplacementOperator::P1 =1
staticinherited

◆ TE

const tFlag EMM_DisplacementOperator::TE =0
staticinherited

◆ UNSTEADY_STATE

const tFlag EMM_DisplacementOperator::UNSTEADY_STATE =0
staticinherited

◆ X

const tDimension EMM_Object::X =0
staticinherited

◆ Y

const tDimension EMM_Object::Y =1
staticinherited

◆ Z

const tDimension EMM_Object::Z =2
staticinherited

The documentation for this class was generated from the following files: