TimeStep * NonStationaryTransportProblem :: giveNextStep() { int istep = this->giveNumberOfFirstStep(); double totalTime = this->initT; double intrinsicTime; StateCounterType counter = 1; if ( currentStep ) { istep = currentStep->giveNumber() + 1; totalTime = currentStep->giveTargetTime() + giveDeltaT(istep); counter = currentStep->giveSolutionStateCounter() + 1; } else { // first step -> generate initial step currentStep.reset( new TimeStep( *giveSolutionStepWhenIcApply() ) ); } previousStep = std :: move(currentStep); currentStep.reset( new TimeStep(istep, this, 1, totalTime, this->giveDeltaT ( istep ), counter) ); //set intrinsic time to time of integration intrinsicTime = currentStep->giveTargetTime(); // intrinsicTime = previousStep->giveTargetTime() + this->alpha *this->giveDeltaT(istep); currentStep->setIntrinsicTime(intrinsicTime); return currentStep.get(); }
TimeStep * NonStationaryTransportProblem :: giveNextStep() { int istep = this->giveNumberOfFirstStep(); double totalTime = this->initT; double intrinsicTime; StateCounterType counter = 1; delete previousStep; if ( currentStep != NULL ) { istep = currentStep->giveNumber() + 1; totalTime = currentStep->giveTargetTime() + giveDeltaT(istep); counter = currentStep->giveSolutionStateCounter() + 1; } else { // first step -> generate initial step currentStep = new TimeStep( *giveSolutionStepWhenIcApply() ); } previousStep = currentStep; currentStep = new TimeStep(istep, this, 1, totalTime, this->giveDeltaT(istep), counter); //set intrinsic time to time of integration intrinsicTime = previousStep->giveTargetTime() + this->alpha *this->giveDeltaT(istep); currentStep->setIntrinsicTime(intrinsicTime); // time and dt variables are set eq to 0 for statics - has no meaning return currentStep; }
TimeStep * CBS :: giveNextStep() { double dt = deltaT; if ( !currentStep ) { // first step -> generate initial step currentStep.reset( new TimeStep( *giveSolutionStepWhenIcApply() ) ); } previousStep = std :: move(currentStep); Domain *domain = this->giveDomain(1); // check for critical time step for ( auto &elem : domain->giveElements() ) { dt = min( dt, static_cast< CBSElement & >( *elem ).computeCriticalTimeStep(previousStep.get()) ); } dt *= 0.6; dt = max(dt, minDeltaT); dt /= this->giveVariableScale(VST_Time); currentStep.reset( new TimeStep(*previousStep, dt) ); OOFEM_LOG_INFO( "SolutionStep %d : t = %e, dt = %e\n", currentStep->giveNumber(), currentStep->giveTargetTime() * this->giveVariableScale(VST_Time), dt * this->giveVariableScale(VST_Time) ); return currentStep.get(); }
TimeStep *TransientTransportProblem :: giveNextStep() { if ( !currentStep ) { // first step -> generate initial step currentStep.reset( new TimeStep( *giveSolutionStepWhenIcApply() ) ); } previousStep = std :: move(currentStep); currentStep.reset( new TimeStep(*previousStep, this->deltaT) ); return currentStep.get(); }
TimeStep *TransientTransportProblem :: giveNextStep() { if ( !currentStep ) { // first step -> generate initial step currentStep.reset( new TimeStep( *giveSolutionStepWhenIcApply() ) ); } double dt = this->giveDeltaT(currentStep->giveNumber()+1); previousStep = std :: move(currentStep); currentStep.reset( new TimeStep(*previousStep, dt) ); currentStep->setIntrinsicTime(previousStep->giveTargetTime() + alpha * dt); return currentStep.get(); }
TimeStep *NonLinearStatic :: giveNextStep() { int istep = giveNumberOfFirstStep(); int mStepNum = 1; double totalTime = 0.0; StateCounterType counter = 1; double deltaTtmp = deltaT; //do not increase deltaT on microproblem if ( pScale == microScale ) { deltaTtmp = 0.; } if ( currentStep ) { totalTime = currentStep->giveTargetTime() + deltaTtmp; istep = currentStep->giveNumber() + 1; counter = currentStep->giveSolutionStateCounter() + 1; mStepNum = currentStep->giveMetaStepNumber(); if ( !this->giveMetaStep(mStepNum)->isStepValid(istep) ) { mStepNum++; if ( mStepNum > nMetaSteps ) { OOFEM_ERROR("no next step available, mStepNum=%d > nMetaSteps=%d", mStepNum, nMetaSteps); } } } else { // first step -> generate initial step TimeStep *newStep = giveSolutionStepWhenIcApply(); currentStep.reset(new TimeStep(*newStep)); } previousStep = std :: move(currentStep); currentStep.reset( new TimeStep(istep, this, mStepNum, totalTime, deltaTtmp, counter) ); // dt variable are set eq to 0 for statics - has no meaning // *Wrong* It has meaning for viscoelastic materials. return currentStep.get(); }
TimeStep * SUPG :: giveNextStep() { double dt = deltaT; Domain *domain = this->giveDomain(1); if ( !currentStep ) { // first step -> generate initial step currentStep.reset( new TimeStep( *giveSolutionStepWhenIcApply() ) ); } previousStep = std :: move(currentStep); if ( deltaTF ) { dt *= domain->giveFunction(deltaTF)->evaluateAtTime(previousStep->giveNumber() + 1); } // check for critical time step for ( auto &elem : domain->giveElements() ) { dt = min( dt, static_cast< SUPGElement & >( *elem ).computeCriticalTimeStep(previousStep.get()) ); } if ( materialInterface ) { dt = min( dt, materialInterface->computeCriticalTimeStep(previousStep.get()) ); } // dt *= 0.6; dt /= this->giveVariableScale(VST_Time); currentStep.reset( new TimeStep(*previousStep, dt) ); OOFEM_LOG_INFO( "SolutionStep %d : t = %e, dt = %e\n", currentStep->giveNumber(), currentStep->giveTargetTime() * this->giveVariableScale(VST_Time), dt * this->giveVariableScale(VST_Time) ); return currentStep.get(); }