75StaggeredProblem :: ~StaggeredProblem()
90StaggeredProblem :: instanciateSlaveProblems()
125 EngngModel :: initializeFrom(ir);
129 EngngModel :: initializeFrom(ir);
189 printf(
"Suppressing output.\n");
200#ifdef __MPI_PARALLEL_MODE
210StaggeredProblem :: updateAttributes(
MetaStep *mStep)
214 EngngModel :: updateAttributes(mStep);
218 emodel->updateAttributes(mStep);
246StaggeredProblem :: giveDeltaT(
int n)
266 double adjustedDeltaT =
deltaT;
272 if ( !(
currentStep->giveTargetTime() > this->adaptiveStepSince ) ) {
273 return adjustedDeltaT;
299 return adjustedDeltaT;
306StaggeredProblem :: giveDiscreteTime(
int iStep)
308 if ( ( iStep > 0 ) && ( iStep <=
discreteTimes.giveSize() ) ) {
312 if ( ( iStep == 0 ) && ( iStep <=
discreteTimes.giveSize() ) ) {
320StaggeredProblem :: giveCurrentStep(
bool force)
325 return EngngModel :: giveCurrentStep();
330StaggeredProblem :: givePreviousStep(
bool force)
335 return EngngModel :: givePreviousStep();
340StaggeredProblem :: giveSolutionStepWhenIcApply(
bool force)
357StaggeredProblem :: giveTimeControl(){
367StaggeredProblem :: giveNumberOfFirstStep(
bool force)
372 return EngngModel :: giveNumberOfFirstStep(force);
378StaggeredProblem :: giveNextStep()
381 double totalTime = 0;
392 counter =
currentStep->giveSolutionStateCounter() + 1;
398 OOFEM_LOG_INFO(
"\n==================================================================\n");
400 currentStep = std::make_unique<TimeStep>(istep,
this, 1, totalTime, totalTime -
previousStep->giveTargetTime(), counter);
404 OOFEM_LOG_INFO(
"\n==================================================================\n");
407 currentStep = std::make_unique<TimeStep>(istep,
this, 1, totalTime, totalTime -
previousStep->giveTargetTime(), counter);
416StaggeredProblem :: solveYourself()
421 int smstep = 1, sjstep = 1;
422 this->
timer.startTimer(EngngModelTimer :: EMTT_AnalysisTimer);
435 for (
int jstep = sjstep; jstep <= nTimeSteps; jstep++ ) {
436 this->
timer.startTimer(EngngModelTimer :: EMTT_SolutionStepTimer);
437 this->
timer.initTimer(EngngModelTimer :: EMTT_NetComputationalStepTimer);
449 this->
timer.stopTimer(EngngModelTimer :: EMTT_SolutionStepTimer);
450 double _steptime = this->
timer.getUtime(EngngModelTimer :: EMTT_SolutionStepTimer);
455 OOFEM_LOG_INFO(
"EngngModel info: user time consumed by solution step %d: %.2fs\n",
459 fprintf(this->
giveOutputStream(),
"\nUser time consumed by solution step %d: %.3f [s]\n\n",
463#ifdef __MPI_PARALLEL_MODE
478StaggeredProblem :: solveYourselfAt(
TimeStep *tStep)
484 emodel->solveYourselfAt(tStep);
491StaggeredProblem :: forceEquationNumbering()
496 if ( emodel->requiresEquationRenumbering( emodel->giveCurrentStep() ) ) {
497 neqs += emodel->forceEquationNumbering();
512 emodel->updateYourself(tStep);
515 EngngModel :: updateYourself(tStep);
522 emodel->terminate(tStep);
530 emodel->giveExportModuleManager()->doOutput(tStep);
536StaggeredProblem :: printOutputAt(FILE *file,
TimeStep *tStep)
545 EngngModel :: saveContext(stream, mode);
547 emodel->saveContext(stream, mode);
555 EngngModel :: restoreContext(stream, mode);
557 emodel->restoreContext(stream, mode);
563StaggeredProblem :: giveSlaveProblem(
int i)
576StaggeredProblem :: checkProblemConsistency()
582 result &= emodel->checkProblemConsistency();
599StaggeredProblem :: updateDomainLinks()
602 emodel->updateDomainLinks();
607StaggeredProblem :: setRenumberFlag()
610 emodel->setRenumberFlag();
617 int ap =
gc.getActiveProblemIndx();
625 int ap =
gc.getActiveProblemIndx();
633 int ap =
gc.getActiveProblemIndx();
#define REGISTER_EngngModel(class)
int giveNumberOfTimeStepWhenIcApply()
Returns the time step number, when initial conditions should apply.
std ::vector< std ::unique_ptr< Domain > > domainList
List of problem domains.
virtual void preInitializeNextStep()
Does a pre-initialization of the next time step (implement if necessarry).
int numProcs
Total number of collaborating processes.
virtual int giveCurrentNumberOfIterations()
virtual void balanceLoad(TimeStep *tStep)
int rank
Domain rank in a group of collaborating processes (0..groupSize-1).
virtual TimeStep * giveCurrentStep(bool force=false)
std::string dataOutputFileName
Path to output stream.
std::string simulationDescription
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
bool renumberFlag
Renumbering flag (renumbers equations after each step, necessary if Dirichlet BCs change).
EngngModel(int i, EngngModel *_master=NULL)
std ::unique_ptr< TimeStep > previousStep
Previous time step.
char processor_name[PROCESSOR_NAME_LENGTH]
Processor name.
int ndomains
Number of receiver domains.
int numberOfSteps
Total number of time steps.
Domain * giveDomain(int n)
std ::unique_ptr< TimeStep > currentStep
Current time step.
bool loadBalancingFlag
If set to true, load balancing is active.
FILE * giveOutputStream()
Returns file descriptor of output file.
time_t startTime
Solution start time.
MetaStep * giveMetaStep(int i)
Returns the i-th meta step.
EngngModelTimer timer
E-model timer.
problemMode pMode
Domain mode.
ContextOutputMode contextOutputMode
Domain context output mode.
void initMetaStepAttributes(MetaStep *mStep)
int giveNumberOfMetaSteps()
Return number of meta steps.
bool suppressOutput
Flag for suppressing output to file.
FILE * outputStream
Output stream.
bool isParallel() const
Returns true if receiver in parallel mode.
std ::unique_ptr< TimeStep > stepWhenIcApply
Solution step when IC (initial conditions) apply.
virtual bool requiresEquationRenumbering(TimeStep *tStep)
IntArray domainPrescribedNeqs
Number of prescribed equations per domain.
IntArray domainNeqs
Number of equations per domain.
double minStepLength
adaptive time step length - minimum
int forceEquationNumbering() override
std ::vector< std ::string > inputStreamNames
EngngModel * giveTimeControl()
int dtFunction
Associated time function for time step increment.
EngngModel * giveSlaveProblem(int i) override
Returns i-th slave problem.
IntArray coupledModels
List of slave models to which this model is coupled.
int timeDefinedByProb
Optional parameter which specify problems to define load time functions.
double reqIterations
adaptive time step length - required (=optimum) number of iterations
void updateYourself(TimeStep *tStep) override
void solveYourselfAt(TimeStep *tStep) override
double maxStepLength
adaptive time step length - maximum
FloatArray discreteTimes
Specified times where the problem is solved.
int giveNumberOfSlaveProblems() override
Returns number of slave problems.
int giveNumberOfFirstStep(bool force=false) override
void initializeYourself(TimeStep *tStep) override
Function * giveDtFunction()
double adaptiveStepSince
adaptive time step length applies after prescribed time
void terminate(TimeStep *tStep) override
int instanciateSlaveProblems()
double endOfTimeOfInterest
std ::vector< std ::unique_ptr< EngngModel > > emodelList
List of engineering models to solve sequentially.
TimeStep * giveSolutionStepWhenIcApply(bool force=false) override
double giveDiscreteTime(int n)
int giveMetaStepNumber()
Returns receiver's meta step number.
void incrementStateCounter()
Updates solution state counter.
double giveTargetTime()
Returns target time.
int giveNumber()
Returns receiver's number.
double solutionTime
time step solution time in seconds
#define _IFT_EngngModel_nsteps
#define _IFT_EngngModel_suppressOutput
#define OOFEM_LOG_INFO(...)
#define OOFEM_LOG_RELEVANT(...)
#define OOFEM_LOG_DEBUG(...)
long StateCounterType
StateCounterType type used to indicate solution state.
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
std::unique_ptr< EngngModel > InstanciateProblem(DataReader &dr, problemMode mode, int contextFlag, EngngModel *_master, bool parallelFlag)
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
OOFEM_EXPORT const char * PRG_HEADER
#define _IFT_StaggeredProblem_prob1
#define _IFT_StaggeredProblem_coupling
#define _IFT_StaggeredProblem_deltat
#define _IFT_StaggeredProblem_maxsteplength
#define _IFT_StaggeredProblem_stepmultiplier
#define _IFT_StaggeredProblem_minsteplength
#define _IFT_StaggeredProblem_reqiterations
#define _IFT_StaggeredProblem_adaptiveStepLength
#define _IFT_StaggeredProblem_endoftimeofinterest
#define _IFT_StaggeredProblem_timeDefinedByProb
#define _IFT_StaggeredProblem_prescribedtimes
#define _IFT_StaggeredProblem_prob3
#define _IFT_StaggeredProblem_adaptivestepsince
#define _IFT_StaggeredProblem_prob2
#define _IFT_StaggeredProblem_dtf
#define VERBOSE_PRINTS(str, str1)