MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
ExecutionRecipe Class Reference

Base recipe provides public interface to Application. More...

#include <executionrecipe.h>

Inheritance diagram for ExecutionRecipe:
[legend]
Collaboration diagram for ExecutionRecipe:
[legend]

Public Member Functions

 ExecutionRecipe (std::vector< std::unique_ptr< Solver > > *const solvers, std::vector< std::unique_ptr< Coupling > > *const couplers)
 
virtual void preTimeStep () final
 : Calls each solvers preTimeStep - might be empty More...
 
virtual void timeStep ()
 : Single solver time step function. Calls solutionStep() of the specific solver More...
 
virtual void postTimeStep () final
 : Calls each solvers postTimeStep - might be empty More...
 
virtual void preCouple () final
 : Calls each couplers preCouple - might be empty More...
 
virtual void postCouple () final
 : Calls each couplers postCouple - might be empty More...
 
virtual MBool updateCallOrder ()
 
MInt a_step () const
 
MInta_step ()
 
MBool callAdaptation () const
 

Protected Member Functions

void readCallOrder ()
 : Reads the call order of solvers, couplers and adaptation More...
 
void initFunctionPointers ()
 : Initialize the vector containing function pointers to preTimeStep, solutionStep and postTimestep as well as preCouple, subCouple and postCouple. All are set active. More...
 
void setSolverStatus (MInt, MBool)
 : Wrapper function to set solvers active or idle More...
 
void setCouplerStatus (const MInt couplerId, const MBool active)
 : Wrapper function to set couplers active or empty More...
 
MInt noSolvers () const
 
MInt noCouplers () const
 
void nextStep ()
 
MBool solverOrder (const MInt solverId) const
 
MBool couplerOrder (const MInt couplerId) const
 
void setAdaptation ()
 
MInt maxNoSteps () const
 
MBool solutionStep (const MInt solverId)
 
void preSolutionStep (const MInt solverId, const MInt mode)
 
MBool postSolutionStep (const MInt solverId)
 
void subCouple (const MInt couplerId, const MInt step, const MInt solverId, std::vector< MBool > &solverCompleted)
 
const std::vector< std::unique_ptr< Solver > > * a_solvers () const
 
const std::vector< std::unique_ptr< Coupling > > * a_couplers () const
 
MInt swapedSolverId (const MInt oldSolverId)
 
void startLoadTimer (const MInt solverId)
 
void stopLoadTimer (const MInt solverId)
 
MBool solverIsActive (const MInt solverId)
 

Protected Attributes

MInt m_maxSolutionIteration = 1
 
std::map< MInt, MIntm_swapSolverIds {}
 

Private Attributes

const std::vector< std::unique_ptr< Solver > > *const m_solvers
 
const std::vector< std::unique_ptr< Coupling > > *const m_couplers
 
std::vector< std::function< void()> > m_preStep
 
std::vector< std::function< void(const MInt)> > m_preSolutionStep
 
std::vector< std::function< MBool()> > m_solutionStep
 
std::vector< std::function< MBool()> > m_postSolutionStep
 
std::vector< std::function< void()> > m_postStep
 
std::vector< std::function< void(const MInt)> > m_preCouple
 
std::vector< std::function< void(const MInt, const MInt, std::vector< MBool > &)> > m_subCouple
 
std::vector< std::function< void(const MInt)> > m_postCouple
 
MBool m_allowAdaptation = true
 
MInt m_step = -1
 
MInt m_maxNoSteps = 1
 
std::vector< std::vector< MBool > > m_solverOrder {}
 
std::vector< std::vector< MBool > > m_couplerOrder {}
 
std::vector< MBoolm_adaptationOrder {}
 

Detailed Description

Definition at line 21 of file executionrecipe.h.

Constructor & Destructor Documentation

◆ ExecutionRecipe()

ExecutionRecipe::ExecutionRecipe ( std::vector< std::unique_ptr< Solver > > *const  solvers,
std::vector< std::unique_ptr< Coupling > > *const  couplers 
)
inline

Definition at line 23 of file executionrecipe.h.

25 : m_solvers(solvers), m_couplers(couplers) {
26 // This function initializes function pointers to the preTimeStep, solutionStep
27 // and postTimeStep functions of each solver
29 }
const std::vector< std::unique_ptr< Coupling > > *const m_couplers
const std::vector< std::unique_ptr< Solver > > *const m_solvers
void initFunctionPointers()
: Initialize the vector containing function pointers to preTimeStep, solutionStep and postTimestep as...
MInt * solvers
Definition: maiatypes.h:72

Member Function Documentation

◆ a_couplers()

const std::vector< std::unique_ptr< Coupling > > * ExecutionRecipe::a_couplers ( ) const
inlineprotected

Definition at line 79 of file executionrecipe.h.

79{ return m_couplers; }

◆ a_solvers()

const std::vector< std::unique_ptr< Solver > > * ExecutionRecipe::a_solvers ( ) const
inlineprotected

Definition at line 77 of file executionrecipe.h.

77{ return m_solvers; }

◆ a_step() [1/2]

MInt & ExecutionRecipe::a_step ( )
inline

Definition at line 43 of file executionrecipe.h.

43{ return m_step; }

◆ a_step() [2/2]

MInt ExecutionRecipe::a_step ( ) const
inline

Definition at line 42 of file executionrecipe.h.

42{ return m_step; }

◆ callAdaptation()

MBool ExecutionRecipe::callAdaptation ( ) const
inline

Definition at line 45 of file executionrecipe.h.

45{ return m_allowAdaptation; }

◆ couplerOrder()

MBool ExecutionRecipe::couplerOrder ( const MInt  couplerId) const
inlineprotected

Definition at line 61 of file executionrecipe.h.

61{ return m_couplerOrder[m_step][couplerId]; }
std::vector< std::vector< MBool > > m_couplerOrder

◆ initFunctionPointers()

void ExecutionRecipe::initFunctionPointers ( )
protected
Author
Thomas Hoesgen
Date
01/2020

Definition at line 312 of file executionrecipe.h.

312 {
313 TRACE();
314
315 for(MInt i = 0; i < noSolvers(); i++) {
316 m_preStep.emplace_back([=]() { m_solvers->at(i)->preTimeStep(); });
317 m_preSolutionStep.emplace_back([=](MInt b) { m_solvers->at(i)->preSolutionStep(b); });
318 m_solutionStep.emplace_back([=]() { return m_solvers->at(i)->solutionStep(); });
319 m_postSolutionStep.emplace_back([=]() { return m_solvers->at(i)->postSolutionStep(); });
320 m_postStep.emplace_back([=]() { m_solvers->at(i)->postTimeStep(); });
321 }
322
323 for(MInt i = 0; i < noCouplers(); i++) {
324 m_preCouple.emplace_back([=](MInt v) { m_couplers->at(i)->preCouple(v); });
325 m_subCouple.emplace_back(
326 [=](const MInt v, const MInt s, std::vector<MBool>& sc) { return m_couplers->at(i)->subCouple(v, s, sc); });
327 m_postCouple.emplace_back([=](MInt v) { m_couplers->at(i)->postCouple(v); });
328 }
329}
std::vector< std::function< void(const MInt)> > m_postCouple
std::vector< std::function< MBool()> > m_solutionStep
std::vector< std::function< void()> > m_postStep
std::vector< std::function< void(const MInt, const MInt, std::vector< MBool > &)> > m_subCouple
std::vector< std::function< void(const MInt)> > m_preCouple
std::vector< std::function< void(const MInt)> > m_preSolutionStep
MInt noCouplers() const
std::vector< std::function< void()> > m_preStep
MInt noSolvers() const
std::vector< std::function< MBool()> > m_postSolutionStep
int32_t MInt
Definition: maiatypes.h:62

◆ maxNoSteps()

MInt ExecutionRecipe::maxNoSteps ( ) const
inlineprotected

Definition at line 65 of file executionrecipe.h.

65{ return m_maxNoSteps; }

◆ nextStep()

void ExecutionRecipe::nextStep ( )
inlineprotected

Definition at line 57 of file executionrecipe.h.

57{ ++m_step; }

◆ noCouplers()

MInt ExecutionRecipe::noCouplers ( ) const
inlineprotected

Definition at line 55 of file executionrecipe.h.

55{ return m_couplers->size(); }

◆ noSolvers()

MInt ExecutionRecipe::noSolvers ( ) const
inlineprotected

Definition at line 54 of file executionrecipe.h.

54{ return m_solvers->size(); }

◆ postCouple()

void ExecutionRecipe::postCouple ( )
finalvirtual
Author
Thomas Hoesgen
Date
01/2020

Definition at line 408 of file executionrecipe.h.

408 {
409 TRACE();
410
411 for(auto&& coupler : *m_couplers) {
412 coupler->startLoadTimer(AT_);
413 m_postCouple[coupler->couplerId()](a_step());
414 coupler->stopLoadTimer(AT_);
415 }
416}
MInt a_step() const

◆ postSolutionStep()

MBool ExecutionRecipe::postSolutionStep ( const MInt  solverId)
inlineprotected

Definition at line 71 of file executionrecipe.h.

71{ return m_postSolutionStep[solverId](); }

◆ postTimeStep()

void ExecutionRecipe::postTimeStep ( )
finalvirtual
Author
Thomas Hoesgen
Date
01/2020

Definition at line 377 of file executionrecipe.h.

377 {
378 TRACE();
379 for(auto&& solver : *m_solvers) {
380 const MInt solverId = m_swapSolverIds.empty() ? solver->solverId() : swapedSolverId(solver->solverId());
381 if(!solverIsActive(solverId)) {
382 continue; // skip inactive solvers
383 }
384 startLoadTimer(solverId);
385 m_postStep[solverId]();
386 stopLoadTimer(solverId);
387 }
388}
void stopLoadTimer(const MInt solverId)
MBool solverIsActive(const MInt solverId)
void startLoadTimer(const MInt solverId)
std::map< MInt, MInt > m_swapSolverIds
MInt swapedSolverId(const MInt oldSolverId)

◆ preCouple()

void ExecutionRecipe::preCouple ( )
inlinefinalvirtual
Author
Thomas Hoesgen
Date
01/2020

Definition at line 394 of file executionrecipe.h.

394 {
395 TRACE();
396
397 for(auto&& coupler : *m_couplers) {
398 coupler->startLoadTimer(AT_);
399 m_preCouple[coupler->couplerId()](a_step());
400 coupler->stopLoadTimer(AT_);
401 }
402}

◆ preSolutionStep()

void ExecutionRecipe::preSolutionStep ( const MInt  solverId,
const MInt  mode 
)
inlineprotected

Definition at line 69 of file executionrecipe.h.

69{ return m_preSolutionStep[solverId](mode); }

◆ preTimeStep()

void ExecutionRecipe::preTimeStep ( )
inlinefinalvirtual
Author
Thomas Hoesgen
Date
01/2020

Definition at line 335 of file executionrecipe.h.

335 {
336 TRACE();
337 for(auto&& solver : *m_solvers) {
338 if(!solver->isActive()) {
339 continue; // skip inactive solvers
340 }
341
342 solver->startLoadTimer(AT_);
343 m_preStep[solver->solverId()]();
344 solver->stopLoadTimer(AT_);
345 }
346}

◆ readCallOrder()

void ExecutionRecipe::readCallOrder ( )
protected

For some multisolver applications the solvers can not be executed simultaneously. E.g. in level-set moving boundary problems the new level-set solution needs to be known before the fvMbSolver can perform its time step. Therefore, a callOrder is specified in the propertiesFile for the solvers, couplers and the adaptation. According to the callOrder solvers and couplers are set to active or empty and the adaptation can be turned on and off. The callOrder is updated in each step of the advance time step iteration inside the time step loop ( updateCallOrder() ). In the first step of level-set moving boundary problems the LS solver is set active and the fvMb solver is set to idle. In the subsequent step the LS solver is deactivated, while the fvMb solver is activated.

Author
Thomas Hoesgen
Date
01/2020

Definition at line 153 of file executionrecipe.h.

153 {
154 TRACE();
155
156 a_step() = 0;
157
158 // TODO labels:COUPLER,DOC,toenhance allow a default call order to be defined by the couplers (when there is only one
159 // coupler)
160 // @ansgar this would make sense e.g. for the multilevel interpolation coupler!
161
162 m_maxNoSteps = 1;
163 m_maxNoSteps = Context::getBasicProperty<MInt>("recipeMaxNoSteps", AT_, &m_maxNoSteps);
164
165
167 m_maxSolutionIteration = Context::getBasicProperty<MInt>("maxIterations", AT_, &m_maxSolutionIteration);
168
169 m_solverOrder.resize(m_maxNoSteps, std::vector<MBool>(noSolvers()));
170 m_couplerOrder.resize(m_maxNoSteps, std::vector<MBool>(noCouplers()));
172
173 // Read solverOrder_x properties defining when the solvers should be executed, e.g. solverOrder_1 =
174 // [1, 0] to execute the solver #1 in the first step but not in the second step
175 for(MInt solver = 0; solver < noSolvers(); solver++) {
176 const MString propName = "solverOrder_" + std::to_string(solver);
178
179 for(MInt step = 0; step < m_maxNoSteps; step++) {
180 m_solverOrder[step][solver] = (MBool)Context::getBasicProperty<MInt>(propName, AT_, step);
181 }
182 }
183
184 // Read couplerOrder_x properties defining when the coupler should be executed, e.g. [0, 1] to
185 // execute the coupler only in the second step
186 for(MInt coupler = 0; coupler < noCouplers(); coupler++) {
187 const MString propName = "couplerOrder_" + std::to_string(coupler);
189
190 for(MInt step = 0; step < m_maxNoSteps; step++) {
191 m_couplerOrder[step][coupler] = (MBool)Context::getBasicProperty<MInt>(propName, AT_, step);
192 }
193 }
194
195 for(MInt step = 0; step < m_maxNoSteps; step++) {
196 // Property adaptationOrder is an array of length m_maxNoSteps - e.g. [0,1]
198 m_adaptationOrder[step] = (MBool)Context::getBasicProperty<MInt>("adaptationOrder", AT_, step);
199 }
200
201 // Set solver and coupler statuses for recipe step 0
202 for(MInt blck = 0; blck < noSolvers(); blck++) {
203 setSolverStatus(blck, m_solverOrder[a_step()][blck]);
204 }
205
206 for(MInt cpl = 0; cpl < noCouplers(); cpl++) {
208 }
209
211
212 // Print execution recipe call order to m_log
213 m_log << " === Execution recipe: call order with " << m_maxNoSteps << " steps" << std::endl;
214 m_log << "step: ";
215 for(MInt step = 0; step < m_maxNoSteps; step++) {
216 m_log << " " << step;
217 }
218 m_log << std::endl;
219
220 for(MInt solver = 0; solver < noSolvers(); solver++) {
221 m_log << "solver #" << solver << ": ";
222 for(MInt step = 0; step < m_maxNoSteps; step++) {
223 m_log << " " << m_solverOrder[step][solver];
224 }
225 m_log << std::endl;
226 }
227 for(MInt cpl = 0; cpl < noCouplers(); cpl++) {
228 m_log << "coupler #" << cpl << ":";
229 for(MInt step = 0; step < m_maxNoSteps; step++) {
230 m_log << " " << m_couplerOrder[step][cpl];
231 }
232 m_log << std::endl;
233 }
234
235 for(MInt blck = 0; blck < noSolvers(); blck++) {
236 setSolverStatus(blck, solverOrder(blck));
237 }
238
239 for(MInt cpl = 0; cpl < noCouplers(); cpl++) {
241 }
242
244
245 m_swapSolverIds.clear();
246 if(Context::propertyExists("swapSolverSolutionStep")) {
247 MInt size = Context::propertyLength("swapSolverSolutionStep") / 2;
248 for(MInt i = 0; i < size; i++) {
249 const MInt oldId = Context::getBasicProperty<MInt>("swapSolverSolutionStep", AT_, i);
250 const MInt newId = Context::getBasicProperty<MInt>("swapSolverSolutionStep", AT_, i + 1);
251 m_swapSolverIds.insert(std::make_pair(oldId, newId));
252 m_swapSolverIds.insert(std::make_pair(newId, oldId));
253 }
254 }
255}
static MInt propertyLength(const MString &name, MInt solverId=m_noSolvers)
Returns the number of elements of a property.
Definition: context.cpp:538
static void assertPropertyLength(const MString &name, const MInt length, const MInt solverId=m_noSolvers)
Assert that the length of a property matches the given length.
Definition: context.cpp:559
static MBool propertyExists(const MString &name, MInt solver=m_noSolvers)
This function checks if a property exists in general.
Definition: context.cpp:494
void setSolverStatus(MInt, MBool)
: Wrapper function to set solvers active or idle
MBool couplerOrder(const MInt couplerId) const
MBool solverOrder(const MInt solverId) const
std::vector< MBool > m_adaptationOrder
std::vector< std::vector< MBool > > m_solverOrder
void setCouplerStatus(const MInt couplerId, const MBool active)
: Wrapper function to set couplers active or empty
InfoOutFile m_log
std::basic_string< char > MString
Definition: maiatypes.h:55
bool MBool
Definition: maiatypes.h:58

◆ setAdaptation()

void ExecutionRecipe::setAdaptation ( )
inlineprotected

Definition at line 63 of file executionrecipe.h.

◆ setCouplerStatus()

void ExecutionRecipe::setCouplerStatus ( const MInt  couplerId,
const MBool  active 
)
protected
Author
Thomas Hoesgen
Date
01/2020

Definition at line 289 of file executionrecipe.h.

289 {
290 TRACE();
291
292 if(active) {
293 m_preCouple[couplerId] = [=](MInt i) { m_couplers->at(couplerId)->preCouple(i); };
294 m_subCouple[couplerId] = [=](const MInt i, const MInt s, std::vector<MBool>& sc) {
295 return m_couplers->at(couplerId)->subCouple(i, s, sc);
296 };
297 m_postCouple[couplerId] = [=](MInt i) { m_couplers->at(couplerId)->postCouple(i); };
298 } else {
299 // set to empty lambda
300 m_preCouple[couplerId] = [](const MInt) {};
301 m_subCouple[couplerId] = [](const MInt, const MInt, std::vector<MBool>&) { return true; };
302 m_postCouple[couplerId] = [](const MInt) {};
303 }
304}

◆ setSolverStatus()

void ExecutionRecipe::setSolverStatus ( MInt  solverId,
MBool  active 
)
protected
Author
Thomas Hoesgen
Date
01/2020

Definition at line 261 of file executionrecipe.h.

261 {
262 TRACE();
263
264 // Tell the solver its current status such that a coupler can ask the solver if its currently active
265 // inside of the execution recipe
266 m_solvers->at(solverId)->setSolverStatus(active);
267
268
269 if(active) {
270 m_preStep[solverId] = [=]() { m_solvers->at(solverId)->preTimeStep(); };
271 m_preSolutionStep[solverId] = [=](MInt mode) { m_solvers->at(solverId)->preSolutionStep(mode); };
272 m_solutionStep[solverId] = [=]() { return m_solvers->at(solverId)->solutionStep(); };
273 m_postSolutionStep[solverId] = [=]() { return m_solvers->at(solverId)->postSolutionStep(); };
274 m_postStep[solverId] = [=]() { m_solvers->at(solverId)->postTimeStep(); };
275 } else {
276 // set to empty lambda
277 m_preStep[solverId] = []() {};
278 m_preSolutionStep[solverId] = [](MInt) {};
279 m_solutionStep[solverId] = []() { return true; };
280 m_postSolutionStep[solverId] = []() { return true; };
281 m_postStep[solverId] = []() {};
282 }
283}

◆ solutionStep()

MBool ExecutionRecipe::solutionStep ( const MInt  solverId)
inlineprotected

Definition at line 67 of file executionrecipe.h.

67{ return m_solutionStep[solverId](); }

◆ solverIsActive()

MBool ExecutionRecipe::solverIsActive ( const MInt  solverId)
inlineprotected

Definition at line 107 of file executionrecipe.h.

107{ return m_solvers->at(solverId)->isActive(); }

◆ solverOrder()

MBool ExecutionRecipe::solverOrder ( const MInt  solverId) const
inlineprotected

Definition at line 59 of file executionrecipe.h.

59{ return m_solverOrder[m_step][solverId]; }

◆ startLoadTimer()

void ExecutionRecipe::startLoadTimer ( const MInt  solverId)
inlineprotected

Definition at line 103 of file executionrecipe.h.

103{ m_solvers->at(solverId)->startLoadTimer(AT_); }

◆ stopLoadTimer()

void ExecutionRecipe::stopLoadTimer ( const MInt  solverId)
inlineprotected

Definition at line 105 of file executionrecipe.h.

105{ m_solvers->at(solverId)->stopLoadTimer(AT_); }

◆ subCouple()

void ExecutionRecipe::subCouple ( const MInt  couplerId,
const MInt  step,
const MInt  solverId,
std::vector< MBool > &  solverCompleted 
)
inlineprotected

Definition at line 73 of file executionrecipe.h.

73 {
74 m_subCouple[couplerId](step, solverId, solverCompleted);
75 }

◆ swapedSolverId()

MInt ExecutionRecipe::swapedSolverId ( const MInt  oldSolverId)
inlineprotected

Definition at line 85 of file executionrecipe.h.

85 {
86 // switch solver order during execution, this becomes necessary during intraStep-coupling,
87 // when however one solver depends on a certain solver initialisation, thus prescrining the
88 // solverId-oder, but during the time-step the order needs to be the other way around!
89
90 ASSERT(!m_swapSolverIds.empty(), "");
91
92 MInt solverId = oldSolverId;
93 auto it = m_swapSolverIds.find(solverId);
94 if(it != m_swapSolverIds.end()) {
95 solverId = it->second;
96 }
97
98 ASSERT(solverOrder(oldSolverId) == solverOrder(solverId), "");
99
100 return solverId;
101 }

◆ timeStep()

void ExecutionRecipe::timeStep ( )
inlinevirtual
Author
Thomas Hoesgen
Date
01/2020

Reimplemented in ExecutionRecipeIntraStepCoupling, and ExecutionRecipeSolutionIteration.

Definition at line 353 of file executionrecipe.h.

353 {
354 TRACE();
355
356 // For a single solver run, there is obviously only one solver!
357 for(auto&& solver : *m_solvers) {
358 if(!solver->isActive()) {
359 continue; // skip inactive solvers
360 }
361
362 // Outer loop over substep iterations
363 MBool completed = false;
364 while(!completed) {
365 // Solution step
366 solver->startLoadTimer(AT_);
367 completed = m_solutionStep[solver->solverId()]();
368 solver->stopLoadTimer(AT_);
369 }
370 }
371}

◆ updateCallOrder()

virtual MBool ExecutionRecipe::updateCallOrder ( )
inlinevirtual

Reimplemented in ExecutionRecipeIntraStepCoupling, and ExecutionRecipeSolutionIteration.

Definition at line 40 of file executionrecipe.h.

40{ return true; };

Member Data Documentation

◆ m_adaptationOrder

std::vector<MBool> ExecutionRecipe::m_adaptationOrder {}
private

Definition at line 132 of file executionrecipe.h.

◆ m_allowAdaptation

MBool ExecutionRecipe::m_allowAdaptation = true
private

Definition at line 126 of file executionrecipe.h.

◆ m_couplerOrder

std::vector<std::vector<MBool> > ExecutionRecipe::m_couplerOrder {}
private

Definition at line 131 of file executionrecipe.h.

◆ m_couplers

const std::vector<std::unique_ptr<Coupling> >* const ExecutionRecipe::m_couplers
private

Definition at line 111 of file executionrecipe.h.

◆ m_maxNoSteps

MInt ExecutionRecipe::m_maxNoSteps = 1
private

Definition at line 129 of file executionrecipe.h.

◆ m_maxSolutionIteration

MInt ExecutionRecipe::m_maxSolutionIteration = 1
protected

Definition at line 81 of file executionrecipe.h.

◆ m_postCouple

std::vector<std::function<void(const MInt)> > ExecutionRecipe::m_postCouple
private

Definition at line 123 of file executionrecipe.h.

◆ m_postSolutionStep

std::vector<std::function<MBool()> > ExecutionRecipe::m_postSolutionStep
private

Definition at line 116 of file executionrecipe.h.

◆ m_postStep

std::vector<std::function<void()> > ExecutionRecipe::m_postStep
private

Definition at line 117 of file executionrecipe.h.

◆ m_preCouple

std::vector<std::function<void(const MInt)> > ExecutionRecipe::m_preCouple
private

Definition at line 119 of file executionrecipe.h.

◆ m_preSolutionStep

std::vector<std::function<void(const MInt)> > ExecutionRecipe::m_preSolutionStep
private

Definition at line 114 of file executionrecipe.h.

◆ m_preStep

std::vector<std::function<void()> > ExecutionRecipe::m_preStep
private

Definition at line 113 of file executionrecipe.h.

◆ m_solutionStep

std::vector<std::function<MBool()> > ExecutionRecipe::m_solutionStep
private

Definition at line 115 of file executionrecipe.h.

◆ m_solverOrder

std::vector<std::vector<MBool> > ExecutionRecipe::m_solverOrder {}
private

Definition at line 130 of file executionrecipe.h.

◆ m_solvers

const std::vector<std::unique_ptr<Solver> >* const ExecutionRecipe::m_solvers
private

Definition at line 110 of file executionrecipe.h.

◆ m_step

MInt ExecutionRecipe::m_step = -1
private

Definition at line 128 of file executionrecipe.h.

◆ m_subCouple

std::vector<std::function<void(const MInt, const MInt, std::vector<MBool>&)> > ExecutionRecipe::m_subCouple
private

Definition at line 121 of file executionrecipe.h.

◆ m_swapSolverIds

std::map<MInt, MInt> ExecutionRecipe::m_swapSolverIds {}
protected

Definition at line 83 of file executionrecipe.h.


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