Author: pfg Date: Tue Sep 29 15:04:00 2015 New Revision: 1705873 URL: http://svn.apache.org/viewvc?rev=1705873&view=rev Log: i124091 - Reinstate the check for nonlinearity but turn it into an option.
We only really support a linear solver at this time so the test for non-linearity was actually useful. Make it optional (ON by default) so that we can now override the check and provide a solution. Modified: openoffice/trunk/main/sccomp/source/solver/solver.cxx openoffice/trunk/main/sccomp/source/solver/solver.hrc openoffice/trunk/main/sccomp/source/solver/solver.hxx openoffice/trunk/main/sccomp/source/solver/solver.src Modified: openoffice/trunk/main/sccomp/source/solver/solver.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sccomp/source/solver/solver.cxx?rev=1705873&r1=1705872&r2=1705873&view=diff ============================================================================== --- openoffice/trunk/main/sccomp/source/solver/solver.cxx (original) +++ openoffice/trunk/main/sccomp/source/solver/solver.cxx Tue Sep 29 15:04:00 2015 @@ -58,6 +58,7 @@ using ::rtl::OUString; #define STR_TIMEOUT "Timeout" #define STR_EPSILONLEVEL "EpsilonLevel" #define STR_LIMITBBDEPTH "LimitBBDepth" +#define STR_NONLINEARTEST "NonLinearTest" // ----------------------------------------------------------------------- // Resources from tools are used for translated strings @@ -82,7 +83,8 @@ namespace PROP_INTEGER, PROP_TIMEOUT, PROP_EPSILONLEVEL, - PROP_LIMITBBDEPTH + PROP_LIMITBBDEPTH, + PROP_NONLINEARTEST }; } @@ -146,6 +148,7 @@ SolverComponent::SolverComponent( const mnTimeout( 120 ), mnEpsilonLevel( 0 ), mbLimitBBDepth( sal_True ), + mbNonLinearTest( sal_True ), mbSuccess( sal_False ), mfResultValue( 0.0 ) { @@ -155,6 +158,7 @@ SolverComponent::SolverComponent( const registerProperty( C2U(STR_TIMEOUT), PROP_TIMEOUT, 0, &mnTimeout, getCppuType( &mnTimeout ) ); registerProperty( C2U(STR_EPSILONLEVEL), PROP_EPSILONLEVEL, 0, &mnEpsilonLevel, getCppuType( &mnEpsilonLevel ) ); registerProperty( C2U(STR_LIMITBBDEPTH), PROP_LIMITBBDEPTH, 0, &mbLimitBBDepth, getCppuType( &mbLimitBBDepth ) ); + registerProperty( C2U(STR_NONLINEARTEST), PROP_NONLINEARTEST, 0, &mbNonLinearTest, getCppuType( &mbNonLinearTest ) ); } SolverComponent::~SolverComponent() @@ -214,6 +218,9 @@ OUString SAL_CALL SolverComponent::getPr case PROP_LIMITBBDEPTH: nResId = RID_PROPERTY_LIMITBBDEPTH; break; + case PROP_NONLINEARTEST: + nResId = RID_PROPERTY_NONLINEARTEST; + break; default: { // unknown - leave empty @@ -369,6 +376,16 @@ void SAL_CALL SolverComponent::solve() t double fInitial = aCellsIter->second.front(); double fCoeff = aCellsIter->second.back(); // last appended: coefficient for this variable double fTwo = lcl_GetValue( mxDoc, aCellsIter->first ); + + if ( mbNonLinearTest ) + { + bool bLinear ( sal_True ); + bLinear = rtl::math::approxEqual( fTwo, fInitial + 2.0 * fCoeff ) || + rtl::math::approxEqual( fInitial, fTwo - 2.0 * fCoeff ); + // second comparison is needed in case fTwo is zero + if ( !bLinear ) + maStatus = lcl_GetResourceString( RID_ERROR_NONLINEAR ); + } } lcl_SetValue( mxDoc, *aVarIter, 0.0 ); // set back to zero for examining next variable Modified: openoffice/trunk/main/sccomp/source/solver/solver.hrc URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sccomp/source/solver/solver.hrc?rev=1705873&r1=1705872&r2=1705873&view=diff ============================================================================== --- openoffice/trunk/main/sccomp/source/solver/solver.hrc (original) +++ openoffice/trunk/main/sccomp/source/solver/solver.hrc Tue Sep 29 15:04:00 2015 @@ -31,11 +31,12 @@ #define RID_PROPERTY_TIMEOUT (SOLVER_RESOURCE_START + 3) #define RID_PROPERTY_EPSILONLEVEL (SOLVER_RESOURCE_START + 4) #define RID_PROPERTY_LIMITBBDEPTH (SOLVER_RESOURCE_START + 5) -#define RID_ERROR_NONLINEAR (SOLVER_RESOURCE_START + 6) -#define RID_ERROR_EPSILONLEVEL (SOLVER_RESOURCE_START + 7) -#define RID_ERROR_INFEASIBLE (SOLVER_RESOURCE_START + 8) -#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 9) -#define RID_ERROR_TIMEOUT (SOLVER_RESOURCE_START + 10) +#define RID_PROPERTY_NONLINEARTEST (SOLVER_RESOURCE_START + 6) +#define RID_ERROR_NONLINEAR (SOLVER_RESOURCE_START + 7) +#define RID_ERROR_EPSILONLEVEL (SOLVER_RESOURCE_START + 8) +#define RID_ERROR_INFEASIBLE (SOLVER_RESOURCE_START + 9) +#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 10) +#define RID_ERROR_TIMEOUT (SOLVER_RESOURCE_START + 11) #endif Modified: openoffice/trunk/main/sccomp/source/solver/solver.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sccomp/source/solver/solver.hxx?rev=1705873&r1=1705872&r2=1705873&view=diff ============================================================================== --- openoffice/trunk/main/sccomp/source/solver/solver.hxx (original) +++ openoffice/trunk/main/sccomp/source/solver/solver.hxx Tue Sep 29 15:04:00 2015 @@ -56,6 +56,8 @@ class SolverComponent : public comphelpe sal_Int32 mnTimeout; sal_Int32 mnEpsilonLevel; sal_Bool mbLimitBBDepth; + sal_Bool + mbNonLinearTest; // results sal_Bool mbSuccess; double mfResultValue; Modified: openoffice/trunk/main/sccomp/source/solver/solver.src URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sccomp/source/solver/solver.src?rev=1705873&r1=1705872&r2=1705873&view=diff ============================================================================== --- openoffice/trunk/main/sccomp/source/solver/solver.src (original) +++ openoffice/trunk/main/sccomp/source/solver/solver.src Tue Sep 29 15:04:00 2015 @@ -48,10 +48,13 @@ String RID_PROPERTY_LIMITBBDEPTH { Text [ en-US ] = "Limit branch-and-bound depth"; }; - +String RID_PROPERTY_NONLINEARTEST +{ + Text [ en-US ] = "Run strict linearity checks"; +}; String RID_ERROR_NONLINEAR { - Text [ en-US ] = "The model is not linear."; + Text [ en-US ] = "The model seems nonlinear (see options)."; }; String RID_ERROR_EPSILONLEVEL {