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
{