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
 {


Reply via email to