C++ mpi module for stochmagnet_main Package
SMOMPI_LandauLifschitzBeam.hpp
1 #ifndef SMOMPI_LandauLifschitzBeam_HPP
2 #define SMOMPI_LandauLifschitzBeam_HPP
3 
4 
5 //stochastic functions headers for templated casting
6 #include "SM_TRNGStochasticFunctions.h"
7 #include "SM_TRNGStochasticFunctions_MT19937.h"
8 #include "SM_BoostStochasticFunctions.h"
9 #include "SM_STDStochasticFunctions.h"
10 #include "SM_MTStochasticFunctions.h"
11 
12 //noise rate functions headers for templated casting
13 #include "SM_ConstantNoiseRateFunction.h"
14 #include "SM_InverseNoiseRateFunction.h"
15 template<class StochOutputImplement>
17 
18  //casting with stochastic function
20 
22  if (fstd!=null) {
23  return runWithSCStochasticFunctions(*fstd,outputSData);
24  }
26  if (fboost!=null) {
27  return runWithSCStochasticFunctions(*fboost,outputSData);
28  }
30  if (ftrng!=null) {
31  return runWithSCStochasticFunctions(*ftrng,outputSData);
32  }
33 
35  if (ftrngp_lcg64!=null) {
36  return runWithSCStochasticFunctions(*ftrngp_lcg64,outputSData);
37  }
38 
40  if (ftrngp_yarn2!=null) {
41  return runWithSCStochasticFunctions(*ftrngp_yarn2,outputSData);
42  }
44  if (ftrngp_mrg2!=null) {
45  return runWithSCStochasticFunctions(*ftrngp_mrg2,outputSData);
46  }
48  if (ftrngp_mrg3!=null) {
49  return runWithSCStochasticFunctions(*ftrngp_mrg3,outputSData);
50  }
52  if (ftrngp_mrg3s!=null) {
53  return runWithSCStochasticFunctions(*ftrngp_mrg3s,outputSData);
54  }
56  if (ftrngp_mrg4!=null) {
57  return runWithSCStochasticFunctions(*ftrngp_mrg4,outputSData);
58  }
60  if (ftrngp_mrg5!=null) {
61  return runWithSCStochasticFunctions(*ftrngp_mrg5,outputSData);
62  }
64  if (ftrngp_mrg5s!=null) {
65  return runWithSCStochasticFunctions(*ftrngp_mrg5s,outputSData);
66  }
68  if (fvampire!=null) {
69  return runWithSCStochasticFunctions(*fvampire,outputSData);
70  }
71 
72  //default runs
73  return run(outputSData);
74 
75 }
76 
77 template<class StochFunctionsImplement, class StochOutputImplement>
80  //casting with stochastic function
82 
84  if (cNRF!=null) {
85  return runWithSCStochasticFunctions(stochFunctions,*cNRF,outputSData);
86  }
87  SM_InverseNoiseRateFunction *iNRF=dynamic_cast<SM_InverseNoiseRateFunction *>(gNRF);
88  if (iNRF!=null) {
89  return runWithSCStochasticFunctions(stochFunctions,*iNRF,outputSData);
90  }
91  //default runs
92  return run(outputSData);
93 
94 }
95 
96 template<class StochFunctionsImplement, class NoiseRateFunctionImplement,class StochOutputImplement>
98  const SM_NoiseRateFunction<NoiseRateFunctionImplement>& noiseRateFunction,
100  tString routineName="SMOMPI_LandauLifschitzBeam::templatedRun<S,N,O>()";
101  CORE_Profiler::StartCallRoutine(routineName);
102 
103  //get the size of the beam
104  tIndex s0,s1;
105  getBeamSize(s0,s1);
106 
107  //has simulation succeeded
108  tBoolean ok=true;
109 
110  //system of the beam
111  System& system=*dynamic_cast<System*>(&getSystem());
112 
113  //open the stochastic outputSData
114  if (!outputSData.open(*this)) {
115  std::cout<<"stochastic output "<<outputSData.getIdentityString()<<" not compatble with the system \n";
116  return false;
117  }
118 
119 
120  //make all the simulations
121  for (tIndex s=s0;s<s1;s++) {
122 
123  //St=S0
124  if (!system.initializeMagneticMomentDirections()) {
125  throw CORE_Exception("stochmagnet/core",
126  "SMOMPI_LandauLifshitzSystemBeam::runWithSCStochasticFunctions(StochFunction,noiseRate,outputSData)",
127  "initialization of S(t=0) failed");
128  }
129 
130  //open the data for s-th simulation
131  outputSData.open(s,system);
132 
133  //make the steps to equilibrium
134  ok=system.stochasticRunWithSCStochasticFunctions(getPreconditioningStepsNumber(),stochFunctions,noiseRateFunction);
135 
136  //make the steps for stochastic
137  ok=system.stochasticRunWithSCStochasticFunctions(getStepsNumber(),stochFunctions,noiseRateFunction,outputSData);
138  //if the simulation has succed, compute the raw esperance
139  outputSData.close(s,system,ok);
140 
141  }
142  //if all simulations are beed fullfiled compute the esperance from raw data
143  outputSData.close(*this);
144 
145  CORE_Profiler::EndCallRoutine(routineName);
146  return true;
147 }
148 
149 
150 #endif
this class describes the exceptions raised for CORE package
Definition: CORE_Exception.h:17
tString getIdentityString() const
retrun the string identification of the class
Definition: CORE_Object.h:321
static void EndCallRoutine(const tString &routineName)
end calling routine
Definition: CORE_Profiler.h:91
static void StartCallRoutine(const tString &routineName)
start calling routine
Definition: CORE_Profiler.h:61
tBoolean runWithSCStochasticFunctions(SM_StochasticOutput< StochOutputImplement > &outputSData)
run the simulations with static inline casting noise rate function & stochastic function
Definition: SMOMPI_LandauLifschitzBeam.hpp:16
This class describes an MPI implementation of SM_LandauLifschitzSystem.
Definition: SMOMPI_LandauLifschitzSystem.h:18
tBoolean stochasticRunWithSCStochasticFunctions(const tIndex &steppersNumber, SM_MultiStochasticFunctions< StochFImplement > &stochasticFunctions, const SM_NoiseRateFunction< NoiseFImplement > &noiseRateFunction)
compute the relaxation process by calling only virtual methods
virtual tBoolean initializeMagneticMomentDirections() final
initialize magnetic moments direction
Definition: SMOMPI_LandauLifschitzSystem.cpp:54
const SM_System & getSystem() const
get the system
Definition: SM_Beam.h:264
const SM_MultiStochasticFunctionsInterface & getStochasticFunctions() const
get the stochastic functions
Definition: SM_Beam.h:236
const tIndex & getBeamSize() const
get the beam size
Definition: SM_Beam.h:166
const tIndex & getStepsNumber() const
get the number of steps for stochastic computation
Definition: SM_Beam.h:207
const tIndex & getPreconditioningStepsNumber() const
get the number of steps for precoditioning
Definition: SM_Beam.h:194
This class describes an noise rate function of the form .
Definition: SM_ConstantNoiseRateFunction.h:13
This class describes an noise rate function of the form .
Definition: SM_InverseNoiseRateFunction.h:13
SM_LandauLifschitzSystem & getLLSystem()
get the landau lifschitz system
Definition: SM_LandauLifschitzBeam.h:82
tBoolean run(SM_StochasticOutput< StochOutputImplement > &outputSData)
run the simulations
Definition: SM_LandauLifschitzBeam.h:98
SM_NoiseRateFunctionInterface & getNoiseRateFunction()
get the noise rate function
Definition: SM_LandauLifschitzSystem.h:278
This class describes a multi stochastic functions based on same random number generator which impleme...
Definition: SM_MultiStochasticFunctionsInterface.h:18
This class describes a multi stochastic functions based on same random number generator which impleme...
Definition: SM_MultiStochasticFunctions.h:26
This class describes a noise rate function.
Definition: SM_NoiseRateFunctionInterface.h:13
This class describes a templated noise rate function as static polymorphism.
Definition: SM_NoiseRateFunction.h:14
this class implements the virtual methods of its base class SM_StochasticOutputComponent with templat...
Definition: SM_StochasticOutput.h:24
tBoolean close(const tIndex &s, const SM_System &system, const tBoolean &hasSucceeded)
close the stochastic data for the simulation s
Definition: SM_StochasticOutput.h:172
tBoolean open(const SM_Beam &beam)
open the stochastic data
Definition: SM_StochasticOutput.h:147