TEUCHOS_UNIT_TEST( Rythmos_TimeRange, copyAndScaleInvalid ) { TimeRange<double> tr; TimeRange<double> newTr = tr.copyAndScale(5.0); TEST_EQUALITY_CONST( newTr.isValid(), false ); TEST_EQUALITY( newTr.lower(), tr.lower() ); TEST_EQUALITY( newTr.upper(), tr.upper() ); TEST_EQUALITY( newTr.length(), tr.length() ); }
TEUCHOS_UNIT_TEST( Rythmos_TimeRange, copyAndScale ) { TimeRange<double> tr(1.0,2.0); TimeRange<double> newTr = tr.copyAndScale(5.0); TEST_EQUALITY_CONST( newTr.isValid(), true ); TEST_EQUALITY_CONST( newTr.lower(), 5.0 ); TEST_EQUALITY_CONST( newTr.upper(), 10.0 ); TEST_EQUALITY_CONST( newTr.length(), 5.0 ); }
void ImplicitBDFStepperRampingStepControl<Scalar>::initialize( const StepperBase<Scalar>& stepper) { // Initialize can be called from the stepper when setInitialCondition // is called. using Teuchos::as; typedef Teuchos::ScalarTraits<Scalar> ST; using Thyra::createMember; // Set initial time: TimeRange<Scalar> stepperRange = stepper.getTimeRange(); TEUCHOS_TEST_FOR_EXCEPTION( !stepperRange.isValid(), std::logic_error, "Error, Stepper does not have valid time range for initialization " "of ImplicitBDFStepperRampingStepControl!\n"); if (is_null(parameterList_)) { RCP<Teuchos::ParameterList> emptyParameterList = Teuchos::rcp(new Teuchos::ParameterList); this->setParameterList(emptyParameterList); } if (is_null(errWtVecCalc_)) { RCP<ImplicitBDFStepperErrWtVecCalc<Scalar> > IBDFErrWtVecCalc = rcp(new ImplicitBDFStepperErrWtVecCalc<Scalar>()); errWtVecCalc_ = IBDFErrWtVecCalc; } stepControlState_ = UNINITIALIZED; requestedStepSize_ = Scalar(-1.0); currentStepSize_ = initialStepSize_; currentOrder_ = 1; nextStepSize_ = initialStepSize_; nextOrder_ = 1; numberOfSteps_ = 0; totalNumberOfFailedSteps_ = 0; countOfConstantStepsAfterFailure_ = 0; if (is_null(delta_)) { delta_ = createMember(stepper.get_x_space()); } if (is_null(errWtVec_)) { errWtVec_ = createMember(stepper.get_x_space()); } V_S(delta_.ptr(),ST::zero()); if ( doOutput_(Teuchos::VERB_HIGH) ) { RCP<Teuchos::FancyOStream> out = this->getOStream(); Teuchos::OSTab ostab(out,1,"initialize"); *out << "currentOrder_ = " << currentOrder_ << std::endl; *out << "numberOfSteps_ = " << numberOfSteps_ << std::endl; } setStepControlState_(BEFORE_FIRST_STEP); }
TEUCHOS_UNIT_TEST( Rythmos_TimeRange, newTimeRange ) { TimeRange<double> tr; // it should be initialized as [0,-1] TEST_EQUALITY_CONST( tr.isValid(), false ); TEST_COMPARE( tr.lower(), >, tr.upper() ); TEST_EQUALITY_CONST( tr.isInRange(0.5), false ); TEST_EQUALITY_CONST( tr.isInRange(0.0), false ); TEST_EQUALITY_CONST( tr.isInRange(-1.0), false ); TEST_EQUALITY_CONST( tr.length(), -1.0 ); }
TEUCHOS_UNIT_TEST( Rythmos_ExplicitRKStepper, getTimeRange ) { { RCP<SinCosModel> model = sinCosModel(false); RCP<ExplicitRKStepper<double> > stepper = explicitRKStepper<double>(model); Thyra::ModelEvaluatorBase::InArgs<double> ic = model->getNominalValues(); stepper->setInitialCondition(ic); TimeRange<double> tr = stepper->getTimeRange(); TEST_EQUALITY_CONST( tr.isValid(), true ); TEST_EQUALITY_CONST( tr.lower(), 0.0 ); TEST_EQUALITY_CONST( tr.upper(), 0.0 ); TEST_EQUALITY_CONST( tr.length(), 0.0 ); } { RCP<SinCosModel> model = sinCosModel(false); RCP<ExplicitRKStepper<double> > stepper = explicitRKStepper<double>(); stepper->setModel(model); TimeRange<double> tr; TEST_NOTHROW( tr = stepper->getTimeRange() ); TEST_EQUALITY_CONST( tr.isValid(), false ); } }
TEUCHOS_UNIT_TEST( Rythmos_TimeRange, invalidTimeRange ) { TimeRange<double> tr = invalidTimeRange<double>(); TEST_EQUALITY_CONST( tr.isValid(), false ); TEST_COMPARE( tr.lower(), >, tr.upper() ); TEST_EQUALITY_CONST( tr.isInRange(0.5), false ); }
TEUCHOS_UNIT_TEST( Rythmos_TimeRange, nonMemberConstructor ) { TimeRange<double> tr = timeRange(1.25,3.45); TEST_EQUALITY_CONST( tr.isValid(), true ); TEST_EQUALITY_CONST( tr.lower(), 1.25 ); TEST_EQUALITY_CONST( tr.upper(), 3.45 ); }